diff --git a/actionview/lib/action_view/helpers/translation_helper.rb b/actionview/lib/action_view/helpers/translation_helper.rb index 513290275b74d..8158dfee5d931 100644 --- a/actionview/lib/action_view/helpers/translation_helper.rb +++ b/actionview/lib/action_view/helpers/translation_helper.rb @@ -69,6 +69,7 @@ module TranslationHelper # def translate(key, **options) return key.map { |k| translate(k, **options) } if key.is_a?(Array) + key = key.to_s unless key.is_a?(Symbol) alternatives = if options.key?(:default) options[:default].is_a?(Array) ? options.delete(:default).compact : [options.delete(:default)] diff --git a/actionview/test/template/translation_helper_test.rb b/actionview/test/template/translation_helper_test.rb index a563378055ed6..847a5b0d7276b 100644 --- a/actionview/test/template/translation_helper_test.rb +++ b/actionview/test/template/translation_helper_test.rb @@ -71,6 +71,12 @@ def test_delegates_localize_to_i18n assert_equal "Tue, 08 Jul 2008 12:18:38 +0000", localize(@time, locale: "en") end + def test_converts_key_to_string_as_necessary + key = Struct.new(:to_s).new("translations.foo") + assert_equal "Foo", translate(key) + assert_equal key, translate(:"translations.missing", default: key) + end + def test_returns_missing_translation_message_without_span_wrap old_value = ActionView::Base.debug_missing_translation ActionView::Base.debug_missing_translation = false