Wanneer je een Drupal 8 module hebt gebouwd voor een applicatie die niet (of niet alleen) Engels heeft als taal ben je tegen dit probleem aangelopen. Er zitten in de code stukken Engelse tekst die vertaal worden door middel van de t()
functie, maar deze moeten vertaald worden tijdens een release. Hoe werkt dit nu eigenlijk?
De voorwaarden
Ten eerste hebben we een module nodig die de Engelse teksten uit de maatwerk module haalt. Hiervoor kun je Translation template extractor gebruiken.
Download de module: composer require drupal/potx --dev
Zet deze aan: drush pm:enable potx
(let op, alleen aanzetten op ontwikkel omgevingen)
Nu is de module geinstalleerd.Vanaf nu kun je de module gebruiken op het pad admin/config/regional/translate/extract
. Wat je nu moet doen is jouw maatwerk module selecteren, de taal waar je naar wilt exporteren en op "Extract" klikken.
Wat moet ik doen met het gedownloade bestand?
Het geexporteerde bestand kan geplaatst worden in een submap van jouw module (bijvoorbeeld 'translations') en kan bewerkt worden met iedere tekst bewerker of IDE.
Een voorbeeld vertaling kan zijn:
msgid "The description of my module."
msgstr "De beschrijving van mijn module."
Het msgid is de tekst die vertaal moet wordenen het msgstr is vertaalde tekst. In dit voorbeeld gaat de vertaling van het Engels naar het Nederlands.
Als eenmaal de teksten zijn vertaald dient de maatwerk module zich bewist gemaakt te worden van de vertalingen. Dit is te doen door een aantal regels toe te voegen aan het module_name.info.yml
bestand.
name: 'My module name'
type: module
description: 'My module description'
core: 8.x
interface translation project: my_module
interface translation server pattern: 'modules/custom/my_module/translations/my_module.%language.po'
De laatste 2 regels in het bovenstaand voorbeeld tonen hoe de module zich bewust wordt van de vertalingen. Zie je de %language
variabele? Deze zorgt ervoor dat er meerdere vertalingsbestanden gebruikt kunnen worden voor verschillende talen. Het enige wat gedaan moet worden is de taal code toevoegen aan de bestandsnaam. Bijvoorbeeld 'nl' voor Nederlands of 'se' voor Spaans.
De vertalingen importeren.
Het importeren van de vertalingen is zo simpel als het draaien van 2 drush commando's. Het is aangeraden om deze ook elke release te draaien.
Eerst: drush locale-check
Dit commando checked voor beschikbare vertalingen van de geinstaleerde modules. (zowel contributed als maatwerk), thema's en Drupal core op zowel de Drupal localization server als het lokale bestandssysteem.
Volgende: drush locale-update
Dit commando importeert de daadwerkelijke vertalingen. Dit importeert alleen nieuwe of nog niet vertaalde teksten, dus je hoeft niet bang te zijn om handmatig vertaalde teksten kwijt te raken.