SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Downloaden Sie, um offline zu lesen
GetText
I18N : internationalisation
$ finger abelar_s
                  http://www.linkedin.com/in/sylvainabelard


•• EPITA MTI 2008
     Utilise Rails depuis sept.2006 (rails 1.0.?)


•• Ingénieur R&D à Faveod
     Nous développons et vendons la technologie Faveod Designer
 •   Vous permet de construire des applications complexes plus vite à partir des spécifications
 •   Les applications sont plus rapides, sécurisées, et de meilleure qualité
Vue d’ensemble
                   GNU GetText: GetText’s Never Useless


•• Pourquoi ?
     Parce que vous voudrez utiliser plusieurs langues un jour
 •   GetText est un standard UNIX bien connu et maîtrisé


•• Comment ?
     Quelques horreurs de traducteurs
 •   Montre-moi du code !


•• Avec quoi ?
     Quelques outils autour de GetText
 •   Alternatives
Rails I18N
                            Pourquoi sortir du standard Rails ?


•• Simple
     Il y a toujours une valeur par défaut
 •   Pas de clés complexes à retenir
 •   Jamais de « no translation found »
 •   Jamais de traductions approximatives
Linguistique
                           C’est dur.


• Un mot, une traduction ?
•• Nombre, genre et cas grammatical
     Le nombre a l’air simple : car/cars, mais child/children et person/people
 •   De nombreuses langues (surtout slaves) différencient singulier, duel et pluriel, parfois plus.


 •   Le genre est souvent masculin, féminin et neutre (et rarement intuitif)
 •   D’autres langues différencient animé et inanimé, homme, animal et chose, etc.


•• Conjugaison: personne, temps, mode, voix... aspect ?
     ... je crois qu’on ne va même pas essayer...
Que choisir ?
                          Michael Grosser - FastGetText !


• github.com/grosser/fast_gettext
•• Améliorations
     3.5x plus vite et 560x moins de consommation mémoire
 •   thread safety
 •   simple, et namespace propre


•• Backends
     fichiers .mo et .po
 •   .yml
 •   DB
 •   ... codez le vôtre
Setup
                                       How to GetText part 1


•• PO/MO files
      Ce sont des fichiers qui stockent clé et valeur
 •    Beaucoup d’outils disponibles, y compris un mode emacs


•• Choisir la locale
      À chaque utilisation, choisir la locale (en Rails, par requête le plus souvent)


• Setup
     GetText.locale = "fr"
     init_gettext "my_app"

     I18n.supported_locales = ["en", "fr", "de", "ar", "ru"]
       # mieux : faites-le lui deviner en listant les fichiers
     I18n.default_locale = "fr" # en par défaut
Usage
                              How to GetText part II


•• La fonction « underscore »
     _("string")


•• Variables, à la printf
     _("string with %s") % "arg"
 •   _("string with %s and %s") % ["arg1", "arg2"]




•• Variables nommées
     _("Could not find this %{obj}") % {:obj => _("stuff")}


• Et maintenant, les cas difficiles
Astuces
                                  How to GetText part III


•• Singulier / pluriel
     n_("File not found!", "%{n} files not found!", n) % {:n => n}
 •   Et pour les pluriels irréguliers ?
     "Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;n"
 •   FastGettext.pluralisation_rule = lambda{|count|
        count > 5 ? 1 : (count > 2 ? 0 : 2)}




•• Contexte
     s_("File|Open")   # ouvrir
 •   s_("Sports|Open") # open


 •   s_("Even|More|Contexts|Open") # traduit uniquement ‘open‘


 •   p_("even more bindinds", "for contexts", "open") # open
Fichiers PO
                          Les outils sont très bons pour ça.


•• Mise à jour du PO
     rake updatepo
 •   Note les obsolètes, ajoute les nouvelles et propose une traduction (« fuzzy »)


