Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GetText / Rails FR

GetText / Rails FR

La traduction ce n'est pas facile.
Utilisez GetText, un standard Unix, au lieu de Rails-I18N.

Sylvain Abélard

January 10, 2012
Tweet

More Decks by Sylvain Abélard

Other Decks in Technology

Transcript

  1. $ 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
  2. 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
  3. 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 ?
  4. 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...
  5. 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 !
  6. 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 fichiers I18n.default_locale = "fr" # en par défaut
  7. 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
  8. 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
  9. 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.