Module de traduction

Note

Le module de traduction utilise la classe statique TranslatorManager pour gérer les traductions.

Structure du module

Les traductions sont regroupées par domaine, dans une locale :

Dans le répertoire racine des traductions (par défaut app/translations) :

  • Chaque locale correspond à un sous-dossier.

  • Pour chaque locale, dans un sous-dossier, un domaine correspond à un fichier php.

translations
      en_EN
           messages.php
           blog.php
      fr_FR
            messages.php
            blog.php
  • chaque fichier de domaine contient un tableau associatif de traductions key-> valeur de la traduction.

  • Chaque clé peut être associée à
    • une traduction

    • une traduction contenant des variables (entre % et %)

    • un tableau de traductions pour la pluralisation

app/translations/en_EN/messages.php
return [
     'okayBtn'=>'Okay',
     'cancelBtn'=>'Cancel',
     'deleteMessage'=>['No message to delete!','1 message to delete.','%count% messages to delete.']
];

Démarrage du module

Le démarrage du module se fait logiquement dans le fichier services.php.

app/config/services.php
1Ubiquity\cache\CacheManager::startProd($config);
2Ubiquity\translation\TranslatorManager::start();

En l’absence de paramètres, l’appel de la méthode start utilise la locale en_EN, sans fallbacklocale.

Important

Le module de traduction doit être lancé après le démarrage du cache.

Définition de la locale

Changement de la locale au démarrage du gestionnaire :

app/config/services.php
1Ubiquity\cache\CacheManager::startProd($config);
2Ubiquity\translation\TranslatorManager::start('fr_FR');

Changement de la locale après le chargement du gestionnaire :

TranslatorManager::setLocale('fr_FR');

Définition de la fallbackLocale

La locale fr_EN sera utilisée si fr_FR n’est pas trouvée :

app/config/services.php
1Ubiquity\cache\CacheManager::startProd($config);
2Ubiquity\translation\TranslatorManager::start('fr_FR','en_EN');

Définition du répertoire racine des traductions

Si le paramètre rootDir est absent, le répertoire utilisé par défaut est « app/translations ».

app/config/services.php
1Ubiquity\cache\CacheManager::startProd($config);
2Ubiquity\translation\TranslatorManager::start('fr_FR','en_EN','myTranslations');

Faire une traduction

Avec php

Traduction de la clé okayBtn dans la locale par défaut (spécifiée lors du démarrage du gestionnaire) :

$okBtnCaption=TranslatorManager::trans('okayBtn');

Sans paramètres, l’appel de la méthode trans utilise la locale par défaut, le domaine messages.

Traduction de la clé message utilisant une variable :

$okBtnCaption=TranslatorManager::trans('message',['user'=>$user]);

Dans ce cas, le fichier de traduction doit contenir une référence à la variable user pour la clé message :

app/translations/en_EN/messages.php
['message'=>'Hello %user%!',...];

Dans les vues twig :

Traduction de la clé okayBtn dans la locale par défaut (spécifiée lors du démarrage du gestionnaire) :

{{ t('okayBtn') }}

Traduction de la clé message utilisant une variable :

{{ t('message',parameters) }}