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

6
我创建了一个新的Rails 3项目。我尝试在视图中使用翻译,例如:
= t('.translate_test')

在我的浏览器中,我看到的是"translate_test"而不是我在en.yml中设置的"my test translation"
我的主要问题是为什么我看不到像"Missing translation: en ..."这样的错误提示?

4个回答

10

我创建了这个初始化程序用于抛出异常 - 传递参数以便您知道哪个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

来源


非常感谢,有了这个系统,检查所有缺失的翻译在运行测试时非常容易...当然,如果你有很好的覆盖率。 - fguillen
@NadavB 那是适用于Rails 3的,可以查看最新指南:https://guides.rubyonrails.org/i18n.html#using-different-exception-handlers - Betty St

9
在Rails 3中,他们不再显示这段文本。如果您检查html源代码中的元素,您将看到翻译缺失的消息。
您可以关闭回退功能,尝试在环境变量或初始化器中输入以下内容:
config.i18n.fallbacks = false

4

我使用最简单和最具体的解决方案,在视图中显示翻译缺失时的错误,方法是在你的 application.css.scss 或任何全局样式表中添加以下样式:

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

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

简洁而实用。上面的其他方法在Rails 4.x中对我不起作用。我创建了一个debug.css并有条件地将其包含在我的模板中:= stylesheet_link_tag 'debug' unless Rails.env.production? - Besi

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接