Gebruik
Mooi, zo’n lap code, hoe gebruik ik het nu?
De volgende functies zijn het belangrijkste:
__($strMessage);
Geeft het (vertaalde) bericht terug
_e($strMessage);
Echoed het (vertaalde) bericht
__ngettext($strMessage1, $strMessage2, $num);
Wanneer $num enkelvoud is (0,1) geeft het (vertaalde) $strMessag1 terug, wanneer meervoud (vertaald) $strMessage2.
Vertalen
Je kunt nu op alle plekken waar je code hebt bovenstaande functies toepassen. Je zult altijd de code van de vorige pagina moeten includen.
Om alle strings te vertalen is er een handige tool, namelijk POedit (http://www.poedit.net/) . Download deze.
Configuratie
Voordat je kunt beginnen met vertalen, moeten we eerst een project configureren.
- Start POedit
- Nieuwe catalogus, vul de velden in. Bij meervoudsvormen vul je het volgende in:
nplurals=2; plural=(n != 1);
- Onder de tab paden, kies je de root van je project
- Onder de tab zoekwoorden, voeg de volgende functies toe:
__
_e
_c
_ngettext
- Klik OK
- Kies catalogus -> Bijwerken vanuit bronbestanden
- Nu gaat POedit al je php bestanden nalopen op de functies.
- Elke regel kun je nu vertalen
- Klik op catalogus opslaan, POEdit maakt nu een gecompileerd bestand. De catalogus is een .po bestand, het gecompileerde bestand is een .mo bestand.
Gebruik in php
Om een vertaling te gebruiken, zul je deze moeten laden voordat je een van de hierboven genoemde functies wilt gebruiken (__, _e). Dit doe je als volgt:
Om het standaard textdomein te laden, roep je de volgende functie aan:
load_default_textdomain();
LET OP! In de bijgevoegde code staan twee stukjes voor persoonlijk gebruik, pas deze aan naar wens. CONFIG_FOLDER_LIBRARY en CONFIG_LANGUAGE zijn twee constanten. CONFIG_LANGUAGE bevat de naam van het .mo bestand (zonder .mo). CONFIG_FOLDER_LABRARY is de root, hier staat een map language waarin de .mo bestanden staan.
Wil je bovestaande niet wijzigen, dan kun je ook een tekst laden door deze functie:
Load_textdomain(‘default’, [PAD NAAR JE .MO FILE]);
Je zult zien dat __, _e en _ngettext ook een domeinparameter bevat, je kunt met bovenstaande functie een extra domein laden, dus een extra .mo bestand. Wanneer je het domein meegeeft, zal de functie eerst in dit domein gaan zoeken.
Toepassing hiervan is bijvoorbeeld wanneer een standaard bibliotheek hebt met allerlei tekst, deze vertalingen zijn algemeen. Voor een site zijn er specifieke vertalingen nodig, deze staan in een apart .mo bestand met andere tektsen.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Laden
Load_default_textdomain();
Load_textdomain(klantdomein, [PAD NAAR klant .MO FILE]);
// Algemene vertaling
Echo <input type=submit value=.__(Submit). />;
//Specifieke vertaling
Echo __(Name: ).__(A specific string for a specific site, klantdomein);
// Meervoud
$iCount = 1;
echo _ngettext(There is one file loaded., There are multiple files loaded, $iCount);
// Geeft als output ‘There is one file loaded’(of de vertaling ervan)
$iCount = 5;
echo _ngettext(There is one file loaded., There are multiple files loaded, $iCount);
// Geeft als output ‘There are multiple files loaded’ (of de vertaling ervan)
?>
Geavanceerd
Soms wil je meer, in het laastste stuk van het voorbeeld bijvoorbeeld. Je wilt aangegeven hoeveel bestanden geladen zijn. Hiervoor is de functie sprintf ideaal. (zie ook http://www.phphulp.nl/php/tutorials/4/136/)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Laden
Load_default_textdomain();
Load_textdomain(klantdomein, [PAD NAAR klant .MO FILE]);
//Specifieke vertaling
$strKlantnaam = storeman;
Echo sprint(__(Name: %s), $strKlantnaam);
// Meervoud
$iCount = 1;
echo sprint(_ngettext(There is %d file loaded., There are %d files loaded, $iCount), $iCount);
// Geeft als output ‘There is 1 file loaded’(of de vertaling ervan)
$iCount = 5;
echo sprint(_ngettext(There is %d file loaded., There are %d files loaded, $iCount), $iCount);
// Geeft als output ‘There are 5 files loaded’ (of de vertaling ervan)
?>