import { defineFieldCopy } from '@/app/settings/field-copy' import { EN_RUNTIME_SETTINGS } from './en-runtime-settings' import { EN_SURFACES } from './en-surfaces' import type { Translations } from './types' export const zh: Translations = { surfaces: EN_SURFACES, common: { apply: '应用', back: '返回', save: '保存', saving: '保存中…', cancel: '取消', change: '更改', choose: '选择', clear: '清除', close: '关闭', collapse: '收起', confirm: '确认', connect: '连接', connecting: '连接中', continue: '继续', copied: '已复制', copy: '复制', copyFailed: '复制失败', delete: '删除', docs: '文档', done: '完成', error: '错误', expand: '展开', failed: '失败', formatJson: '格式化 JSON', free: '免费', loading: '加载中…', notSet: '未设置', refresh: '刷新', remove: '移除', replace: '替换', retry: '重试', run: '运行', send: '发送', set: '设置', skip: '跳过', update: '更新', tryHint: term => `试试“${term}”`, on: '开', off: '关' }, fileMenu: { revealFinder: '在访达中显示', revealExplorer: '在文件资源管理器中显示', revealFileManager: '打开所在文件夹', revealInSidebar: '在文件树中显示', copyPath: '复制路径', copyRelativePath: '复制相对路径', download: '下载', downloadSaved: '已保存', downloadFailed: '下载失败', rename: '重命名…', delete: '删除', renameTitle: '重命名', renameLabel: '新名称', deleteTitle: name => `删除 ${name}?`, deleteBody: '将移至废纸篓,你可以从那里恢复。', pathCopied: '已复制路径' }, boot: { ready: 'Hermes 桌面版已就绪', desktopBootFailedWithMessage: message => `桌面启动失败:${message}`, steps: { connectingGateway: '正在连接桌面网关', loadingSettings: '正在加载 Hermes 设置', loadingSessions: '正在加载最近会话', retryingRemoteBackend: '正在重新连接远程 Hermes 后端…', startingDesktopConnection: '正在启动桌面连接', startingHermesDesktop: '正在启动 Hermes 桌面版…' }, errors: { backgroundExited: 'Hermes 后台进程已退出。', backgroundExitedDuringStartup: 'Hermes 后台进程在启动期间退出。', backendStopped: '后端已停止', desktopBootFailed: '桌面启动失败', gatewayConnectionLost: '与网关的连接已断开', gatewayConnectionLostDetail: 'Still retrying in the background. You can keep reading and drafting — open Gateway settings if this persists.', gatewaySignInRequired: '需要登录网关', ipcBridgeUnavailable: '桌面 IPC 桥不可用。' }, failure: { title: 'Hermes 无法启动', description: '后台网关没有启动。请尝试下面的恢复步骤;这里不会删除你的对话或设置。', remoteTitle: '需要重新登录远程网关', remoteDescription: '你的远程网关会话已过期。请重新登录以恢复连接。这些操作不会删除你的对话或设置。', retry: '重试', repairInstall: '修复安装', useLocalGateway: '使用本地网关', gatewaySettings: '网关设置', back: '返回', openLogs: '打开日志', repairHint: '修复会重新运行安装器,在新机器上可能需要几分钟。', remoteSignInHint: signInLabel => `先退出已保存的远程浏览器会话,然后打开${signInLabel}。也可以使用本地网关切换到随应用提供的后端。`, signOutAndSignIn: '退出并重新登录', remoteFailureHint: '在“网关设置”中检查网关 URL 和登录,或切换到本地网关。', cloudDownTitle: 'Nous Cloud 代理已宕机', cloudDownDescription: '此网关连接的 Nous 托管云代理正在返回服务器错误。无法在此处重启——请检查其状态、切换到本地网关或获取支持。', cloudDownHint: '使用下方按钮打开 Nous Portal(查看实例状态与操作)或加入 Discord 获取支持。', cloudDownCheckPortal: '查看 Portal 状态', cloudDownDiscord: '在 Discord 获取帮助', hideRecentLogs: '隐藏最近日志', showRecentLogs: '显示最近日志', signedInTitle: '已登录', signedInMessage: '正在重新连接远程网关…', signInIncompleteTitle: '登录未完成', signInIncompleteMessage: '登录窗口在认证完成前关闭。', signInFailed: '登录失败', signInToRemoteGateway: '登录远程网关', signInWithProvider: provider => `使用 ${provider} 登录`, identityProvider: '你的身份提供方' } }, notifications: { region: '通知', hide: '隐藏', show: '显示', more: count => `另外 ${count} 条通知`, clearAll: '全部清除', dismiss: '关闭通知', details: '详情', copyDetail: '复制详情', copyDetailFailed: '无法复制通知详情', backendOutOfDateTitle: '后端版本过旧', backendOutOfDateMessage: '你的 Hermes 后端早于当前桌面构建,可能无法正常工作。请更新以保持一致。', installMethodUnsupportedTitle: '不受支持的安装方式', updateHermes: '更新 Hermes', updateReadyTitle: '有可用更新', updateReadyMessage: count => `有 ${count} 项新更改可用。`, updateReadyMessageUnknown: '有新更新可用。', seeWhatsNew: '查看更新内容', mcp: { needsAuthTitle: 'MCP 服务器需要重新认证', needsAuthMessage: name => `${name} MCP 需要重新认证。`, errorTitle: 'MCP 服务器无法连接', errorMessage: name => `${name} MCP 健康检查失败。`, signIn: '登录', view: '查看' }, errors: { elevenLabsNeedsKey: 'ElevenLabs STT 需要 ELEVENLABS_API_KEY。', elevenLabsRejectedKey: 'ElevenLabs 拒绝了该 API key (401)。', diskFull: '磁盘已满 — 请腾出一些空间后再试。', gatewayAuthFailed: '网关认证失败 — 请检查你的 API_SERVER_KEY。', methodNotAllowed: '桌面后端拒绝了该请求 (405 Method Not Allowed)。请尝试重启 Hermes Desktop。', microphonePermission: '麦克风权限已被拒绝。', openaiRejectedApiKey: 'OpenAI 拒绝了该 API key。', openaiRejectedApiKeyWithStatus: status => `OpenAI 拒绝了该 API key (${status} invalid_api_key)。`, openaiTtsNeedsKey: 'OpenAI TTS 需要 VOICE_TOOLS_OPENAI_KEY 或 OPENAI_API_KEY。', codeSkewRestartRequired: '更新后此后端仍在运行旧代码。请重启以加载新代码。' }, voice: { configureSpeechToText: '配置语音转文字后即可使用语音模式。', couldNotStartSession: '无法启动语音会话', microphoneAccessDenied: '麦克风访问被拒绝。', microphoneConstraintsUnsupported: '此设备不支持当前麦克风约束。', microphoneFailed: '麦克风出错', microphoneInUse: '麦克风正被其他应用占用。', microphonePermissionDenied: '麦克风权限被拒绝。', microphoneStartFailed: '无法开始麦克风录音。', microphoneUnsupported: '当前运行环境不支持麦克风录音。', noMicrophone: '未找到麦克风。', noSpeechDetected: '没有检测到语音', playbackFailed: '语音播放失败', recordingFailed: '语音录制失败', sayStopToEnd: phrase => `说“${phrase}”即可结束语音对话。`, transcriptionFailed: '语音转写失败', transcriptionUnavailable: '语音转写暂不可用。', tryRecordingAgain: '请再录一次。', unavailable: '语音不可用' }, native: { approvalTitle: '需要批准', approveAction: '批准', rejectAction: '拒绝', inputTitle: '需要输入', inputBody: 'Hermes 正在等待你的回应。', turnDoneTitle: 'Hermes 已完成', turnDoneBody: '', turnErrorTitle: '本轮失败', backgroundDoneTitle: '后台任务已完成', backgroundFailedTitle: '后台任务失败', creditsTitle: '额度' } }, remoteDisplayBanner: { message: reason => `软件渲染已启用 — 检测到远程显示(${reason})。为防止画面闪烁,已禁用 GPU 加速。` }, billingBlock: { titleNous: 'Nous 额度已用尽', titleProvider: provider => `额度已用尽 — ${provider}`, fallbackMessage: '您的账户额度已用尽。请充值以继续使用。', openBilling: '打开账单', addCredits: '添加额度', dismiss: '忽略' }, sendDiagnostics: { title: '向 Nous 发送诊断信息', privacyNotice: '这会将调试包上传到 Nous 内部存储(并非公开粘贴板)。内容包括系统信息(操作系统、版本、服务商、已配置的 API 密钥种类 — 绝不包含密钥本身)以及完整的 agent、gateway 和桌面端日志(每个最多 512 KB,很可能包含对话内容、工具输出与文件路径)。上传前会先脱敏。仅 Nous 员工与获准的 Discord 版主可查看,14 天后自动删除。', upload: '上传', uploading: '上传中…', cancel: '取消', close: '关闭', copyLink: '复制链接', uploadIdFallback: id => `未返回查看链接 — 请向支持人员提供上传 ID ${id}`, doneTitle: '诊断信息已发送', doneDescription: '调试包已私密上传。在您的支持会话中分享以下链接,团队即可查看您的日志。', failedTitle: '上传失败', failedHint: '您也可以在终端运行 `hermes debug share --nous`,或运行 `hermes debug share --local` 在不上传的情况下查看报告。', handoffLead: '在以下位置继续讨论:', links: { github: 'GitHub Issues', portal: 'Nous Portal 支持', discord: 'Discord' } }, titlebar: { hideSidebar: '隐藏侧边栏', showSidebar: '显示侧边栏', search: '搜索', searchTitle: '搜索会话、视图与操作', swapSidebarSides: '交换侧边栏位置', hideRightSidebar: '隐藏右侧栏', showRightSidebar: '显示右侧栏', unreadSessions: count => (count === 1 ? '1 个未读会话' : `${count} 个未读会话`), muteHaptics: '关闭触感反馈', unmuteHaptics: '开启触感反馈', openSettings: '打开设置', openStarmap: '打开记忆图谱', enterHud: 'HUD 模式', exitHud: '退出 HUD 模式', resetHudLayout: '重置 HUD 大小和位置', layoutEditor: '布局编辑器', layoutEditorTitle: mod => `布局编辑器 — ${mod} 点击重置布局` }, keybinds: { title: '键盘快捷键', subtitle: open => `点击快捷键即可重新绑定 · ${open} 可重新打开此面板。`, search: '搜索快捷键…', rebind: '重新绑定', reset: '恢复默认', resetAll: '全部重置', pressKey: '请按下按键…', set: '设置', conflictWith: label => `已绑定到“${label}”`, categories: { composer: '输入框', profiles: '配置', session: '会话', navigation: '导航', view: '视图' }, actions: { 'keybinds.openPanel': '打开键盘快捷键', 'nav.commandPalette': '打开命令面板', 'nav.commandCenter': '打开命令中心', 'nav.settings': '打开设置', 'nav.profiles': '打开配置', 'nav.skills': '打开技能', 'nav.messaging': '打开消息', 'nav.artifacts': '打开制品', 'nav.cron': '打开定时任务', 'nav.agents': '打开智能体', 'session.new': '新建会话', 'session.newTab': '新建会话标签', 'session.newWindow': '新建窗口', 'session.next': '下一个会话', 'session.prev': '上一个会话', 'session.slot.1': '切换到最近会话 1', 'session.slot.2': '切换到最近会话 2', 'session.slot.3': '切换到最近会话 3', 'session.slot.4': '切换到最近会话 4', 'session.slot.5': '切换到最近会话 5', 'session.slot.6': '切换到最近会话 6', 'session.slot.7': '切换到最近会话 7', 'session.slot.8': '切换到最近会话 8', 'session.slot.9': '切换到最近会话 9', 'session.focusSearch': '搜索会话', 'session.togglePin': '固定/取消固定当前会话', 'session.archive': '归档当前会话', 'workspace.newWorktree': '新建工作树', 'workspace.openFolder': '打开文件夹为项目', 'composer.focus': '聚焦输入框', 'composer.modelPicker': '打开模型选择器', 'composer.voice': '开始 / 停止语音对话', 'view.toggleSidebar': '切换会话侧边栏', 'view.toggleRightSidebar': '切换文件浏览器', 'view.toggleReview': '切换审查面板', 'view.toggleStatusbar': '切换状态栏', 'view.toggleTabStrip': '切换标签', 'view.showFiles': '显示文件浏览器', 'view.showBrowser': '打开浏览器', 'view.showTerminal': '显示终端', 'view.selectionToComposer': '将选区发送到输入框', 'view.terminalCopy': '复制终端选区', 'view.terminalPaste': '粘贴到终端', 'view.closeTab': '关闭标签', 'view.reopenTab': '重新打开已关闭的标签', 'view.flipPanes': '交换侧边栏位置', 'view.findInPage': '页面内查找', 'view.findNext': '查找下一个', 'view.findPrevious': '查找上一个', 'appearance.toggleMode': '切换浅色/深色', 'profile.default': '切换到默认配置', 'profile.switch.1': '切换到配置 1', 'profile.switch.2': '切换到配置 2', 'profile.switch.3': '切换到配置 3', 'profile.switch.4': '切换到配置 4', 'profile.switch.5': '切换到配置 5', 'profile.switch.6': '切换到配置 6', 'profile.switch.7': '切换到配置 7', 'profile.switch.8': '切换到配置 8', 'profile.switch.9': '切换到配置 9', 'profile.switch.10': '切换到配置 10', 'profile.switch.11': '切换到配置 11', 'profile.switch.12': '切换到配置 12', 'profile.switch.13': '切换到配置 13', 'profile.switch.14': '切换到配置 14', 'profile.switch.15': '切换到配置 15', 'profile.switch.16': '切换到配置 16', 'profile.switch.17': '切换到配置 17', 'profile.switch.18': '切换到配置 18', 'profile.next': '下一个配置', 'profile.prev': '上一个配置', 'profile.toggleAll': '切换全部配置视图', 'profile.create': '创建配置', 'composer.send': '发送消息', 'composer.newline': '插入换行', 'composer.steer': '引导正在运行的回合', 'composer.queue': '消息排队', 'composer.sendQueued': '发送下一条排队消息', 'composer.mention': '引用文件、文件夹、网址', 'composer.slash': '斜杠命令面板', 'composer.help': '快速帮助', 'composer.history': '切换弹窗/历史', 'composer.cancel': '关闭弹窗·取消运行' } }, findInPage: { next: '下一个匹配', previous: '上一个匹配' }, language: { label: '语言', description: '选择桌面界面的语言。', saving: '正在保存语言…', saveError: '语言更新失败', switchTo: '切换语言', searchPlaceholder: '搜索语言…', noResults: '未找到语言' }, settings: { runtime: EN_RUNTIME_SETTINGS, closeSettings: '关闭设置', exportConfig: '导出配置', importConfig: '导入配置', resetToDefaults: '恢复默认', resetConfirm: '将所有设置恢复为 Hermes 默认值?', exportFailed: '导出失败', resetFailed: '重置失败', nav: { providers: '提供方', providerAccounts: '账号', providerApiKeys: 'API 密钥', providerCustomEndpoints: '自定义端点', providerLocalModels: '本地模型', gateway: '网关', apiKeys: '工具与密钥', keybinds: '键盘快捷键', keysTools: '工具', keysSettings: '设置', mcp: 'MCP', archivedChats: '已归档对话', about: '关于', billing: '账单', notifications: '通知', plugins: '插件' }, plugins: { title: '桌面插件', blurb: '加载到此应用中的界面扩展——随构建捆绑,或放入 desktop-plugins 文件夹(包括 Hermes 编写的插件)。禁用会即时卸载插件并在重启后保持。', count: n => `已安装 ${n} 个`, openFolder: '打开插件文件夹', rescan: '重新扫描', reveal: '在文件管理器中显示', enable: '启用', disable: '禁用', failed: '失败', empty: '尚未安装桌面插件。', kinds: { bundled: '内置', disk: '磁盘', runtime: '运行时' }, agent: { title: '智能体插件', blurb: '你安装到 Hermes 后端的插件——工具、技能、MCP 服务器、钩子和斜杠命令。「便携」插件是 Agent Plugins 标准包(技能 + MCP 组合,也可在其他智能体中使用)。开关在新会话中生效。', appliesTo: '应用于:', empty: '尚未安装智能体插件。', loadFailed: '无法加载智能体插件', portable: '便携', search: '搜索插件…', noMatches: '没有匹配的插件。', toggleFailed: (name: string) => `无法切换 ${name}`, updateBackendToManage: '请更新 Hermes 后端以便在桌面端管理此插件。', sources: { bundled: '内置', user: '用户', git: 'git', project: '项目', entrypoint: 'pip' } }, installModal: { title: '安装插件', description: '在安装前查看此仓库包含哪些组件。', repoLabel: '仓库', includesHeading: '此包包含', agentLabel: '智能体插件', desktopLabel: '桌面 UI', agentTargetLocal: profile => `安装到 ${profile} 后端(~/.hermes/plugins/)`, agentTargetRemote: profile => `安装到已连接的 ${profile} 后端`, desktopTarget: '安装到此应用的本地 desktop-plugins 文件夹', desktopOnlyNote: '仅桌面包不会安装后端智能体插件。', insecureWarning: '此 URL 使用了不安全的本地 scheme。生产环境请优先使用 https:// 或 git@。', securityHeading: '安装前须知', securityIntro: '请仅安装你信任的来源 — 如需了解将添加的内容,可先查看下方仓库。', sourceHeading: '源代码', viewRepository: '查看仓库', viewPluginFiles: '查看插件文件', gitCloneLabel: 'Git 克隆地址', enableAgent: '安装后启用智能体插件', forceReinstall: '强制重装(替换已存在的安装)', install: '安装', installing: '正在安装…', probing: '正在检查仓库…', probeUnavailable: '当前环境无法检查插件仓库。', desktopUnavailable: '当前环境无法安装桌面插件。', selectComponent: '请至少选择一个要安装的组件。', agentSuccess: name => `智能体插件 ${name} 已安装`, desktopSuccess: name => `桌面插件 ${name} 已安装`, agentFailed: '智能体插件安装失败', desktopFailed: '桌面插件安装失败', missingEnv: vars => `缺少环境变量:${vars}。请在设置 → 密钥中添加。` } }, notifications: { title: '通知', intro: '原生桌面通知,区别于应用内提示。设置按设备保存,每台电脑各自独立。', enableAll: '启用通知', enableAllDesc: '关闭后静音下方所有通知。', focusedHint: '完成提醒仅在 Hermes 处于后台时触发。', kinds: { approval: { label: '需要批准', description: '有命令正在等待你批准或拒绝。' }, input: { label: '需要输入', description: 'Hermes 提出了问题,或需要密码或密钥。' }, turnDone: { label: '回复就绪', description: 'Hermes 在后台时完成了一轮对话。' }, turnError: { label: '本轮失败', description: '后台回合错误。' }, backgroundDone: { label: '后台任务完成', description: '后台终端命令已完成。' }, credits: { label: '额度提醒', description: '额度访问被暂停或恢复。' }, plugin: { label: '插件通知', description: 'Hermes 在后台时,桌面插件发送了通知。' } }, test: '发送测试通知', testTitle: 'Hermes', testBody: '通知工作正常。', testSent: '测试已发送。如果没有出现,请检查系统通知权限和专注模式/勿扰模式。', testUnsupported: '此系统不支持原生通知。', completionSoundTitle: '完成提示音', completionSoundDesc: '智能体回合结束时播放。可在此选择预设并预览。', completionSoundPreview: '预览' }, sections: { model: '模型', chat: '对话', appearance: '外观', workspace: '工作区', safety: '安全', memory: '记忆与上下文', voice: '语音', advanced: '高级' }, searchPlaceholder: { about: '关于 Hermes Desktop', config: '搜索设置…', gateway: '网关连接…', keys: '搜索 API 密钥…', mcp: '搜索 MCP 服务器…', sessions: '搜索已归档会话…' }, modeOptions: { light: { label: '明亮', description: '明亮的桌面界面' }, dark: { label: '暗色', description: '低眩光工作区' }, system: { label: '跟随系统', description: '跟随系统外观' } }, appearance: { title: '外观', intro: '这些是仅桌面端的显示偏好。模式控制明暗;主题控制强调色与对话界面样式。', colorMode: '颜色模式', colorModeDesc: '选择固定模式,或让 Hermes 跟随系统设置。', toolViewTitle: '工具调用显示', toolViewDesc: '产品模式隐藏原始工具数据;技术模式显示完整输入/输出。', reasoningCollapsedTitle: '默认折叠推理过程', reasoningCollapsedDesc: '保留流式推理内容,但在您打开前保持折叠。', uiScaleTitle: '界面缩放', uiScaleDesc: (percent: number) => `缩放整个应用的文字和界面。也可使用 Cmd/Ctrl 加 +、- 或 0 调整。当前:${percent}%`, sessionDensityTitle: '会话列表密度', sessionDensityDesc: '选择侧边栏会话标题下方显示的信息量。', sessionDensityCompact: '紧凑', sessionDensityComfortable: '舒适', sessionDensityDetailed: '详细', tabStripTitle: '标签栏', tabStripDesc: '在分区上方显示标签。自动模式会在分区只有一个面板时隐藏标签。', tabStripAuto: '自动', tabStripAlways: '始终', tabStripNever: '从不', terminalFontTitle: '终端字体', terminalFontDesc: '选择已安装的字体用于桌面端终端。Nerd Font 可正确显示 Powerlevel10k 和 Shell 图标;留空则使用内置的 JetBrains Mono。', terminalFontPlaceholder: 'MesloLGS NF 或 CSS 字体栈', terminalFontPreview: '字形预览', terminalFontReset: '使用默认字体', translucencyTitle: '窗口透明', translucencyDesc: '让整个窗口(包括文字)透出桌面。', translucencyGlassDesc: '磨砂玻璃:桌面以柔和模糊透出,文字保持清晰。', translucencyModeClear: '透明', translucencyModeGlass: '玻璃', translucencyTintTitle: '色调', translucencyFadeTitle: '淡出', translucencyFrostTitle: '磨砂质感', translucencyFrost: { 'under-window': '深邃', popover: '柔和', titlebar: '明亮', header: '透亮' }, translucencyScopeTitle: '应用范围', translucencyScope: { window: '整个窗口', sidebar: '仅侧边栏' }, backdropTitle: '聊天背景', backdropDesc: '对话后方那张淡淡的雕像图片。', introSplashTitle: '开场标识', introSplashDesc: '空白对话中显示的字标和提示语。', reactionsTitle: '消息回应', reactionsDesc: 'iMessage 风格的表情回应 — 你可以给消息添加回应,Hermes 也能回应你的消息。', tipsTitle: '应用内提示', tipsDesc: '指向应用某处的小气泡:空闲时偶尔出现,需要时 Hermes 也会给你一条。关掉一条就不再出现。', tipsReset: (count: number) => `恢复 ${count} 条已关闭的提示`, toursTitle: '引导导览', toursDesc: '让 Hermes 带你熟悉应用:调暗界面并逐步高亮每个位置。', composerPopoutTitle: '悬浮输入框', composerPopoutDesc: '允许将输入框拖出底部停靠区。关闭后,输入框会锁定在底部。', vibeHeartsTitle: '心情爱心', vibeHeartsDesc: '当你说谢谢、爱你、good bot 或发送爱心时飘出的爱心。与上方的消息回应是两回事。', embedsTitle: '内嵌预览', embedsDesc: '富预览会从第三方网站(YouTube、X 等)加载。询问会在你允许前显示占位符;总是会自动加载;关闭则保留纯链接。', embedsAsk: '询问', embedsAlways: '总是', embedsOff: '关闭', embedsReset: (count: number) => `重置 ${count} 个已允许的服务`, resumeLastSessionTitle: '启动时恢复上次会话', resumeLastSessionDesc: '开启后,应用冷启动时重新打开最近的聊天。关闭则始终从空白新会话开始。', product: '产品', productDesc: '易读的工具活动与简洁摘要。', technical: '技术', technicalDesc: '包含原始工具参数/结果及底层细节。', themeTitle: '主题', themeDesc: '仅桌面端调色板。所选模式叠加其上。', themeProfileNote: profile => `已为「${profile}」配置文件保存——每个配置文件保留各自的主题。`, installTitle: '从 VS Code 安装', installDesc: '粘贴 Marketplace 扩展 ID(例如 dracula-theme.theme-dracula),将其配色主题转换为桌面调色板。', installPlaceholder: 'publisher.extension', installButton: '安装', installing: '安装中…', installError: '无法安装该主题。', installed: name => `已安装「${name}」。`, removeTheme: '移除主题', importedBadge: '已导入', pet: { title: '宠物', intro: '领养一只悬浮在应用上的 petdex 动画宠物,它会根据 Hermes 的状态做出反应——工具执行时奔跑、成功时欢呼、出错时沮丧。', restartHint: '宠物功能需要重启——当前运行的应用在此功能加入前启动。请退出并重新打开 Hermes,然后回到此处。', scaleTitle: '大小', scaleDesc: '调整悬浮宠物的大小,所有界面即时生效。', roamTitle: '漫游', roamDesc: '空闲时让宠物自己在窗口内四处走动。', on: '开启', off: '关闭', chooseTitle: '选择宠物', chooseDesc: '选择后会自动安装(如需)并设为当前宠物。', searchPlaceholder: '搜索宠物…', unreachable: '无法连接到 petdex 画廊。请检查网络连接并重新打开此页面。', noMatch: query => `没有匹配「${query}」的宠物。`, installedTag: '已安装', generatedTag: '生成', countCapped: (cap, total) => `显示 ${total} 个中的 ${cap} 个——输入关键词以缩小范围。`, count: n => `${n} 个宠物。`, uninstall: name => `卸载 ${name}`, delete: name => `删除 ${name}`, deleteTitle: name => `删除 ${name}?`, deleteBody: '此操作会永久删除宠物,且无法重新安装。', deleteConfirm: '删除', rename: name => `重命名 ${name}`, renameTitle: '重命名宠物', renamePlaceholder: '给宠物起个名字', renameSave: '保存', exportPet: name => `导出 ${name}`, adoptFailed: slug => `无法领养 ${slug}`, uninstallFailed: slug => `无法卸载 ${slug}`, renameFailed: slug => `无法重命名 ${slug}`, exportFailed: slug => `无法导出 ${slug}`, noneAvailable: '当前没有可开启的宠物。', turnOnFailed: '无法开启宠物。', turnOffFailed: '无法关闭宠物。' } }, fieldLabels: defineFieldCopy({ model: '默认模型', modelContextLength: '上下文窗口', fallbackProviders: '备用模型', toolsets: '启用的工具集', timezone: '时区', display: { personality: '人格', showReasoning: '推理过程块' }, desktop: { repoScanEnabled: '自动发现代码仓库', repoScanRoots: '代码仓库扫描根目录', repoScanExcludePaths: '排除的代码仓库路径' }, agent: { maxTurns: '最大智能体步数', imageInputMode: '图片附件', apiMaxRetries: 'API 重试次数', serviceTier: '服务等级', toolUseEnforcement: '工具调用强制' }, terminal: { cwd: '工作目录', backend: '执行后端', timeout: '命令超时', persistentShell: '持久化 Shell', envPassthrough: '环境变量透传', dockerImage: 'Docker 镜像', singularityImage: 'Singularity 镜像', modalImage: 'Modal 镜像', daytonaImage: 'Daytona 镜像' }, fileReadMaxChars: '文件读取上限', toolOutput: { maxBytes: '终端输出上限', maxLines: '文件分页上限', maxLineLength: '行长度上限' }, codeExecution: { mode: '代码执行模式' }, approvals: { mode: '审批模式', timeout: '审批超时', mcpReloadConfirm: '确认 MCP 重载' }, commandAllowlist: '命令白名单', security: { redactSecrets: '隐去密钥', allowPrivateUrls: '允许私有 URL' }, browser: { allowPrivateUrls: '浏览器私有 URL', autoLocalForPrivateUrls: '私有 URL 使用本地浏览器' }, checkpoints: { enabled: '文件检查点', maxSnapshots: '检查点上限' }, voice: { recordKey: '语音快捷键', maxRecordingSeconds: '最长录音时长', autoTts: '朗读回复' }, stt: { enabled: '语音转文字', provider: '语音转文字提供方', local: { model: '本地转写模型', language: '转写语言' }, openai: { model: 'OpenAI STT 模型' }, groq: { model: 'Groq STT 模型' }, mistral: { model: 'Mistral STT 模型' }, elevenlabs: { modelId: 'ElevenLabs STT 模型', languageCode: 'ElevenLabs 语言', tagAudioEvents: '标记音频事件', diarize: '说话人区分' } }, tts: { provider: '文字转语音提供方', edge: { voice: 'Edge 语音' }, openai: { model: 'OpenAI TTS 模型', voice: 'OpenAI 语音' }, elevenlabs: { voiceId: 'ElevenLabs 语音', modelId: 'ElevenLabs 模型' }, xai: { voiceId: 'xAI (Grok) 语音', language: 'xAI 语言', speed: '播放速度', autoSpeechTags: '自动语音标签', optimizeStreamingLatency: '流式延迟优化', sampleRate: '采样率', bitRate: '比特率' }, minimax: { model: 'MiniMax TTS 模型', voiceId: 'MiniMax 语音' }, mistral: { model: 'Mistral TTS 模型', voiceId: 'Mistral 语音' }, gemini: { model: 'Gemini TTS 模型', voice: 'Gemini 语音' }, neutts: { model: 'NeuTTS 模型', device: 'NeuTTS 设备' }, kittentts: { model: 'KittenTTS 模型', voice: 'KittenTTS 语音' }, piper: { voice: 'Piper 语音' } }, memory: { memoryEnabled: '持久记忆', userProfileEnabled: '用户画像', memoryCharLimit: '记忆预算', userCharLimit: '画像预算', provider: '记忆提供方' }, context: { engine: '上下文引擎' }, compression: { enabled: '自动压缩', threshold: '压缩阈值', targetRatio: '压缩目标', protectLastN: '保护最近消息' }, delegation: { model: '子智能体模型', provider: '子智能体提供方', maxIterations: '子智能体轮次上限', maxConcurrentChildren: '并行子智能体', childTimeoutSeconds: '子智能体超时', reasoningEffort: '子智能体推理强度' }, updates: { nonInteractiveLocalChanges: '应用内更新本地更改' } }), fieldDescriptions: defineFieldCopy({ model: '用于新对话,除非你在输入框中选择其他模型。', modelContextLength: '保持为 0 则使用所选模型检测到的上下文窗口。', fallbackProviders: '默认模型失败时尝试的备用 provider:model 条目。', display: { personality: '新会话的默认助手风格。', showReasoning: '当后端提供推理内容时予以显示。' }, desktop: { repoScanEnabled: '扫描本地文件夹,并在“项目”中显示 Git 代码仓库。', repoScanRoots: '要扫描的文件夹。留空时扫描主目录。', repoScanExcludePaths: '发现代码仓库时跳过这些文件夹及其子目录。' }, timezone: '当 Hermes 需要本地时间上下文时使用。留空则使用系统时区。', agent: { imageInputMode: '控制图片附件如何发送给模型。', maxTurns: 'Hermes 停止一次运行前工具调用轮次的上限。' }, terminal: { cwd: '工具与终端操作的默认项目目录。', persistentShell: '当后端支持时,在命令之间保留 Shell 状态。', envPassthrough: '传入工具执行的环境变量。' }, codeExecution: { mode: '代码执行被限定到当前项目的严格程度。' }, fileReadMaxChars: 'Hermes 单次文件读取可读取的最大字符数。', approvals: { mode: 'Hermes 如何处理需要显式审批的命令。', timeout: '审批提示在超时前等待的时长。' }, security: { redactSecrets: '尽可能从模型可见内容中隐藏检测到的密钥。' }, checkpoints: { enabled: '在文件编辑前创建可回滚的快照。' }, memory: { memoryEnabled: '保存有助于未来会话的持久记忆。', userProfileEnabled: '维护一份精简的用户偏好画像。' }, context: { engine: '在接近上下文上限时管理长对话的策略。' }, compression: { enabled: '当对话变大时对较早的上下文进行摘要。' }, voice: { autoTts: '自动朗读助手回复。' }, stt: { enabled: '启用本地或提供方支持的语音转写。', elevenlabs: { languageCode: '可选的 ISO-639-3 语言代码。留空让 ElevenLabs 自动检测。' } }, updates: { nonInteractiveLocalChanges: 'Hermes 从应用内更新时(无终端提示),保留本地源码修改(暂存)或丢弃(放弃)。通过终端更新时始终会询问。' } }), about: { heading: 'Hermes Desktop', version: value => `版本 ${value}`, versionUnavailable: '版本不可用', bundleOutOfSync: '应用构建版本过旧', bundleOutOfSyncDesc: 'Hermes 运行时已更新,但桌面应用本身仍是旧构建——在应用更新之前,新的界面功能(如 Bot Mode)不会显示。请运行下方的更新以重新构建应用。如果此警告仍未消除,请从最新的桌面安装程序重新安装。', bundleOutOfSyncAction: '获取安装程序', bundleSwapPending: '重启以完成更新', bundleSwapPendingDesc: '更新后的应用已安装完成,只需重启 Hermes 即可加载新版本。聊天记录和设置不会受到影响。', bundleSwapPendingAction: '重启 Hermes', updates: '更新', checkNow: '立即检查', checking: '检查中…', seeWhatsNew: '查看新增内容', updateNow: '立即更新', releaseNotes: '发行说明', onLatest: '你已是最新版本。', installing: '正在安装更新。', cantUpdate: '此版本无法在应用内自我更新。', cantReach: '无法连接更新服务器。', tapCheck: '点击"立即检查"以查找更新。', updateReady: count => `已准备好新更新 (包含 ${count} 项更改)。`, updateReadyUnknown: '新更新已就绪。', lastChecked: age => `上次检查:${age}`, justNowSuffix: ' · 刚刚', automaticUpdates: '自动更新', automaticUpdatesDesc: 'Hermes 会在后台自动检查更新,并在有可用更新时通知你。', branchCommit: (branch, commit) => `分支 ${branch} · 提交 ${commit}`, never: '从未', justNow: '刚刚', minAgo: count => `${count} 分钟前`, hoursAgo: count => `${count} 小时前`, daysAgo: count => `${count} 天前` }, config: { none: '无', noneParen: '(无)', builtinOnly: '仅内置', notSet: '未设置', commaSeparated: '逗号分隔的值', searchPlaceholder: '搜索…', noResults: '未找到结果', systemDefault: '系统默认', loading: '正在加载 Hermes 配置...', emptyTitle: '无可配置项', emptyDesc: '此分区没有可调整的设置。', failedLoad: '设置加载失败', autosaveFailed: '自动保存失败', imported: '配置已导入', invalidJson: '配置 JSON 无效', toolsetsWipeConfirm: '确定移除所有已启用的工具集吗?这将禁用记忆、终端、网络搜索、委派以及大多数其他工具,直到你重新启用它们。', keepAwakeTitle: '保持电脑唤醒', keepAwakeDesc: '阻止本机休眠,让长时间或通宵运行继续进行。屏幕仍可变暗。', disableF12Title: '禁用 F12 开发者工具', disableF12Desc: '阻止 F12 打开开发者工具。Ctrl+Shift+I(Mac 上为 Cmd+Opt+I)仍然可用。', attachmentSizeTitle: '预览 / 图片加载大小上限', attachmentSizeDesc: '桌面端为预览和图片附件加载本地文件的大小上限(MB)。默认为 16。远程非图片附件使用单独的 256 MB 上限。设置过大会将整个文件读入内存,可能导致应用卡死或崩溃。', attachmentSizeUnit: 'MB', attachmentSizeLabel: '预览 / 图片加载大小上限(MB)' }, quickEntry: { enabledTitle: '快速输入', enabledDesc: '用全局快捷键在任何地方唤出一个小输入框,无需打开 Hermes 即可发送提示。', shortcutTitle: '快速输入快捷键', shortcutDesc: '至少需要一个修饰键,例如 CommandOrControl+Shift+Space。', active: '快捷键已生效。', takenBy: '此快捷键已被其他应用占用,请换一个。', invalidShortcut: '不是有效的快捷键。请至少包含一个修饰键。' }, credentials: { pasteKey: '粘贴密钥', pasteLabelKey: label => `粘贴 ${label} 密钥`, optional: '可选', enterValueFirst: '请先输入一个值。', couldNotSave: '无法保存凭据。', remove: '移除', getKey: '获取密钥', saving: '保存中' }, envActions: { actions: '操作', manageInKeys: '在 API 密钥中管理', docs: '文档', hideValue: '隐藏值', revealValue: '显示值', replace: '替换', set: '设置', clear: '清除' }, // v2 多连接注册表:设置 → 网关。 connections: { title: '已注册网关', intro: '管理本机以及通过远程、SSH 或 Hermes Cloud 连接可访问的每个 Hermes 网关。', stagedNote: '可在“会话”侧边栏切换网关。配置档案、聊天、消息和定时任务归属于各自网关;其他网关上的工作会继续运行。', launchModeTitle: '启动时返回上次使用网关的会话视图', launchModeDesc: '关闭时,会话将在主网关上打开。', searchPlaceholder: '搜索网关…', noSearchResults: '没有与搜索匹配的网关。', loadFailed: '无法加载连接', currentPill: '当前', primaryPill: '主连接', managedPill: '应用管理', addConnection: '添加连接', editConnection: '编辑', removeConnection: '移除', removeConfirmTitle: '移除此连接?', removeConfirmDesc: (label: string) => `“${label}”将从本应用移除。实例本身不受影响——你可以随时重新添加。`, makePrimary: '设为主连接', testConnection: '测试', testOk: '可访问', testFailed: '连接测试失败', saveFailed: '无法保存连接', removeFailed: '无法移除连接', updateAll: '更新所有实例', updateAllRunning: '正在更新所有实例…', updateAllDone: '更新已分发', updateAllFailed: '批量更新失败', updateSkippedCloud: '由 Hermes Cloud 托管', kindLocal: '本地', kindRemote: '远程网关', kindCloud: 'Hermes Cloud', kindSsh: 'SSH', kindLocalDesc: '由本应用管理的 Hermes 运行时。', kindRemoteDesc: '可通过 HTTP(S) 访问的 Hermes 网关——局域网、Tailscale 或互联网。', kindCloudDesc: '通过你的 Hermes Cloud 账户发现的托管实例。', kindSshDesc: '通过 SSH 访问的 Hermes 安装。', labelTitle: '名称', labelDesc: '必填。此实例出现的所有位置都会显示该名称;必须唯一(例如“家庭服务器”、“工作笔记本”)。', labelPlaceholder: '家庭服务器', urlTitle: '网关 URL', sshHostTitle: 'SSH 主机', headersTitle: '额外网关请求头', headersDesc: '随发往此网关的每个 HTTP 和 WebSocket 请求一起发送——用于 Cloudflare Access 等访问代理(CF-Access-Client-Id / CF-Access-Client-Secret)。值加密存储。由 Hermes 管理的请求头(Authorization、Cookie、Host 等)会被忽略。', headerValuePlaceholder: '值', headerValueSaved: '已保存——留空以保留', headerAdd: '添加请求头', headerRemove: '移除', duplicateLocal: '本应用已管理一个本地连接——只能有一个。', duplicateUrl: (label: string) => `已存在指向此网关 URL 的连接(“${label}”)。`, duplicateSsh: (label: string) => `已存在指向此 SSH 主机的连接(“${label}”)。`, sameBackendHint: (label: string) => `与“${label}”是同一后端`, localAddHint: '“本地”不可用:应用管理的本地连接已存在(永远只有一个)。', cloudAddHint: '提示:在上方登录 Hermes Cloud 可自动发现你的智能体——此表单仅用于手动注册已知的实例 URL。', save: '保存连接', saving: '保存中…', cancel: '取消', empty: '尚未注册任何连接。' }, managedUpdates: { title: '托管更新', intro: '以事务方式更新由桌面端托管的 SSH 安装:先排空会话,再更新远端检出,最后恢复每个 profile,并生成关联回执。', sshConnection: '桌面端托管的 SSH 安装', update: '更新', updating: '更新中…', progress: '正在排空会话、更新远端安装并恢复 profile…', updated: '已更新', partial: '已更新 — 恢复失败', refused: '已拒绝', failed: '更新失败', alreadyRunning: '更新已在进行中', receipt: (id: string, outcome: string) => `回执 ${id} · ${outcome}`, receiptVersions: (pre: string, post: string) => `${pre} → ${post}`, scopesRestored: (profiles: string) => `已恢复的 profile:${profiles}`, scopeNotRestored: (profile: string, error: string) => `Profile“${profile}”未恢复:${error}` }, gateway: { loading: '正在加载网关设置...', unavailableTitle: '网关设置不可用', unavailableDesc: '桌面 IPC 桥未暴露网关设置。', title: '网关连接', envOverride: '环境变量覆盖', intro: 'Hermes Desktop 默认会启动自己的本地网关。当你希望此应用控制另一台机器上或可信代理后的现有 Hermes 后端时,可以使用远程网关。网关连接属于本机级设置;profile 是从所连接的网关中发现的。', envOverrideTitle: '环境变量正在控制此桌面会话。', envOverrideDesc: '取消设置 HERMES_DESKTOP_REMOTE_URL 和 HERMES_DESKTOP_REMOTE_TOKEN 后才会使用下面保存的设置。', modeTitle: '连接模式', localTitle: '本地网关', localDesc: '在 localhost 启动私有 Hermes 后端。这是默认方式,并且可离线工作。', remoteTitle: '远程网关', remoteDesc: '将此桌面外壳连接到远程 Hermes 后端。', remoteAuthHint: '托管网关使用 OAuth 或用户名密码;自托管网关也可能使用会话 token。', cloudTitle: 'Hermes Cloud', cloudDesc: '只需登录 Hermes Cloud 一次,即可从你账户下的智能体中选择——无需粘贴 URL。', cloudSignInTitle: 'Hermes Cloud', cloudSignIn: '登录 Hermes Cloud', cloudSignedIn: '已登录 Hermes Cloud', cloudNeedsSignIn: '登录 Hermes Cloud 以发现你账户下的智能体。', cloudSignedInDesc: '你已登录。在下方选择一个智能体;会话会自动刷新。', cloudAgentsTitle: '你的智能体', cloudOrgPickerTitle: '选择一个组织', cloudOrgSelect: '选择', cloudOrgChange: '切换组织', cloudOrgRole: role => `角色:${role}`, cloudLoadingAgents: '正在加载你的智能体…', cloudNoAgents: { before: '此账户下未找到智能体。请在', linkText: 'Nous 门户', after: '中创建一个,然后刷新。' }, cloudRefresh: '刷新', cloudConnect: '连接', cloudConnecting: '正在连接…', cloudDiscoverFailed: '无法加载你的 Hermes Cloud 智能体', cloudConnectFailed: '无法连接到该智能体', cloudSignInFailed: 'Hermes Cloud 登录失败', cloudSignedOutTitle: '已退出 Hermes Cloud', cloudSignedOutMessage: '已清除 Hermes Cloud 会话。', cloudConnectedTitle: '已连接', cloudConnectedPill: '已连接', cloudConnectedTo: name => `已连接到 ${name}。`, cloudAgentProvisioning: '正在配置…', cloudStatusLabel: status => `状态:${status}`, remoteUrlTitle: '远程 URL', remoteUrlDesc: '远程 dashboard 后端的基础 URL。支持路径前缀,例如 /hermes。', probing: '正在检查此网关的认证方式…', probeError: '暂时无法访问此网关。请检查 URL;网关响应后会显示认证方式。', signedIn: '已登录', signIn: '登录', signOut: '退出登录', signInWith: provider => `使用 ${provider} 登录`, authTitle: '认证', authSignedInPassword: '此网关使用用户名和密码。你已登录,会话会自动刷新。', authSignedInOauth: '此网关使用 OAuth。你已登录,会话会自动刷新。', authNeedsPassword: '此网关使用用户名和密码。请登录以授权此桌面应用。', authNeedsOauth: provider => `此网关使用 OAuth。请使用 ${provider} 登录以授权此桌面应用。`, tokenTitle: '会话 token', tokenDesc: '用于 REST 和 WebSocket 访问的 dashboard 会话 token。留空则保留已保存的 token。', existingToken: value => `现有 token ${value}`, savedToken: '已保存', pasteSessionToken: '粘贴会话 token', plainTextConfirmTitle: '以明文存储网关 token?', plainTextConfirmDesc: '在此设备上未找到操作系统的密钥环服务,因此 token 将以未加密的明文保存在应用的连接设置文件中,以该用户身份运行的任何进程都可读取。请安装或启用 GNOME Keyring 或 KWallet 以进行加密存储。', plainTextConfirmAction: '以明文保存', plainTextStoredTitle: 'Token 以明文存储', plainTextStoredDesc: '安全存储不可用,因此已保存的 token 以未加密方式存储在此设备上应用的连接设置文件中。请安装或启用 GNOME Keyring 或 KWallet 以对其加密。', keychainEncryptionTitle: '使用系统钥匙串加密已保存的机密', keychainEncryptionDesc: '默认关闭。开启后,网关 token 和登录凭据将使用系统钥匙串(Keychain Access、GNOME Keyring 或 Windows DPAPI)加密——系统可能会请求授权或密码。关闭时,它们以仅当前用户可读的普通文件形式存储。', keychainEncryptionFailed: '无法更改机密加密设置', testRemote: '测试远程', saveForRestart: '保存到下次重启', saveAndReconnect: '保存并重连', diagnostics: '诊断', diagnosticsDesc: '在文件管理器中显示 desktop.log,网关启动失败时很有用。', openLogs: '打开日志', incompleteTitle: '远程网关配置不完整', incompleteSignIn: '切换到远程前,请输入远程 URL 并完成登录。', incompleteToken: '切换到远程前,请输入远程 URL 和会话 token。', incompleteSignInTest: '测试前,请输入远程 URL 并完成登录。', incompleteTokenTest: '测试前,请输入远程 URL 和会话 token。', enterUrlFirst: '请先输入远程 URL。', restartingTitle: '网关连接正在重启', savedTitle: '网关设置已保存', restartingMessage: 'Hermes Desktop 将使用已保存设置重新连接(界面保持打开)。', savedMessage: '已保存,下一次重启生效。', connectedTo: (baseUrl, version) => `已连接到 ${baseUrl}${version ? ` · Hermes ${version}` : ''}`, reachableTitle: '远程网关可访问', signedOutTitle: '已退出登录', signedOutMessage: '已清除远程网关会话。', failedLoad: '网关设置加载失败', signInFailed: '登录失败', signOutFailed: '退出登录失败', testFailed: '远程网关测试失败', applyFailed: '无法应用网关设置', saveFailed: '无法保存网关设置', sshTitle: '通过 SSH 连接', sshDesc: 'Hermes 会通过 SSH 在远程启动并以隧道连接到本应用——无需自行启动或暴露任何服务。前提:已具备到该主机的密钥 SSH 访问。', sshTrustHint: '首次提供的主机密钥会被信任并固定;后续变更将被拒绝。', sshHostTitle: '主机', sshHostDesc: 'user@host,或 ~/.ssh/config 中的 Host 别名。', sshHostPick: '选择主机…', sshHostPickTitle: '主机', sshHostPickDesc: '~/.ssh/config 中的 Host 别名,或选择"自定义"手动输入。', sshHostCustom: '自定义(手动输入)…', sshUserTitle: '用户', sshUserDesc: '留空 = ~/.ssh/config 或当前用户。', sshUserPlaceholder: '来自 ~/.ssh/config', sshPortTitle: '端口', sshPortDesc: '留空 = 22 或 ~/.ssh/config 中的端口。', sshKeyTitle: '密钥文件', sshKeyDesc: '私钥路径。留空 = ssh-agent 或 ~/.ssh/config。', sshHermesPathTitle: 'Hermes 路径(可选)', sshHermesPathDesc: '远程 hermes 可执行文件的完整路径。留空 = 自动检测。', sshHermesPathPlaceholder: '自动检测', sshTestConnection: '测试 SSH', sshConnect: '连接', sshButtonsHint: '“保存”将在下次启动时生效,“连接”则立即重新连接。', sshReachable: (host, platform) => `可连接:${host}(${platform})——已找到 Hermes`, sshIncompleteHost: '连接前请输入 SSH 主机。', sshErrUnreachable: '无法通过 SSH 连接到该主机。请检查主机、端口和网络。', sshErrAuth: 'SSH 认证失败。请将密钥加载到 ssh-agent(ssh-add),或在 ~/.ssh/config 中设置 IdentityFile——Hermes 以非交互方式运行 ssh。', sshErrHostKey: '自上次连接以来主机密钥已更改。请确认这是预期的,然后运行 ssh-keygen -R 并重新连接。', sshErrNotInstalled: '远程主机上未安装 Hermes。请在远程安装(curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh)或设置 Hermes 路径。', sshErrPlatform: '不支持的远程平台。Hermes Desktop 的 SSH 模式支持 Linux、macOS 和 Windows 远程主机。', sshErrTimeout: 'SSH 连接超时。主机可能无法访问或处于休眠状态。', sshErrUpdateRequired: '使用 Desktop SSH 连接前,请更新远程主机上的 Hermes。', sshErrUnknown: 'SSH 连接失败。' }, keys: { loading: '正在加载 API 密钥和凭据...', failedLoad: 'API 密钥加载失败', empty: '此类别暂时没有配置项。' }, search: { placeholder: '搜索所有设置...', pill: '搜索' }, profileScope: { appliesTo: '应用于', editsProfile: profile => `此页面的更改将应用于“${profile}”配置文件。` }, mcp: { loading: '正在加载 MCP 服务器...', failedLoad: 'MCP 配置加载失败', nameRequiredTitle: '需要名称', nameRequiredMessage: '请为此 MCP 服务器提供配置键。', objectRequired: '服务器配置必须是 JSON 对象', invalidJson: 'MCP JSON 无效', saveFailed: '保存失败', removeFailed: '移除失败', gatewayUnavailableTitle: '网关不可用', gatewayUnavailableMessage: '重新加载 MCP 前请先重连网关。', reloadedTitle: 'MCP 工具已重新加载', reloadedMessage: '新的工具 schema 将应用到后续回合。', reloadFailed: 'MCP 重新加载失败', savedTitle: 'MCP 服务器已保存', savedMessage: name => `${name} 会在 MCP 重新加载后生效。`, newServer: '新服务器', reload: '重新加载 MCP', reloading: '重新加载中...', emptyTitle: '没有 MCP 服务器', emptyDesc: '添加 stdio 或 HTTP 服务器以暴露 MCP 工具。', disabled: '已禁用', editServer: '编辑服务器', name: '名称', serverJson: '服务器 JSON', remove: '移除', saveServer: '保存服务器', test: '测试连接', testing: '测试中…', testOk: count => `已连接 — ${count} 个工具可用`, testFailed: '连接失败', enableServer: name => `启用 ${name}`, disableServer: name => `禁用 ${name}`, serverEnabled: name => `${name} 已启用 — 对新会话生效。`, serverDisabled: name => `${name} 已禁用 — 对新会话生效。`, toggleFailed: (name, enabled) => `${enabled ? '开启' : '关闭'} ${name} 失败`, tabServers: '服务器', tabCatalog: '目录', catalogLoading: '正在加载 MCP 目录…', catalogLoadFailed: 'MCP 目录加载失败', catalogEmpty: '没有可用的目录条目。', catalogInstalled: '已安装', catalogEnabled: '已启用', catalogNeedsInstall: '需要构建', catalogInstall: '安装', catalogInstalling: '安装中…', catalogInstallStarted: name => `正在安装 ${name}… 完成后对新会话生效。`, catalogInstallFailed: name => `安装 ${name} 失败`, catalogEnvPrompt: name => `${name} 需要凭据`, catalogEnvRequired: '安装前请填写必需的值。', capabilitySummary: (tools, prompts, resources) => `已启用 ${[`${tools} 个工具`, ...(prompts ? [`${prompts} 个提示`] : []), ...(resources ? [`${resources} 个资源`] : [])].join('、')}`, costTokens: tokens => `每次调用约 ${tokens} token`, usage30d: uses => `30 天内 ${uses} 次调用`, unusedPill: '未使用', statusConnecting: '连接中…', statusNeedsAuth: '需要认证', statusError: '错误', statusOff: '关闭', allServers: '所有服务器', authenticatedTitle: '已认证', authenticatedMessage: (server, count) => `${server}:${count} 个工具`, waitingForBrowser: '等待浏览器…', authenticate: '认证', unsavedConnect: '未保存 — 保存 mcp.json 以连接。', enableTool: tool => `启用 ${tool}`, disableTool: tool => `禁用 ${tool}`, noOutput: '暂无输出。', deepLinkTitle: '添加 MCP 服务器?', deepLinkDescription: '一个链接请求将此 MCP 服务器添加到 Hermes。请检查下方的完整配置——它来自该链接,而非 Hermes。', deepLinkStdioWarning: '此服务器会使用下方所示命令在你的电脑上运行本地进程。仅在信任其来源时继续。', deepLinkConfirm: '添加服务器', deepLinkNameInvalid: '名称须为 1-64 个字母、数字、点、连字符或下划线。', deepLinkNameConflict: name => `已存在名为 ${name} 的服务器——请改用其他名称或取消。`, deepLinkErrorTitle: 'MCP 安装链接已拒绝', deepLinkErrorName: '链接中的服务器名称缺失或无效。', deepLinkErrorConfig: '链接中的配置不是有效的 base64 编码 JSON。', deepLinkErrorShape: '配置必须是包含字符串 `url` 或 `command` 字段的 JSON 对象。', deepLinkErrorUrl: '仅允许 http:// 和 https:// 服务器地址。', deepLinkErrorTooLarge: '配置负载超过 32KB 上限。', importButton: '导入', importPlaceholder: '粘贴 mcp.json 片段、npx/docker 命令、claude mcp add 命令、URL 或 Cursor 链接…', importNoMatch: '粘贴的文本中未识别到服务器配置。', importConfirm: '添加到 mcp.json', importConfirmMany: count => `添加 ${count} 个服务器到 mcp.json` }, model: { loading: '正在加载模型配置...', appliesDesc: '应用于新会话。可在输入框的模型选择器中临时切换当前对话。', provider: '提供方', model: '模型', applying: '应用中...', defaultsLabel: '默认值', reasoning: '推理', reasoningOff: '关闭', defaultsFailed: '保存模型默认值失败', loadFailed: '无法加载模型', restartRequired: '更新后此后端仍在运行旧代码。请重启以加载新代码。', restartBackend: '重启后端', restartingBackend: '正在重启后端...', restartFailed: '无法重启后端', auxiliaryTitle: '辅助模型', resetAllToMain: '全部重置为主模型', auxiliaryDesc: '辅助任务默认使用主模型。你可以为任意任务指定专用模型。', setToMain: '设为主模型', change: '更改', autoUseMain: '自动 · 使用主模型', providerDefault: '(提供方默认)', fallbackAdd: '添加备用模型', fallbackEmpty: '未配置备用模型 — 默认模型失败时才会使用备用模型。', notInCatalog: '不在该提供方的模型列表中 — 调用可能回退到备用模型。', tasks: { vision: { label: '视觉', hint: '图片分析' }, compression: { label: '压缩', hint: '上下文压缩' }, skills_hub: { label: '技能中心', hint: '技能搜索' }, approval: { label: '审批', hint: '智能自动批准' }, mcp: { label: 'MCP', hint: 'MCP 工具路由' }, title_generation: { label: '标题生成', hint: '会话标题' }, review: { label: '评审', hint: '/review 评审子智能体' }, curator: { label: '维护器', hint: '技能使用审查' } } }, localModels: { title: '本地模型', runtimeTitle: '本地运行时', runtimeReady: backend => `就绪 · ${backend}`, serverRunning: '运行中', runtimeInstalled: '已安装 llama.cpp 运行时', runtimeInstalledDetail: (tag, backend) => `构建 ${tag},${backend} 后端。Hermes 会为您启动并管理服务器。`, installTitle: '安装本地运行时', installDetail: '下载 llama.cpp 推理引擎(几百 MB)。下载的模型完全在本机运行——无需账号,数据不会离开您的电脑。', installAction: '安装运行时', installing: '正在安装运行时…', installFailed: '运行时安装失败', quickstartTitle: '在本机运行模型', quickstartDetail: (model, size) => `一键完成所有设置:本地引擎、${model}(需下载 ${size}),并设为新会话的默认模型。数据不会离开这台电脑。`, quickstartDetailReady: model => `一键将 ${model} 设为新会话的默认模型。所有内容都在本机运行。`, quickstartAction: '为我设置', quickstartConfigure: '自定义…', quickstartDoneToast: model => `${model} 已就绪——新会话将在本机运行。`, quickstartFailed: '本地模型设置失败', quickstartStageEngine: '引擎', quickstartStageModel: '模型', quickstartStageFinish: '完成', hardwareTitle: '本机配置', hardwareLoading: '正在检测硬件…', vram: label => `${label} 显存`, ram: label => `${label} 内存`, unifiedMemory: '统一内存', modelsTitle: '模型', recommended: '推荐', recommendedReason: { 'best-quality-resident': '在完全驻留 GPU 且保持全速的模型中质量最高。推荐会在质量与该硬件的预计速度之间权衡。', 'speed-gated-quality': '有更高质量的模型可以装入这台机器,但受内存带宽限制响应会太慢——这是保持流畅的最佳模型。', 'fastest-resident': '没有模型能在该硬件上达到全速;这是完全驻留 GPU 内存中最快的一个。', 'least-painful-spilled': '没有模型能完全装入 GPU 内存——这是从系统内存运行表现最好的一个。' } as Record, downloaded: '已下载', downloadAction: size => `下载 · ${size}`, downloadProgress: (done, total) => `正在下载 ${done} / ${total}`, downloadDoneToast: model => `${model} 已就绪。`, installDoneToast: '本地运行时已安装就绪。', useAction: '使用', activePill: '默认', updateTitle: '引擎有可用更新', updateDetail: (next, current) => `新的 llama.cpp 构建(${next})可以安装——当前为 ${current}。下载期间模型仍可正常使用。`, updateAction: '更新引擎', updating: '正在更新引擎…', upToDateTitle: '引擎已是最新', upToDateDetail: (tag, backend) => `正在运行 llama.cpp ${tag}(${backend})——Hermes 提供的最新构建。`, updateToast: next => `本地引擎有新构建(${next})。可在 设置 → 本地模型 中更新。`, activeDetail: '新对话使用此模型——发送首条消息时加载', activeNotLoaded: '首条消息时加载', loadedPill: '已加载', placementResident: '全部在 GPU', placementSpilled: '部分在内存', placementResidentTip: '完全在 GPU 显存中以此上下文窗口运行——全速。', placementSpilledTip: '模型的一部分从系统内存运行——可用但较慢。更紧凑的版本或更小的上下文可以完全放入显存。', loadingPill: '加载中…', ejectTip: '释放显存(需要时重新加载)', ejected: '模型已卸载——显存已释放。', ejectFailed: '无法卸载模型', stopServer: '关闭', startServer: '开启', runtimeRunningDetail: '本地服务器正在运行。关闭后将释放全部显存,新对话将不再使用本地模型,直到您重新开启。', serverStopped: '本地服务器已停止——显存已释放。', serverStarted: '本地服务器运行中。', serverStopFailed: '无法停止本地服务器', serverStartFailed: '无法启动本地服务器', activating: '启动中…', activateFailed: model => `无法切换到 ${model}`, activateDoneToast: model => `新对话将使用 ${model}。`, downloadFailed: model => `${model} 下载失败`, pillFitsGpu: '完全在 GPU 上运行', pillUsesRam: '使用系统内存', pillTooBig: '超出本机内存', browseTitle: '发现更多模型', browseHint: '搜索整个 Hugging Face。在这里下载的模型会自动适配你的机器,但未经我们测试。', browsePlaceholder: '按名称或作者搜索模型…', browseSearching: '正在搜索 Hugging Face', browseListing: '正在读取模型文件', browseShowFiles: '查看文件', browseRefresh: '刷新', browseDownloads: '次下载', browseLikes: '个赞', browseGated: '需要登录 Hugging Face', browseNoGguf: '未找到兼容的模型文件。', browseFitUnknown: '适配情况未知', browseAlreadyDownloaded: '已下载。', addedByYou: '由你添加', browseDownloadStarted: '正在下载 {name}', browseDownloadAria: '下载 {name}', sideloadButton: '添加模型文件', sideloadTitle: '选择 GGUF 模型文件', sideloadDone: '已添加 {name}。', sideloadAlreadyPresent: '已在你的库中。', pillFullContext: max => `完整 ${max} 上下文`, pillFullContextTip: '从一开始就以模型的完整上下文窗口运行', pillUpTo: max => `最高 ${max} 上下文`, pillGrowsTip: '随着对话需要更多空间自动增长', pillVision: '识图', deleteAction: '删除模型', deleteConfirm: model => `从磁盘删除 ${model}?`, deleted: model => `已删除 ${model}。`, deleteFailed: '删除失败' }, providers: { connectAccount: '连接账号', haveApiKey: '改用 API 密钥?', intro: '使用订阅登录,无需复制 API 密钥。Hermes 会在应用中为你完成浏览器登录。', connected: '已连接', collapse: '收起', connectAnother: '连接其他提供方', otherProviders: '其他提供方', disconnect: '断开连接', disconnectInTerminal: '断开连接(在终端中运行移除命令)', removeConfirm: provider => `移除 ${provider}?`, removeExternalGeneric: provider => `${provider} 由其自身的 CLI 管理 — 请在那里移除。`, removeKeyManaged: provider => `${provider} 由 API 密钥配置。请从 API Keys 中移除。`, removeTerminalConfirm: (provider, command) => `断开 ${provider}?这将在终端中运行 "${command}" 以清除凭据。`, removeTerminalRunning: provider => `正在终端中断开 ${provider}…`, removedTitle: '账号已移除', removedMessage: provider => `${provider} 已移除。`, failedRemove: provider => `无法移除 ${provider}`, noProviderKeys: '没有可用的提供方 API 密钥。', searchKeys: '搜索提供方…', noKeysMatch: '没有匹配的提供方。', localEndpoint: { title: '本地 / 自定义端点', description: '将 Hermes 指向任意 OpenAI 兼容端点(Zyphra、vLLM、llama.cpp、Ollama 等)。' }, loading: '正在加载提供方...' }, sessions: { loading: '正在加载已归档会话…', archivedTitle: '已归档会话', archivedIntro: '已归档对话会从侧边栏隐藏,但会保留全部消息。在侧边栏 Ctrl/⌘ 点击对话即可归档。', emptyArchivedTitle: '暂无归档', emptyArchivedDesc: '归档一个对话后会显示在这里。', unarchive: '取消归档', deletePermanently: '永久删除', messages: count => `${count} 条消息`, restored: '已恢复', deleteConfirm: title => `永久删除“${title}”?此操作无法撤销。`, autoArchiveTitle: '自动归档闲置会话', autoArchiveDesc: '自动归档你一段时间未使用的会话。已置顶的会话永远不会被归档,也不会删除任何内容——归档的会话会移动到这里。', autoArchiveDaysLabel: '归档前', autoArchiveDaysUnit: '天无活动', autoArchiveFailed: '无法更新自动归档设置', defaultDirTitle: '默认项目目录', defaultDirDesc: '新会话默认从此文件夹开始,除非你选择其他目录。留空则使用你的 home 目录。', defaultDirUpdated: '默认项目目录已更新', defaultsTo: label => `默认使用 ${label}。`, change: '更改', choose: '选择', clear: '清除', notSet: '未设置', failedLoad: '无法加载已归档会话', unarchiveFailed: '取消归档失败', deleteFailed: '删除失败', updateDirFailed: '无法更新默认目录', clearDirFailed: '无法清除默认目录' }, toolsets: { loadingConfig: '正在加载配置', savedTitle: '凭据已保存', savedMessage: key => `${key} 已更新。`, removedTitle: '凭据已移除', removedMessage: key => `${key} 已移除。`, failedSave: key => `保存 ${key} 失败`, failedRemove: key => `移除 ${key} 失败`, failedReveal: key => `显示 ${key} 失败`, removeConfirm: key => `从 .env 中移除 ${key}?`, set: '已设置', notSet: '未设置', selectedTitle: '已选择提供方', selectedMessage: provider => `${provider} 现在处于活动状态。`, failedSelect: provider => `选择 ${provider} 失败`, failedLoad: '工具配置加载失败', noProviderOptions: '此工具集没有提供方选项;启用后即可使用当前配置。', noProviders: '此工具集当前没有可用提供方。', ready: '就绪', needsSignIn: '需要登录', needsSetup: '需要安装', activeBackend: '当前后端', activeBackendHint: '这是你当前使用的后端', useBackend: '使用此后端', nousIncluded: '包含在 Nous 订阅中;登录 Nous Portal 即可激活。', nousAuthNeededTitle: '登录 Nous Portal', nousAuthNeededMessage: provider => `已保存 ${provider},但在登录 Nous Portal 之前不会激活。`, nousAuthSignIn: '登录', nousAuthDoneTitle: '已连接 Nous Portal', nousAuthDoneMessage: '订阅后端现已激活。', nousAuthFailed: 'Nous Portal 登录未完成', noApiKeyRequired: '不需要 API 密钥。', postSetupHint: step => `此后端需要一次性安装 (${step})。将在此机器上执行,可能需要几分钟。`, postSetupInstalledHint: '已安装。仅在出现问题时才需要重新运行安装。', postSetupRun: '运行设置', postSetupRerun: '重新运行设置', postSetupInstalled: '已安装', postSetupRunning: '安装中…', postSetupStarting: '启动中…', postSetupCompleteTitle: '设置完成', postSetupCompleteMessage: step => `已安装 ${step}。`, postSetupErrorTitle: '设置完成但有错误', postSetupErrorMessage: step => `请检查 ${step} 日志。`, postSetupFailed: step => `运行 ${step} 设置失败`, webSearchActive: backend => `搜索:${backend}`, webExtractActive: backend => `提取:${backend}`, webCapabilityUnset: '未设置', webUseForSearch: '用于搜索', webUseForExtract: '用于提取', webUsedForSearch: '搜索后端', webUsedForExtract: '提取后端', webCapabilitySelectedMessage: (provider, capability) => `${provider} 现在负责网页${capability === 'search' ? '搜索' : '提取'}。`, failedSelectCapability: provider => `无法设置 ${provider}`, loadingModels: '正在加载模型目录…', modelSectionTitle: '模型', modelCount: count => `${count} 个模型`, modelInUse: '使用中', modelDefault: '默认', modelInactiveHint: '请先选择此后端,然后再更改其模型。', modelSelectedTitle: '模型已选择', modelSelectedMessage: model => `${model} 将应用于新会话。`, failedSelectModel: model => `选择 ${model} 失败`, terminalBackend: { sectionTitle: '执行后端', loading: '正在检查执行后端…', failedLoad: '无法加载终端后端', ready: '就绪', needsSetup: '需要设置', unavailable: '不可用', inUse: '使用中', selectedTitle: '已选择后端', selectedMessage: backend => `终端命令现在通过 ${backend} 运行。将应用于新会话。`, failedSelect: backend => `选择 ${backend} 失败`, needsSetupHint: '现在即可选择此后端——但在完成设置前命令将会失败。' }, browserRealProfile: { label: '使用我的真实浏览器配置文件', description: '将默认浏览器的登录信息和 Cookie 复制到托管快照中,代理使用该快照进行浏览。绝不会直接打开你的真实配置文件。将应用于新会话。', enabledTitle: '真实配置文件浏览:已开启', enabledMessage: '新会话将使用默认浏览器配置文件的快照进行浏览。', disabledTitle: '真实配置文件浏览:已关闭', disabledMessage: '配置文件快照将被删除;新会话使用干净的浏览器。', failedSave: '无法保存真实配置文件设置', prompt: { title: '让网站保持登录状态', body: '让 Hermes 使用默认浏览器配置文件的快照进行浏览,网站打开时即已登录。', bulletSnapshot: 'Cookie 和登录信息会复制到托管快照中。', bulletLiveProfile: '绝不会直接打开你的真实浏览器配置文件。', bulletLocal: '所有数据都不会离开这台电脑。', dontShowAgain: '不再显示', notNow: '暂不', enable: '使用我的配置文件' } } } }, skills: { tabSkills: '技能', tabToolsets: '工具集', configuringProfile: '正在配置:', tabMcp: 'MCP', all: '全部', searchSkills: '搜索技能…', searchToolsets: '搜索工具集…', refresh: '刷新技能', refreshing: '正在刷新技能', loading: '正在加载能力…', noSkillsTitle: '未找到技能', noSkillsDesc: '尝试更宽泛的搜索或其他分类。', noToolsetsTitle: '未找到工具集', noToolsetsDesc: '尝试更宽泛的搜索词。', noDescription: '暂无描述。', configured: '已配置', needsKeys: '需要密钥', visionModelHint: '视觉功能使用你的辅助模型配置——支持图像的模型在那里选择,而不是在此处按提供商选择。', visionModelLink: '在 设置 → 模型 中选择视觉模型', toolsetsEnabled: (enabled, total) => `已启用 ${enabled}/${total} 个工具集`, configureToolset: label => `配置 ${label}`, toggleToolset: (label, enabled) => `${enabled ? '开启' : '关闭'} ${label} 工具集`, skillsLoadFailed: '技能加载失败', toolsetsRefreshFailed: '工具集刷新失败', skillEnabled: '技能已启用', skillDisabled: '技能已禁用', toolsetEnabled: '工具集已启用', toolsetDisabled: '工具集已禁用', appliesToNewSessions: name => `${name} 将应用于新会话。`, failedToUpdate: name => `更新 ${name} 失败`, sortMostUsed: '最常用', sortAlpha: 'A–Z', sortMostUsedDesc: '↓ 最常用', sortLeastUsedAsc: '↑ 最少用', enableAll: '全部启用', disableAll: '全部停用', disableUnused: '禁用未使用', bulkUpdated: count => `已为新会话更新 ${count} 项。`, bulkNoChange: '没有需要更改的内容。', usageCount: count => `已使用 ${count} 次`, provenance: { agent: '习得', bundled: '内置', hub: '技能中心' }, emptyNoneFound: noun => `未找到${noun}`, emptyNothingMatches: query => `没有匹配“${query}”的内容。`, emptyNoneAvailable: noun => `暂无可用的${noun}。`, changesApplyNewSessions: '更改将应用于新会话。', skillUpdated: '技能已更新', edit: '编辑', archive: '归档', skillArchivedTitle: '技能已归档', skillArchivedMessage: '可通过 hermes curator restore 恢复。', officialCatalog: '可安装', officialPill: '官方', hub: { searchPlaceholder: '搜索技能中心', search: '搜索', searching: '搜索中…', connectingHubs: '正在连接技能中心…', connectedHubs: '已连接的来源:', featured: '精选技能', landingHint: '搜索技能中心,浏览来自官方索引、GitHub 和社区来源的可安装技能。', noResults: '技能中心没有匹配的技能。', resultCount: (count, ms) => `${count} 个结果${ms !== null ? `(${ms}ms)` : ''}`, timedOut: sources => `超时:${sources}`, installed: '已安装', install: '安装', installing: '安装中…', uninstall: '卸载', uninstalling: '卸载中…', updateAll: '更新已安装', updating: '更新中…', preview: '预览', scan: '扫描', scanning: '扫描中…', close: '关闭', files: '文件', noReadme: '该技能没有 SKILL.md 预览。', trust: { builtin: '内置', trusted: '可信', community: '社区' }, verdictSafe: '安全', verdictCaution: '注意', verdictDangerous: '危险', policyAllow: '允许安装', policyAsk: '安装前请复查', policyBlock: '安装被策略阻止', findings: count => `${count} 项发现`, noFindings: '无安全发现。', installStarted: name => `正在安装 ${name}…`, uninstallStarted: name => `正在卸载 ${name}…`, updateStarted: '正在更新已安装技能…', actionFailed: '技能操作失败', actionLog: '操作日志', alreadyInstalled: name => `“${name}”已安装`, pickerTitle: '技能中心', pickerBrowse: '浏览完整技能中心', pickerHide: '隐藏技能中心浏览器', pickerHint: '点击任意技能上的“+ Add to this Agent”即可安装,安装后会出现在上方列表中。', loadFailed: '技能中心加载失败', previewFailed: '技能预览失败', scanFailed: '安全扫描失败', searchFailed: '技能中心搜索失败' } }, starmap: { title: '记忆图谱', subtitle: (nodes, clusters) => `${clusters} 个类别中的 ${nodes} 个技能`, close: '关闭记忆图谱', refresh: '刷新', memory: '记忆', filterAll: '全部', filterUsed: '已使用', filterLearned: '已学习', viewGraph: '图谱', loadFailed: '无法加载记忆图谱', loading: '加载中…', emptyTitle: '尚无学习内容', emptyDesc: '当 Hermes 为你的工作构建技能和记忆时,会显示在这里。', share: '分享图谱', shareHint: '复制代码以分享此图谱,或粘贴代码以载入。仅包含布局,不含你的记忆或技能内容。', shareTitle: '导入 / 导出图谱', sharePlaceholder: '粘贴图谱代码…', copy: '复制图谱代码', copied: '已复制!', importMap: '导入图谱', importBtn: '加载', importEmpty: '粘贴图谱代码以加载。', importSuccess: nodes => `已加载包含 ${nodes} 个节点的图谱。`, importedBadge: '导入的图谱', resetToMine: '返回我的图谱' }, agents: { close: '关闭代理', title: '派生树', subtitle: '当前回合的子代理实时活动。', emptyTitle: '暂无活跃子代理', emptyDesc: '当某个回合派发任务时,子代理会在此实时显示进度。', running: '运行中', failed: '失败', done: '完成', streaming: '流式传输', files: '文件', moreFiles: count => `还有 ${count} 个文件`, delegation: index => `派发 ${index}`, workers: count => `${count} 个工作单元`, workersActive: count => `${count} 个活跃`, agentsCount: count => `${count} 个代理`, activeCount: count => `${count} 个活跃`, failedCount: count => `${count} 个失败`, toolsCount: count => `${count} 个工具`, filesCount: count => `${count} 个文件`, updatedAgo: age => `更新于 ${age}`, ageNow: '刚刚', ageSeconds: seconds => `${seconds} 秒前`, ageMinutes: minutes => `${minutes} 分钟前`, ageHours: hours => `${hours} 小时前`, ageDays: days => `${days} 天前`, durationSeconds: seconds => `${seconds} 秒`, durationMinutes: (minutes, seconds) => `${minutes} 分 ${seconds} 秒`, tokens: value => `${value} 词元` }, commandCenter: { close: '关闭命令中心', paletteTitle: '命令面板', back: '返回', searchPlaceholder: '搜索会话、视图与操作', goTo: '前往', goToSession: '前往会话', branches: '分支', projects: '项目', openFolder: '打开文件夹为项目…', openFolderAt: path => `打开文件夹为项目 — ${path}`, newSessionInProject: project => `在 ${project} 中新建会话`, commands: '命令', startInBranch: branch => `在 ${branch} 中开始新对话`, commandCenter: '命令中心', appearance: '外观', settings: '设置', changeTheme: '更改主题', changeColorMode: '更改颜色模式…', pets: { title: '宠物', placeholder: '搜索宠物…', loading: '正在加载 petdex 画廊…', error: '无法连接到 petdex 画廊。', staleBackend: '请重启 Hermes 以使用宠物功能——当前后端版本过旧。', empty: '没有匹配的宠物。', turnOff: '关闭', turnOn: '开启', installed: '已安装', generatedTag: '生成', adoptFailed: '无法领养该宠物。', toggleFailed: enabled => `无法${enabled ? '开启' : '关闭'}宠物显示。`, noneAvailable: '暂无可用宠物——请在下方选择一个安装。' }, generatePet: { title: '生成宠物', placeholder: '描述要生成的宠物……', promptHint: '输入描述,然后按 Enter 生成四种造型。', readyHint: '按 Enter 根据描述生成四种造型。', generate: '生成', generating: '生成中……', retry: '重试', hatch: '孵化', spawning: '召唤中……', hatching: '正在孵化你的宠物……', hatchingSub: '正在注入生命……', hatched: '孵化成功!', hatchRow: (_state, done, total) => `正在绘制画面…… ${done}/${total}`, hatchComposing: '正在拼合……', hatchSaving: '马上就好……', namePlaceholder: '给宠物起个名字', staleBackend: '请更新 Hermes 以生成宠物。', backgroundHint: '你可以关闭此窗口——完成后 Hermes 会通知你。', slowProviderHint: '这可能需要几分钟', remix: '混合生成', remixConfirmTitle: '以此造型混合生成?', remixConfirmBody: '将以此造型为起点生成一组新草图,可能需要几分钟。', genericError: '生成失败——请重试或选择一个建议。', referenceImageTooLarge: '参考图过大。请使用小于 16 MB 的图片。', referenceImageInvalid: '无法读取该参考图。请尝试 PNG、JPG、WebP 或 GIF。', adopt: '领养', startOver: '重新开始' }, installTheme: { title: '安装主题…', pageTitle: '安装主题', placeholder: '搜索 VS Code Marketplace...', loading: '正在搜索 Marketplace...', error: '无法连接到 Marketplace。', empty: '没有匹配的主题。', install: '安装', installing: '安装中...', installed: '已安装', installs: count => `${count} 次安装` }, settingsFields: '设置字段', mcpServers: 'MCP 服务器', archivedChats: '已归档对话', sections: { maintenance: '维护', sessions: '会话', system: '系统', usage: '用量' }, sectionDescriptions: { maintenance: '诊断、备份、维护器与记忆数据', sessions: '搜索与管理会话', system: '状态、日志与系统操作', usage: '一段时间内的词元、成本与技能活动' }, nav: { newChat: { title: '新建会话', detail: '开始一个新会话' }, settings: { title: '设置', detail: '配置 Hermes 桌面端' }, skills: { title: '技能与工具', detail: '启用技能、工具集与提供方' }, messaging: { title: '消息平台', detail: '配置 Telegram、Slack、Discord 等' }, artifacts: { title: '产物', detail: '浏览生成的输出' } }, sectionEntries: { sessions: { title: '会话面板', detail: '搜索、置顶与管理会话' }, system: { title: '系统面板', detail: '网关状态、日志、重启/更新' }, usage: { title: '用量面板', detail: '词元、成本与技能活动' } }, providerNavigate: '导航', providerSessions: '会话', refresh: '刷新', refreshing: '刷新中…', noResults: '未找到匹配结果。', pinSession: '置顶会话', unpinSession: '取消置顶', exportSession: '导出会话', deleteSession: '删除会话', noSessions: '暂无会话。', gatewayRunning: '消息网关运行中', gatewayStopped: '消息网关已停止', hermesActiveSessions: (version, count) => `Hermes ${version} · 活跃会话 ${count}`, restartGateway: '重启网关', openBrowser: '打开浏览器', gatewayRestartFailed: '网关重启失败。', updateHermes: '更新 Hermes', reloadWindow: '重新载入窗口', actionRunning: '运行中', actionDone: '完成', actionFailed: '失败', actionStartedWaiting: '操作已启动,等待状态…', loadingStatus: '正在加载状态…', recentLogs: '最近日志', noLogs: '尚未加载日志。', days: count => `${count} 天`, statSessions: '会话', statApiCalls: 'API 调用', statTokens: '输入/输出词元', statCost: '预估成本', actualCost: cost => `实际 ${cost}`, loadingUsage: '正在加载用量…', noUsage: period => `最近 ${period} 天暂无用量。`, retry: '重试', dailyTokens: '每日词元', input: '输入', output: '输出', noDailyActivity: '暂无每日活动。', topModels: '常用模型', noModelUsage: '暂无模型用量。', topSkills: '常用技能', noSkillActivity: '暂无技能活动。', actions: count => `${count} 次操作`, logFile: '日志文件', logLevel: '级别', logSearchPlaceholder: '筛选日志行…', maintenance: { runOps: '诊断', doctor: '运行体检', doctorDesc: '检查安装、配置与提供方的健康状态', securityAudit: '安全审计', securityAuditDesc: '扫描配置与技能中的风险设置', backup: '创建备份', backupDesc: '打包配置、记忆、技能与会话', debugShare: '调试分享', debugShareDesc: '上传脱敏报告与日志,获取可分享链接(6 小时后自动删除)', debugShareRunning: '正在上传调试报告…', debugShareLinks: '分享链接', debugShareFailed: '调试分享失败', copyLink: '复制链接', linkCopied: '链接已复制', curator: '技能维护器', curatorDesc: '后台审查并归档过期的智能体自建技能', curatorPaused: '已暂停', curatorActive: '运行中', curatorDisabled: '已禁用', curatorLastRun: when => `上次运行 ${when}`, curatorNeverRan: '从未运行', pause: '暂停', resume: '恢复', runNow: '立即运行', memoryData: '记忆数据', memoryDataDesc: '注入每个会话的内置记忆文件', memoryProvider: name => `当前提供方:${name}`, builtinMemory: '内置', memoryFile: '智能体记忆(MEMORY.md)', userFile: '用户画像(USER.md)', bytes: size => size, empty: '空', resetMemory: '重置记忆', resetUser: '重置画像', resetAll: '全部重置', resetConfirm: target => `删除 ${target}?此操作不可撤销。`, resetDone: files => `已删除 ${files}。`, resetFailed: '记忆重置失败', actionStarted: name => `${name} 已启动 — 正在跟踪日志…`, actionFailed: name => `${name} 启动失败`, running: '运行中…', viewLog: '操作日志' } }, messaging: { search: '搜索消息平台…', loading: '正在加载消息平台…', loadFailed: '消息平台加载失败', states: { connected: '已连接', connecting: '连接中', disabled: '已禁用', fatal: '错误', gateway_stopped: '消息网关已停止', not_configured: '需要设置', pending_restart: '需要重启', retrying: '重试中', startup_failed: '启动失败' }, unknown: '未知', hintPendingRestart: '在状态栏重启网关以应用此更改。', hintGatewayStopped: '在状态栏启动网关以建立连接。', credentialsSet: '凭据已设置', needsSetup: '需要设置', gatewayStopped: '消息网关已停止', getCredentials: '获取你的凭据', openSetupGuide: '打开设置指南', required: '必填', recommended: '推荐', advanced: count => `高级 (${count})`, noTokenNeeded: '此平台无需在此填写令牌。请按上方设置指南操作,然后在下方启用。', enabled: '已启用', disabled: '已禁用', unsavedChanges: '有未保存的更改', saving: '保存中…', saveChanges: '保存更改', saved: '已保存', replaceValue: '替换当前值', openDocs: '打开文档', clearField: key => `清除 ${key}`, enableAria: name => `启用 ${name}`, disableAria: name => `禁用 ${name}`, platformEnabled: name => `${name} 已启用`, platformDisabled: name => `${name} 已禁用`, restartToApply: '此更改将在网关重启后生效。', setupSaved: name => `${name} 设置已保存`, restartToReconnect: '新凭据将在网关重启后生效。', keyCleared: key => `${key} 已清除`, setupUpdated: name => `${name} 设置已更新。`, failedUpdate: name => `更新 ${name} 失败`, failedSave: name => `保存 ${name} 失败`, failedClear: key => `清除 ${key} 失败`, pendingRequests: count => `待处理请求(${count})`, pendingAria: count => `${count} 条待处理配对请求`, approvedUsers: count => `已批准用户(${count})`, approve: '批准', approving: '批准中…', revoke: '撤销', revoking: '撤销中…', revokeAria: name => `撤销 ${name}`, revokeTitle: '撤销访问权限', revokeDesc: name => `${name} 将失去访问权限,下次发送消息时不再被识别。`, approvedUser: name => `已批准 ${name}`, approvedHint: '对方下次发送消息时会被自动识别。', revokedUser: name => `已撤销 ${name}`, failedApprove: name => `批准 ${name} 失败`, failedRevoke: name => `撤销 ${name} 失败`, pairingLockedOut: '批准失败次数过多,该平台已被暂时锁定,请稍后再试。', waitingSince: minutes => (minutes < 1 ? '刚刚' : `${minutes} 分钟前`), fieldCopy: { TELEGRAM_BOT_TOKEN: { label: 'Bot 令牌', help: '用 @BotFather 创建一个机器人,然后粘贴它给你的令牌。', placeholder: '粘贴 Telegram bot 令牌' }, TELEGRAM_ALLOWED_USERS: { label: '允许的 Telegram 用户 ID', help: '推荐。来自 @userinfobot 的逗号分隔数字 ID。不设置则任何人都能私信你的机器人。' }, TELEGRAM_PROXY: { label: '代理 URL', help: '仅在 Telegram 被屏蔽的网络中需要。' }, DISCORD_BOT_TOKEN: { label: 'Bot 令牌', help: '在 Discord 开发者门户创建应用,添加机器人,然后粘贴其令牌。' }, DISCORD_ALLOWED_USERS: { label: '允许的 Discord 用户 ID', help: '推荐。逗号分隔的 Discord 用户 ID。' }, DISCORD_REPLY_TO_MODE: { label: '回复方式', help: 'first、all 或 off。' }, DISCORD_ALLOW_ALL_USERS: { label: '允许所有 Discord 用户', help: '仅用于开发。为 true 时,任何人都可以私信 bot,不需要允许列表。' }, DISCORD_HOME_CHANNEL: { label: '主页频道 ID', help: 'bot 主动发送消息的频道(cron 输出、提醒等)。' }, DISCORD_HOME_CHANNEL_NAME: { label: '主页频道名称', help: '日志和状态输出中显示的主页频道名称。' }, BLUEBUBBLES_ALLOW_ALL_USERS: { label: '允许所有 iMessage 用户', help: '为 true 时跳过 BlueBubbles 允许列表。' }, MATTERMOST_ALLOW_ALL_USERS: { label: '允许所有 Mattermost 用户' }, MATTERMOST_HOME_CHANNEL: { label: '主页频道' }, QQ_ALLOW_ALL_USERS: { label: '允许所有 QQ 用户' }, QQBOT_HOME_CHANNEL: { label: 'QQ 主页频道', help: 'cron 投递的默认频道或群组。' }, QQBOT_HOME_CHANNEL_NAME: { label: 'QQ 主页频道名称' }, SLACK_BOT_TOKEN: { label: 'Slack bot 令牌', help: '安装 Slack 应用后,在 OAuth & Permissions 中找到 bot 令牌。', placeholder: '粘贴 Slack bot 令牌' }, SLACK_APP_TOKEN: { label: 'Slack app 令牌', help: 'Socket Mode 需要 app 级令牌。', placeholder: '粘贴 Slack app 令牌' }, SLACK_ALLOWED_USERS: { label: '允许的 Slack 用户 ID', help: '推荐。逗号分隔的 Slack 用户 ID。' }, MATTERMOST_URL: { label: '服务器 URL', placeholder: 'https://mattermost.example.com' }, MATTERMOST_TOKEN: { label: 'Bot 令牌' }, MATTERMOST_ALLOWED_USERS: { label: '允许的用户 ID', help: '推荐。逗号分隔的 Mattermost 用户 ID。' }, MATRIX_HOMESERVER: { label: 'Homeserver URL', placeholder: 'https://matrix.org' }, MATRIX_ACCESS_TOKEN: { label: '访问令牌' }, MATRIX_USER_ID: { label: 'Bot 用户 ID', placeholder: '@hermes:example.org' }, MATRIX_ALLOWED_USERS: { label: '允许的 Matrix 用户 ID', help: '推荐。@user:server 格式的逗号分隔用户 ID。' }, SIGNAL_HTTP_URL: { label: 'Signal 桥接 URL', placeholder: 'http://127.0.0.1:8080', help: '运行中的 signal-cli REST 桥接的 URL。' }, SIGNAL_ACCOUNT: { label: '电话号码', help: '在 signal-cli 桥接中注册的号码。' }, SIGNAL_ALLOWED_USERS: { label: '允许的 Signal 用户', help: '推荐。逗号分隔的 Signal 标识符。' }, WHATSAPP_ENABLED: { label: '启用 WhatsApp 桥接', help: '由下方开关自动设置。除非确知需要,否则请勿改动。' }, WHATSAPP_MODE: { label: '桥接模式' }, WHATSAPP_ALLOWED_USERS: { label: '允许的 WhatsApp 用户', help: '推荐。逗号分隔的电话号码或 WhatsApp ID。' } }, platformIntro: { telegram: '在 Telegram 中,与 @BotFather 对话,运行 /newbot,复制它给你的令牌。然后从 @userinfobot 获取你的数字用户 ID。', discord: '打开 Discord 开发者门户,创建应用,添加 Bot,然后复制其令牌。用正确的权限范围把机器人邀请到你的服务器。', slack: '创建 Slack 应用,启用 Socket Mode,安装到你的工作区,然后复制 bot 令牌和 app 级令牌。', mattermost: '在你的 Mattermost 服务器上,创建机器人账户或个人访问令牌,然后在此粘贴服务器 URL 和令牌。', matrix: '用机器人账户登录你的 homeserver,然后复制访问令牌、用户 ID 和 homeserver URL。', signal: '在可访问的位置运行 signal-cli REST 桥接,然后把 Hermes 指向该 URL 和已注册的电话号码。', whatsapp: '启动 Hermes 自带的 WhatsApp 桥接,首次运行时扫描二维码,然后启用该平台。', bluebubbles: '在装有 iMessage 的 Mac 上运行 BlueBubbles Server,暴露其 API,然后用服务器密码把 Hermes 指向该 URL。', homeassistant: '在 Home Assistant 中打开你的个人资料并创建长期访问令牌。把它连同你的 HA URL 一起粘贴到这里。', email: '使用专用邮箱。对于 Gmail/Workspace,创建应用专用密码并使用 imap.gmail.com / smtp.gmail.com。', sms: '从 Twilio 控制台获取你的 Account SID 和 Auth Token,以及一个可发送短信的电话号码。', dingtalk: '在开发者控制台创建钉钉应用,然后在此复制 Client ID(App key) 和 Client Secret。', feishu: '创建飞书 / Lark 应用,配置机器人能力,复制 App ID、App secret 和事件加密密钥。', wecom: '在企业微信中添加群机器人,复制其 webhook key 作为 WECOM_BOT_ID。仅可发送——双向请用企业微信 (应用) 选项。', wecom_callback: '设置一个企业微信自建应用,暴露其回调 URL,并提供 corp ID、secret、agent ID 和 AES key。', weixin: '运行 `hermes gateway setup`,选择 Weixin,然后使用个人微信账号扫描并确认二维码。Hermes 会通过腾讯 iLink Bot API 连接并保存凭据。', qqbot: '在 QQ 开放平台 (q.qq.com) 注册一个应用,复制 App ID 和 Client Secret。', api_server: '把 Hermes 暴露为兼容 OpenAI 的 API。设置一个鉴权密钥,然后把 Open WebUI / LobeChat 等指向 host:port。', webhook: '运行一个 HTTP 服务器,供其他工具 (GitHub、GitLab、自定义应用)POST。用 secret 验证签名。' } }, webhooks: { search: '搜索 Webhook…', loading: '正在加载 Webhook…', loadFailed: 'Webhook 加载失败', subscriptions: (count: number) => `订阅(${count})`, hint: '接收器运行后,订阅更改会热重载。已禁用的订阅会拒绝传入事件。', empty: '暂无 Webhook 订阅。', disabledTitle: 'Webhook 接收器已禁用', disabledBody: 'Webhook 是独立的网关平台。在此启用以接受传入的 HTTP 事件;仅当订阅投递到 Telegram、Discord、Slack 或其他渠道时才需要聊天渠道。', enable: '启用 Webhook', enabling: '正在启用…', enabled: (name: string) => `已启用:“${name}”`, disabled: (name: string) => `已禁用:“${name}”`, enableRow: '启用', disableRow: '禁用', delete: '删除', deleting: '删除中…', deleted: 'Webhook 已删除', deleteTitle: '删除 Webhook', deleteDescPrefix: '这将永久移除 ', deleteDescSuffix: '。此操作无法撤销。', deleteFailed: (name: string) => `删除“${name}”失败`, toggleFailed: (name, enabled) => `${enabled ? '开启' : '关闭'}“${name}”失败`, newSubscription: '新建订阅', restarting: '网关正在重启…', restartNeeded: 'Webhook 已启用,但网关仍需重启后接收器才能上线。', restartGateway: '重启网关', restartingGateway: '正在重启…', restartFailed: (detail: string) => `网关重启失败${detail}`, enabledRestarting: 'Webhook 已启用;网关正在重启…', all: '(全部)', deliverOnly: '仅投递', createdTitle: '订阅已创建', createdSecretHint: '请立即复制密钥 —— 它只显示一次。', webhookUrl: 'Webhook URL', secretOnce: '密钥(仅显示一次)', done: '完成', fieldName: '名称', fieldNamePlaceholder: '例如 github-push', fieldDescription: '描述', fieldDescriptionPlaceholder: '此 Webhook 的用途(可选)', fieldEvents: '事件', fieldEventsPlaceholder: '以逗号分隔,留空表示全部', fieldSkills: '技能', fieldSkillsPlaceholder: '以逗号分隔的技能名称(可选)', fieldDeliver: '投递到', fieldDeliverOnly: '仅投递载荷', fieldPrompt: '提示词', fieldPromptPlaceholder: '此 Webhook 触发时给智能体的说明(可选)', nameRequired: '需要名称', create: '创建', creating: '正在创建…', created: '已创建', createFailed: (detail: string) => `创建失败:${detail}`, copy: '复制', deliverOptions: { log: '日志', telegram: 'Telegram', discord: 'Discord', slack: 'Slack', email: '电子邮件', github_comment: 'GitHub 评论' } }, profiles: { close: '关闭配置档案', nameHint: '小写字母、数字、连字符和下划线。必须以字母或数字开头。', title: '配置档案', count: count => `${count} 个配置档案`, search: '搜索配置档案…', loading: '正在加载配置档案…', newProfile: '新建配置档案', importProfile: '导入配置档案…', exportProfile: '导出配置档案…', imported: '配置档案已导入', exported: '配置档案已导出', failedImport: '导入配置档案失败', failedExport: '导出配置档案失败', allProfiles: '全部配置档案', showAllProfiles: '显示全部配置档案', switchToProfile: name => `切换到 ${name}`, switchToConnection: name => `切换到 ${name}`, switchConnectionFailed: name => `无法连接到 ${name}`, manageProfiles: '管理配置档案…', connectGateway: '管理网关…', fleet: { allOnGateway: '此网关上的全部配置档案', gateway: gateway => `${gateway} 上的配置档案`, gatewayUnreachable: gateway => `${gateway} · 无法连接`, onGateway: (name, gateway) => `${name} · ${gateway}`, switchTo: (name, gateway) => `切换到 ${gateway} 上的 ${name}`, deleteOn: gateway => `(位于 ${gateway})` }, remoteOverride: { menuItem: '连接到远程主机…', badge: (host: string) => `运行于 ${host}`, title: (profile: string) => `将 ${profile} 连接到远程主机`, description: '此配置档案中的会话将在你指定的远程 Hermes 上运行,而不是这台电脑。', urlLabel: '远程地址', urlPlaceholder: 'https://hermes.example.com', urlInvalid: '请输入以 http:// 或 https:// 开头的完整地址', tokenLabel: '访问令牌', tokenPlaceholder: '粘贴远程会话令牌', tokenSavedHint: '已保存令牌。留空以保留现有令牌。', plainTextOptIn: '这台电脑没有安全密钥存储,令牌将以未加密方式保存到磁盘。仍然保存。', collisionWarning: (label: string) => `设置中已存在名为“${label}”的网关。此配置档案连接是独立的,不会更改它。`, confirmTitle: '将此配置档案连接到远程主机?', confirmNote: (profile: string, host: string) => `${profile} 中的新对话将在 ${host} 上运行。命令和文件读取都发生在那台电脑上,而不是这台。请只连接你信任的主机。`, confirmBack: '返回', connect: '连接', connecting: '连接中…', disconnect: '移除远程连接', savedTitle: '配置档案已连接', savedMessage: (profile: string, host: string) => `${profile} 现在运行于 ${host}`, removedTitle: '已移除远程连接', removedMessage: (profile: string) => `${profile} 现在在这台电脑上运行`, removeFailed: '无法移除远程连接', authFailedTitle: '远程主机拒绝了已保存的令牌', authFailedMessage: (profile: string, host: string) => `${host} 拒绝了为 ${profile} 保存的令牌。它可能已在远程端被更改。`, updateToken: '输入新令牌…' }, actions: '操作', color: '颜色…', colorFor: '颜色', setColor: color => `设置颜色 ${color}`, autoColor: '自动', noProfiles: '暂无配置档案。', selectPrompt: '选择一个配置档案以查看其详情。', refresh: '刷新配置档案', refreshing: '正在刷新配置档案', default: '默认', skills: count => `${count} 个技能`, env: 'env', defaultBadge: '默认', rename: '重命名', renameMenu: '重命名…', exportMenu: '导出…', editSoul: '编辑 SOUL.md…', copySetup: '复制安装命令', copying: '复制中…', modelLabel: '模型', skillsLabel: '技能', notSet: '未设置', soulDesc: '内置于此配置档案的系统提示词与人格指令。', soulOptional: '可选', soulPlaceholder: mode => `此配置档案的系统提示词 / 人格说明。\n留空则保留${mode}默认值。`, soulPlaceholderCloned: '克隆的', soulPlaceholderEmpty: '空的', unsavedChanges: '有未保存的更改', loadingSoul: '正在加载 SOUL.md…', emptySoul: '空的 SOUL.md —— 开始撰写人格设定…', saving: '保存中…', saveSoul: '保存 SOUL.md', deleteTitle: '删除配置档案?', deleteDescPrefix: '这将删除 ', deleteDescMid: ' 并移除其 ', deleteDescSuffix: ' 目录。此操作无法撤销。', deleting: '删除中…', createDesc: '配置档案是相互独立的 Hermes 环境:各自拥有独立的配置、技能和 SOUL.md。', nameLabel: '名称', cloneFrom: '克隆来源', cloneFromNone: '无(空白)', cloneFromDesc: '从选中的来源配置档案复制配置、技能和 SOUL.md。', cloneFromDefault: '从默认档案克隆', cloneFromDefaultDesc: '从你的默认配置档案复制配置、技能和 SOUL.md。', invalidName: hint => `名称无效。${hint}`, nameRequired: '名称为必填项。', creating: '创建中…', createAction: '创建配置档案', renameTitle: '重命名配置档案', displayNameTitle: '为智能体命名', displayNameDesc: '设置一个在整个应用中显示的名称。内部配置档案 ID 仍为 "default"。', displayNameLabel: '显示名称', renameDescPrefix: '重命名会更新配置档案目录以及 ', renameDescSuffix: ' 中的所有包装脚本。', newNameLabel: '新名称', renaming: '重命名中…', created: '配置档案已创建', renamed: '配置档案已重命名', deleted: '配置档案已删除', setupCopied: '安装命令已复制', soulSaved: 'SOUL.md 已保存', failedLoad: '加载配置档案失败', failedDelete: '删除配置档案失败', failedCopy: '复制安装命令失败', failedLoadSoul: '加载 SOUL.md 失败', failedSaveSoul: '保存 SOUL.md 失败', failedCreate: '创建配置档案失败', failedRename: '重命名配置档案失败' }, cron: { close: '关闭定时任务', title: '定时任务', count: count => `${count} 个任务`, modelImpact: { title: '定时任务需要检查', message: count => `在您检查模型设置之前,${count} 个定时任务将被跳过。`, detailMore: (names, remaining) => `${names},以及另外 ${remaining} 个`, review: '检查定时任务', saveFailed: 'Hermes 未保存该模型更改。', confirmTitle: '模型选择警告', confirmDetail: '仅在你接受此权衡时确认。', confirmAction: '确认', declined: '已取消模型更改 — 你拒绝了数据训练层级警告。' }, search: '搜索定时任务…', loading: '正在加载定时任务…', states: { enabled: '已启用', scheduled: '已排程', running: '运行中', paused: '已暂停', disabled: '已禁用', error: '错误', completed: '已完成' }, deliveryLabels: { local: '此桌面', telegram: 'Telegram', discord: 'Discord', slack: 'Slack', email: '电子邮件' }, scheduleLabels: { daily: '每天', weekdays: '工作日', weekly: '每周', monthly: '每月', hourly: '每小时', 'every-15-minutes': '每 15 分钟', custom: '自定义' }, scheduleHints: { daily: '每天上午 9:00', weekdays: '周一至周五上午 9:00', weekly: '每周一上午 9:00', monthly: '每月第一天上午 9:00', hourly: '每个整点', 'every-15-minutes': '每 15 分钟', custom: 'Cron 语法或自然语言' }, days: { '0': '周日', '1': '周一', '2': '周二', '3': '周三', '4': '周四', '5': '周五', '6': '周六', '7': '周日' }, dayFallback: value => `第 ${value} 天`, everyDayAt: time => `每天 ${time}`, weekdaysAt: time => `工作日 ${time}`, everyDayOfWeekAt: (day, time) => `每${day} ${time}`, monthlyOnDayAt: (dayOfMonth, time) => `每月 ${dayOfMonth} 日 ${time}`, topOfHour: '每个整点', everyHourAt: minute => `每小时的 :${minute}`, newCron: '新建定时任务', emptyDescNew: '按 cron 表达式排程一个提示词。Hermes 会运行它,并把结果发送到你选择的目的地。', emptyDescSearch: '尝试更宽泛的搜索词。', emptyTitleNew: '暂无排程任务', emptyTitleSearch: '无匹配项', last: '上次:', next: '下次:', noRuns: '尚无运行', manage: '管理', showRuns: '显示运行记录', hideRuns: '隐藏运行记录', runHistory: '运行记录', actionsTitle: '定时任务操作', resume: '恢复定时任务', pause: '暂停定时任务', resumeTitle: '恢复', pauseTitle: '暂停', triggerNow: '立即触发', edit: '编辑定时任务', deleteTitle: '删除定时任务?', deleteDescPrefix: '这将永久移除 ', deleteDescSuffix: '。它会立即停止触发。', deleting: '删除中…', resumed: '定时任务已恢复', paused: '定时任务已暂停', triggered: '定时任务已触发', deleted: '定时任务已删除', created: '定时任务已创建', updated: '定时任务已更新', failedLoad: '加载定时任务失败', failedUpdate: '更新定时任务失败', failedTrigger: '触发定时任务失败', failedDelete: '删除定时任务失败', failedSave: '保存定时任务失败', editTitle: '编辑定时任务', createTitle: '新建定时任务', editDesc: '更新排程、提示词或投递目标。更改将在下次运行时生效。', createDesc: '排程一个提示词以自动运行。使用 cron 语法或类似"每 15 分钟"的自然语言。', nameLabel: '名称', namePlaceholder: '晨间简报', promptLabel: '提示词', promptPlaceholder: '总结我未读的 Slack 话题,并把前 5 条邮件发给我…', frequencyLabel: '频率', deliverLabel: '投递至', deliverNeedsHomeChannel: '请先设置主频道', modelLabel: '模型', modelDefault: '默认(全局模型)', customScheduleLabel: '自定义排程', customPlaceholder: '0 9 * * * 或 weekdays at 9am', customHint: 'Cron 表达式,或类似"每小时""工作日上午 9 点"的短语。', optional: '可选', promptRequired: '提示词为必填项。', promptScheduleRequired: '提示词和排程为必填项。', scheduleRequired: '排程为必填项。', scriptOnlyEditHint: '仅脚本任务(无 AI 提示词)。任务 ID:', saveChanges: '保存更改', createAction: '创建定时任务', tabs: { jobs: '任务', blueprints: '蓝图' }, blueprints: { tab: '蓝图', startFrom: '从此开始', custom: '自定义', subtitle: '现成的自动化', dialogDesc: '填写详细信息并进行排程。', scheduleIt: '安排任务', scheduling: '安排中...', scheduled: '蓝图已安排', loading: '正在加载蓝图...', failedLoad: '加载蓝图失败', emptyTitle: '没有可用的蓝图', emptyDesc: '此后端上没有可用的自动化蓝图。' } }, artifacts: { search: '搜索产物…', refresh: '刷新产物', refreshing: '正在刷新产物', indexing: '正在索引最近会话的产物', tabAll: '全部', tabImages: '图片', tabFiles: '文件', tabLinks: '链接', noArtifactsTitle: '未找到产物', noArtifactsDesc: '当会话生成图片和文件输出时,它们会显示在这里。', failedLoad: '产物加载失败', openFailed: '打开失败', itemsImage: '张图片', itemsLink: '个链接', itemsFile: '个文件', itemsGeneric: '项', zero: '0', rangeOf: (start, end, total) => `${start}-${end},共 ${total}`, goToPage: (itemLabel, page) => `前往${itemLabel}第 ${page} 页`, colTitleLink: '链接标题', colTitleFile: '名称', colTitleDefault: '标题 / 名称', colLocationLink: 'URL', colLocationFile: '路径', colLocationDefault: '位置', colSession: '会话', kindImage: '图片', kindFile: '文件', kindLink: '链接', chat: '对话', copyUrl: '复制 URL', copyPath: '复制路径' }, artifactCard: { kind: { code: '代码', html: '交互页面', svg: '图形' }, generating: lines => `生成中… ${lines} 行`, versionBadge: count => `${count} 个版本`, open: '打开' }, artifactPreview: { versionOf: (current, total) => `第 ${current}/${total} 版`, olderVersion: '较旧版本', newerVersion: '较新版本', latest: '最新', copyContent: '复制内容', download: '下载', openInBrowser: '在浏览器中打开', openInBrowserFailed: '无法在浏览器中打开', missingTitle: '产物不可用', missingBody: '此产物已不在本地注册表中。' }, sidebar: { nav: { 'new-session': '新建会话', skills: '技能与工具', messaging: '消息平台', artifacts: '产物', cron: '定时任务' }, searchAria: '搜索会话', searchPlaceholder: '搜索会话…', clearSearch: '清除搜索', noMatch: query => `没有会话匹配"${query}"。`, results: '结果', pinned: '已置顶', sessions: '会话', cronJobs: '定时任务', groupAriaGrouped: '以单一列表显示会话', groupAriaUngrouped: '按工作区分组会话', showProjects: '显示项目', showSessions: '显示会话', groupTitleGrouped: '取消分组', groupTitleUngrouped: '按工作区分组', allPinned: '这里的全部已置顶。取消置顶某个对话即可在最近中显示。', shiftClickHint: 'Shift+ 单击对话以置顶 · 拖动以重新排序', noWorkspace: '无工作区', projectEmpty: '暂无会话', noSessions: '暂无会话', noFilterMatches: '没有会话符合这些筛选条件', projects: { sectionLabel: '项目', home: '主页', newButton: '新建项目', createTitle: '新建项目', createDesc: '为工作区命名并添加一个或多个文件夹。', renameTitle: '重命名项目', addFolderTitle: '添加文件夹', namePlaceholder: '例如 Skunkworks', foldersLabel: '文件夹', ideaLabel: '想法', ideaPlaceholder: '这个项目是关于什么的?(保存到 IDEA.md)', ideaGenerate: '生成想法', ideaGenerating: '生成中…', ideaShuffle: '随机模板', noFolders: '尚未添加文件夹。', addFolder: '添加文件夹', primaryBadge: '主', removeFolder: '移除', create: '创建', menu: '操作', menuRename: '重命名…', menuAppearance: '外观', noColor: '无颜色', menuAddFolder: '添加文件夹', menuSetActive: '设为活动', menuDelete: '删除', moveToProject: '移动到项目', movedTo: name => `已移动到 ${name}`, moveFailed: '无法移动会话', moveNoFolder: '该项目没有可移入的文件夹', moveNoProjects: '没有其他项目', reveal: '在文件夹中显示', copyPath: '复制路径', removeFromSidebar: '从侧边栏移除', createFailed: '无法创建项目', staleBackend: '请更新 Hermes 后端以创建项目——当前后端比桌面应用旧(设置 → 更新 → 后端)。', deleteConfirm: '这会从 Hermes 中移除已保存的项目。文件、git 仓库和工作树保持不变。', startWork: '新建工作树', newWorktreeTitle: '新建工作树', newWorktreeDesc: '为这个工作树命名分支。', branchPlaceholder: '例如 my-feature', branchOff: () => ({ after: ' 分支', before: '从 ' }), baseBranchPlaceholder: '搜索分支…', baseBranchNone: '未找到分支', startWorkFailed: '无法创建工作树', worktreeStaleBackend: '请更新 Hermes 后端以在此远程连接上创建工作树 —— 该后端早于 git 工作树 API。', worktreeProjectLabel: '项目', worktreeProjectPlaceholder: '搜索项目…', worktreeProjectNone: '没有包含文件夹的项目', convertBranch: '转换分支…', convertBranchTitle: '转换分支', convertBranchDesc: '打开已检出的分支,或为可用分支创建工作树。', convertBranchPlaceholder: '搜索分支…', convertBranchInstead: '转换现有分支', branchOpenExisting: '打开', branchSwitchHome: '切回主检出', branchCreateWorktree: '新工作树', branchTrackRemote: '跟踪远程', branchesLoading: '正在加载分支…', noBranches: '未找到分支', removeWorktree: '移除工作树', removeWorktreeFailed: '无法移除工作树(存在未提交更改?)', removeWorktreeConfirm: '从 git 中移除(删除工作树目录,但保留分支),或仅从侧边栏隐藏该泳道并将工作树保留在磁盘上。', removeWorktreeDirty: '此工作树有未提交的更改。强制移除(丢弃这些更改),或仅隐藏泳道并保留在磁盘上。', forceRemove: '强制移除', enter: label => `打开 ${label}`, reorder: label => `重新排序 ${label}`, toggle: (label, open) => `${open ? '展开' : '收起'} ${label} 会话`, back: '全部项目' }, newSessionIn: label => `在 ${label} 中新建会话`, showMoreIn: (count, label) => `在 ${label} 中再显示 ${count} 个`, loading: '加载中…', loadMore: '加载更多', loadCount: step => `再加载 ${step} 个`, messageCount: count => `${count} 条消息`, toolCallCount: count => `${count} 次工具调用`, row: { pin: '置顶', unpin: '取消置顶', markUnread: '标记为未读', markRead: '标记为已读', unreadFailed: '无法更新未读状态', copyId: '复制 ID', export: '导出', branchFrom: '分支', rename: '重命名…', archive: '归档', newWindow: '新窗口', openInTerminal: '在终端中打开', hideTabBar: '隐藏标签栏', openInNewTab: '在新标签页中打开', openInSplit: '在分屏中打开', copyIdFailed: '无法复制会话 ID', sessionActions: '会话操作', sessionRunning: '会话运行中', needsInput: '需要你输入', waitingForAnswer: '正在等待你的回答', finishedUnread: '已完成 — 未读', backgroundRunning: '后台任务运行中', draftSession: '草稿 — 尚未发送', handoffOrigin: platform => `从 ${platform} 转接`, ownedByProfile: profile => `配置档:${profile}`, renamed: '已重命名', renameFailed: '重命名失败', renameTitle: '重命名会话', renameDesc: '留空则清除。', untitledPlaceholder: '无标题会话', deleteTitle: '删除会话?', deleteDesc: title => `这将永久删除“${title}”,且无法撤销。`, deleting: '正在删除…', deleted: '会话已删除', untitledChat: id => `会话 ${id}`, messageCount: count => `${count} 条消息`, todoProgress: '任务完成度', ageNow: '刚刚', ageDay: '天', ageHour: '时', ageMin: '分' }, dateDivider: { today: '今天早些时候', yesterday: '昨天', thisWeek: '本周', lastWeek: '上周', thisMonth: '本月' }, statusDivider: { working: '进行中', done: '已完成' }, markAllRead: '全部标记为已读' }, composer: { message: '消息', wakingProfile: profile => `正在唤醒 ${profile}…`, placeholderStarting: '正在启动 Hermes…', placeholderReconnecting: '正在重新连接 Hermes…', placeholderFollowUp: '发送后续消息', newSessionPlaceholders: [ '我们要构建什么?', '给 Hermes 一个任务', '你在想什么?', '描述你需要什么', '我们该处理什么?', '随便问点什么', '从一个目标开始' ], followUpPlaceholders: [ '发送后续消息', '补充更多上下文', '细化这个请求', '下一步是什么?', '继续推进', '再深入一点', '调整或继续' ], startVoice: '开始语音对话', openDirective: '打开', queueMessage: '排队消息', steer: '引导当前运行', stop: '停止', send: '发送', speaking: '讲话中', transcribing: '转写中', thinking: '思考中', muted: '已静音', listening: '聆听中', muteMic: '麦克风静音', unmuteMic: '取消麦克风静音', stopListening: '停止聆听并发送', stopShort: '停止', endConversation: '结束语音对话', endShort: '结束', stopDictation: '停止听写', transcribingDictation: '正在转写听写', voiceControls: '语音', voiceDictation: '语音听写', speakReplies: '朗读回复', stopSpeakingReplies: '停止朗读回复', wakeWordListening: phrase => `唤醒词:"${phrase}" — 正在监听`, wakeWordOff: phrase => `唤醒词:"${phrase}" — 已关闭`, wakeWordPausedVoice: phrase => `唤醒词:"${phrase}" — 语音对话期间暂停`, lookupLoading: '查找中…', lookupNoMatches: '没有匹配项。', lookupTry: '试试', lookupOr: '或', commonCommands: '常用命令', hotkeys: '快捷键', helpFooter: '打开完整面板 · 退格键关闭', commandDescs: { '/help': '命令与快捷键的完整列表', '/clear': '开始新会话', '/resume': '恢复之前的会话', '/details': '控制对话记录的详细程度', '/copy': '复制所选内容或最后一条助手消息', '/quit': '退出 hermes' }, hotkeyDescs: { 'composer.mention': '引用文件、文件夹、URL、git', 'composer.slash': '斜杠命令面板', 'composer.help': '此快速帮助 (删除以关闭)', 'composer.sendNewline': '发送 · Shift+Enter 换行', 'composer.sendQueued': '发送下一条排队的回合', 'keybinds.openPanel': '所有键盘快捷键', 'composer.cancel': '关闭弹窗 · 取消运行', 'composer.history': '循环弹窗 / 历史' }, attachUrlTitle: '附加 URL', attachUrlDesc: 'Hermes 将抓取该页面并作为本回合的上下文。', urlPlaceholder: 'https://example.com/post', urlHintPre: '请包含完整 URL,例如 ', attach: '附加', queued: count => `${count} 条排队`, queuedPaused: count => `${count} 条排队 — 已暂停`, attachmentOnly: '仅附件回合', emptyTurn: '空回合', attachments: count => `${count} 个附件`, editingInComposer: '正在输入框中编辑', editingQueuedInComposer: '正在输入框中编辑排队回合', queueEdit: '编辑', queueSendNext: '下一个', queueSteer: '引导 — 立即修正当前回合', queueSend: '发送', queueDelete: '删除', queueResume: '继续', queueResumeTip: '已被停止操作暂停 — 继续发送排队的回合', queueStuckTitle: '排队消息未发送', queueStuckBody: '排队的对话多次发送失败。它仍在队列中,请重试发送。', previewUnavailable: '预览不可用', previewLabel: label => `预览 ${label}`, couldNotPreview: label => `无法预览 ${label}`, removeAttachment: label => `移除 ${label}`, dictating: '听写中', preparingAudio: '正在准备音频', speakingResponse: '正在朗读回复', readingAloud: '朗读中', themeSuggestions: '桌面主题建议', noMatchingThemes: '没有匹配的主题。', themeTryPre: '试试 ', themeTryPost: '。', attachLabel: '附加', files: '文件…', folder: '文件夹…', images: '图片…', pasteImage: '粘贴图片', url: 'URL…', promptSnippets: '提示词片段…', tipPre: '提示:输入 ', tipPost: ' 以内联引用文件。', snippetsTitle: '提示词片段', snippetsDesc: '选择一个起始提示词放入输入框。', dropFiles: '拖放文件以附加', dropSession: '拖放以链接此对话', mcpSuggestions: { label: server => `添加 ${server}`, tip: keyword => `因为你提到了“${keyword}”而推荐 — 点击连接`, connecting: server => `正在连接 ${server}…`, cancelTip: '点击取消', added: server => `已添加 ${server}`, addedTip: '已连接 — 其工具已在此对话中可用', connectFailed: server => `无法连接 ${server}` }, skillSuggestions: { label: skill => `使用技能: ${skill}`, tip: skill => `你提到了“${skill}” — 点击以该技能开头`, done: skill => `已添加 /${skill}`, doneTip: '发送时将加载该技能' }, githubSuggestions: { label: '设置 GitHub', tip: '这里通过 gh CLI 技能使用 GitHub — 点击连接你的账号', done: '已添加 /github-auth', doneTip: '发送消息后,agent 将引导你完成 GitHub 登录' }, repairSuggestions: { label: server => `重新连接 ${server}`, tip: server => `${server} 调用刚因连接错误失败`, working: server => `正在重新连接 ${server}…`, workingTip: '点击取消', done: server => `已重新连接 ${server}`, doneTip: '新凭据已在此对话中生效', failed: server => `无法重新连接 ${server}` }, cronSuggestions: { label: '定时执行', tip: phrase => `“${phrase}”听起来是周期性任务 — 可以按计划运行`, prefix: '将此设置为定时任务:', done: '已标记为定时任务', doneTip: '发送后由智能体创建任务' }, snippets: { codeReview: { label: '代码审查', description: '审查当前更改是否存在回归、遗漏的边界情况和缺失的测试。', text: '请审查这部分是否存在缺陷、回归和缺失的测试。' }, implementationPlan: { label: '实现计划', description: '在动代码之前先勾勒方案,让 diff 保持聚焦。', text: '请在修改代码前制定一个简洁的实现计划。' }, explainThis: { label: '解释这段', description: '讲解所选代码的工作方式,并链接到关键文件。', text: '请解释这是如何工作的,并指给我关键文件。' } } }, statusStack: { agents: '代理', background: count => `${count} 个后台任务`, goalActive: '目标进行中', goalDone: '目标已完成', goalPaused: '目标已暂停', goalWaiting: '目标等待中', subagents: count => `${count} 个子代理`, todos: (done, total) => `任务 ${done}/${total}`, running: '运行中', stop: '停止', dismiss: '关闭', exit: code => `退出码 ${code}`, coding: { title: '工作区', noBranch: '无分支', detached: '分离头指针', clean: '干净', changed: count => `${count} 处更改`, ahead: count => `领先 ${count}`, behind: count => `落后 ${count}`, review: '审查', close: '关闭', openChanges: '打开更改', openFile: '打开文件', stage: '暂存', unstage: '取消暂存', stageAll: '全部暂存', viewAsTree: '树状视图', viewAsList: '列表视图', revert: '还原', revertAll: '全部还原', revertConfirm: '放弃对此文件的更改并将其恢复到已提交状态?此操作无法撤销。', revertAllConfirm: '放弃所有更改并将文件恢复到已提交状态?此操作无法撤销。', staged: '已暂存', noChanges: '没有更改', notRepo: '不是 Git 仓库', noDiff: '没有可显示的差异', scopeUncommitted: '未提交', scopeBranch: '分支', scopeLastTurn: '上一轮', commit: '提交', commitAndPush: '提交并推送', commitPlaceholder: shortcut => `信息(${shortcut} 提交)`, generateCommitMessage: '生成提交信息', stopGenerating: '停止生成', createPr: '创建 PR', openPr: '打开 PR', ghMissing: '安装 GitHub CLI (gh) 并登录后可打开 PR', agentShip: '让 Hermes 提交并开 PR', agentShipUnavailable: '拥有这些更改的会话当前不在屏幕上。', agentShipPrompt: '检查当前更改,使用清晰的约定式提交信息提交,推送分支,并开启一个拉取请求。', newBranch: '新建分支', branchOffFrom: base => `从 ${base} 新建分支`, switchTo: branch => `切换到 ${branch}`, switchFailed: branch => `无法切换到 ${branch}`, worktrees: '工作树' } }, updates: { stages: { idle: '准备中…', prepare: '准备中…', fetch: '下载中…', pull: '马上完成…', pydeps: '收尾中…', update: '正在更新 Hermes…', rebuild: '正在重新构建桌面应用…', restart: '正在重启 Hermes…', done: '更新完成', manual: '从终端更新', guiSkew: '请更新桌面应用', error: '更新已暂停' }, checking: '正在检查更新…', checkFailedTitle: '无法检查更新', tryAgain: '重试', notAvailableTitle: '更新不可用', unsupportedMessage: '此版本的 Hermes 无法在应用内自行更新。', connectionRetry: '请检查网络连接后重试。', latestBody: '你正在运行最新版本。', latestBodyBackend: '后端正在运行最新版本。', allSetTitle: '已是最新', availableTitle: '有可用更新', availableBody: '新版 Hermes 已可安装。', availableTitleBackend: '后端有可用更新', availableBodyBackend: '已连接的 Hermes 后端有新版本可安装。', availableBodyNoChangelog: '已有新版本可用。此安装方式无法显示更新日志。', updateNow: '立即更新', maybeLater: '稍后再说', moreChanges: count => `另有 ${count} 项更改。`, manualTitle: '从终端更新', manualBody: '你是从命令行安装的 Hermes,因此更新也需要在那里运行。请将此命令粘贴到终端:', manualPickedUp: '下次启动 Hermes 时会使用新版本。', guiSkewTitle: '请更新桌面应用', guiSkewBody: '后端已更新,但此桌面应用包未更改。请更新或重新安装 Hermes 桌面应用(你的 AppImage / .deb / .rpm)以保持一致。', copy: '复制', copied: '已复制', done: '完成', applyingBody: 'Hermes 更新器会在自己的窗口中接管,并在完成后自动重新打开 Hermes。更新期间请不要自行重新打开 Hermes。', applyingBodyBackend: '远程后端正在应用更新并将重启。恢复后 Hermes 会自动重新连接。', applyingClose: '此窗口会在更新期间关闭,随后 Hermes 会自动重新打开。', errorTitle: '更新未完成', errorBody: '没有数据丢失。你可以现在重试。', blockerTitle: '关闭本地预览以更新 Hermes?', blockerBody: 'Hermes 需要在更新前停止这些本地预览。这不会修改或删除你的文件。', foreignBlockerTitle: '关闭其他进程以更新 Hermes', foreignBlockerBody: 'Hermes 无法安全地自动关闭这些进程。请关闭拥有这些进程的应用、终端或服务,然后重试更新。', mixedBlockerBody: 'Hermes 可以关闭下方列出的本地预览。其他进程必须手动关闭,更新才能继续。', closePreviewsAndUpdate: '关闭预览并更新', closePreviewsAndCheckAgain: '关闭预览并重新检查', localPreview: '本地预览', portLabel: port => `端口 ${port}`, pidLabel: pid => `PID ${pid}`, technicalDetails: '技术详情', notNow: '暂不', clientAlsoBehindTitle: '桌面应用版本落后', clientAlsoBehindMessage: '后端已是最新,但此桌面应用仍是旧版本。请更新以获得最新修复。', clientAlsoBehindAction: '更新桌面应用', everythingDispatched: '更新已分发', everythingSkipped: '已跳过', everythingRowFailed: '更新失败', everythingFanoutFailedTitle: '无法更新其他实例', applyStatus: { preparing: '正在更新后端…', pulling: '后端更新中…', restarting: '后端正在重启以加载更新…', notAvailable: '此后端无法更新。', failed: '后端更新失败。', noReturn: '后端未恢复在线。更新可能未完成——请检查后端主机。' } }, install: { stageStates: { pending: '等待中', running: '安装中', succeeded: '完成', skipped: '已跳过', failed: '失败' }, oneTimeTitle: 'Hermes 需要一次性安装', unsupportedDesc: platform => `${platform} 暂不支持自动首次启动安装。请打开终端并运行下面的命令,然后重新启动此应用。之后启动会跳过此步骤。`, installCommand: '安装命令', copyCommand: '复制命令', viewDocs: '查看安装文档', installTo: '将安装到', retryAfterRun: '我已运行 -- 重试', setupChoiceTitle: '设置 Hermes Desktop', setupChoiceDesc: '将此应用连接到你已运行的 Hermes 网关,或在这台电脑上本地安装 Hermes。', connectExistingTitle: '连接到现有 Hermes', connectExistingShort: '连接现有环境', connectExistingDesc: '使用会话令牌或浏览器登录连接远程后端。不会启动本地安装。', installLocalTitle: '本地安装 Hermes', installLocalDesc: '下载 Hermes,创建 Python 环境,并在这台电脑上运行后端。', localStartUnavailable: '无法启动本地安装。请重启 Hermes Desktop 后重试。', remoteSetupTitle: '连接到现有 Hermes', remoteSetupDesc: '输入网关 URL。Hermes Desktop 会检测需要令牌还是浏览器登录。', remoteUrlTitle: '网关 URL', remoteUrlDesc: '使用 Hermes 网关的基础 URL;远程地址请包含 https://。', remoteUrlPlaceholder: 'https://gateway.example.com/hermes', probing: '正在检测网关认证方式...', probeError: '无法连接到该 Hermes 网关。', identityProvider: '你的身份提供方', authTitle: '认证', authNeedsOauth: provider => `测试此网关前请先使用 ${provider} 登录。`, authSignedIn: '浏览器登录已完成。', connected: '已连接', signIn: '登录', signInWith: provider => `使用 ${provider} 登录`, enterUrlFirst: '请先输入网关 URL。', signInIncomplete: '认证完成前登录窗口已关闭。', tokenTitle: '会话令牌', tokenDesc: '粘贴远程网关 .env 文件中的会话令牌。', pasteSessionToken: '粘贴会话令牌', incompleteSignInTest: '测试此受 OAuth 保护的网关前请先登录。', incompleteTokenTest: '测试此网关前请输入会话令牌。', testConnection: '测试连接', testSucceeded: (baseUrl, version) => `已连接到 ${baseUrl}${version ? ` (${version})` : ''}。`, applyRemote: '应用并重新连接', backToSetup: '返回', failedTitle: '安装失败', settingUpTitle: '正在设置 Hermes Agent', finishingTitle: '正在收尾', failedDesc: '某个安装步骤失败。在 Windows 上,如果另一个 Hermes CLI 或桌面实例正在运行,可能会出现这种情况。请停止正在运行的 Hermes 实例后重试。可查看下面的详情或 desktop 日志中的完整记录。', activeDesc: '这是一次性设置。Hermes 安装器正在下载依赖并配置你的机器。之后启动会跳过此步骤。', progress: (completed, total) => `${completed}/${total} 个步骤已完成`, currentStage: stage => ` -- 当前:${stage}`, fetchingManifest: '正在获取安装器 manifest...', error: '错误', hideOutput: '隐藏安装器输出', showOutput: '显示安装器输出', lines: count => `${count} 行`, noOutput: '暂无输出。', cancelling: '取消中...', cancelInstall: '取消安装', transcriptSaved: '完整记录已保存到', copiedOutput: '已复制!', copyOutput: '复制输出', reloadRetry: '重新加载并重试' }, onboarding: { headerTitle: '开始设置 Hermes Agent', headerDesc: '连接模型提供方即可开始对话。大多数选项只需一次点击。', preparingInstall: 'Hermes 正在完成安装。首次运行通常不到一分钟。', starting: '正在启动 Hermes…', lookingUpProviders: '正在查找提供方...', collapse: '收起', otherProviders: '其他提供方', haveApiKey: '我有 API 密钥', chooseLater: '稍后再选择提供方', recommended: '推荐', connected: '已连接', featuredPitch: '一个订阅,300+ 前沿模型 — 运行 Hermes 的推荐方式', fireworksPitch: '直接模型 API — Fireworks 托管的前沿模型', localModelsTitle: '本地运行模型', localModelsPitch: '无需账号——下载模型,在本机运行', openRouterPitch: '一个密钥,数百个模型 — 稳妥的默认选择', apiKeyOptions: { fireworks: { short: '直接模型 API', description: '直接访问 Fireworks AI 托管的模型。' }, openrouter: { short: '一个密钥,多个模型', description: '用一个密钥访问数百个模型。适合新安装的默认选择。' }, openai: { short: 'GPT 级模型', description: '直接访问 OpenAI 模型。' }, gemini: { short: 'Gemini 模型', description: '直接访问 Google Gemini 模型。' }, xai: { short: 'Grok 模型', description: '直接访问 xAI Grok 模型。' }, local: { short: '自托管', description: '将 Hermes 指向本地或自托管的 OpenAI 兼容端点 (vLLM、llama.cpp、Ollama 等)。' } }, backToSignIn: '返回登录', getKey: '获取密钥', replaceCurrent: '替换当前值', pasteApiKey: '粘贴 API 密钥', localApiKeyPlaceholder: 'API 密钥(可选 — 仅当端点需要时填写)', couldNotSave: '无法保存凭据。', connecting: '连接中', update: '更新', flowSubtitles: { pkce: '打开浏览器登录,然后回到这里继续', device_code: '在浏览器中打开验证页面 — Hermes 会自动连接', external: '先在终端登录一次,然后回来继续对话' }, startingSignIn: provider => `正在为 ${provider} 启动登录...`, verifyingCode: provider => `正在通过 ${provider} 验证你的代码...`, connectedProvider: provider => `${provider} 已连接`, connectedPicking: provider => `${provider} 已连接。正在选择默认模型...`, signInFailed: '登录失败,请重试。', signInExpired: '等待授权超时。通常是因为登录页面在打开的标签页中卡住(服务端问题)——请在该页面完成登录后重试。若仍失败,请改用 API 密钥或 CLI 方式。', pickDifferentProvider: '选择其他提供方', signInWith: provider => `使用 ${provider} 登录`, openedBrowser: provider => `已在浏览器中打开 ${provider}。`, authorizeThere: '请在那里授权 Hermes。', copyAuthCode: '复制授权码并粘贴到下面。', pasteAuthCode: '粘贴授权码', reopenAuthPage: '重新打开授权页面', autoBrowser: provider => `已在浏览器中打开 ${provider}。请在那里授权 Hermes,连接会自动完成,无需复制或粘贴。`, reopenSignInPage: '重新打开登录页面', waitingAuthorize: '等待你授权...', externalPending: provider => `${provider} 通过自己的 CLI 登录。请在终端运行此命令,然后回来选择“我已登录”:`, signedIn: '我已登录', deviceCodeOpened: provider => `已在浏览器中打开 ${provider}。请在那里输入此代码:`, reopenVerification: '重新打开验证页面', copy: '复制', defaultModel: '默认模型', freeTier: '免费层', pro: 'Pro', free: '免费', price: (input, output) => `${input} 输入 / ${output} 输出每 Mtok`, change: '更改', startChatting: '开始', docs: provider => `${provider} 文档` }, modelPicker: { title: '切换模型', current: '当前:', unknown: '(未知)', search: '筛选提供方和模型...', noModels: '未找到模型。', addProvider: '添加提供方', loadFailed: '无法加载模型', loadingIntoMemory: '正在载入内存', downloading: '下载中', localDownloadsHeading: '本地', noAuthenticatedProviders: '没有已认证的提供方。', pro: 'Pro', proNeedsSubscription: 'Pro 模型需要付费 Nous 订阅。', free: '免费', freeTier: '免费层', priceTitle: '每百万 token 的输入/输出价格', wasPrice: '原价' }, modelVisibility: { title: '模型', search: '搜索模型', noAuthenticatedProviders: '没有已认证的提供方。', addProvider: '添加提供方…' }, shell: { windowControls: '窗口控件', paneControls: '面板控件', appControls: '应用控件', modelMenu: { search: '搜索模型', noModels: '未找到模型', editModels: '编辑模型…', refreshModels: '刷新模型', fast: '快速' }, modelOptions: { comboDetails: '模型 / 组合详情', noOptions: '此模型没有可用选项', options: '选项', thinking: '思考', fast: '快速', effort: '推理强度', minimal: '最小', low: '低', medium: '中', high: '高', xhigh: '极高', max: '最高', ultra: '超高', updateFailed: '模型选项更新失败', fastFailed: '快速模式更新失败' }, gatewayMenu: { gateway: '网关', connected: '已连接', connecting: '连接中', offline: '离线', inferenceReady: '推理已就绪', inferenceNotReady: '推理未就绪', checkingInference: '正在检查推理', disconnected: '已断开', reconnectGateway: '重连网关', openSystem: '打开系统面板', connection: label => `连接:${label}`, recentActivity: '最近活动', viewAllLogs: '查看全部日志 →', messagingPlatforms: '消息平台' }, approvalMode: { title: '审批模式', ariaLabel: mode => `审批模式:${mode}`, manual: '手动', manualDescription: '执行需要审批的操作前询问', smart: '智能', smartDescription: '自动评估操作,并在需要时询问', off: '关闭', offDescription: '不显示审批提示,直接运行' }, statusbar: { unknown: '未知', restart: '重启', update: '更新', updateInProgress: '正在更新', commitsBehind: (count, branch) => `落后 ${branch} ${count} 个提交`, desktopVersion: version => `Hermes Desktop v${version}`, backendVersion: version => `后端 v${version}`, clientLabel: version => `客户端 v${version}`, connectionSsh: host => `SSH: ${host}`, connectionRemote: host => `远程: ${host}`, connectionCloud: host => `云端: ${host}`, connectionCloudTooltip: host => `Hermes Cloud · ${host}`, connectionSshTooltip: host => `SSH · ${host}`, connectionRemoteTooltip: host => `Remote · ${host}`, backendLabel: version => `后端 v${version}`, commit: sha => `提交 ${sha}`, branch: branch => `分支 ${branch}`, closeCommandCenter: '关闭命令中心', openCommandCenter: '打开命令中心', showTerminal: '显示终端', hideTerminal: '隐藏终端', gateway: '网关', gatewayReady: '就绪', gatewayNeedsSetup: '需要设置', gatewayUnavailable: '推理不可用', gatewayChecking: '检查中', gatewayConnecting: '连接中', gatewayOffline: '离线', gatewayRestarting: '重启中…', gatewayTitle: '网关', customizeTitle: '在状态栏中显示', hideStatusbar: '隐藏状态栏', resetStatusbar: '恢复默认设置', toggleApprovalMode: '审批', toggleBackendVersion: '后端版本', toggleCacheHitRate: '缓存命中率', toggleCommandCenter: '命令中心', toggleContextUsage: '上下文用量', toggleRunningTimer: '回合计时', toggleSessionTimer: '会话计时', toggleTerminal: '终端', toggleTokensPerSecond: '每秒 token 数', toggleVersion: '版本与更新', toggleWorkspace: '工作区', cacheHitRateTitle: '本会话的提示缓存命中率 — 缓存 token 更便宜,越高越省', tokensPerSecondTitle: '每秒输出 token 数,取最近 10 次模型调用的平均值', agents: '代理', closeAgents: '关闭代理', openAgents: '打开代理', subagents: count => `${count} 个子代理`, failed: count => `${count} 个失败`, running: count => `${count} 个运行中`, cron: '排程', openCron: '打开排程任务', webhooks: 'Webhook', openWebhooks: '打开 Webhook', starmap: '记忆图谱', openStarmap: '打开记忆图谱', turnRunning: '运行中', contextUsage: '上下文用量', systemResources: { title: '系统资源', loading: '资源…', gpuUtilization: 'GPU 利用率', gpuMemory: '显存', ram: '内存', unifiedNote: '统一内存——GPU 与系统共享此内存池。', toggle: '系统资源' }, contextUsagePanel: { categories: { conversation: '对话', mcp: 'MCP', memory: '记忆', rules: '规则', skills: '技能', subagent_definitions: '子代理定义', system_prompt: '系统提示词', tool_definitions: '工具定义' }, empty: '暂无上下文数据', loading: '正在加载明细…', percentFull: percent => `已用 ${percent}%`, title: '上下文用量', tokenSummary: (used, max) => `${used} / ${max} Tokens` }, session: '会话', yoloOn: 'YOLO 已开启 — 自动批准危险命令。Shift+点击可全局切换。', yoloOff: 'YOLO 已关闭。Shift+点击可全局切换。', modelNone: '无', noModel: '无模型', switchModel: '切换模型', openModelPicker: '打开模型选择器', modelPinned: '已由你固定;新对话将使用此模型而非“设置”中的默认模型', modelTitle: (provider, model) => `模型 · ${provider}: ${model}`, providerModelTitle: (provider, model) => `${provider} · ${model}` } }, rightSidebar: { aria: '右侧边栏', panelsAria: '右侧边栏面板', files: '文件系统', terminal: '终端', noFolderSelected: '未选择文件夹', changeCwdTitle: '更改工作目录', remotePickerTitle: '选择远程文件夹', remotePickerDescription: '浏览已连接后端上的文件夹。', remotePickerSelect: '选择文件夹', folderTip: cwd => cwd, openFolder: '打开文件夹', refreshTree: '刷新文件树', collapseAll: '折叠所有文件夹', previewUnavailable: '预览不可用', couldNotPreview: path => `无法预览 ${path}`, noProjectTitle: '没有项目', noProjectBody: '打开一个项目以浏览文件并查看更改。', noProjectOpen: '未打开项目', noDiffs: '无差异', unreadableTitle: '无法读取', unreadableBody: error => `无法读取此文件夹 (${error})。`, emptyTitle: '空文件夹', emptyBody: '此文件夹为空。', treeErrorTitle: '文件树错误', treeErrorBody: '文件树渲染此文件夹时出错。', tryAgain: '重试', loadingTree: '正在加载文件树', loadingFiles: '正在加载文件', terminalHide: '隐藏终端', terminalsAria: '终端', terminalNew: '新建终端', terminalCloseOthers: '关闭其他', terminalCloseAll: '关闭全部', addToChat: '添加到对话' }, preview: { tab: '预览', closePane: '关闭预览面板', loading: '正在加载预览', unavailable: '预览不可用', opening: '正在打开...', hide: '隐藏', openPreview: '打开预览', openInBrowser: '在浏览器中打开', openInExternal: '在外部打开', popIn: '弹回', popOut: '弹出', linkHint: '⌘/Ctrl+点击在预览面板打开', sourceLineTitle: '点击选择 · shift 点击扩展 · 拖到输入框', source: '源码', renderedPreview: '预览', diff: '差异', unknownSize: '大小未知', binaryTitle: '这看起来像二进制文件', binaryBody: label => `预览 ${label} 可能会显示不可读文本。`, largeTitle: '此文件较大', largeBody: (label, size) => `${label} 大小为 ${size}。Hermes 只会显示前 512 KB。`, previewAnyway: '仍然预览', truncated: '显示前 512 KB。', noInlineTitle: '没有内联预览', noInlineBody: mimeType => `${mimeType || '此文件类型'} 仍可作为上下文附件。`, edit: '编辑', editing: '编辑中', unsavedChanges: '未保存的更改', saveFailed: message => `无法保存:${message}`, diskChangedTitle: '文件已在磁盘上更改', diskChangedBody: '此文件自打开以来已更改。用你的版本覆盖,还是放弃你的编辑并重新加载?', overwrite: '覆盖', discardReload: '放弃并重新加载', console: { deselect: '取消选择条目', select: '选择条目', copyFailed: '无法复制控制台输出', copyEntry: '复制此条目', sendEntry: '将此条目发送到对话', messages: count => `${count} 条控制台消息`, resize: '调整预览控制台大小', title: '预览控制台', selected: count => `已选择 ${count} 条`, sendToChat: '发送到对话', copySelected: '复制所选到剪贴板', copyAll: '全部复制到剪贴板', copy: '复制', clear: '清除', empty: '暂无控制台消息。', promptHeader: '预览控制台:', sentTitle: '已发送到对话', sentMessage: count => `已将 ${count} 条日志添加到输入框` }, web: { appFailedToBoot: '预览应用启动失败', serverNotFound: '未找到服务器', remoteLoopback: '该地址指向运行代理的那台机器,而不是本机。浏览器面板在本地加载页面,因此远程开发服务器需要端口转发或可访问的主机名。', failedToLoad: '预览加载失败', tryAgain: '重试', restarting: 'Hermes 正在重启...', askRestart: '让 Hermes 重启服务器', lookingRestart: taskId => `Hermes 正在查找要重启的预览服务器 (${taskId})`, restartingTitle: '正在重启预览服务器', restartingMessage: 'Hermes 正在后台工作。可在预览控制台查看进度。', startRestartFailed: message => `无法启动服务器重启:${message}`, restartFailed: '服务器重启失败', hideConsole: '隐藏预览控制台', showConsole: '显示预览控制台', hideDevTools: '隐藏预览 DevTools', openDevTools: '打开预览 DevTools', goBack: '后退', goForward: '前进', reload: '重新加载页面', address: '地址', addressPlaceholder: '输入地址', blankPageBody: '在上方输入地址开始浏览,或让 Hermes 打开一个页面。', finishedRestarting: message => `Hermes 已完成预览服务器重启${message ? `: ${message}` : ''}`, failedRestarting: message => `服务器重启失败:${message}`, unknownError: '未知错误', restartedTitle: '预览服务器已重启', reloadingNow: '正在重新加载预览。', restartFailedTitle: '预览重启失败', restartFailedMessage: 'Hermes 无法重启服务器。', stillWorking: 'Hermes 仍在工作,但还没有收到重启结果。服务器命令可能正在前台运行。', workspaceReloading: '工作区已变更,正在重新加载预览', fileChanged: url => `文件已变更,正在重新加载预览:${url}`, filesChanged: (count, url) => `${count} 个文件变更,正在重新加载预览:${url}`, watchFailed: message => `无法监听预览文件:${message}`, moduleMimeDescription: '模块脚本使用了错误的 MIME 类型。这通常表示静态文件服务器正在服务 Vite/React 应用,而不是项目开发服务器。', loadFailedConsole: (code, message) => `加载失败${code ? ` (${code})` : ''}: ${message}`, unreachableDescription: '无法访问预览页面。', openTarget: url => `打开 ${url}`, fallbackTitle: '预览', annotate: '标注', annotateOn: '停止标注', annotateNeedPage: '请先在内置浏览器中打开页面。', annotateFailed: '无法开始标注', commenting: '标注中', addComments: count => (count === 1 ? '添加 1 条批注' : `添加 ${count} 条批注`), commentPlaceholder: '添加批注…', commentTitle: n => `批注 ${n}`, saveComment: '保存', cancelComment: '取消批注' } }, zones: { bots: '机器人', showTabStrip: '显示标签', hideTabStrip: '隐藏标签', showStripTab: title => `显示 ${title}`, hideStripTab: title => `隐藏 ${title}`, lastTabKeptTitle: '保留最后一个标签', lastTabKeptBody: '该区域至少需要一个可见标签。请先显示另一个标签,或折叠整个侧边栏。', toggleStripTab: title => `切换 ${title} 标签`, minimize: '最小化', restore: '还原', closeRunningTitle: '关闭正在运行的标签?', closeRunningBody: '此对话仍在运行(或正在等待你的输入)。关闭标签只会隐藏它——会话将保留进度,可从侧边栏重新打开。', closeRunningConfirm: '关闭标签', reload: '重新加载', closeOthers: '关闭其他', closeToRight: '关闭右侧', closeAll: '全部关闭', newSessionTab: '新建会话标签', newTab: '新建标签页', pluginDisabled: pluginId => `插件“${pluginId}”已禁用`, pluginDisabledBody: '在 设置 → 插件 中重新启用即可恢复面板。', missingPane: paneId => `缺少面板:${paneId}`, editTitle: '布局', editHint: '选择一个布局,或在区域之间拖动面板。', reset: '重置', templates: '模板', custom: '自定义', newGridLayout: '新建网格布局', saveCurrentAs: '将当前排列保存为模板', nameLayoutPlaceholder: '为布局命名…', deletePreset: name => `删除 ${name}`, zoneEditorTitle: '区域编辑器', editorHintPre: '点击拆分 · ', editorHintPost: ' 翻转分割线 · 拖过多个区域可合并 · 拖动共享边可调整大小', templateColumns: '列', templateRows: '行', templateGrid: '网格', templatePriority: '优先', zoneTag: index => `区域 ${index}`, mergeZones: count => `合并 ${count} 个区域`, customZoneName: count => `自定义 ${count} 区`, layoutNamePlaceholder: fallback => `布局名称(${fallback})`, saveApply: '保存并应用', notExpressible: '此排列互相咬合(风车形)——暂无法表示为嵌套拆分', zoneCount: count => `${count} 个区域`, tabCount: count => `${count} 个标签页` }, contextMenu: { link: { openInApp: '在应用内浏览器中打开', openExternal: '在外部浏览器中打开', copyUrl: '复制 URL', copyResolvedUrl: '复制解析后的 URL' }, image: { copyImage: '复制图片', copyImageAddress: '复制图片地址', saveImageAs: '图片另存为…' }, edit: { cut: '剪切', paste: '粘贴', selectAll: '全选', addToDictionary: '添加到词典' }, page: { copyPageUrl: '复制页面 URL', inspectElement: '检查元素' } }, assistant: { thread: { loadingSession: '正在加载会话', showEarlier: '显示更早的消息', loadingResponse: 'Hermes 正在加载回复', loadingLocalModel: model => `正在将 ${model} 载入内存`, processingPrompt: '正在处理提示词', resumeWhenBackgroundDone: count => count === 1 ? '后台任务完成后将自动继续' : `${count} 个后台任务完成后将自动继续`, thinking: '思考中', thought: '已思考', thoughtBriefly: '思考了片刻', thoughtFor: duration => `思考了 ${duration}`, turnDuration: duration => `本轮耗时 ${duration}`, today: time => `今天,${time}`, yesterday: time => `昨天,${time}`, copy: '复制', refresh: '刷新', moreActions: '更多操作', branchNewChat: '在新对话中分支', react: '回应', dismissError: '关闭错误', errorLayers: { auth: '认证错误', billing: '额度不足', disk: '磁盘已满', endpoint: '自定义端点错误', gateway: '网关错误', generic: '本轮失败', provider: '模型服务商错误', runtime: '本地运行时错误', streaming: '流式连接错误' }, errorRetry: '重试', errorSwitchProvider: '切换服务商', errorOpenLogs: '打开日志', errorOpenLogsFailed: '无法打开日志文件夹', errorOpenDesktopLogs: '打开桌面端日志', errorCopyDiagnostics: '复制错误详情', errorSendDiagnostics: '发送诊断信息', filesChanged: count => `${count} 个文件已更改`, reviewChanges: '查看', readAloudFailed: '朗读失败', preparingAudio: '正在准备音频...', stopReading: '停止朗读', readAloud: '朗读', editMessage: '编辑消息', expandMessage: '展开消息', scrollToBottom: '滚动到底部', stop: '停止', restorePrevious: '恢复上一个检查点', restoreCheckpoint: '恢复检查点', restoreFromHere: '恢复检查点 — 从此提示重新运行', restoreTitle: '恢复到此检查点?', restoreBody: '此提示之后的所有消息将从对话中移除,并从此处重新运行该提示。', restoreConfirm: '恢复并重新运行', restoreNext: '恢复下一个检查点', goForward: '前进', sendEdited: '发送编辑后的消息', attachingFile: '正在附加…' }, approval: { gatewayDisconnected: 'Hermes 网关未连接', sendFailed: '无法发送审批响应', run: '运行', command: '命令', moreOptions: '更多审批选项', allowSession: '允许本会话', alwaysAllowMenu: '始终允许…', jumpToApproval: '需要审批', reject: '拒绝', alwaysTitle: '始终允许此命令?', alwaysDescription: pattern => `这会将“${pattern}”模式加入永久允许列表 (~/.hermes/config.yaml)。Hermes 对类似命令将不再询问,包括当前会话和未来会话。`, alwaysAllow: '始终允许' }, clarify: { notReady: '澄清请求尚未就绪', gatewayDisconnected: 'Hermes 网关未连接', sendFailed: '无法发送澄清响应', loadingQuestion: '正在加载问题…', other: '其他 (输入你的答案)', placeholder: '输入你的答案…', skip: '跳过', skipped: '已跳过', continueLabel: '继续', confirmAndContinueLabel: '确认并继续', answeredBadge: '已回答', questionProgress: (answered, total) => `已回答 ${answered}/${total}`, lateAnswer: (question, choice) => `关于"${question}" — 我的回答: ${choice}`, lateAnswerTip: '将此回答起草为后续消息', lateAnswerHint: '此问题已不再等待回答。选择一个选项会将其起草为后续消息。' }, mcpSetup: { installTitle: server => `添加 ${server} MCP 服务器?`, enableTitle: server => `启用 ${server} MCP 服务器?`, authorizeTitle: server => `授权 ${server} MCP 服务器?`, installAction: '安装', enableAction: '启用', authorizeAction: '授权', decline: '暂不', declined: '已拒绝', installed: server => `已安装 ${server}`, enabled: server => `已启用 ${server}`, authorized: server => `已授权 ${server}`, failed: server => `${server} 设置失败`, unanswered: '未响应', toolCount: count => `${count} 个工具`, notInCatalog: server => `“${server}”不在 MCP 目录中`, catalogSource: '来自 Nous 认证目录', envRequired: '请先填写所需凭据', sendFailed: '无法发送 MCP 设置响应', reloadFailed: '服务器已保存,但重新加载 MCP 工具失败 — 将在下个会话加载', gatewayDisconnected: 'Hermes 网关未连接' }, tool: { copyCode: '复制代码', renderingImage: '正在渲染图片', copyOutput: '复制输出', copyCommand: '复制命令', copyContent: '复制内容', copyUrl: '复制 URL', copyResults: '复制结果', copyQuery: '复制查询', copyFile: '复制文件', copyPath: '复制路径', outputAlt: '工具输出', rawResponse: '原始响应', copyActivity: '复制活动', recoveredOne: '在 1 个失败步骤后已恢复', recoveredMany: count => `在 ${count} 个失败步骤后已恢复`, failedOne: '1 个步骤失败', failedMany: count => `${count} 个步骤失败`, statusRunning: '运行中', statusError: '错误', statusRecovered: '已恢复', statusDone: '完成', memoryWriteNoted: '已记下记忆写入', actions: { read: '已读取', reading: '正在读取', opened: '已打开', opening: '正在打开', failedToOpen: '打开失败', searched: '已搜索', searching: '正在搜索', ran: '已运行', running: '正在运行', ranCode: '已运行代码', runningCode: '正在编写脚本' }, prefixes: { browser: '浏览器', web: '网页' }, titleTemplates: { actionCommand: (action, command) => `${action} ${command}`, actionQuoted: (action, value) => `${action}“${value}”`, actionTarget: (action, target) => `${action} ${target}`, prefixedDone: (prefix, action) => `${prefix}${action}`, runningPrefixedTool: (prefix, action) => `正在运行${prefix}${action}`, runningTool: action => `正在运行 ${action}` }, titles: { browser_click: { done: '已点击页面元素', pending: '正在点击页面元素', pendingAction: '正在点击' }, browser_fill: { done: '已填写表单字段', pending: '正在填写表单字段', pendingAction: '正在填写' }, browser_navigate: { done: '已打开页面', pending: '正在打开页面', pendingAction: '正在打开' }, browser_snapshot: { done: '已捕获页面快照', pending: '正在捕获页面快照', pendingAction: '正在捕获' }, browser_take_screenshot: { done: '已捕获截图', pending: '正在捕获截图', pendingAction: '正在捕获' }, browser_type: { done: '已在页面输入', pending: '正在页面输入', pendingAction: '正在输入' }, clarify: { done: '已提问', pending: '正在提问', pendingAction: '正在提问' }, cronjob: { done: 'Cron 任务', pending: '正在安排 Cron 任务', pendingAction: '正在安排' }, edit_file: { done: '已编辑文件', pending: '正在编辑文件', pendingAction: '正在编辑' }, execute_code: { done: '已运行代码', pending: '正在编写脚本', pendingAction: '正在编写脚本' }, image_generate: { done: '已生成图片', pending: '正在生成图片', pendingAction: '正在生成' }, list_files: { done: '已列出文件', pending: '正在列出文件', pendingAction: '正在列出' }, memory: { done: '已保存到记忆', pending: '正在保存到记忆', pendingAction: '正在保存' }, patch: { done: '已修补文件', pending: '正在修补文件', pendingAction: '正在修补' }, read_file: { done: '已读取文件', pending: '正在读取文件', pendingAction: '正在读取' }, search_files: { done: '已搜索文件', pending: '正在搜索文件', pendingAction: '正在搜索' }, session_search_recall: { done: '已搜索会话历史', pending: '正在搜索会话历史', pendingAction: '正在搜索' }, terminal: { done: '已运行命令', pending: '正在运行命令', pendingAction: '正在运行' }, todo: { done: '已更新待办', pending: '正在更新待办', pendingAction: '正在更新' }, vision_analyze: { done: '已分析图片', pending: '正在分析图片', pendingAction: '正在分析' }, web_extract: { done: '已读取网页', pending: '正在读取网页', pendingAction: '正在读取' }, web_search: { done: '已搜索网页', pending: '正在搜索网页', pendingAction: '正在搜索' }, write_file: { done: '已编辑文件', pending: '正在编辑文件', pendingAction: '正在编辑' } } } }, prompts: { gatewayDisconnected: 'Hermes 网关未连接', sudoSendFailed: '无法发送 sudo 密码', secretSendFailed: '无法发送密钥', sudoTitle: '管理员密码', sudoDesc: 'Hermes 需要你的 sudo 密码来运行特权命令。它只会发送给你的本地 agent。', sudoPlaceholder: 'sudo 密码', secretTitle: '需要密钥', secretDesc: 'Hermes 需要一个凭据才能继续。', secretPlaceholder: '密钥值' }, desktop: { audioReadFailed: '无法读取录制的音频', sessionUnavailable: '会话不可用', createSessionFailed: '无法创建新会话', promptFailed: '提示词发送失败', providerCredentialRequired: '发送第一条消息前请先添加提供方凭据。', emptySlashCommand: '空 slash 命令', desktopCommands: '桌面端命令', skillCommandsAvailable: count => `${count} 个技能命令可用。`, warningLine: message => `警告:${message}`, yoloArmed: '此对话已启用 YOLO', yoloOff: 'YOLO 已关闭', yoloSystem: active => `此会话 YOLO ${active ? '已开启' : '已关闭'}`, yoloTitle: 'YOLO', yoloToggleFailed: '无法切换 YOLO', profileStatus: current => `配置档案:${current}。使用 /profile 或“新建会话”选择器在其他配置档案中开始对话。`, unknownProfile: '未知配置档案', noProfileNamed: (target, available) => `没有名为“${target}”的配置档案。可用:${available}`, newChatsProfile: name => `新对话将使用配置档案 ${name}。`, setProfileFailed: '设置配置档案失败', sttDisabled: '设置中已禁用语音转文字。', stopFailed: '停止失败', regenerateFailed: '重新生成失败', editFailed: '编辑失败', editTurnUnavailable: '此回合已不在服务器历史中(可能已被压缩移除)。', resumeFailed: '恢复失败', readOnlyTranscriptTitle: '已以只读方式打开', readOnlyTranscriptBody: '尚无已连接的后端认领这个较早的会话,因此它以只读记录方式打开。历史记录完好;在有后端认领之前无法发送消息。', readOnlyTranscriptSendBlocked: '该会话目前以只读记录方式打开——发送已禁用。', resumeStrandedTitle: '无法加载此会话', resumeStrandedBody: '与此会话的连接失败,自动重试已停止。请确认网关正在运行,然后重试。', resumeRetry: '重试', nothingToBranch: '没有可分支的内容', branchNeedsChat: '分支前请先开始或恢复一个对话。', sessionBusy: '会话忙碌中', branchStopCurrent: '分支此对话前请先停止当前回合。', branchNoText: '此消息没有可用于分支的文本。', branchTitle: n => `草稿:分支 #${n}`, branchFailed: '分支失败', deleteFailed: '删除失败', archived: '已归档', archiveFailed: '归档失败', cwdChangeFailed: '工作目录更改失败', cwdStagedTitle: '工作目录已暂存', cwdStagedMessage: '重启桌面后端后,工作目录更改才会应用到当前活跃会话。', modelSwitchFailed: '模型切换失败', hydrationSyncing: (profile: string) => `正在同步 ${profile}\u2026`, sessionExported: '会话已导出', sessionExportFailed: '无法导出会话', imageSaved: '图片已保存', downloadStarted: '下载已开始', restartToUseSaveImage: '重启 Hermes 桌面版后可使用保存图片。', restartToSaveImages: '重启 Hermes 桌面版以保存图片', imageDownloadFailed: '图片下载失败', openImage: '打开图片', downloadImage: '下载图片', savingImage: '正在保存图片', imagePreviewFailed: '图片预览失败', imageAttach: '附加图片', imageWriteFailed: '无法将图片写入磁盘。', imageAttachFailed: '附加图片失败', attachImages: '附加图片', clipboard: '剪贴板', noClipboardImage: '剪贴板中没有图片', clipboardPasteFailed: '粘贴剪贴板失败', dropFiles: '拖放文件', handoff: { pickPlatform: '选择目标平台', success: platform => `已移交到 ${platform}。随时可在此处恢复。`, systemNote: platform => `↻ 已移交到 ${platform} — 随时可在此处恢复。`, failed: error => `移交失败:${error}`, timedOut: '等待网关超时。`hermes gateway` 是否正在运行?' } }, tips: { close: '不再显示这条提示', items: { 'new-session': { title: '从头开始', text: '新对话拥有独立的上下文、终端和工作目录。' }, skills: { title: '教一次就够', text: '技能是一组说明文件,Hermes 会在需要时自行加载。' }, messaging: { title: '离开电脑也能用', text: '接入 Telegram、Discord、Slack 等 — 同一个智能体,同一份记忆。' }, artifacts: { title: 'Hermes 做过的一切', text: '所有会话里的图片、文件和链接,都汇总在这里。' }, cron: { title: '会自己运行的任务', text: '让一条提示按小时、按夜间,或按 cron 表达式定时执行。' }, 'command-palette': { title: '一个输入框搞定一切', text: '会话、设置、技能和命令都能从命令面板找到。' }, profiles: { title: '配置文件彼此独立', text: '每个都是独立的 Hermes — 自己的密钥、记忆和会话。' }, 'composer-mentions': { title: '附件与命令', text: '输入 @ 把文件带入对话,输入 / 运行命令。' }, 'local-setup': { title: '这台电脑可以本地运行模型', text: '你的硬件可以运行本地模型。对话不离开你的电脑,而且完全免费。', action: '立即设置' }, 'right-pane': { title: '工作面板', text: '文件、终端、审阅和内置浏览器都在侧边面板里。' } } }, errors: { genericFailure: '发生错误', boundaryTitle: '界面出错了', boundaryDesc: '此视图遇到意外错误。你的对话和设置是安全的。', reloadWindow: '重新加载窗口', openLogs: '打开日志' }, ui: { search: { clear: '清除搜索' }, pagination: { label: '分页', previous: '上一页', previousAria: '前往上一页', next: '下一页', nextAria: '前往下一页' }, sidebar: { title: '侧边栏', description: '显示移动端侧边栏。', toggle: open => `${open ? '显示' : '隐藏'}侧边栏` } } }