Skip to content

i18n(zh-TW): complete Traditional Chinese (Taiwan) translation overhaul - #8024

Merged
diegosouzapw merged 2 commits into
diegosouzapw:release/v3.8.49from
lunkerchen:fix/zh-TW-i18n-quality
Jul 22, 2026
Merged

diegosouzapw merged 2 commits into
diegosouzapw:release/v3.8.49from
lunkerchen:fix/zh-TW-i18n-quality

Conversation

@lunkerchen

Copy link
Copy Markdown
Contributor

Summary

Complete overhaul of Traditional Chinese (繁體中文/zh-TW) localization for OmniRoute v3.8.49.

Changes

UI Messages (src/i18n/messages/zh-TW.json)

  • Coverage went from ~78% → 100% (8,705 → 11,156 keys, matching EN)
  • Eliminated all 420 __MISSING__ sentinels — no more English text leaking into the UI
  • Translated 2,451 previously missing keys
  • Terminology overhaul: 提供商→提供者 (493), 令牌→權杖 (88), 激活→啟用 (1)
  • 13 context-aware 配置→設定 fixes for UI-facing text

CLI Locale (bin/cli/locales/zh-TW.json)

  • Same terminology pass: 69 fixes (提供商→提供者, 令牌→權杖, 配置→設定)

Documentation (docs/i18n/zh-TW/)

  • Before: 3/26 docs translated (only README, CLAUDE, FLY_IO_DEPLOYMENT_GUIDE had content)
  • After: 26/26 docs translated, including:
    • User-facing guides: USER_GUIDE, FEATURES, TROUBLESHOOTING, UNINSTALL, I18N
    • Technical docs: ARCHITECTURE, API_REFERENCE, ENVIRONMENT, CLI-TOOLS
    • Frameworks: A2A-SERVER, MCP-SERVER
    • Operations: VM_DEPLOYMENT_GUIDE, COVERAGE_PLAN, RELEASE_CHECKLIST
    • All docs use Taiwan-appropriate Traditional Chinese terminology

Translation Quality Guidelines Applied

  • Taiwan-specific vocabulary throughout (提供者, 權杖, 啟用, 預設, 資料, 連線, 伺服器, 日誌, 演算法, 軟體, 檔案, 帳戶, 資訊, 智慧)
  • No simplified Chinese character leakage
  • ICU plural syntax ({count, plural, one {...} other {...}}) preserved
  • Placeholders and variable interpolation maintained
  • Markdown, code blocks, tables, and links preserved

@lunkerchen
lunkerchen requested a review from diegosouzapw as a code owner July 21, 2026 16:58
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@diegosouzapw

Copy link
Copy Markdown
Owner

Thanks for the deep dive on zh-TW — I verified the terminology pass locally: 提供商→提供者 is now 100% consistent (0 leftover instances vs 475 on the current tip), and the doc translations (26/26 vs the previous 3/26) render cleanly. Two things before this can merge:

  1. This branch predates feat(dashboard): Kimi sponsor banner, Kimi Coding preset, official logomarks and partner links #8039 (Kimi sponsor banner), which added 9 new EN keys across every locale (kimiSponsorBanner.*, combos.kimiPreset*, providers.kimiPartnerLinkNote) — could you rebase onto the current release/v3.8.49 tip and translate those?
  2. i18n: bring all 41 locales to full parity with en.json #8031 is open concurrently and also touches src/i18n/messages/zh-TW.json as part of a 41-locale parity sweep. Since your terminology consistency measurably beats theirs for zh-TW (0 vs 499 remaining 提供商 instances), we intend to keep this PR's zh-TW.json and ask them to drop that one file from their scope — no action needed from you on that, just flagging so the rebase order makes sense.

Great work on the Taiwan-specific terminology pass.

- UI messages: 100% coverage (was ~78%). Translated 2871 missing keys,
  eliminated all 420 __MISSING__ placeholders. 0 remaining.
