Ruby I18n.t转换缺少默认值Nil

Ruby I18n.t转换缺少默认值Nil,ruby,ruby-on-rails-3,yaml,rails-i18n,Ruby,Ruby On Rails 3,Yaml,Rails I18n,因此,我知道在读取yaml文件时,如果得到“translation missing:”如何返回默认值 some = I18n.t("something.something_else", default: "value") 但是,如果我希望默认值为nil,那么如何用Ruby方式实现呢?我知道我可以从变量some中正则表达式和匹配“translation missing:”,如果它匹配,我会将它赋值为nil。但我想做的是 some = I18n.t("something.something_els

因此,我知道在读取yaml文件时,如果得到“translation missing:”如何返回默认值

some = I18n.t("something.something_else", default: "value")
但是,如果我希望默认值为nil,那么如何用Ruby方式实现呢?我知道我可以从变量some中正则表达式和匹配“translation missing:”,如果它匹配,我会将它赋值为nil。但我想做的是

some = I18n.t("something.something_else", default: nil)

但我的翻译不见了。有人知道一个好方法吗?

试试这个
some=I18n.t!(“某物。某物”_其他”)救援无

好吧,执行营救零是一种不好的做法,但它又短又可爱:)

你可以这样做

def translate(key)
  I18n.t!(key)
rescue I18n::MissingTranslationData
  nil
end
然后


some=translate(“something.something\u other”)
:默认值不能为零。将该值设置为
nil
相当于根本不设置该选项

但是,由于gem似乎不可用,因此可以尝试将空字符串作为默认值传递。如果缺少翻译,
translate
方法可能会返回空字符串

some = I18n.t("something.something_else", default: "")

我相信这是你能得到的最接近的解决方案,除非您定义自定义的
translate
方法,该方法在内部查找密钥的存在,如果密钥不存在,则返回nil。

对于具有大量字符串的应用程序来说,这不是非常有效,因为引发异常并重新救救它在解释器级别会有明显的成本。最好的解决方案是在不触发异常的情况下检查密钥的存在。我认为这是一个决定。。。如果这段代码对所使用的上下文中的性能有很大影响,我同意你的看法。因此,基本上没有好的方法在缺少翻译时返回nil。谢谢你的回答。我不太明白为什么。这是一个实现特性吗?或者代码是如何编写的?您可以添加一个状态检查,以便确保获得翻译后的字符串或返回零:
some=I18n.t(“something.something\u other”,默认值:)。状态