Skip to content

fix(i18n): add the Phase 3 orchestration keys to the nine EU locales - #13294

Merged
diegosouzapw merged 3 commits into
release/v3.8.51from
fix/orch-fase3-i18n-eu-locales
Sep 12, 2026
Merged

diegosouzapw merged 3 commits into
release/v3.8.51from
fix/orch-fase3-i18n-eu-locales

Conversation

@diegosouzapw

@diegosouzapw diegosouzapw commented Sep 10, 2026 •

Copy link
Copy Markdown
Owner

Fecha um gap deixado pela Fase 3 do Orchestration Canvas.

O que aconteceu

O lote de idiomas da UE (#13044) trouxe o repositório de 42 para 51 locales poucas horas depois de a Fase 3 ter traduzido suas chaves contra os 42 existentes. Resultado: el, et, ga, hr, lt, lv, mt, sl e sr ficaram sem todas as 11 chaves que a Fase 3 introduziu.

Na prática, nesses nove idiomas o painel de comparação de execuções e o empty-state "nenhuma execução corresponde a estes filtros" apareciam em inglês. Correção de uma afirmação anterior minha: eu havia dito "sem texto", o que está errado — deepMergeFallback em src/i18n/request.ts substitui pelo valor em inglês quando targetValue === undefined, então nada renderizava em branco, renderizava sem tradução. O gap é real; a gravidade que descrevi não era.

Por que nenhum gate pegou

i18n:check-ui-coverage impõe um piso de 80% por locale. Onze chaves faltando em ~13.000 deixa a cobertura em 99,9% — passa folgado. O gate mede percentual por idioma, não presença por funcionalidade, então uma feature inteira pode nascer sem tradução num locale novo sem acionar nada.

Vale registrar como limitação conhecida: o que pegaria esta classe é uma checagem por feature, não por percentual.

O que foi feito

As 11 chaves (compareMode, compareExit, compareHint, compareTitle, compareDetailFailed, compareDifferentIdentity, compareDuration, compareCost, compareEvents, compareDeltaLegend, noMatches) traduzidas de verdade em cada um dos nove idiomas, calibradas contra as chaves vizinhas do próprio arquivo — para que o vocabulário de "execução", "filtro" e "habilidade" case com o que aquele locale já usa.

Diff cirúrgico: 12 linhas adicionadas e 1 reposicionada por arquivo, nada mais.

Verificação

  • Os 51 locales parseiam como JSON e têm as 11 chaves como string não vazia, sem __MISSING__.
  • i18n:check-ui-coverage PASS · i18n:check-glossary PASS · i18n:check-value-drift PASS.

Refs #12392 #12378 #12639

The EU-language batch (#13044) landed 51 locales a few hours after the Phase 3
canvas work measured 42, so el/et/ga/hr/lt/lv/mt/sl/sr never received the eleven
keys that Phase 3 added — the whole compare-runs panel plus the noMatches empty
state rendered without text in those languages.

The i18n coverage gate cannot catch this class: it enforces an 80% floor per
locale, and eleven missing keys out of ~13,000 leaves coverage at 99.9%. What
would catch it is a per-feature check, not a per-locale percentage.

Each value is translated against the neighbouring keys in its own file so the
wording for run/filter/skill matches what the locale already uses.

Refs #12392 #12378 #12639
…nk text

An absent key is not rendered blank: deepMergeFallback in src/i18n/request.ts
substitutes the English value when targetValue === undefined, so the nine EU
locales showed the compare panel untranslated rather than empty. The fix is
unchanged; the description of what users saw was wrong.
@diegosouzapw
diegosouzapw merged commit 7741aef into release/v3.8.51 Sep 12, 2026
16 of 18 checks passed
Githab-capibara added a commit to Githab-capibara/OmniRoute that referenced this pull request Sep 17, 2026
…iegosouzapw#13294)

Merged as part of the owner batch of 2026-09-11.

This PR had a live worktree in another session, so it sat outside the main 39. Merged on your explicit call, validated first rather than taken on trust: boarded with the other 10 worktree-held PRs into a consolidated worktree off `release/v3.8.51`.

- ESLint over every changed file: no errors
- `typecheck:core` clean; `check:dashboard-typecheck` OK; `check:changelog-integrity` OK
- complexity 2821 / baseline 3218 and cognitive-complexity 1272 / baseline 1437
- 203 of 208 assertions green. The 5 remaining (`guide-settings-route` ×4, `hard-session-lease-bypass-inventory` ×1) reproduce on the pure tip with nothing from this batch applied.
- `imageGeneration.ts` rebaselined 3259 → 3293 for diegosouzapw#12945's image-only-model guard, landed separately in diegosouzapw#13392 so nothing was pushed onto a live branch.

⚠️ base-red inherited: diegosouzapw#12732 — provider count 356 vs 358 and `open-sse/utils/stream.ts` 3115 > frozen 3098, both reproducing on the pure tip.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…iegosouzapw#13294)

Merged as part of the owner batch of 2026-09-11.

This PR had a live worktree in another session, so it sat outside the main 39. Merged on your explicit call, validated first rather than taken on trust: boarded with the other 10 worktree-held PRs into a consolidated worktree off `release/v3.8.51`.

- ESLint over every changed file: no errors
- `typecheck:core` clean; `check:dashboard-typecheck` OK; `check:changelog-integrity` OK
- complexity 2821 / baseline 3218 and cognitive-complexity 1272 / baseline 1437
- 203 of 208 assertions green. The 5 remaining (`guide-settings-route` ×4, `hard-session-lease-bypass-inventory` ×1) reproduce on the pure tip with nothing from this batch applied.
- `imageGeneration.ts` rebaselined 3259 → 3293 for diegosouzapw#12945's image-only-model guard, landed separately in diegosouzapw#13392 so nothing was pushed onto a live branch.

⚠️ base-red inherited: diegosouzapw#12732 — provider count 356 vs 358 and `open-sse/utils/stream.ts` 3115 > frozen 3098, both reproducing on the pure tip.
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