Skip to content

Commit

Permalink
Handle raise flag in translate when both main and default translation…
Browse files Browse the repository at this point in the history
… is missing. Fixes #19967
  • Loading branch information
imanel committed May 4, 2015
1 parent 7166937 commit 9c8542b
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
7 changes: 7 additions & 0 deletions actionview/CHANGELOG.md
Original file line number Original file line Diff line number Diff line change
@@ -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 * Load the `default_form_builder` from the controller on initialization, which overrides
the global config if it is present. the global config if it is present.


Expand Down
8 changes: 4 additions & 4 deletions actionview/lib/action_view/helpers/translation_helper.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ def translate(key, options = {})
# Note: `raise_error` refers to us re-raising the error in this method. I18n is forced to raise by default. # 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?) if options[:raise] == false || (options.key?(:rescue_format) && options[:rescue_format].nil?)
raise_error = false raise_error = false
options[:raise] = false i18n_raise = false
else else
raise_error = options[:raise] || options[:rescue_format] || ActionView::Base.raise_on_missing_translations raise_error = options[:raise] || options[:rescue_format] || ActionView::Base.raise_on_missing_translations
options[:raise] = true i18n_raise = true
end end


if html_safe_translation_key?(key) if html_safe_translation_key?(key)
Expand All @@ -75,11 +75,11 @@ def translate(key, options = {})
html_safe_options[name] = ERB::Util.html_escape(value.to_s) html_safe_options[name] = ERB::Util.html_escape(value.to_s)
end end
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 translation.respond_to?(:html_safe) ? translation.html_safe : translation
else else
I18n.translate(scope_key_by_partial(key), options) I18n.translate(scope_key_by_partial(key), options.merge(raise: i18n_raise))
end end
rescue I18n::MissingTranslationData => e rescue I18n::MissingTranslationData => e
if remaining_defaults.present? if remaining_defaults.present?
Expand Down
13 changes: 13 additions & 0 deletions actionview/test/template/translation_helper_test.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -157,6 +157,19 @@ def test_translate_with_default_named_html
assert_equal true, translation.html_safe? assert_equal true, translation.html_safe?
end 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 def test_translate_with_two_defaults_named_html
translation = translate(:'translations.missing', :default => [:'translations.missing_html', :'translations.hello_html']) translation = translate(:'translations.missing', :default => [:'translations.missing_html', :'translations.hello_html'])
assert_equal '<a>Hello World</a>', translation assert_equal '<a>Hello World</a>', translation
Expand Down

0 comments on commit 9c8542b

Please sign in to comment.