4

我在 Rails 3 中创建了一个虚拟(非持久)模型(见下文)

我现在需要对模型应用翻译,但标准翻译位置似乎不起作用。例如

en:
  activerecord:
    attributes:
      media_upload:
        title: "My Title"

我知道我可以使用可选的字符串参数将其直接应用于标签,例如。f.label :title, t('activerecord.attributes.media_upload') 但这不适用于验证产生的错误消息。同样,我可以按照Localize nested virtual attribute in Rails中的建议为标签助手的翻译文件添加一个键,但这也无法用于验证。

helpers:
  label:
    media_upload:
      title: "My Title"

除了重新定义所有相关的验证消息之外,还有其他方法可以在非持久模型中进行属性本地化吗?

示例模型如下所示,

class MediaUpload
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :media_file, :title

  validates_presence_of :media_file
  validates_presence_of :title

  def initialize(attributes = {})
    unless attributes.nil?
      attributes.each do |name, value|
        send("#{name}=", value)
      end
    end
  end

  def persisted?
    false
  end
end
4

2 回答 2

5

你需要这样写:

en:
  activemodel:
    attributes:
      media_upload:
        title: "My Title"

不要activerecordactivemodel

于 2013-11-06T12:32:09.303 回答
0

似乎您正在使用 simple_form gem 来生成表单。

因此,在 github 的 i18n 章节之后,您的国际化文件应如下所示

en:
  simple_form:
    labels:
      media_upload:
        media_file: My File
        title: My Title

如果您使用的是 Rails 4,那么还有一种更简单的方法来制作ActiveModel Form Objects。你可以include ActiveModel::Model这样

class MediaUpload
  include ActiveModel::Model

  attr_accessor :media_file, :title

  validates_presence_of :media_file
  validates_presence_of :title
end
于 2013-11-06T22:31:04.477 回答