【问题标题】:ActiveModel::Errors translate attribute part of error message?ActiveModel::Errors 翻译错误消息的属性部分?
【发布时间】:2013-10-02 13:58:23
【问题描述】:

为以下情况寻找如何在I18n yml文件中写入翻译记录的解决方案:

class SomeClass < ActiveRecord::Base
  validate: stock_avail

  def stock_avail
    # errors is an instance of ActiveModel::Errors
    errors.add(:quantity, I18n.t('validation.stock_exceeded'))
    # how to write a translation for :quantity part ?
  end
end

errors.add 记录在 here

如何以及在哪里可以为错误消息的:quantity 属性编写翻译?

谢谢。

【问题讨论】:

  • 您要翻译属性名称“数量”还是错误信息?还是两者兼而有之?
  • 只是:quantity,如问题中所述。从第二个参数翻译消息确实没有问题。

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord activemodel


【解决方案1】:

如果是关于你的模型的属性名称,你可以添加翻译到config/locales/models/model_name/lang.yml

例如,config/locales/models/product/nl.yml 的内容可能是这样的:

nl:
  activerecord:
    models:
      product: Product
    attributes:
      product:
        name: Naam
        quantity: Aantal

现在我想知道自定义验证消息是否也可以存储在这个文件中。

另外,将此添加到config/application.rb

# Load locale files in nested dictionaries
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

【讨论】:

  • 谢谢。如果确实有帮助,我会尝试并报告。
  • 不幸的是它不起作用。通过模型名称精确创建路径,将:quantity放在yml树中但没有任何效果。
  • 是的,抱歉,我遗漏了这种方法的一个重要部分,即翻译文件的加载。查看更新的答案。
【解决方案2】:

这是@zwippie 答案的一个插件...

现在我想知道自定义验证消息是否也可以存储在这个文件中。

是的,这是在errors/messages 下,像这样:

nl:
  activerecord:
    models:
      product: Product
  attributes:
    product:
      name: Naam
      quantity: Aantal
  errors:
    messages:
      stock_exceeded: voorraad overschreden # HERE
      

所以error.add 将是:

errors.add(:quantity, :stock_exceeded)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多