2011-05-17 24 views
3

我希望能够拯救I18n::MissingTranslationData像这样:你如何解救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!

我如何得到这个工作?

回答

6

国际海事组织,这是很奇怪,但在i18n (0.5.0)当前版本中,你应该通过要拯救一个例外:

require 'i18n' 
begin 
    value = I18n.translate('some.key.that.does.not.exist', :raise => I18n::MissingTranslationData) 
    puts value 
    return value if value 
rescue I18n::MissingTranslationData 
    puts "Kaboom!" 
end 

,它将被固定在未来的0.6版本(你可以测试它 - https://github.com/svenfuchs/i18n

+0

太好了 - 谢谢! – 2011-05-17 09:16:52

+0

这个问题解决了吗?我检查了github,它看起来不像是固定的。 – Edward 2012-12-21 16:07:00

0

在当前版本的I18n中,您要查找的异常实际上称为MissingTranslation。 I18n的默认异常处理程序以无提示的方式进行抢救,并将其传递给ArgumentError以打印错误消息,而不是其他事件。如果你真的想要抛出错误,你需要重写处理程序。

the source code for i18n exceptions,而第RailsGuides guide to I18n 6.2如何编写自定义处理程序

+0

不要说现在的版本,请具体说明。与源代码链接相同的东西:请链接到特定的修订版而不是主版。 – 2016-09-23 16:34:13

2

同上,但更好

v = "doesnt_exist" 
begin 
    puts I18n.t "langs.#{v}", raise: true 
rescue 
    puts "Nooo #{v} has no Translation!" 
end 

puts I18n.t("langs.#{v}", default: "No Translation!") 

a = I18n.t "langs.#{v}", raise: true rescue false 
unless a 
    puts "Update your YAML!" 
end