PHP + Gettext + Debian

Posté le dim. 04 décembre 2011

J'utilise maintenant php-gettext pour mes traductions. C'est plus facile en utilisant des outils tel que pootle ou poedit. Pour utiliser gettext sur votre site en php il faut télécharger le package php-gettext :

apt-get install php-gettext

Ensuite il faut modifier le fichier /etc/locale.gen et enlever les commentaires devant les langues qui vont sont à traduire par exemple : Allemand, Anglais, Espagnol, Français & Suédois :

de_DE.UTF-8 UTF-8
en_GB.UTF-8 UTF-8
es_ES.UTF-8 UTF-8
fr_FR.UTF-8 UTF-8
sv_SE.UTF-8 UTF-8

Puis regénérer les locales :

locale-gen

Ensuite il faut définir votre chemin pour les traductions par exemple :

lang/fr_FR/LC_MESSAGES/domaine.mo

Puis dans votre fichier php de configuration :

<?php
// configuration de la langue
$lang = 'fr_FR'; // Langue a afficher
$lang_encode = 'utf8'; // Encodage du fichier
$lang_path = './lang'; // Chemin des fichiers de langue
$lang_file = 'domaine'; // Nom du fichier de langue

putenv('LANG='.$lang.'.'.$lang_encode);
putenv('LANGUAGE='.$lang.'.'.$lang_encode);
setlocale(LC_MESSAGES, $lang.'.'.$lang_encode);
bindtextdomain($lang_file, $lang_path);

if (function_exists('bind_textdomain_codeset')) {
    bind_textdomain_codeset($lang_file, $lang_encode);
}

textdomain($lang_file);
?>

Puis faites le test en affichant dans un fichier php le texte "hello" :

<?php
// on inclus la config…
include_once('config.php');
echo _('hello');
?>

Pour générer un fichier .mo a partir d'un fichier .po :

msgfmt domaine.po -o domaine.mo

Pour générer un fichier .po a partir de fichier php avec du gettext, faire un fichier texte avec tous vos fichiers php ou on doit récupérer le gettext.

Exemple listing_gettext.txt tel que :

index.php
contact.php
etc…

Ensuite il faut faire la commande suivante pour générer le fichier domaine.po dans le dossier lang/ depuis notre fichier texte avec les php :

find . -iname "*.php" | xargs xgettext --from-code=UTF-8 --default-domain=domaine -p lang/

Pour finir voilà le path des fichiers .po et .mo dans mon application web :

lang/fr_FR/LC_MESSAGES/domaine.po
lang/fr_FR/LC_MESSAGES/domaine.mo
lang/en_GB/LC_MESSAGES/domaine.po
lang/en_GB/LC_MESSAGES/domaine.mo

N'oubliez pas de redémarrer votre serveur web pour que les changements soient pris en compte.

Mise à jour le 30 Novembre 2015 par doogaille.