Introduction
Méthode classique
Avant d'aborder la gestion des langues avec gettext, je vais brièvement décrire la méthode qui est la plus couramment utilisée pour réaliser un site web en plusieurs langues.
Cette méthode "classique" revient à isoler toutes les chaînes de caractères dans un fichier de langue, sous la forme de variables PHP. On obtiendra un fichier qui aura la forme suivante:
[fr.lang.php, par exemple] /* Fichier de langue classique */ $lang_message_accueil = 'Bienvenue sur mon site web!'; $lang_intro = 'Ce site web a pour but de...'; [...etc...]
On retrouvera ainsi dans les fichiers nécessitant d'être traduit, un include php sur ce fichier de langue, avec de simples références à ces variables. Cette méthode a l'avantage d'être particulièrement simple, et de ne pas nécessiter de connaissance particulière, mis à part une connaissance très basique du langage PHP.
Cependant, cette méthode a un problème de taille dont on ne se rend pas forcément toujours bien compte. En effet, lorsque votre site va s'agrandir et par conséquent augmenter en volume, le fichier de langue va croître de facon similaire. Vous obtiendrez bien vite un fichier de plusieurs dizaines de Ko. Il faut donc imaginer ce qui se passe lors de l'exécution du code de l'une de vos pages; toutes ces chaînes de caractère vont être chargée en mémoire! Vous aurez obtenu sans vous en rendre compte une page d'un encombrement mémoire maximum, ie. une page très "lourde".
En résumé, cette méthode peut bien fonctionner pour de petits sites web ou le nombre de chaînes est relativement faible, mais n'est en aucun cas applicable dans le cas d'applications plus importantes.
Avantages de gettext
Gettext est un programme destiné à la gestion de langues; il n'a pas été spécialement concu pour faire des sites web, il peut également être utilisé dans le cas de programmes classiques, réalisés dans d'autres langages. Il s'agit d'un programme GNU, et par conséquent gratuit et libre. Pour être plus précis, gettext n'est pas vraiment "un seul" programme; il s'agit plutôt d'une suite d'applications (comme xgettext, msginit, msgmerge, etc..); pour plus d'informations je vous renvoie au manuel utilisateur officiel.
Gettext pallie au problème de la méthode ci-dessus en ne chargeant pas toutes les chaînes en mémoire. En fait, nous aurons également un fichier de langue. Il sera constitué de paires identifiants/chaine, sous une forme qui sera compilée avant utilisation. Lorsque une référence à un identifiant sera trouvée dans le fichier source, gettext ira chercher la chaine correspondante dans le fichier de langue. Ceci est certainement un tout petit peu plus gourmand en temps processeur (cependant cela reste très rapide), mais permet ainsi de gérer de très larges sites web en plusieurs langues.
Conditions requises
Afin de pouvoir utiliser cette méthode, la librairie gettext doit être activée sur votre hébergeur/serveur. Vous pouvez vérifier que gettext est bien installé en faisant un phpinfo. Vous devriez voir la chose suivante:
Si ce n'est pas le cas, gettext n'est pas installé, et vous ne pourrez malheureusement pas utiliser notre méthode. Cependant, il semblerait qu'elle soit assez courante, en effet elle est par exemple installée sur free.fr. Rien de bien exceptionnel, donc.