Active Model Translation

Provides integration between your object and the Rails internationalization (i18n) framework.

A minimal implementation could be:

  class TranslatedPerson
    extend ActiveModel::Translation
  end

  TranslatedPerson.human_attribute_name('my_attribute')
  # => "My attribute"

This also provides the required class methods for hooking into the Rails internationalization API, including being able to define a class based i18n_scope and lookup_ancestors to find translations in parent classes.

Methods
H
I
L
Included Modules
Instance Public methods
human_attribute_name(attribute, options = {})

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.

    # File activemodel/lib/active_model/translation.rb, line 45
45:     def human_attribute_name(attribute, options = {})
46:       defaults  = []
47:       parts     = attribute.to_s.split(".")
48:       attribute = parts.pop
49:       namespace = parts.join("/") unless parts.empty?
50: 
51:       if namespace
52:         lookup_ancestors.each do |klass|
53:           defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}/#{namespace}.#{attribute}"
54:         end
55:         defaults << :"#{self.i18n_scope}.attributes.#{namespace}.#{attribute}"
56:       else
57:         lookup_ancestors.each do |klass|
58:           defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
59:         end
60:       end
61: 
62:       defaults << :"attributes.#{attribute}"
63:       defaults << options.delete(:default) if options[:default]
64:       defaults << attribute.humanize
65: 
66:       options.reverse_merge! :count => 1, :default => defaults
67:       I18n.translate(defaults.shift, options)
68:     end
i18n_scope()

Returns the i18n_scope for the class. Overwrite if you want custom lookup.

    # File activemodel/lib/active_model/translation.rb, line 27
27:     def i18n_scope
28:       :activemodel
29:     end
lookup_ancestors()

When localizing a string, it goes through the lookup returned by this method, which is used in ActiveModel::Name#human, ActiveModel::Errors#full_messages and ActiveModel::Translation#human_attribute_name.

    # File activemodel/lib/active_model/translation.rb, line 35
35:     def lookup_ancestors
36:       self.ancestors.select { |x| x.respond_to?(:model_name) }
37:     end