Method: ActiveModel::Translation#human_attribute_name

Defined in:
activemodel/lib/active_model/translation.rb

#human_attribute_name(attribute, options = {}) ⇒ Object

Transforms attribute names into a more human format, such as “First name” instead of “first_name”.

Person.human_attribute_name("first_name") # => "First name"

Specify options with additional translating options.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'activemodel/lib/active_model/translation.rb', line 48

def human_attribute_name(attribute, options = {})
  attribute = attribute.to_s

  if attribute.include?(".")
    namespace, _, attribute = attribute.rpartition(".")
    namespace.tr!(".", "/")

    defaults = lookup_ancestors.map do |klass|
      :"#{i18n_scope}.attributes.#{klass.model_name.i18n_key}/#{namespace}.#{attribute}"
    end
    defaults << :"#{i18n_scope}.attributes.#{namespace}.#{attribute}"
  else
    defaults = lookup_ancestors.map do |klass|
      :"#{i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
    end
  end

  raise_on_missing = options.fetch(:raise, Translation.raise_on_missing_translations)

  defaults << :"attributes.#{attribute}"
  defaults << options[:default] if options[:default]
  defaults << MISSING_TRANSLATION unless raise_on_missing

  translation = I18n.translate(defaults.shift, count: 1, raise: raise_on_missing, **options, default: defaults)
  translation = attribute.humanize if translation == MISSING_TRANSLATION
  translation
end