Skip to content

i18n: bring all 41 locales to full parity with en.json - #8031

Merged
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.49from
nguyenha935:fix/full-parity-locales
Jul 22, 2026
Merged

diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.49from
nguyenha935:fix/full-parity-locales

Conversation

@nguyenha935

Copy link
Copy Markdown
Contributor

What this does

With #7935 now merged, this brings all 41 non-English locales to full parity with en.json (11153 keys each). Every locale that was previously partial is now at 100% key coverage.

Scope

  • 41 locale files only (src/i18n/messages/*.json) — no source, config, or dependency changes.
  • en.json and vi.json are byte-identical to the current release tip — this PR does not touch the curated English source or the Vietnamese translations preserved by fix(i18n): preserve remaining Vietnamese localization #7935.
  • Branched cleanly from the release tip, so the diff is locale content only (no unrelated feature commits).

Verification

  • Coverage gate (scripts/i18n/check-ui-keys-coverage.mjs): 42/42 locales at 100% — 0 missing, 0 placeholders.
  • ICU QA (production @formatjs/icu-messageformat-parser): all 42 locales reproduce the EN baseline exactly. The 7 pre-existing keys that fail the parser in en.json are the only failures — no translation introduces a new ICU error.

A note on direction

New features are being added at a dizzying pace right now. A lot of leftover components from older versions are still around, and outdated providers haven't been trimmed. Many new components keep getting added on top.

On my side, I'm developing 9router along with quite a few other apps, so the time I have in a day for this is limited. Each patch takes me a fair amount of effort, and by the time I finish one, the project has already moved several versions ahead and I have to patch it all over again.

I hope the current version can pause to be optimized — cleaner and more stable — before another new version ships.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@diegosouzapw

Copy link
Copy Markdown
Owner

This closes a real gap — I verified locally that release/v3.8.49 currently fails scripts/i18n/check-ui-keys-coverage.mjs with 34/42 locales below the 65% threshold, and your branch brings all 42 to 100% with real, non-placeholder content (sampled several strings, they read as genuine translations). Three things before this can merge:

  1. Please drop the Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> trailer from your commit — this repo's contribution policy doesn't allow AI co-authorship trailers in commit metadata (your own authorship stays exactly as-is, this is just about that one trailer line).
  2. 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 tip and translate those for all 41 locales?
  3. i18n(zh-TW): complete Traditional Chinese (Taiwan) translation overhaul #8024 (zh-TW quality overhaul) is open concurrently and its zh-TW.json has noticeably more consistent terminology (0 vs 499 remaining 提供商 instances in this PR's version) — could you drop src/i18n/messages/zh-TW.json from this PR's diff so we can keep i18n(zh-TW): complete Traditional Chinese (Taiwan) translation overhaul #8024's version and merge the other 40 locales from yours as-is?

Really appreciate the parity work — this was a genuinely broken gate.

@nguyenha935
nguyenha935 force-pushed the fix/full-parity-locales branch from 0a0201d to 9abc7d5 Compare July 22, 2026 03:08
@nguyenha935

Copy link
Copy Markdown
Contributor Author

Thanks for the review — all three points are now addressed in commit 9abc7d5:

  1. Removed the Claude AI co-authorship trailer; the rewritten commit retains only my authorship.
  2. Rebased onto the current release/v3.8.49 tip and translated all 9 Kimi sponsor/preset keys introduced by feat(dashboard): Kimi sponsor banner, Kimi Coding preset, official logomarks and partner links #8039 across the 40 locales retained in this PR.
  3. Dropped src/i18n/messages/zh-TW.json from the diff entirely so i18n(zh-TW): complete Traditional Chinese (Taiwan) translation overhaul #8024 remains authoritative for Traditional Chinese.

Validation:

  • scripts/i18n/check-ui-keys-coverage.mjs --threshold=65 passes; all 40 touched locales are at 100% (11,162/11,162 keys, no missing keys or placeholders).
  • Additional audit covered all 360 newly translated values: key parity OK, no unchanged English copies, placeholders, or replacement characters.
  • GitHub checks are complete: DAST smoke, merge integrity, change classification, and both Semgrep checks passed.

The PR is now CLEAN / MERGEABLE. Thanks again.

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 force-pushed the fix/full-parity-locales branch from 9abc7d5 to 529f10f Compare July 22, 2026 09:37
@diegosouzapw
diegosouzapw merged commit fe82032 into diegosouzapw:release/v3.8.49 Jul 22, 2026
12 checks passed
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
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
…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
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
…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