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

| 33 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 , 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 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 WP
  2. Le code source est imbuvable, pourri et j’en passe. (il m’est arrivé de désactiver des fonctions PHP 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 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 cache pas qu’on s’est bien aidé de Drupal 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 :
    • http://www.herewithme.fr/contenu/?lang=de
    • ou http://www.herewithme.fr/de/contenu
  • Activation des traductions sur les post types 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 tags 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 de fil d’ariane ne prennent pas en compte la traduction

Ce sont principalement des défauts concernant l’aspect SEO, et effectivement sur cette première version du plugin nous n’avons travaillé que l’aspect fonctionnel. Nous comptons sur les retours de la communauté 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 :


33 Commentaires

  1. Super initiative ! A t-il été prévu pour bien interagir avec les plugins e-commerce ou autres ?

  2. En mode avancé, le couplage devrait pouvoir se faire sans trop de problème. Le hic ce que le plugin ne gère absoluement pas la traduction des fichiers PO/MO.

    Donc les fiches produits peuvent être traduites, mais le processus de paiement reste dans la langue originale.

  3. Merci pour ta réponse ! Est-ce la gestion des PO/MO est incompatible avec les choix techniques retenus, ou cela serait-il implémentable par la suite ?

  4. Merci pour offrir une nouvelle alternative à WPML, qTranslate.

    Vous avez choisi le nom adéquat: « traductions ponctuelles », qui peut convenir dans certains cas.

    Je pense malgré tout que les demandes des clients sont davantage pour des « sites multilingues », c’est à dire avec l’approche de WPML, pouvoir traduire les essentiels : menus, fil d’ariane, chaines du thème; et les moins importants : catégories/taxonomies, champs personnalisés, commentaires.

    A suivre dans quelle direction vous allez le faire évoluer.

  5. Anthony > Ce plugin n’a clairement pas été architecturé pour proposer des traductions complètes de site, ca n’est pas son objectif et cela ne le sera jamais.

    Donc, un support des fichiers PO/MO n’est pas prévu.

    Nico > Ca dépend les clients, on a bien entendu des clients qui souhaitent tout traduire. Lorsqu’il s’agit d’un blog ou d’un site basique exploitant juste les fonctionnalités pages/articles aucun problème. Dès que l’on complexifie le projet, WPml est juste un problème à se trainer au fil du projet.

    Créer un concurrent de WPml est un vrai sujet de réflexion, car un plugin de multilingue doit pouvoir répondre à un nombre important de configuration, et l’architecture doit pouvoir supporté un grand nombre de plugins tiers, sans que cela entraine des modifications sur chaque plugin comme peut le demander Qtranslate, ou Gango, il fut une époque…

  6. Wooo ! Enfin des contributeurs qui développent en E_ALL. Il faut avouer que ça fait parfois peur d’activer les notices sur un WP chargés de plugins…
    Bravo pour ce plugin qui comble un espace que personne n’avait occupé !

  7. Pingback : Passez à l’international !! | Papynerds

  8. Bonjour Amaury,
    Ai testé ton plugin, ou plutôt l’un de mes client l’a testé et installé sur un multisites et buddypress. En mode automatique, classique ou réécrit, ça ne donne rien, la page de traduction publiée aboutit à une erreur 404.
    Avant que je ne sonde le pourquoi du comment, je voudrais savoir si tu as prévu la compatibilité pour BP et multisites ou pas ?
    Merci d’avance et bravo en tous cas

  9. Théoriquement, il n’y a pas de raison que ca ne fonctione pas avec BuddyPress. L’aspect multisite fonctionne car je l’ai testé.

    Ton client souhaite juste traduire une page ?
    Ca n’est pas la page d’accueil, tu es sur un template classique ?

  10. Merci de ta réponse.
    Ce n’est pas la page d’accueil, c’est bien un article. Le template est classique, c’est un thème de chez ‘Elegantthemes’ (brightlight). Il a été dans le menu ‘translations », a cliqué sur ‘ad new » et a rédigé un nouveau billet en anglais en choisissant dans le menu déroulant le nom du billet existant. Le permalien généré est monsite.com/?translation=herewithme-postname. Or le permalien normal de l’article est en format date-postname.

  11. Il ne faut pas essayer de visionner directement la traduction. (je n’ai pas finalisé les liens dans l’admin des notifications)

    Il faut prendre le lien de l’article et rajouter par défaut ?lang=anglais
    En reprenant le slug du terme de la taxonomie « languages »

  12. Ok merci beaucoup, effectivement ça marche en cliquant sur le lien dans l’article original. Je me tiendrai au courant des évolutions. C’est bien pratique en tout cas, bravo, j’en ferai la pub :)

    P.S. : publier des commentaires sur ton blog pose problème quant à l’affichage, la page ne s’affiche jamais comme ‘envoyé’, ça reste figé avec l’éditeur. je suis avec FX dernière version.

  13. Pingback : Simple Punctual Translation, un plugin de traduction pour WordPress made in France » Wordpress-actu, toute l'actualité Wordpress

  14. Pingback : L’Hebdo WordPress : Traduction – Blogosphère – Hacks | WordPress Francophone

  15. Pingback : L’Hebdo WordPress : Traduction – Blogosphère – Hacks – Intégrateur développeur magento

  16. Génial ! Déçu des plugins existants parce que trop lourds, mal foutus ou obsolètes, je suis ravi de voir cette nouvelle initiative. Je m’en vais la tester de suite !

  17. Même si l’objet de cet article concerne les traductions des contenus, ici couplé à l’organisation CMS du site, en tant qu’auteur de l’extension xili-language et sa trilogie, je trouve dommage que celle-ci ne soit pas citée. En effet, il me semble, et une expérience récente de récupération d’un site pollué par une des extensions ici citées me le confirme, avant tout qu’il faille – découpler – l’organisation / architecture CMS de la gestion automatisée ou non des traductions des contenus. Cela donne des codes légers et évolutifs compatible WP mono ou multisite. Et si l’on se recentre sur le projet éditorial du site, ou le roadmap de WP, on mesure combien cette séparation est importante afin de ne pas écrouler le modèle de données.
    Michel
    http://dev.xiligroup.com
    http://multilingual.wpmu.xilione.com/

  18. Pingback : Papynerds | Passez à l'international !! |

  19. Bonjour,
    Déçu de WPML, j’ai lu cet article les yeux pleins d’espoir… Seulement après installation du plugin et traduction d’une page, lorsque je clique sur ‘English’ pour afficher la traduction, la page se recharge avec « &lang=en » à la fin de l’url, mais le contenu reste celui de la version française… Y a-t-il un forum de support?
    Merci d’avance.
    Page concernée: http://odilrock.com/?page_id=1078

  20. Tu as mis le mode traduction auto ?

  21. Bonjour Amaury,

    Non je l’avais mis en manuel puisqu’apparemment c’est plus complet comme mode de traduction. Je viens de tester en automatique et en effet cela fonctionne.
    Est-ce qu’il est possible de faire en sorte que cela fonctionne également en manuel?

    Du coup j’ai 2 autres questions:
    Dans la version traduite en anglais, il s’affiche en fin d’article: « Also available in English » avec un lien vers la version française, est-ce normal?
    Est-il possible d’indiquer de manière plus voyante, et pourquoi pas en début d’article, qu’il existe une version traduite?

    Merci pour ton aide!

  22. Pingback : bertrandkeller » Simple Punctual Translation

  23. Bonjour,
    Je rencontre un soucis avec le plugin.
    Je l’ai mis en mode manuel, j’ai créé une page traduite en quand je clique pour la traduction, cela m’affiche toujours ma page en français alors que l’url a bien changé (comme pour afficher la page en anglais).
    Quand je modifie ma page et que je clique sur « Voir la traduction » (juste après Traduction mise à jour), cela me met une erreur 404…
    Je n’arrive pas a voir d’où vient le problème…
    Voici le site et l’exemple de page : christine-bel-architecte.fr/contact/
    Merci
    Nicolas

  24. Je viens de voir qu’en basculant en auto, cela fonctionne…
    Je ne comprend pas très bien pourquoi…

    Autre soucis, l’accueil du site est une page (et non une actualité comme bcp de wp), du coup le plugin n’arrive pas a trouver la page de traduction, comme s’il avait besoin du nom de la page derrière l’url.
    Y a t il une solution ?

    Merci

  25. Toujours pas trouvé de solution en 10 jours pour la traduction de la page d’accueil…
    Please help ???

  26. Ce plugin est une très bonne idée dans le sens ou il permet de traduire tout un site ou un simple billet. L’idée de personnaliser les urls est pas mal aussi. J’ai utilisé Global translator mais qui générait pas mal de trafic. C’était il y a 2 ans. Je ne sais pas ce que le Seigneur Google en penserait aujourd’hui.

    Aussi au niveau de la qualité des traduction ce n’était pas le top. Plugin à tester donc pour voir ce que cela donne.

    Bon boulot en tou cas.

  27. Mon problème est résolu, merci beaucoup pour votre aide et ce plugin !

  28. Il existe d’autres façons de traduire, en passant par des services externes (comme google translate entre autre), le mieux reste quand même d’avoir un sous domaine avec une vraie traduction hélas.

  29. First of all congratulations for the simple plug-in, it works perfectly for what its purpose is. I’ve managed to install it , have it running with few graphical tweaks in very short time (and I am not a WP expert).

    As mentioned the SEO aspect is still weak, I use All in One SEO that supports customized post types and I could add the SEO extras on the editing page for the translation, but when the translation is actually rendered it ignores the content from the translation and takes the SEO content from the original page (in another language). Is there any « fix » byt adding a function here or there so the translation will take the SEO content with the translated language?

    Merci!

  30. Bonjour,
    Merci tout d’abord pour avoir développé ce plugin qui me semble être une très bonne alternative à WPML et qui correspond à mes besoins ainsi que certains de mes clients.
    J’ai tout de même une question qui n’a pas été soulevée jusqu’ici dans les commentaires : où est-il possible de configurer les permaliens générés ? J’ai bien vu l’option pour le suffixe de langue mais l’espace pour écrire l’url disparaît dans la page d’édition de la page traduite. Même chose pour les autres champs configurés pour le français.

    Merci,
    Maëlle

  31. Salut,

    Belle initiative, d’autant que des traductions ponctuelles c’est bien plus efficace qu’un translator google…
    Cependant j’ai un petit souci sur mon petit blog, les pages traduites ne sont pas accessibles, je tombe sur ma 404. Je suis un utilisateur avancé, je fais des tutos WP mais là je ne vois pas d’où cela peut venir. Est-ce que je dois éditer les fichiers? Où faut-il chercher? Merci d’avance. Si je n’ai pas de réponse je laisserai tomber le plugin mais c’est dommage…

  32.  » successifs, tout en travaillant sur le même nom de fichier, avec le même propriétaire et le même mode d’accès, accèdent à deux contenus totalement différents alors qu’aucune modification n’est intervenue sur ces fichiers entre les deux opérations.

Répondre à Maëlle Annuler la réponse.

Champs Requis *.