Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

translate method doesn't support arrays anymore and is optimized to b…

…e used with strings or symbols

Signed-off-by: José Valim <jose.valim@gmail.com>
  • Loading branch information...
commit b5f9c8822dce55b33a4a6ab929f5b86b055a0284 1 parent 2b8eb54
@spastorino spastorino authored josevalim committed
View
28 actionpack/lib/action_view/helpers/translation_helper.rb
@@ -3,7 +3,7 @@
module ActionView
module Helpers
module TranslationHelper
- # Delegates to I18n#translate but also performs three additional functions. First, it'll catch MissingTranslationData exceptions
+ # Delegates to I18n#translate but also performs three additional functions. First, it'll catch MissingTranslationData exceptions
# and turn them into inline spans that contains the missing key, such that you can see in a view what is missing where.
#
# Second, it'll scope the key by the current partial if the key starts with a period. So if you call translate(".foo") from the
@@ -11,20 +11,14 @@ module TranslationHelper
# to translate many keys within the same partials and gives you a simple framework for scoping them consistently. If you don't
# prepend the key with a period, nothing is converted.
#
- # Third, it’ll mark the translation as safe HTML if the key has the suffix "_html" or the last element of the key is the word
- # "html". For example, calling translate("footer_html") or translate("footer.html") will return a safe HTML string that won’t
- # be escaped by other HTML helper methods. This naming convention helps to identify translations that include HTML tags so that
+ # Third, it’ll mark the translation as safe HTML if the key has the suffix "_html" or the last element of the key is the word
+ # "html". For example, calling translate("footer_html") or translate("footer.html") will return a safe HTML string that won’t
+ # 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(key, options = {})
- options[:raise] = true
- 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
+ translation = I18n.translate(scope_key_by_partial(key), options.merge!(:raise => true))
+ html_safe_translation_key?(key) ? translation.html_safe : translation
rescue I18n::MissingTranslationData => e
keys = I18n.normalize_keys(e.locale, e.key, e.options[:scope])
content_tag('span', keys.join(', '), :class => 'translation_missing')
@@ -38,12 +32,11 @@ def localize(*args)
alias :l :localize
private
-
+
def scope_key_by_partial(key)
- strkey = key.respond_to?(:join) ? key.join : key.to_s
- if strkey.first == "."
+ if key.to_s.first == "."
if @_virtual_path
- @_virtual_path.gsub(%r{/_?}, ".") + strkey
+ @_virtual_path.gsub(%r{/_?}, ".") + key.to_s
else
raise "Cannot use t(#{key.inspect}) shortcut because path is not available"
end
@@ -53,8 +46,7 @@ def scope_key_by_partial(key)
end
def html_safe_translation_key?(key)
- key = key.is_a?(Array) ? key.last : key.to_s
- key =~ /(\b|_|\.)html$/
+ key.to_s =~ /(\b|_|\.)html$/
end
end
end
View
1  actionpack/test/fixtures/test/array_translation.erb
@@ -1 +0,0 @@
-<%= t(['foo', 'bar', 'html']) %>
View
1  actionpack/test/fixtures/test/scoped_array_translation.erb
@@ -1 +0,0 @@
-<%= t(['.foo', '.bar']) %>
View
1  actionpack/test/fixtures/test/scoped_translation.erb
@@ -0,0 +1 @@
+<%= t('.foo.bar') %>
View
16 actionpack/test/template/translation_helper_test.rb
@@ -18,18 +18,6 @@ def test_returns_missing_translation_message_wrapped_into_span
assert_equal expected, translate(:foo)
end
- def test_translation_of_an_array
- I18n.expects(:translate).with(["foo", "bar"], :raise => true).returns(["foo", "bar"])
- assert_equal "foobar", translate(["foo", "bar"])
- end
-
- def test_translation_of_an_array_with_html
- 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, {})
- assert_equal expected, @view.render(:file => "test/array_translation")
- end
-
def test_delegates_localize_to_i18n
@time = Time.utc(2008, 7, 8, 12, 18, 38)
I18n.expects(:localize).with(@time)
@@ -43,9 +31,9 @@ def test_scoping_by_partial
end
def test_scoping_by_partial_of_an_array
- I18n.expects(:translate).with("test.scoped_array_translation.foo.bar", :raise => true).returns(["foo", "bar"])
+ I18n.expects(:translate).with("test.scoped_translation.foo.bar", :raise => true).returns(["foo", "bar"])
@view = ActionView::Base.new(ActionController::Base.view_paths, {})
- assert_equal "foobar", @view.render(:file => "test/scoped_array_translation")
+ assert_equal "foobar", @view.render(:file => "test/scoped_translation")
end
def test_translate_does_not_mark_plain_text_as_safe_html
Please sign in to comment.
Something went wrong with that request. Please try again.