Création de sites multilingue avec WordPress et WPML

Création de site multilingue avec WordPress et WPML
La création de site Web multilingue avec WordPress n’a jamais été une tâche facile, heureusement il y a des extensions pour nous aider.

Nous verrons aujourd’hui comment utiliser l’extension WPML pour créer des sites WordPress en plusieurs langues.

Il est à noter que la version gratuite de WPML est compatible jusqu’à la version 3.0.5 de WordPress, sinon la version payante vaut l’investissement.

Ce que WPML peut faire pour vous:

  • Traduire vos pages, articles, custom post type, taxonomy et menus.
  • Traduire vos extensions.
  • Traduire les chaînes de caractères de votre thème.

1 – Installer et configurer WPML

La version payante de WPML comprend plusieurs extensions comparativement à l’ancienne version gratuite qui regroupait toutes les fonctionnalités par défaut. Ceci permet d’activer seulement les modules utiles à nos besoins.

Nous installerons seulement les deux modules/extensions les plus importants.

  • WPML Multilingual CMS
    Le coeur de l’extension qui permet de traduire les pages, articles, etc…
  • WPML String Translation
    Permets la traduction de textes dans le thème, dans d’autres extensions et dans l’administration WordPress.

Après l’installation, suivez les instructions de configuration.

Configurer WPML

  1. Sélectionner la langue principale de votre site.
  2. La seconde étape consiste à choisir les langues supplémentaires.
  3. Pour la dernière étape, les réglages par défaut font parfaitement l’affaire.

2 – Traduire les chaînes de votre thème

Trouver les chaînes

Cette étape consiste à trouver toutes les chaînes de caractère de votre site et de les insérer dans cette fonction _e('chaine à traduire') ou celle-ci __('chaine à traduire').

La différence entre ces deux fonctions est simple, la première echo une chaîne et la seconde retourne une chaîne.

Traduire les chaînes

Avant de traduire les chaînes de caractère de votre thème, vous devez balayer votre thème.

Dans la section » Localisation du thème et des modules d’extension » sélectionnée « Traduire à l’aide de WPML. »

Activer WPML String Translation

Plusieurs sections s’afficheront alors, vous pourriez donc balayer votre thème pour permettre à WPML de trouver les chaînes de votre site.

Scanner votre theme wordpress

WPML recherche toutes les chaînes _e(«  ») de votre thème. Après le balayage effectué, rendez-vous dans la section « Traduction de chaîne » et il ne vous reste plus qu’à traduire les différentes chaînes trouvées par WPML.

Traduction de chaînes dans wordpress avec WPML

3 – Traduire vos pages de contenu

Il y a plusieurs façons de traduire une page de contenu, une façon simple d’y arriver est d’aller dans la section « Pages » de votre administration WordPress.

Traduire les pages de contenu dans WordPress avec WPML
Appuyer sur le petit plus bleu de la page à traduire et WPML créera automatiquement une traduction de la page. Il vous est même possible de copier le contenu de la page d’origine pour conserver la mise en page et les images par exemple.

Copier le contenu de la page d'origine dans WordPress avec WPML

4 – Traduire vos menus

Si vous utilisez l’éditeur de menu, la traduction se fait de la même façon que les pages.

Traduction de menu dans WordPress avec WPML

Quelques trucs complémentaires

Construire un menu manuellement

<div id="menu">
	<ul>
		<li><?php echo icl_link_to_element(PAGE_ID); ?></li>
		<li><?php echo icl_link_to_element(PAGE_ID); ?></li>
		<li><?php echo icl_link_to_element(PAGE_ID); ?></li>
		<li><?php echo icl_link_to_element(PAGE_ID); ?></li>
		<li><?php echo icl_link_to_element(PAGE_ID); ?></li>
	</ul>
</div><!--menu-->

Remplacer seulement « PAGE_ID » par l’ID des pages désiré.

Lien pour changer de langue

Le changement de langue par défaut se fait à l’aide d’un menu déroulent, se qui n’est pas très esthétique.

// Changement de langue
function icl_post_languages(){
	$languages = icl_get_languages('skip_missing=0');
	foreach($languages as $l){
	  if(!$l['active']) $langs[] = '<a href="'.$l['url'].'">'.$l['native_name'].'</a>';
	}
	echo join(', ', $langs);
}

Copier tout simplement cette fonction dans le fichier fonction.php de votre thème.

<?php icl_post_languages(); ?>

Puis copier ceci à l’endroit désiré soit normalement dans le header.php ou sidebar.php pour afficher un lien de changement de langue.

Construire un lien

<a href="<?php echo get_permalink(icl_object_id(219, 'page')); ?>"><?php _e('Lorem ipsum dolor sit'); ?></a>

