Créer un fichier de traduction .po sous WordPress

Les thèmes et les plugins WordPress sont développés en anglais et doivent faire l’objet d’une traduction française pour être compréhensible du plus grand nombre. Ce tutoriel abordera 2 cas : quand un fichier .po existe déjà et quand il est absent alors même que le thème ou le plugin dispose de chaînes traduisibles.

Cas n°1 – Un fichier .po est présent

C’est le cas le plus courant et le plus simple. Le thème ou le plugins dispose d’un fichier .po généralement situé à la racine du dossier ou dans un sous-dossier /languages ou /lang.

Capture d'écran - Présence d'un fichier .mo / .po

Poedit est LE logiciel de traduction .po qui générera vos .mo

Pour procéder à la traduction, vous devez éditer ce catalogue de chaînes de traduction à l’aide Poedit. Ce logiciel multiplateforme vous permettra de générer un fichier compilé .mo qui servira à afficher les données traduites sur votre site.

Pour en savoir plus, reportez-vous au tutoriel dédié à Poedit.

Il est important de renommer votre fichier .po / .mo en fonction du préfixe de langue. Par exemple, pour le français on indiquera fr_FR.mo et fr_FR.po sinon impossible de faire fonctionner la traduction.

Cas n°2 – Aucun fichier .po existant

Ce cas est le plus complexe car il requiert des étapes de configurations supplémentaires dans Poedit. Dans cette situation, il n’existe aucun fichier de traduction pré-configuré mais le thème ou le plugin est annoncé comme étant prêt à traduire.

Notez que cette manipulation vaut aussi bien pour les fichiers .pot à la seule différence qu’un fichier .pot n’est autre qu’un modèle qui nous servira à créer un .po.

Étape n°1 – Récupération des sources de traduction

Rapatriez dans un premier temps le dossier de votre thème ou du plugins à traduire sur votre bureau. Ce sera plus simple par la suite.

Étape n°2 – Création d’un nouveau catalogue

Lancez ensuite Poedit puis faites FichierNouveau catalogue.

Remplissez les différents champs qui viennent d’apparaître dont :

  • Nom et version du projet : par exemple, Mon Thème 1.0 ;
  • Equipe de traduction : indispensable de spécifier l’auteur pour conserver une trace si le projet est mis à disposition de tous (logique open-source) ;
  • Adresse électronique de l’équipe : idem que précédemment, utile pour prendre contact et poser des questions au traducteur ;
  • Langue : la langue de traduction, ici le français ;
  • Jeu de caractères : toujours sur UTF-8 tout comme WordPress ;
  • Jeu de caractères du code source : idem ;
  • Formes plurielles : indiquez nplurals=2; plural=(n > 1) ;
Capture d'écran - Création d'un catalogue sous Poedit

Création d’un catalogue sous Poedit

Passez donc à présent sur l’onglet Chemins de sources. C’est ici que nous allons indiquer où se trouve le dossier du thème ou du plugin à traduire.

Cliquez donc sur le second bouton pour créer un nouvel emplacement. Dans le champ relatif au chemin, indiquez le répertoire de votre dossier. Par exemple :

/Volumes/DATA/Desktop/twentyeleven

Capture d'écran - Poedit, emplacement des sources

Le chemin des fichiers à traduire sous Poedit

Continuez maintenant sur le dernier onglet Mots-clés source.

Il faut savoir qu’une chaine de traduction est facilement identifiable dans le code PHP d’un thème ou d’un plugin WordPress. En effet, elle est précédée d’un mot-clé comme __ ou _e ce qui nous donne à titre d’exemple :

<h1><?php _e('Hello World' , 'twentyeleven'); ?></h1>
<h1><?php echo __('Hello World' , 'twentyeleven'); ?></h1>

La fonction est formée d’une part de la chaine à traduire et d’autres part du domaine du thème ou du plugin. Ce domaine permet de regrouper les chaines issus d’un même projet – utilisé notamment par des plugins comme WPML qui gère les sites multilingues.

Dans la première ligne, le _e ajoute automatiquement le echo et affiche donc la traduction. Le second avec __ ne le fait pas.

Pour aller plus loin et comprendre comment gérer les variables dans les chaînes de traduction, reportez-vous à I18n – Internationalisation pour WordPress. Vous y apprendrez que la gestion des langues sous WordPress respecte les standards PHP et repose sur la librairie Gettext.

