如何在视图中启用Rails I18n翻译错误?

时间:2011-12-18 10:05:28

标签: ruby-on-rails internationalization translation

我创建了新的Rails 3项目。我尝试在我的观点中使用这样的翻译:

= t('.translate_test')

在我的浏览器中,我看起来"translate_test"而不是"my test translation"我在 en.yml 中设置。

我的主要问题 - 为什么我看不到像"Missing translation: en ..."这样的错误?

3 个答案:

答案 0 :(得分:10)

我已经为raise创建了这个初始化程序一个例外 - 传递了args,因此您将知道哪个i18n键丢失了!

# only for development and test
if Rails.env.development? || Rails.env.test?

  # raises exception when there is a wrong/no i18n key
  module I18n
    class JustRaiseExceptionHandler < ExceptionHandler
      def call(exception, locale, key, options)
        if exception.is_a?(MissingTranslationData)
          raise exception.to_exception
        else
          super
        end
      end
    end
  end

  I18n.exception_handler = I18n::JustRaiseExceptionHandler.new

end

Source

答案 1 :(得分:4)

我使用最简单且特定于视图的解决方案,通过在application.css.scss或任何全局样式表中添加此样式,在缺少翻译时在View中显示错误:

.translation_missing{
  font-size: 30px;
  color: red;
  font-family: Times;

  &:before{
   content: "Translation Missing :: ";
   font-size: 30px;
   font-family: Times;
   color: red;
 }
}

答案 2 :(得分:0)

在application.rb中添加一个Monkeypatch,以便在缺少翻译时抛出异常:

module ActionView::Helpers::TranslationHelper
  def t_with_raise(*args)
    value = t_without_raise(*args)

    if value.to_s.match(/title="translation missing: (.+)"/)
      raise "Translation missing: #{$1}"
    else
      value
    end
  end
  alias_method :translate_with_raise, :t_with_raise

  alias_method_chain :t, :raise
  alias_method_chain :translate, :raise
end