Интернационализация 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!!"