Rails i18n默认值

时间:2010-08-16 11:19:50

标签: ruby-on-rails internationalization

我目前的应用程序有完整的英文翻译,但我无法确保其他语言也完全实现。

这会导致translation_missing警告或“de,install,steps,language”等字符串

有没有办法告诉rails使用英文翻译,以防没有(在本例中)德文翻译?

6 个答案:

答案 0 :(得分:3)

我们在config/initializers/i18n.rb

中有这个
module I18n
  # For MissingTranslationData, fall back to the default locale and then to the last key.
  # For other exceptions, use the default_exception_handler.
  def self.fallback_exception_handler(exception, locale, key, options)
    options ||= {}
    if !Rails.env.development? && exception.is_a?(MissingTranslationData)
      if locale == self.default_locale
        send(:normalize_translation_keys, locale, key, options[:scope]).last.to_s
      else
        self.t(key, options.merge(:locale => self.default_locale))
      end
    else
      send :default_exception_handler, exception, locale, key, options
    end
  end

end

I18n.exception_handler = :fallback_exception_handler

请注意,它不会在设计中落后于开发阶段(因此您会发现缺少翻译)。

此外,这是一个Rails 2应用程序。我相信Rails 3中的后备异常处理有所改变。

答案 1 :(得分:2)

@ tsdbrown是一个很好的建议。我的有点简单了。例如,当您创建德语资源文件时,接近它的一种方法是从您的英文文件开始,然后将其传递给您的翻译人员。无论他们不翻译,仍然存在,只是用英语。那你根本没有这个问题。使用此方法的另一个好处是,您可以确保何时完全翻译文件,您不必进行大型搜索并进行比较以添加缺少的字符串。

答案 2 :(得分:1)

我同意NinjaCat。 Henrik的解决方案看起来非常有前途+1!

我发现用标记符(例如+++)标记那些新的缺失翻译(在'de'文件中显示为英文)很有用,这样翻译人员就可以轻松找到它们。

这是一个额外的提示:

你可以在开发模式下覆盖I18N后端的查找方法,使其打印出Rails试图在I18N后端查找的密钥 - 这样你就可以有效地在dev模式下仔细检查I18N你在代码中的某个地方放置的密钥真的在你认为应该在的位置的后端查找...(我已经看到很多情况下翻译字符串在L10N文件中,但键不正确 - 这种方法有助于反对。)

http://unixgods.org/~tilo/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

另见:

Rails / I18n: default scope

答案 3 :(得分:1)

情况已经如此了!

Rails只会在您开发时输出“翻译缺失”。

在生产模式下,Rails将完全按照您的要求执行操作:回退到config/application.rb中指定的默认语言环境的翻译。

答案 4 :(得分:0)

也许您可以稍微修改一下使用它:http://github.com/javan/rails-i18n-translation-inheritance-helper

答案 5 :(得分:0)

有一种相当简单的方法:只需配置I18n gem即可使用后备后端:https://github.com/svenfuchs/i18n/wiki/Fallbacks