module I18n
class ForceMissingTranslationsHandler < ExceptionHandler
def call(exception, locale, key, options)
if Rails.env.test?
raise exception.to_exception
else
super
end
end
end
end
I18n.exception_handler = I18n::ForceMissingTranslationsHandler.new
# only for test
if 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?(MissingTranslation)
raise exception.to_exception
else
super
end
end
end
end
I18n.exception_handler = I18n::JustRaiseExceptionHandler.new
end
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
7条答案
按热度按时间b5lpy0ml1#
或者您可以将这些行添加到
config/test.rb
vatpfxk52#
Rails 4.1+
要引发i18n翻译缺失异常,您需要**两件事:
1)初始化器
config/initializers/i18n_force_exceptions.rb
:2)
config/environments/test.rb
中的配置设置(以及其他需要的环境):注意:除了异常处理程序之外,还需要配置设置,因为rails在视图和帮助程序中 Package 了对
I18n.translate
的调用,以防止触发异常。kpbwa7wx3#
我已经创建了
raise
的初始化器,一个异常- args被传递,所以你会知道哪个i18 n键丢失了!来源
xkftehaa4#
config.i18n.raise_on_missing_translation = true
从rails 7.0.5开始,此raises for any missing translation。
(其他答案中提到的
config.action_view.raise_on_missing_translations
早已被弃用,最终在rails 7中被删除。ibrsph3r5#
如果你在4.0.0到4.1.0之间使用rails,你应该这样做:
gcmastyq6#
从Rails 4.1.0开始,现在有一个比4年前的答案更好的解决方案:在配置文件中添加以下行:
我喜欢只在
test
环境中设置它,但您可能也想在development
环境中设置它。我强烈建议不要在production
中将其设置为true。iecba09b7#
若要引发异常,可以定义一个类来处理本地化错误。
然后将其附加到所需的测试用例
通过这种方式,您会引发异常。我不知道如何提高失败(与不及格),以获得更好的结果。