Module: ActiveModel::Translation
- Includes:
- Naming
- Included in:
- ActiveRecord::Translation
- Defined in:
- activemodel/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 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 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.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'activemodel/lib/active_model/translation.rb', line 46 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 defaults << :"attributes.#{attribute}" defaults << [:default] if [:default] defaults << MISSING_TRANSLATION translation = I18n.translate(defaults.shift, count: 1, **, 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.
26 27 28 |
# File 'activemodel/lib/active_model/translation.rb', line 26 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.
34 35 36 |
# File 'activemodel/lib/active_model/translation.rb', line 34 def lookup_ancestors ancestors.select { |x| x.respond_to?(:model_name) } end |