我有一个自定义表单构建器,其中复选框嵌套在标签内。属性名称使用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?
答案 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文件中“树”下的树的单个分支。 (或者不管当前的语言是什么。)实际上,它们充当了翻译的“路径”。
除非您明确指定范围,否则某些情况会为您选择范围。例如,在模板中,它可能是视图目录中模板的目录路径。在验证中,有一个不同的范围允许自定义消息和翻译。