pepe-i18n 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.textile +57 -0
- data/MIT-LICENSE +20 -0
- data/README.textile +42 -0
- data/Rakefile +21 -0
- data/VERSION +1 -0
- data/lib/i18n.rb +270 -0
- 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/gettext.rb +65 -0
- data/lib/i18n/backend/pluralization.rb +56 -0
- data/lib/i18n/backend/simple.rb +23 -0
- data/lib/i18n/exceptions.rb +61 -0
- 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/lib/i18n/string.rb +95 -0
- data/test/all.rb +5 -0
- 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/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 +147 -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 +97 -0
- data/test/i18n_load_path_test.rb +23 -0
- data/test/i18n_test.rb +163 -0
- 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/string_test.rb +94 -0
- data/test/test_helper.rb +71 -0
- data/test/with_options.rb +34 -0
- metadata +151 -0
data/test/api/lambda.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Api
|
6
|
+
module Lambda
|
7
|
+
def test_translate_simple_proc
|
8
|
+
setup_proc_translations
|
9
|
+
assert_equal 'bar=bar, baz=baz, foo=foo', I18n.backend.translate('en', :a_lambda, :foo => 'foo', :bar => 'bar', :baz => 'baz')
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_translate_proc_in_defaults
|
13
|
+
setup_proc_translations
|
14
|
+
assert_equal 'bar=bar, baz=baz, foo=foo', I18n.backend.translate('en', :does_not_exist, :default => :a_lambda, :foo => 'foo', :bar => 'bar', :baz => 'baz')
|
15
|
+
assert_equal 'bar=bar, baz=baz, foo=foo', I18n.backend.translate('en', :does_not_exist, :default => [:does_not_exist_2, :does_not_exist_3, :a_lambda], :foo => 'foo', :bar => 'bar', :baz => 'baz')
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_translate_proc_with_pluralize
|
19
|
+
setup_proc_translations
|
20
|
+
params = { :zero => 'zero', :one => 'one', :other => 'other' }
|
21
|
+
assert_equal 'zero', I18n.backend.translate('en', :lambda_for_pluralize, params.merge(:count => 0))
|
22
|
+
assert_equal 'one', I18n.backend.translate('en', :lambda_for_pluralize, params.merge(:count => 1))
|
23
|
+
assert_equal 'other', I18n.backend.translate('en', :lambda_for_pluralize, params.merge(:count => 2))
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_translate_proc_with_interpolate
|
27
|
+
setup_proc_translations
|
28
|
+
assert_equal 'bar baz foo', I18n.backend.translate('en', :lambda_for_interpolate, :foo => 'foo', :bar => 'bar', :baz => 'baz')
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_translate_with_proc_as_default
|
32
|
+
expected = 'result from lambda'
|
33
|
+
assert_equal expected, I18n.backend.translate(:en, :'does not exist', :default => lambda { |key, values| expected })
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def setup_proc_translations
|
39
|
+
I18n.backend.store_translations 'en', {
|
40
|
+
:a_lambda => lambda { |key, values|
|
41
|
+
values.keys.sort_by(&:to_s).collect { |key| "#{key}=#{values[key]}"}.join(', ')
|
42
|
+
},
|
43
|
+
:lambda_for_pluralize => lambda { |key, values| values },
|
44
|
+
:lambda_for_interpolate => lambda { |key, values|
|
45
|
+
"{{#{values.keys.sort_by(&:to_s).join('}} {{')}}}"
|
46
|
+
}
|
47
|
+
}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/test/api/link.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Api
|
6
|
+
module Link
|
7
|
+
def test_translate_calls_translate_if_resolves_to_a_symbol
|
8
|
+
setup_linked_translations
|
9
|
+
assert_equal 'foo', I18n.backend.translate('en', :link_to_foo)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_translate_calls_translate_if_resolves_to_a_symbol2
|
13
|
+
setup_linked_translations
|
14
|
+
assert_equal('baz', I18n.backend.translate('en', :link_to_baz))
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_translate_calls_translate_if_resolves_to_a_symbol3
|
18
|
+
setup_linked_translations
|
19
|
+
assert I18n.backend.translate('en', :link_to_bar).key?(:baz)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_translate_calls_translate_if_resolves_to_a_symbol_with_scope_1
|
23
|
+
setup_linked_translations
|
24
|
+
assert_equal('baz', I18n.backend.translate('en', :link_to_baz, :scope => :bar))
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_translate_calls_translate_if_resolves_to_a_symbol_with_scope_1
|
28
|
+
setup_linked_translations
|
29
|
+
assert_equal('buz', I18n.backend.translate('en', :'bar.link_to_buz'))
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def setup_linked_translations
|
35
|
+
I18n.backend.store_translations 'en', {
|
36
|
+
:foo => 'foo',
|
37
|
+
:bar => { :baz => 'baz', :link_to_baz => :baz, :link_to_buz => :'boz.buz' },
|
38
|
+
:boz => { :buz => 'buz' },
|
39
|
+
:link_to_foo => :foo,
|
40
|
+
:link_to_bar => :bar,
|
41
|
+
:link_to_baz => :'bar.baz'
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Api
|
6
|
+
module Localization
|
7
|
+
module Date
|
8
|
+
# TODO should be Mrz, shouldn't it?
|
9
|
+
def test_localize_given_the_short_format_it_uses_it
|
10
|
+
assert_equal '01. Mar', I18n.backend.localize('de', date, :short)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_localize_given_the_long_format_it_uses_it
|
14
|
+
assert_equal '01. März 2008', I18n.backend.localize('de', date, :long)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_localize_given_the_default_format_it_uses_it
|
18
|
+
assert_equal '01.03.2008', I18n.backend.localize('de', date, :default)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_localize_given_a_day_name_format_it_returns_a_day_name
|
22
|
+
assert_equal 'Samstag', I18n.backend.localize('de', date, '%A')
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_localize_given_an_abbr_day_name_format_it_returns_an_abbrevated_day_name
|
26
|
+
assert_equal 'Sa', I18n.backend.localize('de', date, '%a')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_localize_given_a_month_name_format_it_returns_a_month_name
|
30
|
+
assert_equal 'März', I18n.backend.localize('de', date, '%B')
|
31
|
+
end
|
32
|
+
|
33
|
+
# TODO should be Mrz, shouldn't it?
|
34
|
+
def test_localize_given_an_abbr_month_name_format_it_returns_an_abbrevated_month_name
|
35
|
+
assert_equal 'Mar', I18n.backend.localize('de', date, '%b')
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_localize_given_a_format_specified_as_a_proc
|
39
|
+
assert_equal '1ter März 2008', I18n.backend.localize('de', date, :long_ordinalized)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_localize_given_a_format_specified_as_a_proc_with_additional_options
|
43
|
+
assert_equal '1ter März 2008 (MEZ)', I18n.backend.localize('de', date, :long_ordinalized, :timezone => 'MEZ')
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_localize_given_no_format_it_does_not_fail
|
47
|
+
assert_nothing_raised{ I18n.backend.localize 'de', date }
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_localize_given_an_unknown_format_it_does_not_fail
|
51
|
+
assert_nothing_raised{ I18n.backend.localize 'de', date, '%x' }
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_localize_nil_raises_argument_error
|
55
|
+
assert_raises(I18n::ArgumentError) { I18n.backend.localize 'de', nil }
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_localize_object_raises_argument_error
|
59
|
+
assert_raises(I18n::ArgumentError) { I18n.backend.localize 'de', Object.new }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Api
|
6
|
+
module Localization
|
7
|
+
module DateTime
|
8
|
+
# TODO should be Mrz, shouldn't it?
|
9
|
+
def test_localize_given_the_short_format_it_uses_it
|
10
|
+
assert_equal '01. Mar 06:00', I18n.backend.localize('de', morning_datetime, :short)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_localize_given_the_long_format_it_uses_it
|
14
|
+
assert_equal '01. März 2008 06:00', I18n.backend.localize('de', morning_datetime, :long)
|
15
|
+
end
|
16
|
+
|
17
|
+
# TODO should be Mrz, shouldn't it?
|
18
|
+
def test_localize_given_the_default_format_it_uses_it
|
19
|
+
assert_equal 'Sa, 01. Mar 2008 06:00:00 +0000', I18n.backend.localize('de', morning_datetime, :default)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_localize_given_a_day_name_format_it_returns_the_correct_day_name
|
23
|
+
assert_equal 'Samstag', I18n.backend.localize('de', morning_datetime, '%A')
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_localize_given_an_abbr_day_name_format_it_returns_the_correct_abbrevated_day_name
|
27
|
+
assert_equal 'Sa', I18n.backend.localize('de', morning_datetime, '%a')
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_localize_given_a_month_name_format_it_returns_the_correct_month_name
|
31
|
+
assert_equal 'März', I18n.backend.localize('de', morning_datetime, '%B')
|
32
|
+
end
|
33
|
+
|
34
|
+
# TODO should be Mrz, shouldn't it?
|
35
|
+
def test_localize_given_an_abbr_month_name_format_it_returns_the_correct_abbrevated_month_name
|
36
|
+
assert_equal 'Mar', I18n.backend.localize('de', morning_datetime, '%b')
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_localize_given_a_meridian_indicator_format_it_returns_the_correct_meridian_indicator
|
40
|
+
assert_equal 'am', I18n.backend.localize('de', morning_datetime, '%p')
|
41
|
+
assert_equal 'pm', I18n.backend.localize('de', evening_datetime, '%p')
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_localize_given_a_format_specified_as_a_proc
|
45
|
+
assert_equal '1ter März 2008, 06:00 Uhr', I18n.backend.localize('de', morning_datetime, :long_ordinalized)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_localize_given_a_format_specified_as_a_proc_with_additional_options
|
49
|
+
assert_equal '1ter März 2008, 06:00 Uhr (MEZ)', I18n.backend.localize('de', morning_datetime, :long_ordinalized, :timezone => 'MEZ')
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_localize_given_no_format_it_does_not_fail
|
53
|
+
assert_nothing_raised{ I18n.backend.localize 'de', morning_datetime }
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_localize_given_an_unknown_format_it_does_not_fail
|
57
|
+
assert_nothing_raised{ I18n.backend.localize 'de', morning_datetime, '%x' }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Api
|
6
|
+
module Localization
|
7
|
+
module Lambda
|
8
|
+
def test_localize_uses_lambda_day_names
|
9
|
+
assert_match /Суббота/, I18n.backend.localize('ru', time, "%A, %d %B")
|
10
|
+
assert_match /суббота/, I18n.backend.localize('ru', time, "%d %B (%A)")
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_localize_uses_lambda_month_names
|
14
|
+
assert_match /марта/, I18n.backend.localize('ru', time, "%d %B %Y")
|
15
|
+
assert_match /Март/, I18n.backend.localize('ru', time, "%B %Y")
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_localize_uses_lambda_abbr_day_names
|
19
|
+
assert_match /марта/, I18n.backend.localize('ru', time, "%d %b %Y")
|
20
|
+
assert_match /март/, I18n.backend.localize('ru', time, "%b %Y")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Api
|
6
|
+
module Localization
|
7
|
+
module Time
|
8
|
+
# TODO should be Mrz, shouldn't it?
|
9
|
+
def test_localize_given_the_short_format_it_uses_it
|
10
|
+
assert_equal '01. Mar 06:00', I18n.backend.localize('de', morning_time, :short)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_localize_given_the_long_format_it_uses_it
|
14
|
+
assert_equal '01. März 2008 06:00', I18n.backend.localize('de', morning_time, :long)
|
15
|
+
end
|
16
|
+
|
17
|
+
# TODO Seems to break on Windows because ENV['TZ'] is ignored. What's a better way to do this?
|
18
|
+
# def test_localize_given_the_default_format_it_uses_it
|
19
|
+
# assert_equal 'Sa, 01. Mar 2008 06:00:00 +0000', I18n.backend.localize('de', morning_time, :default)
|
20
|
+
# end
|
21
|
+
|
22
|
+
def test_localize_given_a_day_name_format_it_returns_the_correct_day_name
|
23
|
+
assert_equal 'Samstag', I18n.backend.localize('de', morning_time, '%A')
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_localize_given_an_abbr_day_name_format_it_returns_the_correct_abbrevated_day_name
|
27
|
+
assert_equal 'Sa', I18n.backend.localize('de', morning_time, '%a')
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_localize_given_a_month_name_format_it_returns_the_correct_month_name
|
31
|
+
assert_equal 'März', I18n.backend.localize('de', morning_time, '%B')
|
32
|
+
end
|
33
|
+
|
34
|
+
# TODO should be Mrz, shouldn't it?
|
35
|
+
def test_localize_given_an_abbr_month_name_format_it_returns_the_correct_abbrevated_month_name
|
36
|
+
assert_equal 'Mar', I18n.backend.localize('de', morning_time, '%b')
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_localize_given_a_meridian_indicator_format_it_returns_the_correct_meridian_indicator
|
40
|
+
assert_equal 'am', I18n.backend.localize('de', morning_time, '%p')
|
41
|
+
assert_equal 'pm', I18n.backend.localize('de', evening_time, '%p')
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_localize_given_a_format_specified_as_a_proc
|
45
|
+
assert_equal '1ter März 2008, 06:00 Uhr', I18n.backend.localize('de', morning_time, :long_ordinalized)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_localize_given_a_format_specified_as_a_proc_with_additional_options
|
49
|
+
assert_equal '1ter März 2008, 06:00 Uhr (MEZ)', I18n.backend.localize('de', morning_time, :long_ordinalized, :timezone => 'MEZ')
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_localize_given_no_format_it_does_not_fail
|
53
|
+
assert_nothing_raised{ I18n.backend.localize 'de', morning_time }
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_localize_given_an_unknown_format_it_does_not_fail
|
57
|
+
assert_nothing_raised{ I18n.backend.localize 'de', morning_time, '%x' }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Api
|
6
|
+
module Pluralization
|
7
|
+
def test_pluralize_given_0_returns_zero_string_if_zero_key_given
|
8
|
+
assert_equal 'zero', I18n.t(:default => { :zero => 'zero' }, :count => 0)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_pluralize_given_0_returns_plural_string_if_no_zero_key_given
|
12
|
+
assert_equal 'bars', I18n.t(:default => { :other => 'bars' }, :count => 0)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_pluralize_given_1_returns_singular_string
|
16
|
+
assert_equal 'bar', I18n.t(:default => { :one => 'bar' }, :count => 1)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_pluralize_given_2_returns_plural_string
|
20
|
+
assert_equal 'bars', I18n.t(:default => { :other => 'bars' }, :count => 2)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_pluralize_given_3_returns_plural_string
|
24
|
+
assert_equal 'bars', I18n.t(:default => { :other => 'bars' }, :count => 3)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_pluralize_given_nil_returns_the_given_entry
|
28
|
+
assert_equal({ :zero => 'zero' }, I18n.t(:default => { :zero => 'zero' }, :count => nil))
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_interpolate_given_incomplete_pluralization_data_raises_invalid_pluralization_data
|
32
|
+
assert_raises(I18n::InvalidPluralizationData){ I18n.t(:default => { :one => 'bar' }, :count => 2) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Tests
|
4
|
+
module Backend
|
5
|
+
module Api
|
6
|
+
module Translation
|
7
|
+
def translate(key, options = {})
|
8
|
+
I18n.backend.translate('en', key, options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_given_no_keys_it_returns_the_default
|
12
|
+
assert_equal 'default', translate(nil, :default => 'default')
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_translate_given_a_symbol_as_a_default_translates_the_symbol
|
16
|
+
assert_equal 'bar', translate(nil, :default => :'foo.bar')
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_translate_default_with_scope_stays_in_scope_when_looking_up_the_symbol
|
20
|
+
assert_equal 'bar', translate(:missing, :default => :bar, :scope => :foo)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_translate_given_an_array_as_default_uses_the_first_match
|
24
|
+
assert_equal 'bar', translate(:does_not_exist, :scope => [:foo], :default => [:does_not_exist_2, :bar])
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_translate_given_an_array_of_inexistent_keys_it_raises_missing_translation_data
|
28
|
+
assert_raises I18n::MissingTranslationData do
|
29
|
+
translate(:does_not_exist, :scope => [:foo], :default => [:does_not_exist_2, :does_not_exist_3])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_translate_an_array_of_keys_translates_all_of_them
|
34
|
+
assert_equal %w(bar baz), translate([:bar, :baz], :scope => [:foo])
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_translate_with_a_missing_key_and_no_default_raises_missing_translation_data
|
38
|
+
assert_raises(I18n::MissingTranslationData) do
|
39
|
+
translate(:missing)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_translate_given_nil_as_a_locale_raises_an_argument_error
|
44
|
+
assert_raises(I18n::InvalidLocale) do
|
45
|
+
I18n.backend.translate(nil, :bar)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
4
|
+
require 'i18n/backend/cache'
|
5
|
+
require 'activesupport'
|
6
|
+
|
7
|
+
class I18nCacheBackendTest < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
I18n.backend.meta_class.send(:include, I18n::Backend::Cache)
|
11
|
+
I18n.cache_store = ActiveSupport::Cache.lookup_store(:memory_store)
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
I18n.cache_store = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_uses_cache
|
19
|
+
assert I18n.cache_store.is_a?(ActiveSupport::Cache::MemoryStore)
|
20
|
+
end
|
21
|
+
|
22
|
+
define_method :"test translate hits the backend and caches the response" do
|
23
|
+
I18n.backend.expects(:lookup).returns('Foo')
|
24
|
+
assert_equal 'Foo', I18n.t(:foo)
|
25
|
+
|
26
|
+
I18n.backend.expects(:lookup).never
|
27
|
+
assert_equal 'Foo', I18n.t(:foo)
|
28
|
+
|
29
|
+
I18n.backend.expects(:lookup).returns('Bar')
|
30
|
+
assert_equal 'Bar', I18n.t(:bar)
|
31
|
+
end
|
32
|
+
|
33
|
+
define_method :"test still raises MissingTranslationData but also caches it" do
|
34
|
+
I18n.backend.expects(:lookup).returns(nil)
|
35
|
+
assert_raises(I18n::MissingTranslationData) { I18n.t(:missing, :raise => true) }
|
36
|
+
I18n.backend.expects(:lookup).never
|
37
|
+
assert_raises(I18n::MissingTranslationData) { I18n.t(:missing, :raise => true) }
|
38
|
+
end
|
39
|
+
|
40
|
+
define_method :"test uses 'i18n' as a cache key namespace by default" do
|
41
|
+
assert_equal 0, I18n.backend.send(:cache_key, :foo).index('i18n')
|
42
|
+
end
|
43
|
+
|
44
|
+
define_method :"test adds a custom cache key namespace" do
|
45
|
+
with_cache_namespace('bar') do
|
46
|
+
assert_equal 0, I18n.backend.send(:cache_key, :foo).index('i18n-bar')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
|
52
|
+
def with_cache_namespace(namespace)
|
53
|
+
I18n.cache_namespace = namespace
|
54
|
+
yield
|
55
|
+
I18n.cache_namespace = nil
|
56
|
+
end
|
57
|
+
end
|