Drupal et le multi-linguisme
"Drupal et le multi-linguisme" est un sujet récurrent : quels modules utiliser, quels sont les problèmes courants, est-ce que ça fonctionne avec Ubercart, ... ? Aidé par le travail d'Anthony Garcia (kitkat sur #drupal-fr), je tente de synthétiser quelques points sur ce sujet.
Rôle de chaque module
Pour bien comprendre le multilinguisme en Drupal, il faut comprendre le rôle de chaque module impliqué :
- Locale est un module du core qui permet de traduire les chaines de l'interface (réalisé via l'import de fichiers .po) ;
- Content Translation est un module du core qui permet la traduction de contenus (les "nodes") ;
- i18n est un module qui unifie tout et ajoute une traduction aisée des menus / blocks / ... pour qu'un changement de langue de l'interface soit cohérent sur l'ensemble du site.
Quelques trucs & astuces pour commencer
- Choisir une langue par défaut et ne pas en changer ;
- Donner à chaque langue son propre poids ;
- Ne pas ajouter des éléments de menu via Views ;
- Commencer par mettre en place le système multilingue avant de développer le reste du site, ça évite des régressions ;
- Attention, l'activation d'un module via Drush n'importe pas ses traductions ;
Réalisation d'un site multilingue
Pour être honnête, à cette étape là, tout ce qu'on trouve sur internet ressemble à un mélange entre une recette chamanique, une prière et une espérance qu'on soit LA personne pour qui ça marche. En fait, il n'y a pas de recette miracle, mais, déjà, comprendre qui fait quoi aide pas mal. Voilà la procédure que nous avons suivi. Il faut d'abord activer la partie "core" : Locale & Content Translation. Ensuite, on configure le comportement du multilinguisme :
- Définir la langue par défaut du site (admin/settings/language) ;
- Configurer la négociation de la langage (admin/settings/language/configure) : Path prefix with language fallback.
- Afficher le bloc de sélection de langue (administrer > construction du site > blocs (admin/buil/blocks)) : choisir une région pour le sélecteur de langue.
On peut ensuite activer tous les modules i18n (sauf les facultatis i18n_poll et i18n_profile, selon votre site) et configurer i18n.
Les contenus
Pour chaque type de contenu que l'on souhaite multilingue, faire :
- Edit > Workflow settings > multilingual support > "Enabled, with translation"
- Multilanguage options > Options for node language > cocher "Set current language as default language for new content"
- Multilanguage options > Options for node language > cocher "Require language (Do not allow Language Neutral)"
- Synchronize translation > cocher "Taxonomy terms"
Les menus
2 solutions sont possibles :
- Créer un menu pour chaque language, et afficher ou non le menu via le système d'affichage des blocs (en indiquant la langue du bloc)
- Utiliser un menu dans lequel toutes les entrées de menu sont présentes, et c'est i18n qui se chargera de n'afficher que les entrées correspondant à la langue courante. Cette solution a l'avantage de permettre d'utiliser les menus du coeur Drupal (primary links, secondary links) nativement, mais rend l'administration un peu plus fastidieuse, surtout si beaucoup d'entrées de menus sont présentes.
Les blocs
Rien d'extraordinaire, on peut avoir un bloc pour chaque langue ou en avoir un en pour tous les langages (choisir "All languages (Translatable)").
Les views
il y a pas grand chose, si ce n'est qu'il faut absolument deux filtres :
- Node translation: Language = Current user's language
- Node: Published Yes
Si on ne précise pas qu'on veut les noeuds publiés, l'affichage ne s'opère pas lorsqu'on utilise un argument dans la vue notamment.
La taxonomy
lorsque vous ajouter ou éditer un vocabulaire, il faut cocher "Per language terms. Different terms will be allowed for each language and they can be translated.". Ensuite pour chaque ajout ou édition d'un terme, il faut bien indiquer la langue du terme. Pour finir, dans l'onglet de translation, il suffit de définir a bonne traduction de chaque terme pour chaque langue une fois que l'on a créer le terme avec la bonne langue associée au préalable.
Suivi de l'état du site
Plusieurs modules permettent de suivre l'état du site, à installer selon vos souhaits :
- Translation Status, indiquant l'état de traductions des modules du site ;
- Translation Overview, indiquant l'état de traductions des contenus du site.
Modules additionnels (pour des besoins spécifiques)
- Translation Management, définissant un workflow de traductions pour le site, avec un rôle Translator ;
- Apache Solr Multilingual, complément de Solr pour les sites multilingues ;
Conclusion
Créer un site multilingue en Drupal reste quelque chose qu'il faut réfléchir, concevoir, préparer, mais de plus en plus de modules nous assistent dans cette tache. Attendons de voir ce que Drupal 7 va apporter pour faciliter encore notre travail !