我创建了新的Rails 3项目。我尝试在我的观点中使用这样的翻译:
= t('.translate_test')
在我的浏览器中,我看起来"translate_test"
而不是"my test translation"
我在 en.yml 中设置。
我的主要问题 - 为什么我看不到像"Missing translation: en ..."
这样的错误?
答案 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
答案 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