Comment traduire un thème ou plugin WordPress avec Poedit

Publié par Gui dans Tutoriels, Wordpress

Intermédiaire

php, gettext, poedit

Traduire un blog WordPress est bien plus facile qu’on ne peut le croire. Je vais dans cet article vous expliquer pas à pas comment vous y prendre.

WordPress utilise la librairie GNU gettext pour mettre en place son système de traduction.  C’est une solution open-source très répandue et qui a fait ses preuves.

Principe

Le principe de fonctionnement de gettext est simple. Grâce à l’utilisation de méthodes particulières ( __(), _e(), …), divers logiciels de traduction basés sur gettext vont pouvoir détecter les phrases à traduire en parcourant un répertoire donné et ainsi construire un dictionnaire contenant l’ensemble des phrases / mots que l’on pourra ensuite traduire (toujours via ce même logiciel).

Préambule

Nous allons partir de ce bout de code pour notre traduction. Il s’agit d’une simple boucle affichant un article donné.

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

	<div class="article">

	<h1><?php the_title();?></h1>
	<p>Article publié dans la catégorie : <?php the_category(', ') ?></p>

	<?php the_content('Continuer la lecture de '.get_the_title('', '', false)); ?>

	<h3>Liste des commentaires</h3>
	<p><?php printf("Il y a %s commentaires", get_comments_number()); ?>.</p>

	<?php comments_template(); ?>

	</div>

<?php endwhile; ?>

Mettons que ce bout de code est contenu dans un fichier single.php à la racine de votre thème. Le but bien évidemment étant de traduire ces phrases, qui sont pour l’instant « en dur » dans le code (publié dans, liste des commentaires …).

Création du répertoire lang

Ajoutez un répertoire intitulé « lang » à la racine de votre thème (votre_theme/lang/). Nous utiliserons ce répertoire pour y placer nos dictionnaires.

Création du dictionnaire

Nous allons utiliser le logiciel Poedit pour créer notre dictionnaire (vous pouvez le télécharger ici). Une fois installé, et après quelques configurations du logiciel de base, voici les étapes à suivre.

Première étape, la création d’un catalogue : Fichier → Nouveau catalogue …

Création et configuration d'un catalogue via Poedit

Les formes plurielles correspondent à la grammaire utilisée dans chaque langue (en france, il n’y a qu’une seule forme plurielle, lorsque n>1).

Ensuite nous allons configurer le chemin, il s’agit du répertoire à partir duquel le logiciel va chercher les chaînes à traduire (de manière récursive).

Configuration du chemin

Dans notre cas, nous allons indiquer comme chemin « .. ». Il est important d’indiquer un chemin relatif pour que vous puissiez mettre à jour les traductions depuis n’importe quel poste (ne pas mettre D:/work/wordpress/…).

Enfin nous allons choisir les mots clés à utiliser pour la détection des chaînes de caractères.

Les mots clés utilisés sont les méthodes particulières que l’on va insérer dans notre code. Il en existe de différentes sortes :

  • _e(« Bonjour ! ») va afficher directement (comme un echo) la traduction de « Bonjour ! » qui sera contenue dans le dictionnaire.
  • $hello = __(« Bonjour ! ») permet de récupérer dans une variable une traduction
  • _n(« Il y a %d message non lu », « il y a %d messages non lus », $count) permet de définir des chaînes similaires prenant en compte le pluriel
  • _x(« Comments », « noun ») et _x(« Comments », « column header ») permet d’apporter des traductions différentes d’un même mot selon le contexte

Mots clés utilisés pour la recherche de chaînes

Mots clés forme plurielle

Supprimez les trois premières entrées et ajoutez les trois dernières (__ , _e et _n:1,2). Pour le mot clé _n, nous spécifions le nombre de possibilités de formes plurielles (1: singulier, 2: pluriel).

Validez ensuite, Poedit va vous demander où enregistrer le fichier, choisissez le répertoire lang/ précédemment créé. Enregistrez bien votre fichier avec le nom fr_FR.po ou en_US.po ou de_DE.po etc… Il faut utiliser le code ISO des pays.

Poedit va ensuite compiler automatiquement un fichier .mo, qui sera le fichier utilisé par WordPress (plus rapide à exécuter). Le fichier .po ne servant qu’à ajouter/modifier/supprimer des traductions.

Contexte (domaine)

Il important de restreindre les traductions à un contexte précis (domaine). Par exemple, si vous traduisez un thème, il est important de dire à gettext que votre dictionnaire ne doit s’appliquer qu’aux chaînes trouvées dans votre thème et non toutes celles de wordpress. Il en va de même pour un plugin, ceci pour éviter de modifier une traduction déjà existante et appartenant à un autre plugin.

