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__ (double underscore, le tiret sous le 8), _x et _n.

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 !

79 commentaires

      1. Oui, bien sur.
        En fait PoEdit peut gérer un dictionnaire de traductions. Il suffit de créer un base de référence puis d’indiquer le répertoire ou les traductions sont stockées. Une fois que c’est fait, il faut à chaque nouvelle trad dire à PoEdit d’aller chercher à traduire automatiquement. Ca n’affranchit pas de la vérification de la trad mais ça traduit les termes les plus récurrents

  1. 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

  2. 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.

  3. 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)

  4. @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

  5. 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
    ++

    1. Le formulaire de contact est dans le pied de page.

      Sinon, oui c’est une bonne idée de tutoriel mais c’est compréhensible que beaucoup de monde galèrent sur une opération de ce niveau technique…

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

      1. 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.

  7. 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 ?

  8. 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 ?

  9. 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) ?

    1. 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.

  10. 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 !

  11. 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.

    1. 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 …

    2. 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%.

      1. 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…

        1. 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

  12. 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 ??

  13. 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 ?

  14. 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é.

  15. 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?

    1. 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.

      1. 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.

  16. Génial ce post ! je devais traduire une partie d’un thème pour un client et du coup cela c’est fait très facilement. ça faisait 2 heures que je galérai avec des extensions inefficaces.

  17. Merci pour vos tutos toujours très qualitatifs !

    Problématiques concernant traduction :

    1- J’ai traduit le fichier .po. Cela a bien fonctionné pour les mots concernant le formulaire de contact mais pas pour le reste (!)

    2- Les espaces ne sont pas pris en compte – Du coup je reçois par exemple par email Merciprenom (càd Thank you a bien été traduit par « Merci » mais l’espace ajouté après « Merci » est inexistant, c tout collé) – idem pour les autres champs. Si l’espace n’est pas en premier ou dernier ça fonctionne en revanche.

    Auriez-vous des suggestions ?

    1. J’ai enfin résolu ces 2 points. Mon fichier .po n’était pas pris en compte. Il a fallut que je supprime d’abord le .po côté hébergeur avant de basculer le .po modifié localement + rebasculer le .mo et tout a été pris en compte, extra !

        1. Oui parfaitement et même si j’ai buggé sur une partie du .po votre tuto m’a permis de découvrir ce système de traduction m’évitant de nombreuses heures « d’épluchage » de code php, merci bcp !

          1. Bonjour,

            Nous utilisons « Easy digital download » et « PDF Invoice ». Nous avons traduis les fichiers .mo et .po ce que nous voulions pour que cela soit en français mais la traduction ne s’affiche pas… D’où le problème peut-il provenir ?

            Merci,
            Emmanuelle

          2. Sûrement une question de nommage des fichiers de traduction ou d’emplacements. Généralement, les auteurs de plugins livrent des informations à ce sujet… ou alors il faut les contacter.

  18. j’ai utilisé l’éditeur « poedit » (http://www.poedit.net/) pour les traductions. Par contre lorsque j’écrasais les fichiers mo et po, cela ne fonctionnait pas. J’ai du les supprimer sur le serveur puis les placer à nouveau en vérifiant bien que l’extension était correct (pas d’espace avant le point…). J’espère que ça marchera pour vous !

  19. Bonjour, à partir du .pot fourni dans le thème d’un blog en cours, j’ai généré le fr_FR sans souci, à part qu’il manque des expressions à traduire. Comment les ajouter manuellement ? J’ai ajouté les « __ » et les « _e » dans les mot-clés, mais cela n’a rien changé. Egalement, je voudrais modifier une expression mal saisie : dans les pages, j’ai _e( ‘No search results found…’ mais dans PoEdit, j’ai « No search results found.. » (deux points au lieu de trois), ce qui fait que la version FR n’est pas traduite sur le blog. Que faire pour la modifier ?

      1. Merci Aurélien, j’ai ajouté les préfixes, Enregistrer, mais malgré la mise à jour du catalogue depuis le fichier POT, on ne m’affiche aucune nouvelle chaîne à ajouter.

  20. Bonjour, merci pour le tuto que j’avais déjà expérimenté. Cette fois-ci j’ai un gros problème. J’ai récupéré le fichier en_US.po dans le dossier lang de mon thème comme d’habitude, mais quand je l’ouvre avec poedit, rien ne s’affiche ! Il n’y a rien dans la colonne de gauche..

    Une idée de comment je pourrais régler le problème ?

    Merci d’avance

  21. Bonjour,
    comment wp reconnait la langue des utilisateurs ?
    Parce que l’ip n’est pas toujours fiable, il y a les cookies et la langue par default du navigateur ?
    Merci

  22. J’ai bien suivi ce super tuto mais malheureusement la traduction ne se fait pas. J’utilise le plugin qTranslate, peut être est ce que ça vient de la ?
    J’ai fait un thème perso dans lequel j’ai créer un répertoire languages. Dans functions.php j’ai :
    add_action(‘init’, ‘my_theme_setup’);
    function my_theme_setup(){
    load_theme_textdomain( ‘ot’, get_template_directory() . ‘/languages’ );
    }

    Lorque je passe en anglais, ma traduction ne se fait pas (en sachant que ma source est en français). Au secours !!!

  23. Un tuto très clair sur les fichiers .po.Il est vrai que c’est assez fastidieux à faire, mais on est assez content quand on a terminé et qu’on peut mettre en ligne sa traduction proprement !

  24. Bonjour Aurélien, j’ai tenté maintes fois sans succès, là oui je suis désespérée j’ai sahifa en local et lorsque je vais sur themeforest sahifa =>sahifa=>languages : j’ai un fichier tout blanc fr_FR.mo puis au-dessous un fichier avec un A à l’intérieur nommé sur le côté: Type gettext message catalog, lorsque j’ouvre ce fichier je tombe sur la page fr_FR.po.sahifa v1 – poedit et tous les textes originaux sans déjà traduits en français (donc ok), ensuite j’ai fais fichier enregister sous fr_FR.po soit Fr_FR et à chaque fois il me dit qu’il existe déjà.
    si vous pouvez me venir en aide, je vous remercie à l’avance, car ce thème sahifa serait bien sympathique en français pour moi travailler mes dossiers que j’importe d’overblog
    Cordialement
    Isa

  25. Bonjour Aurélien,
    J’ai traduit un plugin (cas n° 2 pas de fichier po) et j’ai bien transféré mes fichiers .mo et .po mais il ne se passe rien ? Que puis-je faire ? Merci d’avance

      1. Merci de ta réponse. Pour le nom c’était déjà fait. Comment savoir si le plugin supporte l’ajout de traduction ? Et si ce n’est pas le cas, que faire ? C’est un plugin payant ça m’embêterait de l’avoir acheter pour rien… J’ai essayé de contacter son concepteur mais 0 réponse…

        1. Bonjour,
          vous avez regardé le code de votre plugin?
          Etait il comme dans l’exemple codé pour être traduit ?
          Vous avez mis les fichiers langues directement dans le plugin ou un sous dossier languages ?
          Avez vous mis aussi les fichiers en default.po et default.mo ?

  26. Bonjour,
    j’essaie de traduire cette phrase avec PoEdit
    You can change or remove MyThemeShop link from footer and use your own custom text. Tip: You can use our affiliate link and earn 60% commission on every sale.
    mais à chaque fois j’ai une erreur
    erreur: format specifications in ‘msgid’ and ‘msgstr’ for argument 1 are not the same
    Merci

  27. merci pour ce super tutu kom d’hab!
    j’ai juste une question pour un wp installé en francais et un theme en arabe,qui ne s’affiche pas , comment faire please