Skip to content

chore(i18n): complete missing translations and fix translation bugs across all 26 locales - #2463

Merged
ethicnology merged 3 commits into
developfrom
i18n/complete-all-locale-translations
Jul 17, 2026
Merged

chore(i18n): complete missing translations and fix translation bugs across all 26 locales#2463
ethicnology merged 3 commits into
developfrom
i18n/complete-all-locale-translations

Conversation

@ethicnology

Copy link
Copy Markdown
Member

Full pass over localization/ to bring every non-English locale to 100% key
parity with the en template, and to fix a batch of pre-existing translation
bugs found along the way. app_en.arb is untouched.

Tooling (tools/arb.dart)

Extended the existing ARB tool with commands needed to do this at scale
without hand-editing 26 large files:

  • missing-detail LOCALE — export a locale's missing keys as
    {key: {en, description, placeholders}} JSON, ready to translate.
  • fill LOCALE --translations-file — bulk-add/update many translations in
    one pass instead of one set call per key.
  • audit-identical — flag values byte-identical to the en template (a
    likely untranslated copy-paste).
  • audit-placeholders — flag values whose top-level {placeholder} tokens
    don't match the en template's. Walks ICU brace depth so the literal case
    bodies of a {var, plural, =1{...} other{...}} block aren't misread as
    extra placeholders (a naive regex previously false-positived on every
    locale for one key).

Translations (localization/*.arb)

  • Filled every missing key across all 26 locales (ar, as, bg, bn, cs, de,
    el, es, fa, fi, fr, hi, hi_Latn, hy, it, ka, ko, pt, pt_BR, ru, sw, th, tr,
    uk, vi, zh). hy, ka, sw, vi were previously only ~8–10% translated;
    every other locale had between 106 and 864 keys missing out of 3416.
  • Fixed ~65 pre-existing placeholder bugs across 16 locales — a
    {placeholder} (e.g. {error}, {device}, {amount}) silently dropped
    in a past translation, in several cases replaced by garbled artifacts
    (e.g. "X64X", "页: 1") from some earlier broken translation tool.
  • Translated ~400 strings that existed as untranslated, byte-identical
    copies of the en text despite the key already being present in the file.

Out of scope (follow-ups, not done here)

  • A few existing (non-missing) translations were flagged by reviewing
    agents as simply wrong (not missing/identical, just incorrect), e.g. in
    Thai: "Failed" translated as a word meaning "house", "sats" as "sit down".
    These weren't touched here — worth a dedicated native-speaker review pass.
  • liquidRiskDisclosureBody untouched

- missing-detail LOCALE: export missing keys as {key: {en, description,
  placeholders}} JSON, ready to hand to a translator
- fill LOCALE --translations-file: bulk-add/update many translations in
  one pass instead of one `set` call per key
- audit-identical: flag values byte-identical to the en template (likely
  untranslated copy-paste)
- audit-placeholders: flag values whose top-level {placeholder} tokens
  don't match the en template's, walking ICU brace depth so the literal
  case bodies of a {var, plural, =1{...} other{...}} block are not
  misread as extra placeholders (a naive regex reported false positives
  on every locale for exchangeFileUploadUploadCount)
- Fill every key missing relative to the en template (ar, as, bg, bn,
  cs, de, el, es, fa, fi, fr, hi, hi_Latn, hy, it, ka, ko, pt, pt_BR,
  ru, sw, th, tr, uk, vi, zh), reaching full key parity. hy/ka/sw/vi
  were previously only ~8-10% translated; every other locale had
  between 106 and 864 keys missing.
- Fix ~65 pre-existing placeholder bugs across 16 locales where a
  {placeholder} (e.g. {error}, {device}, {amount}) was dropped during a
  past translation, in several cases replaced by garbled tool artifacts
  (e.g. "X64X", "页: 1") that leaked into the shipped strings.
- Translate ~400 strings that existed as untranslated, byte-identical
  copies of the en template despite the key already being present.

en template untouched; every other locale re-verified with
`arb.dart validate`, `missing` (0 everywhere) and
`audit-placeholders` (0 everywhere).
This is a long-form legal/financial risk disclosure (Liquid Bitcoin and
Instant Payments wallet risks). Translating it as part of the bulk pass
carries more legal risk than showing it in English until a native-speaker
legal review happens per locale, so revert its value back to the en
template text in all 26 non-English .arb files.

Sibling keys liquidRiskDisclosureTitle/SemanticLabel are untouched.
@ethicnology ethicnology self-assigned this Jul 17, 2026
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @ethicnology's task in 14m 57s —— View job


PR Review in progress

  • Gather context (diff vs origin/develop)
  • Review tools/arb.dart new commands for correctness bugs
  • Validate all 26 ARB files (key parity ✓, placeholder counts ✓, ICU brace balance ✓, script-correctness of rebuilt locales ✓)
  • Scan for encoding artifacts / wrong-script contamination
  • Sample translation quality across locales (5 parallel reviewers running)
  • Check CI (gen-l10n / analyze) result
  • Post findings + summary

@ethicnology
ethicnology merged commit 85fa9fe into develop Jul 17, 2026
3 checks passed
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