Skip to content

fix(i18n): restore structural parity across all 9 locales#403

Open
monotykamary wants to merge 2 commits into
SuperCmdLabs:mainfrom
monotykamary:fix/i18n-structural-parity
Open

fix(i18n): restore structural parity across all 9 locales#403
monotykamary wants to merge 2 commits into
SuperCmdLabs:mainfrom
monotykamary:fix/i18n-structural-parity

Conversation

@monotykamary
Copy link
Copy Markdown
Contributor

@monotykamary monotykamary commented May 16, 2026

Summary

Rebuilt every non-English locale file against en.json as the source of truth, fixing 3 structural issues that caused broken translations for non-English users. Then translated the "easy 5" locales (it, ja, ko, zh-Hans, zh-Hant) from English fallback to their native language.

Structural Fix (commit 1 — all 9 files)

de, es, fr, it, ja, ko, ru, zh-Hans, zh-Hant were restructured to match en.json exactly:

1. Orphan keys stripped (fr, de, es)

These locales had 249 stale keys from an old schema version that no longer exist in en.json (e.g. camera.cancel, clipboard.code, common.confirm).

2. Missing keys added (all locales)

Locale Missing keys Strategy
ru 608 English fallback (outdated snapshot)
fr 342 English fallback
de 346 English fallback
es 346 English fallback
it 20 English fallback
ja/ko/zh-Hans/zh-Hant 2 each English fallback

3. Type mismatches corrected (fr, de, es)

fileSearch.filters and onboarding.welcome were nested objects in these locales where en.json uses flat strings. Restructured to match.

Verification

All 9 locales pass node scripts/check-i18n.mjs with 0 missing, 0 extra, 0 invalid.

Translation Fill (commit 2 — it, ja, ko, zh-Hans, zh-Hant)

Applied human-quality native translations to the 5 locales that were 90%+ complete:

Locale Translated Remaining Nature of remaining
it 81 60 Brand names, product names, API placeholders
ja 52 50 Brand names, product names, API placeholders, loanwords
ko 48 46 Brand names, product names, API placeholders
zh-Hans 37 35 Brand names, product names, API placeholders
zh-Hant 39 37 Brand names, product names, API placeholders

What was not translated (intentionally) — Brand names (SuperCmd, OpenAI, Claude, Gemini, Ollama, LM Studio, ElevenLabs, Whisper, Parakeet), product names (OpenAI Whisper-1, ElevenLabs Scribe v1/v2, GPT-4o Transcribe), API placeholders (sk-..., AIza...), technical acronyms (AI, LLM, URL, ASR), and de-facto loanwords (OK, Enter, Info).

Remaining work

The 4 "hard" locales still have significant English-fallback surface:

  • ru (~612 untranslated) — outdated snapshot
  • fr, de, es (~515-518) — fragmentary, needs native speakers

These 4 will require dedicated native-speaker contributions.

Rebuilt every non-English locale file against en.json as the source of
truth. 3 structural issues were fixed:

1. Orphan keys stripped — fr/de/es had 249 stale keys from an old
   schema version (e.g. camera.cancel, clipboard.code, common.confirm)
   that no longer exist in en.json.

2. Missing keys added — each locale was missing between 2 (ja/ko/zh-*)
   and 608 (ru) leaf keys that exist in the current en.json. New keys
   fall back to English until native-speaking contributors translate
   them.

3. Type mismatches corrected — 2 keys (fileSearch.filters and
   onboarding.welcome) were structured as nested objects in 3 locales
   where en.json uses plain strings. Now structurally identical.

All 9 locales pass 'node scripts/check-i18n.mjs' with 0 missing,
0 extra, 0 invalid.
Applied human-quality translations to the 5 locales that were 90%+
complete but still had English fallback strings for recent features:

- it (Italian):   +81 translations  (now 813/894 done, 82 brand terms)
- ja (Japanese):  +52 translations  (now 842/894 done, 50 brand/loanwords)
- ko (Korean):    +48 translations  (now 846/894 done, 46 brand/loanwords)
- zh-Hans:        +37 translations  (now 857/894 done, 35 brand/loanwords)
- zh-Hant:        +39 translations  (now 855/894 done, 37 brand/loanwords)

Brand names, product names (SuperCmd, OpenAI, Claude, Gemini,
Ollama, ElevenLabs, Whisper, Parakeet, etc.), API placeholders,
URLs, and technical acronyms (AI, LLM, URL, ASR) were left as-is
in all locales. All 5 files still pass node scripts/check-i18n.mjs.
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.

1 participant