Mais poursuivons en ajoutant  les mots-clés suivants : _e et __ (double underscore, le tiret sous le 8).

Capture d'écran - Poedit, ajout des mots-clés à traduire

Ces mots-clés nous serviront à détecter les chaînes à traduire

Validez le tout en cliquant sur OK. Votre catalogue est fin prêt… mais il ne contient toujours pas les chaînes à traduire !

Étape n°3 – Récupération des chaînes de traduction

Nous allons demander à Poedit de scanner l’intégralité du dossier pour rechercher les chaînes à traduire en fonction des mots-clés spécifiés.

Pour ce faire, cliquez sur Mettre à jour.

Capture d'écran - Mise à jour des sources via Poedit

La mise à jour des sources est utile à chaque nouvelle version d’un thème ou d’un plugin pour ajouter les nouvelles chaines – ce qui n’est pas toujours fait par les auteurs

Bingo ! Toutes les traductions sont apparues… ou du moins les chaînes à traduire car maintenant c’est à vous de travailler.

Et n’oubliez pas de transférer les fichiers .mo à l’aide d’un client FTP dans le dossier du thème ou du plugin concerné.

Cas n°3 – Le thème ou le plugin n’est pas translation-ready

C’est le cas le plus rare… premièrement, contactez le développeur pour qu’il fasse un effort ! Deuxièmement, pour gagner du temps ou si la réponse est négative, créez vous mêmes les chaînes à traduire en rajoutant les mots-clés… cela demande de bonnes compétences en matière d’internationalisation.

Dans tous les cas, rappelez-vous d’une chose concernant la gestion des traductions : ne jamais effectuer une traduction directement dans le code, jamais !

Aurélien Denis est le fondateur du projet WordPress Channel proposant tutoriels et podcasts librement téléchargeables. En 2010, il fonde Neticpro, une agence Web spécialisée WordPress. Il est aussi co-fondateur du site Protuts.net (tutoriels PC/Mac/Linux) et community manager pour l’Imagine Cup 2011/2012, une compétition mondiale organisée par Microsoft.

