fix(html-export): <html lang> volgt de rapporttaal, niet hardcoded nl (#1249) #1254

Merged
brenno merged 1 commit from fix/html-export-lang-1249 into main 2026-08-04 23:49:09 +00:00
Owner

Summary

  • <html lang="…"> in de HTML-export volgt nu deck.language (via ExportDocumentMetadata), met de interfacetaal als fallback, in plaats van hardcoded nl. WCAG 2.1 SC 3.1.1 (Taal van de pagina) op AA-niveau.
  • De chrome-strings van de export (licentiebanner, "Afbeelding niet ingesloten", AI-conceptmelding) renderen in dezelfde taal waar OciDeck haar kent; een rapport in een onvertaalde taal (bijv. Japans) houdt lang="ja" en krijgt chrome in de interfacetaal.
  • De save/set/restore van AppLocalizations.languageCode zit in ExportService._buildHtml; de static wordt in finally teruggezet.
  • ACCESSIBILITY.md en CHANGELOG.md bijgewerkt.

Wat er veranderd is

  • lib/services/export_metadata.dartlanguage veld op ExportDocumentMetadata, gevuld vanuit deck.language.
  • lib/services/export_service.dartinterfaceLanguageCode parameter; htmlLang en chromeLanguageCode berekend; save/set/restore van de static.
  • lib/services/marp_html_service.darthtmlLang parameter op build(); <html lang="$htmlLang"> in plaats van hardcoded nl; licentiebanner verwijst naar de gelokaliseerde sectienaam.
  • lib/widgets/dialogs/export_dialog.dartinterfaceLanguageCode: l10n.languageCode doorgegeven.
  • lib/l10n/app_localizations.dart — getter voor activeLanguageCode (voor save/restore).

Bewaker

Deze wijziging raakt een publieke belofte in docs/ACCESSIBILITY.md — de belofte dat de HTML-export de paginataal op de inhoudstaal zet. Dat is een uitbreiding van een bestaande toegankelijkheidsbelofte, niet een beperking van soevereiniteit of uitwisselbaarheid. Geen waardebotsing.

Test plan

  • make check groen (analyze + format + tests + coverage + conventions + method-length + projection boundary)
  • make check-secrets groen (gitleaks + trufflehog)
  • make sast groen (semgrep, 0 findings)
  • Tests: <html lang> volgt deck.language; fallback op interfacetaal; onvertaalde taal behoudt lang, chrome valt terug; static wordt na export teruggezet
  • Beeldkeuring: visueel controleren dat een Engels/Fins deck de chrome in die taal rendert

Generated with Devin

## Summary - `<html lang="…">` in de HTML-export volgt nu `deck.language` (via `ExportDocumentMetadata`), met de interfacetaal als fallback, in plaats van hardcoded `nl`. WCAG 2.1 SC 3.1.1 (Taal van de pagina) op AA-niveau. - De chrome-strings van de export (licentiebanner, "Afbeelding niet ingesloten", AI-conceptmelding) renderen in dezelfde taal waar OciDeck haar kent; een rapport in een onvertaalde taal (bijv. Japans) houdt `lang="ja"` en krijgt chrome in de interfacetaal. - De save/set/restore van `AppLocalizations.languageCode` zit in `ExportService._buildHtml`; de static wordt in `finally` teruggezet. - `ACCESSIBILITY.md` en `CHANGELOG.md` bijgewerkt. ## Wat er veranderd is - `lib/services/export_metadata.dart` — `language` veld op `ExportDocumentMetadata`, gevuld vanuit `deck.language`. - `lib/services/export_service.dart` — `interfaceLanguageCode` parameter; `htmlLang` en `chromeLanguageCode` berekend; save/set/restore van de static. - `lib/services/marp_html_service.dart` — `htmlLang` parameter op `build()`; `<html lang="$htmlLang">` in plaats van hardcoded `nl`; licentiebanner verwijst naar de gelokaliseerde sectienaam. - `lib/widgets/dialogs/export_dialog.dart` — `interfaceLanguageCode: l10n.languageCode` doorgegeven. - `lib/l10n/app_localizations.dart` — getter voor `activeLanguageCode` (voor save/restore). ## Bewaker Deze wijziging raakt een publieke belofte in `docs/ACCESSIBILITY.md` — de belofte dat de HTML-export de paginataal op de inhoudstaal zet. Dat is een uitbreiding van een bestaande toegankelijkheidsbelofte, niet een beperking van soevereiniteit of uitwisselbaarheid. Geen waardebotsing. #### Test plan - [x] `make check` groen (analyze + format + tests + coverage + conventions + method-length + projection boundary) - [x] `make check-secrets` groen (gitleaks + trufflehog) - [x] `make sast` groen (semgrep, 0 findings) - [x] Tests: `<html lang>` volgt `deck.language`; fallback op interfacetaal; onvertaalde taal behoudt `lang`, chrome valt terug; static wordt na export teruggezet - [ ] Beeldkeuring: visueel controleren dat een Engels/Fins deck de chrome in die taal rendert Generated with [Devin](https://devin.ai)
fix(html-export): <html lang> volgt de rapporttaal, niet hardcoded nl (#1249)
All checks were successful
scans / scans (pull_request) Successful in 2m29s
static-gate / static-gate (pull_request) Successful in 4m5s
a4c5ed22ff
De HTML-export schreef altijd <html lang="nl">, ongeacht de deck-taal of
interfacetaal. Een schermlezer kondigde daarmee een Fins deck aan in het
Nederlands — WCAG 2.1 SC 3.1.1 op AA-niveau, in de exportroute die
ACCESSIBILITY.md aanbeveelt voor toegankelijk lezen.

lang= volgt nu deck.language (via ExportDocumentMetadata), met de
interfacetaal als fallback. De chrome-strings (licentiebanner,
"Afbeelding niet ingesloten", AI-conceptmelding) renderen in dezelfde
taal waar OciDeck haar kent; een rapport in een onvertaalde taal
(bijv. Japans) houdt lang="ja" en krijgt chrome in de interfacetaal.

De save/set/restore van AppLocalizations.languageCode zit in
ExportService._buildHtml (de orchestrator kent beide talen); de
static wordt in finally teruggezet.

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

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