SlideShare une entreprise Scribd logo
1  sur  21
i18n mon amour

   @dbaeli
   @gdigugli
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étier



2
ISO-8859-1 Au secours !
• Japonisation d’un serveur J2EE
  – Pas de police supportant Unicode
  – Impossible de vérifier l’affichage
  – Installation IBM DB2 écrans side by side
  – Installation d’un windows Japonais
• Avant UTF-8 c’était l’enfer
Téléphone japonais
• Localisation d’un Modèle UML
   – Traducteur Japonais via excel
   – Incapacité de vérifier les traductions
   – Allez retours de 10j
   – Décallage avec les releases
• Contrôle du vocabulaire métier
• Besoin d’externalisation
• Finalisation à postériori par le client
Gruyère international
• Localisation d’un projet Open Source
  d’envergure
  – 15 langues, support RTL
  – Plusieurs milliers de mots
• Jamais complet
• Impossible de faire un devis
• Traduction à la rache dans les .properties
i18n ?
• Tout simplement : internationalisation

• Origine probable : Un employé de DEC appelé
  Scherpenhuizen a eu comme compte e-mail
  S12n et le virus de la contraction est né.

• Localization (l10n) idem.
I18n, l10n
• Internationalisation (i18n)
  – Adapter son logiciel à de l’externalisation de
    textes
  – Passe généralement par un moteur


• Localisation (l10n)
  – Ajout de certaines langues dans le logiciel
  – Activité de traduction
Le champ d’action
• Textes
  – Sens de lecture (RTL, LTR)
  – Ponctuation (espaces, guillemets)
• Formats d’affichage
  – Dates
  – Nombres
• Monnaies
Pour le fun : Les Guillemets
 •   “Citation” en Anglais.
 •   « Citation » en Français (avec espace)
 •   ”Quotes” in Finnish.
 •   „Quotes” in Polish.
 •   「Quotes」 in Japanese.
 •   „Quotes“ in Allemand.
 •   „Quotes‟ in Hollandais.
I18n en Java
• RessourceBundle
  – ResourceBundle bundle = ResourceBundle.getBundle("example“,
    Locale.FRENCH);
  – example.properties, example_en.properties, example_en_US.properties
  – Locale locale = request.getLocale(); ( Servlets )


• MessageFormat, DateFormat, NumberFormat
MessageFormat

