Suite aux divers échanges et demandes, nous avons décidé de consacrer quelques pages à la traduction des extensions.
Ecrit par Lise - Site
Suite aux divers échanges et demandes, nous avons décidé de consacrer quelques pages à la traduction des extensions.
En effet, tous les plugins ne disposent pas de fichiers nous permettant de les traduire. Vous trouverez donc ici quelques éléments vous permettant de modifier les fichiers initiaux afin d’y remédier.
Les pages ci-dessous sont rédigées par plusieurs auteurs de ce blog, vous pourrez être redirigé(e) automatiquement vers le blog de Yin-Yin ou des articles que nous avions écrits précédemment.
N’ayant pas de droit d’administrateur sur le PC que j’utilise, je ne peux installer aucun logiciel. Pour apporter une petite modification à un fichier de traduction, ne pouvant donc pas utiliser PoEdit, j’ai installé le plugin Codestyling Localization sur un blog de test.
Cette extension permet de traduire un plugin directement depuis l’interface d’administration.
J’y ai trouvé quelques limites : j’ai voulu mettre à jour la traduction de WP-Ajax-comments. Codestyling Localization ne « voit » pas le fichier de langue qui est se trouve dans wp-content/plugins/wp-ajax-edit-comments/languages, il « cherche » le fichier de traduction dans le répertoire où est placé le fichier php.
Si aucun fichier .pot n’est « visible », on peut en créer un avec Codestyling Localization ; les expressions sont alors traduites avec Google, donc approximativement ; le fichier est placé dans le répertoire wp-content/plugins/.)
Autre limitation : pour reprendre la traduction déjà effectuée que je souhaitais mettre à jour, j’ai copié mon ancien fichier .pot dans le répertoire wp-content/plugins/. Codestyling Localization s’attend à trouver un fichier de traduction qui porte le même nom que le plugin : il m’a fallu alors renommer mon fichier ajaxEdit-fr_FR.mo en wp-ajax-edit-comments-fr_FR.po pour qu’il soit « vu » du plugin.
Une fois la traduction et la génération du fichier .mo effecuées, il est nécessaire de renommer le fichier de traduction en ajaxEdit-fr_FR.mo et le replacer dans le répertoire wp-content/plugins/wp-ajax-edit-comments/languages.
Comme entre temps, j’ai retrouvé mon Mac avec PoEdit, je n’ai pas poursuivi mes investigations ; même si l’utilisation de Codestyling Localization peut sembler un peu lourde, ce peut être une alternative intéressante pour traduire occasionnellement un fichier.
Suite aux difficultés que Lise à rencontrées pour que s’affiche en français le plugin subscribe-to-comments, je me suis plongé dans le code dudit plugin, ce qui m’a amené à comprendre le mécanisme utilisé par WordPress pour l’internationalisation des fichiers.
Il existe déjà de nombreuses ressources en ligne sur les problèmes de localisation des fichiers WordPress. Je vous invite à vous reporter à deux articles pour bien comprendre la problématique abordée ici :
Si un plugin doit être localisé (c’est le cas de Subscribe-to-comments), il devra comporter un fichier .mo contenant les traductions des chaînes de caractères. On le trouve en général à 3 endroits :
Dans chaque fichier de plugin destiné à être internationalisé de cette manière, il faut invoquer la fonction load_plugin_textdomain pour appeler le fichier .mo
Dans subscribe-to-comments (ligne 806 chez moi) voici cette instruction :
load_plugin_textdomain('subscribe-to-comments'); |
La fonction load_plugin_textdomain est définie dans le fichier wp-includes/l10n.php
function load_plugin_textdomain($domain, $path = false) { $locale = get_locale(); // <em>on récupère la valeur de WPLANG définie dans wp-config</em> if ( empty($locale) ) // <em>si elle est vide</em> $locale = 'en_US'; // <em>anglais par défaut</em> if ( false === $path ) // <em>si aucun chemin n'a été spécifié</em> $path = PLUGINDIR; // <em>on définit $path sur la racine du répertoire plugins</em> $mofile = ABSPATH . "$path/$domain-$locale.mo"; // <em>emplacement du fichier de langue</em> load_textdomain($domain, $mofile); } |
Si on laisse cette fonction en l’état, le fichier de langue subscribe-to-comments-fr_FR.mo devra être téléchargé à la racine du répertoire plugins, c’est-à-dire wordpress/wp-content/plugins/
Si on veut qu’il soit dans un autre répertoire, alors il faut utiliser le deuxième paramètre de la fonction load_plugin_textdomain : $path
exemple
load_plugin_textdomain('subscribe-to-comments','wp-content/plugins/subscribe-to-comments/');
Là, WordPress va chercher le fichier de langue dans le répertoire de notre plugin.
Note : attention aux mises à jours futures de ce plugin… En effet, il faudra refaire la manipulation pour chaque mise à jour.
Vous pouvez avec ce mécanisme, très simplement placer vos fichiers de traduction où vous le souhaitez mais il me semble qu’on gagnerait en efficacité en normalisant l’arborescence des plugins, par exemple en créant systématiquement pour chaque plugin un répertoire du nom de ce plugin avec un répertoire lang/ à l’intérieur duquel on met tous les fichiers de langue .mo. Il suffirait alors de modifier la fonction load_plugin_textdomain dans l10n.php
function load_plugin_textdomain($domain, $path = false) { $locale = get_locale(); if ( empty($locale) ) $locale = 'en_US'; if ( false === $path ) $path = PLUGINDIR; $mofile = ABSPATH . "$path/$domain/lang/$domain-$locale.mo"; // <em>les fichiers de langue sont dans le répertoire lang/ de chaque plugin.</em> load_textdomain($domain, $mofile); } |
Note : ces remarques s’appliquent aussi aux feuilles de style ou aux fonctions javascript dont les appels et les définitions devraient être mieux normalisés, j’ai remarqué que trop de plugins pour WordPress nous obligent à définir des styles dans la css de notre thème (subscribe-to-comments par exemple)… A moins d’utiliser un thème qui comme celui de ce blog « supporte » ce plugin !
Si parfois, en traduisant certaines chaînes de caractères, vous avez l’impression que celles-ci ne sont pas traduites, c’est sûrement que le domaine de traduction aura été mal défini.
Je m’explique
Dans le fichier subscribe-to-comments, on a
_e('Back to regular view'); |
(chez moi ligne 1068).
La fonction _e (définie aussi dans l10n.php) affiche une chaîne passée en paramètre. Cette fonction attend 2 paramètres :
// <em>Echo a translated string.</em> function _e($text, $domain = 'default') { echo translate($text, $domain); } |
Si le « domaine » ($domain) n’est pas défini, alors le programme va chercher la traduction dans le fichier de langue général pour votre blog dans
wp-includes/languages/fr_FR.mo |
Si ce paramètre est défini sur le domaine du plugin, alors il va chercher le fichier de traduction dans le répertoire de ce plugin.
Donc, s’il s’agit d’une traduction spécifique à ce plugin, il faut définir le domaine :
_e('Back to regular view', 'subscribe-to-comments'); |
Sinon, s’il s’agit d’une traduction récurrente, il y a de fortes chances à parier qu’elle est déjà définie dans le fichier général et donc vous n’avez pas besoin de définir son domaine :
_e('Back to regular view'); |
Voilà, vous savez tout maintenant de ce mécanisme ingénieux et vous serez à même de corriger tous les problèmes liés à la traduction de plugins
Il existe un outil très simple d’emploi qui permet de traduire des logiciels ou des plugins (du type de ceux utilisés sur ce blog). Si ces derniers disposent d’un fichier .pot ou de fichiers avec les extensions .po et .mo, la traduction se fait avec PoEdit.
Une présentation de ce logiciel se trouve sur le site de Framasoft. PoEdit existe pour les plateformes Mac OS X, Linux, Windows. La dernière version 1.3.6 fonctionne bien sous Windows, par contre, sous Mac OS, il faut utiliser la version précédente.
Si le package que vous utilisez dispose d’un fichier .pot, il suffit avec PoEdit de l’importer (Fichier/Nouveau catalogue depuis un fichier POT). Si le fichier dispose d’un fichier .po, il suffit de l’ouvrir.
Ensuite, l’interface est simplissime, d’un côté les chaînes à traduire, de l’autre, les chaînes traduites.
Le nouveau fichier de traduction doit être nommé (en général) NomDuProgramme-fr_FR.po. A chaque fois qu’on enregistre un fichier .po, celui-ci est compilé et un fichier .mo NomDuProgramme-fr_FR.mo est généré automatiquement. Une fois la traduction effectuée, il ne reste plus qu’à télécharger ces deux fichiers dans le répertoire idoine.
Wordpress a un petit côté magique, il existe plein de plugins qui permettent de personnaliser son blog. En suivant les conseils du concepteur du thème que j’ai choisi, en utilisant Poedit, développé précisément pour permettre à tous les blogs Wordpress de »parler » la langue de leur auteur, j’ai pu, sans trop de mal, franciser le mien.
Aux flux RSS des articles
Aux flux RSS des commentaires
Par mail : pour être informé(e) des nouveaux articles, inscrivez-vous en cliquant sur le lien ci-dessous "Inscription".
Mentions légales
Les différents éléments du Blog de Lise restent la propriété de leur(s) auteur(s) respectifs.