- Terminology: 提供商→提供者 (493 fixes), 令牌→權杖 (88 fixes),
  激活→啟用 (1 fix), 配置→設定 (13 context-aware fixes) in UI messages
- CLI locale: same terminology pass (69 fixes)
- Docs: translated all 26 zh-TW docs (was 3/26). USER_GUIDE, ARCHITECTURE,
  API_REFERENCE, ENVIRONMENT and 20 more now in Traditional Chinese.
- Preserved variable placeholders, ICU plurals, markdown, code blocks
@lunkerchen
lunkerchen force-pushed the fix/zh-TW-i18n-quality branch from f92fd14 to 69fa171 Compare July 21, 2026 21:27
@lunkerchen

Copy link
Copy Markdown
Contributor Author

Rebased onto latest release/v3.8.49 (post-#8039). All 9 new kimi keys translated for zh-TW:

  • combos.kimiPresetTitle → Kimi Coding 預設組合
  • combos.kimiPresetDescription → 以 Kimi K3 作為主要模型...
  • combos.kimiPresetCta → 新增預設組合
  • providers.kimiPartnerLinkNote → 合作夥伴連結 — 支援 OmniRoute,您無需額外付費
  • kimiSponsorBanner.* → 完整 5 鍵繁體翻譯

Verification: 0 __MISSING__, 0 提供商, 11165 keys (11156 old + 9 new). Terminology consistency preserved.

nguyenha935 added a commit to nguyenha935/OmniRoute that referenced this pull request Jul 22, 2026
Complete the translation catalogs for the 40 locales covered by this PR and rebase them onto the current release/v3.8.49 tip.

Translate the 9 Kimi sponsor and preset keys introduced by diegosouzapw#8039. Leave en.json, vi.json, and zh-TW.json untouched so diegosouzapw#8024 remains authoritative for Traditional Chinese.

The UI-key coverage gate reports 100% for all 40 touched locales with no missing keys or placeholders.
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
diegosouzapw added a commit to nguyenha935/OmniRoute that referenced this pull request Jul 22, 2026
Complete the translation catalogs for the 40 locales covered by this PR and rebase them onto the current release/v3.8.49 tip.

Translate the 9 Kimi sponsor and preset keys introduced by diegosouzapw#8039. Leave en.json, vi.json, and zh-TW.json untouched so diegosouzapw#8024 remains authoritative for Traditional Chinese.

The UI-key coverage gate reports 100% for all 40 touched locales with no missing keys or placeholders.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@diegosouzapw
diegosouzapw merged commit 2e6dfda into diegosouzapw:release/v3.8.49 Jul 22, 2026
5 checks passed
diegosouzapw added a commit that referenced this pull request Jul 22, 2026
Complete the translation catalogs for the 40 locales covered by this PR and rebase them onto the current release/v3.8.49 tip.

Translate the 9 Kimi sponsor and preset keys introduced by #8039. Leave en.json, vi.json, and zh-TW.json untouched so #8024 remains authoritative for Traditional Chinese.

The UI-key coverage gate reports 100% for all 40 touched locales with no missing keys or placeholders.

Co-authored-by: nguyenha935 <208228297+nguyenha935@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
diegosouzapw added a commit that referenced this pull request Jul 22, 2026
…ass (#8038) (#8166)

One-shot 提供商->提供者 normalization across src/i18n/messages/zh-CN.json
(679 substitutions) and bin/cli/locales/zh-CN.json (54), mirroring #8024's
zh-TW pass. Adds a versioned terminology glossary
(scripts/i18n/glossary/zh-CN.json), a protected-names list
(scripts/i18n/glossary/protected-terms.json), and a pure-function
consistency check (scripts/i18n/check-glossary-consistency.mjs,
npm run i18n:check-glossary) wired into CI as the i18n-glossary-zhcn job.
zh-CN added to the visual-QA harness default locales. Complements the
existing parity (check-ui-keys-coverage.mjs) and ICU (validate_translation.py)
gates without replacing them.
diegosouzapw added a commit that referenced this pull request Jul 24, 2026
…e for zh-TW repro test (#8387)

Root cause (two independent causes):
1. PR #8219 (commit 2a865aa) added CacheSettingsTab.tsx with 12
   t("settings.*") calls whose keys were never created anywhere, not even
   in en.json (the source of truth). The same PR added only 3 sidebar/header
   keys (settingsCache, settingsCacheSubtitle, settingsCacheDescription) to
   en+es, without running `npm run i18n:sync-ui` to propagate to the other
   41 locales.
2. tests/unit/i18n-missing-placeholder-fallback.test.ts had a "#7258 repro"
   test asserting the real zh-TW.json still carried raw __MISSING__:
   placeholders — a premise invalidated by #8024, which completed the
   Traditional Chinese translation to 100%.

What changed:
- Added the 12 missing settings.* keys to en.json, mirroring the sibling
  requestBodyLimit* family (placeholders {min}/{max}/{value} match the
  component exactly).
- Added real, natural translations for all 15 CacheSettingsTab-related keys
  (12 settings.* + 3 sidebar/header) to pt-BR.json, vi.json and es.json (es
  already had the 3 sidebar/header keys).
- Ran `npm run i18n:sync-ui` (official tool, no locale hand-edited) to stub
  the remaining 39 locales with __MISSING__:<english>. This also discovered
  17 pre-existing unrelated missing keys (compression-exclusions settings,
  8 new-provider onboarding descriptions) never synced since #8031, and
  pruned 3 dead orphaned zh-TW-only keys (codexSessionAffinity{Title,Desc,
  Ttl}, superseded by the generic sessionAffinity* keys since #7274,
  confirmed unused anywhere in src/) — verified programmatically as
  +32/-0/~0 changed per stub locale, +32/-3/~0 changed for zh-TW.
- Rewrote the "#7258 repro" test to use a synthetic fixture (same style as
  the sibling deepMergeFallback fixtures in the same file) instead of
  depending on zh-TW.json's real, evolving translation-completeness state.
  Proves the same behavior: collectPlaceholderLeaves() detects a raw
  __MISSING__: leaf before deepMergeFallback (the fix) is exercised.

Validation: all 4 previously-red files green (23/23 assertions). Broader
sweep of 271 i18n-adjacent unit tests unaffected. i18n:check-ui-coverage
(42/42 locales >=80%, 99.7-100%) and i18n:check-glossary both pass.
typecheck:core clean.

Refs #8219
Refs #8024
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
…ul (diegosouzapw#8024)

- UI messages: 100% coverage (was ~78%). Translated 2871 missing keys,
  eliminated all 420 __MISSING__ placeholders. 0 remaining.
- Terminology: 提供商→提供者 (493 fixes), 令牌→權杖 (88 fixes),
  激活→啟用 (1 fix), 配置→設定 (13 context-aware fixes) in UI messages
- CLI locale: same terminology pass (69 fixes)
- Docs: translated all 26 zh-TW docs (was 3/26). USER_GUIDE, ARCHITECTURE,
  API_REFERENCE, ENVIRONMENT and 20 more now in Traditional Chinese.
- Preserved variable placeholders, ICU plurals, markdown, code blocks

Co-authored-by: lunkerchen <lunkerchen@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
Complete the translation catalogs for the 40 locales covered by this PR and rebase them onto the current release/v3.8.49 tip.

Translate the 9 Kimi sponsor and preset keys introduced by diegosouzapw#8039. Leave en.json, vi.json, and zh-TW.json untouched so diegosouzapw#8024 remains authoritative for Traditional Chinese.

The UI-key coverage gate reports 100% for all 40 touched locales with no missing keys or placeholders.

Co-authored-by: nguyenha935 <208228297+nguyenha935@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
…ass (diegosouzapw#8038) (diegosouzapw#8166)

One-shot 提供商->提供者 normalization across src/i18n/messages/zh-CN.json
(679 substitutions) and bin/cli/locales/zh-CN.json (54), mirroring diegosouzapw#8024's
zh-TW pass. Adds a versioned terminology glossary
(scripts/i18n/glossary/zh-CN.json), a protected-names list
(scripts/i18n/glossary/protected-terms.json), and a pure-function
consistency check (scripts/i18n/check-glossary-consistency.mjs,
npm run i18n:check-glossary) wired into CI as the i18n-glossary-zhcn job.
zh-CN added to the visual-QA harness default locales. Complements the
existing parity (check-ui-keys-coverage.mjs) and ICU (validate_translation.py)
gates without replacing them.
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
…hetic fixture for zh-TW repro test (diegosouzapw#8387)

Root cause (two independent causes):
1. PR diegosouzapw#8219 (commit 9dbca94) added CacheSettingsTab.tsx with 12
   t("settings.*") calls whose keys were never created anywhere, not even
   in en.json (the source of truth). The same PR added only 3 sidebar/header
   keys (settingsCache, settingsCacheSubtitle, settingsCacheDescription) to
   en+es, without running `npm run i18n:sync-ui` to propagate to the other
   41 locales.
2. tests/unit/i18n-missing-placeholder-fallback.test.ts had a "diegosouzapw#7258 repro"
   test asserting the real zh-TW.json still carried raw __MISSING__:
   placeholders — a premise invalidated by diegosouzapw#8024, which completed the
   Traditional Chinese translation to 100%.

What changed:
- Added the 12 missing settings.* keys to en.json, mirroring the sibling
  requestBodyLimit* family (placeholders {min}/{max}/{value} match the
  component exactly).
- Added real, natural translations for all 15 CacheSettingsTab-related keys
  (12 settings.* + 3 sidebar/header) to pt-BR.json, vi.json and es.json (es
  already had the 3 sidebar/header keys).
- Ran `npm run i18n:sync-ui` (official tool, no locale hand-edited) to stub
  the remaining 39 locales with __MISSING__:<english>. This also discovered
  17 pre-existing unrelated missing keys (compression-exclusions settings,
  8 new-provider onboarding descriptions) never synced since diegosouzapw#8031, and
  pruned 3 dead orphaned zh-TW-only keys (codexSessionAffinity{Title,Desc,
  Ttl}, superseded by the generic sessionAffinity* keys since diegosouzapw#7274,
  confirmed unused anywhere in src/) — verified programmatically as
  +32/-0/~0 changed per stub locale, +32/-3/~0 changed for zh-TW.
- Rewrote the "diegosouzapw#7258 repro" test to use a synthetic fixture (same style as
  the sibling deepMergeFallback fixtures in the same file) instead of
  depending on zh-TW.json's real, evolving translation-completeness state.
  Proves the same behavior: collectPlaceholderLeaves() detects a raw
  __MISSING__: leaf before deepMergeFallback (the fix) is exercised.

Validation: all 4 previously-red files green (23/23 assertions). Broader
sweep of 271 i18n-adjacent unit tests unaffected. i18n:check-ui-coverage
(42/42 locales >=80%, 99.7-100%) and i18n:check-glossary both pass.
typecheck:core clean.

Refs diegosouzapw#8219
Refs diegosouzapw#8024
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…ul (diegosouzapw#8024)

- UI messages: 100% coverage (was ~78%). Translated 2871 missing keys,
  eliminated all 420 __MISSING__ placeholders. 0 remaining.
- Terminology: 提供商→提供者 (493 fixes), 令牌→權杖 (88 fixes),
  激活→啟用 (1 fix), 配置→設定 (13 context-aware fixes) in UI messages
- CLI locale: same terminology pass (69 fixes)
- Docs: translated all 26 zh-TW docs (was 3/26). USER_GUIDE, ARCHITECTURE,
  API_REFERENCE, ENVIRONMENT and 20 more now in Traditional Chinese.
- Preserved variable placeholders, ICU plurals, markdown, code blocks

Co-authored-by: lunkerchen <lunkerchen@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
Complete the translation catalogs for the 40 locales covered by this PR and rebase them onto the current release/v3.8.49 tip.

Translate the 9 Kimi sponsor and preset keys introduced by diegosouzapw#8039. Leave en.json, vi.json, and zh-TW.json untouched so diegosouzapw#8024 remains authoritative for Traditional Chinese.

The UI-key coverage gate reports 100% for all 40 touched locales with no missing keys or placeholders.

Co-authored-by: nguyenha935 <208228297+nguyenha935@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…ass (diegosouzapw#8038) (diegosouzapw#8166)

One-shot 提供商->提供者 normalization across src/i18n/messages/zh-CN.json
(679 substitutions) and bin/cli/locales/zh-CN.json (54), mirroring diegosouzapw#8024's
zh-TW pass. Adds a versioned terminology glossary
(scripts/i18n/glossary/zh-CN.json), a protected-names list
(scripts/i18n/glossary/protected-terms.json), and a pure-function
consistency check (scripts/i18n/check-glossary-consistency.mjs,
npm run i18n:check-glossary) wired into CI as the i18n-glossary-zhcn job.
zh-CN added to the visual-QA harness default locales. Complements the
existing parity (check-ui-keys-coverage.mjs) and ICU (validate_translation.py)
gates without replacing them.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…hetic fixture for zh-TW repro test (diegosouzapw#8387)

Root cause (two independent causes):
1. PR diegosouzapw#8219 (commit fc74f4e) added CacheSettingsTab.tsx with 12
   t("settings.*") calls whose keys were never created anywhere, not even
   in en.json (the source of truth). The same PR added only 3 sidebar/header
   keys (settingsCache, settingsCacheSubtitle, settingsCacheDescription) to
   en+es, without running `npm run i18n:sync-ui` to propagate to the other
   41 locales.
2. tests/unit/i18n-missing-placeholder-fallback.test.ts had a "diegosouzapw#7258 repro"
   test asserting the real zh-TW.json still carried raw __MISSING__:
   placeholders — a premise invalidated by diegosouzapw#8024, which completed the
   Traditional Chinese translation to 100%.

What changed:
- Added the 12 missing settings.* keys to en.json, mirroring the sibling
  requestBodyLimit* family (placeholders {min}/{max}/{value} match the
  component exactly).
- Added real, natural translations for all 15 CacheSettingsTab-related keys
  (12 settings.* + 3 sidebar/header) to pt-BR.json, vi.json and es.json (es
  already had the 3 sidebar/header keys).
- Ran `npm run i18n:sync-ui` (official tool, no locale hand-edited) to stub
  the remaining 39 locales with __MISSING__:<english>. This also discovered
  17 pre-existing unrelated missing keys (compression-exclusions settings,
  8 new-provider onboarding descriptions) never synced since diegosouzapw#8031, and
  pruned 3 dead orphaned zh-TW-only keys (codexSessionAffinity{Title,Desc,
  Ttl}, superseded by the generic sessionAffinity* keys since diegosouzapw#7274,
  confirmed unused anywhere in src/) — verified programmatically as
  +32/-0/~0 changed per stub locale, +32/-3/~0 changed for zh-TW.
- Rewrote the "diegosouzapw#7258 repro" test to use a synthetic fixture (same style as
  the sibling deepMergeFallback fixtures in the same file) instead of
  depending on zh-TW.json's real, evolving translation-completeness state.
  Proves the same behavior: collectPlaceholderLeaves() detects a raw
  __MISSING__: leaf before deepMergeFallback (the fix) is exercised.

Validation: all 4 previously-red files green (23/23 assertions). Broader
sweep of 271 i18n-adjacent unit tests unaffected. i18n:check-ui-coverage
(42/42 locales >=80%, 99.7-100%) and i18n:check-glossary both pass.
typecheck:core clean.

Refs diegosouzapw#8219
Refs diegosouzapw#8024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants