Подтвердить что ты не робот

Интернационализация Rails (I18n) в моделях: возможно или нет?

У меня есть следующая проверка в модели:

validates_inclusion_of :whatever, :in => [true, false], :message => I18n.t('please_select_whatever')

Кажется, что перевод не работает в режиме производства: на всех языках это всегда перевод на английский язык, который получает diplayed (возможно, потому, что я установил английский как стандартную локаль в своем приложении...?).

Итак, я предполагаю, что мы не можем переводить проверки в моделях, потому что модели загружаются только один раз - когда сервер загружается (а затем применяется локаль по умолчанию).

Я прав? Если да, как бы вы решили эту проблему?

Спасибо за вашу помощь!

4b9b3361

Ответ 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!!"