Here With Me

Le blog technique d'Amaury Balmer qui parle de technologies open-source, mais surtout de WordPress !

Simple Punctual Translation, un plugin pour proposer ponctuellement des traductions sur votre site

| 35 Commentaires

À BeAPI, il nous arrive fréquemment que l’on nous demande de réaliser des sites multilingues.
Parfois, il s’agit de traduire l’intégralité du site, mais bien souvent il s’agit surtout de traduire les pages statiques de WordPress, ou certains articles très populaires.

Face à ce besoin plutôt basique, il n’existe pas de solution magique sur WordPress…

Les solutions existantes

Pour faire court, on peut utiliser comme plugin :

  1. WPml
  2. Qtranslate
  3. Global Translator

WPML

Ce plugin est le plus complet pour gérer les sites multilingues sous WordPress.
Il propose de traduire tout : contenus, taxos, menus, widgets. Il permet aussi une traduction de son site par des personnes extérieures, bref.

Il fait plein de choses. Le problème se résume en 3 points :

  1. On ne peut pas désactiver la traduction sur les articles
  2. Le code source est imbuvable, pourri et j’en passe. (il m’est arrivé de désactiver des fonctions complètes, le plugin fonctionnait mieux…)
  3. Il vient récemment de passer en mode payant

De fait, à l’agence dès que l’on peut, on s’en passe bien volontiers !

Qtranslate

Alternative qui a l’avantage de proposer moins de fonctionnalités que WPML, mais avec une interface sympathique bien qu’imposant une contrainte en nombre de langues.
(Chaque langue étant affiché dans la même page d’édition que le contenu initial, avec un basculement via des onglets)

Mon principal reproche concerne l’architecture du plugin, tout stocker dans les mêmes champs, et insérer des balises XML pour différencier les langues n’est pas une méthodologie viable.
Par exemple, impossible de désactiver le plugin sans afficher tout le contenu en 3 triples. (si votre site possède 3 langues)

Global Translator

La traduction « low-cost » qui consiste à proposer une version traduite par les soins de Google, Babel Fish, Promt ou FreeTranslations de tout son site. Bien entendu le résultat est catastrophique la majorité du temps, et il n’est pas possible de proposer sa traduction. Bref, une solution pas exploitable en entreprise, mais qui très utile dans le cadre d’un blog personnel pour générer du trafic international. (mais non qualifié)

Notre solution : Simple Punctual Translation

Avec l’équipe de développement de BeAPI, on s’est mis en mode réflexion, on a imaginé toutes les fonctionnalités que l’on peut attendre d’un plugin open-source, l’architecture que l’on pourrait créer, l’impact sur les développements. Bon, je ne vous pas qu’on s’est bien aidé de pour lister toutes les fonctionnalités multilingues à prévoir.

Et puis face à un chantier aussi grand, on s’est dit qu’on ferait bien de commencer par une solution allégée de plugin multilingue. On a listé le besoin de base rencontré à l’agence, soit traduire certains types de contenus de WordPress et on a commencé le développement de Simple Punctual Translation.

Comme son nom l’indique, ce plugin permet de faire des traductions ponctuelles sur son site WordPress, ponctuel dans le sens nous n’allons traduire que certaines pages du site.

L’architecture retenue pour le développement est en pleine cohérence avec WordPress 3.0, nous avons créé un type de contenu traduction, et nous avons créé une taxonomie pour les langues du site. Nous avons personnalisé la console d’administration de WordPress pour proposer les fonctionnalités de traduction, un peu d’AJAX pour rendre l’interface pratique. Enfin, nous avons créé un widget affichant les langues disponibles pour le contenu actuellement chargé. Un rôle traducteur est automatiquement créé avec le plugin, il permet à un utilisateur de ce rôle d’uniquement pouvoir créer et gérer des traductions.

Les fonctionnalités utilisateurs se résume en la possibilité de switcher entre une et plusieurs langues sur la vue single d’un contenu. Ainsi, une page peut être traduite en X langues.

Le plugin propose les réglages suivants :

  • Insertion automatique des langues disponibles à la fin d’article
  • Réécriture des URLs soit via un paramètre « lang » dans l’adresse ou via un préfixe en début d’adresse :
    • https://www.herewithme.fr/contenu/?lang=de
    • ou https://www.herewithme.fr/de/contenu
  • Activation des traductions sur les de son choix
  • 2 modes pour le mécanisme de traduction, que je détaillerai ci-dessous.

Bien entendu, le plugin est disponible via le référentiel des extensions WordPress.

Moteurs de traduction

Pour ce plugin, nous n’avons pas voulu imposer une architecture définie pour le moteur de traduction, alors nous avons proposé un mode automatique ou manuel.

Mode automatique

Le mode automatique est plutôt destiné au grand public, car aucune modification n’est nécessaire dans le code source. Le principe est le suivant, lorsqu’on navigue sur la version allemande d’une page, WordPress récupère les données originales de la page, et notre plugin vient automatiquement injecté le contenu allemand de 3 champs, le titre, le contenu et l’extrait.

Cela veut dire que la version allemande en mode automatique conservera, si votre thème l’affiche, la date de publication, les commentaires, l’auteur, les et les catégories de l’article original.

Ce mode suffit largement à un usage basique du plugin de traduction, sur des types de contenu natifs, il est compatible à 99% sur les installations WordPress existantes.

Mode manuel

Ce second mode est nettement plus puissant que le premier. Le mode manuel ne modifie aucune donnée de la requête initiale de WordPress, si aucune modification n’est portée sur le thème, votre contenu ne sera même pas traduit ! Pour switcher de langue, nous nous sommes inspirés des fonctions de WordPress Mu permettant des switcher de blogs, soit switch_to_blog() et restore_current_blog().

Et nous avons créé 2 fonctions switch_to_language() et restore_original_language().

La première fonction switch_to_language() permet de basculer le contenu dans la version traduite, tandis que la deuxième fonction permet de restaurer la langue originale du contenu.

Exemple :

<?php
the_title(); // Title in English

switch_to_language();
 the_title(); // Title in French
restore_original_language();

the_title(); // Title in English
?>

Ce couple de fonctions permet aux développeurs d’être extrêmement précis sur les champs à traduire. Ce mode à mon sens, doit être largement privilégié, car il est propre, il n’interagit pas avec la requête initiale de WordPress. Néanmoins, il y a quelques défauts comme :

  • Le titre HTML de la page n’est pas traduit
  • Les plugins de fil d’ariane ne prennent pas en compte la traduction

Ce sont principalement des défauts concernant l’aspect , et effectivement sur cette première version du plugin nous n’avons travaillé que l’aspect fonctionnel. Nous comptons sur les retours de la pour améliorer le plugin…

Le mot de la fin

N’hésitez pas à tester ce plugin et nous faire vos retours sur le site redmine du projet.

Dernière précision, ce plugin a été développé sur WordPress 3.1, mode WP_Debug activé, il est rétro-compatible 3.0.

Pour conclure, il n’est pas compatible PHP4. (en fait je n’en sais rien, mais pour tout vous dire, je m’en fous royalement)

Le plugin est image :