From b5f9c8822dce55b33a4a6ab929f5b86b055a0284 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Mon, 24 May 2010 17:49:21 -0300 Subject: [PATCH] translate method doesn't support arrays anymore and is optimized to be used with strings or symbols MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: José Valim --- .../action_view/helpers/translation_helper.rb | 28 +++++++------------ .../test/fixtures/test/array_translation.erb | 1 - .../test/scoped_array_translation.erb | 1 - .../test/fixtures/test/scoped_translation.erb | 1 + .../test/template/translation_helper_test.rb | 16 ++--------- 5 files changed, 13 insertions(+), 34 deletions(-) delete mode 100644 actionpack/test/fixtures/test/array_translation.erb delete mode 100644 actionpack/test/fixtures/test/scoped_array_translation.erb create mode 100644 actionpack/test/fixtures/test/scoped_translation.erb diff --git a/actionpack/lib/action_view/helpers/translation_helper.rb b/actionpack/lib/action_view/helpers/translation_helper.rb index 086ad261c8..6633ef295a 100644 --- a/actionpack/lib/action_view/helpers/translation_helper.rb +++ b/actionpack/lib/action_view/helpers/translation_helper.rb @@ -3,7 +3,7 @@ require 'action_view/helpers/tag_helper' 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 ActionView # 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 @@ module ActionView 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 @@ module ActionView 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 diff --git a/actionpack/test/fixtures/test/array_translation.erb b/actionpack/test/fixtures/test/array_translation.erb deleted file mode 100644 index def3a1a0c1..0000000000 --- a/actionpack/test/fixtures/test/array_translation.erb +++ /dev/null @@ -1 +0,0 @@ -<%= t(['foo', 'bar', 'html']) %> \ No newline at end of file diff --git a/actionpack/test/fixtures/test/scoped_array_translation.erb b/actionpack/test/fixtures/test/scoped_array_translation.erb deleted file mode 100644 index 0a0c79f717..0000000000 --- a/actionpack/test/fixtures/test/scoped_array_translation.erb +++ /dev/null @@ -1 +0,0 @@ -<%= t(['.foo', '.bar']) %> \ No newline at end of file diff --git a/actionpack/test/fixtures/test/scoped_translation.erb b/actionpack/test/fixtures/test/scoped_translation.erb new file mode 100644 index 0000000000..30baa61c77 --- /dev/null +++ b/actionpack/test/fixtures/test/scoped_translation.erb @@ -0,0 +1 @@ +<%= t('.foo.bar') %> \ No newline at end of file diff --git a/actionpack/test/template/translation_helper_test.rb b/actionpack/test/template/translation_helper_test.rb index b382b5eb22..89acdc9dd3 100644 --- a/actionpack/test/template/translation_helper_test.rb +++ b/actionpack/test/template/translation_helper_test.rb @@ -18,18 +18,6 @@ class TranslationHelperTest < ActiveSupport::TestCase 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 = 'foobar' - I18n.expects(:translate).with(["foo", "bar", "html"], :raise => true).returns(['foo', 'bar']) - @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 @@ class TranslationHelperTest < ActiveSupport::TestCase 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