PHP, réaliser un script multilingue

PHP et Python étant les deux langages que je connais le mieux, dans la lignée de la réalisation d’un application Python en multilingue (disponible ici), nous allons voir rapidement la même procédure mais en PHP.

Nous allons utiliser xgettext qui fonctionne sensiblement de la même manière.

Tout d’abord, les différents dossiers, un par langue, dans mon cas, l’anglais et le français :

mkdir -p locales/fr/LC_MESSAGES
mkdir -p locales/en/LC_MESSAGES
mkdir src

Maintenant le fichier main.php qui sera enregistré dans le dossier src, je mets l’ensemble y compris l’exemple sur la pluralité :

<?php
// Mise en place de la langue pour le script
setlocale(LC_ALL, "en_US.utf8");
// Définition du domaine pour la traduction
bindtextdomain("main", "locales");
// Sélection du domaine de texte
textdomain("main");

function print_some_strings(){
        echo _("Bonjour le monde\n");
        echo _("Ceci est une phrase traduite\n");
}

function print_some_plural_strings($num){
        $message1 = ngettext("%d homme", "%d hommes",$num);
        $message2 = ngettext("Je possede %d portables", "Je possede %d portables",$num);

        printf($message1."\n", $num);
        printf($message2."\n", $num);
}

print_some_strings();
print_some_plural_strings(1);
print_some_plural_strings(5);

?>

Dans notre script (par exemple une page web), il faudra venir modifier le paramètre « en_US.utf8 » en fonction soit du choix de l’utilisateur, soit de la langue du navigateur.

Pour générer le template (.pot) :

xgettext --add-comments src/main.php -o locales/main.pot

Une fois le template créé, nous allons créer les fichiers de traduction (.po) :

msginit -l en -i locales/main.pot -o locales/en/LC_MESSAGES/main.po
msginit -l fr -i locales/main.pot -o locales/fr/LC_MESSAGES/main.po

Les traductions seront à mettre dans les fichiers .po.

Une fois les traductions inscrites dans le marbre, il nous reste à générer le fichier compréhensible par le script :

msgfmt locales/fr/LC_MESSAGES/main.po -o locales/fr/LC_MESSAGES/main.mo
msgfmt locales/en/LC_MESSAGES/main.po -o locales/en/LC_MESSAGES/main.mo

Une fois cela fait, quand tu lances ton script, tu vois bien ta traduction.

Pour la mise à jour, on regénère le template :

xgettext --add-comments src/main.php -o locales/main.pot

Cette fois-ci, on vient fusionner avec le fichier .mo existant (pour ne pas perdre ce qui a déjà été traduit :

msgmerge --update locales/en/LC_MESSAGES/main.po locales/main.pot
msgmerge --update locales/en/LC_MESSAGES/main.po locales/main.pot

On mets à jours les traductions et on finit par :

msgfmt locales/fr/LC_MESSAGES/main.po -o locales/fr/LC_MESSAGES/main.mo
msgfmt locales/en/LC_MESSAGES/main.po -o locales/en/LC_MESSAGES/main.mo

Conclusion

Que ce soit en Python ou PHP, la mise en place de traduction pour son script est très accessible.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.