Как перевести (I18N) тексты ошибок, возникающие при проверках в модели (Ruby On Rails) - PullRequest
4 голосов
/ 04 марта 2012

Я запускаю приложение на Ruby On Rails (3.1) и мне нужно обрабатывать переводы на разные языки.Я правильно обработал тексты моего контроллера с использованием функций I18N, но как насчет проверок в моделях, особенно таких, как это:

validate :valid_quantities?

def valid_quantities?
    if self.quantity*self.unitprice < 1.00
    errors.add("The transaction value", "is < 1.00")
    return false
end

Как мне написать этот код для обеспечения поддержки других языков?
Кроме тогокак мне справиться с форматированием чисел?Я не могу вызвать помощников ActionView и пользователя, например, number_to_currency

Ответы [ 4 ]

9 голосов
/ 26 марта 2014

Я бы использовал это:

total_price = self.quantity*self.unitprice
errors.add(:transaction_value, :transaction_undervalued, { value: total_price })

ИМХО, вам лучше использовать простое ключевое слово, например :transaction_undervalued, чтобы I18n смотрел в нескольких пространствах имен в соответствии с rails guides - i18n - области сообщений об ошибках:

activerecord.errors.models.[model_name].attributes.transaction_undervalued
activerecord.errors.models.[model_name]
activerecord.errors.messages
errors.attributes.transaction_undervalued
errors.messages

* замените [имя_модели] моделью, использующей эту проверку

Для части локалей это пример в /config/locales/en.yml

en:
  errors: &errors
    messages:
      transaction_undervalued: "The transaction value is %{value}. That is < 1.00"
3 голосов
/ 04 марта 2012

Стандартные проверки см. В http://guides.rubyonrails.org/i18n.html#error-message-scopes. Для пользовательских проверок, почему вы не используете I18n.t для этого?

errors.add(:transaction_value, I18n.t("errors.attributes.transaction_value.below_1"))
1 голос
/ 04 марта 2012

Вам необходимо использовать метод I18n.l для локализации чисел и дат.

В руководствах по Rails есть дополнительная информация о локализации ошибок, благодаря которой вы сможете добавлять переводы прямо в файл перевода:http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

1 голос
/ 04 марта 2012

Хорошо, я сделал частичный прогресс, похоже на следующие работы:

Измените код проверки модели на

errors.add(" ",I18n.t(:valid_quantities,:amount=>1.00))

Введите перевод в de.yml

de:
    valid_quantities: "Der Mindestwert einer Order ist %{amount}"

Но я все еще ищу способ правильно отформатировать это число (1,00 для английского языка, 1,00 для немецкого).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...