Comment faire un site multilingue avec WordPress et WPML

Comment faire un site multilingue avec WordPress et WPML

Le logiciel WordPress est aujourd’hui le choix le plus populaire pour créer un blog avec son propre nom de domaine (je ne mentionne pas le service Blogger car celui-ci est hébergé avec le domaine externe de Google). Certains vont l’utiliser aussi comme un simple CMS (Content Management System ou Système de Gestion de Contenu) de façon à ce que des personnes avec des connaissances limitées en gestion de sites web puissent publier du nouveau contenu.

Mais comment faire si on a un site bilingue, trilingue ou multilingue (plurilingue)? On peut toujours installer diverses versions de WordPress, surtout si les versions linguistiques sont hébergées chacune sous leur propre domaine, avec du contenu et des auteurs différents. Mais on si on veut une réplique exacte de la version principale, avec le contenu traduit, cela peut devenir difficile et ardu à gérer, surtout considérant les mises à niveau continues du logiciel.

Important: la dernière version gratuite de WPML est 2.0.4.1, compatible jusqu’à la version WordPress 3.0.5. Pour une version plus récente de WPML compatible avec la version actuelle de WordPress, il vous faut acheter la version commerciale de WPML.

Il existe donc plusieurs plugins qui permettent d’ajouter des fonctionnalités multilingues à WordPress, sous la même installation. Chaque titres, pages, tags, catégories et billets peuvent avoir leur contrepartie dans une autre langue. Mon choix de plugin pour cet article s’arrête à un nouveau venu très capable, WPML.

wpml

Si vous ne l’avez pas déjà fait, avant tout, il vous faut installer WordPress. Vous pouvez trouver la version originale anglaise à wordpress.org, ou la version française à fr.wordpress.org, que je conseille si vous voulez la section administrative en français.

Une fois WordPress installé, il nous faut ajouter l’extension WPML. Comme n’importe quel autre plugin, il suffit de copier par FTP le dossier sitepress-multilingual-cms dans votre répertoire /wp-content/plugins, et ensuite de l’activer dans la section Extensions, sous le nom de WPML Multilingual CMS.

Un onglet WPML devrait apparaître dans le menu de gauche, cliquez sur celui-ci afin de parcourir les options de l’extension.

La première option vous permets de choisir votre langue principale, qui normalement devrait être français, et ensuite ajouter les langues additionnelles que vous désirez.

La 2ème option, très importante, indique comment gérer la structure du site avec les langues différentes. il est recommandé d’utiliser les symboles reconnus pour chaque langue (fr, en, es, etc). Par exemple, vous pouvez différencier les sections linguistiques du site avec un répertoire propre à chacune, comme /en/ pour anglais, /es/ pour espagnol, etc. C’est normalement mon choix. Sinon, vous pouvez choisir un autre nom de domaine ou l’option du paramètre à l’adresse de la page, comme suit: /page1/2/?lang=en pour la version de la page anglaise, /page1/2/?lang=es pour la version espagnole, etc.

La 3ème option indique le code PHP du menu à ajouter à votre thème WordPress qui permets de passer d’une langue à une autre dans vos page web:

<?php do_action('icl_language_selector'); ?>

Il est conseillé de le mettre en évidence dans votre mise en page, mais sans trop déranger, le coin en haut à droite est souvent convenu comme un bon choix. L’apparence de ce menu peut être modifiée avec le fichier CSS language-selector.css situé dans /wp-content/plugins/sitepress-multilingual-cms/res/css/. Ce menu fait des liens directement vers la page qui contient une version traduite, sans devoir naviguer à partir de la page d’accueil de la traduction.

Je vous laisse le soin d’explorer et d’essayer les options restantes par vous-même. Ensuite, en dernier, vient la partie un peu plus compliquée. Nous y reviendrons plus tard. En gros, cette option indique les fichiers nécessaires pour traduire le thème des autres langues.

Mais avant tout, allons voir comment créer des articles avec des versions traduites correspondantes. Composez un billet standard dans la section Articles et sauvegardez le, sans le publier. Ensuite, juste en dessous de la boite texte, vous pouvez voir une nouvelle option appelée Language Options. Le menu défilant, Language, indique la langue du contenu actuel. Juste en dessous, il y a une option Translations (show), qui indique si l’article possède une version traduite.

