diff --git a/config/scripts/locale-count-fragment-separator.test.mjs b/config/scripts/locale-count-fragment-separator.test.mjs new file mode 100644 index 000000000..3e261fa4b --- /dev/null +++ b/config/scripts/locale-count-fragment-separator.test.mjs @@ -0,0 +1,39 @@ +import { describe, expect, it } from 'vitest' + +import { repairTranslatedValue } from './locale-translation-policy.mjs' + +// The theme-picker count row renders "Showing {count}" immediately followed by one of these +// fragments, so translations must keep a leading separator or the numbers fuse ("표시 중 3030 중"). +describe('locale-count-fragment-separator', () => { + it('keeps a slash between shown and total theme counts in CJK locales', () => { + const brokenByLocale = { ko: '{{value0}} 중', ja: '{{value0}}の', zh: '{{value0}} 的' } + for (const [locale, localeValue] of Object.entries(brokenByLocale)) { + expect( + repairTranslatedValue({ + key: 'auto.components.settings.SettingsFormControls.cb330ef7f8', + enValue: ' of {{value0}}', + localeValue, + locale + }) + ).toBe('/{{value0}}') + } + }) + + it('keeps a leading space before the search-match fragment in CJK locales', () => { + const cases = [ + ['ko', '"{{value0}}"과(와) 일치', ' "{{value0}}"과(와) 일치'], + ['ja', '「{{value0}}」に一致', ' 「{{value0}}」に一致'], + ['zh', '匹配“{{value0}}”', ' 匹配“{{value0}}”'] + ] + for (const [locale, localeValue, repaired] of cases) { + expect( + repairTranslatedValue({ + key: 'auto.components.settings.SettingsFormControls.c822571b2e', + enValue: ' matching "{{value0}}"', + localeValue, + locale + }) + ).toBe(repaired) + } + }) +}) diff --git a/config/scripts/locale-cross-locale-key-overrides.mjs b/config/scripts/locale-cross-locale-key-overrides.mjs index ff0ad3a1e..124fb8f32 100644 --- a/config/scripts/locale-cross-locale-key-overrides.mjs +++ b/config/scripts/locale-cross-locale-key-overrides.mjs @@ -19,6 +19,18 @@ export const CROSS_LOCALE_KEY_OVERRIDES = { zh: '集成', ja: '連携' }, + // Search-match fragment concatenated flush after the visible theme count; MT dropped the + // en leading space that separates it from the count. + 'auto.components.settings.SettingsFormControls.c822571b2e': { + zh: ' 匹配“{{value0}}”', + ja: ' 「{{value0}}」に一致' + }, + // Total-count fragment on the same row; without the separator "Showing 30 of 30" + // rendered as "表示中 3030の" / "显示中 3030 的". + 'auto.components.settings.SettingsFormControls.cb330ef7f8': { + zh: '/{{value0}}', + ja: '/{{value0}}' + }, 'auto.components.settings.TasksPane.6b23a34f6d': { zh: 'Jira', ja: 'Jira' diff --git a/config/scripts/locale-ko-key-overrides.json b/config/scripts/locale-ko-key-overrides.json index 953eb8a21..1a8b7d341 100644 --- a/config/scripts/locale-ko-key-overrides.json +++ b/config/scripts/locale-ko-key-overrides.json @@ -2667,7 +2667,10 @@ "ko": "SSH를 통해 기존 머신의 파일, terminals, Git, 워크스페이스를 사용합니다." }, "auto.components.settings.SettingsFormControls.c822571b2e": { - "ko": "\"{{value0}}\"과(와) 일치" + "ko": " \"{{value0}}\"과(와) 일치" + }, + "auto.components.settings.SettingsFormControls.cb330ef7f8": { + "ko": "/{{value0}}" }, "auto.components.settings.SettingsFormControls.fbb428db98": { "ko": "선택됨:" diff --git a/src/renderer/src/i18n/locales/ja.json b/src/renderer/src/i18n/locales/ja.json index 29c477118..7f9a27556 100644 --- a/src/renderer/src/i18n/locales/ja.json +++ b/src/renderer/src/i18n/locales/ja.json @@ -6634,8 +6634,8 @@ "fbb428db98": "選択済み:", "fac59213fc": "組み込みテーマを検索する", "search_terminal_themes": "terminal テーマを検索", - "cb330ef7f8": "{{value0}}の", - "c822571b2e": "「{{value0}}」に一致", + "cb330ef7f8": "/{{value0}}", + "c822571b2e": " 「{{value0}}」に一致", "3119c012a5": "文字列" }, "SettingsSidebar": { diff --git a/src/renderer/src/i18n/locales/ko.json b/src/renderer/src/i18n/locales/ko.json index f03e1a7c4..4e4b41a89 100644 --- a/src/renderer/src/i18n/locales/ko.json +++ b/src/renderer/src/i18n/locales/ko.json @@ -6593,8 +6593,8 @@ "4e11f87ca6": "표시 중", "fbb428db98": "선택됨:", "fac59213fc": "내장 테마 검색", - "cb330ef7f8": "{{value0}} 중", - "c822571b2e": "\"{{value0}}\"과(와) 일치", + "cb330ef7f8": "/{{value0}}", + "c822571b2e": " \"{{value0}}\"과(와) 일치", "3119c012a5": "문자열", "builtin_themes": "기본 제공", "imported_from": "{{value0}}에서 가져옴", diff --git a/src/renderer/src/i18n/locales/zh.json b/src/renderer/src/i18n/locales/zh.json index c3bf99eef..ce35d4bc5 100644 --- a/src/renderer/src/i18n/locales/zh.json +++ b/src/renderer/src/i18n/locales/zh.json @@ -6593,8 +6593,8 @@ "4e11f87ca6": "显示中", "fbb428db98": "已选择:", "fac59213fc": "搜索内置主题", - "cb330ef7f8": "{{value0}} 的", - "c822571b2e": "匹配“{{value0}}”", + "cb330ef7f8": "/{{value0}}", + "c822571b2e": " 匹配“{{value0}}”", "3119c012a5": "字符串", "builtin_themes": "内置", "imported_from": "从 {{value0}} 导入",