使用rails-i18n进行反向翻译

7
我一直很愉快地使用内置的rails i18n支持来将字符串翻译成不同的语言,效果非常好。最近,我需要一些超出此gem默认行为的东西。
由于没有更好的词汇,我将其称为“反向翻译”。基本上,我的想法是我有某种语言中的一些字符串,我想能够使用其他语言调用一个方法,并在该语言中获得已翻译到该语言的字符串如果在该语言的字符串中存在映射。
例如,假设我在config/locales/en.yml中有以下内容:
en:
  hello: Hello World!

并且在config/locales/ja.yml中:

ja:
  hello: Konnichi wa!

当我在英语环境下调用这个方法l2l_translate("locale to locale translate"),并将字符串和环境作为参数传入时,我会得到日语翻译。
I18n.locale = :en
l2l_translate("Hello World!", :ja) #=> "Konnichi wa!"

另外,这更加棘手,我希望能够反向匹配插值字符串。假设我有:

config/locales/en.yml

en:
  minutes: "%d minutes"

config/locales/ja.yml

ja:
  minutes: "%d分"

然后我应该能够像这样从英语翻译成日语:
l2l_translate("5 minutes", :ja) #=> "5分"

基本上,字符串应该与正则表达式匹配到英语翻译字符串,然后将“5”作为参数“%d”提取并发送到日语翻译中。显然,有潜在的问题,如果:1)没有匹配,或2)有多个匹配。例如,可以通过引发异常来处理这些问题,或者在前一种情况下返回nil,在后一种情况下返回翻译数组。无论如何,这些都是次要问题。我的基本问题是:是否存在类似于此的东西?如果没有,是否有人对如何开发它(比如作为gem)有任何建议?我具体考虑的应用程序是日语服务的API包装器。我希望能够指定日语模式,可以匹配和翻译为其他语言。默认的i18n支持无法实现此目的,我也不知道其他任何可以实现此目的的gems。任何建议或建议将不胜感激!有关反向翻译与i18n-rails的讨论,请参见this discussion
1个回答

2
我们使用gettext,这是一个标准的Unix i18n解决方案。对于Rails,您可以使用gettext_i18n_rails。需要注意的是,FastGettext(gettext_i18n_rails的支持库)似乎没有完整的gettext支持,一些高级功能如复数形式不会按预期工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接