【问题标题】:Share translations between multiple locales in Rails3在 Rails3 中的多个语言环境之间共享翻译
【发布时间】:2012-06-04 09:48:07
【问题描述】:

我的语言环境以 en-GB、en-US、de-DE、de-AT、de-CH 等形式出现。

现在的问题是 de-DE、de-AT、de-CH 都共享相同的翻译。 所以必须多次定义它们很烦人,而且不是很干。

在有人建议只使用 :de 作为语言环境之前,我不能。这就是我之前的做法,由于某些业务逻辑,我无法更改新的 en-GB 格式。

非常感谢您的帮助。

【问题讨论】:

  • 你是在说清理你的 yml 文件吗?
  • 目前我只有一个 de.yml 并且所有三个语言环境(de-DE、de-AT..)都应该使用那个进行本地化

标签: ruby-on-rails ruby-on-rails-3 internationalization


【解决方案1】:

如果您使用 YAML 进行本地化,那么您已经有了必要的工具。 YAML 允许你编写类似 mixins 的东西:

en: &english
   hello: Hello, %{username}!

en-GB:
  <<: *english

en-US:
  <<: *english

我希望你在这里得到了干燥的想法。

【讨论】:

  • 太棒了.. 我已经尝试过了,但是我错误地命名了标签 &en,所以一旦我启动 rails 就会遇到心理解析器错误.. 使用另一个标签就可以了..
【解决方案2】:

仍然是 DRY,但更重要的是,您的翻译不会在记忆中重复:

创建一个包含后备的 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的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多