• 15 hours
  • Easy

Free online content available in this course.

Paperback available in this course

Certificate of achievement available at the end this course

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 3/13/18

L’internationalisation

Log in or subscribe for free to enjoy all this course has to offer!

Lorsqu'un site peut être visible de tous ou que l'on développe des fonctionnalités (thèmes ou plugins) pouvant être réutilisées par n'importe qui dans le monde, il est essentiel de penser à la traduction des textes qui seront affichés sur l'écran des utilisateurs. Pour cela, il faut préparer la traduction des chaînes de caractères en utilisant des fonctions de traduction, puis réaliser les traductions de vos textes dans les langues que vous souhaitez proposer.

Les fonctions de traduction

Traduire un texte

La traduction d’un texte passe toujours par une fonction de traduction dont le travail est de trouver la correspondance entre une chaîne de caractères dans une langue donnée (généralement l’anglais) et la chaîne traduite dans une autre langue. La chaîne originale est appelée clé de traduction. C’est elle qui sera écrite dans le code PHP et que l’on traduira vers le langage désiré dans des fichiers annexes contenant l’ensemble des traductions possibles.

Comment WordPress détermine-t-il la langue de l’utilisateur ?

La langue dans laquelle traduire le texte est déterminée par la locale de l’application. C'est un code permettant de déterminer le pays et la région parlant la langue choisie. Par exemple, la locale de la France est fr_FR, celle des États-Unis est us_EN. La locale de votre application WordPress est inscrite dans le fichier wp-config.php, lorsque la constante WPLANG est définie.

<?php
define('WPLANG', 'fr_FR');

Pour traduire une clé donnée, WordPress utilise une fonction nommée __() (deux underscores successifs) qui prend comme paramètre la clé de traduction. Sa valeur de retour est le texte traduit dans la langue souhaitée. Il est aussi possible d’utiliser la fonction _e(), qui fonctionne exactement de la même façon que la précédente, mais qui utilise un echo pour afficher directement le résultat de la traduction, au lieu de la renvoyer à l’aide d’un return. Elle est donc très adaptée à une utilisation dans les fichiers de thèmes.

En reprenant le fichier footer.php que nous avions modifié plus tôt dans notre thème, nous pouvons placer le texte (en anglais maintenant) spécifique à notre thème dans une fonction de traduction.

<?php _e('Zero theme, copy is forbidden.'); ?>

Le texte n’est pas traduit quand j’affiche la page, c’est normal ?

C’est parfaitement normal : nous n'avons indiqué nulle part comment traduire le texte. Dans le cas où la fonction de traduction ne trouve pas de correspondance entre la clé de traduction et la locale demandée, elle renvoie directement la clé. Ainsi, si l’on demande la traduction d’une clé qui n’a pas été intégrée dans les fichiers de traductions, aucune modification ne sera effectuée. Il faudra donc absolument rajouter la correspondance dans la langue choisie !

Le domaine de traduction

Les fonctions de traduction __() et _e() prennent en plus de la clé un second paramètre optionnel correspondant au domaine de traduction. Le domaine de traduction permet de spécifier plus précisément l’origine de la traduction que vous utilisez, notamment si celle-ci est spécifique à un thème ou un plugin donné. Dans ce cas, vous pourrez placer toutes les traductions du domaine dans un fichier unique, sans avoir à modifier d’autres fichiers de traductions.

Par exemple, dans le thème TwentyThirteen, le texte "Laisser un commentaire" visible sous les articles est déclaré ainsi :

<?php
__( 'Leave a comment', 'twentythirteen' )

Pour être utilisé, le domaine doit auparavant être déclaré, par exemple dans le fichier functions.php de votre thème, à l’aide de la fonction load_theme_textdomain(). Cette fonction attend de recevoir le domaine à déclarer et le chemin vers les fichiers de traduction pour ce domaine. Par convention, le chemin choisi est un dossier languages dans le dossier du thème. Le thème TwentytThirteen procède donc lui aussi de cette manière :

<?php
load_theme_textdomain( 'twentythirteen', get_template_directory() . '/languages' );

Ajouter des traductions

Pour ajouter de nouvelles traductions, nous devons générer les fichiers qui contiendront les associations entre les clés de traduction et les textes traduits dans chaque langue. Les fichiers dont WordPress a besoin sont des fichiers MO (Machine Object) écrits en langage binaire et donc illisibles pour nous. Heureusement, nous pouvons écrire les fichiers de traduction dans un format lisible puis les convertir en fichiers MO pour WordPress.

Utiliser Poedit

Nous allons utiliser le logiciel Poedit pour gérer les traductions de notre thème car il a l’avantage d’être disponible sous Windows, Mac et Linux et il est relativement simple à l’utilisation. Vous pouvez le télécharger sur le site officiel.

Une fois téléchargé et installé, lancez Poedit. Vous devez, comme sur la figure suivante, arriver sur une interface très minimaliste.

L'accueil de Poedit
L'accueil de Poedit

La première chose à faire est de créer un « Catalogue », c’est ce qui correspondra à un domaine dans WordPress. Ouvrez le menu « Fichier > Nouveau catalogue », puis ouvrez l’onglet « Chemins des sources » dans la fenêtre qui s’ouvre. Poedit est capable de lire les fichiers PHP à la recherche de fonctions de traduction. Il vous propose donc d’indiquer le chemin de vos fichiers PHP pour les lire à la recherche de vos clés de traduction. Cliquez donc sur le bouton « Nouvel élément », puis écrivez le chemin complet vers votre thème dans la zone de texte (voir la figure suivante).

Le chemin vers vos fichiers sources
Le chemin vers vos fichiers sources

Allez ensuite dans « Mots-clés source » et ajoutez le nom des deux fonctions permettant d’effectuer des traductions dans WordPress : _e (underscore puis « e ») et __ (deux underscores). Cela permet à Poedit de savoir quelle fonction chercher dans le code pour récupérer les clés de traduction (voir la figure suivante).

Les noms des fonctions de traductions
Les noms des fonctions de traductions

Choisissez ensuite « Accepter » et vous devriez voir la liste des textes traduisibles dans le thème choisi (voir la figure suivante).

Affichage de la liste des clés de traduction
Affichage de la liste des clés de traduction

Il ne vous reste plus qu’à sélectionner la ligne à traduire puis à écrire la traduction de chaque clé dans la case « Traduction » en bas. Une fois terminé, allez dans « Fichier > Enregistrer sous… » pour sauvegarder les traductions au format PO ainsi qu’une copie au format MO.

Utiliser les traductions dans un thème

Pour que le fichier de traductions soit utilisé dans le thème, nous devons placer le fichier MO dans le dossier wp-content/themes/zero/languages. Le nom du fichier MO doit être de la forme locale.mo, par exemple fr_FR.mo.

Il ne manque plus que la déclaration du domaine dans le fichier functions.php, et l’appel de celui-ci dans les fonctions de traduction.

<?php
load_theme_textdomain( 'zero', get_stylesheet_directory() . '/languages' );
<?php _e('Zero theme, copy is forbidden.', 'zero'); ?>
  • La traduction est traitée par les fonctions __() et _e().

  • Les valeurs d'une clé de traduction dans une langue donnée doivent être écrites dans des fichiers PO compilés au format MO.

  • Le domaine de traduction permet de regrouper les traductions, notamment pour les thèmes et les plugins.

Example of certificate of achievement
Example of certificate of achievement