Internationalisation des thèmes::partie 7::Et les plugins?
30 septembre 2006 par Marc Charlet
Le dernier billet de cette série va montrer comment appliquer aux plugins les mécanismes d'internationalisation que nous venons de passer en revue pour les thèmes, en nous posant la question:
"Et pour les plugins, alors?"
La réponse tient en une phrase: "Pour les plugins: c'est exactement la même chose!" ... "Exactement le même chose?" Oui! Euh, enfin presque, pas tout-à-fait...
Ce qui ne change pas
Le mécanisme d'internationalisation ne change pas! Ce sont toujours des sources modifiées qui vont donner un fichier POT qui va donner un fichier PO et un fichier MO.
Les choses qui changent
- la déclaration de la variable $textdomain
- la structure en répertoire(s) (ou pas) des fichiers php
- le niveau d'internationalisation déjà présent
(i) Dans la suite de ce billet, je prends le plugin ImageManager comme exemple. Je vous conseille donc de le télécharger et de le décompresser sur votre disque, sans obligatoirement ni l'installer, ni l'activer.
La variable $textdomain
Regardons le fichier wp-includes/wp-l10n.php aux alentours de la ligne 83
-
function load_plugin_textdomain($domain, $path = 'wp-content/plugins') {
-
$locale = get_locale();
-
-
$mofile = ABSPATH . "$path/$domain-$locale.mo";
-
load_textdomain($domain, $mofile);
-
}
-
-
function load_theme_textdomain($domain) {
-
$locale = get_locale();
-
-
$mofile = get_template_directory() . "/$locale.mo";
-
load_textdomain($domain, $mofile);
-
}
Nous constatons que la déclaration de la variable $textdomain d'un plugin accepte deux paramètres:
- $domain qui est notre variable $textdomain proprement dite (comme pour un thème)
- une variable $path qui va nous donner le chemin vers le fichier MO du plugin
- remarquons également, au passage, que le nom du fichier MO est ici de la forme $domain-$locale.mo
(i) Ce qui donne, par exemple, pour le plugin ImageManager
- la déclaration de la variable est load_plugin_textdomain('ImageManager','wp-content/plugins/ImageManager/lang');
- la variable $textdomain est 'ImageManager'
- le chemin vers le fichier MO est 'wp-content/plugins/ImageManager/lang'
- et le nom du fichier MO sera 'ImageManager-fr_FR.mo'
La structure en répertoire(s)
Comme vous l'avez probablement déjà remarqué, la structure des répertoires d'un plugin va d'une non-structure du tout (pas de répertoire de plugin et un seul fichier placé dans le répertoire /wp-content/plugins/) jusqu'à une structure complexe, avec répertoires et sous-répertoires.
(i) Dans le cas d'un fichier plugin unique, il vaut mieux créer un sous-répertoire portant le nom du plugin déplacer le fichier dans ce répertoire1.
(i) Dans le cas d'une structure en répertoires, il vaut mieux créer un sous-répertoire /lang/2 et y regrouper vos fichiers POT, PO et MO3, en n'oubliant pas d'adapter la déclaration de la variable $textdomain en conséquence.
(i) La façon la plus pratique que j'ai trouvée pour générer le fichier POT est de lister, dans la commande xgettext, tous les fichiers source php du plugin, en donnant leur chemin relatif partant du sous-répertoire /lang/ que vous venez de créer. Ce qui donne, par exemple, pour le plugin ImageManager:
xgettext --keyword=__ --keyword=_e --default-domain=ImageManager --language=php ../thumbs.php ../editor.php ../editorframe.php ../configure/index.php ../images.php ../manager.php ../newfolder.php ../assets/editorframe_js.php ../assets/images_js.php ../assets/manager_js.php --output=myImageManager.pot
Le niveau d'internationalisation
Lorsque vous analysez la structure et le contenu du tout nouveau plugin que vous venez de télécharger, vous pourrez constater que le niveau d'internationalisation peut aller de
- nul: rien n'a été prévu pour l'internationalisation et tout reste à faire4
- pas grand chose: une recherche globale sur l'ensemble des fichiers source montre qu'il y a, parfois, quelques appels aux fonctions __() et _() , mais sans plus. Dans ce cas aussi, tout reste à faire.
- l'auteur vous a laissé un fichier PO dans sa langue à lui5. Dans ce cas, la marche à suivre est:
- faire une copie de travail temp.po
- la vider des ses traductions existantes6
- renommer le temp.po en leplugin-fr_FR.po
- travailler le fichier avec poedit pour générer votre fichier leplugin-fr_FR.mo.
- l'auteur vous a laissé un fichier PO générique (default.po): dans ce cas, c'est comme pour le cas précédent, sauf que vous ne devez pas vider les traductions existantes.
- la totale: l'auteur vous a laissé tous ses fichiers et vous pouvez travailler l'ensemble des sources comme bon vous semble. Et vous êtes dans les mêmes confitions de travail que dans le cas d'un thème.
(i)L'expérience montre que (heureusement) de plus en plus d'auteurs laissent un fichier PO, le plus souvent un fichier default.po
En guise de conclusion
- Gagnante car elle nous apporte ce que nous demandons: une version française du thème ou du plugin.
- Gagnante également car elle nous fait participer activement à l'un des mécanismes fondamentaux qui font la force des "Logiciels Libres": le travail en communauté.
Une dernière chose: lorsque vous travaillez sur un thème ou un plugin, prévenez l'auteur et demandez-lui l'autorisation de modifier ses sources.7
- si le plugin est actif, le désactiver d'abord, le déplacer dans son nouveau répertoire et le réactiver. [retour]
- si ce n'est déjà fait [retour]
- en fait seul le fichier mo est nécessaire en production [retour]
- modifier les sources et générer les fichiers POT, PO et MO [retour]
- c'est souvent le cas pour nos amis germanophones et le fichier est de la forme leplugin-de_DE.po [retour]
- pas trop compliqué avec une bonne petite macro dans un traitement de texte [retour]
- nous vous inquiétez pas: il sera d'accord. Il sera même ravi et enchanté par votre démarche [retour]
Tags: gettext, guide-débutant, mo, po, pot, thème, Traductions, utilitaire, Web, Wordpress
Une réponse à “Internationalisation des thèmes::partie 7::Et les plugins?”

Bravo pour ce tuto très didactique qui m’a permis de faire ma première traduction de plugin (wp-print) en 2 coups de cuillère à pot.
Mille mercis