thedarkone-i18n 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.textile +57 -0
- data/README.textile +43 -9
- data/Rakefile +21 -0
- data/VERSION +1 -0
- data/lib/i18n.rb +87 -16
- data/lib/i18n/backend/base.rb +251 -0
- data/lib/i18n/backend/cache.rb +71 -0
- data/lib/i18n/backend/chain.rb +64 -0
- data/lib/i18n/backend/fallbacks.rb +53 -0
- data/lib/i18n/backend/fast.rb +53 -22
- data/lib/i18n/backend/fast/interpolation_compiler.rb +84 -0
- data/lib/i18n/backend/gettext.rb +65 -0
- data/lib/i18n/backend/lazy_reloading.rb +60 -0
- data/lib/i18n/backend/pluralization.rb +56 -0
- data/lib/i18n/backend/simple.rb +17 -240
- data/lib/i18n/exceptions.rb +13 -5
- data/lib/i18n/gettext.rb +25 -0
- data/lib/i18n/helpers/gettext.rb +35 -0
- data/lib/i18n/locale/fallbacks.rb +100 -0
- data/lib/i18n/locale/tag.rb +27 -0
- data/lib/i18n/locale/tag/parents.rb +24 -0
- data/lib/i18n/locale/tag/rfc4646.rb +78 -0
- data/lib/i18n/locale/tag/simple.rb +44 -0
- data/test/all.rb +5 -7
- data/test/api/basics.rb +15 -0
- data/test/api/interpolation.rb +85 -0
- data/test/api/lambda.rb +52 -0
- data/test/api/link.rb +47 -0
- data/test/api/localization/date.rb +65 -0
- data/test/api/localization/date_time.rb +63 -0
- data/test/api/localization/lambda.rb +26 -0
- data/test/api/localization/time.rb +63 -0
- data/test/api/pluralization.rb +37 -0
- data/test/api/translation.rb +51 -0
- data/test/backend/cache/cache_test.rb +57 -0
- data/test/backend/chain/api_test.rb +80 -0
- data/test/backend/chain/chain_test.rb +64 -0
- data/test/backend/fallbacks/api_test.rb +79 -0
- data/test/backend/fallbacks/fallbacks_test.rb +29 -0
- data/test/backend/fast/all.rb +5 -0
- data/test/backend/fast/api_test.rb +91 -0
- data/test/backend/fast/interpolation_compiler_test.rb +84 -0
- data/test/backend/fast/lookup_test.rb +24 -0
- data/test/backend/fast/setup.rb +22 -0
- data/test/backend/fast/translations_test.rb +89 -0
- data/test/backend/lazy_reloading/reloading_test.rb +67 -0
- data/test/backend/pluralization/api_test.rb +81 -0
- data/test/backend/pluralization/pluralization_test.rb +39 -0
- data/test/backend/simple/all.rb +5 -0
- data/test/backend/simple/api_test.rb +90 -0
- data/test/backend/simple/lookup_test.rb +24 -0
- data/test/backend/simple/setup.rb +151 -0
- data/test/backend/simple/translations_test.rb +89 -0
- data/test/fixtures/locales/de.po +61 -0
- data/test/fixtures/locales/en.rb +3 -0
- data/test/fixtures/locales/en.yml +3 -0
- data/test/fixtures/locales/plurals.rb +112 -0
- data/test/gettext/api_test.rb +78 -0
- data/test/gettext/backend_test.rb +35 -0
- data/test/i18n_exceptions_test.rb +6 -25
- data/test/i18n_load_path_test.rb +23 -0
- data/test/i18n_test.rb +56 -18
- data/test/locale/fallbacks_test.rb +128 -0
- data/test/locale/tag/rfc4646_test.rb +147 -0
- data/test/locale/tag/simple_test.rb +35 -0
- data/test/test_helper.rb +72 -0
- data/test/with_options.rb +34 -0
- metadata +109 -19
- data/i18n.gemspec +0 -31
- data/lib/i18n/backend/fast/pluralization_compiler.rb +0 -50
- data/test/backend_test.rb +0 -633
- data/test/fast_backend_test.rb +0 -34
- data/test/locale/en.rb +0 -1
- data/test/locale/en.yml +0 -3
- data/test/pluralization_compiler_test.rb +0 -35
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
4
|
+
require 'i18n/backend/chain'
|
5
|
+
|
6
|
+
class I18nChainBackendTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@first = backend(:en => {
|
9
|
+
:foo => 'Foo', :formats => { :short => 'short' }, :plural_1 => { :one => '{{count}}' }
|
10
|
+
})
|
11
|
+
@second = backend(:en => {
|
12
|
+
:bar => 'Bar', :formats => { :long => 'long' }, :plural_2 => { :one => 'one' }
|
13
|
+
})
|
14
|
+
@chain = I18n.backend = I18n::Backend::Chain.new(@first, @second)
|
15
|
+
end
|
16
|
+
|
17
|
+
define_method "test: looks up translations from the first chained backend" do
|
18
|
+
assert_equal 'Foo', @first.send(:translations)[:en][:foo]
|
19
|
+
assert_equal 'Foo', I18n.t(:foo)
|
20
|
+
end
|
21
|
+
|
22
|
+
define_method "test: looks up translations from the second chained backend" do
|
23
|
+
assert_equal 'Bar', @second.send(:translations)[:en][:bar]
|
24
|
+
assert_equal 'Bar', I18n.t(:bar)
|
25
|
+
end
|
26
|
+
|
27
|
+
define_method "test: defaults only apply to lookups on the last backend in the chain" do
|
28
|
+
assert_equal 'Foo', I18n.t(:foo, :default => 'Bah')
|
29
|
+
assert_equal 'Bar', I18n.t(:bar, :default => 'Bah')
|
30
|
+
assert_equal 'Bah', I18n.t(:bah, :default => 'Bah') # default kicks in only here
|
31
|
+
end
|
32
|
+
|
33
|
+
define_method "test: default" do
|
34
|
+
assert_equal 'Fuh', I18n.t(:default => 'Fuh')
|
35
|
+
assert_equal 'Zero', I18n.t(:default => { :zero => 'Zero' }, :count => 0)
|
36
|
+
assert_equal({ :zero => 'Zero' }, I18n.t(:default => { :zero => 'Zero' }))
|
37
|
+
assert_equal 'Foo', I18n.t(:default => :foo)
|
38
|
+
end
|
39
|
+
|
40
|
+
define_method "test: namespace lookup collects results from all backends" do
|
41
|
+
assert_equal({ :short => 'short', :long => 'long' }, I18n.t(:formats))
|
42
|
+
end
|
43
|
+
|
44
|
+
define_method "test: namespace lookup with only the first backend returning a result" do
|
45
|
+
assert_equal({ :one => '{{count}}' }, I18n.t(:plural_1))
|
46
|
+
end
|
47
|
+
|
48
|
+
define_method "test: pluralization still works" do
|
49
|
+
assert_equal '1', I18n.t(:plural_1, :count => 1)
|
50
|
+
assert_equal 'one', I18n.t(:plural_2, :count => 1)
|
51
|
+
end
|
52
|
+
|
53
|
+
define_method "test: bulk lookup collects results from all backends" do
|
54
|
+
assert_equal ['Foo', 'Bar'], I18n.t([:foo, :bar])
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
def backend(translations)
|
60
|
+
backend = I18n::Backend::Simple.new
|
61
|
+
translations.each { |locale, translations| backend.store_translations(locale, translations) }
|
62
|
+
backend
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
4
|
+
require 'i18n/backend/fallbacks'
|
5
|
+
|
6
|
+
module FallbacksSetup
|
7
|
+
def setup
|
8
|
+
super
|
9
|
+
I18n.backend.meta_class.send(:include, I18n::Backend::Fallbacks)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_uses_fallbacks
|
13
|
+
assert I18n.backend.meta_class.included_modules.include?(I18n::Backend::Fallbacks)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class I18nFallbacksBackendApiBasicsTest < Test::Unit::TestCase
|
18
|
+
include FallbacksSetup
|
19
|
+
include Tests::Backend::Api::Basics
|
20
|
+
end
|
21
|
+
|
22
|
+
class I18nFallbacksBackendApiTranslateTest < Test::Unit::TestCase
|
23
|
+
include Tests::Backend::Simple::Setup::Base
|
24
|
+
include FallbacksSetup
|
25
|
+
include Tests::Backend::Api::Translation
|
26
|
+
end
|
27
|
+
|
28
|
+
class I18nFallbacksBackendApiInterpolateTest < Test::Unit::TestCase
|
29
|
+
include Tests::Backend::Simple::Setup::Base
|
30
|
+
include FallbacksSetup
|
31
|
+
include Tests::Backend::Api::Interpolation
|
32
|
+
end
|
33
|
+
|
34
|
+
class I18nFallbacksBackendApiLambdaTest < Test::Unit::TestCase
|
35
|
+
include Tests::Backend::Simple::Setup::Base
|
36
|
+
include FallbacksSetup
|
37
|
+
include Tests::Backend::Api::Lambda
|
38
|
+
end
|
39
|
+
|
40
|
+
class I18nFallbacksBackendApiTranslateLinkedTest < Test::Unit::TestCase
|
41
|
+
include Tests::Backend::Simple::Setup::Base
|
42
|
+
include FallbacksSetup
|
43
|
+
include Tests::Backend::Api::Link
|
44
|
+
end
|
45
|
+
|
46
|
+
class I18nFallbacksBackendApiPluralizationTest < Test::Unit::TestCase
|
47
|
+
include Tests::Backend::Simple::Setup::Base
|
48
|
+
include FallbacksSetup
|
49
|
+
include Tests::Backend::Api::Pluralization
|
50
|
+
end
|
51
|
+
|
52
|
+
class I18nFallbacksBackendApiLocalizeDateTest < Test::Unit::TestCase
|
53
|
+
include Tests::Backend::Simple::Setup::Base
|
54
|
+
include Tests::Backend::Simple::Setup::Localization
|
55
|
+
include FallbacksSetup
|
56
|
+
include Tests::Backend::Api::Localization::Date
|
57
|
+
end
|
58
|
+
|
59
|
+
class I18nFallbacksBackendApiLocalizeDateTimeTest < Test::Unit::TestCase
|
60
|
+
include Tests::Backend::Simple::Setup::Base
|
61
|
+
include Tests::Backend::Simple::Setup::Localization
|
62
|
+
include FallbacksSetup
|
63
|
+
include Tests::Backend::Api::Localization::DateTime
|
64
|
+
end
|
65
|
+
|
66
|
+
class I18nFallbacksBackendApiLocalizeTimeTest < Test::Unit::TestCase
|
67
|
+
include Tests::Backend::Simple::Setup::Base
|
68
|
+
include Tests::Backend::Simple::Setup::Localization
|
69
|
+
include FallbacksSetup
|
70
|
+
include Tests::Backend::Api::Localization::Time
|
71
|
+
end
|
72
|
+
|
73
|
+
class I18nFallbacksBackendApiLocalizeLambdaTest < Test::Unit::TestCase
|
74
|
+
include Tests::Backend::Simple::Setup::Base
|
75
|
+
include Tests::Backend::Simple::Setup::Localization
|
76
|
+
include FallbacksSetup
|
77
|
+
include Tests::Backend::Api::Localization::Lambda
|
78
|
+
end
|
79
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
4
|
+
require 'i18n/backend/fallbacks'
|
5
|
+
|
6
|
+
class I18nFallbacksBackendTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
I18n.backend = I18n::Backend::Simple.new
|
9
|
+
I18n.backend.meta_class.send(:include, I18n::Backend::Fallbacks)
|
10
|
+
backend_store_translations(:en, :foo => 'Foo')
|
11
|
+
end
|
12
|
+
|
13
|
+
define_method "test: fallbacks for :de are [:de, :en]" do
|
14
|
+
assert_equal [:de, :en], I18n.fallbacks[:de]
|
15
|
+
end
|
16
|
+
|
17
|
+
define_method "test: still returns the English translation as usual" do
|
18
|
+
assert_equal 'Foo', I18n.t(:foo, :locale => :en)
|
19
|
+
end
|
20
|
+
|
21
|
+
define_method "test: returns the English translation for a missing German translation" do
|
22
|
+
assert_equal 'Foo', I18n.t(:foo, :locale => :de)
|
23
|
+
end
|
24
|
+
|
25
|
+
define_method "test: raises I18n::MissingTranslationData exception when no translation was found" do
|
26
|
+
assert_raises(I18n::MissingTranslationData) { I18n.t(:bar, :locale => :en, :raise => true) }
|
27
|
+
assert_raises(I18n::MissingTranslationData) { I18n.t(:bar, :locale => :de, :raise => true) }
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
4
|
+
|
5
|
+
class I18nFastBackendApiBasicsTest < Test::Unit::TestCase
|
6
|
+
include Tests::Backend::Fast::Setup::Base
|
7
|
+
include Tests::Backend::Api::Basics
|
8
|
+
|
9
|
+
def test_uses_fast_backend
|
10
|
+
assert_equal I18n::Backend::Fast, I18n.backend.class
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class I18nFastBackendApiTranslateTest < Test::Unit::TestCase
|
15
|
+
include Tests::Backend::Fast::Setup::Base
|
16
|
+
include Tests::Backend::Api::Translation
|
17
|
+
|
18
|
+
# implementation specific tests
|
19
|
+
|
20
|
+
def test_translate_calls_lookup_with_locale_given
|
21
|
+
I18n.backend.expects(:lookup).with('de', :bar, [:foo], nil).returns 'bar'
|
22
|
+
I18n.backend.translate 'de', :bar, :scope => [:foo]
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_translate_calls_pluralize
|
26
|
+
I18n.backend.expects(:pluralize).with('en', 'bar', 1).returns('bar')
|
27
|
+
I18n.backend.translate 'en', :bar, :scope => [:foo], :count => 1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class I18nFastBackendApiInterpolateTest < Test::Unit::TestCase
|
32
|
+
include Tests::Backend::Fast::Setup::Base
|
33
|
+
include Tests::Backend::Api::Interpolation
|
34
|
+
|
35
|
+
# pre-compile default strings to make sure we are testing I18n::Fast::InterpolationCompiler
|
36
|
+
def interpolate(options)
|
37
|
+
if default_str = options[:default]
|
38
|
+
I18n::Backend::Fast::InterpolationCompiler.compile_if_an_interpolation(default_str)
|
39
|
+
end
|
40
|
+
super
|
41
|
+
end
|
42
|
+
|
43
|
+
# I kinda don't think this really is a correct behavior
|
44
|
+
undef :test_interpolation_given_no_interpolation_values_it_does_not_alter_the_string
|
45
|
+
|
46
|
+
# implementation specific tests
|
47
|
+
|
48
|
+
def test_interpolate_given_nil_as_a_string_returns_nil
|
49
|
+
assert_nil I18n.backend.send(:interpolate, nil, nil, :name => 'David')
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_interpolate_given_an_non_string_as_a_string_returns_nil
|
53
|
+
assert_equal [], I18n.backend.send(:interpolate, nil, [], :name => 'David')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class I18nFastBackendApiLambdaTest < Test::Unit::TestCase
|
58
|
+
include Tests::Backend::Fast::Setup::Base
|
59
|
+
include Tests::Backend::Api::Lambda
|
60
|
+
end
|
61
|
+
|
62
|
+
class I18nFastBackendApiTranslateLinkedTest < Test::Unit::TestCase
|
63
|
+
include Tests::Backend::Fast::Setup::Base
|
64
|
+
include Tests::Backend::Api::Link
|
65
|
+
end
|
66
|
+
|
67
|
+
class I18nFastBackendApiPluralizationTest < Test::Unit::TestCase
|
68
|
+
include Tests::Backend::Fast::Setup::Base
|
69
|
+
include Tests::Backend::Api::Pluralization
|
70
|
+
end
|
71
|
+
|
72
|
+
class I18nFastBackendApiLocalizeDateTest < Test::Unit::TestCase
|
73
|
+
include Tests::Backend::Fast::Setup::Localization
|
74
|
+
include Tests::Backend::Api::Localization::Date
|
75
|
+
end
|
76
|
+
|
77
|
+
class I18nFastBackendApiLocalizeDateTimeTest < Test::Unit::TestCase
|
78
|
+
include Tests::Backend::Fast::Setup::Localization
|
79
|
+
include Tests::Backend::Api::Localization::DateTime
|
80
|
+
end
|
81
|
+
|
82
|
+
class I18nFastBackendApiLocalizeTimeTest < Test::Unit::TestCase
|
83
|
+
include Tests::Backend::Fast::Setup::Localization
|
84
|
+
include Tests::Backend::Api::Localization::Time
|
85
|
+
end
|
86
|
+
|
87
|
+
class I18nFastBackendApiLocalizeLambdaTest < Test::Unit::TestCase
|
88
|
+
include Tests::Backend::Fast::Setup::Localization
|
89
|
+
include Tests::Backend::Api::Localization::Lambda
|
90
|
+
end
|
91
|
+
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$:.unshift "lib"
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'i18n'
|
7
|
+
|
8
|
+
InterpolationCompiler = I18n::Backend::Fast::InterpolationCompiler
|
9
|
+
|
10
|
+
class InterpolationCompilerTest < Test::Unit::TestCase
|
11
|
+
def compile_and_interpolate(str, values = {})
|
12
|
+
InterpolationCompiler.compile_if_an_interpolation(str).i18n_interpolate(values)
|
13
|
+
end
|
14
|
+
|
15
|
+
def assert_escapes_interpolation_key(expected, malicious_str)
|
16
|
+
assert_equal(expected, InterpolationCompiler.send(:escape_key_sym, malicious_str))
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_escape_key_properly_escapes
|
20
|
+
assert_escapes_interpolation_key ':"\""', '"'
|
21
|
+
assert_escapes_interpolation_key ':"\\\\"', '\\'
|
22
|
+
assert_escapes_interpolation_key ':"\\\\\""', '\\"'
|
23
|
+
assert_escapes_interpolation_key ':"\#{}"', '#{}'
|
24
|
+
assert_escapes_interpolation_key ':"\\\\\#{}"', '\#{}'
|
25
|
+
end
|
26
|
+
|
27
|
+
def assert_escapes_plain_string(expected, plain_str)
|
28
|
+
assert_equal expected, InterpolationCompiler.send(:escape_plain_str, plain_str)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_escape_plain_string_properly_escapes
|
32
|
+
assert_escapes_plain_string '\\"', '"'
|
33
|
+
assert_escapes_plain_string '\'', '\''
|
34
|
+
assert_escapes_plain_string '\\#', '#'
|
35
|
+
assert_escapes_plain_string '\\#{}', '#{}'
|
36
|
+
assert_escapes_plain_string '\\\\\\"','\\"'
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_non_interpolated_strings_or_arrays_dont_get_compiled
|
40
|
+
['abc', '\\{a}}', '{a}}', []].each do |obj|
|
41
|
+
InterpolationCompiler.compile_if_an_interpolation(obj)
|
42
|
+
assert_equal false, obj.respond_to?(:i18n_interpolate)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_interpolated_string_gets_compiled
|
47
|
+
assert_equal '-A-', compile_and_interpolate('-{{a}}-', :a => 'A')
|
48
|
+
end
|
49
|
+
|
50
|
+
def assert_handles_key(str, key)
|
51
|
+
assert_equal 'A', compile_and_interpolate(str, key => 'A')
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_compiles_fancy_keys
|
55
|
+
assert_handles_key('{{\}}', :'\\' )
|
56
|
+
assert_handles_key('{{#}}', :'#' )
|
57
|
+
assert_handles_key('{{#{}}', :'#{' )
|
58
|
+
assert_handles_key('{{#$SAFE}}', :'#$SAFE')
|
59
|
+
assert_handles_key('{{\000}}', :'\000' )
|
60
|
+
assert_handles_key('{{\'}}', :'\'' )
|
61
|
+
assert_handles_key('{{\'\'}}', :'\'\'' )
|
62
|
+
assert_handles_key('{{a.b}}', :'a.b' )
|
63
|
+
assert_handles_key('{{ }}', :' ' )
|
64
|
+
assert_handles_key('{{:}}', :':' )
|
65
|
+
assert_handles_key("{{:''}}", :":''" )
|
66
|
+
assert_handles_key('{{:"}}', :':"' )
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_str_containing_only_escaped_interpolation_is_handled_correctly
|
70
|
+
assert_equal 'abc {{x}}', compile_and_interpolate('abc \\{{x}}')
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_handles_weired_strings
|
74
|
+
assert_equal '#{} a', compile_and_interpolate('#{} {{a}}', :a => 'a')
|
75
|
+
assert_equal '"#{abc}"', compile_and_interpolate('"#{ab{{a}}c}"', :a => '' )
|
76
|
+
assert_equal 'a}', compile_and_interpolate('{{{a}}}', :'{a' => 'a')
|
77
|
+
assert_equal '"', compile_and_interpolate('"{{a}}', :a => '' )
|
78
|
+
assert_equal 'a{{a}}', compile_and_interpolate('{{a}}\\{{a}}', :a => 'a')
|
79
|
+
assert_equal '\\{{a}}', compile_and_interpolate('\\\\{{a}}')
|
80
|
+
assert_equal '\";eval("a")', compile_and_interpolate('\";eval("{{a}}")', :a => 'a')
|
81
|
+
assert_equal '\";eval("a")', compile_and_interpolate('\";eval("a"){{a}}',:a => '' )
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
4
|
+
|
5
|
+
class I18nFastBackendLookupTest < Test::Unit::TestCase
|
6
|
+
include Tests::Backend::Fast::Setup::Base
|
7
|
+
|
8
|
+
# useful because this way we can use the backend with no key for interpolation/pluralization
|
9
|
+
def test_lookup_given_nil_as_a_key_returns_nil
|
10
|
+
assert_nil I18n.backend.send(:lookup, :en, nil)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_lookup_given_nested_keys_looks_up_a_nested_hash_value
|
14
|
+
assert_equal 'bar', I18n.backend.send(:lookup, :en, :bar, [:foo])
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_lookup_using_a_custom_separator
|
18
|
+
assert_equal 'bar', I18n.backend.send(:lookup, :en, 'foo|bar', [], '|')
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_default_using_a_custom_separator
|
22
|
+
assert_equal 'bar', I18n.backend.send(:default, :en, :'does_not_exist', :'foo|bar', :separator => '|')
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Fast
|
6
|
+
module Setup
|
7
|
+
module Base
|
8
|
+
include Tests::Backend::Simple::Setup::Base
|
9
|
+
|
10
|
+
def new_backend
|
11
|
+
I18n::Backend::Fast.new
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Localization
|
16
|
+
include Base
|
17
|
+
include Tests::Backend::Simple::Setup::Localization
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
4
|
+
|
5
|
+
class I18nFastBackendLoadTranslationsTest < Test::Unit::TestCase
|
6
|
+
include Tests::Backend::Fast::Setup::Base
|
7
|
+
|
8
|
+
def test_load_translations_with_unknown_file_type_raises_exception
|
9
|
+
assert_raises(I18n::UnknownFileType) { I18n.backend.load_translations "#{locales_dir}/en.xml" }
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_load_translations_with_ruby_file_type_does_not_raise_exception
|
13
|
+
assert_nothing_raised { I18n.backend.load_translations "#{locales_dir}/en.rb" }
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_load_rb_loads_data_from_ruby_file
|
17
|
+
data = I18n.backend.send :load_rb, "#{locales_dir}/en.rb"
|
18
|
+
assert_equal({ :en => { :fuh => { :bah => 'bas' } } }, data)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_load_rb_loads_data_from_yaml_file
|
22
|
+
data = I18n.backend.send :load_yml, "#{locales_dir}/en.yml"
|
23
|
+
assert_equal({ 'en' => { 'foo' => { 'bar' => 'baz' } } }, data)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_load_translations_loads_from_different_file_formats
|
27
|
+
I18n.backend = I18n::Backend::Fast.new
|
28
|
+
I18n.backend.load_translations "#{locales_dir}/en.rb", "#{locales_dir}/en.yml"
|
29
|
+
expected = { :en => { :fuh => { :bah => "bas" }, :foo => { :bar => "baz" } } }
|
30
|
+
assert_equal expected, backend_get_translations
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class I18nFastBackendStoreTranslationsTest < Test::Unit::TestCase
|
35
|
+
include Tests::Backend::Fast::Setup::Base
|
36
|
+
|
37
|
+
def test_store_translations_adds_translations # no, really :-)
|
38
|
+
I18n.backend.store_translations :'en', :foo => 'bar'
|
39
|
+
assert_equal Hash[:'en', {:foo => 'bar'}], backend_get_translations
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_store_translations_deep_merges_translations
|
43
|
+
I18n.backend.store_translations :'en', :foo => {:bar => 'bar'}
|
44
|
+
I18n.backend.store_translations :'en', :foo => {:baz => 'baz'}
|
45
|
+
assert_equal Hash[:'en', {:foo => {:bar => 'bar', :baz => 'baz'}}], backend_get_translations
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_store_translations_forces_locale_to_sym
|
49
|
+
I18n.backend.store_translations 'en', :foo => 'bar'
|
50
|
+
assert_equal Hash[:'en', {:foo => 'bar'}], backend_get_translations
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_store_translations_converts_keys_to_symbols
|
54
|
+
# backend_reset_translations!
|
55
|
+
I18n.backend.store_translations 'en', 'foo' => {'bar' => 'bar', 'baz' => 'baz'}
|
56
|
+
assert_equal Hash[:'en', {:foo => {:bar => 'bar', :baz => 'baz'}}], backend_get_translations
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_deep_symbolize_keys_works
|
60
|
+
result = I18n.backend.send :deep_symbolize_keys, 'foo' => {'bar' => {'baz' => 'bar'}}
|
61
|
+
expected = {:foo => {:bar => {:baz => 'bar'}}}
|
62
|
+
assert_equal expected, result
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class I18nFastBackendReloadTranslationsTest < Test::Unit::TestCase
|
67
|
+
include Tests::Backend::Fast::Setup::Base
|
68
|
+
|
69
|
+
def setup
|
70
|
+
I18n.backend = I18n::Backend::Fast.new
|
71
|
+
I18n.load_path = [locales_dir + '/en.yml']
|
72
|
+
assert_nil backend_get_translations
|
73
|
+
I18n.backend.send :init_translations
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_setup
|
77
|
+
assert_not_nil backend_get_translations
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_reload_translations_unloads_translations
|
81
|
+
I18n.backend.reload!
|
82
|
+
assert_nil backend_get_translations
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_reload_translations_uninitializes_translations
|
86
|
+
I18n.backend.reload!
|
87
|
+
assert_equal I18n.backend.initialized?, false
|
88
|
+
end
|
89
|
+
end
|