gettext

gettext

sommaire :

  1. Fonctionnement gettext
  2. L'organisation des traductions
  3. L'utilisation de gettext en php
 

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.

fonctionnement du get text

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

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

arborescence gettext

Maintenant vous pouvez ouvrir votre page bienvenue.php

eh la ! Miracle on voit que la traduction se met en français :)

Note de l'article




1 Star2 Stars3 Stars4 Stars5 Stars (5 votes, moyenne: 4,00 max : 5)
Loading ... Loading ...

  1. Alexandre Says:

    Merci beaucoup pour ces informations sur gettext.

  2. bitbox Says:

    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é…

    ;-)

  3. Nico Says:

    Attention sous Ubuntu, déclaration de locale avec :

    $dir=setlocale(LC_ALL,'fr_FR.UTF-8');

  4. ChoiZ Says:

    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 :)

Donner votre avis :