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

27 commentaires

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

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

  3. ferrytripsinfo.wordpress.com

    Excellent website. Lots of useful info here.
    I amm sending it to some budies ans also sharing in delicious.
    And naturally, thanks on your effort!

    my blog: Φθηνά ferries – ferrytripsinfo.wordpress.com,

  4. Toko Bunga Jakarta Barat,

    A maypole was erected, usualply a tall birch pole, and decorrated
    with plenty of flowers. These are a fantastic addition out
    of the store a lot more high competition. Imagine the give ann impression of a florist; the environment thik having a
    mixture of blooms, buds, and blossoms; it can be unique, fresh, green aroma is unlike any other botanical scent.

  5. toko bunga di samarinda,

    Once again use to show wreaths and swags or as a possible ornamental backdrop.
    It means their limited dollars is certain to get spent in your florist in the event the need arises, versus
    a shop across the street or supermarket. Other factors which will impact the all inclusive
    costs for renting or setting up your organization in the given location includes how big is the
    organization space, location, and the option of potential buyers.

1 2

Laisser une réponse à summ3r


Post shadow