i18n: bring all 41 locales to full parity with en.json - #8031
Merged
diegosouzapw merged 1 commit intoJul 22, 2026
Merged
diegosouzapw merged 1 commit into
diegosouzapw merged 1 commit into
Conversation
Contributor
|
Caution The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased. |
8 tasks
Owner
|
This closes a real gap — I verified locally that release/v3.8.49 currently fails
Really appreciate the parity work — this was a genuinely broken gate. |
nguyenha935
force-pushed
the
fix/full-parity-locales
branch
from
July 22, 2026 03:08
0a0201d to
9abc7d5
Compare
Contributor
Author
|
Thanks for the review — all three points are now addressed in commit 9abc7d5:
Validation:
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
force-pushed
the
fix/full-parity-locales
branch
from
July 22, 2026 09:37
9abc7d5 to
529f10f
Compare
This was referenced Jul 22, 2026
Merged
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
src/i18n/messages/*.json) — no source, config, or dependency changes.en.jsonandvi.jsonare 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.Verification
scripts/i18n/check-ui-keys-coverage.mjs): 42/42 locales at 100% — 0 missing, 0 placeholders.@formatjs/icu-messageformat-parser): all 42 locales reproduce the EN baseline exactly. The 7 pre-existing keys that fail the parser inen.jsonare 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.