fix(a11y): eerlijke active-accessor voor het tab-opschrift (#1251) #1258

Merged
brenno merged 2 commits from fix/1251-tab-label-misleidende-locale into main 2026-08-05 09:02:01 +00:00
Owner

Wat

#1251 stelt dat het tab-opschrift hardcoded Nederlands is in elke interfacetaal. Dat klopt niet: het opschrift volgt al de actieve taal sinds commit 46284cfa (#576), die de kale literal 'Nieuw' omzette naar d('Nieuw'). d() leest de statisch gezette taal (setActiveLanguageCode), niet de Locale in de constructor — dus const AppLocalizations(Locale('nl')).d('Nieuw') gaf al 'New' in het Engels, 'Neu' in het Duits.

De Locale('nl') is een misleidend handvat dat suggereert hardcoded Nederlands. Dat heeft de issue-auteur (en eerder de commit-auteur zelf) in de val laten lopen — precies de val die de commit-boodschap van 46284cfa al beschrijft.

Wijziging

  • Nieuwe statische accessor AppLocalizations.active, die constructeert met de échte actieve Locale in plaats van een hardcoded Locale('nl'). De code liegt niet meer over zijn taal.
  • _newTabLabel gebruikt nu AppLocalizations.active.d('Nieuw').
  • Regressietest die bewijst dat het opschrift meebeweegt (en/Neu/Nij) via het disposed-notifier-pad.

Het opschrift zelf verandert niet — alleen de leesbaarheid van de code.

Bewaker-blik

Raakt een publieke belofte (de 32-talen-belofte). Toetsing aan de code toont: de belofte werd al waargemaakt; het defect was dat de code dat niet liet zien. Deze wijziging versterkt de belofte (de code is nu eerlijk) zonder het bestandsformaat, de opslag, een afhankelijkheid of uitgaand verkeer te raken. Geen botsing.

Waarom een test wel iets bewijst

De taal komt uit de statische setActiveLanguageCode en niet uit de Locale in de constructor — de test stelt haar expliciet in (en/de/fy) en beweert de vertaalde uitvoer. Zonder die correcte instelling zou hij groen staan zonder iets te bewijzen; dat is dezelfde val die 46284cfa eerst fout had.

Testplan

  • make check groen (formaat, analyse, conventies, volledige testsuite, coverage)
  • Nieuwe test TabInfo.label voor een leeg tab volgt de actieve interfacetaal (#1251) groen
  • Bestaande TabInfo getters survive a disposed deck notifier blijft groen

Closes #1251

Generated with Devin

## Wat #1251 stelt dat het tab-opschrift hardcoded Nederlands is in elke interfacetaal. Dat klopt niet: het opschrift volgt al de actieve taal sinds commit 46284cfa (#576), die de kale literal `'Nieuw'` omzette naar `d('Nieuw')`. `d()` leest de statisch gezette taal (`setActiveLanguageCode`), niet de `Locale` in de constructor — dus `const AppLocalizations(Locale('nl')).d('Nieuw')` gaf al `'New'` in het Engels, `'Neu'` in het Duits. De `Locale('nl')` is een misleidend handvat dat suggereert hardcoded Nederlands. Dat heeft de issue-auteur (en eerder de commit-auteur zelf) in de val laten lopen — precies de val die de commit-boodschap van 46284cfa al beschrijft. ## Wijziging - Nieuwe statische accessor `AppLocalizations.active`, die constructeert met de échte actieve `Locale` in plaats van een hardcoded `Locale('nl')`. De code liegt niet meer over zijn taal. - `_newTabLabel` gebruikt nu `AppLocalizations.active.d('Nieuw')`. - Regressietest die bewijst dat het opschrift meebeweegt (en/Neu/Nij) via het disposed-notifier-pad. Het opschrift zelf verandert niet — alleen de leesbaarheid van de code. ## Bewaker-blik Raakt een publieke belofte (de 32-talen-belofte). Toetsing aan de code toont: de belofte werd al waargemaakt; het defect was dat de code dat niet liet zien. Deze wijziging versterkt de belofte (de code is nu eerlijk) zonder het bestandsformaat, de opslag, een afhankelijkheid of uitgaand verkeer te raken. Geen botsing. ## Waarom een test wel iets bewijst De taal komt uit de statische `setActiveLanguageCode` en niet uit de `Locale` in de constructor — de test stelt haar expliciet in (`en`/`de`/`fy`) en beweert de vertaalde uitvoer. Zonder die correcte instelling zou hij groen staan zonder iets te bewijzen; dat is dezelfde val die 46284cfa eerst fout had. ## Testplan - [x] `make check` groen (formaat, analyse, conventies, volledige testsuite, coverage) - [x] Nieuwe test `TabInfo.label voor een leeg tab volgt de actieve interfacetaal (#1251)` groen - [x] Bestaande `TabInfo getters survive a disposed deck notifier` blijft groen Closes #1251 Generated with [Devin](https://devin.ai)
Het tab-opschrift zonder deck volgde al de actieve interfacetaal: commit
46284cfa (#576) zette de kale literal 'Nieuw' om naar d('Nieuw'), en d()
leest de statisch gezette taal (setActiveLanguageCode), niet de Locale in
de constructor. De Locale('nl') in `const AppLocalizations(Locale('nl'))`
is dus een misleidend handvat — het suggereert hardcoded Nederlands terwijl
het dat niet is. Dat heeft de indruk gewekt dat het label in elke taal
Nederlands was (waaronder issue #1251), terwijl het al meebewoog.

De nieuwe statische accessor AppLocalizations.active constructeert met de
echte actieve Locale, zodat de code niet meer liegt over zijn taal. Het
opschrift zelf verandert niet: 'Nieuw' in het Nederlands, 'New' in het
Engels, 'Neu' in het Duits — zoals het al deed.

De overige `const AppLocalizations(Locale('nl'))`-plekken in de
export-laag zijn een ander concern (#1249): daar is de exporttaal variabel
gemaakt via setActiveLanguageCode, en die route heeft eigen tests. Dit
issue gaat alleen over het interface-tabblad.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
test(a11y): tab-opschrift volgt de actieve taal (#1251)
All checks were successful
scans / scans (pull_request) Successful in 1m29s
static-gate / static-gate (pull_request) Successful in 3m26s
1801d509e2
Regressietest die bewijst dat TabInfo.label voor een leeg tabblad meebewoogt
met de actieve interfacetaal (en/Neu/Nij), via het disposed-notifier-pad dat
_newTabLabel raakt. Bewaakt tegen toekomstige terugval naar een kale
Nederlandse literal — de oorspronkelijke #576-regressie.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit 5289c0c9fa into main 2026-08-05 09:02:01 +00:00
Sign in to join this conversation.
No description provided.