Traduction d’un site WordPress

La très grande majorité des thèmes WordPress sont livrés en anglais. Cependant, s'ils ont été bien conçus, il est possible de les traduire dans la langue de notre choix. Les traductions sont même parfois livrées avec le thème. Il suffit alors de bien configurer le tout pour avoir notre site en français.

Dans d'autres cas, les thèmes ont été mal conçus et certains mots ou expressions demeurent en anglais. Ou pire : rien n'a été mis en place pour permettre la traduction du thème.

Dans tous les cas, avec les techniques qui suivent, vous pourrez obtenir un site WordPress dans la langue de votre choix.

▼Publicité

i18n et l10n (internationalisation et localisation)

Si vous effectuez de la recherche au sujet de la traduction d'applications Web ou traditionnelles, toutes technique de programmation confondues, vous rencontrerez certainement les abréviations i18n et l10n (notez que c'est la lettre i dans i18n et la lettre l dans l10n).

Que signifient ces abréviations ?

  • i18n signifie internationalisation. Il s'agit des techniques à mettre en place pour assurer que le texte, les images, les symboles monétaires, voire même les couleurs puissent être adaptés à différentes langues et cultures.
  • l10n signifie localisation. On retrouve parfois également le terme régionalisation. Il s'agit de l'adaptation qui a été faite pour une langue et une culture précise.

Donc, une fois qu'une application est internationalisée, il est possible de la localiser pour le français au Canada, pour l'allemand en Allemagne, etc. L'internationalisation est faite une seule fois, lors du développement de l'application. La localisation doit être réalisée pour chacune des langues et cultures supportées par l'application.

Pourquoi 10 et 18 ? Parce qu'il y a 10 lettres entre le l et le n de localisation et 18 entre le i et le n de internationalisation. On remplace donc tout l'intérieur du mot par le nombre de lettres qu'il contient. Ingénieux !

Site multilingue

Par défaut, un site WordPress, même s'il est prêt pour la traduction, ne pourra pas être multilingue. Le site sera publié soit en anglais, soit en français, soit en allemand ou toute autre langue, mais ne pourra pas passer d'une langue à l'autre par un simple clic.

Tout espoir n'est pas perdu : il existe des thèmes et des extensions permettant de développer un site WordPress multilingue.

Différents principes

Les thèmes ou extensions pour sites multilingues utilisent différents principes :

  • Certains ajoutent des champs dans la base de données et les informations des deux langues doivent y être entrées. Ainsi, lorsqu'on crée un article, on aura une zone d'édition pour chaque langue.

    La populaire extension WPML (payante) utilise ce principe. qTranslate l'utilise également. Attention : qTranslate n'a pas été mise à jour depuis plusieurs mois. L'illustration suivante est tirée de la défunte extension Stella.

    Traduction d'un article

  • Certains demandent l'installation de deux sites WordPress distincts. Chacun aura donc ses propres informations dans sa langue. Le thème ou l'extension se chargera de faire le lien entre un article ou une page sur le site français et l'article ou la page correspondante dans la version anglaise.

    Les extensions Bilingual Linker (illustration) et Multisite Language Switcher fonctionnent sous ce principe.

    Lien entre les article

  • Certains sont un hybride entre les deux : un seul site WordPress est installé et pour certaines informations, on aura une case à remplir pour chaque langue. Mais pour les pages et les articles, il faut créer une version pour chaque langue et le thème ou l'extension se chargera de faire le lien entre les deux.

    L'extension Polylang fonctionne sous ce principe :

    Chaînes traduites

    Articles traduits

  • Enfin, certains autres utilisent un service de traduction pour effectuer la traduction lors de l'affichage plutôt que de stocker les chaînes dans différentes langues. Il va sans dire que ce principe offre une traduction de moindre qualité...

Mécanisme pour passer d'une langue à l'autre

Généralement, le passage d'une langue à l'autre se fera à l'aide d'un widget que le thème ou l'extension met à votre disposition. Dans le panneau de configuration, vous pouvez faire glisser ce widget à un des endroits prévus par le thème et votre site sera désormais agrémenté d'une nouvelle zone permettant aux internautes de passer d'une langue à l'autre.

Notez qu'il est déconseillé d'utiliser seulement un drapeau pour indiquer les langues disponibles.

En effet, les drapeaux identifient des pays et non des langues. Quel drapeau utiliserez-vous pour le français au Canada ? Celui du Québec ? Les francophones albertains pourraient être froissés...

Il est donc préférable d'utiliser simplement le nom de la langue.

