aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernard Potocki <bernard.potocki@imanel.org>2015-05-04 22:26:07 +0200
committerBernard Potocki <bernard.potocki@imanel.org>2015-05-04 22:26:07 +0200
commit9c8542bb12fac316253addf24e4fa2af34d33d7d (patch)
tree7d8349b748d772ee490b91e6b7ee1af06c41da33
parent71669370ae789f547311821ab880b0f19682b405 (diff)
downloadrails-9c8542bb12fac316253addf24e4fa2af34d33d7d.tar.gz
rails-9c8542bb12fac316253addf24e4fa2af34d33d7d.tar.bz2
rails-9c8542bb12fac316253addf24e4fa2af34d33d7d.zip
Handle raise flag in translate when both main and default translation is missing. Fixes #19967
-rw-r--r--actionview/CHANGELOG.md7
-rw-r--r--actionview/lib/action_view/helpers/translation_helper.rb8
-rw-r--r--actionview/test/template/translation_helper_test.rb13
3 files changed, 24 insertions, 4 deletions
diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md
index 78ce230b3a..c002108c3a 100644
--- a/actionview/CHANGELOG.md
+++ b/actionview/CHANGELOG.md
@@ -1,3 +1,10 @@
+* `translate` should handle `raise` flag correctly in case of both main and default
+ translation is missing.
+
+ Fixes #19967
+
+ *Bernard Potocki*
+
* Load the `default_form_builder` from the controller on initialization, which overrides
the global config if it is present.
diff --git a/actionview/lib/action_view/helpers/translation_helper.rb b/actionview/lib/action_view/helpers/translation_helper.rb
index 089627a221..be80bc4ccf 100644
--- a/actionview/lib/action_view/helpers/translation_helper.rb
+++ b/actionview/lib/action_view/helpers/translation_helper.rb
@@ -62,10 +62,10 @@ module ActionView
# Note: `raise_error` refers to us re-raising the error in this method. I18n is forced to raise by default.
if options[:raise] == false || (options.key?(:rescue_format) && options[:rescue_format].nil?)
raise_error = false
- options[:raise] = false
+ i18n_raise = false
else
raise_error = options[:raise] || options[:rescue_format] || ActionView::Base.raise_on_missing_translations
- options[:raise] = true
+ i18n_raise = true
end
if html_safe_translation_key?(key)
@@ -75,11 +75,11 @@ module ActionView
html_safe_options[name] = ERB::Util.html_escape(value.to_s)
end
end
- translation = I18n.translate(scope_key_by_partial(key), html_safe_options)
+ translation = I18n.translate(scope_key_by_partial(key), html_safe_options.merge(raise: i18n_raise))
translation.respond_to?(:html_safe) ? translation.html_safe : translation
else
- I18n.translate(scope_key_by_partial(key), options)
+ I18n.translate(scope_key_by_partial(key), options.merge(raise: i18n_raise))
end
rescue I18n::MissingTranslationData => e
if remaining_defaults.present?
diff --git a/actionview/test/template/translation_helper_test.rb b/actionview/test/template/translation_helper_test.rb
index df096b3c3a..57b78112f9 100644
--- a/actionview/test/template/translation_helper_test.rb
+++ b/actionview/test/template/translation_helper_test.rb
@@ -157,6 +157,19 @@ class TranslationHelperTest < ActiveSupport::TestCase
assert_equal true, translation.html_safe?
end
+ def test_translate_with_missing_default
+ translation = translate(:'translations.missing', :default => :'translations.missing_html')
+ expected = '<span class="translation_missing" title="translation missing: en.translations.missing_html">Missing Html</span>'
+ assert_equal expected, translation
+ assert_equal true, translation.html_safe?
+ end
+
+ def test_translate_with_missing_default_and_raise_option
+ assert_raise(I18n::MissingTranslationData) do
+ translate(:'translations.missing', :default => :'translations.missing_html', :raise => true)
+ end
+ end
+
def test_translate_with_two_defaults_named_html
translation = translate(:'translations.missing', :default => [:'translations.missing_html', :'translations.hello_html'])
assert_equal '<a>Hello World</a>', translation