Pour apporter la notion de contexte, nous pouvons utiliser un second argument à nos fonctions _e(), __() et un quatrième pour _n().

Ainsi nos fonctions s’écriront: _e(« Bonjour ! »,« montheme »);

Modification du code

Nous allons maintenant modifier notre bout de code pour rendre la traduction possible. J’utilise comme « clé » pour les traductions des chaines en anglais, cela évite par exemple des problème d’encodage des caractères spéciaux.

Voici donc le code modifié :

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

	<div class="article">

	<h1><?php the_title();?></h1>
	<p><?php _e('article published in', 'montheme'); the_category(', ') ?></p>

	<?php the_content(__('keep reading ', 'montheme').get_the_title('', '', false)); ?>

	<h3><?php _e('Comments list', 'montheme');?></h3>
	<p><?php printf(_n("There is %s comment", "There are %s comments", get_comments_number(), 'montheme'), get_comments_number()); ?>.</p>

	<?php comments_template(); ?>

	</div>

<?php endwhile; ?>

Nous utilisons donc ici _e() pour afficher les titres, __() pour récupérer les traductions et _n() pour gérer les traductions plurielles.

Enregistrez votre fichier et revenez à Poedit.

Traduction avec Poedit

Maintenant, ouvrez votre fichier .po avec Poedit et cliquez sur Catalogue → Mise à jour depuis les sources.

Vous devriez voir toutes vos chaines apparaître dans une fenêtre :

Nouvelles chaînes à traduire Poedit

Validez. Maintenant vous pouvez librement traduire toutes ces chaînes et sauvegarder votre fichier .po.

Traduction de chaînes avec Poedit

Voici l’écran que vous devriez avoir pour la traduction de chaînes plurielles. Chaque onglet en bas correspondant à une forme (singulier, pluriel).

Traductions de chaînes plurielles

Dernière étape, charger le dictionnaire

Enfin, quand tout est prêt, il ne reste plus qu’à informer WordPress qu’il doit charger votre dictionnaire. Pour cela, il suffit d’ajouter cette ligne dans votre fichier functions.php.

load_theme_textdomain("montheme", TEMPLATEPATH . '/lang');

Traduction de nouvelles chaînes

Au fur et à mesure que vous ajouterez de nouvelles phrases dans votre code, il vous suffira d’ouvrir votre fichier .po et d’actualiser le catalogue (Mise à jour depuis les sources) et de traduire les nouvelles données puis d’uploader votre fichier .mo.

Traduire les articles & pages

Je n’ai couvert volontairement dans cet article que la traduction de mots définis dans le code d’un thème ou plugin. Si vous voulez traduire les contenus dynamiques (articles, pages, custom post types), il vous faudra recourir à un plugin, car WordPress ne gère pas le multilingue nativement pour l’instant (sic.).

Vous pouvez donc utiliser par exemple le plugin suivant :

Traduire un plugin

La traduction d’un plugin n’est guère différente. Il vous suffit d’utiliser comme domaine le nom de votre plugin et d’utiliser la fonction load_plugin_textdomain dans le fichier principal de votre plugin.

Conclusion

Vous devriez maintenant avoir les bases pour traduire vos thèmes et plugins et goûter aux joies de gettext qui nous rend la vie bien plus facile quand même !

Ressources

24 commentaires

