human_attribute_name(attribute, options = {})
public
Transforms attribute names into a more human format, such as “First
name” instead of “first_name”.
Person.human_attribute_name("first_name")
Specify options with additional translating options.
# File activemodel/lib/active_model/translation.rb, line 46
def human_attribute_name(attribute, options = {})
attribute = attribute.to_s
if attribute.include?(".")
namespace, _, attribute = attribute.rpartition(".")
namespace.tr!(".", "/")
if attribute.present?
key = "#{namespace}.#{attribute}"
separator = "/"
else
key = namespace
separator = "."
end
defaults = lookup_ancestors.map do |klass|
:"#{i18n_scope}.attributes.#{klass.model_name.i18n_key}#{separator}#{key}"
end
defaults << :"#{i18n_scope}.attributes.#{key}"
defaults << :"attributes.#{key}"
else
defaults = lookup_ancestors.map do |klass|
:"#{i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
end
end
defaults << :"attributes.#{attribute}"
defaults << options[:default] if options[:default]
defaults << MISSING_TRANSLATION
translation = I18n.translate(defaults.shift, count: 1, **options, default: defaults)
if translation == MISSING_TRANSLATION
translation = attribute.present? ? attribute.humanize : namespace.humanize
end
translation
end
2Notes
For common attributes in several models, you can set a default human name like this:
==== de.yml
de:
attributes:
bez: Bezeichnung
abk: Abkürzung
What works for Active Record, also works for Mongoid:
de:
mongoid:
attributes:
picture:
explanation: Description