Voilà, j’espère que ce tutoriel vous aidera dans vos projets multilingues WordPress. N’hésitez pas à consulter l’API WPML pour plus d’informations sur les fonctions utilisées dans ce tutoriel.

À votre tour

De quelle façon faites-vous vos transitions de langue dans WordPress? Avez-vous rencontré des difficultés? Faites-moi savoir!

Eric Valois
À PROPOS DE L'AUTEUR

Eric Valois

Eric Valois est l'éditeur et le fondateur de Bulledev.
Vous pouvez suivre Eric sur .

  • Laurent Louis

    oui c’est ça en fait c’est plus simple que je ne pensais, dans ma trad de ma page j’insère un code pour le formulaire et donc je n’ai qu’a créer un autre formulaire en anglais… pfff qu’on on commence parfois on chercher les complication ou il n’y en à pas…
    Merci pour ton aide.
    Pour info le scan du thème je l’ai fais et en fait il propose les « options » de CF7 à la trad mais pas ce que tu encode toi même.

  • Laurent Louis

    Bonjour, j’ai une première petite question, j’ai fais un site avec WPML pour la trad et Contact Form 7 pour les formulaires, mais comment je fais pour traduire le contenu de mon formulaire? Je ne vois pas comment je défini mon champ dans CF7 en chaines de traduction….
    Merci pour ton aide

    • http://bulledev.com/ Eric Valois

      Si WPML le permet, tu dois faire un « scan » de CF7 dans la section « Localisation du thème et des modules d’extension » de WPML. Si cela ne fonctionne pas tu devras créer un formulaire différent par langue.

      • Laurent Louis

        Merci
        Tu sais pourquoi WPML ne voudrais pas affiche une chaine de trad?
        Je m’explique il me la propose, je la traduis mais en html (donc sur le site) elle n’apparait pas…
        Merci pour ta rapidité en tout cas, super!

      • http://bulledev.com/ Eric Valois

        Il y a plusieurs possibilités et les plus probables sont:

        1 – La chaîne traduite n’est pas vraiment celle que tu vois sur le site. (Regarde l’option « Rechercher ou la chaîne apparaît sur le site »)

        2 – Ton thème est codé dans une langue et tu cherches à traduire une chaîne dans
        une autre langue. C’est étrange, mais WPML ne permet pas de faire des
        traductions à partir de deux langues différentes. Par exemple, ton thème est
        codé en Français et tu souhaites traduire un plugin codé en Anglais…

      • Laurent Louis

        J’ai vérifier je suis bien au bon endroit, et la c’est juste du txt en html, en plus celui qui est placé un ligne plus au est passer….
        Je peu te faire un mail avec quelque info sur ce que j’ai?

      • Laurent Louis

        Problème résolu!
        J’ai refais mon html et maintenant c’est bon…

  • Souhail Gmi

    Bonjour Eric

    Merci pour ce tuto… j’ai acheté ce plugin pour traduire le site d’un client.
    Mon problème est le suivant, pour faciliter les mises à jour pour mon client, toutes mes pages sont composées de Custom Post Type et je n’arrive pas à mettre en place la traduction pour ces custom fields.

    As tu une idée ?

    MErci.

    • http://bulledev.com/ Eric Valois

      Je ne suis pas certain de comprendre parfaitement. Les «custom field» ne peuvent pas être traduits…ils sont attachés à un post et doivent être dupliqués, car WPML crée un post pour chaque traduction.

      En résumé, tu peux traduire un post (post type) pas un custom field.

  • Souhail Gmi

    Bonjour Eric

    Merci pour ce tuto… j’ai acheté ce plugin pour traduire le site d’un client.
    Mon problème est le suivant, pour faciliter les mises à jour pour mon client, toutes mes pages sont composées de Custom Post Type et je n’arrive pas à mettre en place la traduction pour ces custom fields.

    As tu une idée ?

    MErci.

    • http://bulledev.com/ Eric Valois

      Je ne suis pas certain de comprendre parfaitement. Les «custom field» ne peuvent pas être traduits…ils sont attachés à un post et doivent être dupliqués, car WPML crée un post pour chaque traduction.

      En résumé, tu peux traduire un post (post type) pas un custom field.

  • Mestre Elias

    bonjour,
    je vous felicite pour votre tuto mais moi ça fait plus d’un mois que je tourne en boucle, quelqu’un pourrait m’aider, svp ?
    J’installe mais ca traduit rien, est ce qu’il faut installer cela juste apres l’installation de wordpress ? j’essaie de l’utiliser avec classipress.
    Merci

  • Mestre Elias

    bonjour,
    je vous felicite pour votre tuto mais moi ça fait plus d’un mois que je tourne en boucle, quelqu’un pourrait m’aider, svp ?
    J’installe mais ca traduit rien, est ce qu’il faut installer cela juste apres l’installation de wordpress ? j’essaie de l’utiliser avec classipress.
    Merci

  • sebyrollins

    Bonjour peux-t-on rediriger directement l’internaute vers la bonne langue ? Et est-ce que ce plugin utilise l’option multiblog de wordpress 3.0 ? Peux-t-on l’installer sur un wordpress simple ?

    • http://bulledev.com/ Eric Valois

      Oui, la redirection est faite à partir de la langue du navigateur et oui vous pouvez l’installer sur un site simple.

  • sebyrollins

    Bonjour peux-t-on rediriger directement l’internaute vers la bonne langue ? Et est-ce que ce plugin utilise l’option multiblog de wordpress 3.0 ? Peux-t-on l’installer sur un wordpress simple ?

    • http://bulledev.com/ Eric Valois

      Oui, la redirection est faite à partir de la langue du navigateur et oui vous pouvez l’installer sur un site simple.

  • Safia

    Bonjour Eric,

    Ma question est la suivante: peut-on modifier soi-même la traduction des pages, articles, menus… faites par le plugin? (mes produits étant très techniques, cela m’est indispensable)

    Merci

    • http://bulledev.com/ Eric Valois

      Oui, WPML est très complet. Par contre, tu devras peut-être modifier le code de ton
      thème pour certaines sections. Spécialement pour tes menus.

      • Safia

        Super. Merci pour ta réponse.

        Safia

  • Safia

    Bonjour Eric,

    Ma question est la suivante: peut-on modifier soi-même la traduction des pages, articles, menus… faites par le plugin? (mes produits étant très techniques, cela m’est indispensable)

    Merci

    • http://bulledev.com/ Eric Valois

      Oui, WPML est très complet. Par contre, tu devras peut-être modifier le code de ton
      thème pour certaines sections. Spécialement pour tes menus.

      • Safia

        Super. Merci pour ta réponse.

        Safia

  • http://www.facebook.com/stephane.lemaire Stef An

    Salut Eric, merci beaucoup pour ton travail, j’ai installé les plugins, mais quand j’en viens au moment de traduire les pages ou les articles, je n’ai que des champs vides. Si j’instruis les pages manuellement, elles ne s’affichent pas non plus, ni en aperçu, ni en enregistré. La copie depuis la page source ne donne rien non plus. Aurais-tu une suggestion ? Merci

    • http://ericvalois.com Eric Valois

      Quelle version as-tu installée? Que veux-tu dire par « je n’ai que des champs vides »?

      • http://www.facebook.com/stephane.lemaire Stef An

        Hello, j’ai acheté la version 3 pro. Je tourne sur wordpress 3.5. Pour ce qui est des champs vides, ni la traduction (existe t-il une automatique) ne remplit pas la page dans l’autre langue, ni la copie de la page source en français. Bon pour cela j’ai trouvé un autre moyen, je fais simplement du copier-coller de contenu et modifie le texte. J’ai une tite question supplémentaire, Saurais-tu comment rendre compatible le module avec le epanel des theme elegantheme. Là je suis bien emmerdé, j’avais vraiment cru que ce serait compatible. Damned ! ;)

      • http://ericvalois.com Eric Valois

        La dernière version à ce jour de WPML est la version 2.6.4. Tu est certain d’avoir la bonne extension?

      • http://www.facebook.com/stephane.lemaire Stef An

        Ok, autant pour moi, j’ai la 2.6.2

  • David

    Bonjour,
    J’utilise wpml (version cms) et j’ai besoin d’avoir une réécriture d’url en fonction de la langue.
    « monsite.fr » en français, « monsite.com » en anglais. Dans les réglages de wpml il y a un champ « format d’url » avec un bouton « un domaine différent par langue » que j’ai essayé mais qui semble ne pas fonctionner.
    Je supose que wpml essaye de faire une ré-écriture Apache en ajoutant des règles dans le .htaccess qui est à la racine et que le non fonctionnement vient peut-être des autorisations d’écriture sur le .htacess.
    j’ai lu rapidement sur des forums anglais que la fonction ne marchait pas.
    Avez-vous une idée de solution ou des liens vers des pistes possibles ?
    merci d’avance

    • http://ericvalois.com Eric Valois

      En effet, ce réglage modifie le .htaccess pour permettre la réécriture de l’URL. Il est possible que votre hébergeur bloque l’accès au .htaccess dans ce cas, vous devrez parler avec votre hébergeur.

      Assurer vous également que vos deux domaines pointe ver le même répertoire sur votre hébergement. Votre site sera alors le même pour monsite.fr et monsite.com.

      Normalement il n’y a rien d’autre à configurer.

  • http://gravatar.com/dvcam Edouard

    Bonjour,

    Le site http://wpml.org/purchase/ propose en fait 2 versions payantes : Blog et CMS (mais je n’ai pas vu de version gratuite).

    Je ne vois pas bien la différence entre la version blog et la CMS ?

    Merci beaucoup pour votre aide précieuse.

    • http://bulledev.com Eric Valois

      La version gratuite est disponible uniquement sur WordPress.org, mais je ne conseille pas de l’installer. La version CMS est seulement plus complète ( WPML’s advanced translation management capabilities, which include translator roles, job queues and email notifications. ).

      Si ton budget le permet, je te suggère fortement la version CMS :)

  • http://na JérômeP

    Bonjour,
    Merci pour ce tuto. Je suis un peu novice sur WP mais j’ai un client qui souhaite un site avec un blog en 3 langues. Il prévoit donc de traduire tout son site mais pas les billets de blogs lesquels seront soit en dans une langue soit dans une autre. Pour résumer, il faut que lorsu’il publie un billet en français, celui-ci n’apparaisse que dans le site FR, si au contraire son billet est en allemand, il ne doit apparaitre que su le blog de la version allemande.
    C’est possible ça ? Et si oui, est-ce avec la version WPML payante que je dois travailler

    • http://ericvalois.com Eric Valois

      Oui cette fonctionnalité est de base avec WPML et oui je te suggère la version payante.

  • http://www.vaudoo-interactive.ch Davidoff

    Hello, tout d’abord bravo pour ton article il est très claire. Toutefois j’ai encore de la peine à choisir entre l’option de traduction par WPML ou avec les fichiers .mo, peux tu m’aider ?
    j’ai acheté un thème pour un client sur themeforest, Core, qui est en anglais, j’ai installé WPML et toutes les autres options, j’ai réussis à traduire le contenu des pages, même les galleries d’images qui n’a pas été simple d’ailleurs ;) et là j’ai un problème avec le fomulaire de contact car dans les options du thème Core tu peux construire ton formulaire avec une réponse automatique, puis on récupère le modèle en créant une page. Seulement ça marche pour une langue, mais pas pour l’autre, ça bug. Le support ne répond pas, je suis un peu désespéré.
    Ca serait vraiment très gentil de ta part de m’aider ;)

    • http://bulledev.com Eric Valois

      Il est très possible que des fonctionnalités programmer par le concepteur de ton thème ne soient pas traduisibles. Personnellement pour créer des formulaires j’utilise GravityForms qui est payant par contre. Sinon le plugin Contact form 7 est moins complet, mais gratuit :)

      Si tu veux tout de même essayer GravityForms, j’ai écrit un article pour cela: http://bulledev.com/formulaire-multilingue-avec-gravityform-et-wpml/

  • http://www.benjung.com Ben Jung

    Bonjour,
    Y a t il aussi moyen de changer, par exemple l’image du header grâce à ce plugin ?
    (en changeant d’une langue à l’autre bien sûr)
    Merci !

    • http://ericvalois.com Eric Valois

      Oui, tu peux simplement faire une condition logique du genre:

      <?php
      	if( ICL_LANGUAGE_CODE == 'fr'):
      		echo '<img src="image_fr.png" alt=""/>';
      	else:
      		echo '<img src="image_en.png" alt=""/>';
      	endif;
      ?>
      
      • http://www.benjung.com Ben Jung

        Merci bien Eric !

  • Adam

    Hello!
    Super tuto merci à toi!
    J’ai juste un problème, chez moi les options de traduction dans apparence -> menus ne s’affiche pas.

    Est-ce normal? Dois-je activer quelque chose pour avoir cette option?

    Encore merci pour ton aide.

    • http://ericvalois.com Eric Valois

      Normalement les options de traduction s’affiche automatiquement. Qu’elle version de WPML as-tu? Si tu as la version gratuite qui est arrivé avant WordPress 3.0 c’est normal que rien ne s’affiche.

  • http://www.cree1site.com Rodrigue

    Super, quand est il pour un plugin de contact en widget par exemple, pourrais je le traduire ? Very important merci de ton aide

  • http://gravatar.com/icinoemi revol

    Bonjour,
    Est ce que WPML fabrique un multisite, ou bien un seul site avec plug-in ?
    Car j’ai cru comprendre que le fait d’avoir un multisite aidait au référencement ?
    Merci

  • http://ericvalois.com Eric Valois

    Le multisite n’aide pas le référencement, il est même préférable d’avoir qu’un seul domaine, car le pagerank n’est pas divisé en deux.
    http://en.wikipedia.org/wiki/PageRank

    Avec WPML, les urls seront comme ceci: exemple.com/a-propos et exemple.com/en/about-us

© 2014 Bulle Développement