Skip to content

feat(i18n): add Bosnian (bs) localization - #14187

Merged
diegosouzapw merged 9 commits into
cheaper-inference:release/v3.8.51from
jasminsehic:feat/bosnian-locale
Sep 22, 2026
Merged

diegosouzapw merged 9 commits into
cheaper-inference:release/v3.8.51from
jasminsehic:feat/bosnian-locale

Conversation

@jasminsehic

Copy link
Copy Markdown
Contributor

PR: feat(i18n): add Bosnian (bs) localization

Description

This PR implements full support for the Bosnian (bs) locale across all OmniRoute surfaces. All required configuration, UI messages, and documentation indices have been updated to ensure 100% parity with the English source.

Changes

⚙️ Configuration

  • config/i18n.json: Added bs entry with label "BS", name "Bosanski", and flag "🇧🇦".

⌨️ UI Surfaces

  • src/i18n/messages/bs.json: Created translation file.
  • bin/cli/locales/bs.json: Created CLI localization file.

📖 Documentation

  • Added Bosnian to the index and updated global language count (66 $\rightarrow$ 67).
  • Regenerated 🌐 language bars with bs added to all language docs.

Verification Results

🧪 Tests

  • Surface Parity: node --import tsx/esm --test tests/unit/i18n-locale-surfaces-parity.test.ts $\rightarrow$ PASS
  • UI Coverage: node scripts/i18n/check-ui-keys-coverage.mjs --locale=bs $\rightarrow$ 100% Coverage
  • General i18n Check: npm run i18n:check $\rightarrow$ PASS
  • Validated locale: python3 scripts/i18n/validate_translation.py quick -l bs $\rightarrow$ OK
  • Checked code keys: python3 scripts/i18n/check_translations.py $\rightarrow$ OK

📊 Metrics

  • Translation Ratio: OK — 66 locales within baseline (+0.5).

Checklist

  • bs entry added to config/i18n.json
  • UI messages and CLI locales created and translated
  • All documentation indices and counts updated
  • All i18n parity tests and other tests passing

On top of the locale by Jasmin Sehic: merge release/v3.8.51 (the
translation state now carries the base's records plus the bs entries;
the seven docs whose only edit was the 🌐 bar are adopted), the 8
dashboard keys the base added meanwhile, retranslation of the 877 leaves
that were verbatim English (6.8 % -> 2.5 %, baseline set to the measured
value instead of 6.8), section-level refresh of the 145 docs mirrors that
were translated from older sources (EMBEDDED-SERVICES retranslated in
full to recover its table rows), and the language-count strings.
The site half is OmniRouteSite#9.
@diegosouzapw

Copy link
Copy Markdown
Collaborator

Thanks @jasminsehic — Bosnian is a great addition. I pushed two follow-up commits on your branch (ad786475, c32f339f; your commit stays as the author of the locale) so the PR covers every surface the other 65 locales carry:

  • Merged release/v3.8.51 — .i18n-state.json now carries the base's records plus the bs entries; the seven docs whose only edit was the 🌐 language bar are adopted, so the drift gate does not ask for a retranslation of a bar line.
  • Dashboard — the 8 keys the base added after your cut are translated; the 877 leaves that were verbatim English are retranslated (6.8 % → 2.5 %, the same level as the other locales), and config/quality/i18n-translation-baseline.json pins bs at the measured 2.5 instead of 6.8 (the ratio gate is a ratchet: a lenient baseline would let English creep back in unnoticed).
  • Docs — the 145 docs/i18n/bs/** mirrors that had been translated from older versions of their sources are refreshed section by section on the same backend as the other locales; EMBEDDED-SERVICES.md retranslated in full to recover its table (118 → 130 rows).
  • CLI — already complete (830/830, 5 leaves identical to English), untouched.
  • Site — the omniroute site is a separate repo: diegosouzapw/OmniRouteSite#9 adds lang/bs.json (505 keys), the language menus and the 66 → 67 count, and merges together with this PR.

Gates on the branch: i18n:check-keys OK (66 locales), i18n:check-keys:cli OK, i18n:check-ratio OK, mirror audit 0 missing / 0 leaked / 0 broken tables; locale-surfaces-parity, language-bar, locale-scaffold, placeholder-parity, key-completeness, cli-namespaces, dashboard-localization-contract all green. The only remaining i18n:check drift (README.md, ENVIRONMENT.md) is the base's own and lands in #14461.

…ate; restore the bs ICU placeholder quotes

The Bosnian locale adds a 67th messages file (agnes-cn-provider pins the
count), 'Model' is the Bosnian word for the Recent Requests legend (same
cognate as hr/sr) and the retranslation had dropped the ICU literal quotes
around <your OmniRoute API key> in ccOnboardingKeyPlaceholder.
@diegosouzapw

Copy link
Copy Markdown
Collaborator

CI on cb864a63: the 7 reds are the base tip's, not this PR's (the diff is catalogs, docs/i18n/**, .i18n-state.json, three test pins and the bs baseline — no application code). Reproduced on the pure tip 2c9938d1 in a detached worktree: the 12 failing unit test files (chat-route-coverage, chatcore-translation-paths, check-docs-counts-sync, combo-builder-options-route, domain-branch-hardening, image-model-not-in-chat-catalog-6457, model-token-limit-catalog, opencode-executor, provider-node-reserved-prefix, provider-translate-path-golden, qwen38-max-bare-id-alias, specialty-model-catalog-routes) fail there with the same names; API Route Typecheck is src/app/api/v1/combos/projectCombo.ts, changed on the base in 75305b7d; Docs Gates is the migration count (code has 179, README/AGENTS/llm.txt say 178 — this PR adds no migration); Fast Quality Gates and the docs drift on 8 sources (README, QUALITY_GATES, DOCKER_GUIDE, TROUBLESHOOTING, CLI-TOOLS, ENVIRONMENT, PROVIDER_REFERENCE, STEALTH_GUIDE) are on the tip as well. ⚠️ base-red inherited: #13866. Merging; the site half lands with it.

@diegosouzapw
diegosouzapw merged commit 373c31f into cheaper-inference:release/v3.8.51 Sep 22, 2026
9 of 16 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.

2 participants