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.
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.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'activemodel/lib/active_model/translation.rb', line 44 def human_attribute_name(attribute, = {}) = { count: 1 }.merge!() parts = attribute.to_s.split(".") attribute = parts.pop namespace = parts.join("/") unless parts.empty? attributes_scope = "#{i18n_scope}.attributes" if namespace defaults = lookup_ancestors.map do |klass| :"#{attributes_scope}.#{klass.model_name.i18n_key}/#{namespace}.#{attribute}" end defaults << :"#{attributes_scope}.#{namespace}.#{attribute}" else defaults = lookup_ancestors.map do |klass| :"#{attributes_scope}.#{klass.model_name.i18n_key}.#{attribute}" end end defaults << :"attributes.#{attribute}" defaults << .delete(:default) if [:default] defaults << attribute.humanize [:default] = defaults I18n.translate(defaults.shift, **) end |
#i18n_scope ⇒ Object
Returns the i18n_scope
for the class. Overwrite 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 |