chore(l10n): korte Engelse restanten vertaald, en het gat in de parsers gedicht #1539

Merged
brenno merged 5 commits from chore/l10n-restanten into main 2026-08-17 18:15:05 +00:00
Owner

Sluit #1534.

De echte oorzaak was geen drempel maar een parserfout

Ik dacht dat slides imported. doorglipte omdat het twee woorden telt. Dat klopte, maar het was niet het hele verhaal: dart format schrijft een string met een apostrof in dubbele aanhalingstekens, en twee parsers lazen alleen enkelaangehaalde literals.

Gevolg voor "dia's geïmporteerd.":

  • l10n_untranslated_test zag de regel niet eens stáán — hij kon dus nooit klagen;
  • tool/l10n_po.dart liet hem uit elke vertalersexport vallen, dus hij was via de vertalersroute onvertaalbaar.

De zelftoets dacht dit af te dekken met 'De voorbeelddia\'s' — maar juist die vorm schrijft de formatter nooit. Beide parsers gerepareerd, twee tests erbij. De bestaande round-trip-toets (export + import = 0 wijzigingen) bewijst dat de heenweg niets vervormt.

Dat is de zwaarste bevinding hier: een sleutel die stilzwijgend buiten twee gereedschappen viel.

De weegvraag, gemeten in plaats van gegokt

Op unieke sleutel/waarde-paren (regels tellen zou één string dertig keer meetellen):

drempel Engelse wachttest doorvoerpoort
1 175 uniek 249 sleutels
2 38 uniek (22 echt fout, 16 cognaat) 47 sleutels (5 echt fout, 42 cognaat)
3 3 (= de huidige uitzonderingen) 17 (= exact loanKeys)

Engelse wachttest: drempel naar twee, alle 22 echte gevallen vertaald. Doorvoerpoort: blijft drie.

Doorslaggevend was niet het trefpercentage maar de vorm van de uitzondering. loanKeys werkt per sleutel en zwijgt daarmee meteen in alle 31 talen — Titel (H1) vrijstellen omdat het Deens dat zo zegt, maakt hem ook stil voor het Grieks. Die lijst zou van 17 naar 44 groeien, grotendeels met cognaten. In de wachttest gaat de uitzondering per (taal, waarde), dus daar is verlagen goedkoop. Die redenering en de tabel staan nu in de doc-comment van beide poorten, zodat niemand hoeft te hermeten.

Vertaald

  • Negen LibrePlan-labels in alle 30 talen. De maatstaf kwam uit het blok zelf: Kritieke pad (flow) was er al overal vertaald, met de vakterm blijvend staan — dus Gantt, WBS en LibrePlan blijven, het beschrijvende deel gaat mee.
  • 22 korte Engelse restanten, 350 regels: het complete DOE- en hypothesetoetsblok, plus slides imported., Alt text, Phase gate, Asset inventory en meer.
  • Nederlandse restanten in et/fi/hu/lt/lv en vier Friese woorden die afweken van wat fy.dart elders zelf zegt.

20 nieuwe vrijstellingen in de wachttest, elk met reden — waaronder vier e.g.-varianten in het Latijn, want exempli gratia ís Latijn.

Waar de zekerheid ophoudt

Het Klingon-statistiekblok was al grotendeels Engels ('Toets': 'Test'); daar is nu gemunt naar de idiomen van het bestand zelf, maar qech 'ol (hypothesetoets), tlhegh 'ol (lineaire regressie) en AI De'wI' zijn coinages. Latijn kreeg gubernaculum voor cockpit. En in fr/es/it is Phase gate vertaald terwijl die drie het leenwoord aanhielden — aangesloten bij de meerderheid, maar Frans zegt in de praktijk eerder revue de phase.

Poorten

make check groen (9.612 tests, dekking 86,9%), doorvoerpoort 0/0, pariteit en wezen groen. make check-secrets groen, make sast groen (0 findings).

