Mise en place d'un site Drupal 7 éditorial multilingue

Etapes de transformation d'un site Drupal monolingue en site multilingue.

Le blog Makina-corpus

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

Drupal

Drupal Administrateur

Aucune session de formation n'est prévue pour le moment.

Pour plus d'informations, n'hésitez pas à nous contacter.

Voir la formation

Drupal

Drupal Développeur

Aucune session de formation n'est prévue pour le moment.

Pour plus d'informations, n'hésitez pas à nous contacter.

Voir la formation

Actualités en lien

Image
Drupal 9
04/11/2021

Migration de Drupal 8 à Drupal 9

Retour d'expérience sur la montée de version de plusieurs sites de Drupal 8 à Drupal 9.

Voir l'article
30/12/2020

Varnish et Drupal 9 : le vidage de cache ciblé

La mise en place d'un cache de pages anonymes Varnish devant un Drupal 9 permet une mise en place relativement aisée d'un vidage automatique des pages mises en cache en se basant sur la politique de tags de Drupal. Cet article devrait vous donner les bases pour commencer à comprendre et expérimenter le système.

Voir l'article
11/09/2020

Migration d'un site Drupal 7 en Drupal 9

Trucs, astuces et bouts de code pour migrer votre site web de Drupal 7 à Drupal 9

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus