From 81495f4ba09c2cc7fcf3ff1bbcc3aa2e3dd0c2f1 Mon Sep 17 00:00:00 2001 From: Wooseong Kim <2222333+innocarpe@users.noreply.github.com> Date: Sun, 26 Jul 2026 17:58:24 +0900 Subject: [PATCH] fix(i18n/zh): correct technical literals and clear sense errors (#10048) --- src/renderer/src/i18n/locales/zh.json | 86 +++++++++---------- ...-technical-literal-mistranslations.test.ts | 63 ++++++++++++++ 2 files changed, 106 insertions(+), 43 deletions(-) create mode 100644 src/renderer/src/i18n/zh-technical-literal-mistranslations.test.ts diff --git a/src/renderer/src/i18n/locales/zh.json b/src/renderer/src/i18n/locales/zh.json index 182cb5dd573..deb949c95a5 100644 --- a/src/renderer/src/i18n/locales/zh.json +++ b/src/renderer/src/i18n/locales/zh.json @@ -878,7 +878,7 @@ "f2d02cdf8c": "已查看文件", "1257d1435d": "显示文件树", "a341343303": "已添加评审评论。", - "d1fa2cf888": "没有PR负责人 SHA 无法发表评论。", + "d1fa2cf888": "没有 PR head SHA 就无法发表评论。", "829674460a": "Diff 不可用,因为 PR commit SHA 丢失。", "af924014f8": "已查看", "2d89a38d9d": "{{value0}} {{value1}} 为已查看", @@ -1167,7 +1167,7 @@ "cddd9b04a7": "加载标签", "23886c7eec": "添加标签", "7f7b89b631": "标签: {{value0}}", - "b2376d0179": "正在加载会员", + "b2376d0179": "正在加载成员", "866316f22c": "未分配", "b5675b0694": "保存", "ceeb8c6153": "清除", @@ -1375,7 +1375,7 @@ "89e80af1c7": "已查看文件", "319cf2d54b": "显示文件树", "eff839f438": "已添加评审评论。", - "d8c3ba91c4": "没有PR负责人 SHA 无法发表评论。", + "d8c3ba91c4": "没有 PR head SHA 就无法发表评论。", "74660bd80b": "Diff 不可用,因为 PR commit SHA 丢失。", "2e528e1c2d": "已查看", "ff84e1f54c": "{{value0}} {{value1}} 为已查看", @@ -1534,7 +1534,7 @@ "09623359b9": "开始日期", "7d08e8be0f": "开始", "af9e877f30": "无标签", - "d6cda23ef1": "会员", + "d6cda23ef1": "成员", "cfaadb6b22": "无负责人", "34da8ac06c": "负责人", "579f98afcd": "添加简短摘要...", @@ -1573,7 +1573,7 @@ "8675cd6188": "Linear", "733b8f2421": "Linear/视图", "bc06ed0fb0": "返回视图", - "3cb855080f": "意见", + "3cb855080f": "视图", "b4e10f096e": "所有者", "a04fe7ba73": "可见性", "0aa8525950": "模型", @@ -1694,7 +1694,7 @@ "50387522d7": "没有分组", "d747aed72f": "看板", "a6f7e93d7f": "列表", - "e78ec261ed": "意见", + "e78ec261ed": "视图", "727069bee5": "项目", "137e2a8a01": "PR", "18451e99df": "完成", @@ -1874,7 +1874,7 @@ "8bc9e17d8f": "Show details" }, "WorktreeJumpPalette": { - "ac037cfac2": "手机", + "ac037cfac2": "移动", "75499e01d9": "关闭", "66b5a67bee": "Esc键", "45def60329": "打开", @@ -2111,7 +2111,7 @@ "d6aeb2012b": "显示议题来自", "787c970baf": "议题来源", "643d7e9496": "上游", - "51d1608920": "起源", + "51d1608920": "origin", "cdc9bd64fa": "紧凑", "30b2c9df91": "上游" }, @@ -2254,7 +2254,7 @@ "8bbecb2510": "没有任何", "e1fa97d21d": "选择一个项目以查看其概述。", "1748d3b9af": "标签", - "65bda65159": "会员", + "65bda65159": "成员", "c5f79616c3": "团队", "25a2196732": "目标", "3fb6473111": "开始", @@ -2527,7 +2527,7 @@ }, "TerminalQuickCommandDialog": { "925b8e0f6e": "高级", - "97e96cc027": "/目标", + "97e96cc027": "/goal", "e604bd40d6": "支持技能、文件路径和内置命令,例如", "79af0c0841": "npm run dev", "577a342c7d": "要求智能体调查此工作区", @@ -3008,7 +3008,7 @@ "996295bff2": "孤儿终端", "92924a14e3": "查看非活跃工作区 ({{value0}})", "27a74f91f0": "现在没有任何运行", - "1b24a32d3a": "记忆", + "1b24a32d3a": "内存", "298f4be7f2": "中央处理器", "2aa2de6cb9": "姓名", "30ff2c3c31": "{{value0}} 个孤立项", @@ -3197,7 +3197,7 @@ "eee5240810": "工作区已删除", "9afc97f9a3": "工作区已删除", "792a214457": "删除工作区", - "a998501630": "力量", + "a998501630": "强制", "9155381019": "疏", "f39d291997": "选择", "16988df079": "没有找到文件。", @@ -3946,7 +3946,7 @@ "f3e2b868fb": "运行钩子", "43b7bec4cd": "别跑", "c494b3ccb1": "在", - "79afc6772b": "Orca.yaml", + "79afc6772b": "orca.yaml", "531689199b": "永远信任", "bf800b7e04": "。仅当您信任时才运行", "831f2cd9f0": "在你的机器上运行", @@ -4023,7 +4023,7 @@ "b56d1322f7": "找到一个设置命令", "aef6c0a213": "保存已检测的命令,以便在 Orca 创建工作树时运行它。", "660cdc17f8": "设置脚本。添加本地命令,或在“设置”中更改源。", - "8f6be51aa1": "Orca.yaml", + "8f6be51aa1": "orca.yaml", "bb879db364": "此仓库忽略共享", "0155fb9ed3": "目前无法验证此仓库的设置脚本。", "eefa756190": "手动配置", @@ -4321,7 +4321,7 @@ "2931b42b09": "状态:草案 {{value0}}", "e888362def": "状态: 关闭", "f394b3e86e": "状态:合并", - "af2b07bda5": "州:{{value0}}", + "af2b07bda5": "状态:{{value0}}", "29df45afa2": "MR" }, "WorktreeCardPorts": { @@ -4418,7 +4418,7 @@ "9c1d1e9b71": "评论", "5ae06f40fd": "粘贴PR URL,或输入数字。留空以删除链接。", "077a4f7b5c": "PR # 或 GitHub URL", - "1b91db7e14": "生长激素受体", + "1b91db7e14": "GH PR", "7c454be4c5": "粘贴议题 URL,或输入数字。留空以删除链接。", "029ea5ec57": "打开 GitHub 议题", "741279e7b7": "议题编号或 GitHub URL", @@ -5115,7 +5115,7 @@ "1c9a9679ec": "{{value0}} 可用性", "0d9e293a02": "刷新", "c9b33eb5c0": "刷新中…", - "13647f9f80": "重新读取您的 shell 路径并重新检测已安装的智能体", + "13647f9f80": "重新读取 shell PATH 并重新检测已安装的智能体", "dc4a2ffdc0": "扩展命令覆盖", "cea7d97be1": "折叠命令覆盖", "db9e9e5887": "自定义命令", @@ -5856,7 +5856,7 @@ "92f0b4e472": "清除", "9f741627a7": "Kagi 会话链接已清除。", "d5c8b94c5b": "保存", - "ff450194cd": "卡吉私人会话链接", + "ff450194cd": "Kagi 私密会话链接", "e383683485": "https://kagi.com/search?token=...", "81409d9362": "Kagi 身份验证的可选私人会话链接。", "3e5b7c6c25": "Kagi 会话链接已保存。", @@ -6866,8 +6866,8 @@ "2de6b5a699": "使用所选光标形状的闪烁变体。", "74736cc9b1": "闪烁 Cursor", "2e5aec3cf6": "强调", - "52854a5608": "堵塞", - "e070e8aeba": "酒吧", + "52854a5608": "块状", + "e070e8aeba": "竖线", "db270cc9a9": "Cursor 形状", "d455f2ef4f": "Orca 终端窗格的默认光标外观。", "abcb4dd019": "终端光标", @@ -7009,9 +7009,9 @@ "d06664e889": "黑暗的" }, "TerminalThemeSections": { - "db210115c5": "灯光模式预览", + "db210115c5": "浅色模式预览", "5e0c24b5c8": "控制浅色模式下窗格之间的分割分隔线。", - "ec2e33ad80": "分光器颜色", + "ec2e33ad80": "浅色模式分隔线颜色", "d56af60e6f": "选择 Orca 处于浅色模式时使用的主题。", "8273bc75d7": "浅色主题", "bc8e8a251a": "深色模式预览", @@ -7386,7 +7386,7 @@ "90bdc043ea": "磁盘", "96b4fb0064": "终端", "4ddbde4999": "中央处理器", - "4355f18ac6": "记忆", + "4355f18ac6": "内存", "9c4d5f0894": "经理", "c690a15849": "资源", "81ef5abc2f": "在状态栏中显示 CPU、内存、终端会话和工作区磁盘使用情况。", @@ -8614,7 +8614,7 @@ "7286cd2566": "单词", "3ab64c47d8": "双击选择时将字符视为单词边界。", "957a0203fc": "单词分隔符", - "56fff3d113": "记忆", + "56fff3d113": "内存", "fffdff40a7": "缓冲", "rows": "行", "f7d56b6281": "保留的桌面终端行数。", @@ -8622,11 +8622,11 @@ "411229c636": "浅色", "781f49d942": "分隔线", "77d9f9cd55": "控制浅色模式下窗格之间的分割分隔线。", - "595b97b446": "分光器颜色", + "595b97b446": "浅色模式分隔线颜色", "7718d70356": "预览", "1dee533bd9": "选择 Orca 处于浅色模式时使用的主题。", "1d89457764": "浅色主题", - "da864e6cec": "灯光模式", + "da864e6cec": "浅色模式", "f268092ee3": "浅色模式可以使用自己的终端主题。", "match_dark_mode_title": "匹配深色模式", "f785374072": "深色", @@ -9428,7 +9428,7 @@ "sidebar": { "BulkActionBar": { "79a9f5f712": "取消暂存(", - "ef5f5bd06e": "阶段 (", + "ef5f5bd06e": "暂存(", "60ed678138": "已选择" }, "ChecksPanel": { @@ -9609,7 +9609,7 @@ "d57545ff92": "与远程相同", "b950b1948b": "本地端口", "9e5a4118b0": "远程端口", - "c9d106547a": "向前", + "c9d106547a": "转发", "c7e920aa7c": "公开为 {{value0}}", "e740075063": "移除", "b3548e59f4": "编辑", @@ -9630,7 +9630,7 @@ "153145e675": "证据", "c7b4702b7b": "工作区", "57d930fa45": "PID", - "5dd86dcf2f": "过程", + "5dd86dcf2f": "进程", "b1ff94fa27": "协议", "729be0b4e5": "种类", "0f1d8cd324": "绑定", @@ -9792,7 +9792,7 @@ "eae7a1da5f": "无法清除笔记。", "657e0c90ad": "{{value0}} 注{{value1}}", "df5040e3c3": "取消暂存", - "8cde1a2fb0": "阶段", + "8cde1a2fb0": "暂存", "d54dd48b0b": "放弃更改", "989f3d5e34": "恢复文件", "2830dd64a2": "已删除", @@ -9837,7 +9837,7 @@ "2f609a2e7c": "删除所有未跟踪的", "9bb062a886": "未提交", "9febd8ab5f": "创建_pr", - "f62ce91ade": "起源", + "f62ce91ade": "origin", "3a231c845b": "未知", "3baf6c77b4": "将所有笔记复制到剪贴板", "72f2bea3f4": "展开注释", @@ -9937,7 +9937,7 @@ "1bc0bdbb5e": "启动:", "7ec6abbf2a": "重置", "f4f3c9ca4a": "提示词模板", - "fe119187bb": "——模范十四行诗", + "fe119187bb": "--model sonnet", "bc8dc39f4b": "CLI 参数", "b99c33cec5": "设置", "15c5d85706": "智能体", @@ -9968,7 +9968,7 @@ "25fcd8e49a": "保存默认值", "d91b0a189d": "保存预设", "1f6fcfb6cf": "提示词模板", - "551ffd111b": "——模范十四行诗", + "551ffd111b": "--model sonnet", "4eab815004": "CLI 参数", "914c8f6ac2": "自定义命令", "cce2cbd01d": "选择智能体", @@ -11173,7 +11173,7 @@ "da121ba48d": "计划.md", "e4befee569": "Shell", "606aa93192": "文件", - "94febb0976": "源头控制", + "94febb0976": "源代码管理", "8d6516312d": "2 个终端 · Claude 活跃", "8432787c4e": "壮举/手机页面", "8fd998acd3": "返回" @@ -11446,7 +11446,7 @@ "00078a6134": "在设置中查看", "14327073cc": "保存", "88469e926b": "设置脚本", - "5c5b65044e": "即插即用安装", + "5c5b65044e": "pnpm install", "a7463915b6": "无法保存设置脚本", "6299297dac": "设置脚本已保存", "f0bbf7da77": "尝试一下", @@ -12179,7 +12179,7 @@ "9e384d48dc": "Swift", "3009f722b9": "SQL", "d01f55be57": "shell", - "5af8251002": "社会保障体系", + "5af8251002": "SCSS", "e72e6b03f4": "Rust", "96182a2f64": "Ruby", "2391f9cda9": "Python", @@ -12690,7 +12690,7 @@ "a6914ee43f": "收回", "f4ecd61552": "该选项卡由您的手机控制。收回来在桌面上使用它。", "d9768ec642": "浏览器输入已暂停", - "20539eca03": "手机设备正在推动该浏览器的发展" + "20539eca03": "移动端正在控制此浏览器" }, "BrowserPane": { "1ded0d3168": "复制截图", @@ -12705,7 +12705,7 @@ "a3508d7e6e": "{{value0}} 注释{{value1}} 准备就绪。选择另一个元素或复制所有反馈。", "f796c774a4": "在上面输入 URL 即可开始浏览。", "366bf5d62c": "新标签", - "1c78adc73d": "对外开放", + "1c78adc73d": "在外部打开", "da68d35f7b": "在默认浏览器中打开失败页面", "93be92f8d1": "复制地址", "3c085f638d": "复制失败页面 URL", @@ -12874,7 +12874,7 @@ "b28b140eaf": "工作区", "0d17f4ca8f": "选择项目", "02d351877e": "项目", - "a4ac8fcc62": "/目标", + "a4ac8fcc62": "/goal", "827b25a81e": "支持技能、文件路径和内置命令,例如", "6d778190b7": "每周运行依赖项审计并总结有风险的更改。", "058c23cb3f": "提示词", @@ -12891,7 +12891,7 @@ "58f56b73d9": "自动化名称", "1d9826933e": "工作日仓库审计", "4133d33862": "创建自动化", - "0a75e5e2fa": "创建爱马仕自动化", + "0a75e5e2fa": "创建 Hermes 自动化", "03142e7721": "编辑 Hermes 自动化", "17086b48ee": "编辑自动化" }, @@ -12995,7 +12995,7 @@ "b11170a008": "无法保存自动化。", "2a20596d6b": "自动化已保存。", "244727e655": "自动化已更新。", - "77b81bc4ac": "爱马仕自动化创建。", + "77b81bc4ac": "Hermes 自动化创建。", "08efc3ae12": "Hermes 自动化已更新。", "e431bb85d4": "选择与此 Hermes 自动化位于同一主机上的工作区。", "32534e7c9c": "保存前选择一个可用的工作区。", @@ -13008,7 +13008,7 @@ "8705757e27": "工作", "376631ef2b": "恢复", "b457436d6a": "暂停", - "0ae52dd760": "爱马仕", + "0ae52dd760": "Hermes", "e059042585": "只读", "aecdc3681f": "易于管理", "8500baacb4": "外部来源", @@ -13046,7 +13046,7 @@ "c6695e6fbd": "外部自动化", "5524365227": "OpenClaw", "766abf833c": "Hermes", - "bf5f67b590": "爱马仕", + "bf5f67b590": "Hermes", "e66091daf4": "运行", "8e9165af08": "执行", "2b0adbce21": "已暂停", diff --git a/src/renderer/src/i18n/zh-technical-literal-mistranslations.test.ts b/src/renderer/src/i18n/zh-technical-literal-mistranslations.test.ts new file mode 100644 index 00000000000..9c4c080e76b --- /dev/null +++ b/src/renderer/src/i18n/zh-technical-literal-mistranslations.test.ts @@ -0,0 +1,63 @@ +/** + * Issue #9574 — high-confidence Simplified Chinese semantic fixes. + * Guards the anchor GH PR mistranslation and a sample of technical literals / + * clear sense errors so bootstrap re-translation cannot silently regress them. + */ +import { describe, expect, it } from 'vitest' +import zh from './locales/zh.json' + +function findByKey(node: unknown, key: string): string | undefined { + if (!node || typeof node !== 'object') { + return undefined + } + if (Array.isArray(node)) { + for (const item of node) { + const found = findByKey(item, key) + if (found !== undefined) { + return found + } + } + return undefined + } + const record = node as Record + if (typeof record[key] === 'string') { + return record[key] as string + } + for (const value of Object.values(record)) { + const found = findByKey(value, key) + if (found !== undefined) { + return found + } + } + return undefined +} + +describe('zh technical literal / sense fixes (#9574)', () => { + it('keeps GH PR as a technical literal (not 生长激素受体)', () => { + expect(findByKey(zh, '1b91db7e14')).toBe('GH PR') + }) + + it('keeps CLI / product technical strings un-translated', () => { + expect(findByKey(zh, 'fe119187bb')).toBe('--model sonnet') + expect(findByKey(zh, '5c5b65044e')).toBe('pnpm install') + expect(findByKey(zh, '5af8251002')).toBe('SCSS') + expect(findByKey(zh, '97e96cc027')).toBe('/goal') + expect(findByKey(zh, 'f62ce91ade')).toBe('origin') + expect(findByKey(zh, '79afc6772b')).toBe('orca.yaml') + }) + + it('uses the correct sense for short UI verbs/nouns', () => { + expect(findByKey(zh, 'ac037cfac2')).toBe('移动') // Move, not 手机 + expect(findByKey(zh, '1b24a32d3a')).toBe('内存') // Memory, not 记忆 + expect(findByKey(zh, '8cde1a2fb0')).toBe('暂存') // Stage, not 阶段 + expect(findByKey(zh, 'af2b07bda5')).toBe('状态:{{value0}}') // State, not 州 + expect(findByKey(zh, 'e070e8aeba')).toBe('竖线') // Bar cursor + expect(findByKey(zh, '52854a5608')).toBe('块状') // Block cursor + }) + + it('preserves brand names in product copy', () => { + expect(findByKey(zh, '855a76343a')).toBe('从 Ghostty 导入') + expect(findByKey(zh, '0a75e5e2fa')).toBe('创建 Hermes 自动化') + expect(findByKey(zh, 'ff450194cd')).toBe('Kagi 私密会话链接') + }) +})