• Modification du fichier
     # translator comments
     #. extracted comments
     #: reference
     #, flag
     msgid "One file removed"
     msgid_plural "%d files removed"
     msgstr[0] "%d slika uklonjenih"
     msgstr[1] "%d slika uklonjenih"
     msgstr[2] "%d slika uklonjenih"


•• Mise à jour des traductions effectuées
     rake makemo
Questions?
                 On embauche, mais c’est le slide suivant.




               http://ruby-i18n.org/wiki

http://www.gnu.org/software/gettext/manual/gettext.html

Weitere ähnliche Inhalte

Ähnlich wie GetText / Rails

Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
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
 
Nantes JUG - Elasticsearch
Nantes JUG - ElasticsearchNantes JUG - Elasticsearch
Nantes JUG - ElasticsearchDavid Pilato
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Normandie Web Xperts
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
 
Alphorm.com Formation Le langage Ruby
Alphorm.com Formation Le langage RubyAlphorm.com Formation Le langage Ruby
Alphorm.com Formation Le langage RubyAlphorm
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - ElasticsearchDavid Pilato
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation Microsoft
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & toolsSlim Soussi
 
Créer un moteur de recherche avec des logiciels libres
Créer un moteur de recherche avec des logiciels libresCréer un moteur de recherche avec des logiciels libres
Créer un moteur de recherche avec des logiciels libresRobert Viseur
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projetjollivetc
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08Loïc Descotte
 
A la queue leu leu
A la queue leu leuA la queue leu leu
A la queue leu leunautilebleu
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015Stéphane Legrand
 
Internationalisation du Front
Internationalisation du FrontInternationalisation du Front
Internationalisation du FrontYannick Croissant
 
Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot frameworkgilleslenfant
 

Ähnlich wie GetText / Rails (20)

Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
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 !
 
Nantes JUG - Elasticsearch
Nantes JUG - ElasticsearchNantes JUG - Elasticsearch
Nantes JUG - Elasticsearch
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
Alphorm.com Formation Le langage Ruby
Alphorm.com Formation Le langage RubyAlphorm.com Formation Le langage Ruby
Alphorm.com Formation Le langage Ruby
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - Elasticsearch
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & tools
 
Créer un moteur de recherche avec des logiciels libres
Créer un moteur de recherche avec des logiciels libresCréer un moteur de recherche avec des logiciels libres
Créer un moteur de recherche avec des logiciels libres
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projet
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08
 
A la queue leu leu
A la queue leu leuA la queue leu leu
A la queue leu leu
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
Une Introduction à R
Une Introduction à RUne Introduction à R
Une Introduction à R
 
Internationalisation du Front
Internationalisation du FrontInternationalisation du Front
Internationalisation du Front
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot framework
 

Mehr von Sylvain Abélard

Mehr von Sylvain Abélard (10)

Bearded gurus
Bearded gurusBearded gurus
Bearded gurus
 
A taste of Cognac
A taste of CognacA taste of Cognac
A taste of Cognac
 
ParisRB - dossier de presse
ParisRB - dossier de presseParisRB - dossier de presse
ParisRB - dossier de presse
 
Hack your Motivation - full
Hack your Motivation - fullHack your Motivation - full
Hack your Motivation - full
 
Paris rb is_love
Paris rb is_loveParis rb is_love
Paris rb is_love
 
Hack Your Brain
Hack Your BrainHack Your Brain
Hack Your Brain
 
Hack Your Brain - Trivia
Hack Your Brain - TriviaHack Your Brain - Trivia
Hack Your Brain - Trivia
 
Hack Your Brain - FR
Hack Your Brain - FRHack Your Brain - FR
Hack Your Brain - FR
 
Presspack full-text
Presspack full-textPresspack full-text
Presspack full-text
 
GetText / Rails - FR
GetText / Rails - FRGetText / Rails - FR
GetText / Rails - FR
 

