Gettext en PHP, wat kun je ermee en hoe werkt het?

Al lange tijd ben ik op zoek naar een goede, snelle en gemakkelijke manier voor het bouwen van een Multi-language PHP applicatie, of simpel gezegd, het vertalen van content in PHP. Tot ik terecht kwam op een pagina waar de functie gettext gebruikt werd. Na wat voorbeelden gezien te hebben ben ik enthousiast aan de slag gegaan met deze functie. Dit bleek tot mijn verbazing vrij simpel te zijn. De applicatie is gemakkelijk uit te breiden met meerdere talen door een kleine aanpassing in de code en een nieuwe taal (door middel van een vertaalbestand) toe te voegen. Deze ervaring wil ik graag met jullie delen door middel van deze post.

Het PHP bestand

Maak om te beginnen een nieuw php bestand aan met hierin de volgende code:

1
2
3
4
5
6
<?php
define('_LOCALE', isset($_GET['language']) ? $_GET['language'] : '');
setlocale(LC_ALL, _LOCALE);
bindtextdomain(_LOCALE, "./locale");
textdomain(_LOCALE);
?>

Eerst definieer ik de constante _LOCALE, voordat hier een waarde aan wordt gegeven, controleer ik eerst of de parameter ‘language’ voorkomt in de url. Zo ja, wijs deze waarde dan toe aan de constante _LOCALE. Als dit niet het geval is blijft de constante leeg, dit betekend dat de standaard waarde, zoals deze in de php code voorkomt, wordt getoond in plaats van een vertaling hiervan.

Door middel van de functie setlocale wordt een taal ingesteld.

Stel met de functie bindtextdomain het pad in naar het vertaalbestand, als deze niet bereikt kan worden wordt de standaard waarde getoond zoals deze in de php code staat.

Geef in de functie textdomain dezelfde naam mee als bij de vorige functie.

Geef hieronder de regels mee welke zinnen of woorden vertaald moeten worden door middel van:

1
2
3
4
5
6
<?php
echo _('Hallo');
echo _('Dit is een test');
echo _('Nog een test');
echo _('En nog een test');
?>

Of door middel van:

1
2
3
4
5
6
<?php
echo gettext('Hallo');
echo gettext('Dit is een test');
echo gettext('Nog een test');
echo gettext('En nog een test');
?>

Test deze pagina. Als de code geen fouten bevat kun je verder met het aanmaken van het vertaalbestand. Dit doen wij in deze tutorial door middel van het programma poedit.

Het vertaalbestand

Download dit programma (http://www.poedit.net/download.php) en installeer het.
Maak een nieuwe catalogus aan door in poedit te gaan naar bestand -> nieuwe catalogus… Geef, in het scherm wat nu verschijnt, de benodigde gegevens op. Ga hierna naar het volgende tabblad (paden) hier moet het pad naar de php bestanden worden opgegeven zodat deze gelezen kunnen worden, doe dit bij ‘basispad’. Dan gaan we naar het veld ‘paden’, geef hier alleen een punt (‘.’) op. Druk hierna op ‘Ok’ en sla het bestand op op de locatie waarmee rekening is gehouden met het opgeven van het ‘basispad’. Hierna worden de php bestanden gescand en verschijnen er een aantal woorden welke vertaald dienen te worden. Na de vertalingen opgegeven te hebben moet het bestand worden opgeslagen en kan de meertalige applicatie worden getest.

Succes met het testen en mogelijk implementeren van deze functionaliteit!

Vragen en/of opmerkingen hoor ik graag.

Deze post bevindt zich in PHP.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

De volgende HTML tags en attributen zijn toegestaan: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">