feat(l10n): vergelijk de taaltabellen onderling in plaats van alleen tegen het gebruik #1529
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1529
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/l10n-tabelgelijkheid"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat er mis was
De twee bestaande vertaalpoorten redeneren allebei vanuit het gebruik in
lib/:make l10n-check/app_localizations_testeisen een vertaling voor elked('…')-literal die daar staat, encheck_l10n_orphansvraagt of een sleutel nog wordt opgehaald (en leest daarvoor alleenen.dart).Een sleutel die wél in de tabellen staat maar even nergens wordt opgevraagd valt door beide mazen. Hij mag dan in de ene taal bestaan en in de andere ontbreken zonder dat iets klaagt — en dat was ook zo. (#1523)
De poort
tool/check_l10n_table_parity.dart+make check-l10n-parity: elke sleutel die in één taaltabel staat moet in álle staan, ongeacht of hij nu wordt opgevraagd. AST-gemeten, net als de wezenpoort.Twee families, geen drie.
_dutchSource*en_dutchSourceAdd*zijn één naamruimte —make add-l10nschrijft in de toevoegingen,d()leest uit allebei, en waar de knip ligt verschilt per taal puur door volgorde (de meeste 1266/2014, de/es/fr/it 501/2777, tr 1949/1331). Per tabel vergelijken zou ruim duizend betekenisloze verschillen per taal melden._strings*staat apart.nl is de brontaal en heeft geen brontabellen (
d()geeft voor nl de brontekst meteen terug). Die uitzondering zit in de poort zelf, niet in een uitzonderingslijst.In
check, niet incheck-full— anders dan zusterpoortcheck-l10n-orphans. Die leunt op tekstbewijs en kan zich vergissen; daarom draagt ze een basislijn en draait ze in de trage ronde. Dit is een exacte verzamelingsvergelijking: niets te interpreteren, dus geen valse melding mogelijk en geen basislijn nodig — nul is de enige stand. 32 bestanden, klaar in een seconde. Dat hoort in de ronde die élke commit tegenhoudt.Wat de poort bij invoering vond, en wat ermee is gebeurd
Geen basislijn aangelegd — bij #1520 is er juist één weggewerkt. Alle drie de gevallen zijn in deze tak opgeruimd.
'Subtitel','Kies een video','Kies een audiobestand','Platte tekst'— stonden in de andere 25 talen en worden wél opgehaald (mediakiezer inimage_service.dart, taalkeuze van het codeblok incode_editor.dart)'Ondertitel'/'Subtitel (H2)','Kies een afbeelding', en wat de andere talen bij'Platte tekst'doen). Voor het Fries'Gewoane tekst'in plaats van het Nederlandse woord, want een identieke vertaling wordt elders juist bewaakt.'Toestemming ingetrokken'en'U moet eerst de privacy- en gebruiksvoorwaarden accepteren…'— nergens opgehaald: geen literal, geen asset, geen sjabloon'Toestemming intrekken'(de knop); die staat in alle 31 talen._stringsNl; één zelfs met een Engelse waarde ("dia's geïmporteerd.": 'slides imported.')d()raadpleegt voor nl geen tabel, en niets roeptt()met een Nederlandse zin aan — de strings worden viad()opgehaald en staan als bronsleutel netjes in alle 31 vertaaltabellen. Patroon van een restant: in precies één taal, in geen enkele andere.Toetsing
test/l10n_table_parity_test.darttoetst in twee richtingen op mini-repo's: gelijke tabellen leveren géén melding op (ook met nl zonder brontabellen, en met de knip op een andere plek), en elk geslagen gat — sleutel weg bij één taal, sleutel bij maar één taal, taal zonder brontabellen — moet gemeld worden, met de juiste familie en de juiste talenlijst. Plus twee metingen op de echte boom.Poorten
make checkgroen (exit 0, dekking 86,9%, per-bestandsvloer 0 onder),make check-staticgroen,make check-registrationsgroen,make check-l10n-orphansgroen (0, basislijn 0),make l10n-checkgroen.check-secrets/sast/DAST niet gedraaid — deze wijziging voegt geen afhankelijkheid toe, raakt geen geserveerd oppervlak en bevat geen geheimen.Bewaker-stap bewust overgeslagen: dit raakt het bestandsformaat, de opslag, een afhankelijkheid, uitgaand verkeer noch een publieke belofte — het is een interne poort plus vier vertalingen.
'Subtitel', 'Kies een video', 'Kies een audiobestand' en 'Platte tekst' stonden in 25 talen en ontbraken in de, es, fr, fy, it en pap. Ze worden wél opgehaald (de mediakiezer in image_service.dart, de taalkeuze van het codeblok in code_editor.dart), dus deze zes talen vielen stil terug op het Engels. De vertalingen volgen de zusterregels die er al stonden, zodat de app in één stem blijft praten: 'Subtitel' naar 'Ondertitel'/'Subtitel (H2)', de twee kiezers naar 'Kies een afbeelding', en 'Platte tekst' naar wat de andere talen daar doen ('Texto simples', 'Düz metin', …). Voor het Fries 'Gewoane tekst' in plaats van het Nederlandse 'Platte tekst', want een identieke vertaling wordt elders juist bewaakt.De twee bestaande vertaalpoorten redeneren allebei vanuit het GEBRUIK in lib/: `l10n-check` en app_localizations_test eisen een vertaling voor elke `d('…')`-literal die ze daar vinden, en check_l10n_orphans vraagt of een sleutel nog wordt opgehaald. Een sleutel die wél in de tabellen staat maar even nergens wordt opgevraagd valt door beide mazen — en mag dan in de ene taal bestaan en in de andere ontbreken zonder dat iets klaagt. Zo misten zes talen al een tijd vier bronsleutels (zie de drie commits hiervoor). Deze poort kijkt niet naar gebruik maar naar de tabellen zelf: elke sleutel die in één taal bestaat hoort in alle talen te bestaan. Twee families, geen drie. `_dutchSource*` en `_dutchSourceAdd*` zijn één naamruimte — `make add-l10n` schrijft in de toevoegingen, `d()` leest uit allebei, en waar de knip ligt verschilt per taal puur door volgorde (de meeste 1266/2014, de/es/fr/it 501/2777, tr 1949/1331). Per tabel vergelijken zou ruim duizend betekenisloze verschillen per taal melden. `_strings*` staat apart. nl is de brontaal en heeft geen brontabellen; die uitzondering zit in de poort in plaats van in een uitzonderingslijst. IN `check`, NIET IN `check-full`, anders dan zusterpoort check-l10n-orphans. Die leunt op tekstbewijs en kan zich vergissen; daarom draagt ze een basislijn en draait ze in de trage ronde. Dit is een exacte verzamelingsvergelijking: niets te interpreteren, dus geen valse melding mogelijk, geen basislijn nodig — nul is de enige stand. 32 bestanden, klaar in een seconde. Dat hoort in de ronde die élke commit tegenhoudt. De test toetst in twee richtingen: gelijke mini-repo's leveren geen melding op (ook met nl zonder brontabellen, en met de knip op een andere plek), en elk geslagen gat — sleutel weg bij één taal, sleutel bij maar één taal, taal zonder brontabellen — moet gemeld worden.