fix(sjablonen): sjablooninhoud als document per taal — Engels voor wie geen Nederlands leest (#622) #753

Merged
brenno merged 7 commits from fix/sjablonen-bestand-per-taal-622 into main 2026-07-23 15:28:18 +00:00
Owner

Derde en laatste deel van #622: de 49 sjablonen genereerden hun voorbeeldinhoud uit ~3.300 regels Dart met hardgecodeerd Nederlands. Sjablooninhoud is nu een document per taal: assets/templates/<id>.nl.md naast <id>.en.md, gegenereerd met de eigen serializer (elk bestand een serialisatie-dekpunt) en geladen door TemplateContentService — Nederlands krijgt het nl-document, elke andere interfacetaal het Engelse. De dektitel wordt na het parsen op de titeldia gezet. De kiezer (titels, omschrijvingen) blijft via l10n in alle 31 talen; de melding in de dialoog en op het startscherm zegt voortaan dat de voorbeelddia's Engels zijn en verschijnt alleen buiten nl/en.

Dit volgt de productkeuze: inhoud is een bestand per taal (zoals demo.nl.ocideck naast demo.en.ocideck), interface loopt áltijd via l10n, en er komt geen derde mechanisme dat tijdens het genereren vertaalt.

Bewaker: akkoord, met drie kanttekeningen die hier horen:

  1. De taalkeuze is impliciet (interfacetaal kiest het document, eenmalig bij aanmaken); een expliciete keuze voor het andere taaldocument is er bewust niet — het document zelf is gewoon leesbaar en meeneembaar.
  2. De terugval bij een ontbrekend/onleesbaar document (kale titeldia + logError) is fail-open en leunt op de tests die per register-id béide taalbestanden afdwingen; die tests zijn deel van het contract.
  3. De front matter van de sjabloondocumenten is exact wat de serializer voor elk deck schrijft — dit is géén sjabloon-specifiek dialect.

Tests. De sjabloonsuite bewaakt nu de geleverde documenten in beide talen (bestaan, parsen, structuur, agenda-regressie, nl/en-pariteit per slide: types, invulbaarheid, maten), plus template_content_service_test voor taalkeuze, titelinjectie, verse ids, terugval en de echte bundel. _contentHomes in de hardcoded-tekst-poort is geleegd: de uitzondering is verdwenen, niet verplaatst.

Gedraaid: make check groen, make check-secrets (gitleaks + trufflehog, 0 bevindingen), make sast (semgrep, 0 bevindingen). Niet gedraaid: DAST — ZAP-inrichting ontbreekt op deze machine; zie het bestaande spoor daarvoor.

Sluit #622.

🤖 Generated with Claude Code

Derde en laatste deel van #622: de 49 sjablonen genereerden hun voorbeeldinhoud uit ~3.300 regels Dart met hardgecodeerd Nederlands. Sjablooninhoud is nu een **document per taal**: `assets/templates/<id>.nl.md` naast `<id>.en.md`, gegenereerd met de eigen serializer (elk bestand een serialisatie-dekpunt) en geladen door `TemplateContentService` — Nederlands krijgt het nl-document, elke andere interfacetaal het Engelse. De dektitel wordt na het parsen op de titeldia gezet. De kiezer (titels, omschrijvingen) blijft via l10n in alle 31 talen; de melding in de dialoog en op het startscherm zegt voortaan dat de voorbeelddia's Engels zijn en verschijnt alleen buiten nl/en. Dit volgt de productkeuze: inhoud is een bestand per taal (zoals `demo.nl.ocideck` naast `demo.en.ocideck`), interface loopt áltijd via l10n, en er komt geen derde mechanisme dat tijdens het genereren vertaalt. **Bewaker: akkoord**, met drie kanttekeningen die hier horen: 1. De taalkeuze is impliciet (interfacetaal kiest het document, eenmalig bij aanmaken); een expliciete keuze voor het andere taaldocument is er bewust niet — het document zelf is gewoon leesbaar en meeneembaar. 2. De terugval bij een ontbrekend/onleesbaar document (kale titeldia + logError) is fail-open en leunt op de tests die per register-id béide taalbestanden afdwingen; die tests zijn deel van het contract. 3. De front matter van de sjabloondocumenten is exact wat de serializer voor elk deck schrijft — dit is géén sjabloon-specifiek dialect. **Tests.** De sjabloonsuite bewaakt nu de geleverde documenten in beide talen (bestaan, parsen, structuur, agenda-regressie, nl/en-pariteit per slide: types, invulbaarheid, maten), plus `template_content_service_test` voor taalkeuze, titelinjectie, verse ids, terugval en de echte bundel. `_contentHomes` in de hardcoded-tekst-poort is geleegd: de uitzondering is verdwenen, niet verplaatst. **Gedraaid:** `make check` groen, `make check-secrets` (gitleaks + trufflehog, 0 bevindingen), `make sast` (semgrep, 0 bevindingen). **Niet gedraaid:** DAST — ZAP-inrichting ontbreekt op deze machine; zie het bestaande spoor daarvoor. Sluit #622. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Elke sjabloon is via de gewone markdown-serializer naar een document
geschreven en is een serialisatie-dekpunt (serialize → parse → serialize
geeft dezelfde bytes). De Dart-bouwers blijven nog even staan tot de
lezer ze vervangt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Structureel één-op-één met de Nederlandse bron: zelfde slidetypes,
tabelafmetingen, bulletaantallen en directives; elk bestand is een
serialisatie-dekpunt. Titels volgen de bestaande Engelse l10n-titels
van de kiezer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
TemplateContentService laadt assets/templates/<id>.<taal>.md (nl voor
Nederlands, anders Engels), parseert met de gewone markdownservice en
zet de gekozen dektitel op de titeldia. newDeck neemt voortaan kant-en-
klare slides; de ~3.000 regels Dart-bouwers zijn vervangen door de
documenten zelf. Tests bewaken nu de geleverde documenten in beide
inhoudstalen, inclusief structurele nl/en-pariteit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
De voorbeelddia's komen voortaan uit het document voor de eigen taal:
Nederlands en Engels hebben niets te melden, de overige talen horen dat
de inhoud Engels is. De nieuwe bronstring staat er meteen in alle 31
talen in (zelfde zin als de oude, taalnaam gewisseld); de oude sleutel
is uit alle vertaalbestanden verwijderd — een sleutel die naar niets
verwijst is schuld die geen poort ziet. Gedeelde aanmaakroute als
top-level helper: beide aanroepplekken deden exact hetzelfde en de
klasse zat op haar plafond.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CHANGELOG, USER_GUIDE, SOURCE_MAP en CHECKS bijgewerkt; correcties
gedateerd. API_DOCUMENTATION en FILE_FORMAT bleven kloppen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bewaker-kanttekening: een Tooltip met lege message rendert alsnog een
leeg venster; buiten nl/en blijft de melding, daarbinnen komt de tekst
kaal terug.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
brenno merged commit 3eff8f8932 into main 2026-07-23 15:28:18 +00:00
Sign in to join this conversation.
No description provided.