< Terug naar overzicht

Plugin of thema vertalen in WordPress

Plugin of thema vertalen in WordPress

Brandon Kroes • 16 september 2016

Wellicht wil je WordPress thema of plugin beschikbaarstellen aan een breeder publiek of bouw je een website die in meerdere talen beschikbaar moet zijn. Of wellicht gebruik je een plugin die alleen nog over een Engelse taal beschikt en wil je daar de Nederlandse aan toevoegen.

Nu is het tijd voor het echte werk: het zelf coderen van vertaalbare zinnen. Zelf coderen klinkt misschien als veel werk, maar dat is het absoluut niet. WordPress heeft namelijk een aantal functies ingebouwd die het heel simpel maken om dit voor elkaar te krijgen.

Om een plugin of een thema te vertalen, moet er allereerst een load_plugin_textdomain of een load_theme_textdomain worden ingevuld in de root van de plugin of thema. Hierna worden deze stappen uitgelegd.

Load_plugin_textdomain

De load_plugin_textdomain zorgt ervoor dat de vertaalde waarden worden ingeladen voor een plugin. De functie kent drie argumenten:

– Een domein. Dit is een unieke string(een reeks aan getallen en of karakters) om vertaalbare strings te identificeren en te sorteren aan de hand van een domein. Zo zullen bepaalde strings bij domein A horen, maar een andere plugin kan weer bij domein B horen. Een domein is de enige vereiste variabele die moet worden ingevuld.

– Een abs_rel_path. Dit is een pad waar de uiteindelijk vertaalde bestanden zich bevinden. Sinds versie 2.7 is deze functie rudimentair en wordt dan ook niet meer gebruikt. De default-waarde van deze parameter is false.

– Een plugin_rel_path. Dit is een string die het pad weergeeft waarin alle vertalingsbestanden zich bevinden. De default-waarde hiervan is false.

De load plugin heeft verder ook een return-waarde, namelijk een boolean. In dit geval staat in de boolean of het gelukt of niet gelukt is om de waarde in te lezen. Een true betekent dat alles goed ging. Een false betekent dat er een fout was, bijvoorbeeld het mislukken van het laden van een vertaling.
Zie hieronder een voorbeeld:

function mijn_plugin_textdomain() {
  load_plugin_textdomain( 'mijnplugin', false, plugin_basename( dirname( __FILE__ ) ) . '/taal ); 
}

Load_theme_textdomain

De load_theme_textdomain zorgt ervoor dat de vertaalde waarden worden ingeladen voor een thema. De functie kent twee argumenten:

– Een domein. Net als bij de load_plugin_textdomain is een domein een unieke string die het mogelijk maakt om strings te sorteren. Het is vereist om een domein in te vullen.

– Een path. Dit is een string die de locatie weergeeft waarin alle vertalingsbestanden zich bevinden. De default-waarde hier is false. Het implementeren van deze paramater is niet verplicht.

Voorbeeld:

function mijn_thema_setup(){
    load_theme_textdomain('mijn_thema', get_template_directory() . '/ taal);
}

Meer informatie:
https://codex.Wordpress.org/Function_Reference/load_theme_textdomain

De standaard vertaling functies van WordPress

WordPress heeft een aantal standaard functies om strings te vertalen. Deze worden hieronder toegelicht.

__()
Deze functie vertaalt een zin. Dit is de meest basis manier van het doen van een vertaling.
Voor de functie worden twee parameters gebruikt: een string die wordt vertaald en een string voor het bijbehorende textdomain (zoals hierboven behandeld werd)

Voorbeeld:

$testvar = __(‘Dit komt op het scherm’, ‘testplugin’);
Echo $testvar;

Uitkomst: Dit komt het scherm

_e()
Deze functie lijkt gelijk aan de vorige functie, maar heeft één verschil: de e staat voor de Echo. Hier wordt de tekst dus op het scherm geëchood.

In alle WordPress vertalingsfuncties kan een e naast het eerste haakje worden geplaatst om een Echo te reproduceren.

Voorbeeld:

_e(‘Dit komt op het scherm’, ‘testplugin’);

Uitkomst: Dit komt het scherm

_x()
Deze functie lijkt op __(), maar verschilt in het aantal parameters. _x() gebruikt drie parameters, terwijl __() er twee heeft. De derde paramater in _x() is de context paramater. Zoals de naam al luidt, wordt er context gegeven aan een bepaalde string.
Voorbeeld: je hebt een string genaamd toets, maar je hebt een proef-toets en een toets op je toetsenbord. De handigste oplossing is om hier een context paramater aan toe te voegen, om ze te scheiden. De context paramater is ook te gebruiken woorden, zinsconstructies of uitdrukkingen anders zijn in verschillende talen maar wel op de zelfde manier worden geschreven.
Zoals eerder vermeld werd, is er ook een _ex() variant van een Echo.
Voorbeeld:

_x(‘Toets’, ‘Proef’, ‘test_thema’);
_x(‘Toets’,’Toetsenbord’, ‘test_thema’);

Nu hebben we de basis van de vertalingen gehad. Het is belangrijk om te weten dat dit niet de enige functies zijn waar je gebruik van kunt maken! Zo hebben esc_attr en esc_html bijvoorbeeld allemaal een e(), x(), en _() variant.

Vertalen met tool Poedit

Nu we langs het code-aspect zijn geweest, gaan we gebruik maken van de strings en deze daadwerkelijk vertalen. Hiervoor gebruiken we de tool Poedit: precies wat nodig is voor het genereren van een vertaalbaar bestand.
Om te beginnen met het vertalen is Poedit Pro noodzakelijk. De pro-versie heeft namelijk een aantal functies die het werk veel simpeler maken. Op het moment van het schrijven kost een Poedit licentie €18,40. Als er rekening wordt gehouden met de uren die je erin zou moeten stoppen om het gedaan te krijgen zonder de pro-versie, is het ’t geld zeker waard.

Aan de slag met Poedit

Start Poedit en klik op Translate WordPress theme or plugin.

Vervolgens wordt er gevraagd of je een nieuwe vertaling of een nieuw POT-bestand wilt maken. Kies voor de twee optie.

Voordat we verder gaan, moet er eerst een thema of plugin worden toegevoegd. Klik hiervoor op de Choose folder knop en ga vervolgens naar de wp-content folder, waarin het thema of de plugin zich bevindt. Voeg deze vervolgens toe bij Poedit.

Nu is het scherm gevuld met een lange lijst aan zinnen die afkomstig is van een zojuist geselecteerde thema of plugin. Klik linksboven op Save om het aangemaakte POT-bestand op te slaan. Kies hier voor de map die bij de load_xxxx_textdomain functie wordt gebruikt.

Onderin staat een zwarte balk met daarin de optie Create new translation. Klik hierop en selecteer de gewenste vertaling uit de lijst. Nu kun je daadwerkelijk beginnen met het plaatsen van een specifieke string. Klik op waarden uit de linker strook. Nu komt er onderin de optie
Translation te staan. Vul hier de vertaling in. Druk op Save wanneer je klaar bent. Dan wordt er een PO-bestand aangemaakt, dat vervolgens moet worden opgeslagen in de taal folder.

Er is een verschil tussen een PO- en POT-bestand. Een POT-bestand is een template. Hierin bevinden zich geen vertalingen, maar alleen de strings die vertaald kunnen worden. Een PO-bestand is taal-specifiek. Hier komen er uiteindelijk meerdere van, wanneer er meerdere talen worden gebruikt.