Site WordPress multilingue

Site Wordpress multilingue

SITE WORDPRESS MULTILINGUE

Si vous souhaitez créer un site web multilingue avec WordPress, vous avez le choix entre plusieurs extensions : qTranslate, Xili Language, Multilingual Press et WPML (celui-ci se démarque vraiment).

Ce plugin est actuellement en version 3.0.1, et est utilisé depuis 2009 avec une grande communauté et un support réactif. Le coût d’une licence complète est de 79 $, ce qui est un prix très raisonnable qui peut être rapidement payé pendant le processus des projets. Bien qu’il soit testé et approuvé, pour concevoir des thèmes compatibles, il faudra comprendre son fonctionnement. 

I. FONCTIONNEMENT WPML ET CONFORMITÉ DES STANDARDS

Linstallation du plugin créera des tables dans votre base de données. L’une d’entre elles (icl_translations) est utilisée pour stocker les liaisons entre les articles, les taxonomies et les facteurs des divers langages. D’habitude, on y trouve ce type d’informations : 

“La page d’ID 90 est la version anglaise de la page d’ID 4, qui elle est française, et appartient au groupe de traduction I22”

Lors de chaque requête WordPress, WPML vérifie cette table pour voir si l’objet demandé correspond à la langue actuelle ou s’il il en trouve une. Il utilisera alors un hook, comme posts_where, pour pouvoir filtrer le rendu de la requête et ne conserver que les contenus de la langue active.

L’un de ces rares inconvénients est l’utilisation de cette table, car en effet, l’interroger augmente le nombre de requêtes. 

1.1. FAIRE DE VRAIES REQUÊTES

Certains des problèmes que vous allez rencontrer avec WPML sont dus à des requêtes “étranges”. L’extension utilise des hook pour changer le comportement de WordPress. L’utilisation de la classe WP_Query est le meilleur moyen de s’assurer qu’elle fonctionne correctement (les objets renvoyés seront bien clarifiés). Vous pouvez utiliser des ids d’éléments ou des slugs des post types, mais pas des noms (traduits). 

Alors bien sûr, vous devez interdire les requêtes SQL contre des contenus (LOL). Évitez également d’utiliser get_post() et get_post(). Ce dernier cherche chaque contenu sans pour autant appliquer de filtres.

1.2. UNE ARBORESCENCE LOGIQUE DE TEMPLATE

Lorsque la structure de vos templates est erronée, il existe d’autres cas où le plugin risque de vous décevoir. L’utilisation de la template Hierarchy est certaine. Certains thèmes premiums se servent des templates de pages adaptés pour l’affichage des archives de post type.  WPML peut se perdre. De la même manière, si vos boucles sont imbriquées dans différentes boucles.

L’extension n’aura aucun problème à l’ajouter, si votre thème est cohérent.

II. LES FONCTIONS NÉCESSAIRES DE WPML

Ce plugin de traductions fournit aux développeurs plusieurs “template tags” pour intégrer facilement  WPML dans leurs thèmes. 

Nous allons aborder comment marchent les fonctionnalités les plus utiles. C’est pas nécessaire d’installer WPML lors de l’activation de votre thème, utilisez donc ce support : 

<?php

if( function_exists( ‘icl_get_languages’ ) ) { 

    //… Do stuff

}

2.1. ICL_OBJET_ID : OBTENIR L’ID DU CONTENU TRADUIT

L’une des fonctionnalités principale la plus importante de WPML, selon nous c’est celle ci le icl_objectif_id qui a pour but d’obtenir l’ID de l’article en fonction de la langue. 

On l’utilise dans ces deux cas :

    • si vous connaissez l’identifiant de contenu dans la langue principale et que qu’il faut que vous obtenez l’ID de sa traduction; 
    • si vous arrivez à accéder à l’ID d’un contenu dans la langue actuelle et que vous désirez trouver l’ID du post dans une certaine langue spécifique. 

Cette fonction prend jusqu’à 4 arguments en séquence :

    1. L’ID du contenu
    2. Le type de contenu 
    3. Un argument booléen  qui indique l’id de l’élément, si la traduction n’existe pas
    4. La langue voulue

2.2. ICL_LINK_TO_ELEMEMNT :  ETABLIR UN LIEN DE CONTENU LOCALISE

L’utilité de cette fonctionnalité est de créer des liens localisés vers les contenus. Elle permet d’éviter l’utilisation de get_permalink sur un icl_object_id.

Ses paramètres sont :

    1. L’id du contenu
    2. Le type de contenu
    3. Le texte du lien 
    4. Un tableau d’arguments
    5. L’ancre du lien 
    6. Un booléen qui sert à indiquer si on veut imprimer ou retourner le lien
    7. Un booléen pour un retour au contenu principal si la traduction n’est pas complète

2.3. ICL_GET_LANGUAGES : LISTE DES LANGUES DISPONIBLES 

WPML propose automatiquement un sélecteur de langue que vous pouvez afficher à l’aide de la fonction do_action (language Switcher). Il peut être grossièrement configuré via l’administration, mais il peut ne pas s’adapter nécessairement à votre modèle. 

Elle prend un tableau en argument pouvant contenir les clés suivantes :

    • skip missing (booléen)
    • orderby (id/name/custom)
    • order (asc ou desc)
    • link _empty_ to (str)

2.3. ENLEVER LES CSS ET JS INUTILES

WPML télécharge directement des fichiers CSS et javascript en front, pour mettre à disposition certains composants (à travers des shortcodes). Si vous pensez que vous n’en avez pas besoin, vous pouvez désactiver l’enqueue pour ces facteurs en définissant la valeur true à certaines constantes. 

