Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

20avr/090

Flex Localization – Création de Resource Modules

Les Resource Modules sont des fichiers SWF, séparés du SWF de l'application, qui contiennent les Resource Bundles pour une "locale". Votre application peut pré-charger (preload) un ou plusieurs Resource Modules au démarrage, avant l'affichage de l'interface utilisateur. Elle peut aussi charger un Resource Module plus tard, en réponse à un utilisateur sélectionnant sa nouvelle langue par exemple. Le ResourceManager interagit avec tous types de Resource Bundles, compilés avec l'application ou chargés dynamiquement.

Les Resource Modules peuvent être une bonne approche pour internationaliser une application car vous allez externaliser les Resource Modules et les charger at run time. Cela permet donc de créer de plus petits fichiers SWF, mais requiert aussi que vous sépariez chaque fichier SWF pour chaque module que vous allez utiliser. Cela peut donc augmenter le nombre de requêtes réseau (autant de requêtes que de fichiers SWF à charger) et alourdir l'application si de nombreux SWF différents sont chargés. Cependant, si vous avez de nombreuses langues à gérer, le chargement à la volée vous fera sûrement gagner du temps.

Vous ne pouvez utiliser les resources contenues dans les Resource Modules que pendant la séquence d'initialization de votre application. Le plus tôt que vous y aurez accès est pendant l'évènement preinitialize de l'application. Vous ne devez pas essayer d'accéder aux resources pendant le preloading par exemple.

Création de Resource Modules

Avant de compiler un Resource Module, vous devez savoir quels Resource Bundles y intégrer. Vous devez donc savoir quels Resource Bundles de votre application (et des classes du framework) sont requis. Cela n'inclut pas seulement le Resource Bundle personnalisé que vous créez, mais aussi les RB du framework qui sont requis par votre application.

Pour déterminer quels RB votre application a besoin, vous allez utiliser l'option "-resource-bundle-list" du compilateur. Quand vous allez l'utiliser, cette option va sortir une liste des Resource Bundles nécessaires en examinant les metadata [ResourceBundle] dans toutes les classes de votre application.

L'option "resource-bundle-list" prend un nom de fichier en argument. Ce nom de fichier représente l'emplacement où le compilateur va écrire la liste de Bundles.

Sur un Mac OS X, vous devez spécifiez un chemin absolu pour cette option. Pour tous les autres OS, vous pouvez spécifier un chemin absolu ou relatif.

Quand vous utilisez l'option  "resource-bundle-list", vous devez aussi fixer la valeur de l'option -locale à une chaîne vide.

Remplis sous: Localization Lire la suite
20avr/090

Flex Localization – ResourceManager et ses différentes méthodes (getString, getInt, getClass…)

Le ResourceManager peut gérer tous les Resource Bundles, peu importe leur source (ils peuvent être chargés en tant que Resource Modules, compilés dans l'application ou crées par du code).

La classe ResourceManager est un Singleton. Tous les composants qui héritent de UIComponent, Formatter ou Validator ont une propriété "resourceManager", qui vous permet d'accéder au manager. Si vous créez d'autres classe qui ont besoin d'utiliser le ResourceManager, vous pouvez toujours appeler ResourceManager.getInstance() pour récupérer une référence vers ce singleton.

Dès que vous modifiez la valeur de la propriété "localeChain", le ResourceManager propage un évènement "change". Cet évènement provoque la mise à jour de toutes les propriétés liées à des resources.

Vous pouvez dispatcher cet évènement "change" manuellement en utilisant la méthode update() du ResourceManager.

L'évènement change provoque les évènements suivants:

  • Les expressions ayant un data binding sur les méthodes du ResourceManager telles que getString() seront mises à jour.
  • Les composants qui héritent de UIComponent, de Formatter ou de Validator exécutent leur méthode "resourceChanged()". C'est de cette manière que des composants tels que le CurrencyFormatter peuvent mettre à jour leurs valeurs par défaut telles que "currencySymbol". Si vous écrivez une autre classe qui a besoin de répondre aux évènements "change, vous pouvez écouter cet évènements de ResourceManager.

La propriété "localeChain" est un tableau (Array) pour que le ResourceManager puisse supporter les langues incomplètes. Par exemple, supposons que vous fassiez de la localization pour une application en Anglais tel qu'il est parlé en Inde (en utilisant a locale en_IN). La plupart des ressources sont les mêmes que pour la locale "en_US", il n'y a donc aucune raison de dupliquer toutes les propriétés dans le Resource Bundle pour la langue en_IN. Le fichier properties en_IN a seulement besoin d'avoir les resources qui diffèrent entre en_US et en_IN. Si le ResourceManager a des Bundles pour à la fois en_US et en_IN, et que vous fixez la valeur de localeChain à ["en_IN", "en_US"], le ResourceManager va chercher la resource en premier dans le Bundle en_IN. S'il ne la trouve pas, il va la chercher dans le bundle en_US. S'il ne la trouve pas non plus, il retournera "null".

Les différentes méthodes du ResourceManager

La méthode la plus couramment utilisée du ResourceManager est la méthode getString(), qui permet de récupérer des chaînes. C'est ce qui sert le plus pour une internationalisation  (i18n) d'application.

Cependant, le ResourceManager supporte d'autres types de données. Vous pouvez récupérer des ressources typées comme Number, Boolean, uint ou int…