Интернационализация Rails (I18n) в моделях: возможно или нет?
У меня есть следующая проверка в модели:
validates_inclusion_of :whatever, :in => [true, false], :message => I18n.t('please_select_whatever')
Кажется, что перевод не работает в режиме производства: на всех языках это всегда перевод на английский язык, который получает diplayed (возможно, потому, что я установил английский как стандартную локаль в своем приложении...?).
Итак, я предполагаю, что мы не можем переводить проверки в моделях, потому что модели загружаются только один раз - когда сервер загружается (а затем применяется локаль по умолчанию).
Я прав? Если да, как бы вы решили эту проблему?
Спасибо за вашу помощь!
Ответы
Ответ 1
Решение состоит в том, чтобы НЕ включать какие-либо пользовательские клавиши сообщений в моделях, например...
:message => I18n.t('activerecord.errors.models.my_model.attributes.whatever.please_select_whatever')
Затем модель применит клавиши сообщения по умолчанию, например ": включение" в случае "validates_inclusion_of"
... и в 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
Ответ 2
Вы можете использовать символы, чтобы указать переводы:
validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever
И он будет переведен с определенной областью. Подробнее см. В I18n guide.
Ответ 3
OK, iain
ответ работает, но я очень долго занимался тем, куда мне поместить :select_whatever
.
validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever
ОК, ваш en.yml
должен выглядеть так:
en:
errors:
messages:
select_whatever: "error!!"