我正在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
我会使用这个:
total_price = self.quantity*self.unitprice
errors.add(:transaction_value, :transaction_undervalued, { value: total_price })
IMHO您最好使用一个像:transaction_undervalued
这样的简单关键字,这样I18n就可以根据rails guides-I18n-error message scopes:在几个名称空间中查找
activerecord.errors.models.[model_name].attributes.transaction_undervalued
activerecord.errors.models.[model_name]
activerecord.errors.messages
errors.attributes.transaction_undervalued
errors.messages
*将[型号名称]替换为正在使用此验证的型号
对于locales部分,这是/config/lotes/en.yml 中的一个示例
en:
errors: &errors
messages:
transaction_undervalued: "The transaction value is %{value}. That is < 1.00"
有关标准验证,请参阅http://guides.rubyonrails.org/i18n.html#error-消息作用域。对于您的自定义验证,为什么不使用I18n.t呢?
errors.add(:transaction_value, I18n.t("errors.attributes.transaction_value.below_1"))
好的,我取得了部分进展,看起来像以下工作:
将模型验证中的代码更改为
errors.add(" ",I18n.t(:valid_quantities,:amount=>1.00))
将翻译输入de.yml
de:
valid_quantities: "Der Mindestwert einer Order ist %{amount}"
但我仍在寻找一种正确格式化该数字的方法(英语1.00,德语1.00)。
您需要使用方法I18n.l
来本地化数字和日期。
Rails指南提供了一些关于错误本地化的附加信息,因此您应该能够将翻译直接添加到翻译文件中:http://guides.rubyonrails.org/i18n.html#translations-对于活动记录模型