Webontwikkeling

PHP de juiste manier: vertalingen

Door de jaren heen heb ik aan verschillende websites gewerkt en ben ook verschillende technieken van vertalen tegengekomen. In dit het derde deel van PHP de juiste manier ga vertel op welke manieren je een website kan vertalen.

Constanten

Tijdens een recent project was ik bezig met een website waarbij de teksten door middel van constanten werden vertaald. Constanten worden gebruikt voor het vast leggen van een waarde dat niet door het script kan worden veranderd. Het beste zijn ze te gebruiken voor het definiëren van vaste waardes welk gebruikt worden binnen de gehele website. Ideaal voor het vertalen van een website zou je denken. In het voorbeeld hieronder zie je hoe de opbouw van de code is.

define('NL_HOMEPAGE',        'Home');
define('NL_EMAIL_VERZONDEN', 'Er is een e-mailbericht aan u verzonden.');
define('NL_OPSLAAN',         'Opslaan');

echo NL_EMAIL_VERZONDEN;

Grootste nadeel van deze methode is dat de benaming van je constante je doorgaans niet precies verteld welke tekst er word getoond. Ook moet je er voor zorgen dat er voor elke vertaling een constante bestaat. Voor elke taal opnieuw. Mocht er een constante zijn vergeten te vertalen dan word er een foutmelding getoond op het scherm.

Arrays

Een andere techniek die regelmatig word gebruikt is de teksten vertalen met behulp van een array. Deze techniek is al een stuk beter dan de vorige. Maar ook deze kampt min of meer met de zelfde problemen als bij constante. De array sleutelwaardes worden vaak afgekort, waardoor de leesbaarheid in de code achteruit gaat en mocht er een vertaling zijn vergeten dan word er een foutmelding getoond. De opbouw van deze methode ziet er als volgt uit:

$lang = array();
$lang['Homepage']        = 'Home';
$lang['Email verzonden'] = 'Er is een e-mailbericht aan u verzonden.';
$lang['Opslaan']         = 'Opslaan';

echo $lang['Homepage'];

Gettext

Mijn ziens de flexibelste methode is om gebruik te maken van gettext. Hiermee kun je de website op elke gewenst moment vertalen, met behulp van .MO bestanden, naar elke taal die je op dat moment nodig heb, zonder aanpassingen te moeten doen in je code. Om deze bestanden aan te maken kan gebruik worden gemaakt van poedit. Zorg er voor dat je MO files hebt opgeslagen in de map ./locale/nl_NL/LC_MESSAGES/default.mo. Binnen de website maak je gebruik van de volgende functie om teksten te vertalen.

putenv("LANG=nl_NL");
setlocale(LC_ALL, 'nl_NL');
bindtextdomain("default", "./locale");
textdomain("default");

echo _('Er is een e-mailbericht aan u verzonden.');

Conclusie

Naast de bovenstaande drie technieken is het natuurlijk ook mogelijk om vertalingen op te slaan in de database, maar het grootste nadeel hiervan is dat de snelheid van de website al snel achteruit kan gaan in het geval dat er voor elke vertaling een verzoek aan de database gedaan moet worden.

Alvorens te beginnen aan een website moet je jezelf of als team altijd de vraag stellen of deze website nu of in de toekomst moet worden vertaald. Bij twijfel er altijd voor zorgen dat een website in de toekomst snel en makkelijk te vertalen is. Schrijf de website altijd in het Engels teksten zijn dan namelijk makkelijker te vertalen door externe partijen.

Hoop dat jullie weer wat wijzer geworden zijn.