Si quelqu’un vous demande quelles sont les nouveautés du SDK 4.5, qu’allez-vous lui répondre ?
Il est évident que vous mettrez l’accent sur les fonctionnalités pour mobile ou encore sur les nouveaux composants Spark (DataGrid, Form, Image, …).
D’autres fonctionnalités ont moins été soulignées par la communauté Flex ; il nous semblait dommage de ne pas en parler.
Cet article traite ainsi des composants d’aide à la « globalization » (un terme qui regroupe l’internationalisation et la localisation) qui sont apparus dans Flex 4.5.
Quelles nouveautés ?
Les nouveaux composants de globalization concernent 2 sujets :
- Le formatage de données (Nombre, Date, Devise)
- La comparaison de chaînes de caractères (appelées Collator)
Il est important de noter à ce stade que ces composants Spark sont une surcouche (support MXML, DataBinding, …) très fine des classes du package flash.globalization introduits dans FP10.1 et dont une description très complète est disponible sur l’ADC.
Cet « héritage » de comportement induit un autre changement important : ces composants ne se basent plus sur le ResourceManager (et donc limité par le nombre de locales utilisés dans l’application) mais sur l’OS du client.
Formatage de données
3 classes de formatage font leur apparition : NumberFormatter, DateTimeFormatter, CurrencyFormatter.
Qu’apportent ces classes par rapport à leur équivalentes MX ?
Avec les composants MX, le formatage des données était assuré par les différents bundle fournis avec les SDK. Si le bundle n’était pas fourni, il fallait en créer un nouveau. Avec les composants Spark, le formatage s’appuie sur l’OS, plus besoin de créer le bundle manquant.
Les formateurs simplifient donc beaucoup plus la vie du développeur. Pour les devises, plus besoin de se soucier des symboles pour les séparateurs ou la devise, ouf…
Comparaison de chaîne de caractères
2 composants peuvent être utilisés pour la comparaison de chaînes de caractères : SortingCollator et MatchingCollator. Ces 2 classes s’appuient sur la classe Collator du FP10.1
Quelle utilité pour ces classes ?
Selon la langue ou même la région d’un même pays, le tri de chaînes de caractères ne se fait pas de la même façon. Ce tableau compare l’ordre de tri en italien, allemand et suédois d’une même série de noms :

Ou encore, comme expliqué dans la documentation officielle :
En anglais, le a minuscule est placé avant le A majuscule, et le A majuscule est placé avant le b minuscule.
En suisse, la lettre ö est placée après le z, tandis qu’en allemand, ö est placée après o.
En espagnol traditionnel, la lettre ch est considérée comme caractère unique, et est placée entre le c et le d.
Les caractères accentués en français sont classés en fonction de la dernière différence d’accent et non selon la première différence d’accent : par exemple, cote < côte < coté < côté au lieu de cote < coté < côte < côté.
Si vous avez rencontré ce genre de problématique en Flex 3, vous n’aviez pas d’autres solutions qu’implémenter chaque algorithme de tri !
Pour trier la liste précédente d’utilisateurs en Flex 4.5, vous allez écrire :
<fx:Declarations> <s:SortingCollator id="sortingCollator"/> </fx:Declarations> <mx:DataGrid id="dg"> <mx:columns> <mx:DataGridColumn sortCompareFunction="{sortingCollator.compare}"/> </mx:columns> </mx:DataGrid>
C’est quand même plus simple, non ?
A noter que si vous êtes Flex 4.1, il est également possible de profiter du Collator en ciblant le player Flash 10.1.
Cet exemple utilise le SortingCollator. Quelle différence avec le MatchingCollator ?
On utilisera MatchingCollator dans une recherche de chaîne de caractères plutôt que de tri. Par exemple, rechercher dans un texte une occurrence de chaîne contenant « cool » renverrait des chaînes de caractères contenant « cool » , « Cool », « COOL », etc…
Enfin, une 3ème classe se trouve dans le package spark.globalization : la classe StringTools. Cette classe possède 2 méthodes : toLowerCase, toUpperCase, qui font de la conversion de casse selon une locale déterminée.
En résumé, le SDK 4.5 profite des améliorations apportées par le FP10.1 et permet donc au développeur de se concentrer sur le métier de l’application plutôt que sur des problématiques de localisation/internationalisation.


