Module: ActiveModel::Translation

Includes:
Naming
Defined in:
lib/active_model/translation.rb

Overview

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.

Constant Summary collapse

MISSING_TRANSLATION =

:nodoc:

-(2**60) # :nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Naming

extended, #model_name, param_key, plural, route_key, singular, singular_route_key, uncountable?

Instance Attribute Details

#raise_on_missing_translationsObject

Returns the value of attribute raise_on_missing_translations.



25
26
27
# File 'lib/active_model/translation.rb', line 25

def raise_on_missing_translations
  @raise_on_missing_translations
end

Instance Method Details

#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 '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

#i18n_scopeObject

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



28
29
30
# File 'lib/active_model/translation.rb', line 28

def i18n_scope
  :activemodel
end

#lookup_ancestorsObject

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.



36
37
38
# File 'lib/active_model/translation.rb', line 36

def lookup_ancestors
  ancestors.select { |x| x.respond_to?(:model_name) }
end