Internationaliser un site Drupal, les bonnes pratiques

Rédigé par Teddy Vermeulin le 16/10/2023

Dernière mise à jour le 14/03/2024

L'adoption de chaînes traduisibles dès les phases initiales de développement facilite grandement l'internationalisation d'un site web. Cette approche stratégique assure une transition fluide vers plusieurs langues, optimisant l'accessibilité globale du site.

Les chaînes traduisibles

Utilisation des chaînes traduisibles en PHP

Le service Drupal::translation() dans Drupal permet aux développeurs d'accéder à l'API de traduction de chaînes de caractères, facilitant ainsi la traduction de textes statiques et dynamiques. 

/* Traduction d'une chaîne simple */ Drupal::translation()->translate('String to translate'); /* Traduction d'une chaîne dynamique */ Drupal::translation()->translate('String to translate with @variable', [ '@variable' => $variable, ]); /* Traduction d'une chaîne simple au singulier et au pluriel */ Drupal::translation()->formatPlural(@count, 'A string in singular to translate', '@count strings in plural to translate'); /* Traduction d'une chaîne dynamique au singulier et au pluriel */ Drupal::translation()->formatPlural(@count, 'A string in singular to translate with @variable', '@count strings in plural to translate with @variable', [ '@variable' => $variable, ]); /* Traduction d'une chaîne simple avec un contexte */ Drupal::translation()->translate('String to translate whith context', [], [ 'context' => 'Female' ]); /* Traduction d'une chaîne dynamique avec un contexte */ Drupal::translation()->translate('String to translate with context and @variable', [ '@variable' => $variable, ], [ 'context' => 'Female' ]);

Utilisation des chaînes traduisibles en Twig

Pour rendre vos chaînes de texte traduisibles en Twig, vous devez utiliser le filtre |t ou les tags {% trans %} {% endtrans %} afin de permettre à Drupal de reconnaître celles-ci pour les traduire selon la langue configurée sur le site.

{# Traduction d'une chaîne simple (filtre) #} {{ 'String to translate'|t }} {# Traduction d'une chaîne simple (tags) #} {% trans %} String to translate {% endtrans %} {# Traduction d'une chaîne dynamique (filtre) #} {{ 'String to translate with @variable'|t({'@variable': variable}) }} {# Traduction d'une chaîne dynamique (tags) #} {% trans %} String to translate with {{ variable }} {% endtrans %} {# Traduction d'une chaîne simple au singulier et au pluriel (tags) #} {% trans %} A string in singular to translate {% plural count %} {{ count }} strings in plural to translate {% endtrans %} {# Traduction d'une chaîne dynamique au singulier et au pluriel (tags) #} {% trans %} A string in singular to translate with {{ variable }} {% plural count %} {{ count }} strings in plural to translate with {{ variable }} {% endtrans %} {# Traduction d'une chaîne simple avec un contexte (filtre) #} {{ 'String to translate whith context'|t({}, {'context' : 'Female'}) }} {# Traduction d'une chaîne dynamique avec un contexte (filtre) #} {{ 'String to translate whith context and @variable'|t({'@variable': variable}, {'context' : 'Female'}) }}

Utilisation des chaînes traduisibles en JavaScript

Drupal propose une méthode pratique pour traduire des chaînes dans vos scripts JavaScript, en utilisant la fonction Drupal.t().

Il est important de noter que pour être reconnu par Drupal, vous devez vider votre cache vi la commande drush cr. Par ailleurs, une attention particulière doit être accordée lors de l'emploi de systèmes d'optimisation de code, tels que le prétraitement. En effet, lors de la minification des ressources JavaScript, il est possible que la syntaxe de la fonction Drupal.t() soit altérée, ce qui pourrait empêcher Drupal de l'identifier correctement. Afin d'éviter de telles complications, assurez-vous que vos outils de minification soient configurés pour ne pas modifier les appels à cette fonction.

((Drupal) => { Drupal.behaviors.myCustomBehavior = { attach() { // Traduction d'une chaîne simple const string = Drupal.t("String to translate"); // Traduction d'une chaîne dynamique const variable = "Ma variable"; const string = Drupal.t("String to translate with @variable", {"@variable": variable}); // Traduction d'une chaîne simple au singulier et au pluriel const count = 3; const string = Drupal.formatPlural(count, "A string to translate", "@count strings to translate"); // Traduction d'une chaîne dynamique au singulier et au pluriel const count = 3; const variable = "Ma variable"; const string = Drupal.formatPlural(count, "A string to translate with @variable", "@count strings to translate with @variable", {"@variable": variable}); // Traduction d'une chaîne simple avec un contexte const string = Drupal.t("String to translate whith context", {}, {"context": "Female"}); // Traduction d'une chaîne dynamique avec un contexte const variable = "Ma variable"; const string = Drupal.t("String to translate whith context and @variable", {"@variable": variable, {"context": "Female"}); } }; })(Drupal);

Configuration de Drupal

Activation des extensions nécessaires

Pour initier le processus d'internationalisation de votre site Drupal, il est impératif d'intégrer des modules spécifiques dédiés à la gestion des traductions. Accédez à l'interface de gestion des modules via le chemin /admin/modules dans votre tableau de bord Drupal. Une fois sur cette page, procédez à l'activation des extensions suivantes :

  • Interface Translation (locale)
  • Language (language)

Ajout des langues et gestion des traductions

Après avoir activé les modules nécessaires, l'étape suivante consiste à configurer les langues de votre choix pour votre site. Dirigez-vous vers la section de configuration des langues via le chemin /admin/config/regional/language dans l'interface d'administration. Ici, vous aurez la possibilité d'ajouter et de gérer les langues selon les besoins spécifiques de votre projet.

Une fois les langues configurées, vous pourrez passer à la traduction des différentes chaînes de texte de l'interface utilisateur. Pour cela, accédez à la section Traduction de l'interface utilisateur en naviguant vers /admin/config/regional/translate. Cette interface vous permettra de rechercher, de modifier et de traduire les chaînes de texte utilisées dans l'interface de votre site.

Il est important de noter que si une chaîne spécifique ne semble pas disponible pour la traduction, il se peut que vous ayez besoin de rafraîchir le cache de Drupal pour que le système puisse la détecter. Vous pouvez vider le cache via l'interface d'administration (/admin/config/development/performance) ou en utilisant la commande drush cr. Ce processus permet à Drupal de mettre à jour et de reconnaître les nouvelles chaînes traduisibles.

Anticiper l'internationalisation : une stratégie efficace

En tant que développeur, il est crucial d'anticiper la possibilité d'internationaliser un site web dès le début du projet. Intégrer des chaînes traduisibles tout au long du processus de développement est une stratégie judicieuse qui peut se révéler extrêmement bénéfique si une internationalisation devient nécessaire lors d'une mise à jour future. En effet, prévoir cette éventualité dès les premières étapes de la création de votre site permet d'éviter des modifications laborieuses et onéreuses plus tard.

Si vous parlez à un homme dans une langue qu’il comprend, vous parlez à sa tête. Si vous lui parlez dans sa langue, vous parlez à son cœur.

Nelson Mandela