Il est nécessaire d’intégrer ces lignes dans le fichier wp-config.php :

    • define (‘ICL_DONT_NAVIGATION_CSS’,true)
    • define (‘ICL_DONT_LOAD_LANGUAGE_SECTOR_CSS’,true)
    • define (‘ICL_DONT_LOAD_LANGUAGES_JS’, true)

2.4. LES INFORMATIONS CONCERNANT LA LANGUE COURANTE

Le plugin fournit plusieurs constantes qui vous permettent d’accéder à des informations sur la langue active.

    • ICL_LANGUAGE_CODE pour différer le format de la langue 
    • ICL_LANGUAGE_NAME pour avoir le nom de la langue
    • ICL_LANGUAGE_NAME_EN pour renvoyer le nom de la langue 

III. TRADUCTIONS DES CONTENUS STATIQUES

WPML fournit une interface simple pour administrer vos contenus dynamiques tels que le contenu statique. Ainsi, vous devez tout de même utiliser les fonctions de positionnement normal pour les “mots en dur” de votre thème.

3.1. LES TYPES DE FONCTIONS DE TRADUCTION 

_ _( ‘CHAINE-A-TRADUIRE’,’DOMAINE’)

Le domaine de traduction fait référence au fichier po qui guide les traductions de vos templates. C’est une bonne idée de lui donner le nom de votre thème. Il est renseigné si la traduction est disponible dans le fichier po de WordPress.

_E(‘CHAINE-A-TRADUIRE’,’DOMAINE’)

Elle est comme la précédente, à un détail prêt car le texte renvoyé est imprimé directement. Il n’est donc pas nécessaire de faire un echo.

_X(‘CHAINE-A-TRADUIRE’,’CONTEXTE’,’DOMAINE’)

Elle fonctionne comme la fonction __(), mais va vous permettre de contextualiser la chaîne à traduire. Il est possible d’avoir plusieurs traductions selon le contexte de la phrase.

_N(‘CHAINE-SINGULIERE-A-TRADUIRE’,’CHAINE-PLURIEL-A-TRADUIRE’,QUANTITE, ‘DOMAINE’)

Certains textes peuvent s’accorder en nombre avec un élément en dehors de la chaîne. Le paramètre de quantité doit être un nombre entier mais pas décimal. Les deux premiers arguments indiquent la chaîne à traduire respectivement au singulier et au pluriel.

WP_SPRINTF(_ _(‘JE SUIS %S’,’DOMAINE’), $NOM)

Parfois, vous devez placer des variables dans du texte statique. La fonction wp_sprintf a été créé pour cela. Au moins 2 paramètres sont requis :

    1. Une fonction de texte à traduire
    2. les variables qui vont venir 

Votre thème peut être traduit lorsque les textes statiques sont contenus à l’intérieur de ces fonctions. Voici deux possibilités : 

    • Le Logiciel poedit
    • WPML String Translations 

3.2. TRADUIRE LES SLUGS DES POST TYPES

Il y a pas longtemps, la traduction de slugs des types de contenu personnalisé demandait beaucoup de travail. La seule astuce qui a fonctionné était ScreenFeed. 

<?php

register_post_type( ‘book’, array(

    ‘public’ => true

    ‘has_archive’ => true,

    ‘slug’ => _x( ‘livres’, ‘URL slug’, ‘domain’ )

) );

3.3. HOOKER LES TEXTES EN OPTION

Certains thèmes ,mal conçus, vous inviteront à enregistrer du contenu textuel dans vos paramètres WordPress. Le soucis est que le texte saisi ici ne peut pas être traduit.

Il existe un moyen pour vous aider à hooker la récupération de ces options. 

<?php

add_filter( ‘option_option_a_traduire’, ‘my_option_a_traduire’ );

function my_option_a_traduire( $text ) {

return __( ‘le nouveau texte’, ‘domain’ );

}

IV. TRADUCTION DES AUTRES CONTENUS

Les pages de liste affichent des drapeaux qui vous permettent de créer diverses versions d’un même contenu. Vous pouvez également personnaliser les détails de la traduction via des meta-box, dans des pages d’édition de ces pages (langue, article, etc.)

4.1. OPTION DES CONTENUS À TRADUIRE

Seuls vos articles et pages seront traduits automatiquement. Si vous voulez versionner vos catégories, tags, post types et autres taxonomies, vous devez accéder au menu “gestion de la traduction, puis à l’onglet “configuration du contenu multilingue”.

Ici, vous pouvez paramétrer  les contenus à traduire, mais vous pouvez également configurer les meta-données qui peuvent être traduites ou les contenus qui peuvent être synchronisés (automatiquement copiés). 

4.2. TRADUIRE LES MENUS 

Le système de traduction de  menu est très facile à utiliser. Chaque menu est étiqueté avec la langue et la boîte. Lorsque vous commencez à traduire les menus, il est  possible de faire des erreurs qui les induisent en d’autres langues.  

Un petit détail est tout de même intéressant. Les facteurs pouvant être placés dans le menu traduit sont affichés dans cette langue. Par conséquent, pour concevoir un menu japonais, vous devez comprendre le japonais.

 

V. LES EXTENSIONS COMPATIBLES

WPML reste l’un des plugins premiums les plus utilisés. Par conséquent, il est relativement compatible avec la majeure partie des extensions WordPress. Vous prouvez sur le site de WPML la liste des plugins compatibles. Par contre, il a un problème avec les redirections qui lancent automatiquement des redirections 301 vers les contenus principaux.

En résumé, WordPress est idéal pour la traduction de contenu et la gestion multilingue et transnationales. Vous devez juste connaitre les extensions pour réussir les paramétrages.