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
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.
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 :
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 :
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 ».
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 :
['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) }}