Как перевести проверку активной модели записи
Когда я отправляю форму с ошибкой в нее, она возвращает сообщение об ошибке. Как я могу перевести эти сообщения об ошибках с помощью i18n? У меня уже есть перевод для всех других текстов в моих взглядах, поэтому я знаю, как l18n работает в Rails. Теперь я получаю следующее:
2 errors prohibited this user from being saved:
Email translation missing: nl.activerecord.errors.models.user.attributes.email.blank
Email translation missing: nl.activerecord.errors.models.user.attributes.email.blank
Я хочу перевести как заголовок, так и ошибки.
Ответы
Ответ 1
Перевод для названия будет следующим:
nl:
activerecord:
errors:
template:
header:
one: "1 error prohibited this %{model} from being saved"
other: "%{count} errors prohibited this %{model} from being saved"
body: "There were problems with the following fields:"
Для перевода сообщений об ошибках Rails будет использовать следующий порядок переводов:
activerecord.errors.models.user.attributes.name.blank
activerecord.errors.models.user.blank
activerecord.errors.messages.blank
errors.attributes.name.blank
errors.messages.blank
Итак, вы можете добавить:
nl:
activerecord:
errors:
models:
user:
attributes:
email:
blank: "foo blank in nl bar baz"
Он задокументирован в API-интерфейсе API Rails (I18n), который может дать вам дополнительную информацию.
Ответ 2
Просто используйте файл голландских переводов, который вы можете найти здесь. Он содержит переводы для большинства (если не всех) сообщений проверки подлинности ActiveRecord.
Скопируйте файл в config/locales/
в свой проект.
Альтернативный метод
Если вы хотите воспользоваться обновленными переводами, добавьте следующее в свой Gemfile
вместо копирования файлов перевода вручную:
gem 'rails-i18n'
Ответ 3
Руководство rails I18n охватывает это довольно хорошо.
В config/locales/nl.yml
вы можете поместить следующие значения:
nl:
activerecord:
models:
user: "User"
attributes:
email: "Email"
Для сообщений об ошибках ActiveRecord будет искать их в следующих пространствах имен:
activerecord.errors.models.[model_name].attributes.[attribute_name]
activerecord.errors.models.[model_name]
activerecord.errors.messages
errors.attributes.[attribute_name]
errors.messages
model
, attribute
и value
интерполируются и доступны в ваших переводах, например:
nl:
errors:
messages:
blank: "Please fill the %{model} %{attribute}"