Makina Blog
Mise en place d'un site Drupal 7 éditorial multilingue
Etapes de transformation d'un site Drupal monolingue en site multilingue.
Contexte
Les spécialites Drupal de Makina Corpus Toulouse a initialement mis en ligne courant 2012 le site de l'école d'ingénieurs de Purpan, en Drupal 7, et uniquement en français. Le module Locale est cependant activé et la langue française est ajoutée (pour permettre la traduction du back-office). Le site est un site éditorial, avec essentiellement des pages de contenu (nodes) et quelques blocs (au sens du module Block du cœur de Drupal).
Voici les étapes que nous avons suivi pour le transformer en site multilingue.
Drupal core
Le cœur de Drupal fournit déjà 2 modules ayant trait à la gestion de langues multiples.
Locale
Le module Locale permet d'ajouter des langues à votre site, et notamment de traduire l'interface d'administration (et toutes les chaines issues des modules Drupal, donc du code). C'est ce qui fournit la page "Configuration" / "Langues".
Ici, un préfixe de langage a été ajouté pour l'anglais (initialement sans préfixe), pour obtenir un comportement uniforme entre toutes les langues. Enfin, la langue espagnole a également été ajouté (elle s'ajoute automatiquement avec un préfixe).
Au niveau de la détermination du langage à utiliser sur la page, la seule stratégie que nous avons activée est de prendre en compte l'URL (par préfixe, et non par domaine, pour rester cohérent avec la manipulation précédente). Nous suivons en cela les recommandations de cet article (écrit par un des mainteneurs du module i18n).
Content Translation
Le pendant du module précédent pour le contenu. Dans l'optique d'un site éditorial, et donc centré sur le contenu, c'est ce module qui va fournir le gros du travail.
Une fois Content Translation activé, vous disposerez dans chacun de vos types de contenu d'un nouveau paramètre : "Configuration multilingue". Vous devez alors choisir l'option adéquate :
- Non multilingue : le contenu est présent à l'identique quelque soit la langue ;
- Multilingue, avec localisation : le contenu est présent dans une seule langue ;
- Multilingue, avec traduction : le contenu est présent de façon différente dans toutes les langues.
Note : en alternative à "Content Translation, il est possible d'utiliser pour les sites plus complexes le module Entity Translation. Il nécessitera également le module Title pour transformer le titre d'un node en champ standard de Drupal. La configuration et l'emploi étant légèrement plus lourds (certes, pour plus de fonctionnalités), ce n'est pas l'option que nous avons retenue ici.
Internationalisation complète du site
Un seul module (en fait, une suite de modules) est utilisée pour rendre le reste du site (hors back-office et "contenu") multilingues : i18n. Cette suite nécessite pour la plupart des modules le module Variable en pré-requis.
Voici les modules que nous avons activés :
- Variable, module fonctionnel, requis par i18n ;
- Internationalisation, module fournissant des fonctions de base d'internationalisation entre les modules suivants, requis également ;
- Variable translation, pour permettre à certaines configurations du site d'être différentes suivant le langage ;
- Block languages, pour pouvoir assigner les blocs à un langage / les traduire ;
- String translation (pour traduire les blocs personnalisés) ;
- Menu translation, pour gérer les menus selon le langage.
Gestion des variables
Seules certaines variables sont multilingues dès l'activation de Variable et i18n. Nous avons alors du permettre à la variable "page d'accueil du site" d'être différente selon le langage dans "Configuration" / "Paramètres multilingues" / "Variables" (cocher, dans "Informations du site", les variables adéquates, notamment "Page d'accueil").
Gestion des blocs
Comme pour les types de contenus, vous disposez sur la page de configuration de chaque bloc d'un réglage possible selon le comportement souhaité :
- Bloc identique sur toutes les pages : ne rien faire ;
- Bloc présent uniquement sur les pages d'une ou plusieurs langues : cocher la ou les case(s) sous "Afficher ce bloc pour ces langages";
- Bloc différent selon les langues : cocher "Traduire ce bloc", et le traduire (comme un contenu).
Attention : pour traduire un bloc personnalisé, il faut activer dans les options d'i18n la possibilité de traduire le format de texte correspondant : dans "Configuration" / "Paramètres multilingues" / "Chaines", il faut cocher "Full HTML" également. Il est possible d'utiliser un éditeur WYSIWYG lors de la traduction de blocs personnalisés, il faut pour cela intégrer à votre site le patch (en cours de développement) disponible ici.
Gestion des menus
Pour gérer les menus, nous disposons de 2 options principales : garder un seul menu avec l'ensemble des élements de toutes les langues (Drupal se chargeant de restreindre ceux associés au langage courant lors de l'affichage), ou créer un menu pour chaque langage, et déterminer manuellement celui qui s'affiche sur chaque page.
La première option permet de ne rien modifier à la construction existante du site, mais complexifie la tâche pour les contributeurs qui ont à choisir dans une liste extrêmement longue au moment de placer le contenu dans le menu (Drupal ne réduit pas les éléments de menu disponibles à ce moment-là). Nous nous sommes orientés vers la deuxième option. Tous nos menus étant mis en place via des blocs (directement ceux fournit par le cœur ou via le module Menu Block), il nous a suffit ensuite de sélectionner le langage sur lequel afficher chaque bloc pour obtenir la configuration définitive de nos menus. Il faut également penser à activer, pour chaque type de contenu, la possibilité d'insérer celui-ci dans les nouveaux menus que nous avons créés pour chaque langage.
Gestion des vues
Le module Views fournit directement une option permettant de filtrer le contenu selon la langue courante du site, il suffit de l'ajouter à toutes les vues que l'on veut restreindre. La traduction de certaines chaines de Views (le titre, notamment), est possible via l'interface de traduction du site.
Quelques problèmes rencontrés
Sur chaque nœud sont affichés des liens pour afficher la version du contenu dans une autre langue : il faut les masquer, soit grâce au module Multilingual Content (module inclus dans i18n), soit avec un bout de code équivalent.
La traduction des Webforms se comporte comme celle d'un nœud ordinaire, et nous oblige donc à recréer le formulaire pour chaque langage.
Il est courant de mettre en place un bloc de changement de langage : nous avons choisi de rediriger systématiquement vers la page d'accueil lors d'un changement de langage, c'était une stratégie assez facile à mettre en place dans la mesure où toutes les pages du site n'étaient pas des nœuds. Il existe le module Path translation, permettant de traduire chaque chemin par langage, nous avons néanmoins choisi cette solution pour réduire le temps de mise en place (avec l'accord du client).
Conclusion
On dit souvent que le multilinguisme fait partie des premières choses à configurer sur un site, sous peine de générer des problèmes plus tard. Si le site est construit en utilisant des modules standards et en respectant les bonnes pratiques Drupal, cela reste cependant tout à fait possible de transformer un site monolingue en site multilingue, en suivant les quelques opérations mentionnées ici. Il ne faut surtout jamais oublier que dans le cadre d'un site multilingue éditorial, la partie la plus coûteuse reste la traduction de l'ensemble du contenu de votre site et non la mise en place technique.
Contactez-nous si vous souhaitez du conseil ou de l'assistance dans la mise en place de votre site Drupal multilingue, ou découvrez notre formation Drupal développeur.
Formations associées
Actualités en lien
Migration d'un site Drupal 7 en Drupal 11
Trucs, astuces et "bouts" de code pour migrer votre site web de Drupal 7 à Drupal 11. Compte-rendu d'une conférence donnée au Drupalcamp Rennes 2024.
Makina Corpus, partenaire du DrupalCamp 2024
Nous sommes fiers d’annoncer que Makina Corpus est le sponsor du DrupalCamp à Rennes. Notre expert vous y propose une conférence « migrer de Drupal 7 à Drupal 10 ».