Sluit #1534. ## De echte oorzaak was geen drempel maar een parserfout Ik dacht dat `slides imported.` doorglipte omdat het twee woorden telt. Dat klopte, maar het was niet het hele verhaal: **`dart format` schrijft een string met een apostrof in dubbele aanhalingstekens**, en twee parsers lazen alleen enkelaangehaalde literals. Gevolg voor `"dia's geïmporteerd."`: - `l10n_untranslated_test` zag de regel niet eens stáán — hij kon dus nooit klagen; - `tool/l10n_po.dart` liet hem uit elke vertalersexport vallen, dus hij was via de vertalersroute *onvertaalbaar*. De zelftoets dacht dit af te dekken met `'De voorbeelddia\'s'` — maar juist die vorm schrijft de formatter nooit. Beide parsers gerepareerd, twee tests erbij. De bestaande round-trip-toets (export + import = 0 wijzigingen) bewijst dat de heenweg niets vervormt. Dat is de zwaarste bevinding hier: een sleutel die stilzwijgend buiten twee gereedschappen viel. ## De weegvraag, gemeten in plaats van gegokt Op **unieke sleutel/waarde-paren** (regels tellen zou één string dertig keer meetellen): | drempel | Engelse wachttest | doorvoerpoort | |---|---|---| | 1 | 175 uniek | 249 sleutels | | 2 | **38 uniek** (22 echt fout, 16 cognaat) | **47 sleutels** (5 echt fout, 42 cognaat) | | 3 | 3 (= de huidige uitzonderingen) | 17 (= exact `loanKeys`) | **Engelse wachttest: drempel naar twee**, alle 22 echte gevallen vertaald. **Doorvoerpoort: blijft drie.** Doorslaggevend was niet het trefpercentage maar de *vorm van de uitzondering*. `loanKeys` werkt per sleutel en zwijgt daarmee meteen in alle 31 talen — `Titel (H1)` vrijstellen omdat het Deens dat zo zegt, maakt hem ook stil voor het Grieks. Die lijst zou van 17 naar 44 groeien, grotendeels met cognaten. In de wachttest gaat de uitzondering per (taal, waarde), dus daar is verlagen goedkoop. Die redenering en de tabel staan nu in de doc-comment van beide poorten, zodat niemand hoeft te hermeten. ## Vertaald - **Negen LibrePlan-labels** in alle 30 talen. De maatstaf kwam uit het blok zelf: `Kritieke pad (flow)` was er al overal vertaald, met de vakterm blijvend staan — dus `Gantt`, `WBS` en `LibrePlan` blijven, het beschrijvende deel gaat mee. - **22 korte Engelse restanten**, 350 regels: het complete DOE- en hypothesetoetsblok, plus `slides imported.`, `Alt text`, `Phase gate`, `Asset inventory` en meer. - Nederlandse restanten in et/fi/hu/lt/lv en vier Friese woorden die afweken van wat `fy.dart` elders zelf zegt. 20 nieuwe vrijstellingen in de wachttest, elk met reden — waaronder vier `e.g.`-varianten in het Latijn, want *exempli gratia* ís Latijn. ## Waar de zekerheid ophoudt Het Klingon-statistiekblok was al grotendeels Engels (`'Toets': 'Test'`); daar is nu gemunt naar de idiomen van het bestand zelf, maar `qech 'ol` (hypothesetoets), `tlhegh 'ol` (lineaire regressie) en `AI De'wI'` zijn coinages. Latijn kreeg `gubernaculum` voor cockpit. En in fr/es/it is `Phase gate` vertaald terwijl die drie het leenwoord aanhielden — aangesloten bij de meerderheid, maar Frans zegt in de praktijk eerder *revue de phase*. ## Poorten `make check` groen (9.612 tests, dekking 86,9%), doorvoerpoort 0/0, pariteit en wezen groen. `make check-secrets` groen, `make sast` groen (0 findings).
De negen labels van het LibrePlan-importdialoog stonden in élke taal behalve
het Engels nog letterlijk in het Nederlands: `Gantt-planning`,
`WBS (hiërarchie)`, `Projectstatus (cockpit)`, `Milestones (tijdlijn)`,
`Resources (tabel)`, `Timesheet (tabel)`, `Resourcebelasting (grafiek)`,
`LibrePlan importeren` en `Import mislukt: `.

Ze glipten langs `check-l10n-dutch-passthrough` omdat die pas vanaf drie
woorden telt en dit twee-woordlabels zijn. `Kritieke pad (flow)` uit hetzelfde
blok wás wel vertaald en gaf de maatstaf: de vaste vakterm blijft staan (WBS,
Gantt, LibrePlan), het beschrijvende deel gaat mee — zoals en 'Critical path
(flow)' en da 'Kritisk vej (flow)'.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`dart format` schrijft een string met een apostrof en zonder dubbele quote in
DUBBELE aanhalingstekens: `"dia's geïmporteerd.": 'slides imported.',`. Twee
parsers lazen alleen de enkelaangehaalde vorm en sloegen zo'n regel dus
compleet over:

