diff --git a/docs/qa-evidence/zh-cn-i18n/after.png b/docs/qa-evidence/zh-cn-i18n/after.png new file mode 100644 index 0000000000..a84d224c5f Binary files /dev/null and b/docs/qa-evidence/zh-cn-i18n/after.png differ diff --git a/docs/qa-evidence/zh-cn-i18n/before.png b/docs/qa-evidence/zh-cn-i18n/before.png new file mode 100644 index 0000000000..4c11f7cc82 Binary files /dev/null and b/docs/qa-evidence/zh-cn-i18n/before.png differ diff --git a/packages/app/e2e/browser/settings-i18n.spec.ts b/packages/app/e2e/browser/settings-i18n.spec.ts index ab368c3d9a..e588b12a4c 100644 --- a/packages/app/e2e/browser/settings-i18n.spec.ts +++ b/packages/app/e2e/browser/settings-i18n.spec.ts @@ -15,6 +15,13 @@ test("Settings language selector switches General labels", async ({ page }) => { await page.getByRole("menuitem", { name: "简体中文 - Simplified Chinese", exact: true }).click(); await expect(page.getByText("默认发送", { exact: true }).first()).toBeVisible(); + await expect(page.getByText(/智能体运行时,Enter/).first()).toBeVisible(); + const screenshotPath = test.info().outputPath("simplified-chinese-settings.png"); + await page.screenshot({ path: screenshotPath, fullPage: true }); + await test.info().attach("simplified-chinese-settings", { + path: screenshotPath, + contentType: "image/png", + }); await page.getByRole("button", { name: "简体中文", exact: true }).click(); await page.getByRole("menuitem", { name: "English - 英语", exact: true }).click(); diff --git a/packages/app/src/i18n/resources.test.ts b/packages/app/src/i18n/resources.test.ts index 46b3428026..4e00a7ccb5 100644 --- a/packages/app/src/i18n/resources.test.ts +++ b/packages/app/src/i18n/resources.test.ts @@ -129,6 +129,32 @@ describe("translation resources", () => { expect(countMatchingEnglishStrings(zhCN)).toBeLessThan(maxFallbackStrings); }); + it("limits Chinese English matches to names, identifiers, and command examples", () => { + const englishStrings = flattenStrings(en); + const chineseStrings = flattenStrings(zhCN); + const matchingKeys = Object.entries(englishStrings) + .filter(([key, value]) => chineseStrings[key] === value) + .map(([key]) => key) + .sort(); + + expect(matchingKeys).toEqual( + [ + "sidebar.help.discord", + "sidebar.help.appName", + "desktop.daemon.status.pid", + "settings.general.language.options.en", + "settings.appearance.theme.options.zinc", + "settings.appearance.theme.options.midnight", + "settings.appearance.theme.options.claude", + "settings.appearance.theme.options.ghostty", + "settings.host.appearance.preview.workspaceName", + "settings.host.terminalProfiles.namePlaceholder", + "settings.host.terminalProfiles.commandPlaceholder", + "settings.host.terminalProfiles.argsPlaceholder", + ].sort(), + ); + }); + it("localizes the pull request empty state in every supported language", () => { for (const resource of [ar, es, fr, ja, ko, ptBR, ru, zhCN]) { expect(resource.panels.pullRequest.emptyTitle).not.toBe(en.panels.pullRequest.emptyTitle); @@ -175,7 +201,7 @@ describe("translation resources", () => { expect(ja.settings.providers.models.many).toBe("{{count}}つのモデル"); expect(ptBR.settings.providers.models.many).toBe("{{count}} modelos"); expect(ru.settings.providers.models.many).toBe("{{count}} моделей"); - expect(zhCN.settings.providers.models.many).toBe("{{count}} 个 Model"); + expect(zhCN.settings.providers.models.many).toBe("{{count}} 个模型"); }); it("preserves reviewed Korean status labels", () => { diff --git a/packages/app/src/i18n/resources/plugin-settings.ts b/packages/app/src/i18n/resources/plugin-settings.ts index 104bf6b1d0..144d35c5b4 100644 --- a/packages/app/src/i18n/resources/plugin-settings.ts +++ b/packages/app/src/i18n/resources/plugin-settings.ts @@ -396,7 +396,15 @@ export const pluginSettings = { }, }, "zh-CN": { - ...shared, + logs: { + action: "日志", + title: "日志:{{id}}", + loading: "正在加载日志…", + refresh: "刷新", + refreshing: "正在刷新…", + errorTitle: "无法加载插件日志", + empty: "暂无插件输出", + }, screens: { open: "打开", offline: "连接到此主机以打开插件设置。", diff --git a/packages/app/src/i18n/resources/zh-CN.ts b/packages/app/src/i18n/resources/zh-CN.ts index d1b5511dd6..ca364718c3 100644 --- a/packages/app/src/i18n/resources/zh-CN.ts +++ b/packages/app/src/i18n/resources/zh-CN.ts @@ -1,4 +1,4 @@ -import { en, type TranslationResources } from "./en"; +import type { TranslationResources } from "./en"; import { pluginSettings } from "./plugin-settings"; export const zhCN: TranslationResources = { @@ -62,9 +62,9 @@ export const zhCN: TranslationResources = { unableToSave: "无法保存", unableToCopy: "无法复制", nameRequired: "名称必填", - daemonUnavailable: "Daemon 不可用", - daemonClientUnavailable: "Daemon client 不可用", - daemonClientDisconnected: "Daemon client 已断开连接", + daemonUnavailable: "守护进程不可用", + daemonClientUnavailable: "守护进程客户端不可用", + daemonClientDisconnected: "守护进程客户端已断开连接", noFileFound: "未找到 {{token}} 对应的文件", unexpectedDictationError: "处理听写时发生意外错误。", }, @@ -83,19 +83,19 @@ export const zhCN: TranslationResources = { close: "关闭菜单", }, commandCenter: { - placeholder: "搜索命令、文件、工作区和 Agent...", + placeholder: "搜索命令、文件、工作区和智能体...", filePlaceholder: "搜索文件...", searchingFiles: "正在搜索文件...", noMatches: "没有匹配项", actions: "操作", files: "文件", workspaces: "工作区", - agents: "Agents", - newAgent: "新建 Agent", + agents: "智能体", + newAgent: "新建智能体", open: "打开{{name}}", openInSidePane: "在侧边面板中打开{{name}}", openInFocusedPane: "在当前窗格中打开{{name}}", - addProject: "添加 project", + addProject: "添加项目", home: "首页", groupByProject: "按项目分组", groupByStatus: "按状态分组", @@ -115,17 +115,17 @@ export const zhCN: TranslationResources = { }, composer: { placeholders: { - desktop: "给 Agent 发消息,标记 @files,或使用 /commands 和 /skills", + desktop: "给智能体发消息,标记 @files,或使用 /commands 和 /skills", mobile: "发消息,@files,/commands", fallback: "输入消息...", - terminal: "Prompt", + terminal: "提示词", }, input: { - accessibilityLabel: "给 Agent 发消息...", - terminalAccessibilityLabel: "Terminal prompt", + accessibilityLabel: "给智能体发消息...", + terminalAccessibilityLabel: "终端提示词", focusHint: "{{shortcut}} 聚焦", addAttachment: "添加附件", - interruptAgent: "中断 Agent", + interruptAgent: "中断智能体", queueMessage: "消息排队", sendAndInterrupt: "发送并中断", sendAndSteer: "发送并引导", @@ -134,8 +134,8 @@ export const zhCN: TranslationResources = { send: "发送", }, cancel: { - cancelingAgent: "正在取消 Agent", - stopAgent: "停止 Agent", + cancelingAgent: "正在取消智能体", + stopAgent: "停止智能体", interrupt: "中断", }, voice: { @@ -148,87 +148,87 @@ export const zhCN: TranslationResources = { unmuteVoice: "取消静音", muteVoice: "静音", dictation: "听写", - interruptBeforeVoice: "启动语音模式前请先中断 Agent", + interruptBeforeVoice: "启动语音模式前请先中断智能体", }, attachments: { addImage: "添加图片", pasteImage: "粘贴图片", - addFile: "Upload file", - addIssueOrPr: "添加 issue 或 PR", - addIssueOrPr_mr: "添加 issue 或 MR", + addFile: "上传文件", + addIssueOrPr: "添加议题或 PR", + addIssueOrPr_mr: "添加议题或 MR", dropImagesHere: "将图片拖放到这里", - dropFilesHere: "Drop files here", + dropFilesHere: "将文件拖到此处", editQueuedMessage: "编辑排队消息", sendQueuedMessageNow: "立即发送排队消息", openImage: "打开图片附件", removeImage: "移除图片附件", - removeFile: "Remove file attachment", + removeFile: "移除文件附件", openGithub: "打开 {{kind}} {{number}}", removeGithub: "移除 {{kind}} {{number}}", element: "元素", openBrowserElement: "打开浏览器元素附件", removeBrowserElement: "移除浏览器元素附件", - openReview: "打开 review 附件", - removeReview: "移除 review 附件", + openReview: "打开审查附件", + removeReview: "移除审查附件", }, errors: { failedToSend: "发送消息失败", - failedToCreateAgent: "创建 Agent 失败", - noHostSelected: "未选择 Host", - initialPromptRequired: "初始 prompt 必填", + failedToCreateAgent: "创建智能体失败", + noHostSelected: "未选择主机", + initialPromptRequired: "初始提示词必填", alreadyLoading: "正在加载", - uploadFailed: "Failed to upload file", + uploadFailed: "上传文件失败", noClipboardImage: "当前剪贴板中没有图片。请尝试通过键盘粘贴。", pasteImageFailed: "无法粘贴图片", - fileTooLarge: "{{fileName}} is too large (max {{size}})", + fileTooLarge: "{{fileName}} 太大(最大 {{size}})", }, clientCommands: { - archiveAgent: "归档当前 Agent", - freshDraft: "归档此 Agent 并开始新的草稿", + archiveAgent: "归档当前智能体", + freshDraft: "归档此智能体并开始新的草稿", }, github: { searching: "正在搜索...", noResults: "没有结果。", - searchPlaceholder: "搜索 issues 和 PRs...", - searchPlaceholder_mr: "搜索 issues 和 MRs...", - title: "附加 issue 或 PR", - title_mr: "附加 issue 或 MR", + searchPlaceholder: "搜索议题和 PR...", + searchPlaceholder_mr: "搜索议题和 MR...", + title: "附加议题或 PR", + title_mr: "附加议题或 MR", }, }, agentControls: { provider: { - fallback: "Provider", - select: "选择 Agent Provider", + fallback: "提供商", + select: "选择智能体提供商", }, thinking: { - title: "Thinking", + title: "思考", unknown: "未知", - extraHigh: "Extra high", - select: "选择 thinking 选项", - selectWithValue: "选择 thinking 选项({{value}})", + extraHigh: "极高", + select: "选择思考选项", + selectWithValue: "选择思考选项({{value}})", }, model: { - unknown: "未知 Model", + unknown: "未知模型", }, features: { - title: "Features", - open: "打开 Agent features", + title: "功能", + open: "打开智能体功能", on: "开启", off: "关闭", }, mode: { - title: "Mode", - searchPlaceholder: "搜索 modes...", - selectWithValue: "选择 Agent mode({{value}})", + title: "模式", + searchPlaceholder: "搜索模式...", + selectWithValue: "选择智能体模式({{value}})", }, hints: { - thinking: "Thinking mode", - model: "切换 Model", + thinking: "思考模式", + model: "切换模型", mode: "更改模式", }, }, agentStream: { - empty: "开始和这个 Agent 对话...", + empty: "开始和这个智能体对话...", scrollToBottom: "滚动到底部", historyLoadFailed: "无法加载智能体历史记录", messageCapped: "此消息已被截断({{bytes}} 字节)。", @@ -237,7 +237,7 @@ export const zhCN: TranslationResources = { approvedPlan: "已批准的计划", canceledPlan: "已取消的计划", - plan: "Plan", + plan: "计划", required: "需要权限", deny: "拒绝", accept: "接受", @@ -248,28 +248,28 @@ export const zhCN: TranslationResources = { }, agentPanel: { states: { - notFound: "未找到 Agent", - failedToLoad: "加载 Agent 失败", + notFound: "未找到智能体", + failedToLoad: "加载智能体失败", reconnecting: "正在重新连接主机", updating: "正在更新消息", - timelineSyncFailed: "无法刷新代理历史记录。", + timelineSyncFailed: "无法刷新智能体历史记录。", timelineSyncRetrying: "正在重试…", - archivingTitle: "正在归档 Agent...", - archivingSubtitle: "请稍候,我们正在归档这个 Agent。", + archivingTitle: "正在归档智能体...", + archivingSubtitle: "请稍候,我们正在归档这个智能体。", }, unavailable: { - selectedHost: "选中的 Host", - unknownHost: "无法打开此 Agent,因为此设备上未配置 {{serverLabel}}。", - addHost: "请在设置中添加 Host,或打开已配置 server 上的 Agent 后继续。", + selectedHost: "选中的主机", + unknownHost: "无法打开此智能体,因为此设备上未配置 {{serverLabel}}。", + addHost: "请在设置中添加主机,或打开已配置服务器上的智能体后继续。", preparingSession: "正在准备 {{serverLabel}} 会话...", connecting: "正在连接 {{serverLabel}}...", - showSoon: "稍后将显示此 Agent。", - showWhenOnline: "Host 在线后将显示此 Agent。", + showSoon: "稍后将显示此智能体。", + showWhenOnline: "主机在线后将显示此智能体。", reconnectingTo: "正在重新连接 {{serverLabel}}...", - showAgainWhenReachable: "Host 可访问后将再次显示此 Agent。", + showAgainWhenReachable: "主机可访问后将再次显示此智能体。", }, archived: { - callout: "此 Agent 已归档", + callout: "此智能体已归档", unarchive: "取消归档", }, }, @@ -308,8 +308,8 @@ export const zhCN: TranslationResources = { attention: "需要注意", }, archiveSheet: { - hostOffline: "Host 离线", - runningAgent: "此 Agent 仍在运行。归档会停止该 Agent。", + hostOffline: "主机离线", + runningAgent: "此智能体仍在运行。归档会停止该智能体。", archive: "归档", }, }, @@ -331,7 +331,7 @@ export const zhCN: TranslationResources = { forkInNewTab: "分叉到新标签页", forkInNewWorkspace: "分叉到新工作区", forkUnavailable: "请更新主机以使用此功能。", - forkMissingWorkspace: "此 Agent 不在工作区中。", + forkMissingWorkspace: "此智能体不在工作区中。", forkFailed: "分叉聊天失败", openFile: "打开文件", copied: "已复制", @@ -391,20 +391,20 @@ export const zhCN: TranslationResources = { }, }, importSession: { - chooseHostTitle: en.importSession.chooseHostTitle, + chooseHostTitle: "从主机导入", title: "导入会话", searchPlaceholder: "搜索会话...", scope: { host: "{{host}} 上的会话", - workspace: "此 workspace", + workspace: "此工作区", }, filters: { all: "全部", }, status: { - connectHost: "连接到 Host 以导入会话", - updateHost: "更新 Host 以导入会话。", - noProviders: "没有已启用的可导入 Provider。", + connectHost: "连接到主机以导入会话", + updateHost: "更新主机以导入会话。", + noProviders: "没有已启用的可导入提供商。", loading: "正在加载最近会话...", failedProvider: "无法加载 {{provider}} 的会话", failedImport: "无法导入所选会话。", @@ -416,7 +416,7 @@ export const zhCN: TranslationResources = { }, preview: { untitledSession: "未命名会话", - noPrompt: "没有 prompt 预览", + noPrompt: "没有提示词预览", }, empty: { noRecent: "没有可导入的最近会话。", @@ -430,30 +430,30 @@ export const zhCN: TranslationResources = { }, workspace: { route: { - loading: "正在加载 workspace", + loading: "正在加载工作区", connecting: "正在连接", hostOffline: "{{hostName}} 已离线", cannotReachHost: "无法连接 {{hostName}}", - hostStatus: "Host 状态:{{status}}", - needsHostUpgrade: "更新你的 Host 以恢复此 workspace", - manageHost: "管理 Host", + hostStatus: "主机状态:{{status}}", + needsHostUpgrade: "更新你的主机以恢复此工作区", + manageHost: "管理主机", recovery: { - archivedTitle: "Workspace 已归档", + archivedTitle: "工作区已归档", restoreDescription: - "恢复 {{workspaceName}} 以返回其中的代理。worktree 将使用分支 {{branch}}。", + "恢复 {{workspaceName}} 以返回其中的智能体。worktree 将使用分支 {{branch}}。", restoreWithoutBranchDescription: - "恢复 {{workspaceName}} 以返回其中的代理。新分支将从保存的基准分支或仓库默认分支创建。", + "恢复 {{workspaceName}} 以返回其中的智能体。新分支将从保存的基准分支或仓库默认分支创建。", unarchiveDescription: "{{workspaceName}} 已归档。取消归档以重新打开。", restoreAction: "恢复", unarchiveAction: "取消归档", - restoringTitle: "正在恢复 workspace", + restoringTitle: "正在恢复工作区", restoringAction: "正在恢复...", - unavailableTitle: "Workspace 不可用", - checkFailedTitle: "无法检查 workspace", + unavailableTitle: "工作区不可用", + checkFailedTitle: "无法检查工作区", }, }, hoverCard: { - scriptsAccessibility: "Workspace scripts", + scriptsAccessibility: "工作区脚本", copyPath: "复制路径", copyBranchName: "复制分支名称", copied: "已复制", @@ -513,7 +513,7 @@ export const zhCN: TranslationResources = { noVisibleFiles: "没有可见文件", }, states: { - unavailable: "Workspace 不可用", + unavailable: "工作区不可用", loading: "正在加载文件...", }, errors: { @@ -531,20 +531,20 @@ export const zhCN: TranslationResources = { }, setup: { descriptor: { - label: "Setup", - completed: "Setup 已完成", - failed: "Setup 失败", - workspace: "Workspace setup", + label: "初始化", + completed: "初始化已完成", + failed: "初始化失败", + workspace: "工作区初始化", blocked: "设置已阻止", }, status: { running: "正在运行", completed: "已完成", failed: "失败", - waiting: "正在等待 setup 输出", + waiting: "正在等待初始化输出", blocked: "已阻止", }, - waiting: "正在 setup workspace...", + waiting: "正在初始化工作区...", blocked: { title: "未运行设置", description: @@ -553,11 +553,11 @@ export const zhCN: TranslationResources = { runFailed: "运行工作区设置失败", }, empty: { - noCommands: "此 workspace 没有运行 setup 命令。", + noCommands: "此工作区没有运行初始化命令。", }, accessibility: { - noCommands: "此 workspace 没有运行 setup 命令", - log: "Workspace setup 日志", + noCommands: "此工作区没有运行初始化命令", + log: "工作区初始化日志", }, log: { noOutput: "没有输出", @@ -566,7 +566,7 @@ export const zhCN: TranslationResources = { browser: { unavailable: { title: "浏览器仅桌面端可用", - subtitle: "在 Electron 中打开此 workspace 以使用内置浏览器。", + subtitle: "在 Electron 中打开此工作区以使用内置浏览器。", }, session: "浏览器会话 {{browserId}}", controls: { @@ -603,22 +603,22 @@ export const zhCN: TranslationResources = { }, }, terminal: { - hostDisconnected: "Host 未连接", + hostDisconnected: "主机未连接", updateHost: "请更新主机以使用原生终端渲染器。", - unableToSubscribe: "无法订阅 Terminal", + unableToSubscribe: "无法订阅终端", }, tabs: { loading: "正在加载...", modified: "未保存的更改", - loadingAgentTitle: "正在加载 Agent 标题", + loadingAgentTitle: "正在加载智能体标题", fallback: { - newAgent: "新建 Agent", - setup: "Setup", - workspaceSetup: "Workspace setup", - terminal: "Terminal", + newAgent: "新建智能体", + setup: "初始化", + workspaceSetup: "工作区初始化", + terminal: "终端", browser: "浏览器", - agent: "Agent", - workspace: "Workspace", + agent: "智能体", + workspace: "工作区", }, switcher: { trigger: "切换标签(已打开 {{count}} 个)", @@ -628,9 +628,9 @@ export const zhCN: TranslationResources = { menu: { openFor: "打开 {{label}} 的菜单", copyResumeCommand: "复制恢复命令", - copyAgentId: "复制 Agent ID", - copyTerminalId: "复制 Terminal ID", - copyFilePath: "Copy file path", + copyAgentId: "复制智能体 ID", + copyTerminalId: "复制终端 ID", + copyFilePath: "复制文件路径", rename: "重命名", closeAbove: "关闭上方标签", closeBelow: "关闭下方标签", @@ -638,18 +638,18 @@ export const zhCN: TranslationResources = { closeRight: "关闭右侧标签", closeOthers: "关闭其他标签", moveToMain: "移至主面板", - reloadAgent: "重新加载 Agent", - reloadAgentTooltip: "重新加载 Agent 以更新 skills、MCPs 或登录状态。", + reloadAgent: "重新加载智能体", + reloadAgentTooltip: "重新加载智能体以更新技能、MCPs 或登录状态。", close: "关闭", - renameTerminal: "重命名 Terminal", - renameAgent: "重命名 Agent", + renameTerminal: "重命名终端", + renameAgent: "重命名智能体", }, actions: { newTab: "新建标签页", - newAgent: "新建 Agent", - newTerminal: "新建 Terminal", - preparingTerminal: "正在准备 Terminal 标签", - preparingTerminalTooltip: "正在准备 Terminal...", + newAgent: "新建智能体", + newTerminal: "新建终端", + preparingTerminal: "正在准备终端标签", + preparingTerminalTooltip: "正在准备终端...", newBrowser: "新建浏览器", maximizePane: "最大化窗格", restorePane: "还原窗格", @@ -660,8 +660,8 @@ export const zhCN: TranslationResources = { changes: "更改", files: "文件", pullRequest: "拉取请求", - terminalProfilesMenu: "Terminal profiles", - editTerminalProfiles: "Edit profiles", + terminalProfilesMenu: "终端配置", + editTerminalProfiles: "编辑配置", }, explorerSidebar: { open: "打开侧边面板", @@ -672,16 +672,16 @@ export const zhCN: TranslationResources = { }, toasts: { copyFailed: "复制失败", - agentIdCopiedLabel: "Agent ID", - terminalIdCopiedLabel: "Terminal ID", + agentIdCopiedLabel: "智能体 ID", + terminalIdCopiedLabel: "终端 ID", resumeCommandCopiedLabel: "恢复命令", - filePathCopiedLabel: "File path", + filePathCopiedLabel: "文件路径", resumeIdUnavailable: "恢复 ID 不可用", resumeCommandUnavailable: "恢复命令不可用", - reloadingAgent: "正在重新加载 Agent...", - reloadedAgent: "已重新加载 Agent", - failedToReloadAgent: "重新加载 Agent 失败", - failedToCloseAgent: "关闭 Agent 失败", + reloadingAgent: "正在重新加载智能体...", + reloadedAgent: "已重新加载智能体", + failedToReloadAgent: "重新加载智能体失败", + failedToCloseAgent: "关闭智能体失败", }, confirmations: { unsavedTitle: "未保存的更改", @@ -692,48 +692,47 @@ export const zhCN: TranslationResources = { close: "关闭", cancel: "取消", archive: "归档", - closeTerminalTitle: "关闭 Terminal?", - closeTerminalMessage: "此 Terminal 中任何正在运行的进程都会立即停止。", - archiveRunningAgentTitle: "归档正在运行的 Agent?", - archiveRunningAgentMessage: "此 Agent 仍在运行。归档会停止该 Agent 并关闭标签。", + closeTerminalTitle: "关闭终端?", + closeTerminalMessage: "此终端中任何正在运行的进程都会立即停止。", + archiveRunningAgentTitle: "归档正在运行的智能体?", + archiveRunningAgentMessage: "此智能体仍在运行。归档会停止该智能体并关闭标签。", closeTabsLeftTitle: "关闭左侧标签?", closeTabsRightTitle: "关闭右侧标签?", closeOtherTabsTitle: "关闭其他标签?", bulk: { - all: "这会归档 {{agents}} 个 Agent,关闭 {{terminals}} 个 Terminal,并关闭 {{tabs}} 个标签。已关闭 Terminal 中任何正在运行的进程都会立即停止。", + all: "这会归档 {{agents}} 个智能体,关闭 {{terminals}} 个终端,并关闭 {{tabs}} 个标签。已关闭终端中任何正在运行的进程都会立即停止。", agentsAndTerminals: - "这会归档 {{agents}} 个 Agent,并关闭 {{terminals}} 个 Terminal。已关闭 Terminal 中任何正在运行的进程都会立即停止。", + "这会归档 {{agents}} 个智能体,并关闭 {{terminals}} 个终端。已关闭终端中任何正在运行的进程都会立即停止。", terminalsAndTabs: - "这会关闭 {{terminals}} 个 Terminal,并关闭 {{tabs}} 个标签。已关闭 Terminal 中任何正在运行的进程都会立即停止。", - agentsAndTabs: "这会归档 {{agents}} 个 Agent,并关闭 {{tabs}} 个标签。", - terminals: - "这会关闭 {{terminals}} 个 Terminal。已关闭 Terminal 中任何正在运行的进程都会立即停止。", + "这会关闭 {{terminals}} 个终端,并关闭 {{tabs}} 个标签。已关闭终端中任何正在运行的进程都会立即停止。", + agentsAndTabs: "这会归档 {{agents}} 个智能体,并关闭 {{tabs}} 个标签。", + terminals: "这会关闭 {{terminals}} 个终端。已关闭终端中任何正在运行的进程都会立即停止。", tabs: "这会关闭 {{tabs}} 个标签。", - agents: "这会归档 {{agents}} 个 Agent。", + agents: "这会归档 {{agents}} 个智能体。", }, }, }, header: { actions: { - workspaceActions: "Workspace 操作", - newAgent: "新建 Agent", - newTerminal: "新建 Terminal", + workspaceActions: "工作区操作", + newAgent: "新建智能体", + newTerminal: "新建终端", newBrowser: "新建浏览器标签", importSession: "导入会话", - copyPath: "复制 workspace 路径", + copyPath: "复制工作区路径", copyBranchName: "复制分支名称", - showSetup: "显示 setup", + showSetup: "显示初始化", }, toasts: { - workspacePathUnavailable: "Workspace 路径尚不可用", + workspacePathUnavailable: "工作区路径尚不可用", branchNameUnavailable: "分支名称不可用", - terminalQueued: "正在准备 workspace,Terminal 准备好后会打开...", - workspacePathCopiedLabel: "Workspace 路径", + terminalQueued: "正在准备工作区,终端准备好后会打开...", + workspacePathCopiedLabel: "工作区路径", branchNameCopiedLabel: "分支名称", }, }, scripts: { - title: "Scripts", + title: "脚本", actions: { chooseUrl: "选择 URL", copyUrl: "复制 URL", @@ -744,23 +743,23 @@ export const zhCN: TranslationResources = { view: "查看终端", }, accessibility: { - trigger: "Workspace scripts", + trigger: "工作区脚本", openService: "查看 {{scriptName}} 服务", - viewTerminal: "查看 {{scriptName}} Terminal", - runScript: "运行 {{scriptName}} script", + viewTerminal: "查看 {{scriptName}} 终端", + runScript: "运行 {{scriptName}} 脚本", stopScript: "停止 {{scriptName}}", restartScript: "重启 {{scriptName}}", copyUrl: "复制 {{scriptName}} 的 URL", chooseUrl: "选择 {{scriptName}} 的 URL", - script: "{{scriptName}} script", + script: "{{scriptName}} 脚本", }, routes: { public: "反向代理", - paseo: "Memorable", + paseo: "易记地址", direct: "直接地址", }, states: { - exitCode: "exit {{code}}", + exitCode: "退出码 {{code}}", startFailed: "启动 {{scriptName}} 失败", stopFailed: "停止 {{scriptName}} 失败", }, @@ -774,24 +773,24 @@ export const zhCN: TranslationResources = { moreOptions: "更多选项", moreActions: "更多操作", commit: { - label: "Commit", - pending: "正在 commit...", - success: "已 commit", + label: "提交", + pending: "正在提交...", + success: "已提交", }, pull: { - label: "Pull", - pending: "正在 pull...", - success: "已 pull", + label: "拉取", + pending: "正在拉取...", + success: "已拉取", }, push: { - label: "Push", - pending: "正在 push...", - success: "已 push", + label: "推送", + pending: "正在推送...", + success: "已推送", }, pullAndPush: { - label: "Pull 并 push", - pending: "正在 pull 并 push...", - success: "已 pull 并 push", + label: "拉取并推送", + pending: "正在拉取并推送...", + success: "已拉取并推送", }, viewPr: "查看 PR", createPr: { @@ -803,9 +802,9 @@ export const zhCN: TranslationResources = { success_mr: "MR 已创建", }, mergeBranch: { - label: "本地 merge", - pending: "正在 merge...", - success: "已 merge", + label: "本地合并", + pending: "正在合并...", + success: "已合并", }, mergeFromBase: { label: "从 {{baseRef}} 更新", @@ -818,104 +817,104 @@ export const zhCN: TranslationResources = { success: "已归档", }, mergePr: { - squash: "Merge PR (squash)", - merge: "Merge PR (merge)", - rebase: "Merge PR (rebase)", - pending: "正在 merge PR...", - success: "PR 已 merge", - squash_mr: "Merge MR (squash)", - merge_mr: "Merge MR (merge)", - rebase_mr: "Merge MR (rebase)", - pending_mr: "正在 merge MR...", - success_mr: "MR 已 merge", + squash: "合并 PR(压缩)", + merge: "合并 PR(合并提交)", + rebase: "合并 PR(变基)", + pending: "正在合并 PR...", + success: "PR 已合并", + squash_mr: "合并 MR(压缩)", + merge_mr: "合并 MR(合并提交)", + rebase_mr: "合并 MR(变基)", + pending_mr: "正在合并 MR...", + success_mr: "MR 已合并", }, viewPr_mr: "查看 MR", autoMerge: { - enableSquash: "Auto merge (squash)", - enableMerge: "Auto merge (merge)", - enableRebase: "Auto merge (rebase)", - enabled: "Auto-merge 已启用", - enabling: "正在启用 auto-merge...", - disabling: "正在禁用 auto-merge...", - disabled: "Auto-merge 已禁用", + enableSquash: "自动合并(压缩)", + enableMerge: "自动合并(合并提交)", + enableRebase: "自动合并(变基)", + enabled: "自动合并已启用", + enabling: "正在启用自动合并...", + disabling: "正在禁用自动合并...", + disabled: "自动合并已禁用", }, unavailable: { viewPrNoForge: "当前无法查看 {{noun}},因为 {{brand}} 未连接", - pullNoRemote: "此处无法 pull,因为此分支尚未连接到 remote", - pullDirty: "有本地变更时无法 pull,请先 commit 或 stash", - pullUpToDate: "无法 pull,因为此分支已是最新", - pushNoRemote: "此处无法 push,因为此分支尚未连接到 remote", - pushBehind: "暂时无法 push,因为需要先拉取更新的变更", - pushNothing: "无法 push,因为没有新的内容可发送", - pullAndPushNoRemote: "此处无法 pull 并 push,因为此分支尚未连接到 remote", - pullAndPushDirty: "有本地变更时无法 pull 并 push,请先 commit 或 stash", - pullAndPushNoIncoming: "无法 pull 并 push,因为没有需要先 pull 的传入变更", - pullAndPushInSync: "无法 pull 并 push,因为此分支已同步", - pullAndPushNothingToPush: "无法 pull 并 push,因为 pull 之后没有新的内容可发送", + pullNoRemote: "此处无法拉取,因为此分支尚未连接到远程仓库", + pullDirty: "有本地变更时无法拉取,请先提交或暂存", + pullUpToDate: "无法拉取,因为此分支已是最新", + pushNoRemote: "此处无法推送,因为此分支尚未连接到远程仓库", + pushBehind: "暂时无法推送,因为需要先拉取更新的变更", + pushNothing: "无法推送,因为没有新的内容可发送", + pullAndPushNoRemote: "此处无法拉取并推送,因为此分支尚未连接到远程仓库", + pullAndPushDirty: "有本地变更时无法拉取并推送,请先提交或暂存", + pullAndPushNoIncoming: "无法拉取并推送,因为没有需要先拉取的传入变更", + pullAndPushInSync: "无法拉取并推送,因为此分支已同步", + pullAndPushNothingToPush: "无法拉取并推送,因为拉取之后没有新的内容可发送", createPrNoForge: "当前无法创建 {{noun}},因为 {{brand}} 未连接", - createPrNoCommits: "无法创建 PR,因为此分支还没有新的 commit", - mergeNoBase: "无法 merge,因为无法确定 base branch", - mergeDirty: "有本地变更时无法 merge,请先 commit 或 stash", - mergeNothing: "无法 merge,因为此分支没有可 merge 的新内容", - updateNoBase: "无法更新,因为无法确定 base branch", - updateDirty: "有本地变更时无法更新,请先 commit 或 stash", + createPrNoCommits: "无法创建 PR,因为此分支还没有新的提交", + mergeNoBase: "无法合并,因为无法确定基准分支", + mergeDirty: "有本地变更时无法合并,请先提交或暂存", + mergeNothing: "无法合并,因为此分支没有可合并的新内容", + updateNoBase: "无法更新,因为无法确定基准分支", + updateDirty: "有本地变更时无法更新,请先提交或暂存", updateCurrent: "无法更新,因为此分支已与 {{baseRef}} 保持最新", - mergePrNoGithub: "当前无法 merge PR,因为 GitHub 未连接", - archiveNotWorktree: "此处无法归档,因为此 workspace 不是作为 Paseo worktree 创建的", - mergePrNoForge: "当前无法 merge {{noun}},因为 {{brand}} 未连接", - mergePrMissing: "无法 merge PR,因为还没有 pull request", - mergePrDraft: "无法 merge PR,因为 pull request 仍是 draft", - mergePrMerged: "无法 merge PR,因为 pull request 已 merge", - mergePrClosed: "无法 merge PR,因为 pull request 已关闭", - mergePrConflicts: "无法 merge PR,因为 pull request 存在冲突", - mergePrQueue: "此处无法 merge PR,因为此 repository 使用 merge queue", - mergePrNotReady: "{{brand}} 报告 {{noun}} 可 merge 后才能 merge {{noun}}", - autoMergeCannotDisable: "Auto-merge 已启用,但此账号无法禁用", + mergePrNoGithub: "当前无法合并 PR,因为 GitHub 未连接", + archiveNotWorktree: "此处无法归档,因为此工作区不是作为 Paseo worktree 创建的", + mergePrNoForge: "当前无法合并 {{noun}},因为 {{brand}} 未连接", + mergePrMissing: "无法合并 PR,因为还没有拉取请求", + mergePrDraft: "无法合并 PR,因为拉取请求仍是草稿", + mergePrMerged: "无法合并 PR,因为拉取请求已合并", + mergePrClosed: "无法合并 PR,因为拉取请求已关闭", + mergePrConflicts: "无法合并 PR,因为拉取请求存在冲突", + mergePrQueue: "此处无法合并 PR,因为此仓库使用合并队列", + mergePrNotReady: "{{brand}} 报告 {{noun}} 可合并后才能合并 {{noun}}", + autoMergeCannotDisable: "自动合并已启用,但此账号无法禁用", }, toasts: { - failedCommit: "Commit 失败", - failedPull: "Pull 失败", - failedPush: "Push 失败", - failedPullAndPush: "Pull 并 push 失败", + failedCommit: "提交失败", + failedPull: "拉取失败", + failedPush: "推送失败", + failedPullAndPush: "拉取并推送失败", failedCreatePr: "创建 PR 失败", - failedMergePr: "Merge PR 失败", - failedEnableAutoMerge: "启用 auto-merge 失败", - failedDisableAutoMerge: "禁用 auto-merge 失败", - baseRefUnavailable: "Base ref 不可用", - failedMerge: "Merge 失败", - failedMergeFromBase: "从 base merge 失败", + failedMergePr: "合并 PR 失败", + failedEnableAutoMerge: "启用自动合并失败", + failedDisableAutoMerge: "禁用自动合并失败", + baseRefUnavailable: "基准引用不可用", + failedMerge: "合并失败", + failedMergeFromBase: "从基准合并失败", }, archiveWarning: { title: "归档「{{workspaceName}}」?", confirm: "归档", cancel: "取消", - uncommittedChanges: "未 commit 的变更", - uncommittedChangesWithDiff: "未 commit 的变更({{diffStat}})", + uncommittedChanges: "未提交的变更", + uncommittedChangesWithDiff: "未提交的变更({{diffStat}})", addedLine: "新增 {{count}} 行", addedLines: "新增 {{count}} 行", deletedLine: "删除 {{count}} 行", deletedLines: "删除 {{count}} 行", - unpushedCommit: "{{count}} 个未 push 的 commit", - unpushedCommits: "{{count}} 个未 push 的 commit", + unpushedCommit: "{{count}} 个未推送的提交", + unpushedCommits: "{{count}} 个未推送的提交", }, }, diff: { openChangesTab: "打开“更改”标签页", - openDiffTab: "打开 Diff 标签页", + openDiffTab: "打开差异标签页", closeChangesTab: "关闭“更改”标签页", jumpToFile: { title: "跳转到文件", }, binaryFile: "二进制文件", - tooLarge: "Diff 过大,无法显示", - previewTooLargeTitle: "此 diff 过大,无法预览", + tooLarge: "差异过大,无法显示", + previewTooLargeTitle: "此差异过大,无法预览", previewTooLargeDescription: "缩小比较范围即可在此预览", - unified: "Unified diff", - split: "Side-by-side diff", + unified: "统一差异", + split: "并排差异", switchToUnified: "切换到统一差异视图", switchToSplit: "切换到并排差异视图", - options: "Diff 选项", - inlineDiff: "内联 Diff", + options: "差异选项", + inlineDiff: "内联差异", hideWhitespace: "隐藏空白差异", showWhitespace: "显示空白差异", scrollLongLines: "滚动长行", @@ -928,15 +927,15 @@ export const zhCN: TranslationResources = { refresh: "刷新", refreshState: "刷新 git 和 {{brand}} 状态", failedRefresh: "刷新 git 状态失败。", - seeUncommittedChanges: "查看未 commit 的变更", - seeCommittedChanges: "查看已 commit 的变更", - checkingRepository: "正在检查 repository...", - notRepository: "不是 git repository", - diffMode: "Diff 模式", - uncommitted: "未 commit", - committed: "已 commit", + seeUncommittedChanges: "查看未提交的变更", + seeCommittedChanges: "查看已提交的变更", + checkingRepository: "正在检查仓库...", + notRepository: "不是 git 仓库", + diffMode: "差异模式", + uncommitted: "未提交", + committed: "已提交", branchUnknown: "未知", - base: "base", + base: "基准", newFile: "新增", deletedFile: "已删除", modifiedFile: "已修改", @@ -954,9 +953,9 @@ export const zhCN: TranslationResources = { openInEditor: { open: "打开", chooseEditor: "选择编辑器", - openIn: "在 {{target}} 中打开 workspace", + openIn: "在 {{target}} 中打开工作区", openFileIn: "在 {{target}} 中打开 {{fileName}}", - failedOpen: "打开 workspace 失败", + failedOpen: "打开工作区失败", }, pr: { actions: { @@ -972,9 +971,9 @@ export const zhCN: TranslationResources = { runningAccessible: "检查运行中", }, sections: { - checks: "Checks", + checks: "检查", pipeline: "流水线", - reviews: "Reviews", + reviews: "审查", }, empty: { noJobs: "无作业", @@ -984,7 +983,7 @@ export const zhCN: TranslationResources = { }, approvals: "{{given}} / {{required}} 批准", accessibility: { - pullRequest: "Pull request #{{number}}", + pullRequest: "拉取请求 #{{number}}", pullRequest_mr: "合并请求 !{{number}}", checkStatus: { passed: "成功", @@ -998,16 +997,16 @@ export const zhCN: TranslationResources = { }, }, states: { - draft: "Draft", - merged: "已 merge", + draft: "草稿", + merged: "已合并", closed: "已关闭", - open: "Open", + open: "开放", }, activity: { commented: "已评论", approved: "已批准", requestedChanges: "请求修改", - reviewed: "已 review", + reviewed: "已审查", }, time: { justNow: "刚刚", @@ -1016,8 +1015,8 @@ export const zhCN: TranslationResources = { discussion: "讨论主题", }, errors: { - statusLoadFailed: "无法加载 Pull Request 状态", - activityLoadFailed: "无法加载 Pull Request 活动", + statusLoadFailed: "无法加载拉取请求状态", + activityLoadFailed: "无法加载拉取请求活动", }, }, forgeSetup: { @@ -1129,14 +1128,14 @@ export const zhCN: TranslationResources = { title: "已置顶", }, host: { - noHost: "没有 Host", - switchTitle: "切换 Host", - searchPlaceholder: "搜索 Hosts...", + noHost: "没有主机", + switchTitle: "切换主机", + searchPlaceholder: "搜索主机...", }, actions: { - addProject: "添加 project", + addProject: "添加项目", newWorkspace: "新建工作区", - hosts: "Hosts", + hosts: "主机", settings: "设置", closeSidebar: "关闭侧边栏", }, @@ -1160,35 +1159,35 @@ export const zhCN: TranslationResources = { schedules: "计划", }, worktreeSetup: { - title: "设置 worktree scripts", - description: "添加 setup 命令,让新的 worktree 自动安装依赖并完成准备。", - openProjectSettings: "打开 project 设置", + title: "设置 worktree 脚本", + description: "添加初始化命令,让新的 worktree 自动安装依赖并完成准备。", + openProjectSettings: "打开项目设置", }, project: { actions: { - menu: "Project 操作", - openSettings: "打开 project 设置", + menu: "项目操作", + openSettings: "打开项目设置", openNewWindow: "在新窗口中打开", openNewWindowFailed: "无法打开新窗口", - openFolder: "Open in file manager", - openFolderFailed: "Couldn't open folder", - remove: "移除 project", + openFolder: "在文件管理器中打开", + openFolderFailed: "无法打开文件夹", + remove: "移除项目", removing: "正在移除...", }, confirmations: { - removeTitle: "移除 project?", + removeTitle: "移除项目?", removeMessage: "从侧边栏移除「{{projectName}}」?\n\n磁盘上的文件不会被更改。", removeConfirm: "移除", cancel: "取消", }, toasts: { - hostDisconnected: "Host 未连接", - removeFailed: "部分 workspace 移除失败", - updateHostToRemove: "更新 host 以移除 projects。", + hostDisconnected: "主机未连接", + removeFailed: "部分工作区移除失败", + updateHostToRemove: "更新主机以移除项目。", }, empty: { - title: "还没有 projects", - description: "添加 project 以开始", + title: "还没有项目", + description: "添加项目以开始", }, }, workspace: { @@ -1206,14 +1205,14 @@ export const zhCN: TranslationResources = { pending: "等待中: {{count}}", }, actions: { - menu: "Workspace 操作", - newWorkspace: "新建 workspace", + menu: "工作区操作", + newWorkspace: "新建工作区", showMore: "显示更多", showLess: "收起", - createWorkspaceFor: "为 {{projectName}} 新建 workspace", + createWorkspaceFor: "为 {{projectName}} 新建工作区", copyPath: "复制路径", copyBranchName: "复制分支名称", - rename: "重命名 workspace", + rename: "重命名工作区", pin: "置顶", unpin: "取消置顶", archive: "归档", @@ -1223,28 +1222,28 @@ export const zhCN: TranslationResources = { hiding: "正在隐藏...", }, confirmations: { - hideTitle: "隐藏 workspace?", + hideTitle: "隐藏工作区?", hideMessage: "从侧边栏隐藏「{{workspaceName}}」?\n\n磁盘上的文件不会被更改。", hideConfirm: "隐藏", cancel: "取消", }, rename: { - title: "重命名 workspace", + title: "重命名工作区", submit: "重命名", invalidBranchName: "无效的分支名称", }, toasts: { - workspacePathUnavailable: "Workspace 路径不可用", + workspacePathUnavailable: "工作区路径不可用", pathCopied: "路径已复制", branchNameCopied: "分支名称已复制", - hostDisconnected: "Host 未连接", - hideFailed: "隐藏 workspace 失败", + hostDisconnected: "主机未连接", + hideFailed: "隐藏工作区失败", archiveFailed: "归档工作区失败", }, }, }, newWorkspace: { - title: "新建 workspace", + title: "新建工作区", create: "创建", isolation: { local: "本地", @@ -1258,34 +1257,34 @@ export const zhCN: TranslationResources = { }, titlePlaceholder: "标题(可选)", errors: { - hostDisconnected: "Host 未连接", + hostDisconnected: "主机未连接", createWorktreeFailed: "创建 worktree 失败", - composerStateRequired: "Composer 状态必填", + composerStateRequired: "输入框状态必填", selectModel: "请选择模型", }, tooltips: { - project: "Choose the project", - host: "Choose the host", - isolation: "Choose the isolation level", + project: "选择项目", + host: "选择主机", + isolation: "选择隔离级别", startingRef: "选择起始位置", - launch: "Choose what to launch", + launch: "选择启动内容", }, refPicker: { - startingRef: "起始 ref", + startingRef: "起始引用", intoBase: "进入 {{baseRef}}", searching: "正在搜索...", - noMatchingRefs: "没有匹配的 refs。", + noMatchingRefs: "没有匹配的引用。", searchPlaceholder: "搜索分支和 PR", title: "起始位置", }, launch: { - title: "What to launch", - chat: "Chat", - terminal: "Terminal", - manageProfiles: "Manage profiles", - submit: "Launch", - promptPlaceholder: "Prompt {{name}}", - commandPlaceholder: "Run a command, or leave empty for a blank terminal", + title: "启动内容", + chat: "聊天", + terminal: "终端", + manageProfiles: "管理配置", + submit: "启动", + promptPlaceholder: "向 {{name}} 发送提示词", + commandPlaceholder: "输入要运行的命令,或留空以打开空白终端", }, }, desktop: { @@ -1297,37 +1296,52 @@ export const zhCN: TranslationResources = { }, quitting: { title: "正在退出 Paseo...", - detail: "正在停止本地 daemon。", + detail: "正在停止本地守护进程。", }, daemon: { - lifecycle: en.desktop.daemon.lifecycle, - title: "Daemon", + lifecycle: { + owned: "由当前桌面会话启动", + attached: "已连接到现有守护进程", + ownedMessage: "此守护进程由当前桌面会话启动。", + attachedMessage: "此守护进程并非由当前桌面会话启动。", + stopTitle: "停止本地守护进程?", + stopMessage: + "{{ownership}}\n主目录:{{home}}\n监管进程 PID:{{pid}}\n正在运行的智能体任务将被中断。", + stop: "停止守护进程", + stopping: "正在停止…", + stopFailed: "无法停止守护进程", + pauseAttached: "暂停自动管理守护进程?已连接的守护进程将继续运行。", + pause: "暂停管理", + workerUpdated: "工作进程已更新至 {{version}}", + supervisorRefresh: + "正在运行的监管进程仍使用原有代码。需要由启动它的程序将其停止并重新启动,以更新监管进程。", + }, + title: "守护进程", status: { title: "状态", - builtInOnly: "这里只显示内置桌面 daemon", - running: "running", - notRunning: "not running", + builtInOnly: "这里只显示内置桌面守护进程", + running: "运行中", + notRunning: "未运行", pid: "PID {{pid}}", }, management: { - title: "管理内置 daemon", - hint: "让 Paseo 启动和停止内置 daemon", - pauseTitle: "暂停内置 daemon", - pauseMessage: - "这会立即停止内置 daemon。连接到内置 daemon 的运行中 agents 和 terminals 会被停止。", + title: "管理内置守护进程", + hint: "让 Paseo 启动和停止内置守护进程", + pauseTitle: "暂停内置守护进程", + pauseMessage: "这会立即停止内置守护进程。连接到内置守护进程的运行中智能体和终端会被停止。", pauseAndStop: "暂停并停止", registrationFailed: - "内置 daemon 已启动,但 Paseo 无法保存 localhost 连接。请关闭后重新开启 daemon 管理,或手动添加 localhost。", - pausedStopFailed: "内置 daemon 管理已暂停,但 Paseo 无法停止 daemon。", - updateFailed: "无法更新内置 daemon 管理设置。", + "内置守护进程已启动,但 Paseo 无法保存 localhost 连接。请关闭后重新开启守护进程管理,或手动添加 localhost。", + pausedStopFailed: "内置守护进程管理已暂停,但 Paseo 无法停止守护进程。", + updateFailed: "无法更新内置守护进程管理设置。", }, keepRunning: { - title: "退出后保持 daemon 运行", - hint: "退出 Paseo 后 daemon 会继续运行", + title: "退出后保持守护进程运行", + hint: "退出 Paseo 后守护进程会继续运行", }, logs: { title: "日志文件", - modalTitle: "Daemon 日志", + modalTitle: "守护进程日志", unavailable: "日志路径不可用", empty: "(日志文件为空)", copied: "日志路径已复制。", @@ -1337,22 +1351,22 @@ export const zhCN: TranslationResources = { }, fullStatus: { title: "完整状态", - modalTitle: "Daemon 状态", + modalTitle: "守护进程状态", hint: "运行 `paseo daemon status` 并显示输出", view: "查看状态", copied: "状态已复制到剪贴板。", - fetchFailed: "获取 daemon 状态失败:{{message}}", + fetchFailed: "获取守护进程状态失败:{{message}}", }, advancedSettings: "高级设置", - openAdvancedSettings: "打开 daemon 高级设置", - versionMismatch: "App 和 daemon 版本不匹配。请将两者更新到相同版本,以获得最佳体验。", - loadFailed: "无法加载桌面 daemon 状态。", + openAdvancedSettings: "打开守护进程高级设置", + versionMismatch: "应用和守护进程版本不匹配。请将两者更新到相同版本,以获得最佳体验。", + loadFailed: "无法加载桌面守护进程状态。", }, updates: { status: { - checking: "正在检查 app 更新...", - installing: "正在安装 app 更新...", - upToDate: "App 已是最新版本。", + checking: "正在检查应用更新...", + installing: "正在安装应用更新...", + upToDate: "应用已是最新版本。", upToDateWithLastChecked: "已是最新版本。上次检查时间:{{time}}。", pending: "更新准备好后会通知你。", pendingWithLastChecked: "更新准备好后会通知你。上次检查时间:{{time}}。", @@ -1361,13 +1375,13 @@ export const zhCN: TranslationResources = { "发现更新:{{version}}。正在下载... 上次检查时间:{{time}}。", availableWithVersion: "更新已就绪:{{version}}", availableWithVersionAndLastChecked: "更新已就绪:{{version}}。上次检查时间:{{time}}。", - available: "有 app 更新可安装。", - availableWithLastChecked: "有 app 更新可安装。上次检查时间:{{time}}。", - installed: "App 更新已安装。需要重启。", - failed: "App 更新失败。", + available: "有应用更新可安装。", + availableWithLastChecked: "有应用更新可安装。上次检查时间:{{time}}。", + installed: "应用更新已安装。需要重启。", + failed: "应用更新失败。", idle: "尚未检查更新状态。", }, - installError: "无法安装 desktop app 更新。", + installError: "无法安装桌面应用更新。", callout: { installingTitle: "正在安装更新", failedTitle: "更新失败", @@ -1379,7 +1393,7 @@ export const zhCN: TranslationResources = { installingDescription: "正在安装并重启...", versionReady: "{{version}} 已准备好安装。", newVersionReady: "新版本已准备好安装。", - restartWarning: "升级 app 会停止正在运行的 agents,并关闭 terminal 会话。", + restartWarning: "升级应用会停止正在运行的智能体,并关闭终端会话。", }, }, settings: { @@ -1397,27 +1411,27 @@ export const zhCN: TranslationResources = { allowed: "系统已允许通知。", denied: "系统设置中已拒绝通知。", notGranted: "通知权限尚未授予。", - webOnly: "桌面通知状态仅在 web runtime 中可用。", + webOnly: "桌面通知状态仅在网页运行环境中可用。", supported: "支持桌面通知。", unsupported: "此平台不支持桌面通知。", apiUnavailable: "此环境中 Web Notification API 不可用。", - requestsWebOnly: "桌面通知请求仅在 web runtime 中可用。", + requestsWebOnly: "桌面通知请求仅在网页运行环境中可用。", requestUnavailable: "Web Notification API requestPermission() 不可用。", requestFailed: "请求通知权限失败:{{message}}", unexpectedState: "意外的通知权限状态:{{state}}", }, microphone: { - webOnly: "桌面麦克风状态仅在 web runtime 中可用。", + webOnly: "桌面麦克风状态仅在网页运行环境中可用。", navigatorUnavailable: "此环境中 Navigator 不可用。", granted: "已授予麦克风访问权限。", denied: "系统设置中已拒绝麦克风访问。", notGranted: "麦克风权限尚未授予。", unexpectedState: "意外的麦克风权限状态:{{state}}", - statusApiUnavailable: "此 runtime 中麦克风状态 API 不可用。请使用请求来检查访问权限。", + statusApiUnavailable: "此运行环境中麦克风状态 API 不可用。请使用请求来检查访问权限。", queryFailed: "查询麦克风状态失败:{{message}}", captureUnavailable: "此环境中麦克风采集不可用。", permissionApiUnavailable: "权限状态 API 不可用。请使用请求来检查访问权限。", - requestsWebOnly: "桌面麦克风请求仅在 web runtime 中可用。", + requestsWebOnly: "桌面麦克风请求仅在网页运行环境中可用。", captureApiUnavailable: "此环境中麦克风采集 API 不可用。", requestDenied: "用户或系统拒绝了麦克风权限。", noDevice: "未找到麦克风设备。", @@ -1430,7 +1444,7 @@ export const zhCN: TranslationResources = { testNotification: { title: "Paseo 通知测试", body: "如果你能看到这条通知,说明桌面通知可用。", - notDelivered: "通知未送达。请检查 System Settings > Notifications。", + notDelivered: "通知未送达。请检查系统设置 > 通知。", failed: "发送通知失败。", }, }, @@ -1450,15 +1464,15 @@ export const zhCN: TranslationResources = { errorTitle: "出现问题", errorDescription: "本地服务器启动失败。如果持续发生,请在 GitHub 报告问题并附上下方日志。", logs: { - loading: "正在加载 daemon 日志...", - unavailable: "没有可用的 daemon 日志。", - loadFailed: "无法加载 daemon 日志:{{message}}", + loading: "正在加载守护进程日志...", + unavailable: "没有可用的守护进程日志。", + loadFailed: "无法加载守护进程日志:{{message}}", }, }, openProject: { tiles: { addProject: { - title: "添加 project", + title: "添加项目", description: "打开此机器上的文件夹", }, importSession: { @@ -1466,19 +1480,19 @@ export const zhCN: TranslationResources = { description: "导入最近的外部 CLI 会话", }, setupProviders: { - title: "设置 providers", + title: "设置提供商", description: "配置 Claude Code、Codex 等", }, pairDevice: { title: "配对设备", - description: "将手机连接到此 daemon", + description: "将手机连接到此守护进程", }, }, }, projectPicker: { placeholder: "输入以搜索...", browse: "浏览…", - opening: "正在打开 project...", + opening: "正在打开项目...", searching: "正在搜索...", empty: "开始输入路径", errors: { @@ -1494,19 +1508,19 @@ export const zhCN: TranslationResources = { searchPlaceholder: "筛选分支...", empty: "没有找到分支。", title: "切换分支", - uncommittedTitle: "未 commit 的变更", - uncommittedMessage: "你有未 commit 的变更。切换分支前要先 stash 吗?", - stashAndSwitch: "Stash 并切换", - failedToStash: "Stash 变更失败", + uncommittedTitle: "未提交的变更", + uncommittedMessage: "你有未提交的变更。切换分支前要先暂存吗?", + stashAndSwitch: "暂存并切换", + failedToStash: "暂存变更失败", failedToSwitch: "切换分支失败", - restoreStashTitle: "恢复 stashed 变更?", - restoreStashMessage: "此分支有上一会话 stashed 的变更。要恢复它们吗?", + restoreStashTitle: "恢复暂存变更?", + restoreStashMessage: "此分支有上一会话暂存的变更。要恢复它们吗?", restore: "恢复", later: "稍后", - stashRestored: "Stashed 变更已恢复", + stashRestored: "暂存变更已恢复", }, agentAutocomplete: { - searchingWorkspace: "正在搜索 workspace...", + searchingWorkspace: "正在搜索工作区...", loadingCommands: "正在加载 commands...", noFiles: "没有找到文件或目录", noCommands: "没有找到 commands", @@ -1526,14 +1540,14 @@ export const zhCN: TranslationResources = { dialogFilterName: "图片", }, workspaceSetup: { - title: "创建 workspace", + title: "创建工作区", errors: { failedCreateWorktree: "创建 worktree 失败", - failedOpenProject: "打开 project 失败", + failedOpenProject: "打开项目失败", selectModel: "请选择模型", - hostDisconnected: "Host 未连接", - pendingRequired: "没有待处理的 workspace setup", - composerStateRequired: "Workspace setup composer 状态必填", + hostDisconnected: "主机未连接", + pendingRequired: "没有待处理的工作区初始化", + composerStateRequired: "工作区初始化输入框状态必填", }, }, onboarding: { @@ -1544,7 +1558,7 @@ export const zhCN: TranslationResources = { }, }, modelSelector: { - title: "选择 provider", + title: "选择提供商", selectModel: "选择模型", selectedModel: "选择模型({{model}})", loading: "正在加载...", @@ -1553,7 +1567,7 @@ export const zhCN: TranslationResources = { error: "错误", defaultModel: "默认", profiles: "配置文件", - providers: "提供方", + providers: "提供商", model: "模型", editProfiles: "编辑", editProfilesLabel: "编辑智能体配置文件", @@ -1572,9 +1586,9 @@ export const zhCN: TranslationResources = { openProviderSettings: "打开 {{provider}} 设置", }, providerCatalog: { - title: "添加 provider", - search: "搜索 providers", - noProviders: "未找到 providers", + title: "添加提供商", + search: "搜索提供商", + noProviders: "未找到提供商", actions: { add: "添加", adding: "正在添加", @@ -1584,7 +1598,7 @@ export const zhCN: TranslationResources = { installInstructionsFor: "{{provider}} 安装说明", }, errors: { - unableToInstall: "无法安装 provider", + unableToInstall: "无法安装提供商", }, }, providerSelection: { @@ -1595,12 +1609,12 @@ export const zhCN: TranslationResources = { unavailable: "不可用", unknownError: "未知错误", readiness: { - initialPromptRequired: "初始 prompt 必填", - noProviders: "所选 Host 上没有可用的 provider", + initialPromptRequired: "初始提示词必填", + noProviders: "所选主机上没有可用的提供商", modelDefaultsLoading: "模型默认值仍在加载", - noModelAvailable: "所选 provider 没有可用模型", - workspaceDirectoryNotFound: "Workspace 目录未找到", - hostDisconnected: "Host 未连接", + noModelAvailable: "所选提供商没有可用模型", + workspaceDirectoryNotFound: "工作区目录未找到", + hostDisconnected: "主机未连接", }, }, pairing: { @@ -1630,18 +1644,18 @@ export const zhCN: TranslationResources = { }, scanQr: { title: "扫描二维码", - description: "加密 relay 连接。", + description: "加密中继连接。", }, pasteLink: { title: "粘贴配对链接", - description: "加密 relay 连接。", + description: "加密中继连接。", }, }, direct: { title: "直接连接", - helper: "输入 Paseo server 的地址。", + helper: "输入 Paseo 服务器的地址。", fields: { - host: "Host", + host: "主机", port: "端口", password: "密码", optional: "可选", @@ -1663,18 +1677,18 @@ export const zhCN: TranslationResources = { connecting: "正在连接...", }, errors: { - hostRequired: "Host 必填", + hostRequired: "主机必填", invalidPort: "端口必须在 1 到 65535 之间", invalidConnection: "无效连接", failedTitle: "连接失败", failedToConnect: "无法连接到 {{endpoint}}。", noAdditionalDetails: "{{detail}}(未提供更多详情)", - timedOut: "连接超时。请检查 host/port 和网络。", - refused: "连接被拒绝。server 是否正在此地址运行?", - hostNotFound: "未找到 host。请检查主机名后重试。", - hostUnreachable: "Host 不可达。请检查网络和防火墙。", - tlsError: "TLS 错误。只有 daemon 前方有 TLS terminator 时,直接连接才使用 SSL。", - unableToConnect: "无法连接。请检查 host/port,并确认 daemon 可达。", + timedOut: "连接超时。请检查主机和端口 和网络。", + refused: "连接被拒绝。服务器是否正在此地址运行?", + hostNotFound: "未找到主机。请检查主机名后重试。", + hostUnreachable: "主机不可达。请检查网络和防火墙。", + tlsError: "TLS 错误。只有守护进程前方有 TLS 终止代理时,直接连接才使用 SSL。", + unableToConnect: "无法连接。请检查主机和端口,并确认守护进程可达。", details: "详情:{{detail}}", }, }, @@ -1703,14 +1717,14 @@ export const zhCN: TranslationResources = { }, link: { title: "粘贴配对链接", - helper: "粘贴来自 server 的配对链接。", + helper: "粘贴来自服务器的配对链接。", label: "配对链接", errors: { required: "请粘贴配对链接(.../#offer=...)", missingOffer: "链接必须包含 #offer=...", - emptyOffer: "Offer payload 为空", + emptyOffer: "配对数据为空", invalid: "无效的配对链接", - unableToPair: "无法配对 host", + unableToPair: "无法配对主机", }, alert: { failedTitle: "配对失败", @@ -1723,20 +1737,20 @@ export const zhCN: TranslationResources = { }, scan: { title: "扫描二维码", - webUnavailableTitle: "Web 上不可用", - webUnavailableBody: "Web build 不支持二维码扫描。请改用“粘贴链接”。", + webUnavailableTitle: "网页版不可用", + webUnavailableBody: "网页版不支持二维码扫描。请改用“粘贴链接”。", backToSettings: "返回设置", cameraPermissionTitle: "相机权限", - cameraPermissionBody: "允许相机访问,以扫描 daemon 提供的配对二维码。", + cameraPermissionBody: "允许相机访问,以扫描守护进程提供的配对二维码。", grantPermission: "授予权限", pairing: "正在配对...", - unableToPair: "无法配对 host", + unableToPair: "无法配对主机", errorTitle: "错误", }, device: { - loadingOffer: "正在加载配对 offer...", - failedToLoadOffer: "加载配对 offer 失败。", - relayDisabled: "Relay 未启用。启用 relay 后才能配对设备。", + loadingOffer: "正在加载配对邀请...", + failedToLoadOffer: "加载配对邀请 失败。", + relayDisabled: "中继未启用。启用中继后才能配对设备。", enableTitle: "启用中继?", enableDescription: "中继让此设备可以从任何地方连接。配对流量采用端到端加密。", relayDocs: "中继如何工作", @@ -1747,7 +1761,7 @@ export const zhCN: TranslationResources = { directConnectionHint: "不使用中继时,请通过 TCP、Tailscale 或其他 VPN 直接连接。不会生成二维码。", updateRequired: "请更新主机,以便从 Paseo Desktop 启用中继。", - unavailable: "配对 offer 不可用。", + unavailable: "配对邀请 不可用。", hint: "用手机上的 Paseo 扫描此二维码,或复制下方链接。", securityWarning: "请像保管密码一样保管此配对链接。任何获得此链接的人都可以访问此守护进程。", qrUnavailable: "二维码不可用。", @@ -1759,9 +1773,9 @@ export const zhCN: TranslationResources = { }, realtimeVoice: { actions: { - mute: "静音 realtime voice", - unmute: "取消静音 realtime voice", - stop: "停止 realtime voice 并中断 turn", + mute: "静音实时语音", + unmute: "取消静音实时语音", + stop: "停止实时语音并中断回合", }, }, rewind: { @@ -1773,7 +1787,7 @@ export const zhCN: TranslationResources = { both: "回退对话和文件", }, errors: { - failed: "回退 agent 失败", + failed: "回退智能体失败", }, }, diffViewer: { @@ -1788,7 +1802,7 @@ export const zhCN: TranslationResources = { }, downloads: { requestTokenFailed: "请求下载 token 失败。", - hostUnavailable: "下载 Host 不可用。", + hostUnavailable: "下载主机不可用。", cancelled: "下载已取消。", failed: "下载文件失败。", shareFile: "共享文件", @@ -1798,28 +1812,28 @@ export const zhCN: TranslationResources = { backdrop: "菜单背景", }, subagents: { - title: "Subagent", - pillLabelOne: "1 个 subagent", - pillLabelMany: "{{count}} 个 subagent", + title: "子智能体", + pillLabelOne: "1 个子智能体", + pillLabelMany: "{{count}} 个子智能体", pillLabelWorking: "{{count}} 个运行中", pillLabelFailed: "{{count}} 个失败", pillLabelNeedsInputOne: "1 个需要输入", pillLabelNeedsInputMany: "{{count}} 个需要输入", pillLabelReadyToReview: "{{count}} 个待查看", detachAction: "分离 {{label}}", - detachTooltip: "分离 subagent", + detachTooltip: "分离子智能体", archiveAction: "归档 {{label}}", - archiveTooltip: "归档 subagent", - archiveFinishedAction: "归档已完成的 subagent", + archiveTooltip: "归档子智能体", + archiveFinishedAction: "归档已完成的子智能体", archiveFinishedRetry: "重试 ({{failed}}/{{total}})", }, panels: { draft: { - newAgent: "新建 Agent", - creatingAgent: "正在创建 Agent", + newAgent: "新建智能体", + creatingAgent: "正在创建智能体", }, file: { - directoryMissing: "未找到 workspace 目录。", + directoryMissing: "未找到工作区目录。", loading: "正在加载文件...", noPreview: "没有可用预览", binaryPreviewUnavailable: "二进制预览不可用", @@ -1862,12 +1876,12 @@ export const zhCN: TranslationResources = { }, diff: { changesLabel: "更改", - diffLabel: "Diff", + diffLabel: "差异", changesSubtitle: "工作区差异", commitSubtitle: "提交差异", uncommittedSubtitle: "未提交的更改", baseSubtitle: "与 {{baseRef}} 比较", - directoryMissing: "未找到 workspace 目录。", + directoryMissing: "未找到工作区目录。", empty: "没有更改", loadError: "加载差异失败", capabilityMissing: "请更新主机以查看提交差异。", @@ -1876,7 +1890,7 @@ export const zhCN: TranslationResources = { toolCallDetails: { error: "错误", empty: "没有可用的更多详情", - subAgentActivity: "Sub-agent 活动", + subAgentActivity: "子智能体活动", input: "输入", output: "输出", }, @@ -1919,21 +1933,21 @@ export const zhCN: TranslationResources = { accessibilityNoData: "上下文窗口:暂无上下文数据", title: "上下文窗口", used: "已使用 {{percentage}}%", - tokens: "{{used}} / {{max}} tokens", + tokens: "{{used}} / {{max}} 个 token", sessionCost: "会话费用 {{cost}}", accessibility: "上下文窗口已使用 {{percentage}}%", }, review: { comment: { - add: "添加 review 评论", - edit: "编辑 review 评论", - delete: "删除 review 评论", - label: "Review 评论", + add: "添加审查评论", + edit: "编辑审查评论", + delete: "删除审查评论", + label: "审查评论", placeholder: "留下评论", cancel: "取消", - cancelAccessibility: "取消 review 评论", + cancelAccessibility: "取消审查评论", save: "评论", - saveAccessibility: "保存 review 评论", + saveAccessibility: "保存审查评论", }, }, settings: { @@ -1949,10 +1963,10 @@ export const zhCN: TranslationResources = { }, backToWorkspace: "返回", addHost: "添加主机", - enableBuiltInDaemon: "启用内置 daemon", + enableBuiltInDaemon: "启用内置守护进程", projects: "项目", projectList: { - hostLoadFailed: "无法从 Host {{hostName}} 加载 projects:{{message}}", + hostLoadFailed: "无法从主机 {{hostName}} 加载项目:{{message}}", editProject: "编辑 {{projectName}}", }, groupInfo: "关于 {{title}}", @@ -1971,7 +1985,45 @@ export const zhCN: TranslationResources = { diagnostics: "诊断", about: "关于", }, - layout: en.settings.layout, + layout: { + openInSidePane: { + title: "打开位置", + destinations: { + main: "主面板", + side: "侧边面板", + explorer: "资源管理器侧边栏", + }, + sources: { + explorerFiles: { + label: "点击资源管理器侧边栏中的文件", + description: "在当前工作旁打开资源管理器侧边栏中选中的文件", + }, + diffs: { + label: "点击资源管理器侧边栏或聊天中的更改", + description: "在当前工作旁打开资源管理器或智能体对话中的差异", + }, + chatFiles: { + label: "点击智能体聊天中的文件", + description: "在对话旁打开文件链接和工具调用中的文件", + }, + diffFiles: { + label: "点击差异中的文件", + description: "在差异旁打开其中选中的源文件", + }, + subagents: { + label: "点击智能体聊天中的子智能体", + description: "在父智能体旁打开子智能体", + }, + pullRequests: { + label: "点击资源管理器侧边栏中的拉取请求", + description: "在更改旁打开拉取请求详情", + }, + serviceUrls: { + label: "点击脚本的服务 URL", + }, + }, + }, + }, editor: { title: "编辑器", vimKeybindings: "Vim 键位", @@ -1995,12 +2047,12 @@ export const zhCN: TranslationResources = { hostSections: { projects: "项目", connections: "连接", - agents: "Agents", + agents: "智能体", metadata: "元数据", - workspaces: "Workspaces", - providers: "Providers", + workspaces: "工作区", + providers: "提供商", usage: "使用情况", - terminals: "Terminals", + terminals: "终端", plugins: "插件", host: "概览", }, @@ -2035,9 +2087,9 @@ export const zhCN: TranslationResources = { defaultSend: { label: "默认发送", descriptions: { - interrupt: "Agent 运行时,Enter 会中断。Command/Ctrl+Enter 会排队。", - steer: "Agent 运行时,Enter 会引导当前回合。Command/Ctrl+Enter 会排队。", - queue: "Agent 运行时,Enter 会排队。Command/Ctrl+Enter 会提交。", + interrupt: "智能体运行时,Enter 会中断。Command/Ctrl+Enter 会排队。", + steer: "智能体运行时,Enter 会引导当前回合。Command/Ctrl+Enter 会排队。", + queue: "智能体运行时,Enter 会排队。Command/Ctrl+Enter 会提交。", }, options: { interrupt: "中断", @@ -2098,19 +2150,19 @@ export const zhCN: TranslationResources = { playing: "正在播放...", playbackFailed: "播放失败:{{message}}", app: { - title: "App diagnostic", - rowTitle: "App diagnostic", - rowHint: "Collect connection, daemon, provider, desktop, and log details", - run: "Run", - running: "Running diagnostic...", - copyLabel: "diagnostic", - copyAccessibility: "Copy diagnostic", - copyFailed: "Failed to copy diagnostic", - refreshAccessibility: "Refresh diagnostic", - refreshingAccessibility: "Refreshing diagnostic", + title: "应用诊断", + rowTitle: "应用诊断", + rowHint: "收集连接、守护进程、提供商、桌面端和日志详情", + run: "运行", + running: "正在运行诊断...", + copyLabel: "诊断信息", + copyAccessibility: "复制诊断信息", + copyFailed: "复制诊断信息失败", + refreshAccessibility: "刷新诊断信息", + refreshingAccessibility: "正在刷新诊断信息", progress: { - client: "Client", - desktop: "Desktop", + client: "客户端", + desktop: "桌面端", }, }, }, @@ -2119,14 +2171,14 @@ export const zhCN: TranslationResources = { appVersion: "应用版本", whatsNewHint: "每个版本的发布说明", thisDevice: "此设备", - connectedHosts: "已连接的 Host", + connectedHosts: "已连接的主机", offline: "离线", versionDiffers: "版本与此设备不同", releaseChannel: { label: "发布通道", - description: "切换到 Beta 可更早获取更新并参与改进", - stable: "Stable", - beta: "Beta", + description: "切换到测试版可更早获取更新并参与改进", + stable: "稳定版", + beta: "测试版", }, updates: { label: "应用更新", @@ -2148,8 +2200,8 @@ export const zhCN: TranslationResources = { title: "主题", accessibilityLabel: "主题:{{value}}", options: { - light: "Light", - dark: "Dark", + light: "浅色", + dark: "深色", zinc: "Zinc", midnight: "Midnight", claude: "Claude", @@ -2190,7 +2242,7 @@ export const zhCN: TranslationResources = { contentSizeHint: "用于聊天文本和渲染后的 Markdown", contentSizeAccessibility: "内容字体大小", codeFont: "代码字体", - codeFontHint: "用于代码、diff 和终端输出。留空则使用系统默认", + codeFontHint: "用于代码、差异和终端输出。留空则使用系统默认", codeFontAccessibility: "代码字体族", codeSize: "代码字号", codeSizeHint: "用于代码、差异和终端输出", @@ -2234,19 +2286,19 @@ export const zhCN: TranslationResources = { workspaces: "项目和工作区", tabsPanes: "标签和窗格", layout: "布局", - agentInput: "Agent 输入", + agentInput: "智能体输入", }, help: { openProject: "打开项目", - newWorkspace: "新建 workspace", + newWorkspace: "新建工作区", newWorktree: "新建 worktree", archiveWorkspace: "归档工作区", newTab: "新建标签", closeCurrentTab: "关闭当前标签", - jumpToWorkspace: "跳转到 workspace", + jumpToWorkspace: "跳转到工作区", jumpToTab: "跳转到标签", - previousWorkspace: "上一个 workspace", - nextWorkspace: "下一个 workspace", + previousWorkspace: "上一个工作区", + nextWorkspace: "下一个工作区", previousTab: "上一个标签", nextTab: "下一个标签", splitPaneRight: "向右拆分窗格", @@ -2271,10 +2323,10 @@ export const zhCN: TranslationResources = { toggleFocusMode: "切换专注模式", cycleTheme: "循环切换主题", focusMessageInput: "聚焦消息输入框", - cycleAgentMode: "循环切换代理模式", + cycleAgentMode: "循环切换智能体模式", toggleVoiceMode: "切换语音模式", startStopDictation: "开始/停止听写", - interruptAgent: "中断 Agent", + interruptAgent: "中断智能体", sendMessage: "发送消息", queueMessage: "消息排队", muteUnmuteVoiceMode: "静音/取消静音语音模式", @@ -2292,7 +2344,7 @@ export const zhCN: TranslationResources = { }, commandLine: { title: "命令行", - description: "从终端控制 Agent 并运行脚本", + description: "从终端控制智能体并运行脚本", }, actions: { install: "安装", @@ -2351,9 +2403,9 @@ export const zhCN: TranslationResources = { workspaceName: "my-workspace", }, }, - notFound: "Host 未找到", + notFound: "主机未找到", badges: { - relay: "Relay", + relay: "中继", local: "本地", remoteSsh: "远程 SSH", }, @@ -2369,31 +2421,34 @@ export const zhCN: TranslationResources = { pairDevices: { title: "配对设备", rowTitle: "配对设备", - rowHint: "扫描二维码或复制链接,将手机连接到这个 Host", + rowHint: "扫描二维码或复制链接,将手机连接到这个主机", }, skills: { - ...en.settings.host.skills, - sectionTitle: "编排 skills", - title: "编排 skills", - description: "教会 Agent 通过 CLI 编排任务", + docs: "技能", + openDocs: "打开技能文档", + unavailable: "连接到此主机以管理编排技能", + unsupported: "更新此主机以管理编排技能", + sectionTitle: "编排技能", + title: "编排技能", + description: "教会智能体通过 CLI 编排任务", updateAvailable: "有更新可用", - updateTitle: "更新 Paseo skills?", - updateFallback: "将内置 skills 同步到你的机器。", - uninstallTitle: "卸载 Paseo skills?", - uninstallMessage: "会从 ~/.agents、~/.claude、~/.codex 移除所有 Paseo 编排 skills。", - choose: "选择 skills", - chooseAll: "全部 skills", - chooseAllHint: "保持安装所有内置 skills,包括以后新增的。", - chooseList: "内置 skills", - chooseEmpty: "此版本未内置 skills。", - removeTitle: "移除取消勾选的 skills?", + updateTitle: "更新 Paseo 技能?", + updateFallback: "将内置技能同步到你的机器。", + uninstallTitle: "卸载 Paseo 技能?", + uninstallMessage: "会从 ~/.agents、~/.claude、~/.codex 移除所有 Paseo 编排技能。", + choose: "选择技能", + chooseAll: "全部技能", + chooseAllHint: "保持安装所有内置技能,包括以后新增的。", + chooseList: "内置技能", + chooseEmpty: "此版本未内置技能。", + removeTitle: "移除取消勾选的技能?", removeMessage: - "将从 ~/.agents、~/.claude、~/.codex 中删除 {{skills}}。你在这些 skill 文件夹里添加的内容也会一并删除。", - saveFailed: "无法保存你的 skills 选择。", - statusFailed: "无法检查编排 skills 状态。", - updateFailed: "无法更新编排 skills。", - uninstallFailed: "无法卸载编排 skills。", - saveSelectionFailed: "无法保存编排 skills 的选择。", + "将从 ~/.agents、~/.claude、~/.codex 中删除 {{skills}}。你在这些技能文件夹里添加的内容也会一并删除。", + saveFailed: "无法保存你的技能选择。", + statusFailed: "无法检查编排技能状态。", + updateFailed: "无法更新编排技能。", + uninstallFailed: "无法卸载编排技能。", + saveSelectionFailed: "无法保存编排技能的选择。", actions: { install: "安装", installing: "正在安装...", @@ -2407,24 +2462,24 @@ export const zhCN: TranslationResources = { cancel: "取消", }, operations: { - add: "添加 skill", - update: "更新 skill", - delete: "删除 skill", + add: "添加技能", + update: "更新技能", + delete: "删除技能", }, }, orchestration: { title: "编排", - unavailable: "连接到这个 Host 以管理编排", + unavailable: "连接到这个主机以管理编排", enableTools: { - title: "启用 Paseo tools", - hint: "Agent 将能够管理 worktree、Agent 和计划", - accessibilityLabel: "注入 Paseo tools", + title: "启用 Paseo 工具", + hint: "智能体将能够管理 worktree、智能体和计划", + accessibilityLabel: "注入 Paseo 工具", }, systemPrompt: { - title: "System prompt", - hint: "为所有 Agent 添加 system prompt", - sheetTitle: "追加 system prompt", - accessibilityLabel: "追加 system prompt", + title: "系统提示词", + hint: "为所有智能体添加系统提示词", + sheetTitle: "追加系统提示词", + accessibilityLabel: "追加系统提示词", placeholder: "始终保持回复简洁。", edit: "编辑", reset: "重置", @@ -2433,63 +2488,63 @@ export const zhCN: TranslationResources = { }, }, agents: { - unavailable: "连接到这个 Host 以管理 Agent", + unavailable: "连接到这个主机以管理智能体", }, workspaces: { - unavailable: "连接到这个 Host 以管理 Workspace", + unavailable: "连接到这个主机以管理工作区", }, terminalProfiles: { - unavailable: "Connect to this host to manage terminal profiles", - sectionTitle: "Terminal profiles", - editProfile: "Edit profile", - addProfileTitle: "Add terminal profile", - editProfileTitle: "Edit terminal profile", + unavailable: "连接到此主机以管理终端配置", + sectionTitle: "终端配置", + editProfile: "编辑配置", + addProfileTitle: "添加终端配置", + editProfileTitle: "编辑终端配置", namePlaceholder: "Claude Code", commandPlaceholder: "claude", argsPlaceholder: "--dangerously-skip-permissions", - nameLabel: "Name", - commandLabel: "Command", - argsLabel: "Arguments", - nameRequired: "Name is required", - commandRequired: "Command is required", - argsHint: "Space-separated arguments passed to the command", - saving: "Saving...", - remove: "Remove", - removeConfirmTitle: "Remove profile?", - removeConfirmMessage: 'Remove "{{name}}"?', - moveUp: "Move up", - moveDown: "Move down", - save: "Save", - emptyState: "No profiles yet. Add one to launch terminals with a specific command.", + nameLabel: "名称", + commandLabel: "命令", + argsLabel: "参数", + nameRequired: "名称必填", + commandRequired: "命令必填", + argsHint: "传递给命令的参数,以空格分隔", + saving: "正在保存...", + remove: "移除", + removeConfirmTitle: "移除配置?", + removeConfirmMessage: "移除「{{name}}」?", + moveUp: "上移", + moveDown: "下移", + save: "保存", + emptyState: "暂无配置。添加配置后即可使用指定命令启动终端。", }, agentProfiles: { - sectionTitle: "Agent 配置", - unavailable: "连接到这个 Host 以管理 Agent 配置", - unsupported: "此 Host 运行的 Daemon 尚不支持 Agent 配置", - emptyState: "还没有配置。添加一个以便使用保存的 Provider 和 Model 启动 Agent。", - addProfileTitle: "添加 Agent 配置", + sectionTitle: "智能体配置", + unavailable: "连接到这个主机以管理智能体配置", + unsupported: "此主机运行的守护进程尚不支持智能体配置", + emptyState: "还没有配置。添加一个以便使用保存的提供商和模型启动智能体。", + addProfileTitle: "添加智能体配置", newProfile: "新建配置", editProfile: "编辑配置", - editProfileTitle: "编辑 Agent 配置", + editProfileTitle: "编辑智能体配置", nameLabel: "名称", namePlaceholder: "UI 工作", iconLabel: "图标", noIcon: "无", - providerLabel: "Provider", - providerPlaceholder: "选择一个 Provider", - noProviders: "此 Host 上没有可用的 Provider", - modelLabel: "Model", - noModels: "此 Provider 没有可选择的 Model", - modeLabel: "Mode", - noModes: "此 Provider 没有可选择的 Mode", - thinkingLabel: "Thinking", - noThinkingOptions: "此 Model 没有 Thinking 级别", - featuresLabel: "Features", - featureCount: "{{count}} 个 Feature", - featureCountOne: "{{count}} 个 Feature", + providerLabel: "提供商", + providerPlaceholder: "选择一个提供商", + noProviders: "此主机上没有可用的提供商", + modelLabel: "模型", + noModels: "此提供商没有可选择的模型", + modeLabel: "模式", + noModes: "此提供商没有可选择的模式", + thinkingLabel: "思考", + noThinkingOptions: "此模型没有思考级别", + featuresLabel: "功能", + featureCount: "{{count}} 个功能", + featureCountOne: "{{count}} 个功能", notesLabel: "适用场景", notesPlaceholder: "用于 UI 工作 — 组件、布局和设计 token。", - notesHint: "帮助 Agent 在启动另一个 Agent 时选择此配置。", + notesHint: "帮助智能体在启动另一个智能体时选择此配置。", save: "保存", saving: "保存中...", remove: "移除", @@ -2501,87 +2556,84 @@ export const zhCN: TranslationResources = { daemon: { rename: { editLabel: "编辑标签", - title: "重命名 Host", - placeholder: "我的 Host", + title: "重命名主机", + placeholder: "我的主机", submit: "重命名", }, restart: { - title: "重启 Daemon", - hint: "重启 Daemon 进程。应用会自动重新连接", + title: "重启守护进程", + hint: "重启守护进程。应用会自动重新连接", confirm: "重启", confirmTitle: "重启 {{name}}", - confirmMessage: "这会重启 Daemon。其上运行的 Agent 会继续运行;应用会自动重新连接。", + confirmMessage: "这会重启守护进程。其上运行的智能体会继续运行;应用会自动重新连接。", restarting: "正在重启...", unableToReconnectTitle: "无法重新连接", unableToReconnectMessage: "{{name}} 没有重新上线。请确认它已重启。", - unavailableTitle: "Host 不可用", - unavailableMessage: "这个 Host 尚未连接。请等待它上线后再重启。", - offlineTitle: "Host 离线", - offlineMessage: "这个 Host 已离线。Paseo 会自动重连,请等它恢复在线后再重启。", + unavailableTitle: "主机不可用", + unavailableMessage: "这个主机尚未连接。请等待它上线后再重启。", + offlineTitle: "主机离线", + offlineMessage: "这个主机已离线。Paseo 会自动重连,请等它恢复在线后再重启。", requestFailedTitle: "错误", - requestFailedMessage: "发送重启请求失败。Paseo 会自动重连,请在 Host 显示在线后重试。", + requestFailedMessage: "发送重启请求失败。Paseo 会自动重连,请在主机显示在线后重试。", dialogFailedMessage: "无法打开重启确认对话框。", }, update: { - desktopManagedHint: "此 Daemon 由 Paseo Desktop 管理。请在 Host 上更新 Paseo Desktop。", - title: "Update daemon", - hint: "Update the daemon to the latest version and restart it", - confirm: "Update", - confirmTitle: "Update {{name}}", - confirmMessage: - "This will update the daemon to the latest version and restart it. Running agents will be briefly interrupted.", - updating: "Updating...", - phaseStarting: "Preparing update...", - phaseDownloading: "Downloading packages...", - phaseInstalling: "Installing...", - phaseComplete: "Update complete, restarting...", - unableToReconnectTitle: "Unable to reconnect", - unableToReconnectMessage: - "{{name}} did not come back online after updating. Please verify the daemon restarted.", - unavailableTitle: "Host unavailable", - unavailableMessage: - "This host is not connected. Wait for it to come online before updating.", - offlineTitle: "Host offline", - offlineMessage: "This host is offline. Wait until it is back online before updating.", - requestFailedTitle: "Update failed", - requestFailedMessage: "Failed to update the daemon: {{error}}", - dialogFailedMessage: "Unable to open the update confirmation dialog.", + desktopManagedHint: "此守护进程由 Paseo Desktop 管理。请在主机上更新 Paseo Desktop。", + title: "更新守护进程", + hint: "将守护进程更新至最新版本并重启", + confirm: "更新", + confirmTitle: "更新 {{name}}", + confirmMessage: "这会将守护进程更新至最新版本并重启。正在运行的智能体将短暂中断。", + updating: "正在更新...", + phaseStarting: "正在准备更新...", + phaseDownloading: "正在下载软件包...", + phaseInstalling: "正在安装...", + phaseComplete: "更新完成,正在重启...", + unableToReconnectTitle: "无法重新连接", + unableToReconnectMessage: "{{name}} 更新后未重新上线。请确认守护进程已重启。", + unavailableTitle: "主机不可用", + unavailableMessage: "此主机尚未连接。请等待它上线后再更新。", + offlineTitle: "主机离线", + offlineMessage: "此主机已离线。请等待它恢复在线后再更新。", + requestFailedTitle: "更新失败", + requestFailedMessage: "更新守护进程失败:{{error}}", + dialogFailedMessage: "无法打开更新确认对话框。", }, dangerZone: "危险区域", remove: { - title: "移除 Host", + title: "移除主机", localTitle: "移除 localhost 连接", - hint: "从此设备移除这个 Host 及其已保存连接", - localHint: "从此设备移除 localhost,并停止内置 Daemon", - localConfirmTitle: "移除 localhost 连接并停止 Daemon?", + hint: "从此设备移除这个主机及其已保存连接", + localHint: "从此设备移除 localhost,并停止内置守护进程", + localConfirmTitle: "移除 localhost 连接并停止守护进程?", confirmMessage: "移除 {{name}}?这会删除其已保存连接。", localConfirmMessage: - "这会移除 localhost 连接、关闭内置 Daemon 管理,并停止托管 Daemon。远程 Host 会保持连接。", + "这会移除 localhost 连接、关闭内置守护进程管理,并停止托管守护进程。远程主机会保持连接。", errorTitle: "错误", - errorMessage: "无法移除 Host", + errorMessage: "无法移除主机", localErrorMessage: "无法移除 localhost 连接", }, }, }, providers: { - title: "Providers", - addProvider: "添加 Provider", - providerDetails: "{{name}} Provider 详情", + title: "提供商", + addProvider: "添加提供商", + providerDetails: "{{name}} 提供商详情", enableProvider: "启用 {{name}}", - unavailable: "连接到这个 Host 以查看 Providers", + unavailable: "连接到这个主机以查看提供商", loading: "正在加载...", - addErrorTitle: "无法添加 Provider", - updateErrorTitle: "无法更新 Provider", + addErrorTitle: "无法添加提供商", + updateErrorTitle: "无法更新提供商", actions: { - menu: "{{name}} actions", - remove: "Remove provider", - removing: "Removing...", + menu: "{{name}} 的操作", + remove: "移除提供商", + removing: "正在移除...", }, remove: { - confirmTitle: "Remove {{name}}?", - confirmMessage: "This deletes the provider entry from config.json. It cannot be undone.", - confirm: "Remove", - errorTitle: "Unable to remove provider", + confirmTitle: "移除 {{name}}?", + confirmMessage: "这会删除 config.json 中的提供商配置,且无法撤销。", + confirm: "移除", + errorTitle: "无法移除提供商", }, statuses: { disabled: "已禁用", @@ -2591,24 +2643,24 @@ export const zhCN: TranslationResources = { notInstalled: "未安装", }, models: { - one: "1 个 Model", - many: "{{count}} 个 Model", - addModel: "添加 Model", - addCustomTitle: "添加自定义 Model", - modelId: "Model ID", + one: "1 个模型", + many: "{{count}} 个模型", + addModel: "添加模型", + addCustomTitle: "添加自定义模型", + modelId: "模型 ID", modelIdPlaceholder: "例如 openai/gpt-5", add: "添加", adding: "正在添加...", - failedToSave: "保存 Model 失败", + failedToSave: "保存模型失败", removeModel: "移除 {{id}}", - searchPlaceholder: "搜索 Models", - loading: "正在加载 Models...", + searchPlaceholder: "搜索模型", + loading: "正在加载模型...", retry: "重试", retrying: "正在重试...", - noSearchMatches: "没有匹配搜索的 Model", - noneDetected: "未检测到 Model", + noSearchMatches: "没有匹配搜索的模型", + noneDetected: "未检测到模型", discovered: "已发现", - custom: "自定义 Models", + custom: "自定义模型", updated: "已更新 {{time}}", }, diagnostic: { @@ -2628,76 +2680,76 @@ export const zhCN: TranslationResources = { }, }, project: { - noEditableTarget: "此项目无法在这个 Host 上编辑。", - backToProjects: "返回 Projects", + noEditableTarget: "此项目无法在这个主机上编辑。", + backToProjects: "返回项目", edit: { - title: "编辑 Project", + title: "编辑项目", name: "名称", - nameLabel: "Project 名称", + nameLabel: "项目名称", icon: "图标", chooseImage: "选择图片", useAutomatic: "使用自动", imageUrl: "图片或网站 URL", save: "保存更改", - savedToast: "Project 已更新", + savedToast: "项目已更新", }, readFailures: { invalidTitle: "无法解析 paseo.json", invalidDescription: "修复磁盘上的文件,然后重新加载。", - missingTitle: "这个 Host 没有这个 Project", - missingSingleHost: "所选 Host 没有这个 Project 的记录。", + missingTitle: "这个主机没有这个项目", + missingSingleHost: "所选主机没有这个项目的记录。", transportTitle: "无法加载 paseo.json", - transportFallback: "Host 没有响应。", + transportFallback: "主机没有响应。", failedTitle: "无法加载 paseo.json", failedDescription: "重新加载以重试。", }, worktree: { - title: "Worktree 生命周期 hooks", - info: "为此 Project 创建或清理 worktree 时运行的命令", + title: "Worktree 生命周期钩子", + info: "为此项目创建或清理 worktree 时运行的命令", docs: "文档", docsTooltip: "查看命令可用的环境变量和更多细节", - setup: "Setup", - setupAccessibility: "Worktree setup 命令", + setup: "初始化", + setupAccessibility: "Worktree 初始化命令", uncommittedTitle: "提交 paseo.json 更改", uncommittedDescription: "新工作树使用所选基础分支中的设置脚本。", - teardown: "Teardown", - teardownAccessibility: "Worktree teardown 命令", + teardown: "清理", + teardownAccessibility: "Worktree 清理命令", }, scripts: { - title: "Scripts", - info: "可从此 Project 中任意 Agent 启动的长期服务和一次性命令", - empty: "还没有 scripts。", - untitled: "未命名 script", + title: "脚本", + info: "可从此项目中任意智能体启动的长期服务和一次性命令", + empty: "还没有脚本。", + untitled: "未命名脚本", port: "端口 {{port}}", - menuAccessibility: "打开 script 菜单", - removeTitle: "移除 script?", + menuAccessibility: "打开脚本菜单", + removeTitle: "移除脚本?", removeMessage: "移除 {{name}}?", - removeFallbackName: "这个 script", + removeFallbackName: "这个脚本", name: "名称", command: "命令", - nameAccessibility: "Script 名称", - commandAccessibility: "Script 命令", + nameAccessibility: "脚本名称", + commandAccessibility: "脚本命令", nameRequired: "名称必填", commandRequired: "命令必填", - newScript: "新建 script", + newScript: "新建脚本", editScript: "编辑 {{name}}", runAsService: "作为服务运行", serviceHint: "Paseo 会监管该进程,并通过 $PASEO_PORT 分配端口", actions: { - add: "添加 script", + add: "添加脚本", edit: "编辑", remove: "移除", }, }, metadata: { title: "元数据生成", - info: "注入到 Paseo 用来生成元数据的 AI prompts 中的 Project 专属指令,可用于强制执行团队约定,例如分支命名、提交风格或 PR 格式", + info: "注入到 Paseo 用来生成元数据的 AI 提示词中的项目专属指令,可用于强制执行团队约定,例如分支命名、提交风格或 PR 格式", branchName: "分支名称", branchNamePlaceholder: "分支以 feat/ 或 fix/ 开头,个人分支使用 mb/", commitMessage: "提交消息", - commitMessagePlaceholder: "使用带 scope 的 Conventional Commits", - pullRequest: "Pull requests", - pullRequestPlaceholder: "先写一段摘要,并包含 Test plan 部分", + commitMessagePlaceholder: "使用带作用域的 Conventional Commits", + pullRequest: "拉取请求", + pullRequestPlaceholder: "先写一段摘要,并包含测试计划部分", }, writeFailures: { staleTitle: "磁盘上的配置已变更", @@ -2709,7 +2761,7 @@ export const zhCN: TranslationResources = { reload: "重新加载", tryAgain: "重试", save: "保存", - saved: "Project 已保存", + saved: "项目已保存", saving: "正在保存...", cancel: "取消", },