fix(i18n): stop the repair policy de-localizing CJK UI labels

The build-time repair layer carried overrides that rewrite already-correct CJK
values back to English. Most are inert against today's catalogs but fire on the
next regeneration, so they read as latent regressions rather than policy:

- zh workspace status picker (Play/Flag/Zinc/Rose/Emerald/Amber/Violet/Sky/
  Blue/Neutral) and `sheet`/`page` were pinned to English while every sibling
  option, and ko/ja/es, stay translated — half a Chinese picker.
- The zh `蓝色的`/`琥珀色`/`中性的` phrase fixes correctly flagged the adjectival
  的 form but replaced it with English instead of the bare color noun.
- ja `Play` was pinned to English though the catalog already reads 再生.
- A value-wide zh `Open: '进行中'` mapped every "Open" to "in progress",
  including the button that opens an MCP config file. "Open" is a verb (打开)
  on buttons and a state (开放) beside 已关闭, so no single mapping fits.

Catalog corrections in the same area:

- The GitHub/PR state picker key override read 진행 중 / 进行中 for ko and zh
  while ja already had the correct オープン; now 열림 / 开放, matching 닫힘 /
  已关闭 on the sibling entry.
- The terminal cursor-color group is the on-screen cursor, not the Cursor
  editor; ja already had カーソル, ko/zh now get 커서/光标 instead of "Cursor".
- Tailwind swatch labels 天空 (the sky) and 锌 (the metal) do not read as
  colors; now 天蓝/锌灰, and ja 空 becomes 空色.
- The ko disk-usage heading was pinned to bare "Space" while its own
  description says 저장 공간; both now use 저장 공간.

Two policy tests pinned the Play de-localization. They diagnosed the input
correctly — 玩 / 遊ぶ are wrong for a play icon — so the expectations move to
播放 / 再生 rather than English.