Comme il n’en a pas encore, vous pouvez en créer une en cliquant sur le lien Add sous le titre Operations. Ce lien vous amènera vers une nouvelle boite texte WordPress pour composer votre texte de traduction. Une fois fini, cliquer sur Publier, revenez vers Language Options en dessous de la boîte texte, affichez les traductions en cliquant sur show, cliquez sur le titre de la version principale en français pour revenir à l’article dans sa langue originale, et finissez par publier celui-ci.

Vous pourrez voir l’article publié sur votre site, et, en choisissant l’option de l’autre langue dans le menu défilant des langues que vous avez placé possiblement en haut à droite, vous pouvez accéder directement à l’autre version.

Et voilà pour le contenu des articles et leurs traductions. Par contre, comme vous pouvez le constatez, l’ensemble du thème n’est pas traduit, ce qui est un peu plus compliqué. Nous allons maintenant apprendre comment créer des thèmes WordPress qui supportent plusieurs langues, aussi appelé « Internationalisation des thèmes ».

En premier lieu, il est important d’avoir les fichiers de langues WordPress de bases, à moins que ça soit en anglais, qui vient par défaut. Ces fichiers devront êtres placés dans le répertoire /wp-content/languages. Pour plus d’information à ce sujet, veuillez consulter la page officielle WordPress in Your Language. Si vous réussissez à vous y retrouvez, le site WordPress i18n project contient aussi juste les fichiers requis.

Pour rendre notre thème international, il faut changer les morceaux de textes qui sont inscrits dans les fichiers du thème par un code PHP spécifique à WordPress qui fera appel par la suite à un fichier externe qui contient tous ces morceaux de texte. Comme le texte est contenu dans un fichier indépendant et spécifique à la langue choisie, il suffira de créer simplement d’autres fichiers pour chaque langue voulue, sans changer les fichiers du thème. C’est la qualité d’un thème international, et certains sont déjà programmés ainsi. Dans ce cas, vous êtes plutôt chanceux, car ils sont assez rares.

La page de WPML WordPress theme localization décrit bien les étapes nécessaires (il manque bizarrement un morceau que j’ai du chercher ailleurs), mais pour ceux qui lisent moins bien l’anglais, laissez-moi résumer en français.

  1. Changer tous les morceaux de texte qui sont inscrits littéralement dans les thèmes avec la fonction _e("", ""), qui fait référence à la fonctions echo de PHP. Par exemple, si on a le morceau suivant:

    Sorry, No Posts matched your criteria.

    pour:

    <?php _e("Sorry, No Posts matched your criteria.", "nom_de_votre_theme"); ?>

    Le morceau nom_de_votre_theme indique à WordPress que la traduction est reliée à votre thème, et non globale; il peut être ce que vous voulez, du moment qu’il est en relation avec votre thème, question que ça fasse du sens. Utilisez ce même nom pour tout le texte que vous changez avec le code PHP.

  2. Changer les morceaux de texte qui sont utilisés dans une fonction, et non imprimé directement à l’écran, par la fonction __("", ""). Cette fonction va traduire le texte sans imprimer celui-ci, contrairement à la fonction echo précédente, de façon à ce qu’il soit utilisable par la fonction. Par exemple, si on a le morceau suivant:

    <?php comments_popup_link('Comments (0)', 'Comments (1)', 'Comments (%)'); ?>

    Changer pour:

    <?php comments_popup_link(__("Comments (0)", "nom_de_votre_theme"), __("Comments (1)", "nom_de_votre_theme"), __("Comments (%)", "nom_de_votre_theme")); ?>

Une fois que vous avez terminé cette tâche (assez lassante, je l’admets), créez un fichier zip qui contient tous les fichiers du thèmes affectés et envoyez le fichier zip au convertisseur de WPML. Celui-ci va parcourir tous vos fichiers et générer un fichier .po (Portable Object Template) nécessaire à la création du fichier .mo (j’y arrive) qui sera employé par WordPress pour archiver tous les morceaux de textes et leurs traductions correspondantes.

Il est possible de créer ce fichier .po à la main, mais ça serait le sujet d’un autre article, celui-ci étant basé sur l’extension WordPress WPML, je profite de leurs outils en-lignes qui automatisent cette tâche.

