Traduction contextuelle
-
Pour activer les traductions dans votre logiciel, il vous faut appliquer les réglages de localisation : voyez le tutoriel Localisez votre application à ce propos.
it.rocks embarque d’origine un mécanisme de traduction contextuelle, qui permet de traduire un mot ou une phrase en anglais, langue native dans laquelle il est recommandé de développer votre logiciel, différent suivant le contexte.
La plupart des termes traduits dans le logiciel sont utilisés dans le contexte d’une classe : noms de propriétés, titres et libellés d’actions liés à une classe métier, etc. Dans la conception du framework on travaille toujours au moins dans le contexte d’une classe métier annoncée dans le contrôleur, qui traduit une action sur un objet (ou ensemble d’objets) métier.
Lorsque vous saisissez vos traductions sous forme d’objets Translation, il est recommandé de laisser le contexte vide pour la traduction par défaut, ainsi partout dans votre logiciel où le même terme apparaîtra il sera traduit de la même façon.
La traduction contextuelle doit donc être du domaine de l’exception : si vous avez besoin d’une traduction plus précise dans le contexte d’une classe, précisez le nom complet de cette classe comme contexte.
Exemples
Exemple de traduction (objet Translation) par défaut pour un nom de propriété
number
:context => '', language => 'fr', text => 'number', translation => 'numéro'
Mettons qu’on souhaite détailler le numéro en “numéro de commande” si cette propriété est affichée dans une commande :
context => 'Bappli\Bappli\Sales\Order', language => 'fr', text => 'number', translation => 'numéro de commande'
Partout où le logiciel affiche “numéro”, il affichera “numéro de commande” dans le contexte d’une commande de vente.
Contextes intermédiaires : classes abstraites, classes non-finales, traits, interfaces
Il est possible d’appliquer une traduction contextuelle :- à un une classe abstraite : toutes les classes filles appliqueront alors cette traduction,
- à une classe non-finale : toutes les classes filles appliqueront alors cette traduction,
- à une interface : toutes les classes implémentant cette interface et leurs descendantes appliqueront cette traduction,
- à un trait : toutes les classes utilisant ce trait appliqueront cette traduction.
Attention toutefois, les règles de priorité n’étant pas clairement établies à l’heure actuelle, la multiplication des traductions dans différents contextes du même terme pourrait engendrer des conflits que vous ne pourrez pas résoudre : le framework appliquera alors une traduction contextuelle qu’on pourra considérer comme aléatoire parmi celles disponibles, car le choix suit des règles de gestion qui n’ont pas clairement été établies à l’heure actuelle.