1 2
  1. Vincent

    Bonjour,

    J’avais commis, il y a cinq ans, un article sur l’internationalisation qui avait aidé quelques développeurs en herbe de WordPress.

    Le tien est plus complet, car plus récent, et il est encore plus pédagogique, car il comporte des;.. images. Bravo pour le travail, Guillaume !

    Les lecteurs moyens ne savent pas combien la rédaction d’un article demande de travail et de patience.

    • Gui
  2. Vincent

    J’ai omis de dispenser un conseil aux lecteurs de cet article, si je puis me permettre.

    PoEdit n’est guère pratique sur le plan visuel quand il y a de nombreuses chaînes à traduire. De plus, il refuse parfois d’enregistrer le travail en raison d’une erreur fatale (il donne le numéro de ligne, mais pas la chaîne !).

    Dans ces deux, cas, il est possible d’éditer le fichier .po comme un fichier « plat » avec un éditeur de texte pour le modifier. Ensuite, on le rouvre avec PoEdit… La manipulation fonctionne fort bien si l’on est précis. :)

  3. 'Christa

    Bonjour !

    Merci pour cet excellent tutoriel qui m’a bien servi !

    Une question me préoccupe en ce moment même, qu’en est-il des chaines _x ? Où sont-elles traduites ?

    • 'Christa

      Uh, suis-je bête, elles n’étaient pas « traduites » dans mon cas parce qu’il n’y avait rien à traduire… *va se pendre*

  4. evjf paris

    Merci pour ce tuto. une idée pour editer en local un site sur un ftp?

    • Gui
  5. Hervé

    Très bonne initiative

  6. Yann

    Très bon article qui m’a permit de corriger quelques erreurs.

    Néanmoins, je fais différemment.

    1/ Je crée un catalogue en anglais qui recense tous ce qu’il y a à traduire comme tu le fais ici. Mais je l’enregistre au format .POT

    2/ Ensuite je crée un nouveau catalogue qui lui sera fr_FR.po est qui se met à jour avec le fichier .POT

    Comme cela si quelqu’un désire traduire mon thème et/ou plugin je leur envoie juste le fichier .POT :)

  7. patrick

    Super article. Très précieux. Et en plus ça marche !! merci

  8. Samuel

    Bonsoir,
    intéressant, mais comment faire pour un thème enfant ?
    Merci !
    Samuel

  9. summ3r

    Bonjour,

    Si vous êtes intéressés de traduire logiciels pour Internet, pour PC, pour mobiles ou tout autre type de logiciels, je vous recommandons chaleureusement le nouvel instrument numérique ”l10n” que mon équipe a récemment créé – et qui a toutes les chances de rendre vos activités de bureau bien plus faciles et rapides.

    http://poeditor.com/

    POEditor est intuitif, basé sur travail en collaboration. Il comprend de nombreuses fonctions qui puissent vous soutenir lors du processus de gestion de traductions, que vous pourriez découvrir sur notre page Internet.
    Vous pouvez importer depuis multiples types de fichiers de localisation (traduction) (pot, po, xls, xlsx, strings, xml, resx, properties) ou se servir directement de notre REST API.
    N’hésitez pas de l’essayer et/ou le proposer aux développeurs ou, en général, a ceux qui en seraient intéressés.

  10. oliviercardoen

    Salut Guillaume, tu viens de me sauver la vie. Grâce à ton tuto, j’ai mieux compris le fonctionnement de PoEdit et j’ai capté que si ma traduction foirait, c’était à cause de ces P***IN de « é » :)

    Merci les é et merci à toi.

  11. Aurélie

    Bonjour à tous et merci pour ce tuto,

    Je traduit pour la première fois un site, et là je coince…
    Mon code est modifié, mon fichier POEdit créé et mes chaînes traduites (de l’anglais au Français), mais lorsque je me rend sur mes pages /fr/ (URL créée par Qtranslate pour ma traduction de contenu) mon thème n’est pas traduit…
    Ai-je loupé une étape ?
    Ai-je mal chargé mon dictionnaire dans functions.php ?

    Merci d’avane pour votre aide 😉

    • Gui
  12. francis fozeu

    Merci pour ce tuto. Il marche à 100%!!

  13. Phonelife

    Merci j’ai pu traduire mon thème jarida grâce à votre aide

  14. Joel

    Bonjour, J’ai suivi vos indications pour traduire un plugin qui ne comportait pas de fichier Po, Pot et Mo. Néanmoins, une fois la traduction mise en ligne, j’ai constaté que le site ne la prenait pas en compte. Le plugin demeure en français …

    Avez vous une astuce ou solution pour ce type de cas ?

    Merci beaucoup,
    Joel

  15. michael kors handbags

    Wboundary’s utility, i had produced read your writes on a regular basis: ) my personal writing style is witty, stall doing wsun hat you’re acting!

  16. Ampisoa

    Bonjour,

    Très bon tuto merci. Toutefois, si je veux donner à mon user le choix de langues, je fais comment stp ?!

    Merci d’avance pour ton aide.

  17. show domain

    Bonjour
    je tenais à vous dire que grâce à votre aide cela m a beaucoup aidez , je vous remercies , car ce blog est très bien faits …

  18. Papoutsiaforematakaiergasia.Wordpress.Com

    Ido not even know how I ended up here, but I thought this post was
    great. I don’t know who you are buut certainly you are
    going tto a famous blogger iif you aren’t
    already 😉 Cheers!

    my page εργασια στο εξωτερικο; Papoutsiaforematakaiergasia.Wordpress.Com,

Laisser une réponse à Samuel


Post shadow