你如何解救I18n :: MissingTranslationData?

Ram*_*yag 3 ruby internationalization

我希望能够这样拯救I18n::MissingTranslationData:

begin
  value = I18n.t('some.key.that.does.not.exist')
  puts value
  return value if value
rescue I18n::MissingTranslationData
  puts "Kaboom!"
end
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的内容,但它似乎没有进入救援区.我只是看到,我(因为控制台puts)translation missing: some.key.that.does.not.exist.我从来没有见过Kaboom!.

我如何让它工作?

Vas*_*ich 6

IMO,这很奇怪,但在当前版本中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
Run Code Online (Sandbox Code Playgroud)

它将在未来0.6版本中修复(你可以测试它 - https://github.com/svenfuchs/i18n)


Fer*_*ron 5

与上面相同但更好

v = "doesnt_exist"
begin
  puts I18n.t "langs.#{v}", raise: true
rescue
  puts "Nooo #{v} has no Translation!"
end
Run Code Online (Sandbox Code Playgroud)

或者

puts I18n.t("langs.#{v}", default: "No Translation!")
Run Code Online (Sandbox Code Playgroud)

或者

a = I18n.t "langs.#{v}", raise: true rescue false
unless a
  puts "Update your YAML!"
end
Run Code Online (Sandbox Code Playgroud)