Интернационализация Rails (I18n) в валидации моделей: возможно или нет? - PullRequest
37 голосов
/ 15 декабря 2010

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

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

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

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

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

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

Ответы [ 3 ]

46 голосов
/ 15 декабря 2010

Решение состоит в том, чтобы НЕ включать в модели какие-либо пользовательские ключи сообщений, например ...

: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

17 голосов
/ 15 декабря 2010

Вы можете использовать символы, чтобы указать переводы:

validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever

И он будет переведен с определенной областью.Подробнее см. Руководство по I18n .

3 голосов
/ 09 февраля 2017

ОК, iain ответ работает, но мне потребовалось очень много времени, чтобы выяснить, куда мне положить :select_whatever.

validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever

ОК, ваш en.yml должен выглядеть так:

en:
  errors:
    messages:
      select_whatever: "error!!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...