Skip to content

l10n: be is Russian, lb is Dutch, rm is a Rumantsch/Portuguese hybrid — authentic values recoverable from git #3094

Description

@rubenvdlinde

Found while clearing the cognate debt on #2634, and deliberately not fixed there — restoring these needs ~2,285 corrections records to satisfy selfcheck, which is its own change.

What is wrong

Three shipped bundles are substantially a different language:

locale actually evidence
be Belarusian Russian 1,414 of 2,720 values byte-identical to ru.js; 4,336 occurrences of и and 131 of щ — letters that do not exist in the Belarusian alphabet
lb Luxembourgish Dutch 820 of 2,720 identical to nl.js (AddToevoegen, Er is een deactiveringsverzoek in behandeling.)
rm Rumantsch Rumantsch/Portuguese hybrid 1,007 of 2,720 identical to pt.js; pt-identity jumped 40 → 1,005 at 42e94f75e

I verified the Belarusian numbers independently: 1,414 identical to ru, 4,336 и.

be.json\s own corrections record already says "the value was RUSSIAN, not Belarusian… Belarusian has no и" — that audit ran against the authentic bundle, which was then destroyed.

Root cause — the same bug that ate 1,140 other values

Earlier finishing passes wrote only l10n/<loc>.js. That file is generated from l10n/<loc>.json. Commit 99409853f ("rebuild the browser catalogues") regenerated all 37 .js from the unchanged .json sources and silently reverted every authored value.

Provable rather than inferred: for ro, the recovered set is 288 values = exactly its parity debt, its 63 untouched values = exactly its 63 recorded cognates, and its 67 deltas = exactly its 67 recorded corrections. Same shape for bg (285/42/3).

The authentic text still exists in git

locale recoverable from
be 1,013 values b6d3727e1
lb 561 values de9ade74e
rm 711 values c959c9526

Why this needs its own change

Restoring them trips selfcheck, which requires a corrections record per changed value — roughly 2,285 records. That is a deliberate pass, not a cherry-pick.

The check that would have caught all of it

Nothing asserts that l10n/<loc>.js matches what regenerating it from l10n/<loc>.json would produce. check:l10n-js exists but ran after the damage. A CI check that regenerates and diffs would have failed the moment a .js-only edit landed, instead of letting a later rebuild quietly discard 1,140+ authored values across at least seven locales.

Related: #3093 (Icelandic corrections recorded but never applied) is the same family — a decision that exists in config and not in the shipped bundle.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

triageAwaiting triage

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions