我希望能够像这样拯救I18n::MissingTranslationData
:
begin
value = I18n.t('some.key.that.does.not.exist')
puts value
return value if value
rescue I18n::MissingTranslationData
puts "Kaboom!"
end
我尝试了上面的方法,但它似乎没有进入救援块。我只是看到,在我的控制台上(因为puts
):translation missing: some.key.that.does.not.exist
我从没见过Kaboom!
我怎么才能让它工作?
5条答案
按热度按时间elcex8rz1#
在我看来,这很奇怪,但在当前版本的
i18n (0.5.0)
中,你应该传递一个你想要拯救的异常:并且在未来的0.6版本中会修复(你可以测试它-https://github.com/svenfuchs/i18n)
xt0899hw2#
和上面的一样,但是更好。
或
或
ukxgm1gy3#
在当前版本的I18n中,您正在查找的异常实际上称为
MissingTranslation
。I18n的默认异常处理程序会默默地拯救它,并将其传递给ArgumentError以打印错误消息。如果您确实希望抛出错误,则需要重写处理程序。有关如何编写自定义处理程序,请参见the source code for i18n exceptions和RailsGuides guide to I18n的第6.2节
iklwldmw4#
注意,现在只需传入
:raise => true
...这将引发
I18n::MissingTranslationData
。参见https://github.com/svenfuchs/i18n/blob/master/lib/i18n/tests/lookup.rb
e4yzc0pl5#
这应该可以完成任务。当使用
rescue
时,我总是会捕获特定的错误。使用救援而不使用特定的错误可能会导致意外的行为。