我一直很高兴使用内置的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 的反向翻译主题的讨论。