Copiez et collez le texte généré par le convertisseur dans une page vide de votre éditeur HTML et sauvegardez le dans le répertoire de votre thème dans un format texte avec le charset UTF-8 (n’importe quel éditeur HTML professionnel devrait avoir cette option), avec le nom correspondant au symbole de la langue voulue, par exemple en.po pour l’anglais (ou en_US.po), es.po pour l’espagnol, etc.

Une fois sauvegardé, traduisez tous les morceaux du fichier .po dans la langue voulue. Par exemple, « Comments », en anglais, serait traduit par « Commentaires »:

#. Text in echo
#: sidebar.php:50
msgid "Comments"
msgstr "Commentaires"

Je vous conseille fortement de faire une copie de sauvegarde de ce fichier à quelque part, une fois complété, dans le cas où il y ait un pépin dans l’étape suivante. Appelez-le en_source.po, par exemple.

Maintenant que vous avez le fichier .po, nous allons créer le fichier .mo, qui est plus ou moins la même chose que le fichier .po, mais en format binaire compressé pour un accès et un fonctionnement plus rapide. Pour ce faire, nous allons utiliser l’application gratuite Poedit. Allez télécharger le logiciel et installez-le.

Ouvrez maintenant le fichier .po que vous avez créé avec Poedit (remplissez les quelques champs requis par Poedit quand il est ouvert la 1ère fois, comme votre nom et addresse email, etc) et sauvegardez-le simplement avec l’application. Poedit va reformatter quelque peu le fichier .po (d’où l’importance de l’autre sauvegarde au cas ou) et il va aussi générer le fichier .mo nécessaire au même endroit.

Une fois fait, envoyez enfin le fichier .mo par FTP dans le répertoire du thème de votre installation WordPress.

Pour indiquer à votre thème qu’il doit chercher ce fichier pour la traduction, il faut inscrire une petite ligne de code PHP dans un fichier du thème qui est employé partout (index.php, ou si vous avez un fichier functions.php, c’est aussi bien):

load_theme_textdomain("nom_de_votre_theme");

Cette instruction fonctionne bien si votre langue principale choisie dans la configuration de l’extension WPML est l’anglais, mais malheureusement, dans le cas contraire, il faudra plutôt inscrire une version plus compliquée. C’est un bug actuel de WPML, j’ai trouvé la solution ici, mais les versions ultérieures de WPML devrait être corrigées:

function fix_wpml(){

    $languages = icl_get_languages('skip_missing=0');

    if(!empty($languages)){

        foreach($languages as $l){

            if($l['active']&&$l['language_code']!='en')

                load_theme_textdomain('nom_de_votre_theme');

        }

    }

}

fix_wpml();

Sauvegardez le fichier du thème avec vos changements et téléchargez le dans vote répertoire FTP.

Nous sommes à la toute dernière étape. Revenez au panneau de contrôle de votre installation WordPress et allez à la section de l’extension WPML et ses réglages. La dernière option s’appelle Theme localization, cliquez sur Show, et WPML devrait indiquer s’il a reconnu votre fichier .mo pour votre thème. Si ce n’est pas le cas, inscrivez son nom, et sauvegardez.

Ouf! Et voilà, votre blog WordPress est traduit intégralement (thème et contenu) dans une nouvelle langue! Maintenant que votre thème est « internationalisé », ça devrait être beaucoup plus simple dans le futur d’ajouter des langues additionnelles, et ainsi, accroître le trafic vers votre site.

Important: la dernière version gratuite de WPML est 2.0.4.1, compatible jusqu’à la version WordPress 3.0.5. Pour une version plus récente de WPML compatible avec la version actuelle de WordPress, il vous faut acheter la version commerciale de WPML.