Ex : Icônes pour langue Icônes pour langue
  MySQL Carnaval de Québec

Dans le cas où le pays est également important (ex : pour ajuster la devise), on ajoutera le drapeau du pays en plus de la langue.

Ex : Icônes pour langue Icônes pour langue
  Dell eBay

Traduction des articles et des pages

Pour réaliser la traduction des articles et des pages, plusieurs solutions s'offrent à vous :

  • La traduction manuelle : donne un résultat professionnel (à condition d'être réalisée par un traducteur compétent) mais les coûts sont très élevés. Il est possible de faire appel à des services de traduction comme Gengo ou Smartling.
  • La traduction à l'aide d'outils spécialisés : donne des résultats parfois mitigés mais l'économie sera non négligeable.
  • Utiliser un outils de traduction spécialisé et effectuer une vérification manuelle sur un échantillon du texte traduit : voilà un compromis intéressant.

Outils de traduction automatisée

Voici quelques outils permettant d'automatiser la traduction. Attention : ces outils n'ont pas été testés alors à vous de valider leur efficacité.

Thème prêt pour la traduction

La localisation d'un site WordPress peut être une tâche assez simple si le thème utilisé a été conçu en conséquence, autrement dit s'il a été correctement internationalisé. Et même pour les thèmes qui n'ont pas prévu la possibilité de traduction, il est possible d'y arriver.

Débutons par le scénario le plus facile : le thème a été conçu pour être localisé.

Fichiers .po ou .pot

Les thèmes conçus pour être localisés contiennent généralement un ou plusieurs fichiers de localisation. Il s'agit de fichiers portant l'extension .po (Portable Object) ou .pot (Portable Object Template) situés dans le dossier :

  • www\votresite\wp-content\themes\votretheme\languages

    Ex : Fichiers de traduction WordPress

    ou : Fichier de traduction .pot pour WordPress

    Notez que certains thèmes peuvent avoir placé les fichiers .po ou .pot à un autre endroit. À vous de « fouiller » pour les trouver...

  • Certains éléments peuvent également être lus dans une des  tables de localisation globale du site (et non du thème), qui se trouvent généralement dans le dossier :www\votresite\wp-content\languages

    Ex : Fichiers de traduction globaux

Les fichiers .po et .pot ne sont pas propres à WordPress. Il s'agit d'une technique de localisation utilisée par de nombreux sites en PHP.

Ces fichiers contiennent une série de clés auxquelles correspondent une chaîne dans la langue originale (généralement anglais) et que vous pouvez traduire dans la langue désirée. Pour éditer un fichier .po, vous pouvez utiliser l'utilitaire gratuit Poedit.

Voici un exemple du contenu d'un tel fichier, ouvert dans Poedit.

Poedit

Pour localiser un thème utilisant un fichier .po :

  • Recherchez la présence du fichier fr_CA.po. S'il n'existe pas  :
    • Si un autre fichier .po existe, copiez-le sous le nom fr_CA.po puis ouvrez-le. Il est inutile de renommer le fichier .mo associé car il s'agit d'un fichier qui devra être recompilé. Important : le nom du fichier doit commencer par la langue, en lettres minuscules, suivi d'un souligné puis du code de culture, en lettres majuscules. Pour la langue française au Canada, on utilisera fr_CA. Si le fichier original comporte d'autres caractères avant la langue, il faut les laisser intacts. Dans le cas où le nom du fichier ne contient pas de caractères représentant la langue et la culture, nommez-le directement fr_CA.

      Ex : fr_FR.po deviendra fr_CA.po

      Ex : admin-fr_FR.po deviendra admin-fr_CA.po

      Ex : machinchouette.po deviendra fr_CA.po

    • S'il n'y a qu'un seul fichier .pot, ouvrez-le dans Poedit puis faites Fichier / Enregistrer sous et donnez-lui le nom fr_CA.po.
    • Vous ne pouvez pas prendre le fichier .po d'un autre thème... les chaînes qui y sont présentes ne seront pas les bonnes. Si le thème ne présente pas de fichier .po ni de fichier .pot, vous devrez soit l'internationaliser vous même, soit choisir un autre thème.
  • Double-cliquez sur le fichier fr_CA.po afin de l'ouvrir dans poedit.
  • Pour chaque clé présente dans la liste, vous devez :
    • Cliquer sur la clé. La chaîne correspondant à la clé apparaît au bas de la page.
    • Sous la chaîne originale, inscrire la traduction.
  • Votre fichier .po doit être compilé en fichier .mo pour que votre site puisse le lire. Allez dans le menu Fichier / Préférences / Onglet Éditeur et cochez « Compiler automatiquement les fichiers .mo lors de la sauvegarde ».
  • Enregistrez vos modifications.
  • Assurez-vous que dans votre fichier wp-config.php, la langue utilisée corresponde au nom du fichier de localisation.

    Fichier wp-config.php, pour WordPress avant 4.0 (PHP)

    define( 'WPLANG', 'fr_CA' );

Mise à jour

Notez qu'à partir de WordPress 4.0, le code du langage est enregistré dans la base de données et peut être modifié dans le tableau de bord.

Consultez l'article « Quel code de localisation est utilisé dans mon site WordPress? » pour plus d'information.

Traduction directement dans le tableau de bord

Certains thèmes privilégient la traduction directement dans le tableau de bord. Si c'est le cas de votre thème, vous n'avez qu'à remplir les zones prévues pour la traduction et le tour est joué !

Ainsi, le fait de ne pas fournir de fichier .po ou .pot ne signifie pas nécessairement que le thème n'est pas traduisible.

Ex : Éléments traduisibles dans le tableau de bord WordPress

Thème non prêt pour la traduction

Il est possible de traduire un thème qui n'utilise pas de fichier .po, mais c'est plus complexe.

Deux options s'offrent à vous :

  • Simplement traduire les chaînes directement dans le code (à ne faire qu'en cas d'extrême urgence....
  • Marquer chaque chaîne présente dans le code pour qu'elle soit traduisible à l'aide d'un fichier .po, puis écrire la traduction dans le fichier .po.

Dans tous les cas, il est important de bien noter les modifications apportées aux différents fichiers. Ceci facilitera grandement votre travail lors d'une éventuelle mise à jour du thème ou d'une extension.

PHP

<?php // modifié par Annie Gagnon le 21 février 2013 : Powered by n'était pas traduit ?>

<?php // *** ligne originale mise en commentaire : *** ?>

<?php //<div class="right">?><?php //if( themify_get( 'setting-footer_text_right' ) != "" ) { echo themify_get( 'setting-footer_text_right' ); } else { echo apply_filters( 'themify_footer_text_two', 'Powered by <a href="http://wordpress.org">WordPress</a> &bull; <a href="http://themify.me">Themify WordPress Themes</a>' ); } ?><?php //</div> ?>

<?php // *** ligne modifiée : *** ?>

<div class="right"><?php if( themify_get( 'setting-footer_text_right' ) != "" ) { echo themify_get( 'setting-footer_text_right' ); } else { echo apply_filters( 'themify_footer_text_two', 'Propulsé par <a href="http://wordpress.org">WordPress</a> &bull; <a href="http://themify.me">Themify WordPress Themes</a>' ); } ?></div>

<?php // fin des modifications ?>

Si vous souhaitez marquer les chaînes pour les traduire dans un fichier .po, sachez que la traduction d'un site WordPress repose sur les librairies gettext. Voici, en gros, le fonctionnement de cette librairie :

  • Dans les fichiers PHP, chaque chaîne de caractère à afficher est marquée d'une façon particulière (utilisation des fonctions __() et _e()). On appelle cette étape l'internationalisation du code. 
  • Un fichier de traduction est généré (fichier .po). 
  • À l'aide d'un logiciel spécialisé (ex : Poedit), le développeur inscrit dans ce fichier la traduction pour chacune des chaînes.
  • Avant d'afficher une page Web, PHP recherche dans le fichier de traduction chacune des chaînes marquées. Si la chaîne est présente, sa traduction est affichée. Sinon, la chaîne originale est affichée telle quelle.

Voici les étapes à suivre pour internationaliser puis traduire votre code WordPress :

  • À chaque fois qu'une chaîne de caractère à afficher est codée en dur, vous devez l'entourer de __() ou de _e(). La différence entre les deux, c'est simplement que _e(); se charge d'afficher immédiatement la chaîne. Donc, _e(); est l'équivalent de echo __();.

    Pour chacune de ces fonctions, les paramètres sont les mêmes. Le premier est la chaîne à traduire. Le second paramètre est le domaine de traduction, c'est-à-dire une chaîne de caractères qui identifie l'endroit où la traduction doit être retrouvée. Il s'agit généralement d'un mot spécifique pour le thème ou l'extension. 

    Il est également possible d'utiliser le domaine de traduction « default ». Ce domaine correspond à la traduction effectuée dans les fichiers de base de WordPress, que l'on retrouve dans wp-content/languages. On évitera ainsi d'avoir à traduire des expressions de base comme « Read more... » ou « Leave a comment ».

    • Si le texte doit être affiché directement, (c'est le cas notamment quand il est en dehors des balises <?php et ?>), il faut l'entourer de la fonction _e(), qui se chargera d'en faire un echo.

      Ex :

      PHP

      <h3>Tags</h3>

      deviendra :

      PHP

      <h3><?php _e( 'Tags', 'domainedetraduction' ); ?></h3>

    • Si le texte n'a pas besoin d'être affiché directement, comme par exemple s'il s'agit d'un paramètre à passer à une fonction, il faut l'entourer de la fonction __().

      Ex :

      PHP

      <?php previous_comments_link( 'Older comments' ); ?>

      deviendra :

      PHP

      <?php previous_comments_link( __( 'Older comments', 'domainedetraduction' ) ); ?>

  • Vous devez ensuite dire à WordPress que le thème est traduisible. Ceci se fait à l'aide d'un appel à la fonction load_theme_textdomain(). Cet appel sera placé dans le fichier functions.php.

    Ex :

    PHP

    load_theme_textdomain( 'domainedetraduction', TEMPLATEPATH . '/languages' );

  • Vous devrez finalement effectuer la traduction en créant le fichier .po et sa compilation .mo (voir http://wpchannel.com/traduction-po-mo-wordpress-i18n/). Ces fichiers devront être placés dans le dossier languages du thème.

Mise à jour

Pour savoir comment générer le fichier .po, consultez l'article « Génération d’un fichier de localisation (.po) ».

Traduire une expression qui refuse d'être traduite

Voici un scénario que vous risquez de rencontrer : vous avez entièrement traduit vos fichiers .po (celui présent dans wp-content/themes/montheme/languages et celui ou ceux présents dans wp-content/languages) et il reste tout de même des expressions en anglais.

Cette liste d'étapes vous aidera à trouver l'endroit exact où les modifications doivent être apportées :

  • Vérifiez d'abord si l'expression à traduire ne fait pas partie d'une image. Si c'est le cas, la seule façon de la traduire sera de retoucher l'image.
  • À l'aide d'un logiciel spécialisé de recherche comme Agent Ransack (la recherche Windows ne trouve parfois pas tous les résultats), recherchez les fichiers contenant l'expression à traduire :

    Attention : une expression du genre « Logged in as Annie Gagnon. Log out? » ne sera probablement pas écrite telle quelle. Selon le thème utilisé, elle pourrait être générée par du code ressemblant à ceci : 

    PHP

    $custom_comment_form = array( ...

       ...

       'logged_in_as' => '<p class="logged-in-as">' . sprintf( __( 'Logged in as <a href="%1$s">%2$s</a>. <a href="%3$s">Log out?</a>' )...,

       ...

    );

    ou

    PHP

    <?php _e( 'Logged in as', 'nomdutheme' ); ?>

    ...

    <?php _e( 'Log out', 'nomdutheme' ); ?>

    ou

    PHP

    <p>Logged in as <a href="<?php echo get_option( 'siteurl' ); ?>/wp-admin/profile.php">

    <?php echo $user_identity; ?></a>. 

    <a href="<?php echo wp_logout_url( get_permalink() ); ?>" title="Log out of this account">Log out &raquo;</a></p>

    Au besoin, faites une recherche sur une partie de l'expression, comme par exemple « Logged in ».

    • dans le dossier du thème;
    • dans le dossier du plugin;
    • dans l'API de WordPress (racine du site Web, dossiers wp-include et wp-admin).
  • Pour vous assurer que le texte que vous avez trouvé est bel et bien celui qui affiche l'expression à traduire, faites une « énormité ». Vous pourriez par exemple ajouter « sss » à la fin de l'expression. Si le texte modifié apparaît sur votre site, c'est que vous avez trouvé le bon endroit. Sinon, poursuivez vos recherches.
  • Si l'expression à traduire est dans un fichiers .php, il est fort à parier qu'elle n'est pas entourée de _e() ou __(). Ajoutez l'une ou l'autre de ces fonctions selon le contexte. Vous devrez ensuite :
    • idéalement, ajouter cette expression dans le fichier .po (voir la fiche « Ajouter une chaîne dans un fichier .po existant » ou http://wpchannel.com/traduction-po-mo-wordpress-i18n/);

      ou

    • de façon temporaire, et si vous utilisez une extension qui le permet (ex : qTranslate), il est également possible de fournir la traduction des différentes langues directement dans le code. Ceci ne doit cependant pas être une solution permanente car elle oblige la modification du code si on a besoin d'une nouvelle langue qui n'était pas prévue au départ.

      Ex :

      PHP avec l'extension qTranslate

      <?php _e("<!--:en-->English text<!--:--><!--:fr-->Texte en français<!--:-->"); ?>

  • Si vous n'avez pas trouvé l'expression dans les fichiers, il se pourrait qu'elle soit lue dans la base de données. Peut-être s'agit-il du titre d'un article ? D'une catégorie d'articles ? D'une expression quelconque qu'une extension stocke dans la BD ? Pour rechercher efficacement dans la BD, vous pouvez :
    • Exporter votre BD (créer un script SQL à l'aide de phpMyAdmin)
    • Rechercher dans le script
    • Conserver le script précieusement : si vous effectuez une modification dans la BD et que les résultats ne sont pas ceux souhaités, le script vous aidera à remettre en place les données originales.
  • Une expression stockée dans la BD est difficilement internationalisable... vous devrez donc changer le texte directement dans la BD et c'est ce texte qui sera affiché peu importe la localisation spécifiée dans le fichier wp-config.php. Notez que vous pourrez presque toujours passer par le tableau de bord WordPress pour modifier les expressions stockées dans la BD donc inutile d'effectuer les manipulations directement dans phpMyAdmin.

Pour plus d'information

« Internationalization vs. Localization: What's the Difference? ». CMS Wire. http://www.cmswire.com/cms/customer-experience/internationalization-vs-localization-whats-the-difference-012790.php

« Internationalisation et localisation en ASP.NET ». Vincent C. http://www.vincentc.fr/item/internationalisation-des-applications-aspnet.html

« Internationalize your WordPress plugin ». Webdesigner Depot. http://www.webdesignerdepot.com/2012/10/internationalize-your-wordpress-plugin/

« PHP 5.3 : intl : Internationalisation et Localisation (partie 1) ». Pascal Martin. http://blog.pascal-martin.fr/post/php-5.3-intl-1-internationalisation-localisation

« Tâches courantes avec CakePHP - Internationalisation et Localisation ». Cake PHP. http://book.cakephp.org/1.3/fr/The-Manual/Common-Tasks-With-CakePHP/Internationalization-Localization.html

«  How to Build Multilingual WordPress Sites ». OS Training. http://www.ostraining.com/blog/wordpress/multi-lingual-wordpress/

« Build a multilingual site with WordPress ». .NET magazine. http://www.netmagazine.com/tutorials/build-multilingual-site-wordpress

« 10 WordPress Themes for Multilingual Websites ». WP Mayor. http://www.wpmayor.com/themes/10-wordpress-themes-for-multilingual-websites/

« 9 Useful WordPress Language Plugins ». Tripware magazine. http://www.tripwiremagazine.com/2012/10/wordpress-language-plugins.html

« CMS Translations ». I can localize. http://www.icanlocalize.com/site/about-us/cms-translations/

« Multilingual WordPress ». WordPress. http://codex.wordpress.org/Multilingual_WordPress

« Comment traduire son thème WordPress une bonne fois pour toutes ! ». Wp Themes Pro. http://wp-themes-pro.com/traduction-theme-wordpress/

« How to Translate With GetText PO and POT Files ». I can localize. http://www.icanlocalize.com/site/tutorials/how-to-translate-with-gettext-po-and-pot-files/

« Translating Themes ». Themify. http://themify.me/docs/translating-themes

« WordPress – Poedit: Translation Secrets ». CSS Igniter. http://www.cssigniter.com/ignite/wordpress-poedit-translation-secrets/ 

« Créer un fichier de traduction .po sous WordPress ». WordPress Channel. http://wpchannel.com/traduction-po-mo-wordpress-i18n/

« Internationalisation d’un thème WordPress ». Le blog du développeur. http://leblogdudeveloppeur.fr/internationalisation-dun-theme-wordpress/

« I18n for WordPress Developers ». Codex WordPress. http://codex.wordpress.org/I18n_for_WordPress_Developers

« How to localize WordPress themes and plugins with GetText ». I can localize. http://blog-en.icanlocalize.com/installing-wordpress-for-multiple-language-blogs/how-to-localize-wordpress-themes-and-plugins-with-gettext/

« Aide-mémoire sur l'internationalisation et WordPress ». Screenfeed. http://www.screenfeed.fr/blog/aide-memoire-internationalisation-wordpress-01150/ 

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories

2 commentaires