提交 2b8eb540 编写于 作者: S Santiago Pastorino 提交者: José Valim

Revert "translation method for arrays on TranslationHelper module returns an...

Revert "translation method for arrays on TranslationHelper module returns an array where values for keys of the form (.|_)html keys are html_safe"

This reverts commit 05c95b5c.
Signed-off-by: NJosé Valim <jose.valim@gmail.com>
上级 8e583b69
......@@ -16,14 +16,15 @@ module TranslationHelper
# be escaped by other HTML helper methods. This naming convention helps to identify translations that include HTML tags so that
# you know what kind of output to expect when you call translate in a template.
def translate(keys, options = {})
def translate(key, options = {})
options[:raise] = true
are_keys_a_string = keys.is_a?(String)
keys = scope_keys_by_partial(keys)
translations = I18n.translate(keys, options)
translations = html_safe_translation_keys(keys, Array.wrap(translations))
are_keys_a_string ? translations.first : translations
translation = I18n.translate(scope_key_by_partial(key), options)
translation = (translation.respond_to?(:join) ? translation.join : translation)
if html_safe_translation_key?(key)
translation.html_safe
else
translation
end
rescue I18n::MissingTranslationData => e
keys = I18n.normalize_keys(e.locale, e.key, e.options[:scope])
content_tag('span', keys.join(', '), :class => 'translation_missing')
......@@ -38,23 +39,22 @@ def localize(*args)
private
def scope_keys_by_partial(keys)
Array.wrap(keys).map do |key|
if key.to_s.first == "."
unless @_virtual_path
def scope_key_by_partial(key)
strkey = key.respond_to?(:join) ? key.join : key.to_s
if strkey.first == "."
if @_virtual_path
@_virtual_path.gsub(%r{/_?}, ".") + strkey
else
raise "Cannot use t(#{key.inspect}) shortcut because path is not available"
end
@_virtual_path.gsub(%r{/_?}, ".") + key
else
key
end
end
end
def html_safe_translation_keys(keys, translations)
keys.zip(translations).map do |key, translation|
key =~ /(\b|_|\.)html$/ ? translation.html_safe : translation
end
def html_safe_translation_key?(key)
key = key.is_a?(Array) ? key.last : key.to_s
key =~ /(\b|_|\.)html$/
end
end
end
......
<% translation = t(['foo', 'bar', 'baz_html']) %><%= translation.first %>, <%= translation.second %>, <%= translation.third %>
\ No newline at end of file
<%= t(['foo', 'bar', 'html']) %>
\ No newline at end of file
<%= t(['.foo', '.bar']).join(", ") %>
\ No newline at end of file
<%= t(['.foo', '.bar']) %>
\ No newline at end of file
......@@ -9,7 +9,7 @@ def setup
end
def test_delegates_to_i18n_setting_the_raise_option
I18n.expects(:translate).with([:foo], :locale => 'en', :raise => true).returns([""])
I18n.expects(:translate).with(:foo, :locale => 'en', :raise => true).returns("")
translate :foo, :locale => 'en'
end
......@@ -20,14 +20,13 @@ def test_returns_missing_translation_message_wrapped_into_span
def test_translation_of_an_array
I18n.expects(:translate).with(["foo", "bar"], :raise => true).returns(["foo", "bar"])
assert_equal ["foo", "bar"], translate(["foo", "bar"])
assert_equal "foobar", translate(["foo", "bar"])
end
def test_translation_of_an_array_with_html
translate_expected = ['<a href="#">foo</a>', '<a href="#">bar</a>', '<a href="#">baz</a>']
I18n.expects(:translate).with(["foo", "bar", "baz_html"], :raise => true).returns(translate_expected)
expected = '<a href="#">foo</a><a href="#">bar</a>'
I18n.expects(:translate).with(["foo", "bar", "html"], :raise => true).returns(['<a href="#">foo</a>', '<a href="#">bar</a>'])
@view = ActionView::Base.new(ActionController::Base.view_paths, {})
expected = '&lt;a href=&quot;#&quot;&gt;foo&lt;/a&gt;, &lt;a href=&quot;#&quot;&gt;bar&lt;/a&gt;, <a href="#">baz</a>'
assert_equal expected, @view.render(:file => "test/array_translation")
end
......@@ -38,29 +37,29 @@ def test_delegates_localize_to_i18n
end
def test_scoping_by_partial
I18n.expects(:translate).with(["test.translation.helper"], :raise => true).returns(["helper"])
I18n.expects(:translate).with("test.translation.helper", :raise => true).returns("helper")
@view = ActionView::Base.new(ActionController::Base.view_paths, {})
assert_equal "helper", @view.render(:file => "test/translation")
end
def test_scoping_by_partial_of_an_array
I18n.expects(:translate).with(["test.scoped_array_translation.foo", "test.scoped_array_translation.bar"], :raise => true).returns(["foo", "bar"])
I18n.expects(:translate).with("test.scoped_array_translation.foo.bar", :raise => true).returns(["foo", "bar"])
@view = ActionView::Base.new(ActionController::Base.view_paths, {})
assert_equal "foo, bar", @view.render(:file => "test/scoped_array_translation")
assert_equal "foobar", @view.render(:file => "test/scoped_array_translation")
end
def test_translate_does_not_mark_plain_text_as_safe_html
I18n.expects(:translate).with(["hello"], :raise => true).returns(["Hello World"])
I18n.expects(:translate).with("hello", :raise => true).returns("Hello World")
assert_equal false, translate("hello").html_safe?
end
def test_translate_marks_translations_named_html_as_safe_html
I18n.expects(:translate).with(["html"], :raise => true).returns(["<a>Hello World</a>"])
I18n.expects(:translate).with("html", :raise => true).returns("<a>Hello World</a>")
assert translate("html").html_safe?
end
def test_translate_marks_translations_with_a_html_suffix_as_safe_html
I18n.expects(:translate).with(["hello_html"], :raise => true).returns(["<a>Hello World</a>"])
I18n.expects(:translate).with("hello_html", :raise => true).returns("<a>Hello World</a>")
assert translate("hello_html").html_safe?
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册