Les ressources de type "i18n" (localisation)
Généralités
Il est très important de pouvoir "localiser" (ou régionaliser) nos applications. Localiser une application permet de rendre dynamique son contenu (texte, sonore ou autres) en créant une interface utilisateur qui peut changer en fonction d'une langue en particulier. La localisation d'une application permet d'améliorer l'accessibilité pour différents utilisateurs et il est certain qu'avec toutes les difficultés que l'on peut avoir pour communiquer de façon général, il est tout de même sympathique de pouvoir le faire avec le plus grand nombre dans le monde entier.
Une bon moteur de localisation permet de changer à tout moment les traductions et éléments graphiques de l'application en fonction de données traduites dans plusieurs langues. Il est certain que le plus souvent la localisation d'un site passe par une page d'accueil simple qui permet de diriger l'utilisateur vers une version spécifique de l'application avec un contenu régionalisé.
Fonctionnalités importantes du moteur de localisations définies dans AndromedAS :
- Externalisation des traductions et documents.
- Utilisation de fichiers ou données externes encodées en UTF8.
- Moteur dynamique au "runtime". La localisation doit être totalement dynamique et doit intervenir après la compilation (plus léger et plus simple à maintenir)
- API simplifiée permettant de centraliser les mises à jours de l'interface utilisateur via un mapping utilisant plusieurs stratégies selon les besoins.
- Par défaut, utilisation du format de donnée eden ou JSON (http://www.json.org). Malgré tout il est assez simple de créer un module de parsing basé sur une autre notation comme du XML.
Dans Flash et surtout dans le framework de base ActionScript nous trouvons la propriété flash.system.Capabilites.language qui permet à tout moment de renvoyer le code langue du système dans lequel l'application swf vient d'être lancée. L'ActionScript se base sur des noms des "codes langue" au format ISO 639-1, par exemple la propriété language aura pour valeur "fr" si le système par défaut est un système français.
Implémentation du moteur de localisation de AndromedAS
Dans AndromedAS le moteur de localisation se trouve dans le package andromeda.i18n.
1 - La classe andromeda.i18n.Lang
La première classe que nous allons étudier dans ce package est la classe andromeda.i18n.Lang qui permet d'énumérer les "codes langue" par défaut définis par la norme ISO 639-1 dans le FlashPlayer.
Cette classe donne un outil simple pour valider dans vos applications les langues disponibles.
Il est ainsi possible d'ajouter d'autres langues en cas de besoin dans la liste des langues par défaut du FlashPlayer mais bien entendu elle ne seront pas prises en compte automatiquement par la propriété flash.system.Capabilities.language (AS3) du FlashPlayer.
Voici un exemple d'utilisation de cette classe :
import asgard.i18n.Lang ;
trace( "Lang.ES.toString() : " + Lang.ES.toString() ) ; // es
trace( "Lang.ES.valueOf() : " + Lang.ES.valueOf() ) ; // es
trace( "Lang.ES.toSource() : " + Lang.ES.toSource() ) ; // new andromeda.i18n.Lang( "es" , "Spanish" )
trace( "Lang.ES.label : " + Lang.ES.label ) ; // Spanish
trace( "Lang.get('fr') == Lang.FR : " + ( Lang.get("fr") == Lang.FR ) ) ; // true
trace( "Lang.validate('fr') : " + Lang.validate('fr') ) ; // true
trace( "Lang.validate( Lang.FR ) : " + Lang.validate( Lang.FR ) ) ; // true
trace( "Lang.LANGS : " + Lang.LANGS ) ;
// {pl:pl,nl:nl,es:es,tr:tr,it:it,da:da,pt:pt,fi:fi,zh-CN:zh-CN,no:no,ja:ja,de:de,ru:ru,fr:fr,zh-TW:zh-TW,xu:xu,ko:ko,en:en,sv:sv,cs:cs,hu:hu}
trace( "Lang.LANGS.size() : " + Lang.LANGS.size() ) ; // 21
2 - Fichier externe et nomenclature
Les données externes permettant la création des différentes versions du contenu de l'application localisée doivent être par défaut au format eden. Le format eden permet de créer rapidement des fichiers de configuration simples.
En général, il est possible d'utiliser une nomenclature spécifique pour créer les fichiers textes externes de localisation. Par exemple pour créer un fichier de configuration en français avec un contexte spécifique, il suffira de créer le fichier :
- "locale/localize_fr.eden".
Nous isolons donc cette notation en la divisant en 4 éléments distincts : {path}{prefix}{lang}[suffix}
Il existe une interface simple qui permet de créer facilement des objets qui permettent de charger les fichiers de localisation.