aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activemodel/lib/active_model/naming.rb7
-rw-r--r--activemodel/lib/active_model/translation.rb5
-rw-r--r--activemodel/test/cases/translation_test.rb10
3 files changed, 17 insertions, 5 deletions
diff --git a/activemodel/lib/active_model/naming.rb b/activemodel/lib/active_model/naming.rb
index 4c1a82f413..c7b9c41f46 100644
--- a/activemodel/lib/active_model/naming.rb
+++ b/activemodel/lib/active_model/naming.rb
@@ -21,7 +21,7 @@ module ActiveModel
@partial_path = "#{@collection}/#{@element}".freeze
@param_key = (namespace ? _singularize(@unnamespaced) : @singular).freeze
@route_key = (namespace ? ActiveSupport::Inflector.pluralize(@param_key) : @plural).freeze
- @i18n_key = self.underscore.to_sym
+ @i18n_key = self.underscore.tr('/', '.').to_sym
end
# Transform the model name into a more humane format, using I18n. By default,
@@ -35,8 +35,9 @@ module ActiveModel
@klass.respond_to?(:i18n_scope)
defaults = @klass.lookup_ancestors.map do |klass|
- klass.model_name.i18n_key
- end
+ [klass.model_name.i18n_key,
+ klass.model_name.i18n_key.to_s.tr('.', '/').to_sym]
+ end.flatten
defaults << options[:default] if options[:default]
defaults << @human
diff --git a/activemodel/lib/active_model/translation.rb b/activemodel/lib/active_model/translation.rb
index 6d64c81b5f..c615311692 100644
--- a/activemodel/lib/active_model/translation.rb
+++ b/activemodel/lib/active_model/translation.rb
@@ -44,8 +44,9 @@ module ActiveModel
# Specify +options+ with additional translating options.
def human_attribute_name(attribute, options = {})
defaults = lookup_ancestors.map do |klass|
- :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
- end
+ [:"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}",
+ :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key.to_s.tr('.', '/')}.#{attribute}"]
+ end.flatten
defaults << :"attributes.#{attribute}"
defaults << options.delete(:default) if options[:default]
diff --git a/activemodel/test/cases/translation_test.rb b/activemodel/test/cases/translation_test.rb
index 1b1d972d5c..838956bc98 100644
--- a/activemodel/test/cases/translation_test.rb
+++ b/activemodel/test/cases/translation_test.rb
@@ -76,5 +76,15 @@ class ActiveModelI18nTests < ActiveModel::TestCase
Person.model_name.human(options)
assert_equal({:default => 'person model'}, options)
end
+
+ def test_alternate_namespaced_model_attribute_translation
+ I18n.backend.store_translations 'en', :activemodel => {:attributes => {:person => {:gender => {:attribute => 'person gender attribute'}}}}
+ assert_equal 'person gender attribute', Person::Gender.human_attribute_name('attribute')
+ end
+
+ def test_alternate_namespaced_model_translation
+ I18n.backend.store_translations 'en', :activemodel => {:models => {:person => {:gender => 'person gender model'}}}
+ assert_equal 'person gender model', Person::Gender.model_name.human
+ end
end