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

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…

Imaginons que vous ayez le fichier properties suivant:

COUNTRY=United States
PRICE=19.99
AGE=21
SENIOR=true

Si vous récupérez ces valeurs avec la méthode getString(), elles seront toutes de type String. Le compilateur ne va pas se dire que SENIOR est à true et va la typer en Boolean, il va simplement renvoyer la chaîne "true".

Cependant, ResourceManager a d'autres méthodes d'accès aux resources que getString(). Par exemple:

resourceManager.getNumber("myResources", "PRICE"); // return un Number 19.99, pas la String "19.99"
resourceManager.getInt("myResources", "AGE"); // return un int 21, pas la String "21"
resourceManager.getBoolean("myResources", "SENIOR") // return un Boolean true, pas la String "true"

Ces méthodes, comme getString(), sont en fait des"wrappers" autour de la méthode fondamentale getObject(), qui retourne la valeur sans conversion.

Vous pouvez aussi stocker des images ou des classes (pour des skins par exemple) dans les fichier properties comme ceci:

LOGO=Embed("logo.png")
SORTER=ClassReference("sorters.Urdu")

Ces directives fonctionnent de la même manière que les directives CSS ou les tags <mx:Style>. Vous pouvez utiliser la méthode getClass() pour accéder à ces ressources.

Vous pouvez aussi récupérer directement un tableau de valeur avec la méthode getStringArray().

Imaginons que vous ayez dans votre fichier properties Flex:

COUNTRIES=India, China, Japan

Vous voulez récupérer [ "India", "China", "Japan" ] et pas la chaîne "India, China, Japan". Et bien il suffit de faire:

resourceManager.getStringArray("myResources", "COUNTRIES"); // return un Array

Articles similaires

Commentaires (0) Trackbacks (0)

Aucun commentaire pour l'instant


Leave a comment

(required)

Aucun trackbacks pour l'instant