I18n.t 翻译缺少默认值 Nil

I18n.t Translation Missing Default Value Nil

所以我知道如何 return 如果我在读取 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)

但我只是缺少 returned 翻译。有谁知道好方法吗?

试试这个 some = I18n.t!("something.something_else") rescue nil

好的,执行 rescue nil 是一种不好的做法,但是它又短又可爱 :)

你可以这样做

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

然后...

some = translate("something.something_else")

:default 不能为零。将值设置为 nil 相当于根本不设置该选项。

但是,由于 gem 似乎 only check whether the key is nil or not,您可以尝试传递一个空字符串作为默认值。如果缺少翻译,translate 方法可能会 return 一个空字符串。

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

我相信这是您可以获得的更接近的解决方案,除非您定义自定义 translate 方法,该方法在内部查找密钥是否存在,如果密钥不存在,则 returns nil .