import type { TranslationKey } from './zh-CN'

const en: Record<TranslationKey, string> = {
  // ── Common ──────────────────────────────────────────────
  save: 'Save',
  cancel: 'Cancel',
  delete: 'Delete',
  confirm: 'Confirm',
  edit: 'Edit',
  create: 'Create',
  search: 'Search',
  loading: 'Loading...',
  close: 'Close',
  back: 'Back',
  copy: 'Copy',
  refresh: 'Refresh',
  export: 'Export',
  noData: 'No data',
  confirmDelete: 'Confirm Delete',
  operationSuccess: 'Operation successful',
  operationFailed: 'Operation failed',
  optional: '(optional)',
  viewDetails: 'View Details',
  start: 'Start',
  stop: 'Stop',
  restart: 'Restart',
  actions: 'Actions',
  description: 'Description',
  name: 'Name',
  status: 'Status',
  version: 'Version',
  submit: 'Submit',
  reset: 'Reset',
  add: 'Add',
  remove: 'Remove',
  all: 'All',
  install: 'Install',
  uninstall: 'Uninstall',
  upgrade: 'Upgrade',
  publish: 'Publish',
  default: 'Default',
  custom: 'Custom',
  enabled: 'Enabled',
  disabled: 'Disabled',
  failed: 'Failed',
  success: 'Success',
  denied: 'Denied',
  unsaved: 'Unsaved',
  saved: 'Saved',
  undo: 'Undo',
  none: 'None',

  // ── Time ────────────────────────────────────────────────
  'time.justNow': 'Just now',
  'time.minutesAgo': '{n} min ago',
  'time.hoursAgo': '{n}h ago',
  'time.daysAgo': '{n}d ago',
  'time.uptimeDaysHours': '{d}d {h}h',
  'time.uptimeHoursMinutes': '{h}h {m}m',
  'time.uptimeMinutes': '{m}m',

  // ── Nav ─────────────────────────────────────────────────
  'nav.workspace': 'Workspace',
  'nav.dashboard': 'Dashboard',
  'nav.chat': 'Chat',
  'nav.management': 'Management',
  'nav.instances': 'Instances',
  'nav.agents': 'Agents',
  'nav.skills': 'Skills',
  'nav.toolbox': 'Toolbox',
  'nav.publicOpinion': 'Public Opinion',
  'nav.organization': 'Organization',
  'nav.users': 'Users',
  'nav.departments': 'Departments',
  'nav.system': 'System',
  'nav.resources': 'Resources',
  'nav.logs': 'Audit Logs',
  'nav.subtitle': 'Enterprise Platform',
  'nav.profile': 'Profile',
  'nav.logout': 'Logout',
  'nav.logoutFailed': 'Logout failed',
  'nav.user': 'User',

  // ── Page Titles ─────────────────────────────────────────
  'page.dashboard': 'Dashboard',
  'page.chat': 'Chat',
  'page.instances': 'Instances',
  'page.agents': 'Agents',
  'page.skills': 'Skills',
  'page.toolbox': 'Toolbox',
  'page.publicOpinion': 'Public Opinion',
  'page.users': 'Users',
  'page.departments': 'Departments',
  'page.resources': 'Resources',
  'page.models': 'Models',
  'page.approvals': 'Approvals',
  'page.logs': 'Audit Logs',
  'page.settings': 'Settings',
  'page.advancedConfig': 'Advanced Config',
  'page.skillDetail': 'Skill Details',

  // ── Theme ───────────────────────────────────────────────
  'theme.toggle': 'Toggle theme',

  // ── Auth ────────────────────────────────────────────────
  'auth.loginTitle': 'Sign in to TeamClaw',
  'auth.loginSubtitle': 'Enter your credentials to continue',
  'auth.email': 'Email',
  'auth.password': 'Password',
  'auth.passwordPlaceholder': 'Enter password',
  'auth.loggingIn': 'Signing in...',
  'auth.login': 'Sign In',
  'auth.loginSuccess': 'Login successful',
  'auth.loginFailed': 'Login failed, please try again',
  'auth.networkError': 'Network error, please check your connection',
  'auth.noAccount': "Don't have an account?",
  'auth.registerNow': 'Register now',
  'auth.registerTitle': 'Create Account',
  'auth.registerSubtitle': 'Fill in the information below to create a TeamClaw account',
  'auth.name': 'Name',
  'auth.namePlaceholder': 'Enter name',
  'auth.setPassword': 'Set password',
  'auth.confirmPassword': 'Confirm password',
  'auth.confirmPasswordPlaceholder': 'Re-enter password',
  'auth.registering': 'Registering...',
  'auth.register': 'Register',
  'auth.registerSuccess': 'Registration successful',
  'auth.registerFailed': 'Registration failed, please try again',
  'auth.hasAccount': 'Already have an account?',
  'auth.loginNow': 'Sign in now',
  'auth.emailInvalid': 'Please enter a valid email address',
  'auth.passwordRequired': 'Please enter a password',
  'auth.nameMinLength': 'Name must be at least 2 characters',
  'auth.passwordMinLength': 'Password must be at least 8 characters',
  'auth.passwordLowercase': 'Must contain a lowercase letter',
  'auth.passwordUppercase': 'Must contain an uppercase letter',
  'auth.passwordDigit': 'Must contain a digit',
  'auth.confirmPasswordRequired': 'Please confirm your password',
  'auth.passwordMismatch': 'Passwords do not match',
  'auth.strengthChars': 'At least 8 characters',
  'auth.strengthLowercase': 'Contains lowercase letter',
  'auth.strengthUppercase': 'Contains uppercase letter',
  'auth.strengthDigit': 'Contains digit',
  'auth.tagline': 'Enterprise OpenClaw\nManagement Platform',
  'auth.taglineDesc':
    'Manage Instances, Agents, and Skills in one place to empower team collaboration.',

  // ── Instance ────────────────────────────────────────────
  'instance.management': 'Instance Management',
  'instance.managementDesc': 'Manage and monitor all OpenClaw instances',
  'instance.create': 'Create Instance',
  'instance.createTitle': 'Create Instance',
  'instance.createDesc': 'Deploy a new OpenClaw instance or connect to an existing Gateway',
  'instance.dockerContainer': 'Docker Container',
  'instance.externalGateway': 'External Gateway',
  'instance.instanceName': 'Instance Name',
  'instance.nameHint': 'Only letters, numbers, underscores, and hyphens',
  'instance.dockerImage': 'Docker Image',
  'instance.dockerImageHint': 'Leave empty to use the default image',
  'instance.modelConfig': 'Model Configuration',
  'instance.customApiKey': 'Custom API Key',
  'instance.useGlobalKey': 'Defaults to the default provider / model from Resources',
  'instance.customApiKeyOverride': 'Custom API Key (override default)',
  'instance.advancedOptions': 'Advanced Options',
  'instance.pullLatest': 'Pull Latest Image',
  'instance.pullLatestHint': 'Pull the latest version from Docker Hub, otherwise use local cache',
  'instance.memoryLimit': 'Memory Limit (MB)',
  'instance.restartPolicy': 'Restart Policy',
  'instance.gatewayToken': 'Gateway Token',
  'instance.gatewayTokenPlaceholder': 'Connection token',
  'instance.externalGatewayHint': 'Connect to a running external OpenClaw Gateway instance',
  'instance.createAndDeploy': 'Create & Deploy',
  'instance.connect': 'Connect',
  'instance.createSuccess': 'Instance created successfully',
  'instance.dockerStarting': 'Container started, connecting to Gateway...',
  'instance.externalConnected': 'Connected to external Gateway',
  'instance.createFailed': 'Creation failed',
  'instance.editTitle': 'Edit Instance',
  'instance.editDesc': 'Modify instance configuration. Leave Token field empty to keep unchanged.',
  'instance.tokenKeepEmpty': 'Leave empty to keep current',
  'instance.updateSuccess': 'Instance updated successfully',
  'instance.updateFailed': 'Update failed',
  'instance.deleteTitle': 'Delete Instance',
  'instance.deleteCannotUndo': 'This action cannot be undone',
  'instance.deleteConfirmMsg':
    'Are you sure you want to delete instance {name}? This will stop the container, disconnect, and permanently delete the record.',
  'instance.deletedMsg': 'Instance "{name}" deleted',
  'instance.deleteFailed': 'Deletion failed',
  'instance.noInstances': 'No instances',
  'instance.noInstancesHint':
    'No OpenClaw instances have been created yet. Click "Create Instance" above to get started.',
  'instance.online': 'Online',
  'instance.offline': 'Offline',
  'instance.abnormal': 'Abnormal',
  'instance.statusRunning': 'Running',
  'instance.statusStopped': 'Stopped',
  'instance.statusDegraded': 'Degraded',
  'instance.statusError': 'Error',
  'instance.statusInitializing': 'Initializing',
  'instance.statusStarting': 'Starting',
  'instance.statusStopping': 'Stopping',
  'instance.tableName': 'Instance Name',
  'instance.tableStatus': 'Status',
  'instance.tableSessions': 'Sessions',
  'instance.tableVersion': 'Version',
  'instance.tableLastCheck': 'Last Check',
  'instance.tableConsole': 'Console',
  'instance.tableConnectionAddr': 'Connection',
  'instance.overviewTab': 'Overview',
  'instance.logsTab': 'Logs',
  'instance.openConsole': 'Open OpenClaw Console',
  'instance.openConfigEditor': 'Open Config Editor',
  'instance.connectionAddr': 'Connection Address',
  'instance.image': 'Image',
  'instance.containerId': 'Container ID',
  'instance.externalManaged': 'Externally Managed',
  'instance.createdAt': 'Created',
  'instance.lastCheck': 'Last Check',
  'instance.healthStatus': 'Health Status',
  'instance.checking': 'Checking...',
  'instance.normal': 'Normal',
  'instance.uptime': 'Uptime',
  'instance.sessionCount': 'Sessions',
  'instance.noHealthData': 'No health data',
  'instance.cannotOpenConsole': 'Cannot open console',
  'instance.logsRecent': 'Last 300 lines',
  'instance.logsError': 'Failed to fetch logs',
  'instance.noLogs': 'No logs',
  'instance.productionMain': 'Production main instance',

  // ── Agent ───────────────────────────────────────────────
  'agent.management': 'Agent Management',
  'agent.managementDesc': 'View and manage AI Agents across all instances',
  'agent.createAgent': 'Create Agent',
  'agent.createTitle': 'Create Agent',
  'agent.createDesc': 'Create a new Agent on a target instance',
  'agent.targetInstance': 'Target Instance',
  'agent.selectInstance': 'Select instance',
  'agent.agentIdHint': 'Only lowercase letters, numbers, hyphens, and underscores',
  'agent.visibilityScope': 'Visibility Scope',
  'agent.workspace': 'Workspace',
  'agent.workspaceSuggest': 'Suggested: {path}',
  'agent.workspaceHintAutoRecommend': 'Workspace will be auto-suggested after entering Agent ID',
  'agent.createdMsg': 'Agent "{name}" created successfully',
  'agent.deleteTitle': 'Delete Agent',
  'agent.deleteDesc': 'This will remove the Agent from the instance configuration',
  'agent.deleteConfirmMsg':
    'Are you sure you want to delete Agent {name}? Its configuration and workspace directory will be removed from instance {instance}.',
  'agent.deletedMsg': 'Agent "{name}" deleted',
  'agent.noAgents': 'No Agents',
  'agent.noAgentsHint':
    'No Agents available. Make sure at least one instance is connected, or click "Create Agent" to add one.',
  'agent.total': 'Total',
  'agent.instances': 'Instances',
  'agent.allCategories': 'All Categories',
  'agent.allInstances': 'All Instances',
  'agent.categoryDefault': 'Global',
  'agent.categoryDepartment': 'Department',
  'agent.categoryPersonal': 'Personal',
  'agent.categoryDefaultDesc': 'Visible to all users',
  'agent.categoryDepartmentDesc': 'Visible to department members only',
  'agent.categoryPersonalDesc': 'Visible to yourself only',
  'agent.isDefault': 'Default',
  'agent.cloneTitle': 'Clone Agent',
  'agent.cloneDesc': 'Copy Agent configuration and files to another instance',
  'agent.sourceAgent': 'Source Agent',
  'agent.cloneToInstance': 'Clone to another instance',
  'agent.noOtherInstances': 'No other instances available. Please connect more instances first.',
  'agent.selectTargetInstance': 'Select target instance',
  'agent.newAgentId': 'New Agent ID',
  'agent.agentIdValidation':
    'Only lowercase letters, numbers, hyphens, underscores; must start with a letter or number',
  'agent.copyWorkFiles': 'Copy workspace files',
  'agent.copyWorkFilesDesc': 'Copy files from the source Agent workspace to the target',
  'agent.clonedMsg': 'Agent "{name}" cloned successfully{files}',
  'agent.withFiles': ' (with files)',
  'agent.clone': 'Clone',
  'agent.cloneFailed': 'Clone failed',
  'agent.defaultsTitle': 'Agent Default Config',
  'agent.defaultsInstance': 'Instance: {name}',
  'agent.modelConfig': 'Model Configuration',
  'agent.primaryModel': 'Primary Model',
  'agent.thinkingMode': 'Thinking Mode',
  'agent.notSet': 'Not set',
  'agent.sandboxConfig': 'Sandbox Configuration',
  'agent.sandboxMode': 'Mode',
  'agent.sandboxScope': 'Scope',
  'agent.workspacePermission': 'Workspace Permission',
  'agent.rwReadWrite': 'rw (Read/Write)',
  'agent.roReadOnly': 'ro (Read Only)',
  'agent.toolsConfig': 'Tool Configuration',
  'agent.allowTools': 'Allowed Tools',
  'agent.denyTools': 'Denied Tools',
  'agent.subAgent': 'Sub Agent',
  'agent.subAgentModel': 'Model',
  'agent.maxConcurrency': 'Max Concurrency',
  'agent.sessionConfig': 'Session Configuration',
  'agent.dmScope': 'DM Scope',
  'agent.bootstrapMaxChars': 'Bootstrap Max Chars',
  'agent.saveDefaults': 'Save Default Config',
  'agent.defaultsUpdated': 'Default config updated',
  'agent.classifyTitle': 'Change Category',
  'agent.selectCategory': 'Select Category',
  'agent.categoryUpdated': 'Category updated',
  'agent.overviewTab': 'Overview',
  'agent.editInConfigEditor': 'Edit in Config Editor',
  'agent.defaultValue': 'Default',
  'agent.modelSection': 'Models',
  'agent.sandboxSection': 'Sandbox',
  'agent.toolsSection': 'Tools',
  'agent.sessionSection': 'Session',
  'agent.notConfigured': 'Not configured',
  'agent.filesTab': 'Files',
  'agent.cannotLoadDetails': 'Failed to load Agent details',
  'agent.workspaceLabel': 'Workspace',
  'agent.primaryModelLabel': 'Primary Model',
  'agent.sandboxModeLabel': 'Sandbox Mode',
  'agent.subAgentConcurrency': 'Sub Agent Concurrency',
  'agent.dmScopeLabel': 'DM Scope',
  'agent.featureTags': 'Feature Tags',
  'agent.isDefaultAgent': 'Default Agent',
  'agent.thinkingLabel': 'Thinking: {mode}',
  'agent.allowToolsCount': '{n} allowed tools',
  'agent.denyToolsCount': '{n} denied tools',
  'agent.bindingsCount': '{n} route bindings',
  'agent.fileContentEmpty': 'File content is empty',
  'agent.unsavedChanges': 'Unsaved changes',
  'agent.quickCreate': 'Quick Create',
  'agent.parentDir': 'Parent Directory',
  'agent.dirEmpty': 'Directory is empty',
  'agent.fileCreatedMsg': '{name} created',
  'agent.fileSaved': 'File saved',
  'agent.fileSaveFailed': 'Save failed',
  // Agent file descriptions
  'agent.fileAgentsMd': 'Operation instructions & behavior rules',
  'agent.fileSoulMd': 'Personality, tone & boundaries',
  'agent.fileMemoryMd': 'Long-term memory',
  'agent.fileIdentityMd': 'Name, emoji & style',
  'agent.fileUserMd': 'User identity preferences',
  'agent.fileToolsMd': 'Tool documentation',
  'agent.fileHeartbeatMd': 'Heartbeat checklist',
  'agent.fileBootMd': 'Boot ceremony checklist',

  // ── Chat ────────────────────────────────────────────────
  'chat.title': 'Chat',
  'chat.welcome': 'TeamClaw Chat',
  'chat.welcomeHint': 'Select an Agent from the sidebar to start chatting',
  'chat.selectAgentHint': 'Select an Agent to start',
  'chat.agents': 'Agents',
  'chat.recentSessions': 'Recent Sessions',
  'chat.noSessions': 'No sessions yet',
  'chat.sessionDeleted': 'Session deleted',
  'chat.noAgents': 'No Agents available',
  'chat.newConversation': 'New Conversation',
  'chat.newConversationTitle': 'New Conversation',
  'chat.newConversationDesc': 'Start a new conversation? The current one will be saved to history.',
  'chat.confirmCreate': 'Confirm',
  'chat.newConversationCreated': 'New conversation created',
  'chat.newConversationFailed': 'Failed to create new conversation',
  'chat.clearContext': 'Clear Context',
  'chat.clearContextTitle': 'Clear Context',
  'chat.clearContextDesc':
    'Current messages will be saved as a snapshot. The AI will restart from a blank context. Chat history will not be lost.',
  'chat.confirmClear': 'Confirm',
  'chat.contextCleared': 'Context cleared',
  'chat.clearContextFailed': 'Failed to clear context',
  'chat.runtimeLabel': 'Runtime',
  'chat.runtimeOpenclaw': 'OpenClaw',
  'chat.runtimePi': 'pi',
  'chat.runtimeNormal': 'Normal',
  'chat.runtimeFast': 'Fast',
  'chat.modelLabel': 'Current model',
  'chat.piUnavailable': 'pi runtime unavailable',
  'chat.piConnectionLost': 'Pi agent connection lost',
  'chat.inputPlaceholder': 'Type a message…',
  'chat.uploadFile': 'Upload file',
  'chat.kbMount': 'Mount KB',
  'chat.kbUnmount': 'Unmount',
  'chat.kbSelectorPlaceholder': 'Search Knowledge Bases...',
  'chat.kbCount': '{n} KBs',
  'chat.kbSources': 'Sources',
  'chat.pdfPreview.title': 'PDF preview',
  'chat.pdfPreview.page': 'p.{n}',
  'chat.pdfPreview.openHint': 'Open this page',
  'chat.pdfPreview.loadFailed': 'PDF load failed',
  'chat.pdfPreview.loading': 'Loading PDF...',
  'chat.kbNoResults': 'No relevant knowledge found',
  'chat.kbSearchFailed': 'KB query failed',
  'chat.kbMaxReached': 'Maximum {n} KBs',
  'chat.kbEmpty': 'No Knowledge Bases available',
  'chat.kbAutoRules': 'Rules (auto)',
  'chat.kbCategoryFilter': 'Category',
  'chat.fileTooLarge': 'File "{name}" exceeds size limit ({limit})',
  'chat.maxAttachments': 'Maximum of 5 attachments allowed',
  'chat.attachment': '(attachment)',
  'chat.thinking': 'Thinking',
  'chat.thinkingN': 'Thinking ×{n}',
  'chat.toolInput': 'Input',
  'chat.toolOutput': 'Output',
  'chat.processSteps': '{n} steps',
  'chat.queued': 'Queued',
  'chat.imageAlt': 'Image',
  'chat.downloadImage': 'Download image',
  'chat.contextRestart': 'AI context restarted from here',
  'chat.contextReset': 'Context reset',
  'chat.loadingHistory': 'Loading history...',
  'chat.gatewayUnreachable': 'Gateway connection lost. Refresh to retry.',
  'chat.sessionLost': 'Session expired (gateway restarted). Your chat history is preserved below.',
  'chat.sessionRetry': 'Retry',
  'chat.sessionNewConversation': 'New conversation',
  'chat.department': 'Department',
  'chat.personal': 'Personal',
  'chat.onlineStatus': 'Online',
  'chat.export': 'Export',
  'chat.exportMode': 'Export Mode',
  'chat.exportPdf': 'Export PDF',
  'chat.exportPng': 'Export PNG',
  'chat.exportCancel': 'Cancel Export',
  'chat.exportSelected': '{n} selected',
  'chat.exportGenerating': 'Generating...',
  'chat.exportDonePng': 'PNG downloaded!',
  'chat.exportDonePdf': 'PDF downloaded!',
  'chat.exportFailed': 'Failed: ',
  'chat.exportFooter': '@TeamClaw AI-generated, for reference only',

  // ── Skill ───────────────────────────────────────────────
  'skill.management': 'Skills Management',
  'skill.managementDesc': 'Manage skill plugins to extend Agent capabilities',
  'skill.createSkill': 'Create Skill',
  'skill.createTitle': 'Create Skill',
  'skill.createDesc': 'Create a local Skill, import a folder, or pull from ClawHub',
  'skill.localCreate': 'Local Create',
  'skill.localImport': 'Local Import',
  'skill.clawHubPull': 'ClawHub Pull',
  'skill.skillName': 'Name',
  'skill.skillNamePlaceholder': 'My Skill',
  'skill.icon': 'Icon',
  'skill.clearIcon': 'Clear',
  'skill.slugHint':
    'Lowercase letters, numbers, hyphens, and underscores; used as directory name and URL',
  'skill.descriptionLabel': 'Description',
  'skill.descriptionPlaceholder': 'Describe what this Skill does...',
  'skill.tags': 'Tags',
  'skill.tagsPlaceholder': 'Type a tag and press Enter',
  'skill.addTag': 'Add',
  'skill.selectDepartment': 'Select Department',
  'skill.noDeptAutoAssign': 'If not selected, it will be assigned to your department automatically',
  'skill.createdMsg': 'Skill "{name}" created successfully',
  'skill.importFolder': 'Select Skill Folder',
  'skill.importFolderHint': 'Choose a standard Skill folder containing SKILL.md',
  'skill.chooseFolder': 'Choose Folder',
  'skill.importFolderReady': 'Read folder "{name}"',
  'skill.importFolderSummary': '{count} files, about {size} KB',
  'skill.importSkillMdFound': 'Entry document found',
  'skill.importButton': 'Import',
  'skill.importedMsg': 'Skill "{name}" imported successfully',
  'skill.importMissingSkillMd': 'Imported folder root must contain SKILL.md',
  'skill.importTooManyFiles': 'Too many files; maximum is {count}',
  'skill.importTooLarge': 'Folder is too large; keep it under 20 MB',
  'skill.importReadFailed': 'Failed to read folder',
  'skill.directPull': 'Direct Pull',
  'skill.directPullPlaceholder': 'owner/skill-name or ClawHub URL',
  'skill.pull': 'Pull',
  'skill.directPullHint':
    'e.g.: ChocomintX/xiaohongshutools or https://clawhub.ai/ChocomintX/xiaohongshutools',
  'skill.orSearch': 'Or Search',
  'skill.searchPlaceholder': 'Search keywords or paste ClawHub link...',
  'skill.searchButton': 'Search',
  'skill.searchHint': 'Enter keywords to search or paste a ClawHub link to pull directly',
  'skill.searchNoResult': 'No results found. Try the direct pull below.',
  'skill.searchNoMatch': 'No matching Skills found',
  'skill.searchFailed': 'Search failed',
  'skill.pulledMsg': 'Skill "{name}" pulled successfully',
  'skill.pullFailed': 'Pull failed',
  'skill.editTitle': 'Edit Skill Info',
  'skill.editDesc': 'Modify name, slug, description, icon, and tags',
  'skill.slugChangeWarning': 'Changing slug will rename the file directory: {from} → {to}',
  'skill.updatedMsg': 'Skill info updated',
  'skill.publishTitle': 'Publish New Version',
  'skill.publishCurrentVersion': 'Current version: v{version}',
  'skill.versionNumber': 'Version Number',
  'skill.versionHint': 'Use x.y.z semantic versioning format',
  'skill.changelog': 'Changelog',
  'skill.changelogPlaceholder': 'Describe the changes in this version...',
  'skill.publishButton': 'Publish',
  'skill.publishedMsg': 'Version v{version} published successfully',
  'skill.publishFailed': 'Publish failed',
  'skill.installTitle': 'Install Skill',
  'skill.installDesc': 'Install {name} (v{version}) to an Agent',
  'skill.targetInstance': 'Target Instance',
  'skill.targetAgent': 'Target Agent',
  'skill.selectAgent': 'Select Agent',
  'skill.selectInstanceFirst': 'Please select an instance first',
  'skill.installPath': 'Install Path',
  'skill.installWorkspace': 'Workspace',
  'skill.installWorkspaceHint': 'Only effective within the workspace',
  'skill.installGlobal': 'Global',
  'skill.installGlobalHint': 'Effective globally for this Agent',
  'skill.installedMsg': 'Skill "{name}" installed successfully',
  'skill.installFailed': 'Install failed',
  'skill.envVarsRequired':
    'This skill requires environment variables to run: {vars}. Please configure them on your OpenClaw instance with: "{cmd}"',
  'skill.setApiKey': 'Set API Key',
  'skill.apiKeySaved': 'API Key saved',
  'skill.noSkills': 'No Skills',
  'skill.noSkillsHint':
    'No Skills have been created yet. Click "Create Skill" to build custom skills, or pull community skills from ClawHub.',
  'skill.total': 'Total',
  'skill.installed': 'Installed',
  'skill.searchSkills': 'Search Skills...',
  'skill.allCategories': 'All Categories',
  'skill.allSources': 'All Sources',
  'skill.sourceLocal': 'Local',
  'skill.sourceInstance': 'Instance',
  'skill.departmentCount': '{n} departments',
  'skill.infoTab': 'Info',
  'skill.installTab': 'Install',
  'skill.hasNewVersion': 'New version v{version} available',
  'skill.upToDate': 'Up to date',
  'skill.checkUpdate': 'Check Updates',
  'skill.upgradeCount': 'Upgrade({n})',
  'skill.editButton': 'Edit',
  'skill.publishVersion': 'Publish Version',
  'skill.selectFileToEdit': 'Select a file to start editing',
  'skill.unsavedIndicator': '● Unsaved',
  'skill.fileSaved': 'File saved',
  'skill.fileSaveFailed': 'Save failed',
  'skill.files': 'Files',
  'skill.backToRoot': '← Back to root',
  'skill.filenamePlaceholder': 'Filename...',
  'skill.fileCreated': 'File {name} created',
  'skill.cannotDeleteSkillMd': 'SKILL.md cannot be deleted',
  'skill.fileDeleted': '{name} deleted',
  'skill.notInstalledYet': 'Not installed on any Agent',
  'skill.upgradeAvailable': '{n} installations can be upgraded to v{version}',
  'skill.uninstalledMsg': 'Uninstalled from {name}',
  'skill.uninstallFailed': 'Uninstall failed',
  'skill.upgradedMsg': 'Upgraded installation on {name}',
  'skill.upgradeFailed': 'Upgrade failed',
  'skill.basicInfo': 'Basic Info',
  'skill.creator': 'Creator',
  'skill.createdTime': 'Created',
  'skill.lastUpdated': 'Last Updated',
  'skill.installCount': 'Installations',
  'skill.category': 'Category',
  'skill.belongDepartment': 'Department',
  'skill.notAssigned': 'Unassigned',
  'skill.editDepartment': 'Edit',
  'skill.versionHistory': 'Version History',
  'skill.selectDepartments': 'Select Departments',
  'skill.noDepartments': 'No departments',
  'skill.departmentsUpdated': 'Departments updated',
  'skill.departmentsUpdateFailed': 'Failed to update departments',
  'skill.categoryUpdatedMsg': 'Category updated to "{name}"',
  'skill.categoryUpdateFailed': 'Failed to update category',

  // ── Resource ────────────────────────────────────────────
  'resource.management': 'Resource Management',
  'resource.managementDesc': 'Manage API credentials and tool access',
  'resource.addResource': 'Add Resource',
  'resource.tabAll': 'All',
  'resource.tabModel': 'Model',
  'resource.tabTool': 'Tool',
  'resource.searchResources': 'Search resources...',
  'resource.noResources': 'No resources',
  'resource.noResourcesHint': 'Add API credentials to manage model and tool access',
  'resource.typeModel': 'Model',
  'resource.typeTool': 'Tool',
  'resource.statusActive': 'Active',
  'resource.statusUntested': 'Untested',
  'resource.statusError': 'Error',
  'resource.createTitle': 'Add Resource',
  'resource.resourceName': 'Name',
  'resource.resourceNamePlaceholder': 'e.g.: Anthropic Production Key',
  'resource.apiType': 'API Type',
  'resource.selectApiType': 'Select API type',
  'resource.apiTypeDefault': 'Default: {type}',
  'resource.apiUrl': 'API URL',
  'resource.apiUrlDefault': 'Default: {url}',
  'resource.baseUrlHint.zai':
    'Coding Plan: /api/coding/paas/v4 (default) | Regular: /api/paas/v4 (requires balance)',
  'resource.envVarName': 'Environment Variable',
  'resource.descriptionOptional': 'Description (optional)',
  'resource.descriptionPlaceholder': 'Notes...',
  'resource.setDefault': 'Set as default',
  'resource.setDefaultHint': 'Only one default resource per type and provider',
  'resource.loadingInstances': 'Loading instances...',
  'resource.pushModel': 'Push to instances',
  'resource.pushModelTitle': 'Push model to instances',
  'resource.pushModelDesc':
    'Push {model} to the selected runtime targets on the selected instances',
  'resource.pushModelTargetLabel': 'Runtime targets',
  'resource.pushModelTargetOpenClaw': 'OpenClaw',
  'resource.pushModelTargetOpenClawHint': 'Update OpenClaw provider config and the selected model role',
  'resource.pushModelTargetPi': 'Pi',
  'resource.pushModelTargetPiHint': 'Update Pi provider config and use this model for new Pi sessions',
  'resource.pushModelInstancesLabel': 'Target instances',
  'resource.pushModelRoleLabel': 'Role on instance',
  'resource.pushModelRolePrimary': 'Primary model',
  'resource.pushModelRolePrimaryHint': 'Overwrite the current primary field',
  'resource.pushModelRoleFallbacks': 'Fallback model (fallbacks)',
  'resource.pushModelRoleFallbacksHint': 'Append to the existing fallbacks chain, no duplicates',
  'resource.pushModelRoleImageModel': 'Image understanding model (imageModel)',
  'resource.pushModelRoleImageModelHint': 'Overwrite imageModel.primary',
  'resource.pushModelRoleImageGen': 'Image generation model (imageGenerationModel)',
  'resource.pushModelRoleImageGenHint': 'Overwrite imageGenerationModel.primary',
  'resource.pushModelInstancesEmpty': 'No instances available',
  'resource.pushModelSelectAtLeastOne': 'Select at least one target instance',
  'resource.pushModelSelectAtLeastOneTarget': 'Select at least one runtime target',
  'resource.pushModelSubmit': 'Push',
  'resource.pushModelSuccess': 'Pushed to {count} instance(s)',
  'resource.pushModelPartial': 'Partial: {success} succeeded / {failed} failed',
  'resource.pushModelAllFailed': 'All pushes failed',
  'resource.presetModels': 'Preset Models',
  'resource.manageModelsLater':
    'You can manage model definitions on the detail page after creation',
  'resource.createSuccess': 'Resource created successfully',
  'resource.editTitle': 'Edit Resource',
  'resource.apiKeyKeepEmpty': 'API Key (leave empty to keep current)',
  'resource.apiKeyKeepPlaceholder': 'Leave empty to keep current key',
  'resource.currentKey': 'Current: {key}',
  'resource.apiUrlOptional': 'API URL (optional)',
  'resource.updateSuccess': 'Resource updated successfully',
  'resource.deleteTitle': 'Delete Resource',
  'resource.deleteConfirmMsg':
    'Are you sure you want to delete resource {name}? This cannot be undone.',
  'resource.deletedMsg': 'Resource deleted',
  'resource.selectProvider': 'Select Provider',
  'resource.providerModels': 'Models',
  'resource.providerTools': 'Tools',
  'resource.modelDefinitions': 'Model Definitions',
  'resource.modelDefinitionsDesc': 'Manage available models and their parameters for this resource',
  'resource.addModel': 'Add Model',
  'resource.variant': 'Region / Plan',
  'resource.variantPlaceholder': 'Choose region or plan',
  'resource.variantHint': 'Endpoint: {url}',
  'resource.syncFromModelsDev': 'Sync from models.dev',
  'resource.syncFromModelsDevHint':
    'Fetch the provider model catalog from models.dev and merge it into this resource',
  'resource.modelsDevSynced': 'Synced {count} models from models.dev',
  'resource.modelsDevEmpty': 'No models found in models.dev for this provider',
  'resource.noModels': 'No model definitions',
  'resource.addFirstModel': 'Add first model',
  'resource.modelsUpdated': 'Models updated',
  'resource.setAsDefaultModel': 'Set as default model for new instances',
  'resource.defaultModelActive': 'Default model for new instances (click to clear)',
  'resource.defaultModelSet': 'Set {name} as the default model for new instances',
  'resource.defaultModelCleared': 'Default model cleared',
  'resource.modelExists': 'Model {id} already exists',
  'resource.editModel': 'Edit Model',
  'resource.addModelTitle': 'Add Model',
  'resource.modelId': 'Model ID *',
  'resource.modelIdPlaceholder': 'e.g.: claude-opus-4-6',
  'resource.modelDisplayName': 'Display Name',
  'resource.modelDisplayNamePlaceholder': 'e.g.: Claude Opus 4.6',
  'resource.reasoningModel': 'Reasoning Model',
  'resource.inputType': 'Input Type',
  'resource.costPerMillion': 'Cost ($/Million Tokens)',
  'resource.costInput': 'Input',
  'resource.costOutput': 'Output',
  'resource.costCacheRead': 'Cache Read (optional)',
  'resource.costCacheWrite': 'Cache Write (optional)',
  'resource.contextWindow': 'Context Window',
  'resource.maxOutput': 'Max Output',
  'resource.credentialInfo': 'Credential Info',
  'resource.credentialDesc': 'Encrypted API credentials',
  'resource.envVar': 'Environment Variable',
  'resource.statusInfo': 'Status Info',
  'resource.statusDesc': 'Connection test & metadata',
  'resource.lastTest': 'Last Test',
  'resource.notTested': 'Not tested',
  'resource.errorInfo': 'Error Info',
  'resource.creatorLabel': 'Creator',
  'resource.createdAtLabel': 'Created',
  'resource.testConnection': 'Test Connection',
  'resource.testing': 'Testing...',
  'resource.testPassed': 'Test Passed',
  'resource.retest': 'Re-test',
  'resource.testSuccessMsg': 'Connection successful ({ms}ms)',
  'resource.testModelsMsg': '{n} models',
  'resource.testMultimodalMsg': ' ({n} multimodal)',
  'resource.testFailedMsg': 'Connection failed: {error}',
  'resource.testRequestFailed': 'Test request failed',
  'resource.reasoning': 'Reasoning',
  'resource.isDefault': 'Default',

  // ── Config Editor ───────────────────────────────────────
  'config.modules': 'Modules',
  'config.other': 'Other',
  'config.requiresRestart': 'Requires restart',
  'config.jsonError': 'JSON Error',
  'config.instanceManagement': 'Instance Management',
  'config.advancedConfig': 'Advanced Config',
  'config.unsavedChanges': 'Unsaved Changes',
  'config.unsavedDesc': 'Configuration has been modified but not saved to the instance',
  'config.resetButton': 'Reset',
  'config.validateButton': 'Validate Config',
  'config.validationResult': 'Validation Result',
  'config.issuesFound': '{n} issues found',
  'config.saveChanges': 'Save Changes',
  'config.selectModule': 'Select a module on the left to start editing',
  'config.needsRestart': 'Restart Required',
  'config.selectModel': 'Select model...',
  'config.searchModel': 'Search model...',
  'config.loadingModels': 'Loading...',
  'config.noMatchingModel': 'No matching model found',
  'config.customInput': 'Custom',
  'config.confirmButton': 'OK',
  'config.manualInput': 'Enter provider/model manually',
  'config.clearButton': 'Clear',
  'config.addFallback': 'Add fallback model...',
  'config.fallbackModels': 'Fallback models (tried in order if primary is unavailable)',
  'config.addButton': 'Add',
  'config.multimodal': 'Multimodal',
  'config.verified': 'Verified',
  'config.untested': 'Untested',
  'config.legacy': 'legacy',
  'config.connectionError': 'Connection Error',
  'config.minimum': 'Min: {n}',
  'config.maximum': 'Max: {n}',
  'config.envVarHint': 'Recommended to use environment variable references, e.g. {example}',
  'config.otherSettings': 'Other Settings',
  'config.removeField': 'Remove this field',
  'config.removeBlock': 'Remove this config block',
  'config.newKeyPlaceholder': 'New key name...',
  'config.addItem': 'Add Item',
  'config.enterToAdd': 'Type and press Enter to add...',
  'config.channelNamePlaceholder': 'Enter channel name (e.g. telegram, discord)...',
  'config.addChannel': 'Add Channel',
  'config.simpleMode': 'Simple',
  'config.advancedMode': 'Advanced',

  // ── Dashboard ───────────────────────────────────────────
  'dashboard.totalInstances': 'Total Instances',
  'dashboard.onlineCount': '{n} online',
  'dashboard.offlineCount': '{n} offline',
  'dashboard.activeSessions': 'Active Sessions',
  'dashboard.totalSessions': '{n} total',
  'dashboard.resourceStatus': 'Resource Status',
  'dashboard.apiKeys': 'API Keys',
  'dashboard.totalUsers': 'Total Users',
  'dashboard.activeUsers': '{n} active (7d)',
  'dashboard.skillsStats': 'Skills Stats',
  'dashboard.created': 'Created',
  'dashboard.instanceHealth': 'Instance Health',
  'dashboard.noInstanceData': 'No instance data',
  'dashboard.last60s': 'Last 60s',
  'dashboard.sessions': 'Sessions',
  'dashboard.providerUsage': 'Provider Usage',
  'dashboard.today': 'Today',
  'dashboard.recentActivity': 'Recent Activity',
  'dashboard.realtime': 'Real-time',
  'dashboard.noActivity': 'No activity records',
  // Dashboard action labels
  'dashboard.action.LOGIN': 'Login',
  'dashboard.action.LOGOUT': 'Logout',
  'dashboard.action.AUTH_REFRESH': 'Refresh Token',
  'dashboard.action.INSTANCE_CREATE': 'Create Instance',
  'dashboard.action.INSTANCE_UPDATE': 'Update Instance',
  'dashboard.action.INSTANCE_DELETE': 'Delete Instance',
  'dashboard.action.INSTANCE_START': 'Start Instance',
  'dashboard.action.INSTANCE_STOP': 'Stop Instance',
  'dashboard.action.INSTANCE_RESTART': 'Restart Instance',
  'dashboard.action.INSTANCE_CONFIG_PATCH': 'Patch Config',
  'dashboard.action.INSTANCE_DASHBOARD': 'Access Console',
  'dashboard.action.USER_CREATE': 'Create User',
  'dashboard.action.USER_UPDATE': 'Update User',
  'dashboard.action.USER_DELETE': 'Disable User',
  'dashboard.action.RESOURCE_CREATE': 'Create Resource',
  'dashboard.action.RESOURCE_UPDATE': 'Update Resource',
  'dashboard.action.RESOURCE_DELETE': 'Delete Resource',
  'dashboard.action.RESOURCE_TEST': 'Test Connection',
  'dashboard.action.AGENT_CLASSIFY': 'Classify Agent',
  'dashboard.action.SKILL_CREATE': 'Create Skill',
  'dashboard.action.SKILL_UPDATE': 'Update Skill',
  'dashboard.action.SKILL_DELETE': 'Delete Skill',
  'dashboard.action.SKILL_INSTALL': 'Install Skill',
  // Dashboard resource type labels
  'dashboard.resource.instance': 'Instance',
  'dashboard.resource.user': 'User',
  'dashboard.resource.resource': 'Resource',
  'dashboard.resource.agent': 'Agent',
  'dashboard.resource.skill': 'Skill',
  'dashboard.resource.auth': 'Auth',
  'dashboard.resource.config': 'Config',
  'dashboard.resource.department': 'Department',
  // Dashboard instance status labels
  'dashboard.statusOnline': 'Online',
  'dashboard.statusOffline': 'Offline',
  'dashboard.statusDegraded': 'Degraded',
  'dashboard.statusError': 'Error',
  // Dashboard result labels
  'dashboard.resultFailure': 'Failed',
  'dashboard.resultDenied': 'Denied',

  // ── Audit ───────────────────────────────────────────────
  'audit.searchPlaceholder': 'Search operation details...',
  'audit.exportCsv': 'Export CSV',
  'audit.noData': 'No audit log data',
  'audit.time': 'Time',
  'audit.operator': 'Operator',
  'audit.actionType': 'Action',
  'audit.resourceCol': 'Resource',
  'audit.details': 'Details',
  'audit.ipAddress': 'IP Address',
  'audit.result': 'Result',
  'audit.resultSuccess': 'Success',
  'audit.resultFailure': 'Failure',
  'audit.showing': 'Showing',
  'audit.totalRecords': ' of {n} records',
  // Audit filter options
  'audit.filterAllActions': 'All Actions',
  'audit.filterLogin': 'Login',
  'audit.filterLogout': 'Logout',
  'audit.filterUserCreate': 'Create User',
  'audit.filterUserUpdate': 'Update User',
  'audit.filterUserDelete': 'Delete User',
  'audit.filterPasswordReset': 'Reset Password',
  'audit.filterInstanceCreate': 'Create Instance',
  'audit.filterInstanceUpdate': 'Update Instance',
  'audit.filterInstanceDelete': 'Delete Instance',
  'audit.filterInstanceStart': 'Start Instance',
  'audit.filterInstanceStop': 'Stop Instance',
  'audit.filterAgentClassify': 'Classify Agent',
  'audit.filterSkillCreate': 'Create Skill',
  'audit.filterSkillUpdate': 'Update Skill',
  'audit.filterSkillInstall': 'Install Skill',
  'audit.filterResourceCreate': 'Create Resource',
  'audit.filterResourceUpdate': 'Update Resource',
  'audit.filterResourceDelete': 'Delete Resource',
  'audit.filterAllResources': 'All Resources',
  'audit.filterAuth': 'Auth',
  'audit.filterUser': 'User',
  'audit.filterInstance': 'Instance',
  'audit.filterSkill': 'Skill',
  'audit.filterResource': 'Resource',
  'audit.filterDepartment': 'Department',
  'audit.filterChat': 'Chat',
  'audit.filterAllResults': 'All Results',
  'audit.filterSuccess': 'Success',
  'audit.filterFailure': 'Failure',
  'audit.filterDenied': 'Denied',

  // ── User ────────────────────────────────────────────────
  'user.management': 'User Management',
  'user.managementDesc': 'Manage platform users, assign roles and permissions',
  'user.searchUsers': 'Search users...',
  'user.createUser': 'Create User',
  'user.createTitle': 'Create User',
  'user.createDesc': 'Create a new platform user account',
  'user.emailLabel': 'Email',
  'user.nameLabel': 'Name',
  'user.namePlaceholder': 'User name',
  'user.passwordLabel': 'Password',
  'user.passwordPlaceholder': 'At least 8 characters with upper/lowercase and digits',
  'user.roleLabel': 'Role',
  'user.departmentLabel': 'Department',
  'user.selectDepartment': 'Select department',
  'user.statusLabel': 'Status',
  'user.roleSystemAdmin': 'System Admin',
  'user.roleDeptAdmin': 'Dept Admin',
  'user.roleUser': 'User',
  'user.statusActive': 'Active',
  'user.statusDisabled': 'Disabled',
  'user.createdMsg': 'User created successfully',
  'user.editTitle': 'Edit User',
  'user.editDesc': 'Modify user {name} information',
  'user.updatedMsg': 'User updated successfully',
  'user.deleteTitle': 'Disable User',
  'user.deleteDesc': 'Disabled users cannot log in',
  'user.deleteConfirmMsg': 'Confirm disabling user {name}? They will no longer be able to log in.',
  'user.deletedMsg': 'User "{name}" disabled',
  'user.confirmDisable': 'Confirm Disable',
  'user.resetPasswordTitle': 'Reset Password',
  'user.resetPasswordDesc': 'Set a new password for user {name}',
  'user.newPassword': 'New Password',
  'user.passwordHint':
    'Password must be at least 8 characters with upper/lowercase letters and digits',
  'user.confirmReset': 'Confirm Reset',
  'user.passwordResetMsg': 'Password for user "{name}" has been reset',
  'user.resetFailed': 'Reset failed',
  'user.resetPassword': 'Reset Password',
  'user.disable': 'Disable',
  'user.self': '(You)',
  'user.noUsers': 'No users',
  'user.noUsersHint': 'No users have been created yet. Click "Create User" above to get started.',
  'user.tableUser': 'User',
  'user.tableEmail': 'Email',
  'user.tableRole': 'Role',
  'user.tableDepartment': 'Department',
  'user.tableStatus': 'Status',
  'user.createFailed': 'Create failed',
  'user.updateFailed': 'Update failed',
  'user.statusDisabledShort': 'Disabled',

  // ── Department ──────────────────────────────────────────
  'dept.management': 'Department Management',
  'dept.managementDesc': 'Manage organizational departments and instance access',
  'dept.createDept': 'Create Department',
  'dept.createTitle': 'Create Department',
  'dept.createDesc': 'Create a new organizational department',
  'dept.deptName': 'Department Name',
  'dept.deptNamePlaceholder': 'Engineering',
  'dept.descriptionPlaceholder': 'Responsible for development and operations',
  'dept.createdMsg': 'Department created successfully',
  'dept.editTitle': 'Edit Department',
  'dept.editDesc': 'Modify department information',
  'dept.updatedMsg': 'Department updated successfully',
  'dept.deleteTitle': 'Delete Department',
  'dept.deleteConfirmMsg': 'Are you sure you want to delete department {name}?',
  'dept.deleteHasMembers': 'This department has {n} members. Please move them out before deleting.',
  'dept.deletedMsg': 'Department "{name}" deleted',
  'dept.noDepts': 'No departments',
  'dept.noDeptsHint':
    'No departments have been created yet. Click "Create Department" above to get started.',
  'dept.deptCount': 'Departments',
  'dept.memberCount': 'Members',
  'dept.accessCount': 'Access',
  'dept.tableName': 'Department Name',
  'dept.tableDesc': 'Description',
  'dept.tableMemberCount': 'Members',
  'dept.tableAccessCount': 'Authorized Instances',
  'dept.membersTab': 'Members',
  'dept.accessTab': 'Access',
  'dept.noMembers': 'No members',
  'dept.memberActive': 'Active',
  'dept.memberInactive': 'Inactive',
  'dept.memberDisabled': 'Disabled',
  'dept.memberCountLabel': '{n} members',
  'dept.loadFailed': 'Load failed',
  'dept.grantAccess': 'Grant Access',
  'dept.grantAccessTitle': 'Grant Instance Access',
  'dept.grantAccessDesc': 'Grant department access to a specified instance',
  'dept.selectInstanceLabel': 'Select Instance',
  'dept.selectInstancePlaceholder': 'Please select an instance',
  'dept.agentScope': 'Agent Access Scope',
  'dept.limitSpecificAgents': 'Limit to specific Agents',
  'dept.allAgentsAccess': 'Will allow access to all Agents on this instance',
  'dept.agentIdPlaceholder': 'Enter Agent ID, press Enter to add',
  'dept.confirmGrant': 'Confirm Grant',
  'dept.grantSuccess': 'Instance access granted',
  'dept.grantFailed': 'Grant failed',
  'dept.revokeTitle': 'Revoke Access',
  'dept.revokeDesc': 'This action takes effect immediately',
  'dept.revokeConfirmMsg': 'Confirm revoking access to instance {name} for this department?',
  'dept.confirmRevoke': 'Confirm Revoke',
  'dept.revokeSuccess': 'Access revoked',
  'dept.revokeFailed': 'Revoke failed',
  'dept.noAccess': 'No instance access',
  'dept.accessOnline': 'Online',
  'dept.accessOffline': 'Offline',
  'dept.accessDegraded': 'Degraded',
  'dept.accessError': 'Error',
  'dept.agentCount': '{n} Agents',
  'dept.allAgents': 'All Agents',
  'dept.grantedBy': 'Granted by: {name}',
  'dept.deleteFailed': 'Delete failed',
  'dept.deleteCannotUndo': 'This action cannot be undone',
  'dept.viewDetail': 'View Details',

  // ── Pages (remaining) ─────────────────────────────────
  'placeholder.comingSoon': 'Coming Soon',
  'instance.starting': 'Instance starting',
  'instance.stopped': 'Instance stopped',
  'instance.restarting': 'Instance restarting',
  'instance.startFailed': 'Start failed',
  'instance.stopFailed': 'Stop failed',
  'instance.restartFailed': 'Restart failed',
  'agent.connectionFailed': 'The following instances failed to connect:',
  'skill.deleteConfirmTitle': 'Confirm Delete',
  'skill.deleteConfirmMsg':
    'Are you sure you want to delete Skill "{name}"? This will delete all files and installation records and cannot be undone.',
  'skill.deletedMsg': 'Skill "{name}" deleted',
  'skill.notFound': 'Skill not found',
  'resource.notFound': 'Resource not found',
  'config.validationPassed': 'Validation passed, safe to save',
  'config.validationWarning': 'Found {n} config issues, please review before saving',
  'config.noPendingChanges': 'No pending changes to save',
  'config.saved': 'Configuration saved',
  'config.hashConflict':
    'Config conflict: configuration has been modified by another user, please refresh the page',
  'config.saveFailed': 'Save failed',
  'config.rateLimited': 'Too many saves — please retry in {sec}s',
  'config.loadFailed': 'Failed to load config editor',
  'config.ensureRunning': 'Please ensure the instance is running and the gateway is connected',
  'page.modelsDesc':
    'Configure and manage available AI models, set model parameters and access policies.',
  'page.approvalsDesc':
    'View and process pending approval requests, manage approval workflows and rules.',
  'page.settingsDesc':
    'Configure platform global parameters including security policies, integrations, and notification settings.',
  'page.publicOpinionDesc':
    'Aggregate keywords, sources, and risk signals, with search, social, and RSS data sources ready to connect later.',
  'page.toolboxDesc':
    'A collection of utilities — click any tool to open it and complete daily tasks.',
  'toolbox.openTool': 'Open tool',
  'toolbox.comingSoon': 'Coming soon',
  'toolbox.empty': 'No tools available yet',
  'toolbox.publicOpinion.title': 'Public Opinion',
  'toolbox.publicOpinion.desc':
    'Aggregate keywords, sources, and risk signals to monitor external reputation and incidents.',
  'toolbox.regulations.title': 'Regulation Tracker',
  'toolbox.regulations.desc':
    'Pick a knowledge base to track. The system distills wiki-style clause summaries and keeps an update list.',
  'regulations.title': 'Regulation Tracker',
  'regulations.desc':
    'Pick the knowledge bases you want to follow. We distill clause-level summaries and keep an update list.',
  'regulations.addTracker': 'Add tracker',
  'regulations.addTrackerDesc':
    'Pick a knowledge base you can access. We will maintain clause summaries and an update list for it.',
  'regulations.pickKb': 'Knowledge base',
  'regulations.pickKbPlaceholder': 'Choose a knowledge base…',
  'regulations.noAvailableKb':
    'No knowledge base available to track (all yours are already tracked).',
  'regulations.empty': 'No trackers yet — add your first one with the button above.',
  'regulations.docs': 'docs',
  'regulations.documentCount': 'Documents',
  'regulations.lastChecked': 'Last checked',
  'regulations.latestUpdate': 'Latest update',
  'regulations.newCount': '{count} new',
  'regulations.upToDate': 'Up to date',
  'regulations.openDetail': 'View clauses',
  'regulations.deleteTitle': 'Stop tracking',
  'regulations.deleteDesc':
    'This removes the knowledge base from your tracking list. The KB itself is not affected.',
  'regulations.deleteSuccess': 'Stopped tracking',
  'regulations.createSuccess': 'Tracker created',
  'regulations.backToList': 'Back to trackers',
  'regulations.notFound': 'Tracker not found or has been removed.',
  'regulations.newUpdates': 'New updates',
  'regulations.markChecked': 'Mark as checked',
  'regulations.markCheckedSuccess': 'Checkpoint updated',
  'regulations.filterAll': 'All',
  'regulations.filterNew': 'Only new',
  'regulations.noNew': 'No new updates right now.',
  'regulations.noDocs': 'This knowledge base has no documents yet.',
  'regulations.badgeNew': 'NEW',
  'regulations.updatedAt': 'Updated',
  'regulations.summaryPending': 'Summary is not ready yet — check back later.',
  'regulations.noClauses': 'No clause summaries extracted yet.',
  'regulations.newDocs': 'New docs',
  'regulations.pendingUpdates': 'Pending updates',
  'regulations.lastCheckRunAt': 'Last check',
  'regulations.checkNow': 'Check now',
  'regulations.checkNoNew': 'Checked — no new updates found.',
  'regulations.checkFoundNew': 'Found {count} new updates.',
  'regulations.tabClauses': 'Clauses',
  'regulations.tabKeywords': 'Keywords',
  'regulations.tabPending': 'Pending',
  'regulations.keywordsTitle': 'Search keywords',
  'regulations.keywordsHint':
    'The system uses these to search for new regulations. Leave blank to auto-aggregate from the KB.',
  'regulations.keywordsEmpty': 'No keywords yet — checks will auto-aggregate from the KB next run.',
  'regulations.keywordsAdd': 'Add',
  'regulations.keywordsAddPlaceholder': 'Type a keyword and press Enter…',
  'regulations.keywordsSaved': 'Keywords saved',
  'regulations.pendingEmpty': 'No pending updates yet — click "Check now" to scan.',
  'regulations.foundAt': 'Found',
  'regulations.suggestion': 'Suggestion',
  'regulations.openSource': 'Open source',
  'regulations.markSeen': 'Mark seen',
  'regulations.markApplied': 'Mark applied',
  'regulations.markDismissed': 'Dismiss',
  'regulations.statusNew': 'NEW',
  'regulations.statusSeen': 'Seen',
  'regulations.statusApplied': 'Applied',
  'regulations.statusDismissed': 'Dismissed',
  'nav.regulations': 'Regulations',
  'page.regulations': 'Regulation Tracker',

  // ── Cron ──────────────────────────────────────────
  'nav.cron': 'Cron Jobs',
  'page.cron': 'Cron Jobs',
  'cron.title': 'Cron Jobs',
  'cron.titleDesc': 'View scheduled cron jobs and run history across instances',
  'cron.selectInstance': 'Select instance',
  'cron.allInstances': 'All Instances',
  'cron.allAgents': 'All Agents',
  'cron.noJobs': 'No cron jobs',
  'cron.noJobsHint': 'No cron jobs configured. Create them via Agent chat or OpenClaw CLI.',
  'cron.jobCount': '{n} jobs',
  'cron.enabled': 'Enabled',
  'cron.paused': 'Paused',
  'cron.scheduleAt': 'One-shot',
  'cron.scheduleEvery': 'Interval',
  'cron.scheduleCron': 'Cron',
  'cron.sessionMain': 'Main Session',
  'cron.sessionIsolated': 'Isolated',
  'cron.nextRun': 'Next Run',
  'cron.lastRun': 'Last Run',
  'cron.payload': 'Payload',
  'cron.deliveryMode': 'Delivery',
  'cron.deliveryAnnounce': 'Announce',
  'cron.deliveryWebhook': 'Webhook',
  'cron.deliveryNone': 'None',
  'cron.deliveryChannel': 'Channel',
  'cron.deliveryTarget': 'Target',
  'cron.model': 'Model',
  'cron.thinking': 'Thinking',
  'cron.deleteAfterRun': 'Delete after run',
  'cron.lightContext': 'Light context',
  'cron.wakeMode': 'Wake Mode',
  'cron.wakeNow': 'Immediate',
  'cron.wakeNextHeartbeat': 'Next heartbeat',
  'cron.runHistory': 'Run History',
  'cron.noRuns': 'No run history',
  'cron.noRunsHint': 'This job has not run yet.',
  'cron.runStatus': 'Status',
  'cron.runSuccess': 'Success',
  'cron.runError': 'Error',
  'cron.runSkipped': 'Skipped',
  'cron.runRunning': 'Running',
  'cron.runStarted': 'Started',
  'cron.runDuration': 'Duration',
  'cron.runTokens': 'Tokens',
  'cron.runDelivery': 'Delivery',
  'cron.runSummary': 'Summary',
  'cron.allJobs': 'All Jobs',
  'cron.selectedJob': 'Selected Job',
  'cron.filterByStatus': 'Filter by status',
  'cron.cronBadge': '{n} cron jobs',
  'cron.connectionFailed': 'Failed to connect to the following instances:',
  'cron.timezone': 'Timezone',
  'cron.actionToggle': 'Toggle',
  'cron.actionRun': 'Run Now',
  'cron.actionDelete': 'Delete Job',
  'cron.confirmDeleteTitle': 'Confirm Delete',
  'cron.confirmDeleteDesc':
    'Are you sure you want to delete job "{name}"? This action cannot be undone.',
  'cron.toggleSuccess': 'Job status updated',
  'cron.runTriggered': 'Job triggered',
  'cron.deleteJobSuccess': 'Job deleted',
  'cron.actionFailed': 'Action failed',
  'cron.actions': 'Actions',
  'cron.showingAll': 'All',
  'cron.mockNotice': 'Mock data — connect instances to see real cron jobs',
  'cron.mockActionHint': 'This is mock data — actions only work with real cron jobs',
  'cron.everyNSeconds': 'Every {n} seconds',
  'cron.everyNMinutes': 'Every {n} minutes',
  'cron.everyNHours': 'Every {n} hours',
  'cron.everyNDays': 'Every {n} days',
  'cron.everyDay': 'Daily at {time}',
  'cron.everyWeek': 'Every {day} at {time}',
  'cron.everyMonth': 'Monthly on day {day} at {time}',
  'cron.everyWeekdays': 'Every {days} at {time}',
  'cron.weekMon': 'Mon',
  'cron.weekTue': 'Tue',
  'cron.weekWed': 'Wed',
  'cron.weekThu': 'Thu',
  'cron.weekFri': 'Fri',
  'cron.weekSat': 'Sat',
  'cron.weekSun': 'Sun',

  // ── Profile ─────────────────────────────────────
  'profile.title': 'Profile',
  'profile.info': 'Account Info',
  'profile.name': 'Name',
  'profile.email': 'Email',
  'profile.role': 'Role',
  'profile.department': 'Department',
  'profile.changePassword': 'Change Password',
  'profile.currentPassword': 'Current Password',
  'profile.newPassword': 'New Password',
  'profile.confirmPassword': 'Confirm New Password',
  'profile.passwordMismatch': 'Passwords do not match',
  'profile.passwordChanged': 'Password changed successfully. Please log in again.',
  'profile.passwordFailed': 'Failed to change password',
  'profile.currentPasswordWrong': 'Current password is incorrect',
  'profile.save': 'Save',
  'profile.noDepartment': 'None',

  // ── Chart Rendering ─────────────────────────────────
  'chat.chartLoading': 'Loading chart...',
  'chat.chartError': 'Failed to render chart',
  'chat.chartJsonInvalid': 'Invalid chart configuration',
  'chat.chartTooLarge': 'Chart data too large (max 50KB)',
  'chat.chartShowRaw': 'Show raw config',
  'chat.mermaidError': 'Failed to render diagram',
  'chat.mermaidShowRaw': 'Show raw syntax',

  // ── File Panel ────────────────────────────────────
  'chat.filePanel': 'Files',
  'filePanel.title': 'Session Files',
  'filePanel.input': 'Input',
  'filePanel.output': 'Artifacts',
  'filePanel.dropFilesHere': 'Drop files here to upload',
  'filePanel.noFiles': 'No files',
  'filePanel.noOutputFiles': 'No artifacts yet',
  'filePanel.upload': 'Upload',
  'filePanel.newFolder': 'New Folder',
  'filePanel.download': 'Download',
  'filePanel.downloadAll': 'Download All',
  'filePanel.delete': 'Delete',
  'filePanel.confirmDelete': 'Are you sure you want to delete "{name}"?',
  'filePanel.uploadSuccess': 'File uploaded successfully',
  'filePanel.uploadFailed': 'Upload failed',
  'filePanel.deleteSuccess': 'File deleted',
  'filePanel.deleteFailed': 'Delete failed',
  'filePanel.folderCreated': 'Folder created',
  'filePanel.moveSuccess': 'File moved',
  'filePanel.moveFailed': 'Move failed',
  'filePanel.fileTooLarge': 'File too large (max 50MB)',
  'filePanel.fileSize': 'Size',
  'filePanel.fileType': 'Type',
  'filePanel.preview': 'Preview',
  'filePanel.noSelection': 'Select a file to view details',
  'filePanel.folderName': 'Folder name',
  'filePanel.rename': 'Rename',
  'filePanel.unavailable': 'Files not available',

  // ── Knowledge Base ──────────────────────────────
  'nav.knowledgeBases': 'Knowledge Bases',
  'kb.title': 'Knowledge Bases',
  'kb.titleDesc': 'Manage document knowledge bases for PDF parsing, vectorization, and Q&A',
  'kb.create': 'Create KB',
  'kb.createTitle': 'Create Knowledge Base',
  'kb.createDesc': 'Create a document knowledge base for RAG-powered Q&A',
  'kb.name': 'Name',
  'kb.namePlaceholder': 'Enter knowledge base name',
  'kb.description': 'Description',
  'kb.descriptionPlaceholder': 'Briefly describe the purpose...',
  'kb.scope': 'Scope',
  'kb.scopeGlobal': 'Global',
  'kb.scopeDepartment': 'Department',
  'kb.scopePersonal': 'Personal',
  'kb.scopeGlobalDesc': 'Visible to all users',
  'kb.scopeDepartmentDesc': 'Visible to department members',
  'kb.scopePersonalDesc': 'Visible only to you',
  'kb.category': 'Category',
  'kb.category.INTERNAL': 'Internal',
  'kb.category.EXTERNAL': 'External',
  'kb.category.RULES': 'Rules',
  'kb.category.description.INTERNAL': 'Company documents, policies, procedures',
  'kb.category.description.EXTERNAL': 'Industry standards, public references',
  'kb.category.description.RULES': 'System rules, constraints, guidelines',
  'kb.all': 'All',
  'kb.docCount': '{n} documents',
  'kb.noKbs': 'No Knowledge Bases',
  'kb.noKbsHint': 'Create a knowledge base to start document Q&A',
  'kb.createdMsg': 'Knowledge base "{name}" created',
  'kb.deleteTitle': 'Delete Knowledge Base',
  'kb.deleteConfirmMsg':
    'Are you sure you want to delete "{name}"? This will delete all documents, files, and vector data permanently.',
  'kb.deletedMsg': 'Knowledge base "{name}" deleted',
  'kb.documentsTab': 'Documents',
  'kb.qaTab': 'Q&A',
  'kb.settingsTab': 'Settings',
  'kb.upload': 'Upload Document',
  'kb.uploadHint': 'Drag & drop PDF files here, or',
  'kb.browse': 'Browse',
  'kb.uploadingFile': 'Uploading...',
  'kb.uploadSuccess': 'Document uploaded, processing started',
  'kb.uploadFailed': 'Upload failed',
  'kb.docPending': 'Pending',
  'kb.docProcessing': 'Processing',
  'kb.docSucceeded': 'Indexed',
  'kb.docFailed': 'Failed',
  'kb.retry': 'Retry',
  'kb.rebuildIndex': 'Rebuild index',
  'kb.rebuildStarted': 'Index rebuild started',
  'kb.indexInfo': 'Index info',
  'kb.hideIndexInfo': 'Hide index',
  'kb.viewOriginal': 'View original',
  'kb.originalPreview': 'Original preview',
  'kb.openOriginalInNewTab': 'Open in new tab',
  'kb.closeOriginalPreview': 'Close original preview',
  'kb.deleteDoc': 'Delete Document',
  'kb.viewOcrOriginal': 'View OCR original',
  'kb.ocrOriginal': 'OCR Original',
  'kb.ocrLoadFailed': 'Failed to load OCR original',
  'kb.downloadMarkdown': 'Download Markdown',
  'kb.deleteDocConfirm': 'Are you sure you want to delete "{name}"?',
  'kb.docDeletedMsg': 'Document deleted',
  'kb.noDocuments': 'No Documents',
  'kb.noDocumentsHint': 'Upload PDF files to build the knowledge base',
  'kb.qaWelcome': 'Ask about this KB',
  'kb.qaPlaceholder': 'Ask a question about this knowledge base...',
  'kb.qaSend': 'Send',
  'kb.qaGenerateAnswer': 'Generate answer',
  'kb.qaReasoning': 'Reasoning',
  'kb.qaSources': 'Sources',
  'kb.qaAssets': 'Related Assets',
  'kb.qaNoSources': 'No relevant content found',
  'kb.qaWorkbench': 'Knowledge Base Q&A',
  'kb.qaReadyDocs': '{n} indexed documents',
  'kb.qaMessages': '{n} messages',
  'kb.qaNoReadyDocs': 'No indexed documents',
  'kb.qaNoReadyDocsHint': 'Upload and finish indexing a document before asking questions.',
  'kb.qaThinkingToggle': 'Show reasoning',
  'kb.qaClear': 'Clear chat',
  'kb.qaConversations': 'Conversations',
  'kb.qaNewConversation': 'New chat',
  'kb.qaNoConversations': 'No conversations yet',
  'kb.qaUntitledConversation': 'Untitled',
  'kb.qaConversationActions': 'Conversation actions',
  'kb.qaRename': 'Rename',
  'kb.qaRenamePrompt': 'Enter a new conversation title',
  'kb.qaConfirmDelete': 'Delete this conversation? This cannot be undone.',
  'kb.qaConfirmDeleteRound':
    'Delete this round (your question + the assistant answer)? This cannot be undone.',
  'kb.qaDeleteRound': 'Delete this round',
  'kb.qaRegenerate': 'Regenerate',
  'kb.dangerZone': 'Danger Zone',
  'kb.deleteWarning':
    'Deleting this knowledge base will remove all documents, indexes, and conversation history. This cannot be undone.',
  'kb.deleteKb': 'Delete knowledge base',
  'kb.qaStop': 'Stop',
  'kb.qaYou': 'You',
  'kb.qaAssistant': 'Assistant',
  'kb.qaStopped': 'This answer was stopped.',
  'kb.qaStatusRetrieving': 'Retrieving index',
  'kb.qaStatusContext': 'Preparing context',
  'kb.qaStatusThinking': 'Thinking',
  'kb.qaStatusGenerating': 'Generating',
  'kb.qaStatusCompleted': 'Complete',
  'kb.qaStatusStopped': 'Stopped',
  'kb.qaStatusFailed': 'Failed',
  'kb.qaProgressRetrieving':
    'Running document routing, full-text search, vector search, and neighbor expansion.',
  'kb.qaProgressContext': 'Prepared {n} candidate snippets and building answer context.',
  'kb.qaProgressThinking': 'The model is streaming reasoning.',
  'kb.qaProgressGenerating': 'The model is streaming the answer.',
  'kb.qaOpenSourcePage': 'Open source page {n}',
  'kb.qaSourcePage': 'p.{n}',
  'kb.qaRetrievalResults': 'Retrieval results',
  'kb.qaTextResults': 'Text',
  'kb.qaImageResults': 'Images',
  'kb.qaTableResults': 'Tables',
  'kb.settingsSaved': 'Settings saved',
  'kb.settingsFailed': 'Save failed',
  'kb.createdBy': 'Created by',
  'kb.createdAt': 'Created at',
  'kb.selectDepartment': 'Select Department',
  'kb.filterByScope': 'Filter by scope',
  'kb.pages': '{n} pages',
  'kb.processing': 'Processing {n}%',
  'kb.ingestionLogFailed': 'Failed at {n}%',
  'kb.ingestionLogCompleted': 'Index completed',
  'kb.indexReadyDetail': 'Page index is ready for keyword, full-text, and vector retrieval.',
  'kb.indexWaitingDetail': 'Waiting for the indexing job to start.',
  'kb.ragConfig': 'RAG Config',
  'kb.ragConfigDesc': 'Shared RAG credentials and models used by every knowledge base.',

  // ── RAG Settings ──────────────────────────────
  'settings.ragTitle': 'RAG Configuration',
  'settings.ragDesc': 'Configure LLM, embedding, and reranking models for knowledge base Q&A',
  'settings.ragLlm': 'LLM (Answer Generation)',
  'settings.ragEmbedding': 'Embedding',
  'settings.ragRerank': 'Reranking (Optional)',
  'settings.ragOcr': 'OCR (Document Processing)',
  'settings.ragApiBaseUrl': 'API Base URL',
  'settings.ragApiKey': 'API Key',
  'settings.ragModel': 'Model',
  'settings.ragEnableRerank': 'Enable Reranking',
  'settings.ragOcrModel': 'Default OCR Model',
  'settings.ragOcrWorkers': 'Worker Count',
  'settings.ragPaddleOcr': 'PaddleOCR (Document OCR)',
  'settings.ragPaddleOcrHint':
    'Online OCR service — submit PDFs to PaddleOCR API for text extraction. Get your token from paddleocr.aistudio-app.com.',
  'settings.ragPaddleOcrToken': 'API Token',
  'settings.ragPaddleOcrModel': 'Model',
  'settings.ragSaved': 'RAG configuration saved',
  'settings.ragSaveFailed': 'Save failed',
  'settings.ragTab': 'RAG',
}

export default en
