Интернационализация Rails (I18n) в проверках моделей: возможно или нет?
У меня есть следующая проверка в модели:
validates_inclusion_of :whatever, :in => [true, false], :message => I18n.t('please_select_whatever')
похоже, что перевод не работает в производственном режиме: на всех языках всегда воспроизводится английский перевод (возможно, потому, что я установил английский язык в качестве языка по умолчанию в своем приложении...?).
поэтому я предполагаю, что мы не можем перевести проверки в моделях, потому что модели загружаются только один раз-когда сервер загружается (и тогда локаль по умолчанию будет приложенный.)
Я прав? Если да, то как бы вы решили эту проблему?
Спасибо за вашу помощь!
3 ответов
решение состоит в том, чтобы не включать никаких таможни ключи сообщений в моделях, например...
:message => I18n.t('activerecord.errors.models.my_model.attributes.whatever.please_select_whatever')
затем модель применит ключи сообщений по умолчанию, например": inclusion "в случае "validates_inclusion_of"
...и в config / locales / en.yml вам нужно иметь:
en:
activerecord:
errors:
models:
my_model:
attributes:
whatever:
inclusion: "Please select whatever." # see default key: "inclusion"
для справки, проверьте соответствующие рельсы руководство:
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
OK ваш en.yml
должен выглядеть так:
en:
errors:
messages:
select_whatever: "error!!"