Rails国际化(I18n)模型validation:可能与否?

我在模型中有以下validation:

validates_inclusion_of :whatever, :in => [true, false], :message => I18n.t('please_select_whatever') 

看起来翻译在生产模式下不起作用:在所有语言中,英文翻译总是被显示(可能是因为我在我的应用程序中将英语设置为默认语言环境…)。

所以我假设我们不能在模型中翻译validation,因为模型只能被加载一次 – 当服务器被引导(然后,默认的语言环境将被应用)。

我对吗? 如果是的话,你会如何解决这个问题?

谢谢你的帮助!

解决方法是不包括模型中的任何自定义消息密钥,如…

 :message => I18n.t('activerecord.errors.models.my_model.attributes.whatever.please_select_whatever') 

模型将应用默认的消息密钥,例如“validates_inclusion_of”的情况下为“:inclusion”

…和在config / locales / en.yml你需要有:

 en: activerecord: errors: models: my_model: attributes: whatever: inclusion: "Please select whatever." # see default key: "inclusion" 

作为参考,请查看相应的Rails指南:

http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

您可以使用符号来指定翻译:

 validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever 

它将被翻译成一个特定的范围。 有关更多详细信息,请参阅I18n指南 。

好的, iain答案是有效的,但是我花了很长时间才弄清楚我应该在哪里放置:select_whatever

validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever

确定你的en.yml应该是这样的:

 en: errors: messages: select_whatever: "error!!"