Rails虚拟模型中属性的本地化

时间:2013-09-19 04:52:33

标签: ruby-on-rails ruby-on-rails-3 localization rails-i18n

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

我现在需要将翻译应用于模型,但标准翻译位置似乎不起作用。 e.g。

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

我知道我可以使用可选的字符串参数将其直接应用于标签,例如。 f.label :title, t('activerecord.attributes.media_upload')但这不适用于验证产生的错误消息。同样,我可以按照Localise 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

2 个答案:

答案 0 :(得分:5)

你需要这样写:

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

activerecord将其替换为activemodel

答案 1 :(得分:0)

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

所以关注i18n chapter from github您的国际化文件应该如下所示

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