Internationalisering is het proces om een webapplicatie te ontwikkelen welke aangepast kan worden naar verschillende talen en regio's zonder technische veranderingen.
Eerder dit jaar heb ik de website van Gravatar vertaald naar het Nederlands.
Deze maakt gebruik van de gettext functie voor elke string die vertaald moet worden :
gettext("Globally Recognized Avatars");
Om alle strings te verzamelen, heb ik eerst een overzicht nodig van alle .php bestanden die we gaan doorzoeken :
find /Applications/MAMP/htdocs/davidvandertuijn/application/classes/controller -name "*.php" > /Users/davidvandertuijn/Desktop/controllers.txt
Een controllers.po (Portable Object) document wordt gegenereerd door alle .php bestanden te doorzoeken :
/Applications/MAMP/Library/bin/xgettext --from-code=utf-8 --keyword=gettext --default-domain=controllers --files-from=/Users/davidvandertuijn/Desktop/controllers.txt
Hetzelfde doen we voor de views, deze hebben geen .php maar een .tpl extensie :
find /Applications/MAMP/htdocs/davidvandertuijn/application/views -name "*.tpl" > /Users/davidvandertuijn/Desktop/views.txt
In tegenstelling tot de controllers vinden we geen gettext functie in de views, maar een alias van deze functie (Smarty Plugin) :
/Applications/MAMP/Library/bin/xgettext --from-code=utf-8 --keyword=__ --default-domain=views --files-from=/Users/davidvandertuijn/Desktop/views.txt
Het .po (Portable Object) document ziet er ongeveer zo uit :
msgid "Globally Recognized Avatars" msgstr "Wereldwijd Erkende Avatars"
Voor een vertaalbureau niet echt gebruiksvriendelijk, maar er is Sofware zoals Poedit beschikbaar om deze bestanden te bewerken :
Tot slot wordt het .po (Portable Object) document gecompileerd met msgfmt naar een .mo (Machine Object) bestand :
msgfmt -o /Users/davidvandertuijn/controllers.mo /Users/davidvandertuijn/controllers.po
Installatie GNU Gettext Tools (optioneel)
mkdir -p /tmp/gettext cd /tmp/gettext curl -O ftp://ftp.gnu.org/gnu/gettext/gettext-0.17.tar.gz tar xzpf gettext-0.17.tar.gz cd gettext-0.17 ./configure make make install
Maak de volgende directory structuur aan in de document root :
/locale/nl/LC_MESSAGES
Het .mo (Machine Object) bestand wordt in deze directory geplaatst.
Een voorbeeld in PHP met één textdomain :
putenv ("LC_ALL=nl");bindtextdomain('controllers', '/Applications/MAMP/htdocs/davidvandertuijn/locale'); textdomain('controllers');
echo gettext('Globally Recognized Avatars');
Meer informatie : GNU gettext