dimanche 29 juillet 2007

PHP+gettext

Quand cela fonctionne, c'est facile. Le problème, c'est qu'il suffit d'un grain de sable pour que cela ne fonctionne pas et c'est impossible à débugger (cela fonctionne ...ou non). Comme d'habitude, je ne garantis pas que c'est exactement ce qu'il faut faire, mais ça fonctionne 'chez moi'... (remarquez les 'echo'; quand il y a une erreur, c'est le silence; quand tout va bien, on obtient un texte)

Sur Ubuntu/Dapper Drake/6.06, soit un fichier /var/www/tests/xgt.php

<html>
<head> </head>
<body>
<?php
echo setlocale(LC_ALL, "fr_BE.utf8")."<br/>";
echo bindtextdomain('xgt', './xoflocale')."<br/>";
echo textdomain('xgt')."<br/>";
print(_("coucou"));
?>
</body>
</html>

Quelques remarques :

  • Le 'fr_BE.utf8' se trouve dans la liste donnée par '$ locale -a'

  • Le répertoire './xoflocale' est relatif à l'endroit où se trouve le fichier .php; dans ce cas-ci : /var/www/tests/xoflocale/.

  • Le fichier de traduction se trouve alors en /var/www/tests/xoflocale/fr/LC_MESSAGES/xgt.mo


Le fichier 'xgt.mo' est généré comme suit

cd /var/www/tests
mkdir -p xoflocale/fr/LC_MESSAGES
# extraire les textes à traduire
xgettext -o xoflocale/fr/LC_MESSAGES/xgt.po xgt.php
#
cd xoflocale/fr/LC_MESSAGES
# éditer le fichier .po pour
# - changer CHARSET par UTF-8
# - mettre la traduction
# "coucou"
# "traduction de coucou"
msgfmt -o xgt.mo xgt.po

Ensuite, (probablement,) redémarrer 'apache'

sudo /etc/init.d/apache2 restart

Et, si tout va bien, http://localhost/tests/xofgettext.php donne

fr_BE.utf8
/var/www/tests/xoflocale
xgt
traduction de coucou


xof

Aucun commentaire: