From 2c555c8d60e2f33a71fbfb416a45beafc6f2b54f Mon Sep 17 00:00:00 2001 From: Jonathan Hefner Date: Wed, 9 Dec 2020 11:49:29 -0600 Subject: [PATCH] Convert translation key to string as necessary Follow-up to #39989. `I18n.translate` converts the initial key (but not `default` keys) to a string before performing a lookup. For parity, we should do the same. --- actionview/lib/action_view/helpers/translation_helper.rb | 1 + actionview/test/template/translation_helper_test.rb | 6 ++++++ 2 files changed, 7 insertions(+) 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