Ez18n hands on   @gdigugli   @dbaeli
Speakers    @dbaeli                        @gdigugli• Chien de berger Agile pour       • Développeur java depuis 1999     ...
Introduction à i18n avec GWT                                           • N’oublier pas le meta tag                        ...
Les ResourceBundles du JDK• java.util.ResourceBundle    La classe qui charge les fichiers properties en fonction de la   ...
Les MessageFormat du JDK• Inclure les « formats » dans le ResourceBundle• Oblige à manipuler un MessageFormat pour  évalue...
Comment aligner les deux mondes             • On ajoute notre propre               interface inspirée du pattern          ...
Bénéfices d’une approche unifiée• Les messages sont gérés indifféremment pour  du code serveur, JSP, servlet et pour le co...
Pattern implémenté                                            LabelResour ces                               (com.google .g...
Injection “à la CDI” des bundles• Afin de permettre l’utilisation indifféremment des deux  implémentations, il faut passer...
Tests JUnit• On peut également générer des vérifications sur  les labels sous forme de test JUnit:  un autre processeur d...
Rapport CSV des clés i18n
Application web multi écran• Un seul code   Une version browser mobile   Une version browser desktop et tablettes• Une C...
mobile et desktop
mobile et desktop
mobile et desktop
On enrichit encore un peu le pattern !                                                                          LabelMobil...
Deferred Binding GWT kesako ?• Mécanisme pour générer plusieurs version du  code à la compilation   ca prend du temps • ...
Une nouvelle permutation GWT pour        les clients mobiles
Injection des resources mobile et        desktop avec GWT
Demo StockWatcher  http://localhost:8080/ez18n/
Idée 1          Tests JUnit de l’orthographe• Améliorer le pattern de test unitaire  implémenter une vérification orthogr...
Idée 2      JSR pour ResourceBundle 2.0• Qualité et efficacité du pattern GWT est  applicable au JDK• Proposer une annotat...
Prochain SlideShare
Chargement dans…5
×

Ez18n hands on - Annotation Processing Tool par l'exemple

659 vues

Publié le

Introduction à i18n avec GWT
les ResourceBundle du JDK
les MessageFormats du JDK
Comment aligner les 2 mondes ?
Bénéfices d'une approche unifiée
Injection à la CDI des bundles
Testes unitaires
Rapport CSV des clés i18n
Application multi écran
Demo slideware : LesFurets.com mobile/desktop
On enrichit encore un peu le pattern !
Deffered binding GWT kesako ?
Une nouvelle permutation GWT pour les clients mobiles
Injection des resources mobile et desktop avec GWT
Demo StockWatcher
Idée 1 : des tests JUnit pour l'orthographe
Idée 2 : un JSR pour les ResourceBundle 2.0

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
659
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
7
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Ez18n hands on - Annotation Processing Tool par l'exemple

  1. 1. Ez18n hands on @gdigugli @dbaeli
  2. 2. Speakers @dbaeli @gdigugli• Chien de berger Agile pour • Développeur java depuis 1999 • Architecte pour• Développeur de plus de 30 ans• Usine logicielles & DevOps • ILOG - IBM• Qualité Logicielle  librairie graphique 2D  moteur de règles • Prima-Solutions  plate-forme de services pour J2EE  code génération de modèle métier2
  3. 3. Introduction à i18n avec GWT • N’oublier pas le meta tag <meta http- equiv="content-type" content="text/html; charset=UTF-8"> • Ajouter les fichiers de localisation LabelMessages_de.propert ies • Charger la classe GWT.create(LabelMessages .class);https://developers.google.com/web-toolkit/doc/latest/DevGuideI18n
  4. 4. Les ResourceBundles du JDK• java.util.ResourceBundle  La classe qui charge les fichiers properties en fonction de la locale (par défaut ou en paramètre)• java.util.Locale  L’objet qui désigne la langue courante avec laquelle on charge les resources internationnaliéses• Convention de nommage pour les fichiers de traduction • StockWatcherConstants_en_EN.properties Langue Pays
  5. 5. Les MessageFormat du JDK• Inclure les « formats » dans le ResourceBundle• Oblige à manipuler un MessageFormat pour évaluer l’expression en passant ses paramètres via un tableau• Gère automatiquement le formatage des paramètres en fonction de la locale (nombre, date)• Pluralisation, paramètre optionnels …http://docs.oracle.com/javase/tutorial/i18n/format/messageFormat.html
  6. 6. Comment aligner les deux mondes • On ajoute notre propre interface inspirée du pattern GWT • @Label remplace @DefaultStringValue (GWT) • @LabelBundle sert de trigger pour des processeurs APT • Les processeurs APT vont générer:  le pattern GWT  une implémentation équivalente basée sur MessageFormat et ResourceBundle
  7. 7. Bénéfices d’une approche unifiée• Les messages sont gérés indifféremment pour du code serveur, JSP, servlet et pour le code GWT client• Le pattern est beaucoup plus agréable que le pattern par défaut J2SE• Le développeur ne maintient plus de fichiers properties pour la locale par défaut de l’application
  8. 8. Pattern implémenté LabelResour ces (com.google .gwt.sample .stockwatcher.client) +symbol() : S tring [1] +price() : S tring [1] +remove() : S tring [1] +lastUpdate( date : S tring [1] ) : S tring [1] +change() : S tring [1] +add() : S tring [1] +changeV alue( value : double [1], pe rcent : double [1] ) : S tring [1] +priceV alue( value : double [1] ) : S tring [1] ... «enumeratio n» E LabelSiteBundle LabelS iteMe ssages (com.google .gwt.sample .stockwatcher.client) (com.google .gwt.sample .stockwatcher.client) MSG_LR-delegate 1ResourceBundle E LabelSiteBundleTest LabelS iteMe ssages_(E xternals T ypes) (com.google .gwt.sample .stockwatcher.client) (com.google .gwt.sample .stockwatcher.client)
  9. 9. Injection “à la CDI” des bundles• Afin de permettre l’utilisation indifféremment des deux implémentations, il faut passer l’interface @LabelBundle aux constructeurs des objets utilisant les messages
  10. 10. Tests JUnit• On peut également générer des vérifications sur les labels sous forme de test JUnit: un autre processeur d’annotation génère une série d’assertion vérifiées à chaque modification de l’interface
  11. 11. Rapport CSV des clés i18n
  12. 12. Application web multi écran• Un seul code  Une version browser mobile  Une version browser desktop et tablettes• Une CSS custom pour le mobile• Des libellés simplifiés• Certains widgets customisés  Boite de dialogue  Sélection des dates
  13. 13. mobile et desktop
  14. 14. mobile et desktop
  15. 15. mobile et desktop
  16. 16. On enrichit encore un peu le pattern ! LabelMobileMessages_ (com.google. gwt.sample.s tockwatcher.client) Generated.gwt.xml E LabelSiteBundleTest LabelMobileMessages LabelMessagesFactor y (com.google. gwt.sample.s tockwatcher.client) (com.google. gwt.sample.s tockwatcher.client) (com.google. gwt.sample.s tockwatcher.client) +MSG_LR() : LabelResources [1] LabelResour ces (com.google. gwt.sample.s tockwatcher.client) +symbol() : S tring [1] «enumeration » +price() : S tring [1] E LabelSiteBundle +remove() : S tring [1] LabelS iteMes sages(com.google. gwt.sample.s tockwatcher.client) +lastUpdate( date : S tring [1] ) : S tring [1] (com.google. gwt.sample.s tockwatcher.client) +change() : S tring [1] +add() : S tring [1]MSG_LR +changeV alue( value : double [1], perc ent : double [1] ) : S tring [1] +priceV alue( value : double [1] ) : S tring [1] ... LabelS iteMes sages_ (com.google. gwt.sample.s tockwatcher.client) -delegate 1 «enumeration » ResourceBundle E LabelMobile BundleTest -delegate E LabelMobile Bundle (E xternals T ypes) (com.google. gwt.sample.s tockwatcher.client) 1 (com.google. gwt.sample.s tockwatcher.client) MSG_LR
  17. 17. Deferred Binding GWT kesako ?• Mécanisme pour générer plusieurs version du code à la compilation  ca prend du temps • GWT génère une permutation par browser supporté, mais on peut enrichir en fonction de différents paramètres  user-agent  locale du client  custom• GWT.create(LabelRessources.class);
  18. 18. Une nouvelle permutation GWT pour les clients mobiles
  19. 19. Injection des resources mobile et desktop avec GWT
  20. 20. Demo StockWatcher http://localhost:8080/ez18n/
  21. 21. Idée 1 Tests JUnit de l’orthographe• Améliorer le pattern de test unitaire implémenter une vérification orthographique sous forme de tests JUnit Utiliser Jazzy et les dictionnaires d’OpenOffice http://jazzy.sourceforge.net/
  22. 22. Idée 2 JSR pour ResourceBundle 2.0• Qualité et efficacité du pattern GWT est applicable au JDK• Proposer une annotation standard pour @Label• Proposer des processeurs APT standard qui génèrent un pattern semblable à celui présenté• Injection du pattern avec ServiceLoader pour éviter toute adhérence au code généré – utilisable en mode ‘une passe’

×