我有以 en-GB、en-US、de-DE、de-AT、de-CH 等形式出现的语言环境。
现在的问题是 de-DE、de-AT、de-CH 都共享相同的翻译。所以必须多次定义它们很烦人,而且不是很干。
在有人建议只使用 :de 作为语言环境之前,我不能。这就是我之前的做法,由于某些业务逻辑,我无法更改新的 en-GB 格式,这迫使我被迫接受。
帮助将不胜感激。
我有以 en-GB、en-US、de-DE、de-AT、de-CH 等形式出现的语言环境。
现在的问题是 de-DE、de-AT、de-CH 都共享相同的翻译。所以必须多次定义它们很烦人,而且不是很干。
在有人建议只使用 :de 作为语言环境之前,我不能。这就是我之前的做法,由于某些业务逻辑,我无法更改新的 en-GB 格式,这迫使我被迫接受。
帮助将不胜感激。
如果您使用 YAML 进行本地化,那么您已经有了必要的工具。YAML 允许你编写类似 mixins 的东西:
en: &english
hello: Hello, %{username}!
en-GB:
<<: *english
en-US:
<<: *english
我希望你在这里有干燥的想法。
仍然干燥,但更重要的是,您的翻译不会在内存中重复:
创建一个包含 fallbacks 的 i18n 初始化器:
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
并将您的翻译移动到de:
和en:
语言环境中。
像这样的电话
I18n.t :foo, :locale => 'de-AT'
将首先寻找de-AT.foo
并且如果没有匹配,将寻找de.foo
.
有关i18n wiki的更多信息。