SlideShare une entreprise Scribd logo
1  sur  11
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à GetText / Rails - FR

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
 
Développement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend SearchDéveloppement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend SearchRobert Viseur
 
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
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchDavid Pilato
 
Finist JUG - Elasticsearch
Finist JUG - ElasticsearchFinist JUG - Elasticsearch
Finist JUG - ElasticsearchDavid Pilato
 
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
 

Similaire à GetText / Rails - FR (20)

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é
 
Développement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend SearchDéveloppement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend Search
 
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
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - Elasticsearch
 
Finist JUG - Elasticsearch
Finist JUG - ElasticsearchFinist JUG - Elasticsearch
Finist JUG - Elasticsearch
 
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
 

Plus de Sylvain Abélard

Plus de Sylvain Abélard (9)

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
 
Presspack full-text
Presspack full-textPresspack full-text
Presspack full-text
 
GetText / Rails
GetText / RailsGetText / Rails
GetText / Rails
 

GetText / Rails - FR

  • 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