4

J'ai été heureux d'utiliser le support intégré rails i18n pour la traduction des chaînes en différentes langues, ce qui fonctionne très bien. Récemment, j'ai eu besoin de quelque chose qui dépasse un peu le comportement par défaut de cette gemme.Traduction inverse avec rails-i18n

Je l'appellerai "inverse translation" faute d'un meilleur mot. Fondamentalement, l'idée est que j'ai une chaîne dans une langue, et je veux être en mesure d'appeler une méthode avec un autre locale, et récupérer la chaîne traduite à cette locale si un mappage existe dans les chaînes locales.

Par exemple, supposons que j'ai en config/locales/en.yml

en: 
    hello: Hello World! 

et config/locales/ja.yml:

ja: 
    hello: Konnichi wa! 

puis quand je l'appelle cette méthode l2l_translate ("un endroit à traduire") alors que dans les paramètres régionaux anglais , avec la chaîne et les paramètres régionaux comme arguments, je reçois la traduction en japonais:

I18n.locale = :en 
l2l_translate("Hello World!", :ja) #=> "Konnichi wa!" 

Aussi, et c'est plus compliqué, je veux être capable d'inverser les chaînes interpolées. Donc, dire que j'ai:

config/locales/en.yml

en: 
    minutes: "%d minutes" 

config/locales/ja.yml

ja: 
    minutes: "%d分" 

alors je devrais être en mesure de traduire de l'anglais au japonais comme tel:

l2l_translate("5 minutes", :ja) #=> "5分" 

Donc, fondamentalement, la chaîne doit être associée à une expression rationnelle à la chaîne de traduction anglaise, et le "5" tiré et envoyé comme un argument "% d" à la traduction en japonais.

Évidemment, il y a des problèmes potentiels ici, si: 1) il n'y a pas de correspondance, ou 2) il y a plusieurs correspondances. Ceux-ci pourraient être manipulés en levant une exception, par exemple, ou en retournant nil dans le premier cas et un tableau de traductions dans le second cas. En tout cas, ce sont des points mineurs.

Ma question fondamentale est: est-ce que quelque chose comme ça existe? Et si non, quelqu'un a-t-il des suggestions sur la façon de le développer (disons comme une gemme)?

L'application à laquelle je pense spécifiquement est une enveloppe API pour un service en japonais. Je veux être en mesure de spécifier des modèles en japonais qui peuvent être appariés et traduits dans d'autres langues. Le support par défaut d'i18n ne le fera pas, et je ne connais pas d'autres gemmes qui le feront.

Tout conseil ou suggestion serait grandement apprécié! Pour référence, voir également this discussion en 2010 sur le sujet de la traduction inverse avec i18n-rails.

Répondre

2

Nous utilisons gettext, qui est une solution standard unix i18n. Pour Rails, vous pouvez utiliser gettext_i18n_rails. Une mise en garde est que FastGettext, qui est sauvegardé par gettext_i18n_rails, ne semble pas avoir le support complet de gettext, et certaines fonctionnalités avancées telles que la pluralisation n'ont pas fonctionné comme prévu.

+0

Merci, cela semble pouvoir fonctionner. –