Flex Localization – Utilisation des Resource Bundles avec le ResourceManager
Pour utiliser des Resource Bundles en ActionScript, vous pouvez utiliser les méthodes de la classe ResourceManager, comme getString() ou getClass(). L'utilisation de ResourceManager est plus flexible que celle de la directive @Resource car elle vous permet de faire des changements de manière dynamique, plutôt que de fixer les valeurs directement par rapport aux propriétés des Resource Bundles. Cela vous permet aussi de changer de locale à l'exécution afin que toutes les Resources (textes, images, ...) localisées de votre application soient mises à jour à la fois.
Quand vous utiliser le ResourceManager, vous devez spécifier les metadata qui définissent les resources bundles de votre application. En MXML, la syntaxe pour ces metadata est la suivante:
<mx:Metadata>
[ResourceBundle("Resource_file_name")]
</mx:Metadata>
Par exemple:
<mx:Metadata>
[ResourceBundle("RegistrationForm")]
</mx:Metadata>
Pour intégrer plusieurs RB à la fois, ajoutez les chacun sur une ligne dans le même tag mx:Metadata comme dans cet exemple:
<mx:Metadata>
[ResourceBundle("RegistrationForm")]
[ResourceBundle("StyleProperties")]
[ResourceBundle("FormatterProperties")]
</mx:Metadata>
Dans une classe ActionScript, vous devez appliquer les metadata juste au dessus du nom de la classe, comme dans cet exemple:
[ResourceBundle("RegistrationForm")]
public class MyComponent extends UIComponent {
...
}
Vous pouvez aussi faire un Data Binding avec des expressions du ResourceManager. Ces expressions sont mises à jour à chaque changement de la locale.
L'exemple suivant utilise de l'ActionScript pour fixer la valeur d'un message Alert, et fait un binding (liaison) entre les labels du formulaire et les chaînes du Resource Bundle en utilisant la méthode getString() de ResourceManager:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" viewSourceURL="srcview/index.html">
<mx:Script><![CDATA[
import mx.resources.ResourceBundle;
import mx.controls.Alert;
private function registrationComplete():void {
Alert.show(resourceManager.getString('RegistrationForm', 'thanks'));
}
]]></mx:Script>
<mx:Metadata>
[ResourceBundle("RegistrationForm")]
</mx:Metadata>
<mx:Form>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','personname')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','street_address')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','city')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','state')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','zip')}">
<mx:TextInput/>
</mx:FormItem>
</mx:Form>
<mx:Button id="b1" label="{resourceManager.getString('RegistrationForm','submit_button')}" click="registrationComplete()"/>
</mx:Application>
Flex Source Code Download: Télécharger le code source complet de l'application
Le fichier RegistrationForm.properties ainsi que la procédure de compilation se trouvent dans les sources ou sur le tutorial Flex présentant la directive @Resource.
Pour utiliser un élément binaire comme une image avec le ResourceManager, vous devez embarquer (embed) l'image dans le fichier .properties. Vous pourrez ensuite utiliser cet élément n'importe où vous souhaiteriez utiliser une image. Pour embed une image dans un fichier .properties, il faut utiliser la directive Embed() comme ceci:
flag=Embed("images/unitedstates.gif")
Notez que l'emplacement de l'image est relatif à l'emplacement du fichier .properties. Pour utiliser cette image dans votre application, vous devez utiliser la méthode getClass() de ResourceManager. L'exemple suivant utilise un JPG comme skin d'un composant Button mais aussi comme source d'une mx:Image:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()" viewSourceURL="srcview/index.html">
<mx:Script><![CDATA[
import mx.resources.ResourceBundle;
import mx.controls.Alert;
private function initApp():void {
b1.setStyle("downSkin", resourceManager.getClass("RegistrationForm", "flag"));
}
private function registrationComplete():void {
Alert.show(resourceManager.getString('RegistrationForm', 'thanks'));
}
]]></mx:Script>
<mx:Metadata>
[ResourceBundle("RegistrationForm")]
</mx:Metadata>
<mx:Image source="{resourceManager.getClass('RegistrationForm', 'flag')}"/>
<mx:Form>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','personname')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','street_address')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','city')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','state')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','zip')}">
<mx:TextInput/>
</mx:FormItem>
</mx:Form>
<mx:Button id="b1" label="{resourceManager.getString('RegistrationForm','submit_button')}" click="registrationComplete()"/>
</mx:Application>
Flex Source Code Download: Télécharger le code source complet de l'application
Pour utiliser une classe, comme une ProgrammaticSkin en tant que Resource, vous devez utiliser la directive ClassReference() dans vos fichiers .properties:
CHECKBOXSKIN=ClassReference("MyCheckBoxIcon_en_US")
Vous pouvez aussi faire un binding entre la valeur de la méthode getClass() pour les programmatic skin comme dans cet exemple:
<mx:CheckBox selected="true"
selectedUpIcon="{resourceManager.getClass('bundle1','CHECKBOXSKIN')}"
selectedDownIcon="{resourceManager.getClass('bundle1','CHECKBOXSKIN')}"
selectedOverIcon="{resourceManager.getClass('bundle1','CHECKBOXSKIN')}"
/>
Articles similaires
- Flex Localization – Chargement de Resource Modules à la volée
- Flex Localization – Utilisation des Resource Bundles avec @Resource
- Flex Localization – Changement de locale en dynamique avec ResourceManager
- Flex Localization – Formatter des dates, temps et unités suivant la locale
- Flex Localization – ResourceManager et ses différentes méthodes (getString, getInt, getClass…)
Aucun trackbacks pour l'instant





