Files
hapi/web/src/lib/locales/zh-CN.ts
T
wushenghuaandGitHub 0725fabe84 feat(web): pin running sessions in an in-progress section with state badges (#1315)
* feat(web): pin running sessions in an 'in progress' section with a live badge

* feat(web): show project name on pinned running session rows

* feat(web): make the pinned 'in progress' section collapsible

* fix(web): don't auto-expand directory groups when opening pinned running sessions

* fix(web): keep running section open while searching; clear auto-expand guard when selection leaves a group

* feat(web): show machine label on pinned running session rows

* fix(web): make running-section toggle keyboard-accessible with correct filtered state

* feat(web): split pinned running section into working/pending/idle groups with distinct badges
2026-08-03 09:24:44 +08:00

976 lines
52 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export default {
// Loading states
'loading': '加载中…',
'authorizing': '认证中…',
'loading.session': '加载会话…',
'loading.git': '加载 Git 状态…',
'loading.file': '加载文件…',
'loading.files': '加载文件…',
'loading.messages': '加载消息…',
'loading.machines': '加载机器…',
'message.copy': '复制',
'message.copied': '已复制',
'message.info': '消息详情',
'message.shareTurn': '将本轮对话分享为图片',
'shareTurn.title': '将本轮对话分享为图片',
'shareTurn.badge': '分享会话',
'shareTurn.generated': 'Generated by HAPI',
'shareTurn.cancel': '取消',
'shareTurn.copy': '复制',
'shareTurn.copying': '复制中…',
'shareTurn.copied': '已复制',
'shareTurn.share': '分享',
'shareTurn.sharing': '分享中…',
'shareTurn.download': '下载',
'shareTurn.saving': '保存中…',
// Login / Auth
'login.title': 'HAPI',
'login.subtitle': '随时随地,Vibe Coding',
'login.bind.title': '绑定 Telegram',
'login.submit': '登录',
'login.bind.submit': '绑定',
'login.submitting': '登录中…',
'login.bind.submitting': '绑定中…',
'login.placeholder': '访问令牌',
'login.error.enterToken': '请输入访问令牌',
'login.error.bindingUnavailable': '绑定服务不可用。',
'login.error.loginUnavailable': '登录服务不可用。',
'login.error.bindFailed': '绑定失败',
'login.error.authFailed': '认证失败',
'login.help': '需要帮助?',
'login.server.default': '(默认)',
'login.server.custom': '(自定义)',
'login.server.title': '服务器地址',
'login.server.description': '设置 HAPI 服务器地址以使用 API 和实时更新。',
'login.server.current': '当前:',
'login.server.origin': '服务器地址',
'login.server.placeholder': 'https://hapi.example.com',
'login.server.hint': '仅使用 http(s) 协议。任何路径将被忽略。',
'login.server.required': '必须先填写服务器地址才能登录。',
'login.server.useSameOrigin': '使用同源',
'login.server.save': '保存',
'login.footer': '用',
'login.footer.for': '设计,Vibe Coding',
'login.footer.copyright': '©',
// Sessions page
'sessions.new': '新建会话',
'sessions.empty.title': '还没有会话',
'sessions.empty.hint': '在 workspace 下任意目录启动一个会话,或先浏览目录树看看。',
'sessions.empty.startSession': '启动会话',
'sessions.empty.browse': '浏览 workspace',
'sessions.search.placeholder': '搜索会话…',
'sessions.search.open': '搜索会话',
'sessions.search.clear': '清除搜索',
'sessions.search.noResults': '没有符合筛选条件的会话。',
'sessions.timeFilter.label': '按最后活动时间筛选会话',
'sessions.timeFilter.pickStart': '选择开始日期',
'sessions.timeFilter.pickEnd': '选择结束日期',
'sessions.timeFilter.clear': '清除',
'sessions.timeFilter.close': '关闭日期选择器',
'sessions.timeFilter.previousMonth': '上个月',
'sessions.timeFilter.nextMonth': '下个月',
'sessions.timeFilter.dayWithActivity': '{date},有会话活动',
'sessions.group.expand': '展开 {n} 个',
'sessions.group.collapse': '收起 {n} 个',
'sessions.runningSection': '进行中',
'sessions.group.new': '在此目录新建会话',
'sessions.machineFilter.label': '按机器筛选会话',
'sessions.machineFilter.all': '全部',
'codexSync.tooltip': '从 Codex 导入会话到 Hapi',
'codexSync.newSessionAction': '导入 Codex 历史',
'codexSync.confirm.title': '导入 Codex 会话',
'codexSync.confirm.description': '选择需要导入到 Hapi 的 Codex 会话',
// 中文注释:以下文案支撑导入弹窗的多选列表、加载态,以及右上角重启 Codex 客户端按钮提示。
'codexSync.confirm.selectAll': '全选',
'codexSync.confirm.clearAll': '全取消',
'codexSync.confirm.selectedCount': '已选择 {n} 个会话',
'codexSync.confirm.empty': '未找到本地 Codex 会话',
'codexSync.confirm.current': '当前关联',
'codexSync.confirm.cwd': '工作目录',
'codexSync.confirm.cwdFilter': '工作目录',
'codexSync.confirm.cwdFilterAll': '全部工作目录',
'codexSync.confirm.emptyForWorkdir': '此工作目录下没有 Codex 会话',
'codexSync.confirm.confirm': '导入',
'codexSync.confirm.confirming': '导入中…',
'codexSync.confirm.loading': '正在读取本地 Codex 会话…',
'codexSync.success.title': '导入完成',
'codexSync.success.body': '已导入 {n} 个 Codex 会话到 Hapi。',
'codexSync.manual.success.title': 'Codex 同步完成',
'codexSync.manual.success.body': '已同步 {n} 个 Codex 会话。',
'codexSync.manual.failed.title': '同步 Codex 会话失败',
'codexSync.error.timeout': '执行超时',
'codexSync.error.active': '当前会话仍处于活跃状态,请等待会话结束后重试',
'codexSync.failed.title': '导入 Codex 会话失败',
'codexSync.failed.body': '导入 Codex 会话失败。',
'codexSync.failed.bodyWithReason': '导入失败:{reason}',
'codexSync.restart.tooltip': '重启codex客户端',
'codexSync.restart.title': '重启 Codex 客户端',
'codexSync.restart.description': '是否立即重启 Codex 客户端以刷新会话?',
'codexSync.restart.confirm': '重启',
'codexSync.restart.confirming': '重启中…',
'codexSync.restart.failed.title': '重启 Codex 客户端失败',
'codexSync.restart.failed.notFound': '尝试重启codex客户端失败,未安装/找不到codex客户端',
'codexSync.restart.failed.body': '重启脚本执行失败。',
'codexSync.restart.started.title': '已发起重启',
'codexSync.restart.started.body': 'Codex 客户端正在重启以刷新会话。',
'codexSync.duplicates.confirm.title': '检测到重复会话',
'codexSync.duplicates.confirm.description': '检测到重复会话,是否进行合并?',
'codexSync.duplicates.confirm.confirm': '合并',
'codexSync.duplicates.confirm.confirming': '合并中…',
'codexSync.duplicates.detect.failed.title': '重复会话检测失败',
'codexSync.duplicates.detect.failed.body': '重复会话检测失败。',
'codexSync.duplicates.merge.success.title': '重复会话已合并',
'codexSync.duplicates.merge.success.body': '已按本次选中的 Codex 会话完成去重合并。',
'codexSync.duplicates.merge.failed.title': '重复会话合并失败',
'codexSync.duplicates.merge.failed.body': '重复会话合并失败。',
// Session list
'session.item.path': '路径',
'session.item.agent': '代理',
'session.item.model': '模型',
'session.item.machine': '机器',
'session.item.worktree': '工作树',
'session.item.pending': '待处理',
'session.item.thinking': '思考中',
'session.item.running': '运行中',
'session.item.idle': '空闲',
'session.item.permission': '需要权限',
'session.item.needsInput': '需要输入',
'session.item.background': '后台任务运行中',
'session.item.newActivity': '有新活动',
'session.item.scheduledMessage': '有待发送的定时消息',
'session.item.scheduledMessages': '{count} 条定时消息待发送',
'session.tooltip.permission.body': '批准:',
'session.tooltip.input.body': '回复:',
'session.tooltip.background.count.one': '1 个任务运行中',
'session.tooltip.background.count.other': '{count} 个任务运行中',
'session.tooltip.scheduled.body': '到时会自动发送。',
'session.tooltip.scheduled.fires': '{when} 发送',
'session.tooltip.scheduled.next': '下次 {when} · 另有 {more} 条',
'session.tooltip.moreCount': '另有 {count} 条',
'session.time.justNow': '刚刚',
'session.time.minutesAgo': '{n}分钟前',
'session.time.hoursAgo': '{n}小时前',
'session.time.daysAgo': '{n}天前',
'session.time.inLessThanMinute': '不到1分钟',
'session.time.inMinutes': '{n}分钟后',
'session.time.inHours': '{n}小时后',
'session.time.inDays': '{n}天后',
'session.time.soon': '即将',
'session.time.importedFromCodex.justNow': '刚刚从codex客户端导入',
'session.time.importedFromCodex.minutesAgo': '{n}分钟前从codex客户端导入',
'session.time.importedFromCodex.hoursAgo': '{n}小时前从codex客户端导入',
'session.time.importedFromCodex.daysAgo': '{n}天前从codex客户端导入',
'session.cursorMigration.banner.title': '正在升级 Cursor 会话',
'session.cursorMigration.banner.body': '正在将此旧版会话切换到更安全的 ACP 协议。历史较长的会话需要 15-20 秒;对话会自动恢复,已输入但未发送的草稿不会丢失。',
'session.cursorMigration.bannerAmbiguous.title': 'Cursor 会话升级需要人工处理',
'session.cursorMigration.bannerAmbiguous.body': '此会话在磁盘上的多个工作区下存在,或本地存储大小与已同步的历史记录不匹配,因此 HAPI 拒绝自动迁移。请在 hub 日志中搜索 "[migrator] ambiguous legacy store" 或 "[migrator] size sanity check refused" 获取候选列表,删除 ~/.cursor/chats/ 下的陈旧目录后,再重新打开此会话。',
// Session inactive
'session.inactive.autoResume': '此会话已停止。发送消息即可恢复。',
'session.inactive.cannotResume': '此会话已停止,无法恢复。',
// Session header
'session.title': '文件',
'session.view.returnToChat': '返回会话',
'session.more': '更多操作',
'session.outline.open': '会话大纲',
'session.outline.close': '关闭大纲',
'session.outline.title': '大纲',
'session.outline.loadOlder': '加载更早',
'session.outline.empty': '已加载消息中暂无大纲项',
'session.outline.searchPlaceholder': '搜索大纲…',
'session.outline.searchLabel': '搜索大纲条目',
'session.outline.searchResults': '{matched}/{total} 个条目',
'session.outline.noSearchResults': '没有匹配的大纲条目',
// Session actions
'session.action.rename': '重命名',
'session.action.export': '导出对话',
'session.action.syncCodex': '从 Codex 同步',
'session.action.archive': '归档',
'session.action.reopen': '重新打开',
'session.action.reopenCursorChecking': '正在检查记录设备上的 Cursor 聊天数据是否仍然可用。',
'session.action.reopenCursorMissing': '记录设备上的 Cursor 聊天数据已不可用。',
'session.action.reopenCursorCheckFailed': '无法验证记录设备上的 Cursor 聊天数据。',
'session.action.delete': '删除',
'session.action.copy': '复制',
'session.action.copyReference': '复制引用',
// Dialogs
'dialog.uri.title': '打开此链接?',
'dialog.uri.description': '此链接使用自定义 URI 协议。请确认您信任此链接后再打开。',
'dialog.uri.open': '打开',
'dialog.uri.alwaysAllow': '始终允许 {scheme}:',
'dialog.rename.title': '重命名会话',
'dialog.rename.placeholder': '会话名称',
'dialog.rename.save': '保存',
'dialog.rename.saving': '保存中…',
'dialog.rename.error': '重命名失败,请重试。',
'dialog.archive.title': '归档会话',
'dialog.archive.description': '确定要归档 "{name}" 吗?这将断开活动会话。',
'dialog.archive.confirm': '归档',
'dialog.archive.confirming': '归档中…',
'dialog.reopen.errorTitle': '无法重新打开会话',
'dialog.reopen.dismiss': '关闭',
'dialog.delete.title': '删除会话',
'dialog.delete.description': '确定要删除 "{name}" 吗?此操作无法撤销。',
'dialog.delete.scratchlist.one': '这也将删除 1 条草稿清单条目。',
'dialog.delete.scratchlist.other': '这也将删除 {n} 条草稿清单条目。',
'dialog.delete.confirm': '删除',
'dialog.delete.confirming': '删除中…',
'dialog.error.default': '操作失败,请重试。',
// Session export
'session.export.title': '导出对话',
'session.export.description': '选择格式,然后下载完整可见对话与 scratchlist 笔记。',
'session.export.format.json': 'JSON',
'session.export.format.json.description': '保留会话元数据、消息与 scratchlist 笔记的无损载荷(附件仅含元数据)。',
'session.export.format.markdown': 'Markdown',
'session.export.format.markdown.description': '从同一份导出载荷生成的可读视图。',
'session.export.download': '下载',
'session.export.downloading': '导出中…',
'session.export.error.noApi': '未连接到服务器',
'session.export.error.default': '导出对话失败',
'session.export.toast.success.title': '对话已导出',
'session.export.toast.success.body': '已下载 {filename}',
'session.export.toast.error.title': '导出失败',
// Mermaid diagrams
'mermaid.openFullscreen': '全屏查看图表',
'mermaid.viewerTitle': '图表',
'mermaid.loading': '正在加载图表…',
'mermaid.renderError': '无法渲染图表。',
// Common buttons
'button.cancel': '取消',
'button.save': '保存',
'button.confirm': '确认',
'button.close': '关闭',
'button.dismiss': '忽略',
'button.copy': '复制',
'button.paste': '粘贴',
// New session form
'newSession.title': '创建会话',
'newSession.machine': '机器',
'newSession.directory': '目录',
'newSession.placeholder': '/path/to/project',
'newSession.browse': '浏览',
'newSession.recent': '最近路径',
'newSession.type': '会话类型',
'newSession.type.simple': '简单',
'newSession.type.simple.desc': '直接使用选定的目录',
'newSession.type.worktree': '工作树',
'newSession.type.worktree.desc': '在仓库旁创建新工作树(Cursor 使用原生 ~/.cursor/worktrees',
'newSession.type.worktree.placeholder': 'feature-x (默认 1228-xxxx)',
'newSession.agent': '代理',
'newSession.model': '模型',
'newSession.effort': '思考强度',
'newSession.model.optional': '可选',
'newSession.model.loadFailed': '加载模型失败',
'newSession.model.selectVariant': '选择变体',
'newSession.model.cursorUnavailable': '暂无 Cursor 模型列表。请先运行一次 Cursor 会话,或使用 Auto。',
'newSession.opencodeModel.loading': '正在发现 OpenCode 模型…',
'newSession.opencodeModel.loadFailed': '加载 OpenCode 模型失败',
'newSession.opencodeModel.retry': '重试',
'newSession.opencodeModel.empty': '未在此目录发现 OpenCode 模型',
'newSession.opencodeModel.default': '默认',
'newSession.reasoningEffort': '推理强度',
'newSession.collaborationMode': '协作模式',
'newSession.fastMode': '快速模式',
'newSession.yolo': 'YOLO 模式',
'newSession.yolo.title': '跳过审批和沙箱',
'newSession.yolo.desc': '启动时使用危险的代理标志。',
'newSession.grokAutoUnavailable': '不可用',
'newSession.grokAutoUnavailableDesc': 'Grok 尚未为此账号或 CLI 版本启用自动权限模式。',
'newSession.create': '创建',
'newSession.creating': '创建中…',
'session.directoryMissingSimple': '目录不存在,创建会话时将自动创建。',
'session.directoryMissingSimpleConfirm': '目录不存在。再次点击按钮将自动新建该目录。',
'session.directoryMissingWorktree': 'worktree 需要已存在的仓库目录。',
'session.codexModelsLoadFailed': '加载 Codex 模型失败',
'session.createAndCreateDirectory': '创建并新建目录',
// Machine
'machine.unknown': '未知平台',
'machine.os.windows': 'Windows',
'machine.os.linux': 'Linux',
'machine.os.macos': 'macOS',
'machine.os.unknown': '未知系统',
'machine.header.sessionCount': '{n} 个会话',
'machine.health.tooltip.title': '机器负载',
'machine.health.status.healthy': '健康 — 还可运行更多代理',
'machine.health.status.elevated': '偏高 — 新代理可能变慢',
'machine.health.status.high': '高压 — 避免在此继续启动',
'machine.health.status.unknown': '指标不可用',
'machine.health.metric.cpu': 'CPU占用',
'machine.health.metric.ram': '内存占用',
'machine.health.tooltip.load': '运行队列 (1 分钟): {value}',
'machine.health.tooltip.loadShort': '负载 (1 分钟)',
'machine.health.tooltip.uptimeShort': '运行时间',
'machine.health.uptimeCompact': '已运行 {value}',
'machine.health.tooltip.hint': '约每 20 秒由该机器上的 runner 更新',
'machine.health.aria.cpu': 'CPU {n}%',
'machine.health.aria.ram': '内存 {n}%',
'machine.health.aria.unknown': '机器健康数据不可用',
// Chat
'chat.placeholder': '输入消息…',
'chat.send': '发送',
'chat.abort': '中止',
'chat.settings': '设置',
'chat.terminal': '终端',
'chat.switchRemote': '切换到远程模式',
'chat.sendError.fallback': '消息未能发送。请修改后重试。',
'chat.sendError.sessionInactive': '此会话已归档。请先重新打开再发送消息。',
'chat.sendError.sessionInactive.action': '重新打开',
// Codex review
'codexReview.title': 'Codex review',
'codexReview.findings': '{count} 条发现',
'codexReview.confidence': '置信度 {value}',
'codexReview.location.missing': '无位置',
// Terminal
'terminal.commandName': '命令',
'terminal.commandMessage': '命令消息',
'terminal.commandArgs': '命令参数',
'terminal.stdout': '标准输出',
'terminal.stderr': '标准错误',
'terminal.unsupportedWindows': '此主机暂不支持远程终端。',
'terminal.paste.fallbackTitle': '粘贴输入',
'terminal.paste.fallbackDescription': '无法读取剪贴板,请在下方粘贴文本。',
'terminal.paste.placeholder': '在此粘贴终端输入…',
// Code block
'code.copy': '复制',
'code.truncated': '预览已截断 — 打开详情查看完整输出',
'code.wrap.enable': '开启自动换行',
'code.wrap.disable': '关闭自动换行',
// Diff view
'diff.title': '差异',
'diff.view': '查看',
// Files page
'files.page.title': '文件',
'files.page.refresh': '刷新',
'files.page.refreshFilesystem': '刷新文件系统视图',
'files.page.searchPlaceholder': '搜索文件',
'files.projectRoot': '项目根目录',
'files.branch.detached': '游离 HEAD',
'files.branch.summary': '{staged} 个已暂存,{unstaged} 个未暂存',
'files.tab.changes': '变更',
'files.tab.directories': '目录',
'files.search.empty': '没有匹配搜索的文件。',
'files.search.error.failed': '搜索文件失败。',
'files.search.error.failedWithDetail': '搜索文件失败:{error}',
'files.changes.section.staged': '已暂存变更({n}',
'files.changes.section.unstaged': '未暂存变更({n}',
'files.changes.empty.unavailable': 'Git 状态不可用。请使用“目录”浏览全部文件,或直接搜索。',
'files.changes.empty.none': '未检测到变更。请使用“目录”浏览全部文件,或直接搜索。',
'files.changes.error.gitStatusUnavailable': 'Git 状态不可用。',
'files.changes.error.gitStatusUnavailableWithDetail': 'Git 状态不可用:{error}',
'files.changes.error.unstagedDiffUnavailableWithDetail': '未暂存 Diff 不可用:{error}',
'files.changes.error.stagedDiffUnavailableWithDetail': '已暂存 Diff 不可用:{error}',
'files.directories.empty': '空目录。',
'files.directories.error.listFailed': '加载目录失败。',
'files.directories.error.listFailedWithDetail': '加载目录失败:{error}',
'files.directories.download': '下载文件',
'files.directories.downloadNamed': '下载 {name}',
'files.directories.download.error.title': '下载失败',
'files.directories.download.error.default': '文件下载失败。',
'files.sort.title': '文件排序',
'files.sort.by': '排序依据',
'files.sort.name': '名称',
'files.sort.modified': '修改时间',
'files.sort.size': '文件大小',
'files.sort.nameAsc': 'A 到 Z',
'files.sort.nameDesc': 'Z 到 A',
'files.sort.oldest': '最早优先',
'files.sort.newest': '最新优先',
'files.sort.smallest': '最小优先',
'files.sort.largest': '最大优先',
// File page
'file.page.fallbackName': '文件',
'file.page.unknownPath': '未知路径',
'file.page.copyPath': '复制路径',
'file.page.copyContent': '复制文件内容',
'file.page.download': '下载文件',
'file.page.tab.diff': 'Diff',
'file.page.tab.file': '文件',
'file.page.tab.source': '源码',
'file.page.tab.preview': '预览',
'file.page.missingPath': '未提供文件路径。',
'file.page.binary': '该文件看起来是二进制文件,无法显示。',
'file.page.imagePreviewAlt': '{name} 图片预览',
'file.page.empty': '文件为空。',
'file.page.noChanges': '没有可显示的变更。',
'file.error.readFailed': '读取文件失败。',
'file.error.readFailedWithDetail': '读取文件失败:{error}',
'file.error.diffUnavailable': 'Diff 不可用。',
'file.error.diffUnavailableWithDetail': 'Diff 不可用:{error}',
// Tool card
'tool.askQuestion': '其他',
'tool.edit': '编辑',
'tool.multiedit': '多文件编辑',
'tool.write': '写入',
'tool.todo': '任务',
'tool.confirm': '确认',
'tool.deny': '拒绝',
'tool.abort': '中止',
'tool.allow': '允许',
'tool.allowAll': '允许所有编辑',
'tool.denyAll': '拒绝所有编辑',
'tool.approved': '已批准',
'tool.rejected': '已拒绝',
'tool.cancel': '取消',
'tool.exitPlan': '退出计划模式',
'tool.patch': '补丁',
'tool.input': '输入',
'tool.trace': '追踪',
'tool.trace.callsSuffix': '次调用',
'tool.result': '结果',
'tool.duration': '耗时',
'tool.startedAt': '开始',
'tool.completedAt': '结束',
'tool.semanticTitle.readFile': '读取文件',
'tool.semanticTitle.runShell': '运行命令',
'tool.semanticTitle.search': '搜索',
'tool.semanticTitle.openUrl': '打开链接',
'tool.semanticTitle.query': '查询',
'tool.questionsAnswers': '问答',
'tool.submit': '提交',
'tool.submitting': '提交中…',
'tool.prev': '← 上一个',
'tool.next': '下一个 →',
'tool.yes': '是',
'tool.yesForSession': '本会话允许',
'tool.allowForSession': '本会话允许',
'tool.abortLabel': '中止',
'tool.other': '其他',
'tool.otherDescription': '输入您自己的答案',
'tool.question': '问题',
'tool.selectOption': '请至少选择一个选项或输入答案。',
'tool.waitingForApproval': '等待审批…',
'tool.canceled': '已取消',
'tool.approvedForSession': '本会话已批准',
'tool.aborted': '已中止',
'tool.approvedAllowAllEdits': '已批准:允许所有编辑',
'tool.requestFailed': '请求失败',
'tool.askUserQuestion.fallback': 'AskUserQuestion 格式不正确。请输入您的答案:',
'tool.askUserQuestion.placeholder': '输入您的答案…',
'tool.askUserQuestion.otherPlaceholder': '或输入您自己的答案…',
'tool.requestUserInput.textPlaceholder': '输入您的答案…',
'tool.requestUserInput.noteLabel': '补充说明(可选)',
'tool.requestUserInput.notePlaceholder': '添加备注…',
'tool.requestUserInput.popupBlocked': '无法打开登录页面。请允许弹出窗口后重试。',
'toolGroup.title': '工具活动',
'toolGroup.friendly.inspectTarget': '检查 {target}',
'toolGroup.friendly.searchTarget': '搜索“{target}”',
'toolGroup.friendly.runTarget': '运行 {target}',
'toolGroup.friendly.editTarget': '编辑 {target}',
'toolGroup.primary.fileTargets': '{target} 等 +{n}',
'toolGroup.primary.commandTargets': '{target} 等 +{n}',
'toolGroup.primary.searchTargets': '{target} 等 +{n}',
'toolGroup.primary.urlTargets': '{target} 等 +{n}',
'toolGroup.primary.otherTargets': '{target} 等 +{n}',
'toolGroup.summary.read': '读取 {n}',
'toolGroup.summary.mutation': '编辑 {n}',
'toolGroup.summary.command': '执行 {n}',
'toolGroup.summary.search': '搜索 {n}',
'toolGroup.summary.web': '访问 {n}',
'toolGroup.summary.other': '工具 {n}',
'toolGroup.friendly.inspectFiles': '检查项目文件',
'toolGroup.friendly.searchContent': '搜索项目内容',
'toolGroup.friendly.runCommands': '执行项目命令',
'toolGroup.friendly.editFiles': '修改项目文件',
'toolGroup.friendly.openWeb': '浏览网页内容',
'toolGroup.friendly.genericCommand': '执行命令',
'toolGroup.friendly.genericTool': '使用工具',
'toolGroup.badge.running': '运行中 {n}',
'toolGroup.badge.pending': '等待中 {n}',
'toolGroup.badge.error': '错误 {n}',
'toolGroup.badge.fileTargets': '{n} 文件',
'toolGroup.toolCount': '{n} 次操作',
'toolGroup.loadingOlderHistory': '正在补加载更早的工具活动…',
'toolGroup.historyUnavailable': '更早的工具活动已不可用。',
'toolGroup.rowStatus.running': '运行中',
'toolGroup.rowStatus.pending': '等待中',
'toolGroup.rowStatus.error': '错误',
'toolGroup.codex.exploring': '正在探索',
'toolGroup.codex.explored': '已探索',
'toolGroup.codex.read': '读取',
'toolGroup.codex.list': '列出',
'toolGroup.codex.search': '搜索',
'toolGroup.codex.searchIn': '在 {path} 中搜索 {query}',
// Composer buttons
'composer.settings': '设置',
'composer.terminal': '终端',
'composer.abort': '中止',
'composer.switchRemote': '切换到远程模式',
'composer.attach': '添加文件',
'composer.dropToAttach': '松开以添加文件',
'composer.send': '发送',
'composer.stop': '停止',
'composer.voice': '语音助手',
'composer.dictate': '语音输入',
'composer.scheduleSend': '定时发送',
'composer.scheduleRelativeTab': '相对时间',
'composer.scheduleSpecificTab': '指定时间',
'composer.scheduleSpecificHint': '最多 7 天。需 Hub 运行;CLI 下次连接时会接收消息。',
'composer.scheduleErrorPast': '发送时间必须在未来。',
'composer.scheduleErrorTooFar': '最多只能定时 7 天。',
'queuedMessages.scheduledFor': '定时发送: {time}',
'queuedMessages.editAlreadyInvoked': '消息已发送,无法编辑',
// Scratchlist (per-session workbench, issue #11)
'scratchlist.title': '草稿夹',
'scratchlist.heldLabel': '暂存 · 未发送',
'scratchlist.empty': '空',
'scratchlist.count.one': '1 条',
'scratchlist.count.other': '{n} 条',
'scratchlist.attachmentOnly': '(附件)',
'scratchlist.emptyHint': '在此暂存笔记、草稿或想法。需点击发送或编辑后才会真正发出。',
'scratchlist.drawerHint': '在下方输入 — 发送会把内容存入此暂存清单,而不是发到对话。再次点击便签图标可退出。',
'scratchlist.toggleAriaLabel': '暂存清单抽屉',
'scratchlist.toggleTooltip': '暂存清单 — 暂存笔记与草稿(Ctrl/Cmd+Shift+S',
'scratchlist.sendToScratchlist': '存入暂存清单',
'scratchlist.fueTitle': '新功能:暂存清单',
'scratchlist.fueBody': '在此暂存笔记和草稿,不会被发送。暂存模式下发送按钮会显示琥珀色;再次点击图标(或 Ctrl/Cmd+Shift+S)可退出。',
'scratchlist.addPlaceholder': '笔记、草稿或想法 — 回车键添加',
'scratchlist.addAriaLabel': '添加草稿夹条目',
'scratchlist.add': '添加',
'scratchlist.atCap': '草稿夹已满({n} 条)。请先删除旧条目。',
'scratchlist.confirmDelete': '删除该草稿条目?此操作不可撤销。',
'scratchlist.listAriaLabel': '草稿夹条目',
'scratchlist.action.moveUp': '上移',
'scratchlist.action.moveDown': '下移',
'scratchlist.action.promoteToComposer': '复制到输入框',
'scratchlist.action.promoteToQueue': '加入发送队列',
'scratchlist.action.copy': '复制文字到剪贴板(不含图片)',
'scratchlist.action.copied': '已复制!',
'scratchlist.action.delete': '删除条目',
'scratchlist.entry.lastSaved': '保存于 {time}',
'scratchlist.entry.lastSavedAriaLabel': '条目保存于 {time}',
'scratchlist.migrationBanner.title': '草稿清单现已跨设备同步',
'scratchlist.migrationBanner.body': '您现有的笔记已复制到 hub - 没有丢失任何内容。从现在开始,在此会话中的编辑会在您使用的每台设备上显示。',
'scratchlist.migrationBanner.dismiss': '知道了',
'fue.newFeatureDot': '新功能可用',
'fue.gotIt': '知道了',
'fue.closeAriaLabel': '关闭说明',
'composer.codexSlashUnsupported.title': '无法执行 Codex 命令',
'composer.codexSlashUnsupported.body': 'HAPI 远程模式暂不支持 {command} 这类 Codex 内建 slash command,请改用自然语言,或在本地 Codex TUI 中执行。',
// Voice assistant
'voice.connecting': '连接中...',
'voice.active': '活跃',
'voice.muted': '已静音',
'voice.error': '错误',
'voice.mute': '静音',
'voice.unmute': '取消静音',
'voice.end': '结束',
'voice.error.micPermission': '麦克风权限被拒绝',
'voice.error.network': '网络错误',
'voice.error.notInitialized': '语音会话未初始化',
'voice.error.startFailed': '启动语音会话失败',
'voice.error.notAllowed': '语音功能不可用',
'voice.error.connection': '连接错误',
'voice.dismiss': '关闭',
// Banners
'offline.title': '离线',
'offline.message': '您当前处于离线状态。某些功能可能受限。',
'syncing.title': '同步中…',
'syncing.message': '正在同步您的数据。',
'reconnecting.message': '正在重新连接...',
'reconnecting.reason.error': '流连接错误',
'reconnecting.reason.closed': '流连接已关闭',
'reconnecting.reason.heartbeatTimeout': '心跳超时',
'reconnecting.reason.visibilityRecovery': '后台恢复中',
'pwa.update.title': '新版本可用',
'pwa.update.body': '重新加载以获取最新版 HAPI',
'pwa.update.reload': '重新加载',
'pwa.update.whyToggle': '为什么不能关闭此提示?',
'pwa.update.whyBody': '当你可能有正在运行的智能体、待处理的权限请求或未发送的消息时,HAPI 不会自动重新加载标签页。旧版网页与当前服务器一起运行可能导致同步错误和操作失败。此横幅会一直保持显示,直到你重新加载,以免你在不知情的情况下停留在旧版本 — 但何时点击「重新加载」由你决定,可以先完成手头的工作。',
// Send blocked
'send.blocked.title': '无法发送消息',
'send.blocked.noConnection': '未连接到服务器',
'resume.failed.title': '恢复会话失败',
'toast.ready.title': '等待输入',
'toast.ready.body': '{agent} 正在 {session} 等待你的输入',
'toast.permission.title': '权限请求',
'toast.task.completed': '任务完成',
'toast.task.failed': '任务失败',
// Install prompt
'install.title': '安装 HAPI',
'install.description': '将 HAPI 添加到主屏幕以便快速访问。',
'install.button': '安装',
// Language switcher
'language.title': '语言',
'language.english': 'English',
'language.chinese': '简体中文',
// Settings page
'common.back': '返回',
'settings.title': '设置',
'settings.hub.description': '选择一个分类,按你的工作方式调整 HAPI。',
'settings.hub.voice.summary': '声音、语言和行为',
'settings.general.title': '通用',
'settings.storage.title': '存储空间',
'settings.storage.summary': 'Hub 数据库用量',
'settings.storage.description': 'Hub SQLite 数据库当前占用的磁盘空间。',
'settings.storage.loading': '正在加载存储用量…',
'settings.storage.error': '无法加载存储用量',
'settings.storage.total': '总计',
'settings.storage.database': '数据库',
'settings.storage.wal': '预写日志',
'settings.storage.shm': '共享内存',
'settings.storage.path': '路径',
'settings.storage.refresh': '刷新',
'settings.storage.refreshing': '正在刷新…',
'settings.general.description': '语言、伴侣应用配对和通用应用偏好。',
'settings.language.title': '语言',
'settings.language.label': '语言',
'settings.display.title': '显示',
'settings.display.description': '外观、字体和会话列表偏好。',
'settings.display.typography': '字体',
'settings.display.sessions': '会话列表',
'settings.display.appearance': '外观',
'settings.display.appearanceMode': '显示模式',
'settings.display.appearance.system': '跟随系统',
'settings.display.appearance.dark': '深色',
'settings.display.appearance.oled': 'OLED 纯黑',
'settings.display.appearance.light': '浅色',
'settings.display.colorTheme': '颜色主题',
'settings.display.colorTheme.default': '默认',
'settings.display.colorTheme.notion': 'Notion',
'settings.display.colorTheme.one': 'One',
'settings.display.colorTheme.proof': 'Proof',
'settings.display.colorTheme.raycast': 'Raycast',
'settings.display.colorTheme.rosePine': 'Rose Pine',
'settings.display.colorTheme.solarized': 'Solarized',
'settings.display.colorTheme.vercel': 'Vercel',
'settings.display.colorTheme.vsCodePlus': 'VS Code Plus',
'settings.display.colorTheme.xcode': 'Xcode',
'settings.display.colorTheme.linear': 'Linear',
'settings.display.colorTheme.lobster': 'Lobster',
'settings.display.colorTheme.material': 'Material',
'settings.display.colorTheme.matrix': 'Matrix',
'settings.display.colorTheme.monokai': 'Monokai',
'settings.display.colorTheme.nightOwl': 'Night Owl',
'settings.display.colorTheme.nord': 'Nord',
'settings.display.themeColors.title': '自定义配色',
'settings.display.themeColors.description': '应用于当前外观。切换外观可分别自定义每种配色。',
'settings.display.themeColors.reset': '重置',
'settings.display.themeColors.resetAll': '全部重置',
'settings.display.themeColors.expand': '自定义',
'settings.display.themeColors.key.background': '背景',
'settings.display.themeColors.key.surface': '卡片与表面',
'settings.display.themeColors.key.text': '文字',
'settings.display.themeColors.key.hint': '次要文字',
'settings.display.themeColors.key.accent': '强调与链接',
'settings.display.themeColors.key.border': '边框',
'settings.display.themeColors.key.userBubble': '你的消息气泡',
'settings.display.fontSize': '字体大小',
'settings.display.terminalFontSize': '终端字体大小',
'settings.display.sessionPreviewLimit': '会话折叠阈值',
'settings.display.sessionPreviewLimit.decrease': '减少折叠前显示的会话数',
'settings.display.sessionPreviewLimit.increase': '增加折叠前显示的会话数',
'settings.display.activeSessionsOnly': '仅显示活跃会话',
'settings.display.activeSessionsOnly.desc': '在侧边栏隐藏非活跃会话;当前打开的会话仍会保留显示。',
'settings.display.sessionListStatus': '会话列表状态',
'settings.display.sessionListStatus.standard': '标准',
'settings.display.sessionListStatus.detailed': '详细',
'settings.display.sessionListStatus.detailedDescription': '显示会话停止的原因:权限、输入、后台任务、新活动或定时消息(时钟图标)。',
'settings.display.sessionHeader': '会话顶部信息',
'settings.display.sessionHeader.description': '选择在会话标题下方显示的信息。移动端显示 Agent 类型及优先级最高的一个可用信息。',
'settings.display.sessionHeader.showLabels': '显示字段标题',
'settings.display.sessionHeader.agent': 'Agent 类型',
'settings.display.sessionHeader.model': '模型',
'settings.display.sessionHeader.reasoning': '推理强度',
'settings.display.sessionHeader.fastMode': '快速模式',
'settings.display.sessionHeader.machine': '机器',
'settings.display.sessionHeader.lastActive': '活跃时间',
'settings.display.sessionHeader.createdAt': '创建时间',
'settings.display.sessionHeader.updatedAt': '更新时间',
'settings.display.sessionHeader.worktree': '工作树分支',
'session.header.createdAt': '创建',
'session.header.updatedAt': '更新',
'settings.chat.title': '聊天',
'settings.chat.description': '消息输入、工具卡片和对话颜色。',
'settings.chat.input': '输入',
'settings.chat.tools': '工具卡片',
'settings.chat.colors': '对话颜色',
'settings.chat.enterBehavior': '回车键行为',
'settings.chat.enterBehavior.send': '发送消息',
'settings.chat.enterBehavior.newline': '插入换行',
'settings.chat.terminalToolDisplay': '终端工具卡片',
'settings.chat.terminalToolDisplay.compact': '简洁(仅命令)',
'settings.chat.terminalToolDisplay.detailed': '详细(显示输出预览)',
'settings.chat.groupedToolBackground': '聚合 Tool Use 背景',
'settings.chat.userMessageBackground': '用户消息背景',
'settings.chat.surfaceColor.default': '默认颜色',
'settings.chat.surfaceColor.softBlue': '柔和蓝',
'settings.chat.surfaceColor.softGreen': '柔和绿',
'settings.chat.surfaceColor.softYellow': '柔和黄',
'settings.chat.surfaceColor.custom': '自定义颜色',
'settings.chat.composerToolbar.title': '输入栏工具自定义布局',
'settings.chat.composerToolbar.description': '设置消息输入框底部工具的排列方式。',
'settings.chat.composerToolbar.layout': '对齐方式',
'settings.chat.composerToolbar.order': '工具顺序',
'settings.chat.composerToolbar.hidden': '隐藏工具',
'settings.chat.composerToolbar.emptyHidden': '将工具拖到这里隐藏',
'settings.chat.composerToolbar.hide': '隐藏',
'settings.chat.composerToolbar.show': '显示',
'settings.chat.composerToolbar.layout.left': '左对齐',
'settings.chat.composerToolbar.layout.center': '居中',
'settings.chat.composerToolbar.layout.right': '右对齐',
'settings.chat.composerToolbar.layout.split': '左右分组',
'settings.chat.composerToolbar.dragHint': '拖动操作项可调整顺序;左右分组布局下也可在两组之间拖动。',
'settings.chat.composerToolbar.previewHint': '直接拖动下方的实际工具图标调整顺序,或拖到隐藏工具;预览会立即更新,鼠标悬停可查看功能名称。',
'settings.chat.composerToolbar.reset': '恢复默认',
'settings.chat.composerToolbar.leftGroup': '左侧分组',
'settings.chat.composerToolbar.rightGroup': '右侧分组',
'settings.chat.composerToolbar.emptyGroup': '将操作拖到这里',
'settings.chat.composerToolbar.moveLeft': '移至左侧分组',
'settings.chat.composerToolbar.moveRight': '移至右侧分组',
'settings.chat.composerToolbar.moveEarlier': '向前移动',
'settings.chat.composerToolbar.moveLater': '向后移动',
'settings.chat.composerToolbar.item.attachment': '添加附件',
'settings.chat.composerToolbar.item.settings': '会话设置',
'settings.chat.composerToolbar.item.piModel': 'Pi 模型',
'settings.chat.composerToolbar.item.piThinking': 'Pi 思考等级',
'settings.chat.composerToolbar.item.terminal': '终端',
'settings.chat.composerToolbar.item.abort': '中止',
'settings.chat.composerToolbar.item.switch': '切换到远程模式',
'settings.chat.composerToolbar.item.voiceMic': '语音麦克风',
'settings.chat.composerToolbar.item.scratchlist': '暂存清单',
'settings.chat.composerToolbar.item.schedule': '定时发送',
'settings.voice.title': '语音',
'settings.voice.description': '选择语音输入或完整语音助手。',
'settings.voice.inputMode.title': '语音模式',
'settings.voice.inputMode.hint': '语音输入只会把文字插入编辑框,不会自动发送。',
'settings.voice.inputMode.assistant': '语音助手',
'settings.voice.inputMode.assistant.hint': '双向语音对话',
'settings.voice.inputMode.dictation': '语音输入',
'settings.voice.inputMode.dictation.hint': '只做语音转文字',
'settings.voice.transcriptionProvider': '转录提供商',
'settings.voice.noTranscriptionProvider': 'Hub 尚未配置转录提供商。',
'settings.voice.transcriptionMode': '转录模式',
'settings.voice.transcriptionMode.standard': '标准',
'settings.voice.transcriptionMode.standard.hint': '录音结束后转录(默认)',
'settings.voice.transcriptionMode.realtime': '实时',
'settings.voice.transcriptionMode.realtime.hint': '边说边插入文字',
'settings.voice.voices.description': '选择当前后端使用的声音。',
'settings.voice.sounds.title': '声音效果',
'settings.voice.responds.title': '对话风格',
'settings.voice.connection.title': '连接与提供商',
'settings.voice.behaves.title': '对话行为',
'settings.voice.persona.title': '角色与指令',
'settings.voice.advanced.section.title': '高级',
'settings.voice.responseLength.label': '回复长度',
'settings.voice.responseLength.brief': '简短',
'settings.voice.responseLength.balanced': '适中',
'settings.voice.responseLength.detailed': '详细',
'settings.voice.responseLength.brief.hint': '回复控制在1-2句话以内。',
'settings.voice.responseLength.balanced.hint': '默认——助手根据情境判断回复长度。',
'settings.voice.responseLength.detailed.hint': '需要时给出详细完整的回答。',
'settings.voice.opening.label': '开场方式',
'settings.voice.opening.greet': '打个招呼',
'settings.voice.opening.brief': '简报状态',
'settings.voice.opening.greet.hint': '助手先问候您,然后等待您开口。',
'settings.voice.opening.brief.hint': '连接时助手汇报当前代理活动。',
'settings.voice.group.label': '语音设置',
'settings.voice.group.hint': '选项取决于所选语音或转录提供商。',
'settings.voice.backend': '语音后端',
'settings.voice.language': '语音语言',
'settings.voice.autoDetect': '自动检测',
'settings.voice.voice': '声音',
'settings.voice.voiceDefault': '默认',
'settings.voice.advanced.title': '高级语音设置',
'settings.voice.advanced.hint': '身份、性格、平台规则、滑块。默认即可,需调音时再展开。',
'settings.voice.advanced.customizedBadge': '已自定义',
'settings.voice.fixtures.title': '平台规则(只读)',
'settings.voice.fixtures.hint': '随应用发布:工具、路由、语音输出规则。升级 HAPI 时更新,此处不可编辑。',
'settings.voice.identity.title': '身份与品牌',
'settings.voice.identity.hint': '语音助手是谁。HAPI 是应用本身;可在此改名或换人设。提供商护栏会单独附加。',
'settings.voice.identity.reset': '恢复默认身份',
'settings.voice.identity.default': '内置默认身份',
'settings.voice.identity.customized': '已自定义身份',
'settings.voice.character.promptTitle': '性格与表达',
'settings.voice.character.promptHint': '语气与风格。性格为空时会合并预设表达文案。运行时与平台规则一起组成完整提示(所有语音后端)。',
'settings.voice.character.reset': '恢复默认性格',
'settings.voice.character.appendPreset': '追加预设表达文案',
'settings.voice.layers.resetAll': '恢复身份与性格',
'settings.voice.layers.composedNote': '运行时提示 = 平台规则 + 身份 + 性格(所有后端)。',
'settings.voice.wireBudget.elevenlabs': 'ElevenLabs 在连接时发送合成指令;会话历史先握手再流式推送。',
'settings.voice.wireBudget.gemini': 'Gemini Live 通过 hub 代理使用相同合成指令。',
'settings.voice.wireBudget.qwen': 'Qwen Realtime 在 session.update 中使用相同合成指令。',
'settings.voice.wireBudget.storage': '本地存储上限(字符):',
'settings.voice.wireBudget.elevenlabsLimits': '传输上限:每条 WebRTC 消息约 {msg} B;合成提示约 {prompt} B。',
'settings.voice.wireBudget.promptTruncated': '合成提示已缩短以符合 ElevenLabs 传输上限。请精简身份/性格,否则连接时可能再次截断。',
'settings.voice.wireBudget.composedSize': '上次合成提示大小',
'settings.voice.contextNotice': '上次语音会话',
'settings.voice.character.title': '说话风格预设',
'settings.voice.character.presetSlidersHint': '预设调整 ElevenLabs TTS 滑块,并可选择合并到性格层。',
'settings.voice.character.preset.label': '预设',
'settings.voice.character.preset.balanced': '均衡',
'settings.voice.character.preset.balancedHint': '温暖专注,适合日常任务。',
'settings.voice.character.preset.warm': '温暖活泼',
'settings.voice.character.preset.warmHint': '更有表现力;ElevenLabs 可用音频标签。',
'settings.voice.character.preset.calm': '沉稳',
'settings.voice.character.preset.calmHint': '慢而稳,适合长会话或夜间。',
'settings.voice.character.preset.direct': '干脆',
'settings.voice.character.preset.directHint': '简短高效,少寒暄。',
'settings.voice.character.preset.custom': '自定义',
'settings.voice.character.preset.customHint': '滑块与上方系统提示由你控制。',
'settings.voice.tuning.title': '音色与节奏',
'settings.voice.tuning.elevenlabs': 'ElevenLabs',
'settings.voice.tuning.gemini': 'Gemini Live',
'settings.voice.tuning.stability': '稳定性',
'settings.voice.tuning.stabilityHint': '越低越有变化;越高越平稳。',
'settings.voice.tuning.expressiveness': '表现力',
'settings.voice.tuning.expressivenessHint': '风格夸张度(ElevenLabs style)。',
'settings.voice.tuning.speakingRate': '语速',
'settings.voice.tuning.speakingRateHint': '0.71.2×(ElevenLabs API)。',
'settings.voice.tuning.similarity': '相似度增强',
'settings.voice.tuning.similarityHint': '更接近训练音色。',
'settings.voice.tuning.speakerBoost': '说话人增强',
'settings.voice.tuning.affectiveDialog': '情感对话',
'settings.voice.tuning.affectiveDialogHint': '根据你的语气调整回应(Gemini v1alpha)。',
'settings.voice.tuning.qwenHint': 'Qwen 无 TTS 滑块 — 请用角色预设与备注;情绪会从你的语音自适应。',
'settings.voice.tuning.selectBackend': '选择语音后端后显示对应滑块。',
'settings.voice.preview.elevenlabsOnly': '仅 ElevenLabs 支持试听',
'settings.voice.preview.unavailable': '未配置 ElevenLabs API 密钥时无法试听',
'settings.voice.preview.play': '预览声音',
'settings.voice.preview.stop': '停止预览',
'settings.voice.staticCatalogHint': '展开列表可查看声音特点说明;仅 ElevenLabs 支持试听。',
'settings.voice.session.label': '会话行为',
'settings.voice.proactive': '以摘要开始语音会话',
'settings.voice.proactive.description': '开启后,启动语音会话时将朗读当前代理活动的摘要。关闭后,助手向您打招呼并等待您先开口。',
'settings.companion.title': '伴侣应用',
'settings.companion.noToken': '配对需要原始访问令牌(CLI_API_TOKEN)。您似乎通过 Telegram 或其他未保存令牌的流程登录 — 请在伴侣应用中手动粘贴令牌。',
'settings.companion.description': '在 Android 手机或 Wear OS 上的 HAPI 伴侣应用中扫描,以绑定此 Hub。配对码即您的访问令牌 — 请像密码一样妥善保管。',
'settings.companion.showQr': '显示配对二维码',
'settings.companion.qrAriaLabel': '伴侣应用配对二维码',
'settings.companion.copyLink': '复制链接',
'settings.companion.copied': '已复制!',
'settings.companion.hide': '隐藏',
'settings.machines.title': '设备',
'settings.machines.description': '给设备起自己的名字。这里只列出当前在线的设备。',
'settings.machines.section': '我的设备',
'settings.machines.rename': '重命名 {name}',
'settings.machines.namePlaceholder': '使用主机名',
'settings.machines.empty': '没有在线设备。',
'settings.machines.error': '重命名失败。',
'settings.hub.machines.summary': '给设备起自定义名字',
'settings.about.title': '关于',
'settings.about.description': 'HAPI 链接和版本信息。',
'settings.about.website': '官方网站',
'settings.about.appVersion': '应用版本',
'settings.about.protocolVersion': '协议版本',
// Browse / Workspace
'browse.title': '浏览',
'browse.goUp': '返回上层',
'browse.empty': '未找到子目录',
'browse.refresh': '刷新',
'browse.startSession': '启动会话',
'browse.nav': '浏览',
'browse.noRootTitle': '未启用 workspace 浏览',
'browse.noRootHint': '浏览功能是可选的。带一个或多个 --workspace-root 参数重启 runner,即可启用文件树浏览和受限的会话启动。',
'browse.noRootFooter': '你仍然可以在「新建会话」页面直接创建会话。',
'browse.noMachinesConnected': '没有已连接的 CLI。在某台机器上运行 `hapi runner start --workspace-root /path/a --workspace-root /path/b` 来开始。',
// Misc
'misc.noMachines': '无可用机器',
'misc.machine': '机器',
'misc.collaborationMode': '协作模式',
'misc.permissionMode': '权限模式',
'misc.model': '模型',
'misc.reasoningEffort': '推理强度',
'misc.effort': '思考强度',
'misc.fastMode': '快速模式',
'misc.fastModeStandard': '标准',
'misc.fastModeFast': '快速',
'misc.variant': '变体',
'misc.loading': '加载中…',
'misc.newMessage': '{n} 条新消息',
'misc.loadingMessages': '加载消息中…',
'misc.pullToLoadOlder': '继续下拉加载更早消息',
'misc.releaseToLoadOlder': '松开加载',
'misc.typeMessage': "输入 'continue' 继续...",
'misc.typeAMessage': '输入消息...',
'misc.offline': 'offline',
'misc.permissionRequired': '需要权限',
'misc.online': 'online',
'misc.contextDetails': '上下文详情',
'misc.contextCache': '缓存:{value}',
'misc.contextUsed': '使用:{value}{percent}%',
'misc.contextUsedTokens': '使用:{value}',
'misc.contextRemaining': '剩余:{value}{percent}%',
// Web Share Target 分享面板
'share.title': '分享到 HAPI',
'share.subtitle': '选择要附加到的会话。',
'share.recentSessions': '最近的活跃会话',
'share.newSession': '新建会话',
'share.discard': '放弃',
'share.loading': '正在加载分享内容…',
'share.notFound.title': '未找到分享内容',
'share.notFound.body': '此分享链接已过期或被直接打开而没有传输。',
'share.error.ingest': '无法读取分享内容,请从源应用重试。',
'share.error.noId': '未提供分享 ID,请从系统分享面板打开此页面。',
'share.backToSessions': '返回会话列表',
'share.preview.text': '分享文本',
'share.preview.empty': '(空分享)',
'share.preview.files': '{n} 个文件',
'share.noActiveSessions': '没有活跃会话。请在下方选择"新建会话"。',
'sessions.refresh.pull': '下拉即可刷新',
'sessions.refresh.release': '释放即可刷新',
'sessions.refresh.refreshing': '正在刷新…',
'sessions.refresh.failed.title': '刷新失败',
'codexSync.newSessionInline.title': '导入 Codex 历史',
'codexSync.newSessionInline.description': '可选:先单选一个本机 Codex 会话,再选择模型/思考强度,点创建时导入。',
'codexSync.newSessionInline.clear': '清除已选历史',
'codexSync.newSessionInline.choose': '选择历史',
'codexSync.confirm.search': '搜索',
'codexSync.confirm.searchPlaceholder': '搜索标题、消息、目录、会话 ID',
'codexSync.confirm.useSelected': '使用选中会话',
'codexSync.confirm.imported': '已导入',
'codexSync.confirm.original': '原会话',
'codexSync.confirm.fork': 'fork会话',
'codexSync.confirm.archiveAction': '在 Codex 侧归档',
'session.action.syncCodexDisabledActive': '当前会话正在运行,停止或归档后才能同步 Codex 历史。',
'codexSync.manual.success.noNewMessages': '没有新的 Codex 消息。',
'session.status.title': '会话状态',
'session.status.goal': '目标',
'session.status.tasks': '任务',
'session.status.subagents': '子代理',
'session.status.terminals': '后台终端',
'session.status.terminalsUnavailable': '{count} 个终端运行中 · 无法确定具体命令',
'session.status.terminalsPossible': '可能的命令',
'session.status.goal.active': '进行中',
'session.status.goal.paused': '已暂停',
'session.status.goal.budgetLimited': '已受限',
'session.status.goal.complete': '已完成',
'session.status.subagent.running': '运行中',
'session.status.subagent.waiting': '等待中',
'session.status.subagent.error': '错误',
} as const