Localisation de subscribe-to-comments (Jack)

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.

Subscribe-to-comments

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 :

  1. Explications générales et utilisation de poedit
  2. Utiliser les fichiers .pot, .po, .mo

La mécanique de WordPress pour la localisation

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 :

  1. à la racine du répertoire plugins/
  2. dans le répertoire au nom du plugin subscribe-to-comments/ (usage préconisé pour WordPress)
  3. dans un répertoire nommé lang/, langs/ ou languages/ et situé dans le répertoire du plugin.

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

Localisation de subscribe-to-comments

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.

Normalisation de développement des plugins

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 !

Les domaines de traduction de WordPress

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 :

  1. $text = « Back to regular view »
  2. $domain = ‘default’ (par défaut)
// <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 ;-)

 


Ecrit par jack - Site
musicien et enseignant multimédia Mot(s)-clé(s) , ,

35 commentaires

Ecrire un commentaire» 1 2
  1. titfilou

    Merci pour ces infos précieuses. :-)

  2. Soulbro

    Merci Lise et Jack pour ces précieuses infos. Malheureusement je les ai essayé toute, de la ligne à ajouter au plug au changement du fichier l10n.php et rien ne fonctionne. J’ai également essayé en défissant dans chaque _e et __ mon domaine ‘subscribe-to-comments’ et j’ai également testé le déplacement du ficher subscribe-to-comments.mo dans le dossier plugins, subscribe-to-comments et même subscribe-to-comments/plugins.

    Rien n’y fait. (Je ne peux malheureusement pas vous envoyer un lien vers mon site car… Je suis pour l’instant en local!)

    Une idée ?

    Merci !

    1. Pour ma part, voilà comment j’ai procédé :

      * s’assurer que le fichier config.php contient bien la ligne :
      define (‘WPLANG’, ‘fr_FR’);
      * placer le fichier « subscribe-to-comments.mo » dans le dossier « wp-content/plugins ».

      1. soubro

        Merci Lise d’avoir répondu.

        J’ai bien inséré le code ‘WPLANG’, ‘fr_FR lors de la création de mon blog.
        J’ai également essayé de faire fonctionner la traduction en plaçant le subscribe-to-comments.mo dans plugins comme dans les autres dossiers nommés plus haut, sans succès… Je n’ai plus d’idée… quelqu’un aurait une autre piste ?

        1. soubro

          Hey Lise,
          Finalement j’ai réussi à faire fonctionner la langue française avec ce plugin ! Merci !!!!

          Malheureusement une autre tâche m’attend : l’intérêt étant de faire un site bilingue, je me demandais si tu savais comment faire en sorte que le puglin soit en français ou anglais selon que le visiteur est sur la version française ou anglaise de mon future site ?

          Automatiquement, les message pour les abonnés, non abonnés et auteurs s’insèrent dans les réglages du panneau de contrôle de wordpress et qu’il n’est pas possible d’y faire du php (je pensais notamment à la formule global $locale; if ($locale== en_US)
          {echo blablalal } elseif ($locale== ») {echo blablabla} mais je ne sais pas où l’insérer…?)

          Malheureusement, le forum sur le plug ne répond pas, donc, à tout hasard, si tu as un début d’idée je suis preneur.

          Merci encore !

          1. Je pense qu’il faut utiliser certains plugins de traduction, à chercher sur wordpress.org sans doute.

            En faisant une recherche sur Google avec « blog wordpress bilingue » ;-) j’ai trouvé un article intéresant
            http://www.fran6art.com/internet/non-classe/pas-facile-davoir-un-blog-en-plusieurs-langues-avec-wordpress/

            Je n’ai pas consulté les autres liens ;-)

          2. soubro

            Merci, mais en fait j’utilise déjà un plugin qui me permet d’avoir ma page soit en anglais ou français quand j’appuie sur un sélecteur de langue, mais subscribe to comments ne procède pas au changement, au contraire des plugs et des autres contenus de mon site. Ma question était si tu savais comment faire pour que le plugin soit toujours en accord avec la langue de la page visitée ?Mais je crois bien que pose une colle!!

          3. Salut soubro,
            En faite j’ai le même problème que toi. J’utilise WPML et je n’arrive pas à faire en sorte que Subscribe to comments soit dans la bonne langue.
            As tu trouvé une solution depuis?

  3. Hello Lise et merci pour ce billet.

    Après avoir tout traduit, je me suis arraché les cheveux jusqu’à ce que je trouve ton article sur la localisation de ce fantastique plugin.
    Il me manquait l’info du déplacement des fichiers de langue à la racine de « plugins » ;)

1 2

Laisser un commentaire

Votre adresse mail ne sera jamais rendue publique ni utilisée.

*Si vous écrivez un commentaire ici pour la première fois, celui-ci ne sera publié qu'après validation par un administrateur du blog. Ne l'envoyez pas plusieurs fois !
*Bien sûr, tout commentaire injurieux, publicitaire ou spam sera supprimé.
*C'est à vous maintenant !

(obligatoire)
(obligatoire)
(obligatoire)

Laisser ces deux champs tels quels :

Protégé par Invisible Defender.

Protected by WP Anti Spam


  • Mentions légales
    Les différents éléments du Blog de Lise restent la propriété de leur(s) auteur(s) respectifs.


Connexion à WordPress protégée par Clef