Skip to content

fix(i18n): standardize UI-language promise on 12 premium + close the stale gate#226

Merged
heznpc merged 1 commit into
mainfrom
fix/i18n-gate-12-premium
Jun 17, 2026
Merged

fix(i18n): standardize UI-language promise on 12 premium + close the stale gate#226
heznpc merged 1 commit into
mainfrom
fix/i18n-gate-12-premium

Conversation

@heznpc

@heznpc heznpc commented Jun 17, 2026

Copy link
Copy Markdown
Owner

The "in-product UI localized in 11 languages" claim was a stale conflation of three separate surfaces. Standardized on 12 (premium dictionaries) per owner decision, and fixed the root cause: a hardcoded CI gate that let two real gaps through.

Gate (scripts/check-i18n-keys.js)

expectedLangs was a hand-coded en + 10 list (missing it, id), so check:i18n passed at 0 warnings while the it/id UI labels were actually missing. Now derived from PREMIUM_LANGUAGE_CODES (en + 12) — self-updating when a premium locale is added, with a 12-language fallback. Tightening it immediately surfaced exactly the two gaps below.

Labels (src/lib/constants.js)

Filled what the tightened gate surfaced — BANNER_UI.it, BANNER_UI.id, EXAMPLE_QUESTIONS.id — so the gate matches the real product promise. Native-reviewed (it + id). check:i18n back to 0 warnings.

Docs

11 languages12 premium languages (POSITIONING ×2, TODO, TELEMETRY_DESIGN), and separated the three surfaces that were being conflated:

surface count
premium dictionaries + in-product UI labels 12
_locales/ browser name/description (Chrome metadata) 33
Chrome Web Store listing marketing copy EN-only

Verify

9 gates green (check:i18n 0/0) · 555 unit · e2e 20/20.

🤖 Generated with Claude Code

…stale gate

The "in-product UI localized in 11 languages" claim was a stale conflation of three
separate surfaces. Standardized on 12 (premium dictionaries) per owner decision,
and fixed the root cause: a hardcoded CI gate that let two real gaps through.

- Gate (scripts/check-i18n-keys.js): `expectedLangs` was a hand-coded `en + 10`
  list (missing it, id), so `check:i18n` passed at 0 warnings while it/id labels
  were actually missing. Now derived from `PREMIUM_LANGUAGE_CODES` (en + 12),
  self-updating when a premium locale is added, with a 12-language fallback.
- Labels (src/lib/constants.js): filled the gaps the tightened gate surfaced —
  BANNER_UI.it, BANNER_UI.id, EXAMPLE_QUESTIONS.id — so the gate matches the actual
  product promise. Native-reviewed (it + id). check:i18n is back to 0 warnings.
- Docs: "11 languages" → "12 premium languages" (POSITIONING ×2, TODO, TELEMETRY),
  and separated the 33 `_locales/` Chrome-metadata locales from the in-product UI
  promise and the EN-only store-listing copy, which were being conflated.

The three surfaces, now stated distinctly: premium dictionaries + in-product UI
labels = 12; `_locales/` browser name/description metadata = 33; CWS listing
marketing copy = EN-only.

9 gates green (check:i18n 0/0) · 555 unit · e2e 20/20.
@heznpc heznpc enabled auto-merge (squash) June 17, 2026 09:37
@heznpc heznpc merged commit 31b1b50 into main Jun 17, 2026
9 checks passed
@heznpc heznpc deleted the fix/i18n-gate-12-premium branch June 17, 2026 09:38
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