【问题标题】:How to translate (I18N) error texts raised by validations in the model (Ruby On Rails)如何翻译模型中验证引发的 (I18N) 错误文本 (Ruby On Rails)
【发布时间】:2012-03-04 11:09:54
【问题描述】:

我在 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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我会用这个:

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

    恕我直言,您最好使用像: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
    

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

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

    en:
      errors: &errors
        messages:
          transaction_undervalued: "The transaction value is %{value}. That is < 1.00"
    

    【讨论】:

      【解决方案2】:

      有关标准验证,请参阅http://guides.rubyonrails.org/i18n.html#error-message-scopes。对于您的自定义验证,为什么不使用 I18n.t 呢?

      errors.add(:transaction_value, I18n.t("errors.attributes.transaction_value.below_1"))
      

      【讨论】:

      • 似乎无法正常工作,我添加了它并将翻译添加到 de.yml 中,如下错误:attributes: transaction_value: below_1: Der Transaktionswert ist kleiner 1.00 但我仍然收到错误消息: 交易价值翻译缺失:de.errors.attributes.transaction_value.below_1
      【解决方案3】:

      好的,我取得了部分进展,看起来像以下作品:

      将模型验证中的代码改为

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

      在de.yml中输入翻译

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

      但我仍在寻找正确格式化该数字的方法(英语为 1.00,德语为 1,00)。

      【讨论】:

        【解决方案4】:

        您需要使用方法I18n.l 来本地化数字和日期。

        Rails 指南有一些关于错误本地化的附加信息,您应该能够将翻译直接添加到翻译文件中:http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

        【讨论】:

          猜你喜欢
          • 2013-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-04
          相关资源
          最近更新 更多