11
GetText I18N : internationalisation

GetText / Rails - FR

Embed Size (px)

DESCRIPTION

Traduire une application n'est pas facile. GetText est une solution efficace et robuste, souvent ignorée. Ces slides datent un peu mais restent pertinents. J'y mentionne quelques casse-têtes récurrents : avant de choisir une solution d'I18N, vérifiez bien que vos alternatives gèrent ces cas.

Citation preview

Page 1: GetText / Rails - FR

GetTextI18N : internationalisation

Page 2: GetText / Rails - FR

$ finger abelar_s• 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é

http://www.linkedin.com/in/sylvainabelard

Page 3: GetText / Rails - FR

Vue d’ensemble• 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

GNU GetText: GetText’s Never Useless

Page 4: GetText / Rails - FR

Rails I18N• 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

Pourquoi sortir du standard Rails ?

Page 5: GetText / Rails - FR

LinguistiqueC’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...

Page 6: GetText / Rails - FR

Que choisir ?• 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

Michael Grosser - FastGetText !

Page 7: GetText / Rails - FR

Setup• 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

How to GetText part 1

GetText.locale = "fr"init_gettext "my_app"

I18n.supported_locales = ["en", "fr", "de", "ar", "ru"] # mieux : faites-le lui deviner en listant les fichiersI18n.default_locale = "fr" # en par défaut

Page 8: GetText / Rails - FR

Usage• 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

How to GetText part II

Page 9: GetText / Rails - FR

Astuces• 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

How to GetText part III

Page 10: GetText / Rails - FR

Fichiers PO• 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

Les outils sont très bons pour ça.

Page 11: GetText / Rails - FR

Questions?On embauche, mais c’est le slide suivant.

http://ruby-i18n.org/wiki

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