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
-
#raise_on_missing_translations ⇒ Object
Returns the value of attribute raise_on_missing_translations.
Instance Method Summary collapse
-
#human_attribute_name(attribute, options = {}) ⇒ Object
Transforms attribute names into a more human format, such as “First name” instead of “first_name”.
-
#i18n_scope ⇒ Object
Returns the
i18n_scope
for the class. -
#lookup_ancestors ⇒ Object
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.
Methods included from Naming
extended, #model_name, param_key, plural, route_key, singular, singular_route_key, uncountable?
Instance Attribute Details
#raise_on_missing_translations ⇒ Object
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, = {}) 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 = .fetch(:raise, Translation.raise_on_missing_translations) defaults << :"attributes.#{attribute}" defaults << [:default] if [:default] defaults << MISSING_TRANSLATION unless raise_on_missing translation = I18n.translate(defaults.shift, count: 1, raise: raise_on_missing, **, default: defaults) translation = attribute.humanize if translation == MISSING_TRANSLATION translation end |
#i18n_scope ⇒ Object
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_ancestors ⇒ Object
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 |