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!!"