6

我一直很高兴使用内置的rails i18n支持将字符串翻译成不同的语言,效果很好。最近,尽管我需要一些超出此 gem 的默认行为的东西。

由于没有更好的词,我将其称为“反向翻译”。基本上,我的想法是我有某种语言的字符串,我希望能够调用具有另一个语言环境的方法,如果语言环境字符串中存在映射,则返回翻译为该语言环境的字符串。

例如,假设我有config/locales/en.yml

en:
  hello: Hello World!

并在config/locales/ja.yml

ja:
  hello: Konnichi wa!

然后当我l2l_translate在英语语言环境中调用此方法(“语言环境到语言环境翻译”)时,以字符串和语言环境作为参数,我得到了日语翻译:

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

此外,这更棘手,我希望能够反向匹配插值字符串。所以说我有:

配置/语言环境/en.yml

en:
  minutes: "%d minutes"

配置/语言环境/ja.yml

ja:
  minutes: "%d分"

然后我应该能够像这样从英语翻译成日语:

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

所以基本上该字符串应该与英文翻译字符串的正则表达式匹配,然后将“5”拉出并作为参数“%d”发送给日文翻译。

显然这里有潜在的问题,如果:1)没有匹配,或2)有多个匹配。例如,可以通过引发异常来处理这些问题,或者在前一种情况下返回 nil ,在后一种情况下返回一组翻译。无论如何,这些都是小问题。

我的基本问题是:这样的事情存在吗?如果没有,是否有人对如何开发它有任何建议(比如作为宝石)?

我特别想到的应用程序是日语服务的 API 包装器。我希望能够指定可以匹配并翻译成其他语言的日语模式。默认的 i18n 支持不会这样做,而且我不知道有任何其他 gem 会这样做。

任何意见或建议将不胜感激!有关参考,另请参阅2010 年关于 i18n-rails 的反向翻译主题的讨论

4

1 回答 1

2

我们使用gettext,这是一个标准的 unix i18n 解决方案。对于 Rails,您可以使用gettext_i18n_rails。需要注意的是,gettext_i18n_rails 所支持的 FastGettext 似乎没有完整的 gettext 支持,并且复数等一些高级功能也没有按预期工作。

于 2012-09-28T00:05:13.480 回答