Skip to content

fix(l10n): give the Dutch-keyed catalogue entries an English value - #1801

Merged
rubenvdlinde merged 2 commits into
developmentfrom
fix/dutch-keyed-l10n-entries
Sep 4, 2026
Merged

fix(l10n): give the Dutch-keyed catalogue entries an English value#1801
rubenvdlinde merged 2 commits into
developmentfrom
fix/dutch-keyed-l10n-entries

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

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, and why not the other one

Keep the Dutch key, give it an English value in en.json, leave the Dutch value in nl.json — the pattern this catalogue already uses 166 times, from Acties to Annuleren. 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.json carries the same values, since a key absent from that overlay falls back to the key text.

What the sweep found beyond the brief

  • Three of the four entries this started from are already dead. Steller, Wacht op and Dagen in stap were Voorstellen columns that af1ff19 deleted; Steller survives only as a seed-data role name that 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 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, and unescape() decodes \uXXXX so it cannot recur.
  • test:l10n was already red on development: two used manifest strings, Queue and its empty text, had no en.json entry. Fixed here.
  • 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 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-l10n all 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

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
rubenvdlinde merged commit 73ad004 into development Sep 4, 2026
34 checks passed
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ 1a7c17b

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.

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