【问题标题】:How do you rescue I18n::MissingTranslationData?你如何拯救 I18n::MissingTranslationData?
【发布时间】:2011-05-17 07:13:20
【问题描述】:

我希望能够像这样拯救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!

如何让它工作?

【问题讨论】:

    标签: ruby internationalization


    【解决方案1】:

    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
    

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

    【讨论】:

    • 这个问题解决了吗?我查看了github,它看起来不像是固定的。
    【解决方案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
    

    【讨论】:

    • I18n.t("langs.#{v}", default: "No Translation!") # 有效
    【解决方案3】:

    在当前版本的 I18n 中,您要查找的异常实际上称为 MissingTranslation。 I18n 的默认异常处理程序以静默方式拯救它,并将其传递给 ArgumentError 以打印错误消息,仅此而已。如果您确实希望抛出错误,则需要覆盖处理程序。

    请参阅the source code for i18n exceptionsRailsGuides guide to I18n 的第 6.2 节了解如何编写自定义处理程序

    【讨论】:

    • 不要说当前版本,请具体说明。与您的源代码链接相同:请链接到特定版本而不是主版本。
    【解决方案4】:

    请注意,现在您只需传入:raise => true

    assert_raise(I18n::MissingTranslationData) { I18n.t(:missing, :raise => true) }
    

    ...这将引发I18n::MissingTranslationData

    https://github.com/svenfuchs/i18n/blob/master/lib/i18n/tests/lookup.rb

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 2010-12-15
      • 2010-10-07
      • 1970-01-01
      • 2013-06-23
      • 2015-06-13
      • 2015-02-15
      • 2013-06-28
      • 1970-01-01
      相关资源
      最近更新 更多