29 thoughts on “Comment faire un site multilingue avec WordPress et WPML

  1. Bonjour Webmart et merci pour ton joli tuto sur wpml. Je suis novice avec wordpress, autodidacte, mais je m’y connait en html et css. Prochaine étape le php… (et la je rigole moins).
    Alors voila j’ai installé ce fameux plugin wpml pour 3 langues francais (defaut), anglais et grec moderne. Etant bien sur sure (tu peux meme regarder le site http://www.noumima.gr/?lang=el (la fin « el » veut dire grec) est activé mais dans le language selector, impossible de faire paraitre mes 3 langues quand je clique dessus.
    J’ai regarde dans l’onglet « troubleshooting » des parametres de mon wpml et dans la case wp_icl_languages pour la ligne parlant du grec cela donne cela:
    « 13 », »el », »Greek », »0″, »1″. Alors que le francais et l’anglais ont bien « 1 », »1″. J’ai essayé de changer et de mettre le 1 à la place du 0, mais impossible de valider sur wordpress.
    Je ne sais plus quoi faire, saurais tu m’aider?
    Si tu as besoin de plus amples informations, je serai ravie de te renseigner!
    Merci à toi!

  2. Bonjour, voila je suis inscrit sur wordpress, et je ne comprend pas la différence entre le fait de télécharger wordpress ou tout simplement s’ inscrire?

    Moi j’ utilise wordpress et je n’ est rien télécharger!!

    Merci

  3. WordPress.com est un service de blog en-ligne, comme Blogger, de Google. WordPress.org est un logiciel qu’on peut installer sur son compte web, avec le nom de domaine de son choix. WordPress.com est bon pour les débutants, le logiciel WordPress.org est mieux pour les gens plus avancés, à moins de connaître ou employer quelqu’un pour l’installer. Pour un site web sérieux, il vaut toujours mieux avoir son propre nom de domaine (ex: example.com) plutot qu’un sous-domaine avec wordpress.com, comme example.wordpress.com.

  4. Bonjour,
    merci d’abord pour le tuto, j’utilise wordpress laderniere version, j’ai téléchargé WPML, pour le faire en anglais aussi, car il est en francais, lorsque je change en anglais le bouton acceuil qui vient par defaut reste la il doit etre changé en HOME, en plus la phrase qui dit aucun article trouvé reste en francais. ppuis pour metre -e(), c’est dans quel fichier exacte .

    merci d’avance

  5. Bonsoir Webmart. Excellent ce petit tuto !

    Juste une question, est ce que tu sais si cette extension est bonne niveau référencement ? Je veux dire par là est ce que Google référence bien les 2 versions du blog ?

    Merci d’avance :D

  6. Bonjour Webmart,
    Super tuto, tout a marché du 1er coup :D

    J’aimerai aussi ajouter 2 tracking code Google Analytics différents pour chacun de mes domaine (le .fr et le .com), est ce que l’on peu mettre du script à l’intérieur d’une ligne de code php ? Ou connais-tu une meilleur solution ?

  7. @makasayo : L’extension fonctionne bien sous WP3.

    Sinon j’ai un petit problème. Lors de l’installation, à la première phase où on demande la langue du « current content », je n’ai aucune langue à choisir dans la liste déroulante. Elle reste vide.

    Comment remédier à ce problème ? Merci d’avance.

  8. Bonjour,
    J’ai testé pour voir car Global Translator c’est pas encore ça…
    Ca ne me dérange pas de traduire les articles ou posts par contre -et malheureusement cela ne transparait pas dans votre article- il faut tout dupliquer..articles à dupliquer, pages à dupliquer, catégories à dupliquer, lien à dupliquer, tout, tout, tout…c’est lourd à la fin.

    Et encore, je ne parle pas du thème….

    Dans ces conditions, autant dupliquer un second site en /en et celui normal en français en /fr….
    Si on utilise un thème particulier au moins, la langue sera mise comme il faut (là je suis un peux dure, c’est vrai qu’en déplaçant le fichier .mo sur la racine du thème, ça le fait mieux mais bon…)

    Grosse déception de ce point de vue.

    Voila mes two cents.

    cordialement

  9. Bonjour,

    oui c’est certain que l’on a plus vite fait d’installer un simple lien vers un traducteur en ligne…

    genre Babelfish…

    A l’évidence, si vous devez traduire en 3 ou 4 langues, à chaque fois que vous écrivez un article, il faut se palucher toute la traduction…

    Un petit automate aurait plus d’intérêt même si, nous sommes d’accord, la traduction est toujours approximative…

  10. Bonjour,

    Petite question si vous avez une idée, WPML va scanner mon template et réussi à trouver les titres des widgets (pour lesquels je peux introduire une traduction directement)… pourtant il ne trouve pas le corps ni les liens associés au widget (alors que le code <?php _e('Corps', 'Template')… est bien présent dans le widget.

    Une idée ?
    Un grand merci :)

  11. Bonjour,

    J’ai un énorme problème avec WordPress Multilangual CMS. J’utilise wordpress et lorsque j’active WPML dans les extentions, j’ai un douzaine d’articles de mon blog qui disparaissent. Je voudrais savoir pourquoi. Merci!

    A noter que lorsque je désactive ensuite l extention, les articles réapparaissent.

    Merci

  12. Moi j’ai installé WPML multilingual, pas de problème de configuration, simplement, dès que le plugin est activé, tous mes articles et pages créées disparaissent!
    Comme Jérémy, dès que je désactive WPML, tout redevient normal…
    Quelqu’un a-t-il la solution?

  13. Avez-vous regardé si l’option « brouillon » n’était pas cochée dans les paramètres de WPML ?

    Pour ma part j’aimerais que la phrase « Cette note est également disponible en: Néerlandais » n’apparaisse pas dans chaque page traduite. Quelqu’un connait-il la solution pour la faire disparaître ?
    merci d’avance

  14. Salut Claude,

    j’ai pas mal cherché sans trouver de solution,
    j’en ai tout de même trouvé une qui n’est pas très propre mais qui fait l’affaire dans certain cas.

    dans : wp-content > plugin > sitepress-multilingual-cms > inc > language-switcher.php

    tu peux trouver la fonction :
    function post_availability($content){

    dedans il y a la balise du p dans lequel apparait notre satané phrase,

    $out =  »

    tu lui met une classe comme par exemple remove

    et en css tu lui assigne un text-indent: -99999px;
    et un position: absolute;

    voila ca ne fait que le cacher, c’est pas une super solution mais comme j’ai dis ca fait l’affaire dans certain cas

  15. Bonjour,

    Je cherche désespérément à traduire le contenu que j’ai introduit via les plugin (par exemple traduire les meta donnée via le plugin SEO) ou éviter de traduire automatiquement le contenu des « customs fields » dans un post mais sans succès… Ou même le contenu introduit dans un widget (je peux facilement changer « titre » qui est la description donnée par le widget mais pas « le titre que j’ai choisi »…

    Si quelqu’un y comprends pouvais m’expliquer comment m’y prendre, je le bénis jusqu’à la 12ème génération… :)

    Merci bcp,
    Jon

  16. Ce plugin est une petite perle par contre je n’ai pas trouvé comment également traduire les emails envoyés tels que pour les nouveaux inscrits…

    Y a-t’il un moyen de gérer également les emails en plusieurs langues?

    Merci pour vos lumières….

  17. Bonjour,

    j´ai installé WPML, le problème est que le plugin ne traduit que la première page (home).
    Pour les autres pages quand on clique sur la langue choisie, l´URL se modifie bien mais le contenu reste la langue d´origine.
    D´où peut venir le problème?
    Merci d´avance,
    Laura

  18. Bonjour et merci pour ce travail minutieux.

    Novice en WP, j’ai installé le bazar sur un petit serveur, installé WPML et tout se passe plutôt pas mal.
    En terme de contenus c’est simple de gérer ses catégories, pages, articles…
    Mon thème n’est pas multilingue ready, c’est pas grave avec votre aide je change ce qui est resté « en dur ». Les menus multilingues sont gérés, super.
    La question que je me pose réside au niveau des Widget.
    Mon thème me permet d’ajouter un widget type « A propos de moi… » avec un titre et un blabla. Et bien ça, je ne vois pas comment le traduire.
    Si vous aviez une idée sur le sujet, je serais preneur :)
    Merci bien
    Rémi

  19. Merci pour l’article je cherchais un plugin pour du multilingue sur wordpress et je suis tombé sur cet article, j’ai déja fait des sites multilingue sur joomla avec l’excellent joomfish, mais sur wordpress je suis débutant. , je m’y met tout de suite.

  20. Cool le tuto, je voulais chercher comment mettre wordpress en multilingue car je suis novice et mr google m’a gentiment indiquer ce site, j’ai déja fait du multilingue avec joomla, mais pour wordpress je débute. Dommage que le plugin soit devenu payant.

  21. j’ai copier coller le dossier « sitepress-multilingual-cms » dans le dossier « plugins » et je ne trouve pas dans les plugins pour l’activer.

  22. Vielen Dannk für die gute Dokument. Es war in der
    Tat ein Freizeitkonto ist. Schauen fortgeschritten weit angenehm von Ihnen hinzugefügt!
    Allerdings Wie konnte kommunizirren wir?

Laisser un commentaire

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