我在模型中进行了以下验证:
validates_inclusion_of :whatever, :in => [true, false], :message => I18n.t('please_select_whatever')
似乎翻译在生产模式下不起作用:在所有语言中,它始终是英语翻译(可能因为我将英语设置为我的应用程序中的默认语言环境......?)。
所以我假设我们无法在模型中转换验证,因为模型只加载一次 - 当服务器启动时(然后,将应用默认的语言环境)。
我是对的吗?如果是的话,你会如何解决这个问题?
感谢您的帮助!
答案 0 :(得分:46)
解决方案是不在模型中包含任何自定义消息密钥,例如......
:message => I18n.t('activerecord.errors.models.my_model.attributes.whatever.please_select_whatever')
然后,模型将应用默认消息密钥,例如“validates_inclusion_of”
中的“:includes”...在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
答案 1 :(得分:17)
您可以使用符号来指定翻译:
validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever
它将在特定范围内翻译。有关详细信息,请参阅I18n guide。
答案 2 :(得分:3)
好的,iain
回答有效,但我花了很长时间才弄明白我应该把:select_whatever
放在哪里。
validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever
确定您的en.yml
应如下所示:
en:
errors:
messages:
select_whatever: "error!!"