fix(l10n): give the Dutch-keyed catalogue entries an English value - #1801
Merged
Conversation
l10n/en.json mapped 23 Dutch keys to themselves, so an English UI rendered Dutch: `Commissie` and `Bezwaar` as column headers, `Kaartlaag` and `Subsidie` as page titles, `Bevoegdheidstype` and `Doormandaat` as form labels. The fix is the one this catalogue already uses 166 times, from `Acties` to `Annuleren`: keep the Dutch key, give it an English VALUE in en.json and leave the Dutch value in nl.json. Renaming the key instead would have orphaned every other locale's translation of it, and 216 of these keys are translated elsewhere. Nothing is orphaned here. en_US.json carries the same values, since a key absent from that overlay falls back to the key text. Three of the four entries this pass started from are already dead. `Steller`, `Wacht op` and `Dagen in stap` were columns on the Voorstellen page that af1ff19 deleted, and `Steller` survives only as a seed-data role name that src/menu-layout.json deliberately keeps in Dutch. Only `Commissie` was live. `{from} — (no end)` was worse than untranslated. check-l10n.js does not decode \uXXXX, so it wrote the literal backslash-u text into the catalogue while t() looks up a real dash at runtime. The key was never requested and all 35 translations of it were dead on arrival, with the escape text baked into each one. The source now uses a literal en-dash for the date range, the key is migrated across all 38 catalogues and every translation is carried over and repaired, and unescape() decodes \uXXXX so this cannot recur. Two used manifest strings, `Queue` and its empty text, had no en.json entry at all, so test:l10n was already red on development. `All types` is a folderSidebar allLabel that CnFolderSidebar renders raw, never through t(), so its nl.json entry was removed rather than given a source key. The guard is tests/l10n/language-neutral-keys.json plus a new hard failure in check-l10n.js. If en.json and nl.json hold the same value for a USED key, the English catalogue offers a reader nothing the Dutch one does not: either the word is the same in both languages, and the 40 that are now say so explicitly, or the key is Dutch. Proven red against the pre-fix catalogue, where it names 18 of the 23. The other five are Dutch keys whose Dutch translation differs only by hyphenation, which no value comparison can see. The file's docblock claimed this check existed since nl-locale-coverage-gap-and-dutch-keys; it never did, and that is how 23 keys shipped.
…ow covers The Dutch-key pass covered 60 more schema strings than the baseline recorded. Leaving the ratchet high would let those 60 regress unnoticed.
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48 and
rjzondervan
as code owners
September 4, 2026 08:05
Contributor
Quality Report — ConductionNL/dossiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue3-compile | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 106/106 | |||
| npm | ✅ | ✅ 541/541 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-09-04 09:54 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
l10n/en.jsonmapped 23 Dutch keys to themselves, so an English UI rendered Dutch:CommissieandBezwaaras column headers,KaartlaagandSubsidieas page titles,BevoegdheidstypeandDoormandaatas form labels.The fix, and why not the other one
Keep the Dutch key, give it an English value in
en.json, leave the Dutch value innl.json— the pattern this catalogue already uses 166 times, fromActiestoAnnuleren. Renaming the keys instead would have orphaned every other locale's translation, and 216 of these keys are translated elsewhere. Nothing is orphaned.en_US.jsoncarries the same values, since a key absent from that overlay falls back to the key text.What the sweep found beyond the brief
Steller,Wacht opandDagen in stapwere Voorstellen columns that af1ff19 deleted;Stellersurvives only as a seed-data role name thatmenu-layout.jsondeliberately keeps in Dutch. OnlyCommissiewas live.{from} — (no end)was worse than untranslated.check-l10n.jsdoes not decode\uXXXX, so it wrote the literal backslash-u text into the catalogue whilet()looks up a real dash at runtime. The key was never requested and all 35 translations were dead on arrival with the escape text baked in. The source now uses a literal en-dash, the key is migrated across all 38 catalogues with every translation carried over and repaired, andunescape()decodes\uXXXXso it cannot recur.test:l10nwas already red ondevelopment: two used manifest strings,Queueand its empty text, had noen.jsonentry. Fixed here.All typesis afolderSidebarallLabelthatCnFolderSidebarrenders raw, never throught(), so itsnl.jsonentry was removed rather than given a source key.The schema-string baseline is lowered from 2824 to 2764, so the 60 newly covered strings cannot regress unnoticed.
Verified locally
test:l10n,check:l10n-js,check:schema-l10nall pass; eslint and prettier clean on the changed files; vitest 359 passed. Remote checks not awaited, per the current merge-on-local-verification policy while CI is bottlenecked.🤖 Generated with Claude Code