fix(l10n): sneltoetsen uit één bron, en de poort die langs een extension heen keek #810

Merged
brenno merged 3 commits from fix/sneltoetsen-vertaalpoort-803 into main 2026-07-24 17:33:05 +00:00
Owner

Closes #803.

Het besluit

Het issue vroeg niet om "even door d() halen" maar om een keuze: is een sneltoets vertaalbare tekst of een identifier? Allebei, maar niet in hetzelfde stuk.

De toets (S, Z, F) hangt aan een LogicalKeyboardKey en verandert niet met de taal — wie die vertaalt, beschrijft een toets die niet werkt. De modificatietoets verandert wél, en de vertalingen deden dat al: Duits leest Strg/Cmd+Z. Alleen dát deel loopt nu door d(); lib/utils/shortcut_label.dart stelt de rest samen.

Kosten: twee bronstrings (Ctrl/Cmd, Shift) in plaats van één per sneltoets. De volgende sneltoets kost geen 31 vertalingen meer. De sleutels undo, redo en saveShortcut konden weg — hun sneltoets zat ín de vertaalde tekst, en dat was precies het tweede patroon.

Duits was de toets: die zag Strg in de werkbalk en Ctrl in het menu ernaast.

De blinde vlek

Bevestigd met een proef vóór de reparatie: een kale literal in _menuItem(…) liet de poort groen. Een aanroep zonder doel binnen extension _X on _YState werd geknoopt aan de naam van de extension, terwijl de declaratie onder de klasse staat. Dat is het patroon waarmee deze repo grote widgets onder de bestandsgrens houdt, dus het gold breed.

Gedicht via extensionOwner in beide bezoekers. Twee fixture-tests staan rood zonder de fix, groen ermee.

Het dichten legde negen onvertaalde regels in het Over-venster bloot (adres, e-mail, KvK, IBAN, BIC, bank, pilot-domein) — nu door d() + unchangedInAllLanguages.

Wat er niet in zit

De tweede route uit het issue, de veldsprong via PaletteCommand.shortcut, is wel gemeten: hij is langs dezelfde weg dichtbaar en legt 23 échte overtredingen bloot, waaronder standard.bundled in reference_standards.dart — Nederlandse proza die met een kale Text() in 31 talen blijft staan. Dat vraagt een eigen productbeslissing (horen catalogusbeschrijvingen in l10n?), dus staat het als #809 met de werkende patch beschreven. Tot die tijd draagt de wacht in test/shortcut_label_test.dart dat halve gat.

Onderweg gevonden

De toetsenlegenda van de presenter beloofde Ctrl+N en Ctrl+W terwijl beide bindings control || meta zijn: op een Mac stond daar al het verkeerde. En mijn eigen wacht had eerst een valse negatief — 'Esc · Ctrl+W' las als proza omdat "Esc" een woord leek. Aangescherpt, en die regel viel er meteen uit.

Borging

  • test/shortcut_label_test.dart — de vertaalde helften per taal, plus de wacht dat geen enkel bestand in lib/ nog zelf een sneltoets schrijft. Een sneltoets ín een vertaalde zin mag wél (proza kan niet samengesteld worden); het onderscheid is of er een woord overblijft als je de notatie wegstreept.
  • test/check_hardcoded_text_tool_test.dart — twee fixtures voor de extension-resolutie, beide geverifieerd rood zonder de fix.

make check groen (exitcode 0 gecontroleerd, niet door een pipe gelezen).

Closes #803. ## Het besluit Het issue vroeg niet om "even door `d()` halen" maar om een keuze: is een sneltoets vertaalbare tekst of een identifier? **Allebei, maar niet in hetzelfde stuk.** De toets (`S`, `Z`, `F`) hangt aan een `LogicalKeyboardKey` en verandert niet met de taal — wie die vertaalt, beschrijft een toets die niet werkt. De modificatietoets verandert wél, en de vertalingen deden dat al: Duits leest `Strg/Cmd+Z`. Alleen dát deel loopt nu door `d()`; `lib/utils/shortcut_label.dart` stelt de rest samen. Kosten: **twee** bronstrings (`Ctrl/Cmd`, `Shift`) in plaats van één per sneltoets. De volgende sneltoets kost geen 31 vertalingen meer. De sleutels `undo`, `redo` en `saveShortcut` konden weg — hun sneltoets zat ín de vertaalde tekst, en dat was precies het tweede patroon. Duits was de toets: die zag Strg in de werkbalk en Ctrl in het menu ernaast. ## De blinde vlek Bevestigd met een proef vóór de reparatie: een kale literal in `_menuItem(…)` liet de poort groen. Een aanroep zonder doel binnen `extension _X on _YState` werd geknoopt aan de naam van de **extension**, terwijl de declaratie onder de klasse staat. Dat is het patroon waarmee deze repo grote widgets onder de bestandsgrens houdt, dus het gold breed. Gedicht via `extensionOwner` in beide bezoekers. Twee fixture-tests staan rood zonder de fix, groen ermee. Het dichten legde **negen** onvertaalde regels in het Over-venster bloot (adres, e-mail, KvK, IBAN, BIC, bank, pilot-domein) — nu door `d()` + `unchangedInAllLanguages`. ## Wat er niet in zit De tweede route uit het issue, de veldsprong via `PaletteCommand.shortcut`, is **wel gemeten**: hij is langs dezelfde weg dichtbaar en legt **23 échte** overtredingen bloot, waaronder `standard.bundled` in `reference_standards.dart` — Nederlandse proza die met een kale `Text()` in 31 talen blijft staan. Dat vraagt een eigen productbeslissing (horen catalogusbeschrijvingen in l10n?), dus staat het als #809 met de werkende patch beschreven. Tot die tijd draagt de wacht in `test/shortcut_label_test.dart` dat halve gat. ## Onderweg gevonden De toetsenlegenda van de presenter beloofde `Ctrl+N` en `Ctrl+W` terwijl beide bindings `control || meta` zijn: op een Mac stond daar al het verkeerde. En mijn eigen wacht had eerst een valse negatief — `'Esc · Ctrl+W'` las als proza omdat "Esc" een woord leek. Aangescherpt, en die regel viel er meteen uit. ## Borging - `test/shortcut_label_test.dart` — de vertaalde helften per taal, plus de wacht dat geen enkel bestand in `lib/` nog zelf een sneltoets schrijft. Een sneltoets ín een vertaalde zin mag wél (proza kan niet samengesteld worden); het onderscheid is of er een woord overblijft als je de notatie wegstreept. - `test/check_hardcoded_text_tool_test.dart` — twee fixtures voor de extension-resolutie, beide geverifieerd rood zonder de fix. `make check` groen (exitcode 0 gecontroleerd, niet door een pipe gelezen).
brenno force-pushed fix/sneltoetsen-vertaalpoort-803 from f580126e0e
All checks were successful
scans / scans (pull_request) Successful in 3m15s
to f51a84949e
All checks were successful
scans / scans (pull_request) Successful in 3m15s
2026-07-24 17:32:59 +00:00
Compare
brenno merged commit 7f07d04282 into main 2026-07-24 17:33:05 +00:00
Sign in to join this conversation.
No description provided.