aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_view/helpers/translation_helper.rb16
-rw-r--r--actionpack/test/template/translation_helper_test.rb42
2 files changed, 58 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/helpers/translation_helper.rb b/actionpack/lib/action_view/helpers/translation_helper.rb
new file mode 100644
index 0000000000..0bfe6bf771
--- /dev/null
+++ b/actionpack/lib/action_view/helpers/translation_helper.rb
@@ -0,0 +1,16 @@
+require 'action_view/helpers/tag_helper'
+
+module ActionView
+ module Helpers
+ module TranslationHelper
+ def translate(*args)
+ key, locale, options = I18n.send :process_translate_arguments, *args
+ I18n.translate key, locale, options.merge(:raise => true)
+
+ rescue I18n::MissingTranslationData => e
+ keys = I18n.send :normalize_translation_keys, locale, key, options[:scope]
+ content_tag('span', keys.join(', '), :class => 'translation_missing')
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/actionpack/test/template/translation_helper_test.rb b/actionpack/test/template/translation_helper_test.rb
new file mode 100644
index 0000000000..e97bcdb731
--- /dev/null
+++ b/actionpack/test/template/translation_helper_test.rb
@@ -0,0 +1,42 @@
+require 'abstract_unit'
+
+class TranslationHelperTest < Test::Unit::TestCase
+ include ActionView::Helpers::TagHelper
+ include ActionView::Helpers::TranslationHelper
+
+ attr_reader :request
+ uses_mocha 'translation_helper_test' do
+ def setup
+ end
+
+ def test_delegates_to_i18n_setting_the_raise_option
+ I18n.expects(:translate).with(:foo, 'en-US', :raise => true)
+ translate :foo, 'en-US'
+ end
+
+ def test_returns_missing_translation_message_wrapped_into_span
+ expected = '<span class="translation_missing">en-US, foo</span>'
+ assert_equal expected, translate(:foo)
+ end
+
+ # def test_error_messages_for_given_a_header_message_option_it_does_not_translate_header_message
+ # I18n.expects(:translate).with(:'header_message', :locale => 'en-US', :scope => [:active_record, :error], :count => 1, :object_name => '').never
+ # error_messages_for(:object => @object, :header_message => 'header message', :locale => 'en-US')
+ # end
+ #
+ # def test_error_messages_for_given_no_header_message_option_it_translates_header_message
+ # I18n.expects(:t).with(:'header_message', :locale => 'en-US', :scope => [:active_record, :error], :count => 1, :object_name => '').returns 'header message'
+ # error_messages_for(:object => @object, :locale => 'en-US')
+ # end
+ #
+ # def test_error_messages_for_given_a_message_option_it_does_not_translate_message
+ # I18n.expects(:t).with(:'message', :locale => 'en-US', :scope => [:active_record, :error]).never
+ # error_messages_for(:object => @object, :message => 'message', :locale => 'en-US')
+ # end
+ #
+ # def test_error_messages_for_given_no_message_option_it_translates_message
+ # I18n.expects(:t).with(:'message', :locale => 'en-US', :scope => [:active_record, :error]).returns 'There were problems with the following fields:'
+ # error_messages_for(:object => @object, :locale => 'en-US')
+ # end
+ end
+end \ No newline at end of file