Destructive drift (localized -> English on regeneration) drops from 40 to 21
for zh, 6 to 5 for ja, and 5 to 3 for ko. What remains is deliberate: search
qualifiers, path and filename literals, and product names.
This commit is contained in:
Neil
2026-08-04 02:57:08 -07:00
parent cd02c21c4b
commit 4188a9dd3e
12 changed files with 63 additions and 34 deletions
@@ -134,5 +134,30 @@ export const CROSS_LOCALE_KEY_OVERRIDES = {
'auto.hooks.useSettingsNavigationMetadata.40d80bad8a': {
zh: '测试版',
ja: 'ベータ'
},
// Issue/PR state picker; it sits beside 已关闭, so 进行中 is a different state.
'auto.components.PullRequestPage.7b8f6bf6d8': {
zh: '开放'
},
// This "Open" is the button that opens the config file, not an issue state.
'auto.components.settings.McpConfigFileRow.e720c139cd': {
zh: '打开'
},
// Terminal cursor-color group: the on-screen cursor, not the Cursor editor.
'auto.components.settings.TerminalWindowSection.c9e1fdf42f': {
ko: '커서',
zh: '光标'
},
'auto.components.onboarding.ThemeStep.ab2a583a97': {
ko: '커서',
zh: '光标'
},
// Tailwind swatch labels: bare 天空 (the sky), 锌 and 空 (the metal, the sky) are not colors.
'auto.components.sidebar.workspace.status.6437a8c253': {
zh: '天蓝',
ja: '空色'
},
'auto.components.sidebar.workspace.status.caabd5ca85': {
zh: '锌灰'
}
}
+1 -1
View File
@@ -94,7 +94,7 @@ export const JA_VALUE_OVERRIDES = {
'Launch plan': '起動プラン',
'Launch agent': 'エージェントを起動',
'Launch {{value0}} in a new terminal': '新規ターミナルで {{value0}} を起動',
Play: 'Play',
Play: '再生',
Action: '操作',
Actions: '操作',
action: '操作',
+2 -2
View File
@@ -162,8 +162,8 @@ const BASE_LOCALE_KEY_OVERRIDES = {
ja: 'クローズ'
},
'auto.components.GitHubItemDialog.dc1ca081a8': {
ko: '진행 중',
zh: '进行中',
ko: '열림',
zh: '开放',
ja: 'オープン'
},
'auto.components.tab.bar.TabBarCreateEntry.b27864279e': {
+2 -2
View File
@@ -4725,7 +4725,7 @@
"ko": "중지 중"
},
"auto.components.status.bar.WorkspaceSpaceCompactPanel.8ff597593d": {
"ko": "Space"
"ko": "저장 공간"
},
"auto.components.status.bar.WorkspaceSpaceCompactPanel.9be86c46a0": {
"ko": "확보 가능"
@@ -4995,7 +4995,7 @@
"ko": "선택한 리포지토리와 일치하는 비활성 워크스페이스가 없습니다."
},
"auto.components.workspace.space.WorkspaceSpacePage.45f6302dbc": {
"ko": "Space"
"ko": "저장 공간"
},
"auto.components.workspace.space.WorkspaceSpacePage.8d0048e1cb": {
"ko": "워크스페이스 디스크 사용량과 회수 가능한 워크트리 저장 공간."
+4 -3
View File
@@ -371,9 +371,10 @@ export const LOCALE_PHRASE_FIXES = {
{ pattern: /指挥进展/g, replacement: 'Conductor 进度', whenEnIncludes: 'Conductor Progress' },
{ pattern: /指挥评论/g, replacement: 'Conductor 评审', whenEnIncludes: 'Conductor Review' },
{ pattern: /指挥完成/g, replacement: 'Conductor 完成', whenEnIncludes: 'Conductor Done' },
{ pattern: /琥珀色/g, replacement: 'Amber', whenEnIncludes: 'Amber' },
{ pattern: /蓝色的/g, replacement: 'Blue', whenEnIncludes: 'Blue' },
{ pattern: /中性的/g, replacement: 'Neutral', whenEnIncludes: 'Neutral' },
// Swatch labels want the bare color noun, not the adjectival 的 form — and not English.
{ pattern: /琥珀色/g, replacement: '琥珀', whenEnIncludes: 'Amber' },
{ pattern: /蓝色的/g, replacement: '蓝色', whenEnIncludes: 'Blue' },
{ pattern: /中性的/g, replacement: '中性', whenEnIncludes: 'Neutral' },
{ pattern: /破坏性的/g, replacement: 'destructive', whenEnIncludes: 'destructive' },
{ pattern: /注解/g, replacement: '批注', whenEnIncludes: 'Annotation' },
...ZH_PHRASE_FIXES_ROUND5
@@ -27,7 +27,7 @@ describe('locale-translation-policy ja round 5', () => {
localeValue: '遊ぶ',
locale: 'ja'
})
).toBe('Play')
).toBe('再生')
expect(
repairTranslatedValue({
key: 'auto.components.TaskPage.8396825a14',
@@ -546,7 +546,7 @@ describe('locale-translation-policy', () => {
localeValue: '玩',
locale: 'zh'
})
).toBe('Play')
).toBe('播放')
expect(
repairTranslatedValue({
key: 'auto.components.right.sidebar.SourceControlAgentActionDialogForm.1bc0bdbb5e',
+2 -1
View File
@@ -305,7 +305,8 @@ export const LOCALE_VALUE_OVERRIDES = {
teams: '团队',
passing: '通过',
'opened this issue': '创建了此议题',
Open: '进行中',
// No blanket "Open" override: it is a verb on buttons (打开) and a state next to 已关闭 (开放),
// so a single value-wide mapping is wrong for half the call sites. Per-key catalog values decide.
'Join Discord': '加入 Discord',
'Pull request merged': '拉取请求已合并',
'Agent Skills': '代理技能',
+14 -12
View File
@@ -67,8 +67,8 @@ export const ZH_VALUE_OVERRIDES = {
Inline: '内联',
thread: '帖子串',
destructive: 'destructive',
sheet: 'sheet',
page: 'page',
sheet: '面板',
page: '页面',
Annotation: '批注',
'check #': '检查 #',
by: '由',
@@ -92,16 +92,18 @@ export const ZH_VALUE_OVERRIDES = {
'仓库操作方案。在此仓库自定义之前,将使用全局设置。',
'Adds action recipes for Source Control commit, pull request, branch-name, and fix actions.':
'为源代码管理的提交、拉取请求、分支命名和修复操作添加操作方案。',
Play: 'Play',
Flag: 'Flag',
Zinc: 'Zinc',
Rose: 'Rose',
Emerald: 'Emerald',
Amber: 'Amber',
Violet: 'Violet',
Sky: 'Sky',
Blue: 'Blue',
Neutral: 'Neutral',
// Workspace status icon and color swatch labels; siblings below are translated, so English
// pins here would leave the picker half-Chinese on the next catalog regeneration.
Play: '播放',
Flag: '标记',
Zinc: '锌灰',
Rose: '玫瑰',
Emerald: '翡翠',
Amber: '琥珀',
Violet: '紫罗兰',
Sky: '天蓝',
Blue: '蓝色',
Neutral: '中性',
Dashed: '虚线',
Dot: '圆点',
Circle: '圆形',
+1 -1
View File
@@ -4759,7 +4759,7 @@
"ddf25b6262": "エメラルド",
"7cebab6d4a": "アンバー",
"1b81da243a": "バイオレット",
"6437a8c253": "空",
"6437a8c253": "空色",
"fc3b92756c": "青",
"52e3c6e2a4": "中性"
}
+4 -4
View File
@@ -2408,7 +2408,7 @@
"WorkspaceSpacePage": {
"8d0048e1cb": "워크스페이스 디스크 사용량과 회수 가능한 워크트리 저장 공간.",
"e8d6ba11ab": "베타",
"45f6302dbc": "공간",
"45f6302dbc": "저장 공간",
"ecf72fdc3b": "뒤로"
}
},
@@ -3235,7 +3235,7 @@
"f4d2651498": "스캔됨",
"6a5dc3c61a": "리뷰",
"c361440dc0": "베타",
"8ff597593d": "공간",
"8ff597593d": "저장 공간",
"0582df6d2e": "스캔",
"f5e1a84d79": "새로고침",
"2af2174d6d": "취소",
@@ -7329,7 +7329,7 @@
"7f4063076c": "커서 아래의 텍스트 색상(블록 커서)",
"a2d9f095a7": "Cursor 텍스트",
"cd0700762b": "Cursor 색상",
"c9e1fdf42f": "Cursor",
"c9e1fdf42f": "커서",
"da64e8f4c1": "Terminal 배경색",
"cc1b2ffeb2": "배경",
"026a0b8013": "본문 색상",
@@ -11557,7 +11557,7 @@
"86c0f1caa2": "패딩",
"06a24f4f2d": "색상",
"c021e9dddd": "테마 팔레트",
"ab2a583a97": "Cursor",
"ab2a583a97": "커서",
"cc1858e19e": "글꼴",
"248c812283": "가져오기",
"7ee9234e54": "Ghostty 설정을 찾았습니다.",
+6 -6
View File
@@ -859,7 +859,7 @@
"c6f37a563d": "+ 负责人",
"f41ec96c13": "+ 标签",
"ab050dffec": "已关闭",
"dc1ca081a8": "进行中",
"dc1ca081a8": "开放",
"2e4d806c92": "工作区",
"886a64b081": "还没有",
"4ba0132f37": "编辑标签",
@@ -1357,7 +1357,7 @@
"14c9fc70ed": "+ 负责人",
"bc215fea4d": "+ 标签",
"b936cc51a4": "已关闭",
"7b8f6bf6d8": "进行中",
"7b8f6bf6d8": "开放",
"a18d01cda3": "尚未报告任何 CI 检查",
"3912daf310": "此PR尚未报告检查。",
"45877f5089": "未找到检查",
@@ -4766,12 +4766,12 @@
"1a9383112b": "Conductor 进度",
"caebe3c10f": "Conductor 评审",
"895f381714": "Conductor 完成",
"caabd5ca85": "锌",
"caabd5ca85": "锌灰",
"7adb43ecf0": "玫瑰",
"ddf25b6262": "翡翠",
"7cebab6d4a": "琥珀",
"1b81da243a": "紫罗兰",
"6437a8c253": "天空",
"6437a8c253": "天蓝",
"fc3b92756c": "蓝色",
"52e3c6e2a4": "中性"
}
@@ -6097,7 +6097,7 @@
},
"McpConfigFileRow": {
"b145eb6009": "环境:",
"e720c139cd": "开放",
"e720c139cd": "打开",
"845ae248e8": "有效的"
},
"McpConfigSection": {
@@ -11577,7 +11577,7 @@
"86c0f1caa2": "内边距",
"06a24f4f2d": "颜色",
"c021e9dddd": "主题配色",
"ab2a583a97": "Cursor",
"ab2a583a97": "光标",
"cc1858e19e": "字体",
"248c812283": "导入",
"7ee9234e54": "已检测 Ghostty 配置。",