Un point sur la traduction dans WordPress : #jeudiconfession n°8

Un point sur la traduction dans WordPress : #jeudiconfession n°8

Lost In Translation

Pourquoi parler de la traduction ? Car prêt de 40% des thèmes et plugins sont destinés à des personnes ne parlant pas (ou, au moins n’utilisant pas) la langue anglaise sur leur installation. Ici, en France, je pense que beaucoup d’installations sont faites en français. Bref, des plugins j’en vois tous les jours, je m’amuse à regarder les nouveautés et très souvent les choses ne sont pas faites dans les bonnes pratiques de traduction.

American Translation

Reprenons très rapidement les bases de la traduction, ou plutôt la localisation (l10n) :

__() : Permets de traduire une chaà®ne dans une variable. On lui donne le texte à traduire puis le domaine de traduction. Ce domaine est le slug de votre thème, de votre plugin. Vide signifie « default », soit, traduit par WordPress si il connait cette chaà®ne.

_e() : Même chose qu’au-dessus mais cette fonction fait un echo de la valeur traduite.

esc_attr_e() : Mixe les fonctions __(), et esc_attr().

Je vous invite à regarder ces fonctions encore : _n(), _x(), _ex(), _nx(), esc_attr__(), esc_attr_e(), esc_attr_x(), esc_html__(), esc_html_e(), esc_html_x(), _n_noop(), _nx_noop(), translate_nooped_plural() via le codex. Ou en mode hardcore, lisez le fichier wp-includes/l10n.php.

Found In Translation

Passons aux choses sérieuses, voici des exemples de ce qu’on peut rencontrer, ou peut-être l’avons nous déjà codé un jour comme ça :

#bad : Il ne faut pas utiliser de variables en premier paramètre mais bel et bien une chaà®ne. La raison pour laquelle vous ne devez jamais faire comme ça, c’est parce que la traduction repose sur la recherche de chaà®nes dans un tableau, puis cela les traduit. Cependant, cette liste de chaà®nes à traduire est construite par un processus automatisé. Une partie du code scanne votre code PHP, sans l’exécuter, et sort toutes les __() qu’il trouve, puis construit la liste des chaà®nes à traduire. Ce code de balayage ne »‹»‹peut pas savoir ce qu’il y a dans votre variable.

#bad : Même explication, même si cela contient du texte, il NE faut PAS utiliser de variable ici, relisez au-dessus !

#bad : Moui, je comprends, c’est mieux. Mais … NON ! Même si les chaà®nes seront bien traduites, il se peut que dans d’autres langues, le chiffres va se retrouver en début de phrase, ici, je vais me retrouver coincé car la chaà®ne est découpée ! Utilisez la solution suivante, vous devez passer par un sprintf() :

Maintenant, c’est correct car la chaà®ne à traduire ne contient pas de code PHP. Le marqueur « %d » sera remplacé APRàˆS la traduction de la chaà®ne, ce qui est là , correct.

#bad : Aà¯e, même problème que précédemment, ne pas utiliser de variable non plus dans le domaine.

#bad : Euh, quand je dis « pas de variable » je veux aussi dire « pas de constante », donc les defined ne sont pas non plus autorisées !

#bad : Evitez de mettre du markup HTML à traduire, pourquoi donner la possibilité de modifier votre formatage ! Sortez le code HTML comme ceci :

Allez encore un pour la route :

#bad : Oui, cela paraà®t parfait : pas de variable ni dans le texte, ni dans le domaine, pas de constante, pas de chaà®ne découpée, pas de markup dans la chaà®ne … Le problème !? C’est en français ! Vous devez mettre les chaà®nes en anglais par défaut, puis traduire en français (ou autre) par la suite. Le français n’est PAS la langue par défaut de WordPress, vous DEVEZ utiliser l’anglais par défaut.

Translation Problems

Voici quelques astuces et conseils concernant la localisation :

  1. N’utilisez que des simples quotes afin de vous assurer de ne pas utiliser de variables dans les chaà®nes.
  2. Ne concaténez pas les chaà®nes avec « . », afin de vous assurer de ne pas les découper.
  3. Parlez anglais, toujours.
  4. Ne recréez pas la roue avec des tableaux de chaà®nes que vous allez chercher avec la langue en cours etc

Alors, prêts à traduire ?

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum