mirror of
https://github.com/github/rails.git
synced 2026-01-09 14:48:01 -05:00
Namespaced attribute lookup now works as 'model/association.attribute'.
This commit is contained in:
@@ -43,17 +43,25 @@ module ActiveModel
|
||||
#
|
||||
# Specify +options+ with additional translating options.
|
||||
def human_attribute_name(attribute, options = {})
|
||||
defaults = []
|
||||
lookup_ancestors.each do |klass|
|
||||
if attribute.match(/\./)
|
||||
defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute.gsub(/\./, '/')}"
|
||||
defaults = []
|
||||
parts = attribute.to_s.split(".", 2)
|
||||
attribute = parts.pop
|
||||
namespace = parts.pop
|
||||
|
||||
if namespace
|
||||
lookup_ancestors.each do |klass|
|
||||
defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}/#{namespace}.#{attribute}"
|
||||
end
|
||||
defaults << :"#{self.i18n_scope}.attributes.#{namespace}.#{attribute}"
|
||||
else
|
||||
lookup_ancestors.each do |klass|
|
||||
defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
|
||||
end
|
||||
defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
|
||||
end
|
||||
|
||||
defaults << :"attributes.#{attribute}"
|
||||
defaults << options.delete(:default) if options[:default]
|
||||
defaults << attribute.to_s.humanize
|
||||
defaults << attribute.humanize
|
||||
|
||||
options.reverse_merge! :count => 1, :default => defaults
|
||||
I18n.translate(defaults.shift, options)
|
||||
|
||||
@@ -57,13 +57,13 @@ class ActiveModelI18nTests < ActiveModel::TestCase
|
||||
end
|
||||
|
||||
def test_translated_nested_model_attributes
|
||||
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:person => {:"addresses/street" => 'Street'}}}
|
||||
assert_equal 'Street', Person.human_attribute_name('addresses.street')
|
||||
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:"person/addresses" => {:street => 'Person Address Street'}}}
|
||||
assert_equal 'Person Address Street', Person.human_attribute_name('addresses.street')
|
||||
end
|
||||
|
||||
def test_translated_nested_model_attributes_with_deprecated_lookup_style
|
||||
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:person => {:addresses => {:street => 'Street'}}}}
|
||||
assert_equal 'Street', Person.human_attribute_name('addresses.street')
|
||||
def test_translated_nested_model_attributes_with_namespace_fallback
|
||||
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:addresses => {:street => 'Cool Address Street'}}}
|
||||
assert_equal 'Cool Address Street', Person.human_attribute_name('addresses.street')
|
||||
end
|
||||
|
||||
def test_translated_model_names
|
||||
|
||||
Reference in New Issue
Block a user