Utiliser les fichiers .pot, .po, .mo
Nous avons voulu installer un Plugin et, comme la traduction ne nous convenait pas parfaitement, nous avons voulu y remédier. Hélas, nous nous sommes aperçu qu’un dysfonctionnement dans le programme l’empêchait de fonctionner normalement. Nous avons prévenu l’auteur du plugiciel mais, impatient, nous avons voulu résoudre l’erreur seul. Après rectification du code Php, nous nous sommes plongé dans les fichiers .pot, .po et .mo avec perplexité.
Les sites, qui décrivent l’utilisation de ces fichiers de langue, sont légion : on se reportera utilement aux sites d’Amaury ou de Lise, et nous n’y reviendrons pas. Dans la langue de Shakespeare, on lira avec profit l’article du Codex WordPress.
À ce propos, et pour l’anecdote, on emploie souvent le terme I18n, car il y a dix-huit lettres entre le i et le n du mot internationalisation en anglais.
En revanche, nous allons exposer notre expérience sur la manipulation de ces fichiers. Puisse ma petite expérience être utile à certains lecteurs ; que les autres me corrigent, si je me trompe !
À titre d’exemple, nous allons prendre un module d’extension fonctionnant en anglais devant être francisé.
Si l’auteur a prévu une internationalisation, le Plugin possède un répertoire lang, qui comprend d’origine un fichier intitulé defaut.po et un fichier intitulé defaut.mo. Le nom defaut correspond à l’anglais. Pour que la langue française soit prise en compte lors de l’activation du plugiciel, il doit comporter la mention fr_FR. C’est, pensons-nous, une convention WordPress.
En fait, le Plugin utilise uniquement le fichier .mo pour afficher le texte. En d’autres termes, .mo représente la couche application du modèle Osi. Plus prosaïquement, il faut retenir qu’une application peut très bien fonctionner sans le fichier .po.
Pour employer une comparaison photographique et argentique (!), .po est le négatif, .mo est le positif.
Pour autant, ce fichier .po est utile en vue d’être traduit. En effet, le logiciel PoEdit permet d’effectuer cette opération : il affiche ligne par ligne les libellés de texte, et on indique l’équivalent en français de la chaîne de caractères. On enregistre ensuite sous fr_FR, et le tour est joué ! PoEdit a enregistré deux fichiers : .po et .mo.
Attention, à l’emplacement du fichier .mo ! Selon l’écriture du Plugin, il peut ne pas trouver sa place dans le répertoire lang mais dans la racine. À cet effet, il suffit de regarder où se situe le fichier defaut.mo et de mettre son fichier fr_FR au même endroit.
Jusque là, c’est d’une simplicité biblique !
Or, notre simple travail de traduction s’est compliqué. En effet, j’ai découvert que le fichier .po d’origine comportait une erreur : une chaîne de caractères ne s’affichait pas, et le fichier .po en anglais ne la connaissait donc pas. Aussi nous fallait-il générer un fichier .pot.
Pour reprendre la métaphore, si les fichiers .po et .mo sont respectivement le négatif et le positif d’une photo, le fichier .pot est la pellicule.
Autrement dit, un fichier .pot permet de générer un fichier .po qui, lui, saura créer un fichier .mo.
Le logiciel PoEdit permet de reconstruire un fichier .pot à partir d’un fichier .po.
À cet effet, il convient de créer un nouveau catalogue. L’opération, fastidieuse, est longuement décrite par Amaury. L’indication du chemin (menu Path) doit être correcte, sinon PoEdit ne parcourera pas les fichiers du plugiciel concerné. On peut aussi inscrire un point (.) dans l’indication du chemin pour rendre le fichier portable. Si les instructions sont correctes, PoEdit va analyser le contenu du répertoire et en extraire les chaînes de caractères.
PoEdit va parcourir le code du Plugin exemple, qui est sous la forme…
<?php _e('No posts found. Try a different search?','exemple'); ?>
… et stocker la chaîne de caractères…
'No posts found. Try a different search?'
Lorsque le message est passé à une fonction Php, la syntaxe est différente :
<?php posts_nav_link(" | ","<span>(__('« Previous Entries','exemple'))</span>" ?>
À ce stade, il faut enregistrer le fichier au format .pot en ajoutant après Nom du fichier l’extension .pot et en sélectionnant All Files dans Type. Ensuite, on enregistre ce fichier au format .po, et l’on peut travailler, par exemple, à sa traduction.
Si les sources du Plugin doivent être modifiées, il faut rouvrir le fichier .pot et dans le menu Catalog cliquer sur Update from sources….
Au cours de la traduction, le fond de certains champs peut être coloré en jaune par PoEdit, c’est-à-dire Fuzzy (incohérent). L’indication apparaît aussi dans la barre d’état du logiciel. Dans ce cas, la méthode la plus simple consiste à effacer (une partie de) l’entrée traduite et à recommencer.
Une solution alternative, mais sans doute peu orthodoxe (!), consiste à ouvrir le fichier .po comme un fichier plat puis à supprimer manuellement la mention fuzzy. De même, pour remplacer plusieurs occurrences, il est peut sembler plus ergonomique de travailler avec un éditeur de texte, sans oublier de rouvrir le fichier avec PoEdit pour qu’il applique sa moulinette.
<addendum>
02/08/2008.
Dans certains programmes, l’auteur peut prévoir la distinction entre singulier et pluriel. Dans ce cas, le fichier original se présente ainsi :
<?php printf(__ngettext('<strong>»</strong> <strong>%s</strong> vote is casted by guests', '<strong>»</strong> <strong>%s</strong> votes are casted by guests', number_format_i18n(), 'wp-polls'), number_format_i18n()); ?>
Le fichier plat de traduction présente les chaînes de caractères sous la forme :
msgid "<strong>»</strong> <strong>%s</strong> vote is casted by guests"
msgid_plural "<strong>»</strong> <strong>%s</strong> votes are casted by guests"
msgstr[0] "<strong>»</strong> <strong>%s</strong> vote a été reçu d'invité"
msgstr[1] "<strong>»</strong> <strong>%s</strong> votes ont été reçu d'invités"
</addendum>
Enfin, il ne faut pas omettre de provoquer le chargement du fichier de langue dans la page, par exemple pour un thème dans header.php. Pour un plugiciel, faute de disposer d’une explication de l’auteur, son architecture permettra de savoir où placer le fichier .mo.
Au hasard des téléchargements de modules d’extension, on peut se retrouver face à une page présentant les fichiers linguistiques, par exemple sur le WordPress Plugin Repository. Si le téléchargement d’un fichier .mo est automatique puisqu’il n’est pas reconnu, le contenu du fichier .po s’ouvre dans l’éditeur de texte par défaut : il convient d’aller à la fin de la page pour le télécharger au format Php. Nous préférons donner ici la précision, car nous avons été perplexe au premier essai.
Une explication différente mais complète sur l’utilisation de PoEdit pour traduire un logiciel est disponible sur le site Comment Ça Marche.










Bonjour,
Ci-dessou programme tres interessant pour gerer les fichier .po et .mo en live:
http://www.i-gaia.com/download/site-multi-langues-en-php.htm