GetText / Rails

  • 2. $ finger abelar_s http://www.linkedin.com/in/sylvainabelard •• EPITA MTI 2008 Utilise Rails depuis sept.2006 (rails 1.0.?) •• Ingénieur R&D à Faveod Nous développons et vendons la technologie Faveod Designer • Vous permet de construire des applications complexes plus vite à partir des spécifications • Les applications sont plus rapides, sécurisées, et de meilleure qualité
  • 3. Vue d’ensemble GNU GetText: GetText’s Never Useless •• Pourquoi ? Parce que vous voudrez utiliser plusieurs langues un jour • GetText est un standard UNIX bien connu et maîtrisé •• Comment ? Quelques horreurs de traducteurs • Montre-moi du code ! •• Avec quoi ? Quelques outils autour de GetText • Alternatives
  • 4. Rails I18N Pourquoi sortir du standard Rails ? •• Simple Il y a toujours une valeur par défaut • Pas de clés complexes à retenir • Jamais de « no translation found » • Jamais de traductions approximatives
  • 5. Linguistique C’est dur. • Un mot, une traduction ? •• Nombre, genre et cas grammatical Le nombre a l’air simple : car/cars, mais child/children et person/people • De nombreuses langues (surtout slaves) différencient singulier, duel et pluriel, parfois plus. • Le genre est souvent masculin, féminin et neutre (et rarement intuitif) • D’autres langues différencient animé et inanimé, homme, animal et chose, etc. •• Conjugaison: personne, temps, mode, voix... aspect ? ... je crois qu’on ne va même pas essayer...
  • 6. Que choisir ? Michael Grosser - FastGetText ! • github.com/grosser/fast_gettext •• Améliorations 3.5x plus vite et 560x moins de consommation mémoire • thread safety • simple, et namespace propre •• Backends fichiers .mo et .po • .yml • DB • ... codez le vôtre
  • 7. Setup How to GetText part 1 •• PO/MO files Ce sont des fichiers qui stockent clé et valeur • Beaucoup d’outils disponibles, y compris un mode emacs •• Choisir la locale À chaque utilisation, choisir la locale (en Rails, par requête le plus souvent) • Setup GetText.locale = "fr" init_gettext "my_app" I18n.supported_locales = ["en", "fr", "de", "ar", "ru"] # mieux : faites-le lui deviner en listant les fichiers I18n.default_locale = "fr" # en par défaut
  • 8. Usage How to GetText part II •• La fonction « underscore » _("string") •• Variables, à la printf _("string with %s") % "arg" • _("string with %s and %s") % ["arg1", "arg2"] •• Variables nommées _("Could not find this %{obj}") % {:obj => _("stuff")} • Et maintenant, les cas difficiles
  • 9. Astuces How to GetText part III •• Singulier / pluriel n_("File not found!", "%{n} files not found!", n) % {:n => n} • Et pour les pluriels irréguliers ? "Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;n" • FastGettext.pluralisation_rule = lambda{|count| count > 5 ? 1 : (count > 2 ? 0 : 2)} •• Contexte s_("File|Open") # ouvrir • s_("Sports|Open") # open • s_("Even|More|Contexts|Open") # traduit uniquement ‘open‘ • p_("even more bindinds", "for contexts", "open") # open
  • 10. Fichiers PO Les outils sont très bons pour ça. •• Mise à jour du PO rake updatepo • Note les obsolètes, ajoute les nouvelles et propose une traduction (« fuzzy ») • Modification du fichier # translator comments #. extracted comments #: reference #, flag msgid "One file removed" msgid_plural "%d files removed" msgstr[0] "%d slika uklonjenih" msgstr[1] "%d slika uklonjenih" msgstr[2] "%d slika uklonjenih" •• Mise à jour des traductions effectuées rake makemo
  • 11. Questions? On embauche, mais c’est le slide suivant. http://ruby-i18n.org/wiki http://www.gnu.org/software/gettext/manual/gettext.html