Vertalingen¶
SES ondersteunt meerdere UI-talen. De vertaalcatalogus is database-backed en wordt bewerkt in de beheerder onder Systeem → Vertalingen. Het volgt een Oracle APEX-achtige workflow: seed → bewerken → publiceren. Strings worden per taal opgeslagen, doorlopen een controle-/goedkeuringsstap en gaan pas live wanneer zij worden gepubliceerd — er wordt niets onvertaald of ongecontroleerd verzonden.
Workflow-overzicht¶
- Seed — nieuwe applicatiestrings worden voor elke ingeschakelde taal in de catalogus geïmporteerd.
- Bewerken — vertalers bewerken elke taal handmatig, of gebruiken Auto-vertalen om concepten te genereren.
- Goedkeuren — goedgekeurde strings (niet fuzzy, niet needs-review) zijn de strings die kunnen meegaan.
- Publiceren — publiceren is direct live op runtime; geen rebuild, commit of implementatie nodig.
Talen¶
Ingeschakelde talen worden gedefinieerd in config/settings/base.py (LANGUAGES) en in de UNFOLD-taalwisselaar in config/settings/ui.py. De ingebouwde voorbeeldtalen zijn en, nl en de.
1. Seed (Strings Importeren)¶
Vanuit de cataloguslijst (<instelling>/admin/translations/messagetranslation/) klik je op de Seed vertalingen-knop in de header. Het importeert elke msgid uit locale/<code>/LC_MESSAGES/django.po in de catalogus zodat elk item kan worden bewerkt, voor alle ingeschakelde talen.
Seed importeert alleen — het regenereert nooit .po. Voor strings die al in de vastgelegde .po staan is geen makemessages nodig. Alleen voor gloednieuwe strings die aan code/templates zijn toegevoegd moet makemessages eerst draaien (een build-/implementatiestap) om ze in de vastgelegde .po te zetten; seed importeert vervolgens de nieuwe msgids.
Of gebruik het equivalente managementcommand:
python manage.py sync_translations -l <code> # bijv. sync_translations -l de
Wanneer je een gloednieuwe taal toevoegt, gebruik je add_language, dat de .po extraheert en de catalogus in één stap zaait:
python manage.py add_language <code> # bijv. add_language de
Seed en publiceren draaien asynchroon; de knoppen keren meteen terug met feedback zodra de taak is gestart.
2. Bewerken en Goedkeuren¶
In de catalogus: filter op een taal, bewerk de vertaling en markeer de rij als goedgekeurd (niet fuzzy, niet needs-review). Met Auto-vertalen kun je een conceptgeneratie voor geselecteerde rijen starten; die rijen blijven flagged tot je ze goedkeurt.
3. Publiceren¶
Maak je wijzigingen live met de Publish vertalingen-knop. Publiceren is meteen op runtime — geen rebuild, commit of deploy nodig.
Beheercommand voor een release¶
Voor een volledige release-stap (compileer .mo, seed, controleer verplichte msgids, publiceer):
python manage.py release_translations
Dit compileert ook de .po→.mo-catalogi en faalt wanneer een verplichte (third-party) msgid nog geen goedgekeurde vertaling heeft, zodat een gebrek niet stil als Engelse tekst (of een oude automatische vertaling) meegaat.
Zijbalk- & menulabels¶
Zijbalk- en menulabels van de beheerder (bijv. "SES Examens", "Taakstatus") staan in config/settings/ui.py als vertaalbare _()-strings. Ze worden pas live vanuit de database na de volledige pipeline, en ze ontbreken in de catalogus wanneer ze ook ontbreken in het vastgelegde .po.
- Extraheren —
makemessages. Draaipython manage.py makemessages -l nl -l de(een build-/implementatiestap) zodat gloednieuwe labels worden toegevoegd aanlocale/<code>/LC_MESSAGES/django.po. - Vertaling instellen +
#, fuzzyverwijderen. Wanneermakemessageseen nieuw label merge, kan het een oud label matchen en#, fuzzymarkeren (bijv. een#| msgid "Backend Status"-regel met een oude vertaling). Fuzzy-regels worden uitgesloten van publiceren, dus bewerk het.po-item: zet de juistemsgstren verwijder de#, fuzzyen#| msgid "..."-regels. - Seed — importeer het bijgewerkte
.poin de catalogus (beheerder-upload /seed_catalog, ofpython manage.py sync_translations). - Publiceren — alleen niet-fuzzy-, niet-needs-review-regels met een niet-lege vertaling worden gepubliceerd (
release_translations); herstart daarna de server zodat workers de nieuwste snapshot laden.
Probleemoplossing: blijft een zijbalklabel Engels, controleer dan (a) dat het aanwezig is in locale/<code>/LC_MESSAGES/django.po, (b) dat het daar niet #, fuzzy is, (c) dat het in de catalogus staat en gepubliceerd is — herstart daarna de server (workers cachen de opgeloste snapshot).