• Exemple : {1,number,$#,##}
• Les quotes sont des caractères d’échapement
• Formattage conditionne
  – NIH Syndrome (SVP le faites pas à la main)
  – {0,choice,0# no files|1# one file|1<
    {0,number,integer} files}
Démo



  Old Style i18n

Non UTF-8 Hell !!!
Exemples
ez18n-oldstyle/src/main/org/ez18n/sample/
• OldFashionSample
  – Default Locale
  – FR, JA, mécanisme par défaut
  – Format des fichiers .properties


• Ancienne gestion des fichiers
• Possibilité d’extension via classpath & zip
The Absolute Minimum Every Software
  Developer Absolutely, Positively Must Know
About Unicode and Character Sets (No Excuses!)
           - Joel on Software 2000

http://french.joelonsoftware.com/Articles/Unic
                   ode.html
CE N'EST PAS
SI DIFFICILE.
Unicode : encodé

 UTF-8 : stoqué

Plain Text : oublié
Le minimum

          Ca n'a aucun sens
  d'avoir une chaîne de caractères
sans savoir quel encodage elle utilise.
Encodings
• Java
  – u3053u3093u306bu3061u306fu3001u4e16
    u754cuff01

  – Encoding du fichier et option –
    Dfile.encoding=UTF-8

• Html
  – &#x00AD;
Idées au passage
• Pseudo Localisation
  – Ajout d’un caractère devant toutes les traductions
  – u540d : 名 (veut dire Nom)
  – Vérifier la localisation de votre application


• Rechargement des resources
  – ResourceBundle.clearCache();
Des outils
• Native2ascii
• org.apache.commons.lang3.CharUtils
  – unicodeEscaped(char)
  – isAscii(char)
• java.lang.Properties
• Intellij Idea
  – auto native2ascii & mode ResourceBundle
• Un bon éditeur de texte (hexa, encoding)
Merci !

     Just Fork it @github !


      https://github.com/dbaeli/ez18n




21

Contenu connexe

Similaire à Ez18n theorie encoding gouvernance

Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Conference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisConference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisChipway
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communautéMickaël Rémond
 
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?ekino
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation Microsoft
 
Le langage C.pdf
Le langage C.pdfLe langage C.pdf
Le langage C.pdfNoamHaythem
 
Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018Yannick Comte
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...
BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...
BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...Publicis Sapient Engineering
 
COURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptxCOURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptxLuneSabsPericolo1
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 
de l'art binaire: des PEs explosifs fait main
de l'art binaire: des PEs explosifs fait mainde l'art binaire: des PEs explosifs fait main
de l'art binaire: des PEs explosifs fait mainAnge Albertini
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Soutenance séminaire bibliographique
Soutenance séminaire bibliographiqueSoutenance séminaire bibliographique
Soutenance séminaire bibliographiqueMaxime ALAY-EDDINE
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelleAssociation Agile Nantes
 

Similaire à Ez18n theorie encoding gouvernance (20)

Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Conference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisConference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à Paris
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
ALF - Introduction (2018)
ALF - Introduction (2018)ALF - Introduction (2018)
ALF - Introduction (2018)
 
Cours.langage c
Cours.langage cCours.langage c
Cours.langage c
 
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation
 
Le langage C.pdf
Le langage C.pdfLe langage C.pdf
Le langage C.pdf
 
Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...
BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...
BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...
 
COURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptxCOURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptx
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 
de l'art binaire: des PEs explosifs fait main
de l'art binaire: des PEs explosifs fait mainde l'art binaire: des PEs explosifs fait main
de l'art binaire: des PEs explosifs fait main
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Soutenance séminaire bibliographique
Soutenance séminaire bibliographiqueSoutenance séminaire bibliographique
Soutenance séminaire bibliographique
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NET
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
 

Plus de gdigugli

SoftShake 2015 - DomainModel.stream()
SoftShake 2015 - DomainModel.stream()SoftShake 2015 - DomainModel.stream()
SoftShake 2015 - DomainModel.stream()gdigugli
 
Rock solid UI modeling using annotation processing - CodeGeneration 2013
Rock solid UI modeling using annotation processing - CodeGeneration 2013Rock solid UI modeling using annotation processing - CodeGeneration 2013
Rock solid UI modeling using annotation processing - CodeGeneration 2013gdigugli
 
Smart annotation processing - Paris JUG
Smart annotation processing - Paris JUGSmart annotation processing - Paris JUG
Smart annotation processing - Paris JUGgdigugli
 
Smart Annotation Processing - Marseille JUG
Smart Annotation Processing - Marseille JUGSmart Annotation Processing - Marseille JUG
Smart Annotation Processing - Marseille JUGgdigugli
 
JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...
JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...
JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...gdigugli
 
Ez18n hands on - Annotation Processing Tool par l'exemple
Ez18n hands on - Annotation Processing Tool par l'exempleEz18n hands on - Annotation Processing Tool par l'exemple
Ez18n hands on - Annotation Processing Tool par l'exemplegdigugli
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellgdigugli
 
DevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une applicationDevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une applicationgdigugli
 

Plus de gdigugli (8)

SoftShake 2015 - DomainModel.stream()
SoftShake 2015 - DomainModel.stream()SoftShake 2015 - DomainModel.stream()
SoftShake 2015 - DomainModel.stream()
 
Rock solid UI modeling using annotation processing - CodeGeneration 2013
Rock solid UI modeling using annotation processing - CodeGeneration 2013Rock solid UI modeling using annotation processing - CodeGeneration 2013
Rock solid UI modeling using annotation processing - CodeGeneration 2013
 
Smart annotation processing - Paris JUG
Smart annotation processing - Paris JUGSmart annotation processing - Paris JUG
Smart annotation processing - Paris JUG
 
Smart Annotation Processing - Marseille JUG
Smart Annotation Processing - Marseille JUGSmart Annotation Processing - Marseille JUG
Smart Annotation Processing - Marseille JUG
 
JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...
JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...
JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...
 
Ez18n hands on - Annotation Processing Tool par l'exemple
Ez18n hands on - Annotation Processing Tool par l'exempleEz18n hands on - Annotation Processing Tool par l'exemple
Ez18n hands on - Annotation Processing Tool par l'exemple
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshell
 
DevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une applicationDevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une application
 

Ez18n theorie encoding gouvernance

  • 1. i18n mon amour @dbaeli @gdigugli
  • 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étier 2
  • 3. ISO-8859-1 Au secours ! • Japonisation d’un serveur J2EE – Pas de police supportant Unicode – Impossible de vérifier l’affichage – Installation IBM DB2 écrans side by side – Installation d’un windows Japonais • Avant UTF-8 c’était l’enfer
  • 4. Téléphone japonais • Localisation d’un Modèle UML – Traducteur Japonais via excel – Incapacité de vérifier les traductions – Allez retours de 10j – Décallage avec les releases • Contrôle du vocabulaire métier • Besoin d’externalisation • Finalisation à postériori par le client
  • 5. Gruyère international • Localisation d’un projet Open Source d’envergure – 15 langues, support RTL – Plusieurs milliers de mots • Jamais complet • Impossible de faire un devis • Traduction à la rache dans les .properties
  • 6. i18n ? • Tout simplement : internationalisation • Origine probable : Un employé de DEC appelé Scherpenhuizen a eu comme compte e-mail S12n et le virus de la contraction est né. • Localization (l10n) idem.
  • 7. I18n, l10n • Internationalisation (i18n) – Adapter son logiciel à de l’externalisation de textes – Passe généralement par un moteur • Localisation (l10n) – Ajout de certaines langues dans le logiciel – Activité de traduction
  • 8. Le champ d’action • Textes – Sens de lecture (RTL, LTR) – Ponctuation (espaces, guillemets) • Formats d’affichage – Dates – Nombres • Monnaies
  • 9. Pour le fun : Les Guillemets • “Citation” en Anglais. • « Citation » en Français (avec espace) • ”Quotes” in Finnish. • „Quotes” in Polish. • 「Quotes」 in Japanese. • „Quotes“ in Allemand. • „Quotes‟ in Hollandais.
  • 10. I18n en Java • RessourceBundle – ResourceBundle bundle = ResourceBundle.getBundle("example“, Locale.FRENCH); – example.properties, example_en.properties, example_en_US.properties – Locale locale = request.getLocale(); ( Servlets ) • MessageFormat, DateFormat, NumberFormat
  • 11. MessageFormat • Exemple : {1,number,$#,##} • Les quotes sont des caractères d’échapement • Formattage conditionne – NIH Syndrome (SVP le faites pas à la main) – {0,choice,0# no files|1# one file|1< {0,number,integer} files}
  • 12. Démo Old Style i18n Non UTF-8 Hell !!!
  • 13. Exemples ez18n-oldstyle/src/main/org/ez18n/sample/ • OldFashionSample – Default Locale – FR, JA, mécanisme par défaut – Format des fichiers .properties • Ancienne gestion des fichiers • Possibilité d’extension via classpath & zip
  • 14. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) - Joel on Software 2000 http://french.joelonsoftware.com/Articles/Unic ode.html
  • 15. CE N'EST PAS SI DIFFICILE.
  • 16. Unicode : encodé UTF-8 : stoqué Plain Text : oublié
  • 17. Le minimum Ca n'a aucun sens d'avoir une chaîne de caractères sans savoir quel encodage elle utilise.
  • 18. Encodings • Java – u3053u3093u306bu3061u306fu3001u4e16 u754cuff01 – Encoding du fichier et option – Dfile.encoding=UTF-8 • Html – &#x00AD;
  • 19. Idées au passage • Pseudo Localisation – Ajout d’un caractère devant toutes les traductions – u540d : 名 (veut dire Nom) – Vérifier la localisation de votre application • Rechargement des resources – ResourceBundle.clearCache();
  • 20. Des outils • Native2ascii • org.apache.commons.lang3.CharUtils – unicodeEscaped(char) – isAscii(char) • java.lang.Properties • Intellij Idea – auto native2ascii & mode ResourceBundle • Un bon éditeur de texte (hexa, encoding)
  • 21. Merci ! Just Fork it @github ! https://github.com/dbaeli/ez18n 21