54 commentaires

  1. Wolforg

    Excellent tuto, manque juste la gestion des historiques de traductions mais ça dégrossit déjà pas mal le job :-D

  2. Salut.

    Pour les formes plurielles, ce ne serait pas plutôt nplurals=2; plural=(n>1) ?
    En tout cas c’est ce qui est indiqué dans la trad fr de WP.
    Et pour les mots clés, _n et _x sont assez courants aussi.

    A+
    Greg

  3. www.web-geek.fr

    Très bon tuto, je ne savais même pas que c’était possible de créer un fichier de traduction chez WordPress, même pour un plugin.

    En tout cas ça à l’air plus facile à mettre en place que ce je pensais.

  4. Merci Aurélien. Je recommande également ce bon tuto par Amaury

  5. Kim

    POEdit, c’est tellement chiant, chez Wysija on a décidé de se mettre sur Transifex. Un genre de GlotPress, en mieux.

    https://www.transifex.com/projects/p/wysija/

  6. Guy

    Pour des traductions directement dans l’interface d’administration, il existe aussi l’extension « codestyling localisation ».

    Pas forcément très ergonomique pour des centaines de termes à traduire mais très très pratique pour ajouter ou enrichir des traductions (on peut également visualiser l’emplacement des chaines dans les fichiers php)

  7. merci pour ce tuto, j’ai créé un dossier language puis mis les fichiers en_EN.po (essayer default.po ) et en_EN.mo puis fr_FR.po et fr_FR.mo ,malgré toout le thème reste en anglais, pourquoi?
    site test : http://er.v.free.fr/

    Merci

  8. Guy

    @noaneo: c’est probalement le cas numéro 3: Le thème ou le plugin n’est pas translation-ready. D’autre part le répertoire language n’est pas nécessairement « language », c’est la fonction load_theme_textdomain (qui doit être présente pour que le thème soit traduisible, il existe le pendant pour les plugins) qui définit à la fois le répertoire des fichiers de traduction et le domaine de traduction.

    Mots clés: Mettre __ et _e est très insuffisant, WordPress nous fournit une dizaine de mots clés pour les traductions, il FAUT les mettre tous pour assurer une traduction de qualité: __, _e, _n, _x, _ex, _nx, esc_attr__, esc_attr_e, esc_attr_x, esc_html__, esc_html_e, esc_html_x, _n_noop, _nx_noop

  9. Jérôme

    Bonjour,
    Je ne savais ou envoyer ma suggestion (je n’ai pas vu de contact email sur le site…).

    Bref, serait il possible de faire un tutoriel complet (A à Z) sur la mise en ligne (transfert de local au serveur) de wp?
    Je m’explique, je suis en train de finir mon thème perso en local et je souhaite le mettre enfin en ligne, mais après une simple recherche Google (wordpress local en ligne) je m’aperçoit que beaucoup de gens galère avec la mise en ligne de leur wordpress.

    Dois je réinstaller un nouveau wordpress sur mon serveur ou y glisser tout mon dossier wordpress local en bourin?

    Je sais pas du tout comment faire et j’ai peur de perdre la configuration des bdd, plugins, menu, widgets…. je ne suis pas le seul dans ce cas apparemment.

    Merci
    ++

  10. jerome

    ha oui effectivement le formulaire est dans le footer mais j’étais sur mon iphone et je ne l’ai pas vu…

  11. Merci de cet article Aurélien !

    A noter un site assez pratique pour traduire grossièrement un .po :
    http://littlesvr.ca/ostd/translatepot.php

  12. Laurent

    Merci pour ce tutoriel tout à fait éducatif.
    Mais pourquoi ne faut-il « jamais effectuer une traduction directement dans le code, jamais ! »

    • Car tu ne peux pas gérer plusieurs langues, que c’est compliqué si tu as besoin d’aller rechercher pour éditer une chaîne et un tas d’autres raisons que je n’ai pas en tête. ;)

      • Laurent

        Ces raisons sont logiques en effet. J’ai crains un instant que d’autres conséquences, plus technico-techniques, soient envisageables. Après avoir fait la traduction d’un thème dans le code, je vais pourvoir, grâce à ce tutoriel, mettre enfin mon thème à jour avec sa dernière version et faire la traduction en deux temps trois mouvements !
        Merci Aurélien pour cette somme de travail présentée dans ce site et dont tout le monde est bénéficiaire.

  13. sebastien

    y’a un truc que j’arrive pas à faire avec poedit c’est enregistré un fichier .pot
    .po et .mo sans probleme mais pas le .pot
    comment on fait ?

  14. sebastien

    concernant le chemi, tu peux en dire davantage ?
    Si mon fichier.mo est dans le dossier wp-content/plugins/monplugin je dois mettre le path du dossier monplugin, c’est ça ?

    • Chaque plugin / thème fonctionne différemment. Certains disposeront d’un dossier /lang ou /languages, d’autre pas. Il faut voir avec l’auteur lorsqu’aucune information n’est proposée.

  15. sebastien

    Excuse moi aurélien mais je pense que tu n’as pas compris ma question.
    Si le fichier.mo est dans le dossier wp-content/plugins/monplugin, directement dans ce dossier là, pas dans un dossier lang ou language, je dois mettre le path du dossier monplugin (path serveur) ?

    • Il te faut créer la traduction sur ta machine personnelle et non directement sur le serveur car le .mo ne sera pas généré. Si tu opères en local, alors oui mais restez sur le bureau est plus simple et rapide.

  16. Bonjour,
    Très intéressant cet article ; je n’y ai pourtant pas trouvé la réponse à mon problème : j’utilise bien sûr WP en français avec un thème (Ovid, de Themeforest) traduit lui aussi en français, mais pas moyen de remplacer le terme anglais Category qui apparaît sur mes pages (p.ex. ici http://www.ecolesrec.ch/category/es/espees/). Vous n’auriez pas une idée du problème ? D’avance merci !

  17. Bonjour,

    Je suis confrontée au même pb avec le thème REASON, je ne parviens à traduire le terme « Category » en français et n’ai pas très bien compris la réponse d’Aurélien.
    Puis-je avoir plus d’explications ?

    D’avance merci.

    • Pierre

      Bonjour,

      Je n’ai pas encore approfondi la question, désolé. Mais si je sais ce qu’est un fichier .po, je ne sais pas comment « vérifier que la chaine est internationalisée dans le thème. » C’est vrai que sa réponse n’est guère limpide pour un non-expert de WP… Le premier qui trouve la solution informe l’autre !
      Bonne chance …

    • Pas de panique, ce n’est pas très compliqué… il faut suivre le cas n°2 à la lettre pour mettre à jour le fichier de traduction à partir du thème original. Recherchez ensuite les termes relatifs à « category ». Il y est forcément dans 99%. ;)

      • Pierre

        Bonsoir Aurélien,
        Pas de panique, c’est sûr. Mais c’est bizarre : mon thème est traduit, j’ai inspecté son fichier de traduction .po (acheté sur wptrads.fr) et tout est traduit. Pourtant, c’est bien le terme anglais « Category » qui s’affiche…

        • Bonjour,
          J’ai trouvé la solution pour mon thème. Dans l’éditeur, « Modèle pour la page d’accueil », il suffit de remplacer :

          CODE NON FORMATE DONC INVISIBLE, DESOLE

          J’espère que ça marchera pour toi.
          Bon we

        • Pierre

          Effectivement, le code est invisible. Mais j’ai aussi trouvé la parade : modifier le fichier category.php.
          Merci !

  18. bonjour , svp j’ai besoin de savoir comment je peux faire un site avec la langue fr/an ,je veux quand j’accède a mon site (front)je trouve un lien (fr/an) et quand je clique « An » tout le site change en anglais (page ,menu ,contenu).
    pour le moment je travail sur wordpress version 3.5.1 fr (le fichier langages est vide).
    j’ai essayé avec des plugin mais ca fonctionne pas .
    Est ce que je dois avoir un autre dossier worpdress (version anglais ) sous ma racine pour que sa marche ??

  19. Office

    Bonjour,

    J’ai bien effectué le tuto, par contre sur mon plugin j’ai un problème de traduction partielle. J’ai bien traduit avec Poiedit les lignes de codes correspondent bien aux fichiers sources, mais j’ai quand même des traductions qui ne passe pas. Comment résoudre cela ?

  20. Pour tester Poedit, j’ai décidé de traduire le plugin Milestone bien connu sur WordPress.com. Il est au téléchargement pour un WP auto-hébergé, mais disponible en allemand. Après avoir ouvert le fichier .po, des chaînes semblent « verrouillées » dans un fichier .po. Impossible donc de les traduire. Comble de malheur, certaines chaînes sont des expressions qui apparaissent en front.
    Bref. Quelqu’un saurait-il me dire comment déverrouiller ces chaînes ? Après avoir fouillé dans les paramètres de poedit et sur le web, je n’est encore rien trouvé.

  21. Bonjour, j’ai essayé de traduire un petit plugin « Simple Contact Form Revisited widget » mais il n’y pas de répertoire lang ou language. J’ai créé les fichiers fr_FR.mo et .po avec poedit et les ai mis à la racine du plugin. Mais cela ne traduit rien. Je suppose que ce plugin n’est pas prêt pour être traduit. Comment le savoir?

    • Si vous êtes parvenu à faire détecter des chaînes à traduire par Poedit, il doit y avoir un moyen de les faire prendre en charge par le plugin. Cela dit, il commence à dater et le mieux serait de prendre contact avec son auteur. ;)

      • Merci de votre réponse. Les chaines sont détectées, pas toutes, par _e et __

        Je cherchais un formulaire de contact simple qu’on puisse mettre dans les widgets de façon à ce qu’il apparaisse sur toutes les pages. Pour le moment j’ai traduit en « dur » dans les routines php bien je sache que cela ne devrait pas se faire (retraité maintenant, j’ai fait du développement de logiciel pendant toute ma carrière…). je vais chercher une autre solution.

        Je suis déçu de rencontrer problème sur problème avec les extensions que je tente d’utiliser et de devoir régulièrement contacter les auteurs.

Rétrolien pour cet article

  1. Blogging et réseaux sociaux, la veille de 4h18
  2. L’Hebdo WordPress : Trac – BuddyCamp – Traduction | WordPress Francophone
  3. Mettre en place un site multilingue grâce au multisite, un plugin et une fonction | J'M Perso

Laisser un commentaire