introduction à l’api « i18n »

17

Click here to load reader

Upload: mickael-baron

Post on 19-Jun-2015

2.066 views

Category:

Technology


0 download

DESCRIPTION

Ce support de cours décrit l'utilisation de l'API i18n via la classe Locale et ResourceBundle puis de la manipulation de chaînes de caractères avec les classes MessageFormat et ChoiceFormat

TRANSCRIPT

2. Licence Creative Commons Contrat PaternitPartage des Conditions Initiales lIdentique 2.0 Francekeulkeul.blogspot.com http://creativecommons.org/licenses/by-sa/2.0/frAPI i18n - M. Baron - Page 2 3. Internationalisation : constats ...Une application de nimporte quel type doit pouvoir fournirune prsentation des informations conformment lalocalisationSelon la localisation les informations ne sont pas formatesde la mme manireLes informations sont de plusieurs typesChanes de texte : Bonjour , Hello Heure : 15:34 , 3:34pm Date : 12 aot 2005 , August 5, 2005 keulkeul.blogspot.comLa reprsentation des informations dpend aussi du contenuIdentification des informations : date, heure, nombreAspects grammaticaux : accords avec les lments au plurielAPI i18n - M. Baron - Page 3 4. Internationalisation : solutionLAPI i18n permet de grer les aspects lis la prise encompte de linternationalisationElle est base sur un ensemble de classes et plusprcismentjava.util.Locale : choix de la localisationjava.util.ResourceBundle : accder aux donnes des fichierslocalisationA cela sajoute des classes de manipulations de chanes dekeulkeul.blogspot.comcaractresjava.text.MessageFormat : formatage des donnesjava.text.ChoiceFormat : utiliser pour grer les diffrences API i18n - M. Baron - Page 4 5. Internationalisation : LocaleUn objet de type Locale permet de donner les informationsconcernant la localisation de lapplicationCes informations doivent tre conformes aux rglementationsdu code de langage ISOUne localisation est constitue des lments suivantsLangage : fr, en, sp, de, Pays : FR, CA pour les pays francophonesVariant : WIN spcificits du systme par exempleDes informations concernant cette rglementation du codekeulkeul.blogspot.comde langage sont disponibles cette adresse :www.loc.gov/standards/iso639-2/englangn.htmlwww.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html API i18n - M. Baron - Page 5 6. Internationalisation : LocaleUn objet de type Locale peut-tre construit Locale(String language) : en indiquant le code de langage Locale(String language, String country) : en ajoutant le code du paysLocale(String lang, String coun, String variant) : le systme en plusLocale my_french_locale = new Locale("fr","FR");Locale my_english_locale = new Locale("en","EN");Par dfaut Java est mme didentifier pour sa machinevirtuelle la localisation de lapplication (information systme)Possibilit de connatre ou changer explicitement lakeulkeul.blogspot.comlocalisation par dfaut dune applicationstatic Locale getDefault() : retourne la locale de lapplicationstatic void setDefault(Locale) : modifie la locale par dfaut API i18n - M. Baron - Page 6 7. Internationalisation : ResourceBundleUn objet de type ResourceBundle permet de grer unensemble de fichier properties contenant les res-sources localisesLes noms des fichiers properties doivent suivre une logi-que rigoureuse dcriture dpendant du type de localisation message_fr_FR_WIN.properties Nom du fichier appel Langue Pays VariantExtension desBundle. Nom librefichiers ressourcesToutes les informations de la localisation sont spares parkeulkeul.blogspot.comun caractre obligatoire _ Vous devez absolument respecter cetteconvention dcriture API i18n - M. Baron - Page 7 8. Internationalisation : ResourceBundleUn fichier properties contient un ensemble de messageutilisable par le ResourceBundleUn message est associ un cl spcifique de la forme :macle = Message associ maclebonjour = Message de moiChaque message estassoci un cl Exemple de fichierFichier propertiesproperties compos de deux clsSuivant le type de locale, le ResourceBundle affiche lecontenu exacte suivant la cl spcifiemessage_fr.propertieskeulkeul.blogspot.commacle = Message associ macleIl faut pour chaque clbonjour = Message de moiproposer une correspondance demessage_en.propertiestraductionmacle = Associated message with maclebonjour = Message from me API i18n - M. Baron - Page 8 9. Internationalisation : ResourceBundleChaque objet ResourceBundle doit tre associ un fichierpropertiesLe choix du fichier properties (fonctionde la localisation) est impliciteUtilisation de la mthode getBundlestatic ResourceBundle getBundle(String) : objet ResourceBundlesuivant un nom de fichier properties avec la locale par dfautstatic ResourceBundle getBundle(String, Locale) : ResourceBundleavec une locale expliciteLe nom du bundle ne doit pascontenir lextension, ni leskeulkeul.blogspot.com informations lies la localeA partir de lobjet ResourceBundle il est possible de rcup-rer le contenu associ la clString getString(String cle) : rcupre le contenu du paramtre clAPI i18n - M. Baron - Page 9 10. Internationalisation : ResourceBundleExemple : modification de la locale en cours dexcutionDfinition de deuxpublic class ChangeLocalisation {localespublic ChangeLocalisation() {Locale my_french_locale = new Locale("fr");Locale my_english_locale = new Locale("en");Rcupre le fichierResourceBundle messages; bundle message .try { Par dfaut la localemessages = ResourceBundle.getBundle("message");est fr System.out.println(messages.getString("coucou"));messages = ResourceBundle.getBundle("message",my_english_locale);Affiche le contenu deSystem.out.println(messages.getString("coucou"));la cl coucou } catch (MissingResourceException e) {... // Erreurs Rcupre le fichier} bundle message .}En changeant la localekeulkeul.blogspot.com Fichiercoucou = hello message_en.propertiescoucou = bonjourFichier message_fr.properties API i18n - M. Baron - Page 10 11. Internationalisation : MessageFormatIl peut tre intressant de paramtrer les messages contenusdans les fichiers properties. Exemple : Il est 13h45 en ce jour du 5 aot 2005 13h45 , 5 aot 2005 sont variables et formatablesLutilisation dun objet MessageFormat est indpendant lanotion de ResourceBundleUn objet MessageFormat se construit parMessageFormat(String) : message formater avec la locale par dfautMessageFormat(String, locale) : identique sauf quil est possible deprciser la locale 13h45 ou 1:45pm keulkeul.blogspot.comLes paramtres sont transmis la chane formater aumoyen de la mthode format de MessageFormatString format(Object obj) : obj contient les arguments transmettreau message (stockes dans un tableau) API i18n - M. Baron - Page 11 12. Internationalisation : MessageFormatDans le fichier properties lutilisation de telles ou tellesvariables ce fait en utilisant les accoladesUtilisation de largument bonjour=Bonjour je mappelle {0}indic 0Il est possible denrichir la description de MessageFormatpour formater directement les donnes dans le fichierproperties {argind} : utilise largument lindice argind {argind, formtype} : idem avec un type de format spcifique {argind, formtype, formstyle} : idem avec le style de formatLes types de format sontkeulkeul.blogspot.com number, date, time et choiceLes styles de format sont short, medium, long, full, integer, currency, percent API i18n - M. Baron - Page 12 13. Internationalisation : MessageFormatExemple : formatage de messages passs en argumentResourceBundle messages = ResourceBundle.getBundle("message",new Locale("fr", "FR"));MessageFormat formatter_date = new MessageFormat(messages.getString("datemessage"),new Locale("en", "EN"));MessageFormat formatter_time = new MessageFormat(messages.getString("heuremessage"),new Locale("fr", "FR"));Date affiche Object[] messageArguments = {new Date(), langlaise et lheure Lutilisation de"Raoul"la franaise}; MessageFormat dansString output = formatter_date.format(messageArguments); Java EE (JSTL par exemple)System.out.println(output);est totalement transparenteoutput = formatter_time.format(messageArguments);System.out.println(output);datemessage = Un simple message qui affiche la date courant {0,date,long}keulkeul.blogspot.comheuremessage = et aussi l`heure courante {0,time,medium}. Bonjour {1} Fichier message_fr.properties API i18n - M. Baron - Page 13 14. Internationalisation : ChoiceFormatDans certains cas, les messages doivent prendre en compteles accords du singulier et du pluriel Il existe une forme Selon si ladjectif numral cardinal porte le pluriel ou pas Il existe deux formes formes saccordePour gnraliser la classe ChoiceFormat permet selon unindice dafficher un texte vouluLe jour 1 est celui de LundiLe jour 2 est celui du Mardikeulkeul.blogspot.comComme pour MessageFormat nous montrerons uniquementla forme dite pattern qui est celle exprime dans lesfichiers propertiesAPI i18n - M. Baron - Page 14 15. Internationalisation : ChoiceFormat ChoiceFormat exploite la forme {argind, choice, formstyle} Le champ formstyle est dfini par la sous forme [Limit Index][Limit Behavior][Choice Text]| [Limit Index] dsigne lindice du message associ (un entier) [Limit Behavior] dsigne des signes de comparaison (# pour lgal et < > pour les infrieurs et suprieurs) [Choice Text] le message afficher selon le rsultat de la comparaison Le caractre | permet de sparer les diffrents valeurs des limiteskeulkeul.blogspot.comMessage {0,choice,0#Bonjour|1#Bonsoir|1