mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
wrap translate defaults to use translate helper features, closes #1102
This commit is contained in:
parent
24f143789a
commit
c9f528defa
3 changed files with 41 additions and 1 deletions
|
@ -45,6 +45,7 @@ module ActionView
|
|||
# you know what kind of output to expect when you call translate in a template.
|
||||
def translate(key, options = {})
|
||||
options.merge!(:rescue_format => :html) unless options.key?(:rescue_format)
|
||||
options[:default] = wrap_translate_defaults(options[:default]) if options[:default]
|
||||
if html_safe_translation_key?(key)
|
||||
html_safe_options = options.dup
|
||||
options.except(*I18n::RESERVED_KEYS).each do |name, value|
|
||||
|
@ -83,6 +84,21 @@ module ActionView
|
|||
def html_safe_translation_key?(key)
|
||||
key.to_s =~ /(\b|_|\.)html$/
|
||||
end
|
||||
|
||||
def wrap_translate_defaults(defaults)
|
||||
new_defaults = []
|
||||
defaults = Array(defaults)
|
||||
while key = defaults.shift
|
||||
if key.is_a?(Symbol)
|
||||
new_defaults << lambda { |_, options| translate key, options.merge(:default => defaults) }
|
||||
break
|
||||
else
|
||||
new_defautls << key
|
||||
end
|
||||
end
|
||||
|
||||
new_defaults
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
1
actionpack/test/fixtures/translations/templates/default.erb
vendored
Normal file
1
actionpack/test/fixtures/translations/templates/default.erb
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
<%= t('.missing', :default => :'.foo') %>
|
|
@ -11,7 +11,8 @@ class TranslationHelperTest < ActiveSupport::TestCase
|
|||
:translations => {
|
||||
:templates => {
|
||||
:found => { :foo => 'Foo' },
|
||||
:array => { :foo => { :bar => 'Foo Bar' } }
|
||||
:array => { :foo => { :bar => 'Foo Bar' } },
|
||||
:default => { :foo => 'Foo' }
|
||||
},
|
||||
:foo => 'Foo',
|
||||
:hello => '<a>Hello World</a>',
|
||||
|
@ -71,6 +72,10 @@ class TranslationHelperTest < ActiveSupport::TestCase
|
|||
assert_equal 'Foo Bar', @view.render(:file => 'translations/templates/array').strip
|
||||
end
|
||||
|
||||
def test_default_lookup_scoped_by_partial
|
||||
assert_equal 'Foo', view.render(:file => 'translations/templates/default').strip
|
||||
end
|
||||
|
||||
def test_missing_translation_scoped_by_partial
|
||||
expected = '<span class="translation_missing" title="translation missing: en.translations.templates.missing.missing">Missing</span>'
|
||||
assert_equal expected, view.render(:file => 'translations/templates/missing').strip
|
||||
|
@ -102,4 +107,22 @@ class TranslationHelperTest < ActiveSupport::TestCase
|
|||
def test_translation_returning_an_array_ignores_html_suffix
|
||||
assert_equal ["foo", "bar"], translate(:'translations.array_html')
|
||||
end
|
||||
|
||||
def test_translate_with_default_named_html
|
||||
translation = translate(:'translations.missing', :default => :'translations.hello_html')
|
||||
assert_equal '<a>Hello World</a>', translation
|
||||
assert translation.html_safe?
|
||||
end
|
||||
|
||||
def test_translate_with_two_defaults_named_html
|
||||
translation = translate(:'translations.missing', :default => [:'translations.missing_html', :'translations.hello_html'])
|
||||
assert_equal '<a>Hello World</a>', translation
|
||||
assert translation.html_safe?
|
||||
end
|
||||
|
||||
def test_translate_with_last_default_named_html
|
||||
translation = translate(:'translations.missing', :default => [:'translations.missing', :'translations.hello_html'])
|
||||
assert_equal '<a>Hello World</a>', translation
|
||||
assert translation.html_safe?
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue