import type { Dict } from './en';

export const zhCn: Dict = {
  docTitle: 'ESP-Claw 设置',
  pageTitle: '设备设置',
  pageSubtitle: '查看系统运作基本信息与状态',

  statusLoading: '加载中…',
  statusOnline: 'Wi-Fi 已连接',
  statusOffline: 'Wi-Fi 离线',
  statusApActive: 'AP 配网中',
  openMenu: '打开导航菜单',
  toggleSidebar: '切换侧边栏',
  closeMenu: '关闭导航菜单',
  externalHome: '主页',
  externalDocs: '文档',
  externalGithub: 'GitHub',

  navStatus: '系统状态',
  navSystemSettings: '系统设置',
  navBasic: '基本设置',
  navLlm: 'LLM 设置',
  navIm: 'IM 设置',
  navSearch: '网络搜索设置',
  navMemory: '记忆管理',
  navCapabilities: 'Capabilities 管理',
  navLuaModules: 'Lua 模块管理',
  navFiles: '文件管理',
  navWebIm: '在线聊天',

  webimDesc: '通过 WebSocket 与 ESP-Claw 实时互动。',
  webimSend: '发送',
  webimOnline: '在线',
  webimPlaceholder: '输入消息…',
  webimAttach: '图片',
  webimNoBind: 'Web 聊天尚未就绪（设备仍在启动或未启用本地 IM）。请等待 Agent 完成启动。',
  webimEmpty: '尚无消息',
  webimPendingFiles: '待发送附件',
  webimUploaded: '图片已上传，点击发送即可发出。',
  webimSendShortcut: 'Ctrl+Enter 发送',
  webimWsReconnecting: '实时通道正在重连…',
  webimMarkdownPreview: 'Markdown 预览',
  webimMarkdownPreviewLoading: '正在加载 Markdown…',
  webimMarkdownPreviewLoadFailed: '无法加载 Markdown 预览库。',
  webimRetrySend: '重新发送',

  unsavedIndicator: '未保存',
  unsavedConfirmLeave: '当前页面有未保存的修改，是否放弃修改并切换？',
  unsavedConfirmReload: '有未保存的修改，确定离开页面吗？',

  saveBtn: '保存更改',
  saveTabBtn: '保存本页',
  discardBtn: '放弃修改',
  saveSuccess: '设置已保存',
  saveError: '保存设置失败',
  restartHint: '保存后推荐重启设备以应用新设置',

  sectionWifi: 'Wi-Fi 设置',
  wifiSsid: 'Wi-Fi 名称 (SSID)',
  wifiPassword: 'Wi-Fi 密码',
  passwordShow: '显示密码',
  passwordHide: '隐藏密码',
  wifiValidationSsidRequired: 'Wi-Fi 名称不能为空。',
  wifiValidationPasswordLength: 'Wi-Fi 密码要么留空，要么至少 8 个字符。',

  apName: 'AP 名称 (SSID)',
  apPassword: 'AP 密码',
  apNameHint: '当前：{ssid}。留空使用默认名称。修改后需重启生效。',
  apPasswordHint: '留空则为开放热点。如设置密码，长度至少 8 个字符。',
  apValidationNameRequired: 'AP 名称不能为空。',
  apValidationPasswordLength: 'AP 密码需留空或至少 8 个字符。',
  apBehavior: 'AP 行为',
  apBehaviorKeep: '保持开启',
  apBehaviorCloseOnSta: '连接 Wi-Fi 后关闭',

  sectionStatusNetwork: '网络信息',
  sectionStatusStorage: '储存信息',
  sysInfoWifi: 'Wi-Fi',
  sysInfoIp: 'IP 地址',
  sysInfoMode: 'Wi-Fi 模式',
  sysInfoApSsid: '配网热点 SSID',
  sysInfoApIp: '配网热点 IP',
  sysInfoStorage: '存储路径',
  sysInfoNone: '—',
  sysInfoReload: '刷新状态',
  sysInfoRestart: '重启设备',
  restartConfirmTitle: '确认重启设备',
  restartConfirmBody: '设备会立刻开始重启，当前网页会短暂离线。',
  restartConfirmHint: '重启期间当前连接会中断，设备重新上线后你可以继续使用。',
  restartConfirmCancel: '取消',
  restartConfirmAction: '确认重启',
  restartOverlayTitle: '正在等待设备重启',
  restartOverlayRequesting: '正在发送重启指令…',
  restartOverlayCooldown: '设备正在下线并准备重启…',
  restartOverlayPolling: '正在轮询设备状态，等待重新上线…',
  restartOverlayHint: '页面会自动检测重启状态，无需手动刷新。',
  restartOverlayErrorTitle: '设备未在预期时间内上线',
  restartOverlayTimeout: '设备仍未重新上线，请检查网络连接或串口日志。',
  restartOverlayClose: '关闭',

  sectionLlm: 'LLM 设置',
  llmProvider: 'LLM 提供商',
  llmProviderOpenai: 'OpenAI',
  llmProviderQwen: 'Qwen 兼容',
  llmProviderDeepSeek: 'DeepSeek',
  llmProviderAnthropic: 'Anthropic',
  llmProviderOpenaiCompatible: 'OpenAI 兼容 API',
  llmProviderAnthropicCompatible: 'Anthropic 兼容 API',
  llmProviderCustom: '自定义',
  llmFillDefaults: '填入默认配置',
  llmProviderDocs: '供应商文档',
  llmProviderConsole: '获取 API Key',
  llmApiKey: 'API 密钥',
  llmModel: '模型',
  llmTimeout: '超时 (毫秒)',
  llmTimeoutPlaceholder: '120000',
  llmMaxTokens: '最大 Token 数',
  llmMaxTokensPlaceholder: '8192',
  llmAdvanced: 'LLM 高级选项',
  llmBackend: '后端类型',
  llmBackendPlaceholder: 'openai_compatible / anthropic_compatible',
  llmBaseUrl: 'Base URL',
  llmBaseUrlPlaceholder: 'https://api.openai.com/v1',
  llmAuthType: '认证类型',
  llmAuthTypePlaceholder: 'bearer / api-key / none',
  llmDefaultImageMaxBytes: '默认图片大小上限（字节）',
  llmDefaultImageMaxBytesPlaceholder: '524288',
  llmMaxTokensField: 'Max Tokens 字段名',
  llmMaxTokensFieldPlaceholder: 'max_tokens / max_completion_tokens / ...',
  llmSupportsTools: '[LLM 模型] 支持工具调用',
  llmSupportsVision: '[LLM 模型] 支持视觉输入',
  llmImageRemoteUrlOnly: '图片输入仅允许远程 URL',
  llmValidationRequiredFields: '保存前请补全 LLM 必填项：{fields}。',
  llmValidationMaxTokens: '最大 Token 数必须是正整数。',
  llmValidationImageMaxBytes: '默认图片大小上限必须是正整数。',

  sectionIm: '即时通讯 (IM)',
  imAdd: '添加',
  imClearConf: '清空配置',
  imCancel: '取消',
  imNotConfigured: '未配置',
  imAdvancedSettings: '高级设置',
  imWechatTitle: '微信',
  imFeishuTitle: '飞书',
  imQqTitle: 'QQ',
  imTelegramTitle: 'Telegram',
  imValidationIncompletePlatform: '保存前请将 {platform} 配置完整，缺少：{fields}。',
  imValidationInvalidField: '{platform} 的 {field} 格式无效。',
  imWechatCredsFilled: '凭据已从二维码登录填入，请在下方高级设置中确认后点击保存。',
  qqAppId: 'QQ App ID',
  qqAppSecret: 'QQ App Secret',
  feishuAppId: '飞书 App ID',
  feishuAppSecret: '飞书 App Secret',
  tgBotToken: 'Telegram Bot Token',
  wechatToken: '微信 Token',
  wechatBaseUrl: '微信 Base URL',
  wechatBaseUrlPlaceholder: 'https://ilinkai.weixin.qq.com',
  wechatCdnBaseUrl: '微信 CDN Base URL',
  wechatCdnBaseUrlPlaceholder: 'https://novac2c.cdn.weixin.qq.com/c2c',
  wechatAccountId: '微信账号 ID',
  wechatAccountIdPlaceholder: '默认',
  wechatLoginGenerate: '生成二维码',
  wechatLoginCancel: '取消',
  wechatLoginStatus: '状态：空闲',
  wechatLoginStatusPrefix: '状态：',
  wechatLoginCancelledMsg: '已取消微信登录。',
  wechatLoginNote: '用微信扫描二维码。扫码后凭据将自动填入下方高级设置，请点击保存持久化。',
  wechatLoginOpenLink: '打开登录链接',

  sectionSearch: '搜索（可选）',
  searchNote:
    '如填写，ESP-Claw 可在运行中检索在线资源。提示：系统自带的天气 Skill 也依赖在线搜索功能。',
  searchBraveKey: 'Brave Search API Key',
  searchTavilyKey: 'Tavily API Key',
  searchHttpAllowlist: 'HTTP 白名单（域名/IP，逗号分隔）',
  searchHttpAllowlistPlaceholder: 'api.example.com,*.example.org,203.0.113.10',

  sectionCapabilities: 'Capability Group',
  capabilitiesDescription:
    '选择设备启动后允许使用哪些已编译的 capability group。"LLM 可见" 表示该 group 在 LLM 规划上下文中始终可见。',
  capFilterAll: '全部',
  capFilterEnabled: '仅已启用',
  capFilterLlm: '仅 LLM 可见',
  capSearchPlaceholder: '搜索 capability…',
  capSummary: '已启用 {enabled} / LLM 可见 {llm} / 共 {total}',
  capabilitySelectAll: '全选',
  capabilityClearAll: '清空',
  capabilityLlmDefaults: '恢复 LLM 集合',
  capabilityLlmClear: '清空 LLM',
  capabilityLoading: '正在加载 capability...',
  capabilityLoadError: '加载 capability 列表失败',
  capabilityNameCol: 'Capability',
  capabilityEnabled: '启用',
  capabilityLlmVisible: 'LLM 默认可见',
  capabilityNoResult: '没有匹配当前筛选条件的 capability。',

  sectionLuaModules: 'Lua 模块',
  luaModulesDescription:
    '选择 cap_lua 启动时要注册哪些已编译的 Lua 模块。修改后需重启生效。',
  luaModulesSearchPlaceholder: '搜索模块…',
  luaModulesSummary: '已启用 {enabled} / 共 {total}',
  luaModulesSelectAll: '全选',
  luaModulesClearAll: '清空',
  luaModulesLoading: '正在加载 Lua 模块...',
  luaModulesLoadError: '加载 Lua 模块列表失败',
  luaModulesCapabilityRequired:
    '需先在 Capabilities 管理中启用 cap_lua 并保存，Lua 模块配置才会生效。',
  luaModulesNameCol: 'Lua 模块',
  luaModulesNoResult: '没有匹配当前筛选条件的 Lua 模块。',
  idCol: 'ID',

  sectionAdvanced: '高级设置',
  timezone: '时区',
  timezonePlaceholder: '例如 CST-8（北京时间）或 UTC0',
  timezoneHelp:
    '仅接受 POSIX TZ 字符串，符号与日常 UTC 表示相反。北京时间（UTC+8）应写作 "CST-8"，纽约（UTC-5）写作 "EST5"。可在此表格查阅 IANA 时区与 POSIX 表达转换关系。',

  memoryTitle: '记忆文件',
  memoryDescription: '管理设备记忆文件。',
  memoryCardLongTerm: '长期记忆',
  memoryCardSoul: '灵魂',
  memoryCardIdentity: '身份',
  memoryCardUserInfo: '用户信息',
  memoryMissing: '长期记忆文件尚不存在。',
  memoryRefreshAll: '全部刷新',
  memoryRefresh: '刷新',
  memoryEdit: '编辑',
  memoryAuxMissing: '记忆文件尚不存在。',
  memoryRefreshed: '记忆已重新加载',
  memoryLoadError: '加载记忆失败',
  memorySaveError: '保存记忆失败',

  fileRefresh: '刷新',
  fileUpDir: '返回上级',
  fileNewFolder: '新文件夹名称',
  fileCreateFolder: '创建文件夹',
  fileUploadPath: '/example.txt',
  fileChoose: '选择文件',
  fileNoFileSelected: '未选择文件',
  fileUpload: '上传',
  fileColName: '名称',
  fileColType: '类型',
  fileColSize: '大小',
  fileColActions: '操作',
  fileTypeFolder: '文件夹',
  fileTypeFile: '文件',
  fileEmpty: '此文件夹为空。',
  fileOpen: '打开',
  fileEdit: '编辑',
  filePreview: '预览',
  fileDownload: '下载',
  fileDelete: '删除',
  fileDevMode: '开发者模式',
  fileDevModeOn: '开发者模式：已开启',
  fileDevModeRequired: '请先启用开发者模式再修改文件。',
  fileDevModeConfirm:
    '进入开发者模式后，你可以上传、修改或删除文件。不正确的增删改可能导致系统无法正常运行、无限重启等问题。请注意合理修改。',
  fileDeleteConfirm: '确定删除 {path}？',
  fileUploadComplete: '上传完成',
  fileFolderCreated: '文件夹已创建',
  fileDeleteComplete: '删除完成',
  fileEditorTitle: '编辑文件',
  fileEditorRefresh: '刷新',
  fileEditorClose: '退出',
  fileEditorSave: '保存',
  fileEditorSaved: '文件已保存',
  fileEditorLoadError: '加载文件失败',
  fileEditorSaveError: '保存文件失败',
  fileUnsupportedAction: '当前文件类型不支持{action}。',
  fileSelectAndPath: '请选择文件并提供以 / 开头的目标路径。',
  fileFolderNameRequired: '请输入文件夹名称。',
  setupEyebrow: '初次使用向导',
  setupTitle: '完成设备首次配置',
  setupIntro: '按顺序完成 LLM、IM 和网络搜索配置。每一步都可以先跳过，稍后再到设置页补全。',
  setupStepLabel: '步骤 {index}',
  setupStepLlm: '配置 LLM',
  setupStepLlmDesc: '先接入模型服务，设备重启后才能启用核心 Agent 能力。',
  setupStepIm: '配置 IM',
  setupStepImDesc: '按需填写微信、飞书、QQ 或 Telegram 凭据，留空的项目会保持未配置。',
  setupStepSearch: '配置网络搜索',
  setupStepSearchDesc: '可选填写在线搜索 Key，启用联网搜索和依赖它的内置技能。',
  setupStepDone: '完成并重启',
  setupStepDoneDesc: '配置已经保存，重启设备后系统会重新加载这些设置。',
  setupSavedStep: '当前步骤已保存',
  setupBack: '上一步',
  setupSkip: '跳过',
  setupSkipHint: '跳过不会保存当前步骤修改。',
  setupSaveAndNext: '保存并继续',
  setupFinish: '保存并完成',
  setupLlmProviderBailian: '阿里云百炼',
  setupLlmProviderClaude: 'Anthropic Claude',
  setupImAdd: '添加',
  setupImAddPlatform: '添加 {platform}',
  setupImRemove: '移除',
  setupImEmpty: '还没有添加任何 IM 平台',
  setupImPickerHint: '点击加号或添加按钮，按需加入要配置的平台；同一平台不会重复添加。',
  setupImAdded: '所有可选平台都已添加。',
  setupWechatConfigured: '微信已配置完成',
  setupWechatLoginRequired: '已添加微信，请先完成二维码登录后再继续。',
  setupRestartBanner: '配置已经完成，需重启设备后才能全部生效。',
  setupRestartNow: '立即重启',
};