* test/l10n_untranslated_test.dart — de Engelse wachttest zag die dertig
  regels niet eens staan. De zelftoets dacht dit af te dekken met
  `'De voorbeelddia\'s'`, maar díe vorm schrijft de formatter juist nooit; hij
  normaliseert hem weg naar de dubbele quote. De zelftoets toetste dus een
  vorm die in de boom niet voorkomt.
* tool/l10n_po.dart — een vertaler kreeg zo'n sleutel niet in zijn export en
  kon hem met een import ook niet verbeteren. Onzichtbaar in plaats van
  onvertaald, en dat is de stillere fout van de twee.

Bij import gaat de sleutel nu ongewijzigd terug, quotes en al: het is niet aan
een vertaalronde om die keuze om te zetten. De ronde-trip-toets (export +
import = 0 wijzigingen) bewijst dat de heenweg niets vervormt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
De Engelse wachttest telde pas vanaf drie woorden mee. Daaronder zat een hele
laag onvertaald Engels dat er al die tijd doorheen gleed: `Fraction p`,
`DOE design`, `Fill grid`, `Main effects`, `Hypothesis test`, `Measurement
data`, `One-sample t-test`, `slides imported.` en nog vijftien andere — samen
350 vertaalregels in 30 talen, waarvan het complete DOE- en
hypothesetoetsblok.

Opnieuw gemeten (unieke sleutel/waarde-paren, niet regels): drempel 1 = 175,
drempel 2 = 38, drempel 3 = 3. Van de 38 bij twee waren er 22 echt onvertaald
en 16 een echt cognaat. 22 opruimen is te doen, dus zijn ze vertaald en staat
de drempel nu op twee.

De 16 cognaten staan in `allowed`, elk met de reden erbij: `Link` is gewoon
Deens/Duits/Estisch, `System` is Deens en Zweeds, `Image 1` is Frans, en `e.g.`
is Latijn (exempli gratia) en niet Engels. Dat die vrijstelling per (taal,
waarde) gaat en niet per sleutel is precies wat het verlagen hier goedkoop
maakt: een Franse `Image 1` vrijstellen zegt niets over het Grieks.

`slides geïmporteerd.` stond al in alle 31 talen vertaald; de bijna-dubbele
sleutel `dia's geïmporteerd.` heeft die waarden nu overgenomen in plaats van
een nieuwe vertaling te verzinnen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
De zusterpoort ging bij #1534 naar twee woorden; deze niet. Dat is nu een
gemeten keuze in plaats van een vergeten keuze, en de meting staat in de
doc-comment zodat de volgende persoon hem niet hoeft over te doen:

  drempel 1 → 249 sleutels / 1.317 regels
  drempel 2 →  47 sleutels /   187 regels
  drempel 3 →  17 sleutels /    70 regels (precies loanKeys)

Van de 30 sleutels die twee er bovenop legt waren er 25 een echt leenwoord of
Germaans cognaat (`Links (mm)` ÍS Duits, `Titel (H1)` is Deens/Fries/Zweeds) en
5 echt onvertaald. Zestien procent raak.

Doorslaggevend is niet dat percentage maar de vorm van de uitzondering:
loanKeys gaat per SLEUTEL en zwijgt dus meteen in alle 31 talen. `Titel (H1)`
vrijstellen omdat het Deens toevallig `Titel` zegt, maakt hem ook stil voor het
Grieks. De lijst zou van 18 naar 43 sleutels groeien, grotendeels met cognaten
— meer dekking kwijt dan gewonnen. In de wachttest ligt dat andersom (per taal
én waarde), en dáárom kon die wél omlaag.

De 5 echte gevallen zijn los vertaald, zonder de drempel aan te raken:
`Bijvoorbeeld CVE-2026-12345` stond nog Nederlands in et/fi/hu/lt/lv, en het
Fries zei `Links (mm)`, `Tussentitel` en `informatieveiligheid` waar het elders
`Lofts`, `Tuskenkop` en `Ynformaasjefeiligens` zegt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
docs(l10n): de gemeten getallen in de doorvoerpoort kloppend gehouden
All checks were successful
scans / scans (pull_request) Successful in 1m56s
static-gate / static-gate (pull_request) Successful in 4m24s
f8a803accc
De meting is gedaan vóór de opruimronde; wie nu narekent krijgt 44 en 179 in
plaats van 47 en 187. Dat verschil is precies de vijf sleutels die daarna
vertaald zijn, en dat staat er nu bij — anders leest een kloppende hertelling
als een afwijking. Ook de telling van loanKeys gecorrigeerd: 17, niet 18.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
brenno merged commit cef0b13151 into main 2026-08-17 18:15:05 +00:00
Sign in to join this conversation.
No description provided.