fix(i18n): unescape HTML entities in UI strings - #9721
Conversation
There was a problem hiding this comment.
Pull request overview
This PR updates UI locale message catalogs under src/i18n/messages/ to stop rendering double-escaped angle-bracket placeholders (e.g. <provider>) and synchronizes the resulting English source-string changes across all supported locales.
Changes:
- Replace HTML-entity placeholders like
<provider>/<model>with literal<provider>/<model>in Claude Code discovery-alias related UI strings across locales. - Update the OmniGlyph “gates” explanatory string that embeds a
<code>snippet (but see review comment about rich-text parsing). - Sync locale files (reordering and adding/removing keys) as part of the UI i18n synchronization.
Commands run (custom):
- None (review only; relied on provided diffs and code inspection).
Coverage result (custom):
- Not evaluated here (data-only JSON changes; no executable code changes expected).
Reviewed changes
Copilot reviewed 43 out of 43 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/i18n/messages/ar.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/az.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/bg.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/bn.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/cs.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/da.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/de.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/en.json | Source English string updates for angle-bracket placeholders and OmniGlyph copy |
| src/i18n/messages/es.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/fa.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/fi.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/fr.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/gu.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/he.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/hi.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/hu.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/id.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/in.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/it.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/ja.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/ko.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/mr.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/ms.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/nl.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/no.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/phi.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/pl.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/pt-BR.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/pt.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/ro.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/ru.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/sk.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/sv.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/sw.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/ta.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/te.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/th.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/tr.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/uk-UA.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/ur.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/vi.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/zh-CN.json | Locale sync for updated placeholder strings and related UI keys |
| src/i18n/messages/zh-TW.json | Locale sync for updated placeholder strings and related UI keys |
| "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", | ||
| "featureFlagArenaEloSyncEnabledDescription": "Enable periodic Arena AI leaderboard ELO sync for model intelligence rankings.", | ||
| "featureFlagExposeCcDiscoveryAliasesDescription": "Advertise claude/<provider>/<model> mirror ids on /v1/models so Claude Code gateway model discovery lists non-Claude models. Warning: doubles catalog entries for all clients when enabled globally.", | ||
| "featureFlagExposeCcDiscoveryAliasesDescription": "Advertise claude/<provider>/<model> mirror ids on /v1/models so Claude Code gateway model discovery lists non-Claude models. Warning: doubles catalog entries for all clients when enabled globally.", |
|
Thanks for the PR. Please address the mandatory items (tests and/or merge blockers) in this branch, then rerun checks before /merge-prs. |
3 similar comments
|
Thanks for the PR. Please address the mandatory items (tests and/or merge blockers) in this branch, then rerun checks before /merge-prs. |
|
Thanks for the PR. Please address the mandatory items (tests and/or merge blockers) in this branch, then rerun checks before /merge-prs. |
|
Thanks for the PR. Please address the mandatory items (tests and/or merge blockers) in this branch, then rerun checks before /merge-prs. |
|
Obrigado pelo PR. Mantive a revisão de
|
07be601 to
db2e7f7
Compare
|
I have fixed the merge conflicts. The failing checks are non-blocking and advisory, and do not have anything to do with the changes in this PR. |
db2e7f7 to
5fd2325
Compare
|
This PR's change (unescaping #9917 deliberately keeps those angle brackets HTML-entity ESCAPED because next-intl interprets raw Rebasing this branch onto |
Summary
Fixes HTML entity escaping (
<and>) being rendered literally in the UI instead of as angle brackets. Replaces escaped entities with raw<and>characters in the English source strings and synchronizes the updated placeholder strings across all 42 locale files.Before: UI showed
claude/<provider>/<model>After: UI shows
claude/<provider>/<model>Related Issues
Validation
Choose the change type and focused loop from the
Contribution Golden Path. The full unit suite,
Vitest, the 60% coverage gate, and the production build all run in CI on this PR (#8329):
npm run i18n:sync-ui:drynpm run i18n:check-ui-coveragenpm run i18n:check-value-drift(pre-existing stale translations initandru)npm run i18n:check-glossarynpm run check:cli-i18nnpm run lint(currently fails due to unrelated pre-existingtests/unit/vertex-functioncall-id-3440.test.tsESLint errors)Tests Added Or Updated
Coverage Notes
This PR modifies only locale JSON files under
src/i18n/messages/and does not change application logic.Coverage is not affected because no executable code was modified.
Reviewer Notes
</>) with literal angle brackets (</>).i18n:check-value-driftcurrently reports pre-existing stale translations for three keys in the Italian (it) and Russian (ru) locales.npm run lintcurrently reports unrelated pre-existing ESLint errors intests/unit/vertex-functioncall-id-3440.test.ts.