gettext
L’utilisation de gettext est certainement la façon la plus sure de traduire un site.
Nous allons voir comment l’installer et l’utiliser en toute simplicité.
Fonctionnement gettext
Pour pouvoir appliquer des traductions avec gettext on va avoir besoin de deux types de fichiers :
- .po : C’est le fichier où l’on va entrer les traductions. Ce fichier est uniquement lisible par les humains.
- .mo : C’est le fichier compilé du .po où son stockées les traductions. Ce fichier est uniquement lisible par php.

L’installation gettext
Pour l’installer sur votre serveur, il n’y a rien de plus simple. Il suffit d’entrer « apt-get install php-gettext » dans votre console linux (attention il faut être loguer en root), Et tout s’installe automatiquement.
L’organisation des traductions
Pour ne pas se perdre au milieu de tous les fichiers de traductions, nous allons créer un dossier par langue.

arborescence gettext
L’utilisation de gettext en php
Dans un premier temps vous devez retrouver votre fichier gettext.inc pour l’inclure
Il doit se situer normalement dans « /usr/share/php/php-gettext/ ».
Nous allons créer notre premier fichier multilingue : bienvenue.php
//inclusion de la librairie gettext
require_once('/usr/share/php/php-gettext/gettext.inc');
$dir=setlocale(LC_ALL, 'fr_FR');
if($dir =='')
{
die("Erreur : la localisation n'est pas implémentée sur votre plate-forme ou la variable de localisation n'existe pas");
}
// Spécifie la localisation des tables de traduction
bindtextdomain("welcome", "./language");
// Choisit le domaine
textdomain("welcome");
// La traduction est cherché dans ./language/fr_FR/LC_MESSAGES/welcome.mo
// Affichage d'un message de test
echo gettext("hello")."</br>";
// Ou utilisation de l'alias _() pour gettext()
echo _("goodbye");
Maintenant il faut ouvrir votre page bienvenue.php.
Normalement vous devriez voir le message « hello » suivit de « goodbye »;
Ceci est normal, vu que gettext ne trouve pas la traduction, il affiche alors le mot non traduit.
création et compilation des fichiers de traductions
Tout d’abord nous allons créer notre fichier de traduction.
Dans votre console linux, positionnez-vous dans le dossier où ce situe votre fichier bienvenue.php
Une fois ceci fait, on lance la comande :
xgettext -kT_gettext -kT_ bienvenue.php
Le gettext va alors récupèrer les chaînes à traduire dans le code source bienvenue.php, il va génèrer automatiquement le fichier .po
Un fichier messages.po doit être créer dans la racine, nous allons le renommer welcome.po et le copier dans « languagefr_FRLC_MESSAGES »
Maintenant nous allons pouvoir éditer notre fichier et traduire les mots répertoriés(de la page bienvenue.php) par get text.
Pour qu’une traduction soit effectuée, il faut définir un identifiant de message : msgid et le texte attacher à celui-ci : msgtr.
pour nous nous allons mettre :
#: bienvenue.php:19 msgid "hello" msgstr "salut" #: bienvenue.php:20 msgid "goodbye" msgstr "aurevoir"
Pour compiler notre fichier welcome.po, il faut utiliser la commande msgfmt.
Il faut bien sur ce positionner dans le dossier ou est situé welcome.po, et taper « msgfmt welcome.po -o welcome.mo »
Normalement vous devez voir apparaître votre fichier welcome.mo.
Voici ce que cela va donner au final sur notre arborecence :

arborescence gettext
Maintenant vous pouvez ouvrir votre page bienvenue.php
eh la ! Miracle on voit que la traduction se met en français


(5 votes, moyenne: 4,00 max : 5)
janvier 19th, 2009 at 10 h 57 min
Merci beaucoup pour ces informations sur gettext.
avril 29th, 2010 at 22 h 36 min
Bizarrement la commande fournie pour la création du fichier .po ne fonctionne pas pour moi…
Etant un novice avec gettext je n’oserais pas me prononcer quant à son exactitude mais, pour ma part, c’est une commande du type
xgettext –default-domain=monsite -k_ hello.php
qui a fonctionné…
novembre 11th, 2010 at 21 h 38 min
Attention sous Ubuntu, déclaration de locale avec :
$dir=setlocale(LC_ALL,'fr_FR.UTF-8');
décembre 4th, 2011 at 18 h 36 min
Attention sous Debian pour avoir la traduction il faut modifier le fichier /etc/locale.gen
J’ai traduit de l’anglais en Français sans problème vu que la machine était configurée en Français. Par contre quand j’ai voulu faire la traduction anglais en allemand aucun texte n’était traduit.
Dans le fichier /etc/locale.gen il faut enlever le # devant :
# de_DE.UTF-8 UTF-8
Pour l’allemand (faire de même pour les autres langues).
Puis regénérer les locales avec :
# locale-gen
Voilà je laisse un com’ la dessus car j’ai perdu 4 Heures