Je traduis(ais) WooCommerce depuis 4 ans. A l’époque WooCommerce, dans sa version 1.3.2.1, était une solution en devenir, fork de Jigoshop.

J’ai passé des dizaines d’heures à traduire l’extension WordPress en m’imposant de produire une version 100% française (front et back).

Immodestement je pense avoir contribué à l’adoption de WooCommerce en France, alors que les agences Web n’avaient d’yeux que pour Prestashop. Le développement, peu de temps plus tard, de passerelles de paiement pour les principales banques françaises a également permis de rendre cette solution de eCommerce crédible.

La version 1.3.2.1 de janvier 2012 comportait 1553 chaines, la version 2.5 sortie hier en comporte 3848. La traduction d’une telle extension est un travail récurent, chaque nouvelle version apportant son lot de traductions.

Contre performance

WooCommerce 2.0, sorti le 4 mars 2013, annonçait que le fichier de traduction était scindé en deux, l’un pour le front et l’autre pour le back. Ceci pour des questions de performances.

Localization – Not only have we added a lot more translations bundled with the plugin, we have also split up the translation files to make them more memory efficient.
Coen, WooThemes

Toute une discussion sur le bien fondé de séparer le fichier de traduction en deux est consultable sur Github.

Les conséquences du rachat de WooThemes par Automattic

En 2015 Automattic, l’éditeur de WordPress, rachète WooThemes, l’éditeur de WooCommerce.

Dans une volonté d’uniformisation, la traduction de WooCommerce, qui était depuis quelque temps hébergée sur Transifex, a été contrainte de passer sur le service GlotPress de WordPress. Hors ce service n’est pas en mesure de gérer plusieurs fichiers de traduction par langue…

Vous voyez où je veux en venir ? Fusion des deux fichiers front et back pour un unique fichier de 326 ko (version 2.4.13 de WooCommerce). Adieu les discours sur l’optimisation de mémoire, les traductions du back sont chargées même pour les clients de la boutique.

GlotPress, l’interface d’un autre âge

J’ai commencé la traduction de WooCommerce depuis le logiciel POEdit, avant que la traduction ne soit centralisée sur l’outil en ligne Transifex. Très bon outil apprécié des traducteurs.

Puis WooThemes a annoncé la migration de la traduction de WooCommerce sur l’outil du “groupe”, GlotPress. Je ne connaissais pas cet outil à l’interface austère.

GlotPress

Sur Transifex j’avais un rôle de traducteur qui me permettait de valider tout seul comme un grand mes traductions. Sur GlotPress je n’ai aucun rôle, je ne peux que proposer mes traductions qui devront être modérées par un traducteur disposant de droits suffisants. Apparemment il y a toute une hiérarchie sur GlotPress… WooThemes ne s’est pas soucié d’accompagner les traducteurs dans cette migration, de leur expliquer comment fonctionnait GlotPress.

Sur GlotPress, seule une traduction totale (traduction+validation) conduit à ce que le fichier soit poussé dans l’extension correspondante. Ce qui fait que, pour la première fois depuis longtemps, la nouvelle version de WooCommerce qui vient de sortir (2.5) n’est pas totalement traduite. C’est en effet la traduction de la 2.4.13 qui est téléchargée lors de l’installation de la version française.

woocommerce-non-traduit

Exemple de terme non traduit sur WooCommerce 2.5

Pourquoi j’arrête ?

Sur un outil performant tel que Transifex j’aurai sans problème pu continuer à traduire WooCommerce encore plusieurs années, aidé si nécessaire par les boss de la traduction @fxbenard et @wolforg lorsque les délais étaient un peu court.

Mais devoir basculer sur un outil aussi merdique que GlotPress, renoncer au gain de performance de deux fichiers de traduction, pour la simple raison que WordPress l’impose, réduit à néant toute motivation de donner de mon temps pour traduire WooCommerce.

Quand je vois le taux de traduction des autres langues, j’ai l’impression de ne pas être le seul démotivé. Les versions espagnole, italienne, portugaise, russe, chinoise, japonaise, etc. ne sont pas disponibles en version 2.5.

woocommerce-traduction-partielle

Et maintenant ?

WooCommerce est une extension “gratuite” qui génère des millions de revenus à son éditeur WooThemes.

Aucun risque que la version française végète, WooThemes peut prendre la main sur la traduction, ou attendre que des traducteurs bénévoles s’y collent…

Encore une chose

[ajout du 09/02/2016]

Quelqu’un sur Twitter me demandait récemment comment outrepasser la version officielle de la traduction de WooCommerce par sa version personnalisée. En aparté ce besoin est légitime et n’indique pas qu’il ne veut pas partager ses traductions avec la communauté mais qu’il a besoin de personnaliser les traductions. J’ai moi même actuellement un client qui veut que “Commande” et “Commander” soient remplacés par “Réservation” et “Réserver”.

Je lui ai répondu qu’il me semblait que la traduction était poussée par GlotPress dans le dossier /wp-content/languages/plugins/ et que ses modifications seraient écrasées à la prochaine mise à jour de la traduction.

En en discutant au dernier WordCamp Paris avec la communauté et après quelques tests, il en ressort que l’utilisation de GlotPress inverse le processus des dossiers de langues.

Sans GlotPress :

  • L’extension est livrée avec ses traductions ou éventuellement les traductions sont poussées par l’éditeur dans le dossier langue de l’extension (wp-content/plugins/woocommerce/i18n/languages/)
  • L’utilisateur peut outrepasser les traductions en plaçant les siennes dans wp-content/languages/plugins/

Avec GlotPress :

  • Les traductions sont poussées par GlotPress dans wp-content/languages/plugins/
  • Les traductions présentes dans le dossier wp-content/plugins/woocommerce/i18n/languages/ outrepassent les traductions GlotPress

Pourquoi avoir inversé l’emplacement et les priorités des répertoires ? @fxbenard nous donne la réponse, cela permet aux auteurs de passer outre le processus de traduction en fournissant leurs propres traductions, car il faut savoir que le nouveau processus de traduction des extensions leur est imposé.

Des solutions ?

  • Il est possible de filtrer “gettext” dans le functions.php de votre thème par exemple.
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
function abw_text_strings( $translated_text, $text, $domain ) {
    switch ( $translated_text ) {
        case "J'ai lu et j'accepte les <a href=\"%s\" target=\"_blank\">conditions générales de vente</a>" :
            $translated_text = "J'ai lu et j'accepte les <a href=\"%s\" target=\"_blank\">conditions générales de location</a>";
            break;
        case "Commander" :
            $translated_text = "Réserver";
            break;
    }
    return $translated_text;
}
add_filter( 'gettext', 'abw_text_strings', 20, 3 );
[/pastacode]
  • Un 3e dossier permet d’outrepasser les deux autres, wp-content/languages/woocommerce/

Quelle solution choisir ? Avec gettext vous serez plus pérenne car même s’il peut arriver que certaines de vos chaines changent, vous n’aurez pas systématiquement à modifier le fichier de langue à chaque mise à jour. Car dans le cas où vous outrepasser le fichier, vous devrez actualiser votre fichier de traduction depuis les sources dès qu’une mise à jour sera disponible.