je n'y connais rien
ou presque
I18N : internationalisation
L10N : localisation
I18N de OpenFoodFact / OpenBeautyFacts
OpenFoodFact / OpenBeautyFacts
localisés dans 10-20 langues
certaines langues à 100% : français, anglais, allemand, italien, espagnol, grec, hébreu...
d'autres bien moins : russe, japonais, arabe, chinois...
présence symbolique : indonésien, gallois, hongrois...
problème : contribuer une localisation est complexe
fichiers dans wiki
tailles importantes, fait planter l'éditeur de wiki
en réalité, du code Perl
trois hashes :
%tag_type_singular
~500 lignes
%tag_type_plural
~500 lignes
%Lang
~10 000 lignes
facile de faire des erreurs
labels_example => { fr => "AB, Bio européen, Max Havelaar, Label Rouge, IGP, AOP, Saveur de l'Année 2012...", en => "Organic", # "Fairtrade USA, Fair trade, TransFair...", el => "Βιολογικό/Οργανικό/Ολοκληρωμένης Διαχείρισης, Δικαίου Εμπορίου, Π.Ο.Π., Π.Γ.Ε, Χωρίς γλουτένη, Ελεύθερο Γενετικών Τροποποιημένων/Non GMO, Βραβείο γεύσης...", es => "Ecológico, Fairtrade-Max Havelaar, I.G.P., D.O.P., Sabor del año 2012...", pt => "Ecológico, Comércio Justo, Sabor do Ano 2012...", pt_pt => "Ecológico, Produto do Ano 2012, sem glúten, ...", ro => 'Bio', it => "IGP, IGT, DOP, Bio, Ecologico, Non OGM, gluten-free", he => "אורגני", "סחר הוגן, מיוצר בישראל", nl => "EKO, Max Havelaar, Label Rouge, Organisch, Glutenvrij, Smaak van het jaar 2012, ...", nl_be => "AB, Max Havelaar, Label Rouge, Organisch, Glutenvrij, Smaak van het jaar 2012, ...", de => "Bio, Fairtrade-Max Havelaar, demeter, vegan, Glutenfrei, ...", },
migrer vers des fichiers .po
format standard
logiciels et plates-formes conçus pour
POEdit, Lokalize, Transifex, Zanata, Launchpad
facile de contribuer une localisation
◻︎ 1. convertir les hashes en fichiers .po
trivial
he.pomsgid "Add a product" msgstr "הוספת מוצר" msgid "Register" msgstr "הרשמה" msgid "Take a picture" msgstr "צילום תמונה" msgid "Barcode" msgstr "ברקוד" msgid "Ingredients list" msgstr "רשימת רכיבים" msgid "Product without barcode" msgstr "מוצר ללא ברקוד" msgid "Origin of ingredients" msgstr "מקור הרכיבים"
ar.pomsgid "Add a product" msgstr "إضافة منتج" msgid "Register" msgstr "التسجيل" msgid "Take a picture" msgstr "التقاط صورة" msgid "Barcode" msgstr "الباركود" msgid "Ingredients list" msgstr "قائمة المكونات" msgid "Product without barcode" msgstr "المنتج دون الباركود" msgid "Origin of ingredients" msgstr "أصل المكونات"
ja.pomsgid "Add a product" msgstr "製品を追加" msgid "Register" msgstr "登録" msgid "Take a picture" msgstr "写真を撮ります" msgid "Barcode" msgstr "バーコード" msgid "Ingredients list" msgstr "成分リスト" msgid "Product without barcode" msgstr "バーコードのない商品" msgid "Origin of ingredients" msgstr "成分の起源"
☑ 1. convertir les hashes en fichiers .po
◻︎ 2. utiliser les fichiers .po
plusieurs modules existent
Locale::Maketext::Lexicon, utilisé dans Act
package OpenFoodFacts::I18N; use Locale::Maketext::Lexicon; use parent "Locale::Maketext"; Locale::Maketext::Lexicon->import({ '*' => [ Gettext => 'po/*.po', ], _auto => 0, _decode => 1, _style => 'gettext', }); package main; my $i18n = OpenFoodFacts::I18N->get_handle("fr"); say $i18n->maketext("Add a product");
mais utilisation des hashes dans le code
$Lang{products}{$lang}
$Lang{$ranktype . "_p"}{$lang}
$Lang{$class . '_' . $ingredients_classes{$class}{$icid}{level} }{$lang}
☑ 1. convertir les hashes en fichiers .po
◻︎ 2. utiliser les fichiers .po
☑ conserver les hashes
soit avec de la magie (tie)
soit par reconstruction
☒ utilisation des chaînes anglaises
garder les clés d'origine des hashes
stockées comme msgctx dans les .po
he.pomsgctx "add_product" msgid "Add a product" msgstr "הוספת מוצר" msgctx "add_user" msgid "Register" msgstr "הרשמה" msgctx "app_take_a_picture" msgid "Take a picture" msgstr "צילום תמונה" msgctx "barcode" msgid "Barcode" msgstr "ברקוד" msgctx "ingredients_text" msgid "Ingredients list" msgstr "רשימת רכיבים" msgctx "no_barcode" msgid "Product without barcode" msgstr "מוצר ללא ברקוד" msgctx "origins_s" msgid "Origin of ingredients" msgstr "מקור הרכיבים"
ar.pomsgctx "add_product" msgid "Add a product" msgstr "إضافة منتج" msgctx "add_user" msgid "Register" msgstr "التسجيل" msgctx "app_take_a_picture" msgid "Take a picture" msgstr "التقاط صورة" msgctx "barcode" msgid "Barcode" msgstr "الباركود" msgctx "ingredients_text" msgid "Ingredients list" msgstr "قائمة المكونات" msgctx "no_barcode" msgid "Product without barcode" msgstr "المنتج دون الباركود" msgctx "origins_s" msgid "Origin of ingredients" msgstr "أصل المكونات"
ja.pomsgctx "add_product" msgid "Add a product" msgstr "製品を追加" msgctx "add_user" msgid "Register" msgstr "登録" msgctx "app_take_a_picture" msgid "Take a picture" msgstr "写真を撮ります" msgctx "barcode" msgid "Barcode" msgstr "バーコード" msgctx "ingredients_text" msgid "Ingredients list" msgstr "成分リスト" msgctx "no_barcode" msgid "Product without barcode" msgstr "バーコードのない商品" msgctx "origins_s" msgid "Origin of ingredients" msgstr "成分の起源"
gettext ne permet pas de chercher par msgctx
seulement par msgid
Locale::Maketext::Lexicon::Getcontextvariante expérimentale de Locale::Maketext::Lexicon::Gettext
pratiquement un copié-collé avec s/msgid/msgctx/g
peut-être une mauvaise idée
mais permet d'utiliser plus simplement les .po dans OFF / OBF
☑ 1. convertir les hashes en fichiers .po
☑ 2. utiliser les fichiers .po
☑ 3. profit!