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.

La ligne de commande suivante génère une liste de Resource Bundles nécessaires pour l'application MyApp dans le fichier myresources.txt:

mxmlc -locale= -resource-bundle-list=myresources.txt MyApp.mxml

Dans cet exemple, le compilateur écrit un fichier nommé myresources.txt. Ce fichier contient une liste comme celle-ci:

bundles = RegistrationForm collections containers controls core effects skins styles

Dans Flex Builder, vous pouvez ajouter les options locale et resource-bundle-list dans le champ Additional Compiler Arguments des propriétés de votre projet. Le fichier se trouvera dans le dossier "bin-debug" de votre projet. Vous pouvez toujours mettre un chemin absolu.

Si vous utilisez des Resource Bundles perso, ils seront inclus dans la liste. Dans l'exemple précédent, le nom du fichier properties est RegistrationForm. Les autres sont des bundles du framework.

Vous allez avoir besoin de cette liste pour indiquer au compilateur quels Resource Bundles inclure lors de la compilation d'un Resource Module.

Compilation de Resource Modules

Pour compiler un Resource Module, vous devez utiliser le compilateur en ligne de commande mxmlc. Vous ne pouvez pas compiler des Resources Modules en utilisant Flex Builder. En sortie, vous aurez un fichier SWF que vous pourrez charger at runtime.

Voici les conseils à suivre pour compiler un Resource Module:

  •  Ne spécifiez pas de fichier MXML à compiler
  • Spécifiez l'option include-resource-bundles
  • Spécifiez la locale en utilisant l'option locale
  • Ajoutez les locale au source path

L'option include-resource-bundles prend comme valeur une liste (séparée par des virgules) de Resource Bundles à inclure dans votre resource module. Cette liste est générée par l'option "resource-bundle-list" (voir plus haut).

Attention, ne laissez pas d'espace dans cette liste, sinon vous aurez l'erreur "could not find resource".

Voici un exemple qui va compiler un Resource Module pour la locale en_US:

mxmlc -locale=en_US
    -source-path=locale/{locale}
    -include-resource-bundles=RegistrationForm,collections,containers,controls,core,
     effects,skins,styles
    -output en_US_ResourceModule.swf

Vous pouvez compiler les resources pour une seule locale dans chaque Resource Module. C'est pourquoi vous ne pouvez pas spécifier plus d'une locale dans l'option -locale.

Il est conseillé d'utiliser une convention de nommage commune pour tous vos RM. Par exemple, spécifiez la locale dans le nom du SWF mais garder le reste du nom identique pour toutes les locales. Ainsi, quand vous allez charger un module dynamiquement, vous pourrez savoir quel SWF charger facilement. Par exemple, vous pouvez nommer votre module en_US_ResourceModule.swf pour en_US. Si vous générez un module pour fr_FR, vous le nommerez fr_FR_ResourceModule.swf

Articles similaires

Commentaires (0) Trackbacks (0)

Aucun commentaire pour l'instant


Leave a comment

(required)

Aucun trackbacks pour l'instant