Traduire simplement les extensions WordPress

Traduire simplement les extensions WordPress

Si vous utilisez WordPress, vous avez certainement été confronté au problème des traductions. Certaines extensions ne sont pas traduites dans la langue de votre blog (ou votre site), ce qui peut, entre autres, perturber l’expérience utilisateur de vos visiteurs.

Dans quel cas ?

La solution que je vous présente dans cet article est une solution simple, elle évite par exemple la modification de fichiers de traduction PO.

Mais cette simplicité a un coût : elle peut alourdir votre site sous WordPress comme elle s’intercale pendant le rendu de chaque page.

Je vous conseille d’utiliser cette solution seulement si le nombre de termes à traduire est faible, moins d’une vingtaine par exemple.

Autrement, si vous voulez traduire complétement une extension, je vous conseille de le faire par les fichiers de traduction PO, et même de partager votre travail avec les auteurs du plugin. Pour cela vous pouvez utiliser une extension accessible directement dans l’interface d’administration WordPress, ou un outil externe.

Cas pratique : Popular Posts Tabbed Widget for JetPack

Cette extension WordPress permet d’afficher les traditionnels articles populaires, les plus commentés et les plus récents en se basant sur les statistiques fournies par l’outil de JetPack, dans des onglets.

Popular Posts Tabbed Widget for JetPack en action
Popular Posts Tabbed Widget for JetPack en action
Et bien sûr, sinon elle n’aurait aucun rapport avec cet article, cette extension n’est pas traduite en français.

La partie qui nous intéresse ici est la partie visible sur le site. Pas besoin de traduire la page de configuration présente dans l’interface d’administration.
Nous aurons donc trois termes à traduire : les mots ‘Latest’, ‘Popular’ et ‘Comments’ qui se trouvent dans les onglets.

En plus, cette traduction devrait être temporaire : il est indiqué sur le forum de support de l’extension que la traduction française sera incluse dans la prochaine version. Enfin depuis août maintenant…

Pour résumer : peu de termes à traduire, et temporairement en plus, ce plugin est le candidat parfait !

Trouver les termes…

Le plus compliqué ici est de trouver les mots et le domaine à traduire.

Dans le répertoire de l’extension, lancez une recherche (avec votre éditeur de texte favori par exemple) sur l’un des termes à traduire.
Essayons avec ‘Latest’.

Ce terme est trouvé plusieurs fois, mais cette occurrence retient notre attention :

<?php _e( 'Latest', 'pptwj' ); ?>

La fonction _e() est une fonction de traduction de WordPress, qui prend deux paramètres : quel terme traduire et à partir de quel domaine.

Normalement, chaque extension et chaque thème a son propre domaine.

Nous pourrions changer le texte directement, mais il faudrait le faire pour chaque occurrence du terme, et la modification serait écrasée à chaque mise à jour du plugin.

…Et les traduire

Une fois les termes à traduire et leur domaine définis, il suffit d’utiliser un filtre WordPress pour intercaler nos traductions dans celles existantes.

A l’endroit habituel, ajoutez simplement ce code PHP :

/**
 * Traduction temporaire, en attendant la traduction officielle
 */
function translateSomeText($translated_text, $text, $domain) {
  $t = array();
  $t["pptwj"] = array(
    "Latest" => "R&eacute;cents",
    "Popular" => "Populaires",
    "Comments" => "Comment&eacute;s"
  );
  if (isset($t[$domain]) && isset($t[$domain][$text])) $translated_text = $t[$domain][$text];
  return $translated_text;
}
add_filter("gettext", "translateSomeText", 20, 3);

Ici, pour le domaine pptwj, les trois termes ‘Latest’, ‘Popular’ et ‘Comments’ sont traduits.

Les caractères spéciaux, comme les accents, doivent être traduits en HTML (é en &eacute; par exemple).

Pour ajouter d’autres traductions, il suffit d’ajouter un autre tableau dans $t, à l’index correspondant au domaine.
Par exemple, pour traduire des termes dans le domaine ‘mon_domaine’ :

  ...
  $t["mon_domaine"] = array(
    "Hello" => "Bonjour",
    "world" => "monde"
  );
  ...

