如何翻译(I18N)模型中验证引发的错误文本(Ruby On Rails)

KKK*_*KKK 4 ruby-on-rails

我正在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
Run Code Online (Sandbox Code Playgroud)

我如何编码以提供对其他语言的支持?
另外,如何处理数字的格式?我无法调用ActionView助手和用户,例如number_to_currency

iva*_*xuu 9

我会用这个:

total_price = self.quantity*self.unitprice
errors.add(:transaction_value, :transaction_undervalued, { value: total_price })
Run Code Online (Sandbox Code Playgroud)

恕我直言你最好使用一个简单的关键字:transaction_undervalued,就像I18n根据rails指南查看几个名称空间- i18n - 错误消息范围:

activerecord.errors.models.[model_name].attributes.transaction_undervalued
activerecord.errors.models.[model_name]
activerecord.errors.messages
errors.attributes.transaction_undervalued
errors.messages
Run Code Online (Sandbox Code Playgroud)

*用模型替换[model_name]正在使用此验证

对于语言环境部分,这是/config/locales/en.yml中的示例

en:
  errors: &errors
    messages:
      transaction_undervalued: "The transaction value is %{value}. That is < 1.00"
Run Code Online (Sandbox Code Playgroud)