Ez18n hands on - Annotation Processing Tool par l'exemple

  • 437 views
Uploaded on

Introduction à i18n avec GWT …

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
437
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
5
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Ez18n hands on @gdigugli @dbaeli
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Rapport CSV des clés i18n
  • 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. mobile et desktop
  • 14. mobile et desktop
  • 15. mobile et desktop
  • 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. 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. Une nouvelle permutation GWT pour les clients mobiles
  • 19. Injection des resources mobile et desktop avec GWT
  • 20. Demo StockWatcher http://localhost:8080/ez18n/
  • 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. 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’