Le mot de la fin

Cette méthode est simple, mais, j’insiste : utilisez-la avec parcimonie.

Enjoy !

Cet article vous a été utile ? Partage it !

18 réflexions au sujet de « Traduire simplement les extensions WordPress »

  1. Salut David,

    Je te remercie pour le lien vers mon tutoriel, cela fait toujours plaisir 😉
    Il existe en effet de nombreuses manières de traduire une extension ou un thème et je pense qu’utiliser Poedit est la meilleure, cependant son principal inconvénient est de taille, surtout pour les gros fichiers, puisque la traduction doit être faite d’une traite. Il n’est malheureusement pas possible d’en faire une partie, d’enregistrer et d’y revenir plus tard. Le pire étant lorsque vous avez un fichier de 1800 expressions/phrases à traduire et que vous subissez une panne de courant juste avant la fin!

    Amicalement,

    Bruno

    1. Bonjour Bruno,
      Avec plaisir ! 🙂
      Je n’ai pas encore utilisé poedit, je ne connaissais pas cette galère de traduction à faire d’une traite… J’espère que ce sera vite amélioré.
      Amicalement 🙂
      David

  2. C’est un excellent tutoriel pour faire des traductions d’extensions, il faut cependant s’y connaître en wordpress et l’organisation des extensions dans les fichiers sources!
    Je pense que je vais essayer de suivre à la lettre votre tutoriel, je vais aussi me pencher sur la question de Poedit, qui peut être une solution alternative, je ne connaissais pas du tout!
    Merci à vous pour cet article.

    1. Bonjour Franck,
      C’est vrai qu’il faut quelques connaissances en WordPress, mais je pense que c’est accessible, notamment avec un peu de temps.
      David

  3. Bonjour,
    Si vous êtes intéressés de traduire logiciels pour Internet, pour PC, pour mobiles ou tout autre type de logiciels, je vous recommande chaleureusement POEditor.
    Il est un instrument ”l10n » en-ligne 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.
    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: https://poeditor.com/
    Vous pouvez importer depuis multiples types de fichiers de localisation (pot, po, xls, xlsx, strings, xml, resx, properties) ou se servir directement de notre REST API.
    N’hésitez pas de l’essayer et de le proposer aux développeurs ou, en général, a ceux qui en seraient intéressés.

  4. Merci David pour cet article. J’ai fréquemment des soucis de traduction, et ça m’aide pas mal. Pour l’interface général et le thème j’utilise Poedit aussi, mais malheureusement ça n’est pas toujours parfait.

    J’ai par exemple un problème que je n’arrive pas à résoudre, je suis un peu hors sujet car il s’agit d’un élément du moteur wordpress et non d’une traduction de widget, mais peut-être as-tu une solution ? En fait, une traduction de l’interface de base de WordPress, visible en public, est « Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous : ». Je peux avec Poedit changer cette phrase par celle que je veux, mais à chaque mise à jour WP cette valeur est écrasée. Peut-être as-tu une solution (avec functions.php ?), ça fait des semaines que je cherche sur le net …

    Merci d’avance et encore désolé pour le léger hors sujet.

    1. Bonjour François,
      Ta question n’est peut-être pas si hors sujet : on peut faire quelque chose avec la solution de cet article.

      Dans WordPress, la phrase dont tu parles est utilisée ainsi :
      […] __( ‘This content is password protected. To view it please enter your password below:’ ) […]
      La fonction __(‘le texte à traduire’) correspond à la fonction de WordPress _e() décrite dans l’article, à part qu’elle n’affiche pas directement le résultat.
      En clair, pour ce qui nous concerne, c’est la même chose.

      Aussi, comme le domaine n’est pas indiqué, on prend celui par défaut, le bien nommé ‘default’ :
      __( ‘This content is password protected. To view it please enter your password below:’ )
      équivaut à :
      __( ‘This content is password protected. To view it please enter your password below:’, ‘default’ )

      Ainsi, avec la fonction de l’article, il ne faut plus définir :
      $t[« pptwj »] = array( […] ); (sauf si tu utilises l’extension Popular Posts Tabbed Widget for JetPack)
      mais le domaine ‘default’, soit :
      $t[« default »] = array(
      « This content is password protected. To view it please enter your password below: » => « Veuillez entrer votre mot de passe »
      );
      Et ça devrait le faire.

      David

      1. Merci David pour ta réponse rapide. Ca devrait en effet marcher, je vais essayer mais j’ai quand-même encore une petite question : dans ce cas-ci où dois-je écrire cette commande pour qu’elle ne soit pas écrasée par une mise à jour de WP ou de mon thème ? Dois-je créer un mini plugin juste pour ça ?

  5. Salut David,

    Je me permets de venir à nouveau commenter cet article pour t’annoncer deux nouvelles en rapport:
    – je viens de lancer un site entièrement dédié aux traductions de thèmes et plugins WordPress (vous trouverez l’url sous mon nom).
    – j’ai publié un article sur les différentes façons de traduire un thème ou un plugin WordPress avec démonstrations/tutoriels vidéos à l’appui: http://wp-traduction.com/comment-traduire-vos-plugins-themes-wordpress/.
    Tu me diras ce que tu en penses.

    Amicalement,

    Bruno

    1. Bonjour Bruno,
      Ton commentaire était dans les spams d’akismet… Justement on en parlait il y a peu 🙂
      Ton tutoriel est très instructif, ça se voit que tu es sur le sujet depuis longtemps.

      Le site est actuel, mais je n’ai pas réussi à trouver l’accès au tutoriel dont tu parles dans le commentaire…
      J’ai aussi quelques questions :
      – quels sont les plugins et thèmes en cours de traduction ? Tu pourrais préciser cette information, en plus de les compter.
      – tu proposeras une section ‘requêtes’ ?
      – tu proposeras une section ‘contributions’ ?
      – comment installer les traductions ? Que se passe t’il en cas de mise à jour ?

      David

  6. Salut David,

    Excuse-moi si je te répond tardivement, mais j’avais perdu l’adresse de l’article.
    Je me penche actuellement sur une nouvelle version de WP Traduction fonctionnant avec WooCommerce qui va bien simplifier les recherches pour les internautes et me permettre de leur laisser accès aux mises à jours des traductions pendant 3 années (durée de vie moyenne d’un thème sur un site).
    Il est vrai que je pourrais mettre en avant les traductions à venir, mais je t’avoue ne pas avoir encore trouvé quelle serait la meilleure façon de le faire.
    Peut-être que ce sera appliqué sur la nouvelle version, mais il faut encore que j’y réfléchisse.
    Quant au tutoriel, il te suffit de cliquer sur le lien que j’ai mis dans le précédent commentaire.
    Je vais d’ailleurs prochainement mettre à jour cet article puisque j’ai dernièrement découvert une autre extension qui permet de traduire les thèmes et extensions WordPress.
    Pourrais-tu préciser ce que tu entends par « section requête » et « section contributions »?
    Pour finir, comme tu me l’a suggéré à juste titre, j’ai réalisé un tutoriel sur l’installation des traductions que tu trouveras ici: http://tutoriel-video.fr/blog/comment-installer-les-fichiers-de-traduction-dun-theme-ou-dun-plugin-wordpress/.

    Amicalement,

    Bruno

    1. Bonjour Bruno, l’homme aux milles sites 😉

      Tu peux t’inscrire aux réponses aux commentaires, ce sera plus simple 🙂

      Merci pour toutes ces précisions, c’est intéressant.

      David

  7. Salut David,
    À ta connaissance, y’at-il un moyen de traiter la contextualisation de la chaîne (gérée avec la fonction _x() de WordPress ) via le filtre ‘gettext’ ?
    J’utilise Aussi POEdit pour mes traduction, mais je suis assez content de trouver là une alternative.
    Sébastien

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Si vous le souhaitez, renseignez le champ 'Nom' de cette façon : 'VotreNom@VotreMotClef' pour obtenir une ancre optimisée pour les moteurs de recherche.