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

7avr/093

Flex Localization – Ajouter de nouvelles langues (locale)

Pour ajouter une langue nationale à votre projet, pour l'internationalisation, voici la marche à suivre:

  • Ajoutez la langue à l'option locale de votre compilateur. Vous pouvez l'ajouter dans Flex Builder en faisant clic droit sur le projet puis Flex Compiler puis dans Additional Compiler Arguments. Voici par exemple, comment on ajoute la langue espagnole (en Espagne):
-locale=en_US,es_ES

Si vous n'utilisez pas Flex Builder mais plutôt mxmlc, éditer le fichier flex-config.xml et ajouter les langues avec la syntaxe suivante:

<locale>
    <locale-element>en_US</locale-element>
    <locale-element>es_ES</locale-element>
</locale>
  • Assurez vous que vous avez bien crée le nouveau dossier ainsi que le nouveau fichier de propriété correspondant à la nouvelle langue. Ces fichiers doivent être liés au source path. Pour cela, jetez un oeil à cet article:

Flex Localization – Compilation de ressources dans une application Flex

  • Il faut ensuite créer les Resource Bundles du framework pour la nouvelle locale

Création des Resource Bundles pour le framework Flex

L'option -locale définit quelle langue nationale inclure dans le source path. Elle indique aussi au compilateur quelle ressources utiliser pour le framework Flex (quelle langue pour le framework). Les composants du framework Flex comme les Label ou les Button utilisent des ressources, tout comme votre application peut le faire. Les ressources dont ont besoin ces classes sont situées dans des librairies comme framework.swc ou dans des Bundles séparés. Par défaut, les framework resources pour la locale en_US sont inclus avec le SDK Flex. Si vous ajoutez une locale à votre application, vous devez générer les ressources pour le framework dans cette langue.

Pour utiliser la langue en_US, vous n'avez rien d'autre à faire à part créer les fichiers properties pour votre locale. Pour d'autres langues comme ja_JP, fr_FR, ou es_ES, en plus de créer de nouveaux fichiers propriétés, vous devez aussi créer de nouveaux fichier framework locale avant de compiler votre application Flex.

Typiquement, vous allez commencer par créer un nouveau fichier .properties, (nommé "RegistrationForm.properties" dans notre cas). L'exemple suivant spécifie les valeurs pour un formulaire d'inscription en 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

Vous devez créer un fichier .properties distinct pour chaque langue, et le stocker dans un nouveau dossier portant le nom de la langue. Par exemple, si la langue est fr_FR (Français pour la France), vous pouvez stocker le fichier ressources dans le dossier locale/fr_FR.

Quand vous ajoutez de nouvelles langues, vous devez aussi inclure le framework localisé pour cette langue. Le framework localisé pour en_US est fourni de base. Pour toutes les autres langues, vous devez créer ce framework localisé. Pour créer ces fichiers, on va utiliser l'utilitaire "copylocale" présent dans le dossier /sdk/bin (là où vous avez installé votre SDK Flex). Si vous utilisez Flex Builder il se trouve dans votre dossier d'installation puis /sdks/3.2.0/bin). Vous pouvez uniquement lancer cet utilitaire en ligne de commande (avec le "cmd" Invité de commande sur Windows par exemple).

La syntaxe est la suivante:

copylocale original_locale new_locale

Par exemple, pour créer le framework localisé pour la langue fr_FR, utilisez la commande:

copylocale en_US fr_FR

Pour les curieux, voici un screenshot de ce que cela donne:

flex copylocale

Cet utilitaire va créer un nouveau dossier dans frameworks/locale/nom_locale. Le nom de ce dossier correspond à celui de la nouvelle locale. Ce dossier est dans le même répertoire que le dossier en_US. Dans notre exemple, il crée le dossier locale/fr_FR. Cet utilitaire va aussi créer les fichiers SWC dans ce nouveau dossier:

  • airframework_rb.swc
  • automation_rb.swc
  • framework_rb.swc
  • rpc_rb.swc

Ces ressources doivent être présentes dans le library-path de votre application. Par défaut, si vous avez ajouté locale/{locale} comme l'indique ce tutorial Flex, vous n'avez pas besoin de faire autre chose.

En savoir un peu plus sur les Resource Bundles

Les "Resource Bundles" sont des classes qui englobent des fichier .properties. Il définissent les paires clé/valeur en tant que propriété de la classe.

Flex inclut des Resource Bundles pour le framework. Ils sont présents sous la forme de fichiers SWF et sont situés dans le dossier frameworks/locale/nom_locale. Vous pouvez examiner ces fichiers propriété en les renommant en .zip, puis en faisant une extraction. Vous pouvez ensuite visualiser ces fichiers avec un éditeur de texte classique.

Pour chaque fichier ressource, le compilateur Flex génère une classe qui étend la classe ResourceBundle et l'ajoute à l'application. Le nom de cette classe est le nom du fichier propriété (avec un _ pour remplacer le ".").

La classe ResourceBundle générée surcharge une seule méthode, getContent(), qui retourne un objet définissant les valeurs du fichier properties. Par exemple, pour le fichier RegistrationForm.properties, le compilateur va générer la classe suivante:

public class RegistrationForm_properties extends ResourceBundle {
    override protected function getContent():Object {
        var properties:Object = {};
        properties["registration_button"] = "Registration";
        properties["submit_button"] = "Submit Form";
        properties["personname"] = "Name";
        properties["street"] = "Street Address";
        properties["city"] = "City";
        properties["state"] = "State";
        properties["zip"] = "ZIP Code";
        properties["thanks"] = "Thank you for registering!";
        return properties;
    }
}

Pour voir les classes générées, fixez l'option  -keep-generated-actionscript à true quand vous compilez votre application.

Vous pouvez écrire votre propre classe qui étend ResourceBundle plutôt que de créer un fichier properties que le compilateur va utiliser pour générer cette même classe. Vous pouvez ensuite utiliser ces classes si vous les ajoutez dans votre projet.

Articles similaires

Commentaires (3) Trackbacks (1)
  1. Salut et merci pour ces tutoriaux d'excellente qualité.

    J'ai reçu aujourd'hui une annonce de ce site:

    http://www.dehats.com/drupal/?q=node/79

    Voila un outil qui devrai en intéresser plus d'un ….

  2. Merci pour l'info, en effet, un outil à suivre :D

    Fabien

  3. Salut;

    Je n'arrive pas a trouve comment faire pour avoir des dates dans datefield en francais. Il n'existe aucune locale de type fr_FR ?

    Kelk1 a til une solution ?


Leave a comment

(required)