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

21avr/093

Flex Tips – Insérer des caractères accentués dans un Resource Bundle (bug d'encodage)

Beaucoup de tutoriaux sur flex-tutorial portent sur l'internationalisation d'applications Flex grâce aux resource bundles. Pour en savoir plus sur ces manipulations, consultez la partie Flex Localization de la liste des tutoriaux Adobe Flex. Admettons que vous vouliez internationaliser votre application, et que vous voulez passer une partie de votre application en Français. Pour cet exemple, je vais simplement reprendre le code de l'exemple sur le changement de locale dynamique.

Voici notre fichier de langue Français:

# locale/fr_FR/RegistrationForm.properties
registration_title=Inscription
submit_button=Valider le formulaire
personname=Nom
street_address=Rue
city=Ville
state=Etat
zip=Code Postal
thanks=Merci pour votre enregistrement
flag=Embed("images/flag_french.gif")

Jusque là, tout va bien, car aucune des chaînes ne contient d'accent, ni de caractères spéciaux. Modifions maintenant la ligne state=:

state=état

Voici à quoi va ressembler notre application:

bug encodage Flex

Voici le bug, à la place de notre "é", Flex nous affiche un carré. Si vous avez déjà assez d'expérience dans le dev web, vous avez peut-être déjà vu ce problème dans du HTML, du à un mauvais encodage des caractères. Et bien ici, c'est le même problème.

21avr/094

Flex Localization – Formatter des dates, temps et unités suivant la locale

La façon d'afficher les dates, temps ou les devises varient grandement pour chaque locale. Par exemple, le standard américain pour représenter les dates est mois/jour/année, alors que le standard en Europe et donc en France est plutôt jour/mois/année. Vous pouvez utiliser les Resource Bundles pour formater des valeurs (en utilisant les Formatter Flex). Vous pouvez utiliser les valeurs contenues dans les Resource Bundles pour fixer les propriétés des composants Flex comme le DateFormatter ou le CurrencyFormatter.

De base, le framework Flex utilise des valeurs formatées  au standard US. Si vous avez une application en Français, il faut donc modifier les propriétés des composants. Vous pouvez le faire directement si vous êtes sûr que votre application ne sera utilisée que par un public Européen. Si vous voulez créer une application multi-langue, les Resource Bundles conviendront parfaitement.

Voici par exemple, les fichiers utilisés pour configurer des DateFormatter et CurrencyFormatter pour les locales en_US et fr_FR:

# locale/en_US/FormattingValues.properties
THEMECOLOR=0x0000FF
DATE_FORMAT=MM/DD/YY
TIME_FORMAT=L:NN A
CURRENCY_PRECISION=2
CURRENCY_SYMBOL=$
THOUSANDS_SEPARATOR=,
DECIMAL_SEPARATOR=.

# locale/fr_FR/FormattingValues.properties
THEMECOLOR=0xFF0000
DATE_FORMAT=DD/MM/YY
TIME_FORMAT=HH:NN
CURRENCY_PRECISION=2
CURRENCY_SYMBOL=€
THOUSANDS_SEPARATOR=.
DECIMAL_SEPARATOR=,
21avr/093

Flex Localization – Pré-chargement de Resource Modules (preload)

Vous pouvez charger un Resource Module quand l'application démarre en appelant la méthode loadResourceModule() au moment de l'évènement initialize, et en spécifiant une valeur pour la propriété localeChain une fois que le module est chargé. C'est utile si vous avez une langue par défaut et que vous voulez que tous les utilisateurs démarrent avec cette langue.

Vous pouvez aussi spécifier la locale que l'application va charger par défaut en la passant en FlashVars dans le conteneur HTML.

Voici les variables flashVars que vous devez passer pour précharger les Resource Modules:

  • localeChain: Une liste (séparateur ",") de locale pour l'initialisation de la propriété localeChain de la classe ResourceManager. Si la propriété localeChain n'est pas explicitement fixée, localeChain sera initialisée avec la valeur passée dans l'option -locale du compilateur
  • resourceModuleURLs: Une list (séparateur ",") d'URL depuis lesquelles les Resource Module seront chargés. Les resource Modules sont chargés pas la même classe que les RSLs, mais sont chargés après les RSLs. Ces URLs peuvent être relatives ou absolues

Comme pour des paramètres dans une URL, vous devez séparer ces valeurs par un "&" et vous devez vous assurer que les caractères sont bien encodés.

21avr/093

Flex Localization – Chargement de Resource Modules à la volée

Pour charger un Resource Module à l'exécution, vous allez utiliser la méthode loadResourceModule() du ResourceManager. Une fois que le Resource Module a fini son chargement, vous pouvez fixer la valeur de la propriété localeChain à une nouvelle valeur correspondant à la locale que vous venez de charger.

La méthode loadResourceModule() de ResourceManager est une méthode asynchrone (pouvant être comparée à la méthode loadStyleDeclarations() du StyleManager qui charge des themes Flex).

La méthode loadResourceModule() prend plusieurs paramètres. Le premier paramètre est l'URL du fichier SWF  du Module. C'est le seul paramètre obligatoire. Le second paramètre est "update". Vous pouvez le mettre à true ou false, suivant si vous voulez que l'application soit mise à jour tout de suite après le chargement du RM. Les deux paramètres suivants sont applicationDomain et securityDomain. Ces paramètres spécifient les domaines dans lesquels les Resource Modules sont chargés. Ces derniers ne sont nécessaires que si vous essayez de charger de modules venant d'autres domaines que celui où est hébergé l'application.

La méthode loadResourceModule() retourne une instance de la classe IEventDispatcher. Vous pouvez utiliser cet objet pour dispatcher des évènements de type ResourceEvent, qui vont indiquer le succès ou l'échec du chargement du module. Vous aurez accès aux évènements ResourceEvent.PROGRESS, ResourceEvent.COMPLETE et ResourceEvent.ERROR pendant le chargement.