Il n’est pas rare de fabriquer un site destiné à plusieurs nationalités. En ce qui concerne WordPress, il entre parfaitement dans la norme et la communauté propose de nombreux plugins destinés à traduire vos articles, pages et autres pour des langues que vous choisissez. Mais lorsque vous développez sur WordPress, que vous personnalisez vos plugins et vos thèmes, ces plugins ne vous sont d’aucun secours. WordPress dispose de fonctions PHP, permettant d’obtenir la traduction de telle ou telle chaîne de caractère, mais comment renseigner cette traduction ?
Une des solutions les plus simples que j’ai trouvées est CodeStyling Localization. Ce plugin scanne et détecte les langues utilisées pour tous vos thèmes et tous vos plugins, même vos plugins créés de toutes pièces, et permet de les modifier et de créer de nouveaux fichiers de traduction de langue. Ainsi, lorsque vous ajoutez des chaînes de caractères dans le code, vous pourrez les traduire directement par ce plugin, sans logiciel annexe.
Première étape : bien formater son code
Les traductions WordPress passent par deux principales fonctions :
__('string-to-translate', 'domain') _e('string-to-translate', 'domain')
La première renvoie la valeur traduite de la chaîne, la seconde l’affiche par une commande echo. ‘domain’ correspond au textdomain que vous utilisez, autrement dit l’ensemble de vos fichiers de traduction.
Avant de vous lancer dans le code, vous devez d’abord définir votre textdomain et y enregistrer vos fichiers de traduction.
Dans un premier temps, créez un répertoire languages à la racine de votre thème ou de votre plugin.
Pour un plugin
Dans votre fichier de fonctions principal, écrivez la fonction suivante, en remplaçant ‘my-plugin’ par le nom de votre plugin :
function setupMyPluginTranslation() { load_plugin_textdomain('my-plugin', false, dirname(plugin_basename(__FILE__)) . '/languages/'); } add_action('plugins_loaded', 'setupMyPluginTranslation');
Pour un thème
Si vous avez copié un thème existant (recommandé), ouvrez le fichier functions.php, à la racine du thème, et retrouvez l’instruction load_theme_textdomain. Modifiez-là de la façon suivante, en remplaçant ‘my-theme’ par le nom de votre thème :
load_theme_textdomain('my-theme', get_template_directory() . '/languages');
Si vous avez créé votre thème de toutes pièces, écrivez la fonction suivante dans votre fichier de fonctions principal :
function setupMyThemeTranslation() { load_theme_textdomain('my-theme', get_template_directory() . '/languages'); } add_action('after_setup_theme', 'setupMyThemeTranslation');
Vous avez désormais un textdomain enregistré, portant le nom de votre plugin ou votre thème, et qui contiendra l’intégralité des fichiers de traduction que vous ajouterez dans votre répertoire languages.
Vous pouvez à présent développer en toute tranquillité, pensez seulement à bien indiquer le textdomain dans vos __() et _e().
Seconde étape : créer les fichiers de traduction
Votre code est terminé, il vous reste néanmoins à traduire vos nouvelles chaines intégrées. C’est le moment d’utiliser CodeStyling Localization.
Une fois le plugin installé et activé, rendez-vous dans Outils->Localisation (Tools->Localization si vous êtes en anglais) dans le back office.
Vous pourrez constater que tous vos thèmes et plugins sont listés, ainsi que l’intégralité des langues que chacun d’eux prend en charge. Le textdomain de chacun est également indiqué.
Commençons par retrouver notre plugin (ou thème). Vous pouvez vous aider des filtres de recherche en haut de la liste.
Votre plugin retrouvé, vous aurez la liste des langues qu’il prend en charge. Dans l’exemple ci-dessus, nous n’en avons aucun, nous allons donc le créer.
Cliquez sur Ajouter une nouvelle langue, puis choisissez la langue que vous désirez dans la liste qui s’affichera, et cliquez sur Créer le fichier .po.
Vous pouvez voir apparaître la langue ajoutée.
Si vous n’aviez encore aucun fichier de langue, comme dans le cas présent, le plugin le crée systématiquement à la racine de votre plugin.
Déplacez le fichier .po qui vient d’être créé dans languages, puis rafraîchissez la page de CodeStyling. Il voit toujours votre fichier de langue, mais créera tous les prochains dans votre répertoire languages.
Vous pouvez constater, dans la colonne Permissions, qu’il y a 2 icônes : .po et .mo. C’est le .mo qui sera le fichier de traduction final, nous le générerons après avoir fait nos traductions. Pour l’instant, notre fichier .po est vide.
Cliquez sur Rescanner pour lancer un scan de votre plugin afin que soient trouvées les chaînes à traduire.
Dans la nouvelle fenêtre, cliquez sur Scanner maintenant, puis sur Terminé une fois le scan achevé. Vous reviendrez à la page précédente.
A présent, cliquez sur Modifier pour entamer la traduction.
Ici, c’est assez simple, cliquez sur Modifier en face de la ligne que vous voulez traduire, et inscrivez votre traduction dans l’encart du bas dans la fenêtre qui apparaîtra, avant de valider.
Vous avez quelques filtres en haut de la liste, entre autres pratiques pour retrouver les lignes qui ne sont pas traduites. Vous pouvez également effectuer des recherches, pour les fichiers comportant beaucoup de lignes, soit sur le texte original, soit sur la traduction.
Une fois votre traduction satisfaisante, cliquez sur générer le fichier .mo
Félicitations, votre traduction est désormais fonctionnelle !
Mettre à jour les traductions
Si vous ajoutez des chaînes à traduire dans votre code, prenez bien garde à toujours noter le textdomain en second paramètre de vos fonctions traductrices.
__('chaine_a_traduire', 'mon-textdomain');
Lorsque vous les avez toutes écrites, dans l’interface du plugin, cliquez sur Rescanner, et suivez le même processus que lorsque nous avons créé le fichier de langue : scan, modifier, ajouter les traductions, et générer le fichier .mo (important, sinon ça ne fonctionnera pas).
À vous de jouer !
Un autre aspect intéressant de ce plugin est que les fichiers de traduction qu’il crée sont définitifs. Aussi, si vous ne voulez pas laisser de plugin inutile à votre client, vous pouvez le supprimer sans crainte de voir votre travail disparaître.
Vous avez désormais les outils nécessaires en main pour traduire vos sites wordpress, vous pouvez développer vos sites multilingues la conscience tranquille ! 😉