Rails 4:翻译对象属性名称

时间:2014-08-13 11:57:24

标签: ruby-on-rails ruby activerecord ruby-on-rails-4 localization

我有一个自定义表单构建器,其中复选框嵌套在标签内。属性名称使用en.yml进行本地化。

CustomFormBuilder

     def check_box(attribute_name, *args)
            @template.content_tag("attribute_name", super(attribute_name, *args) + @template.content_tag("i")
       + I18n.t(attribute_name), 
       :for => "#{@object_name}_#{attribute_name}")
        end

en.yml

activerecord:
      models:
        business_profile: "Business Information"
        application_setting: "Setting"
      attributes:
        business_profile:
           company_name: "Company Name"

I18n.t(attribute_name)无效。它说

  

"翻译缺失:en.company_name"

company_name 移出活动记录时,它可以正常工作。但我希望它能在激活记录中。如何将属性转换为activerecord?

2 个答案:

答案 0 :(得分:1)

尝试:

@object.class.human_attribute_name(attribute_name)

答案 1 :(得分:1)

尝试:

I18n.t(attribute_name, scope: "activerecord.attributes.business_profile")

I18n.t(attribute_name, scope: [:activerecord, :attributes, :business_profile])

如果您愿意。

http://guides.rubyonrails.org/i18n.html

scope参数包含一个虚线字符串或符号或字符串数​​组。它们匹配翻译YAML文件中“树”下的树的单个分支。 (或者不管当前的语言是什么。)实际上,它们充当了翻译的“路径”。

除非您明确指定范围,否则某些情况会为您选择范围。例如,在模板中,它可能是视图目录中模板的目录路径。在验证中,有一个不同的范围允许自定义消息和翻译。