全局属性本地化

Emi*_*äck 2 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我正在使用遗留数据库模式,该模式使用camelCase作为其属性,Rails不能很好地转换为人类可读的形式.对于一个模型我可以定义例如.

en:
  active_record:
    attributes:
      user:
        createDate: "Create date"
Run Code Online (Sandbox Code Playgroud)

但这仅适用于User模型.有没有办法定义"全局属性翻译"?就像是

en:
  activerecord:
    attributes:
      global: 
        createDate: "Create date"
Run Code Online (Sandbox Code Playgroud)

谢谢.

Chr*_*ley 6

Rails将在以下位置查找属性的翻译(如果您的属性名称未命名空间):

  • activerecord.attributes.{MODEL_NAME} {} ATTRIBUTE_NAME
  • 属性{属性名称}

(看一下human_attribute_name的ruby文档)

所以为了达到你想要的目标,你应该使用以下内容:

en:
  attributes:
    createDate: "Create date"
Run Code Online (Sandbox Code Playgroud)

您仍然可以通过添加翻译来覆盖这些"默认"属性名称,例如您的第一个示例

en:
  active_record:
    attributes:
      user:
        createDate: "User creation date"
Run Code Online (Sandbox Code Playgroud)

将导致:

User.human_attribute_name(:createDate) => "User creation date"
Topic.human_attribute_name(:createDate) => "Create date"
SomeOtherModelClass.human_attribute_name(:createDate) => "Create date"
Run Code Online (Sandbox Code Playgroud)