i18n 0.9.5 → 1.6.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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +54 -13
  3. data/lib/i18n/backend/base.rb +46 -17
  4. data/lib/i18n/backend/cache.rb +8 -9
  5. data/lib/i18n/backend/cache_file.rb +36 -0
  6. data/lib/i18n/backend/cascade.rb +3 -1
  7. data/lib/i18n/backend/chain.rb +33 -3
  8. data/lib/i18n/backend/fallbacks.rb +11 -13
  9. data/lib/i18n/backend/flatten.rb +2 -0
  10. data/lib/i18n/backend/gettext.rb +4 -0
  11. data/lib/i18n/backend/interpolation_compiler.rb +3 -1
  12. data/lib/i18n/backend/key_value.rb +31 -2
  13. data/lib/i18n/backend/memoize.rb +10 -2
  14. data/lib/i18n/backend/metadata.rb +5 -3
  15. data/lib/i18n/backend/pluralization.rb +2 -0
  16. data/lib/i18n/backend/simple.rb +26 -8
  17. data/lib/i18n/backend/transliterator.rb +2 -0
  18. data/lib/i18n/backend.rb +3 -0
  19. data/lib/i18n/config.rb +20 -2
  20. data/lib/i18n/core_ext/hash.rb +42 -24
  21. data/lib/i18n/exceptions.rb +23 -16
  22. data/lib/i18n/gettext/helpers.rb +3 -1
  23. data/lib/i18n/gettext/po_parser.rb +7 -7
  24. data/lib/i18n/gettext.rb +2 -0
  25. data/lib/i18n/interpolate/ruby.rb +5 -3
  26. data/lib/i18n/locale/fallbacks.rb +1 -1
  27. data/lib/i18n/locale.rb +2 -0
  28. data/lib/i18n/middleware.rb +2 -0
  29. data/lib/i18n/tests/interpolation.rb +5 -4
  30. data/lib/i18n/tests/localization/date.rb +28 -6
  31. data/lib/i18n/tests/localization/date_time.rb +27 -6
  32. data/lib/i18n/tests/localization/time.rb +26 -4
  33. data/lib/i18n/tests.rb +2 -0
  34. data/lib/i18n/version.rb +3 -1
  35. data/lib/i18n.rb +72 -30
  36. metadata +24 -58
  37. data/gemfiles/Gemfile.rails-3.2.x +0 -10
  38. data/gemfiles/Gemfile.rails-4.0.x +0 -10
  39. data/gemfiles/Gemfile.rails-4.1.x +0 -10
  40. data/gemfiles/Gemfile.rails-4.2.x +0 -10
  41. data/gemfiles/Gemfile.rails-5.0.x +0 -10
  42. data/gemfiles/Gemfile.rails-5.1.x +0 -10
  43. data/gemfiles/Gemfile.rails-master +0 -10
  44. data/lib/i18n/core_ext/kernel/suppress_warnings.rb +0 -8
  45. data/lib/i18n/core_ext/string/interpolate.rb +0 -9
  46. data/test/api/all_features_test.rb +0 -58
  47. data/test/api/cascade_test.rb +0 -28
  48. data/test/api/chain_test.rb +0 -24
  49. data/test/api/fallbacks_test.rb +0 -30
  50. data/test/api/key_value_test.rb +0 -24
  51. data/test/api/memoize_test.rb +0 -56
  52. data/test/api/override_test.rb +0 -42
  53. data/test/api/pluralization_test.rb +0 -30
  54. data/test/api/simple_test.rb +0 -28
  55. data/test/backend/cache_test.rb +0 -109
  56. data/test/backend/cascade_test.rb +0 -86
  57. data/test/backend/chain_test.rb +0 -122
  58. data/test/backend/exceptions_test.rb +0 -36
  59. data/test/backend/fallbacks_test.rb +0 -219
  60. data/test/backend/interpolation_compiler_test.rb +0 -118
  61. data/test/backend/key_value_test.rb +0 -61
  62. data/test/backend/memoize_test.rb +0 -79
  63. data/test/backend/metadata_test.rb +0 -48
  64. data/test/backend/pluralization_test.rb +0 -45
  65. data/test/backend/simple_test.rb +0 -103
  66. data/test/backend/transliterator_test.rb +0 -84
  67. data/test/core_ext/hash_test.rb +0 -36
  68. data/test/gettext/api_test.rb +0 -214
  69. data/test/gettext/backend_test.rb +0 -92
  70. data/test/i18n/exceptions_test.rb +0 -117
  71. data/test/i18n/gettext_plural_keys_test.rb +0 -20
  72. data/test/i18n/interpolate_test.rb +0 -91
  73. data/test/i18n/load_path_test.rb +0 -34
  74. data/test/i18n/middleware_test.rb +0 -24
  75. data/test/i18n_test.rb +0 -462
  76. data/test/locale/fallbacks_test.rb +0 -133
  77. data/test/locale/tag/rfc4646_test.rb +0 -143
  78. data/test/locale/tag/simple_test.rb +0 -32
  79. data/test/run_all.rb +0 -20
  80. data/test/test_data/locales/de.po +0 -82
  81. data/test/test_data/locales/en.rb +0 -3
  82. data/test/test_data/locales/en.yml +0 -3
  83. data/test/test_data/locales/invalid/empty.yml +0 -0
  84. data/test/test_data/locales/invalid/syntax.yml +0 -4
  85. data/test/test_data/locales/plurals.rb +0 -113
  86. data/test/test_helper.rb +0 -61
@@ -1,214 +0,0 @@
1
- # encoding: utf-8
2
- require 'test_helper'
3
- require 'i18n/gettext/helpers'
4
-
5
- include I18n::Gettext::Helpers
6
-
7
- class I18nGettextApiTest < I18n::TestCase
8
- def setup
9
- super
10
- I18n.locale = :en
11
- I18n.backend.store_translations :de, {
12
- 'Hi Gettext!' => 'Hallo Gettext!',
13
- 'Sentence 1. Sentence 2.' => 'Satz 1. Satz 2.',
14
- "An apple" => { :one => 'Ein Apfel', :other => '%{count} Äpfel' },
15
- :special => { "A special apple" => { :one => 'Ein spezieller Apfel', :other => '%{count} spezielle Äpfel' } },
16
- :foo => { :bar => 'bar-de' },
17
- 'foo.bar' => 'Foo Bar'
18
- }, :separator => '|'
19
- end
20
-
21
- # N_
22
- def test_N_returns_original_msg
23
- assert_equal 'foo|bar', N_('foo|bar')
24
- I18n.locale = :de
25
- assert_equal 'Hi Gettext!', N_('Hi Gettext!')
26
- end
27
-
28
- # gettext
29
- def test_gettext_uses_msg_as_default
30
- assert_equal 'Hi Gettext!', _('Hi Gettext!')
31
- end
32
-
33
- def test_gettext_uses_msg_as_key
34
- I18n.locale = :de
35
- assert_equal 'Hallo Gettext!', gettext('Hi Gettext!')
36
- assert_equal 'Hallo Gettext!', _('Hi Gettext!')
37
- end
38
-
39
- def test_gettext_uses_msg_containing_dots_as_default
40
- assert_equal 'Sentence 1. Sentence 2.', gettext('Sentence 1. Sentence 2.')
41
- assert_equal 'Sentence 1. Sentence 2.', _('Sentence 1. Sentence 2.')
42
- end
43
-
44
- def test_gettext_uses_msg_containing_dots_as_key
45
- I18n.locale = :de
46
- assert_equal 'Satz 1. Satz 2.', gettext('Sentence 1. Sentence 2.')
47
- assert_equal 'Satz 1. Satz 2.', _('Sentence 1. Sentence 2.')
48
- end
49
-
50
- # sgettext
51
- def test_sgettext_defaults_to_the_last_token_of_a_scoped_msgid
52
- assert_equal 'bar', sgettext('foo|bar')
53
- assert_equal 'bar', s_('foo|bar')
54
- end
55
-
56
- def test_sgettext_looks_up_a_scoped_translation
57
- I18n.locale = :de
58
- assert_equal 'bar-de', sgettext('foo|bar')
59
- assert_equal 'bar-de', s_('foo|bar')
60
- end
61
-
62
- def test_sgettext_ignores_dots
63
- I18n.locale = :de
64
- assert_equal 'Foo Bar', sgettext('foo.bar')
65
- assert_equal 'Foo Bar', s_('foo.bar')
66
- end
67
-
68
- # pgettext
69
- def test_pgettext_defaults_to_msgid
70
- assert_equal 'bar', pgettext('foo', 'bar')
71
- assert_equal 'bar', p_('foo', 'bar')
72
- end
73
-
74
- def test_pgettext_looks_up_a_scoped_translation
75
- I18n.locale = :de
76
- assert_equal 'bar-de', pgettext('foo', 'bar')
77
- assert_equal 'bar-de', p_('foo', 'bar')
78
- end
79
-
80
- # ngettext
81
- def test_ngettext_looks_up_msg_id_as_default_singular
82
- assert_equal 'An apple', ngettext('An apple', '%{count} apples', 1)
83
- assert_equal 'An apple', n_('An apple', '%{count} apples', 1)
84
- end
85
-
86
- def test_ngettext_looks_up_msg_id_plural_as_default_plural
87
- assert_equal '2 apples', ngettext('An apple', '%{count} apples', 2)
88
- assert_equal '2 apples', n_('An apple', '%{count} apples', 2)
89
- end
90
-
91
- def test_ngettext_looks_up_a_singular
92
- I18n.locale = :de
93
- assert_equal 'Ein Apfel', ngettext('An apple', '%{count} apples', 1)
94
- assert_equal 'Ein Apfel', n_('An apple', '%{count} apples', 1)
95
- end
96
-
97
- def test_ngettext_looks_up_a_plural
98
- I18n.locale = :de
99
- assert_equal '2 Äpfel', ngettext('An apple', '%{count} apples', 2)
100
- assert_equal '2 Äpfel', n_('An apple', '%{count} apples', 2)
101
- end
102
-
103
- def test_ngettext_looks_up_msg_id_as_default_singular_with_alternative_syntax
104
- assert_equal 'An apple', ngettext(['An apple', '%{count} apples'], 1)
105
- assert_equal 'An apple', n_(['An apple', '%{count} apples'], 1)
106
- end
107
-
108
- def test_ngettext_looks_up_msg_id_plural_as_default_plural_with_alternative_syntax
109
- assert_equal '2 apples', ngettext(['An apple', '%{count} apples'], 2)
110
- assert_equal '2 apples', n_(['An apple', '%{count} apples'], 2)
111
- end
112
-
113
- def test_ngettext_looks_up_a_singular_with_alternative_syntax
114
- I18n.locale = :de
115
- assert_equal 'Ein Apfel', ngettext(['An apple', '%{count} apples'], 1)
116
- assert_equal 'Ein Apfel', n_(['An apple', '%{count} apples'], 1)
117
- end
118
-
119
- def test_ngettext_looks_up_a_plural_with_alternative_syntax
120
- I18n.locale = :de
121
- assert_equal '2 Äpfel', ngettext(['An apple', '%{count} apples'], 2)
122
- assert_equal '2 Äpfel', n_(['An apple', '%{count} apples'], 2)
123
- end
124
-
125
- # nsgettext
126
- def test_nsgettext_looks_up_msg_id_as_default_singular
127
- assert_equal 'A special apple', nsgettext('special|A special apple', '%{count} special apples', 1)
128
- assert_equal 'A special apple', ns_('special|A special apple', '%{count} special apples', 1)
129
- end
130
-
131
- def test_nsgettext_looks_up_msg_id_plural_as_default_plural
132
- assert_equal '2 special apples', nsgettext('special|A special apple', '%{count} special apples', 2)
133
- assert_equal '2 special apples', ns_('special|A special apple', '%{count} special apples', 2)
134
- end
135
-
136
- def test_nsgettext_looks_up_a_singular
137
- I18n.locale = :de
138
- assert_equal 'Ein spezieller Apfel', nsgettext('special|A special apple', '%{count} special apples', 1)
139
- assert_equal 'Ein spezieller Apfel', ns_('special|A special apple', '%{count} special apples', 1)
140
- end
141
-
142
- def test_nsgettext_looks_up_a_plural
143
- I18n.locale = :de
144
- assert_equal '2 spezielle Äpfel', nsgettext('special|A special apple', '%{count} special apples', 2)
145
- assert_equal '2 spezielle Äpfel', ns_('special|A special apple', '%{count} special apples', 2)
146
- end
147
-
148
- def test_nsgettext_looks_up_msg_id_as_default_singular_with_alternative_syntax
149
- assert_equal 'A special apple', nsgettext(['special|A special apple', '%{count} special apples'], 1)
150
- assert_equal 'A special apple', ns_(['special|A special apple', '%{count} special apples'], 1)
151
- end
152
-
153
- def test_nsgettext_looks_up_msg_id_plural_as_default_plural_with_alternative_syntax
154
- assert_equal '2 special apples', nsgettext(['special|A special apple', '%{count} special apples'], 2)
155
- assert_equal '2 special apples', ns_(['special|A special apple', '%{count} special apples'], 2)
156
- end
157
-
158
- def test_nsgettext_looks_up_a_singular_with_alternative_syntax
159
- I18n.locale = :de
160
- assert_equal 'Ein spezieller Apfel', nsgettext(['special|A special apple', '%{count} special apples'], 1)
161
- assert_equal 'Ein spezieller Apfel', ns_(['special|A special apple', '%{count} special apples'], 1)
162
- end
163
-
164
- def test_nsgettext_looks_up_a_plural_with_alternative_syntax
165
- I18n.locale = :de
166
- assert_equal '2 spezielle Äpfel', nsgettext(['special|A special apple', '%{count} special apples'], 2)
167
- assert_equal '2 spezielle Äpfel', ns_(['special|A special apple', '%{count} special apples'], 2)
168
- end
169
-
170
- # npgettext
171
- def test_npgettext_looks_up_msg_id_as_default_singular
172
- assert_equal 'A special apple', npgettext('special', 'A special apple', '%{count} special apples', 1)
173
- assert_equal 'A special apple', np_('special', 'A special apple', '%{count} special apples', 1)
174
- end
175
-
176
- def test_npgettext_looks_up_msg_id_plural_as_default_plural
177
- assert_equal '2 special apples', npgettext('special', 'A special apple', '%{count} special apples', 2)
178
- assert_equal '2 special apples', np_('special', 'A special apple', '%{count} special apples', 2)
179
- end
180
-
181
- def test_npgettext_looks_up_a_singular
182
- I18n.locale = :de
183
- assert_equal 'Ein spezieller Apfel', npgettext('special', 'A special apple', '%{count} special apples', 1)
184
- assert_equal 'Ein spezieller Apfel', np_('special', 'A special apple', '%{count} special apples', 1)
185
- end
186
-
187
- def test_npgettext_looks_up_a_plural
188
- I18n.locale = :de
189
- assert_equal '2 spezielle Äpfel', npgettext('special', 'A special apple', '%{count} special apples', 2)
190
- assert_equal '2 spezielle Äpfel', np_('special', 'A special apple', '%{count} special apples', 2)
191
- end
192
-
193
- def test_npgettext_looks_up_msg_id_as_default_singular_with_alternative_syntax
194
- assert_equal 'A special apple', npgettext('special', ['A special apple', '%{count} special apples'], 1)
195
- assert_equal 'A special apple', np_('special', ['A special apple', '%{count} special apples'], 1)
196
- end
197
-
198
- def test_npgettext_looks_up_msg_id_plural_as_default_plural_with_alternative_syntax
199
- assert_equal '2 special apples', npgettext('special', ['A special apple', '%{count} special apples'], 2)
200
- assert_equal '2 special apples', np_('special', ['A special apple', '%{count} special apples'], 2)
201
- end
202
-
203
- def test_npgettext_looks_up_a_singular_with_alternative_syntax
204
- I18n.locale = :de
205
- assert_equal 'Ein spezieller Apfel', npgettext('special', ['A special apple', '%{count} special apples'], 1)
206
- assert_equal 'Ein spezieller Apfel', np_('special', ['A special apple', '%{count} special apples'], 1)
207
- end
208
-
209
- def test_npgettext_looks_up_a_plural_with_alternative_syntax
210
- I18n.locale = :de
211
- assert_equal '2 spezielle Äpfel', npgettext('special', ['A special apple', '%{count} special apples'], 2)
212
- assert_equal '2 spezielle Äpfel', np_('special', ['A special apple', '%{count} special apples'], 2)
213
- end
214
- end
@@ -1,92 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- class I18nGettextBackendTest < I18n::TestCase
6
- include I18n::Gettext::Helpers
7
-
8
- class Backend < I18n::Backend::Simple
9
- include I18n::Backend::Gettext
10
- end
11
-
12
- def setup
13
- super
14
- I18n.backend = Backend.new
15
- I18n.locale = :en
16
- I18n.load_path = ["#{locales_dir}/de.po"]
17
- I18n.default_separator = '|'
18
- end
19
-
20
- def test_backend_loads_po_file
21
- I18n.backend.send(:init_translations)
22
- assert I18n.backend.send(:translations)[:de][:"Axis"]
23
- end
24
-
25
- def test_looks_up_a_translation
26
- I18n.locale = :de
27
- assert_equal 'Auto', gettext('car')
28
- end
29
-
30
- def test_uses_default_translation
31
- assert_equal 'car', gettext('car')
32
- end
33
-
34
- def test_looks_up_a_namespaced_translation
35
- I18n.locale = :de
36
- assert_equal 'Räderzahl', sgettext('Car|Wheels count')
37
- assert_equal 'Räderzahl', pgettext('Car', 'Wheels count')
38
- assert_equal 'Räderzahl!', pgettext('New car', 'Wheels count')
39
- end
40
-
41
- def test_uses_namespaced_default_translation
42
- assert_equal 'Wheels count', sgettext('Car|Wheels count')
43
- assert_equal 'Wheels count', pgettext('Car', 'Wheels count')
44
- assert_equal 'Wheels count', pgettext('New car', 'Wheels count')
45
- end
46
-
47
- def test_pluralizes_entry
48
- I18n.locale = :de
49
- assert_equal 'Achse', ngettext('Axis', 'Axis', 1)
50
- assert_equal 'Achsen', ngettext('Axis', 'Axis', 2)
51
- end
52
-
53
- def test_pluralizes_default_entry
54
- assert_equal 'Axis', ngettext('Axis', 'Axis', 1)
55
- assert_equal 'Axis', ngettext('Axis', 'Axis', 2)
56
- end
57
-
58
- def test_pluralizes_namespaced_entry
59
- I18n.locale = :de
60
- assert_equal 'Rad', nsgettext('Car|wheel', 'wheels', 1)
61
- assert_equal 'Räder', nsgettext('Car|wheel', 'wheels', 2)
62
- assert_equal 'Rad', npgettext('Car', 'wheel', 'wheels', 1)
63
- assert_equal 'Räder', npgettext('Car', 'wheel', 'wheels', 2)
64
- assert_equal 'Rad!', npgettext('New car', 'wheel', 'wheels', 1)
65
- assert_equal 'Räder!', npgettext('New car', 'wheel', 'wheels', 2)
66
- end
67
-
68
- def test_pluralizes_namespaced_default_entry
69
- assert_equal 'wheel', nsgettext('Car|wheel', 'wheels', 1)
70
- assert_equal 'wheels', nsgettext('Car|wheel', 'wheels', 2)
71
- assert_equal 'wheel', npgettext('Car', 'wheel', 'wheels', 1)
72
- assert_equal 'wheels', npgettext('Car', 'wheel', 'wheels', 2)
73
- assert_equal 'wheel', npgettext('New car', 'wheel', 'wheels', 1)
74
- assert_equal 'wheels', npgettext('New car', 'wheel', 'wheels', 2)
75
- end
76
-
77
- def test_pluralizes_namespaced_entry_with_alternative_syntax
78
- I18n.locale = :de
79
- assert_equal 'Rad', nsgettext(['Car|wheel', 'wheels'], 1)
80
- assert_equal 'Räder', nsgettext(['Car|wheel', 'wheels'], 2)
81
- assert_equal 'Rad', npgettext('Car', ['wheel', 'wheels'], 1)
82
- assert_equal 'Räder', npgettext('Car', ['wheel', 'wheels'], 2)
83
- assert_equal 'Rad!', npgettext('New car', ['wheel', 'wheels'], 1)
84
- assert_equal 'Räder!', npgettext('New car', ['wheel', 'wheels'], 2)
85
- end
86
-
87
- def test_ngettextpluralizes_entry_with_dots
88
- I18n.locale = :de
89
- assert_equal 'Auf 1 Achse.', n_("On %{count} wheel.", "On %{count} wheels.", 1)
90
- assert_equal 'Auf 2 Achsen.', n_("On %{count} wheel.", "On %{count} wheels.", 2)
91
- end
92
- end
@@ -1,117 +0,0 @@
1
- require 'test_helper'
2
-
3
- class I18nExceptionsTest < I18n::TestCase
4
- def test_invalid_locale_stores_locale
5
- force_invalid_locale
6
- rescue I18n::ArgumentError => exception
7
- assert_nil exception.locale
8
- end
9
-
10
- test "passing an invalid locale raises an InvalidLocale exception" do
11
- force_invalid_locale do |exception|
12
- assert_equal 'nil is not a valid locale', exception.message
13
- end
14
- end
15
-
16
- test "MissingTranslation can be initialized without options" do
17
- exception = I18n::MissingTranslation.new(:en, 'foo')
18
- assert_equal({}, exception.options)
19
- end
20
-
21
- test "MissingTranslationData exception stores locale, key and options" do
22
- force_missing_translation_data do |exception|
23
- assert_equal 'de', exception.locale
24
- assert_equal :foo, exception.key
25
- assert_equal({:scope => :bar}, exception.options)
26
- end
27
- end
28
-
29
- test "MissingTranslationData message contains the locale and scoped key" do
30
- force_missing_translation_data do |exception|
31
- assert_equal 'translation missing: de.bar.foo', exception.message
32
- end
33
- end
34
-
35
- test "InvalidPluralizationData stores entry, count and key" do
36
- force_invalid_pluralization_data do |exception|
37
- assert_equal({:other => "bar"}, exception.entry)
38
- assert_equal 1, exception.count
39
- assert_equal :one, exception.key
40
- end
41
- end
42
-
43
- test "InvalidPluralizationData message contains count, data and missing key" do
44
- force_invalid_pluralization_data do |exception|
45
- assert_match '1', exception.message
46
- assert_match '{:other=>"bar"}', exception.message
47
- assert_match 'one', exception.message
48
- end
49
- end
50
-
51
- test "MissingInterpolationArgument stores key and string" do
52
- assert_raise(I18n::MissingInterpolationArgument) { force_missing_interpolation_argument }
53
- force_missing_interpolation_argument do |exception|
54
- assert_equal :bar, exception.key
55
- assert_equal "%{bar}", exception.string
56
- end
57
- end
58
-
59
- test "MissingInterpolationArgument message contains the missing and given arguments" do
60
- force_missing_interpolation_argument do |exception|
61
- assert_equal 'missing interpolation argument :bar in "%{bar}" ({:baz=>"baz"} given)', exception.message
62
- end
63
- end
64
-
65
- test "ReservedInterpolationKey stores key and string" do
66
- force_reserved_interpolation_key do |exception|
67
- assert_equal :scope, exception.key
68
- assert_equal "%{scope}", exception.string
69
- end
70
- end
71
-
72
- test "ReservedInterpolationKey message contains the reserved key" do
73
- force_reserved_interpolation_key do |exception|
74
- assert_equal 'reserved key :scope used in "%{scope}"', exception.message
75
- end
76
- end
77
-
78
- test "MissingTranslationData#new can be initialized with just two arguments" do
79
- assert I18n::MissingTranslationData.new('en', 'key')
80
- end
81
-
82
- private
83
-
84
- def force_invalid_locale
85
- I18n.translate(:foo, :locale => nil)
86
- rescue I18n::ArgumentError => e
87
- block_given? ? yield(e) : raise(e)
88
- end
89
-
90
- def force_missing_translation_data(options = {})
91
- store_translations('de', :bar => nil)
92
- I18n.translate(:foo, options.merge(:scope => :bar, :locale => :de))
93
- rescue I18n::ArgumentError => e
94
- block_given? ? yield(e) : raise(e)
95
- end
96
-
97
- def force_invalid_pluralization_data
98
- store_translations('de', :foo => { :other => 'bar' })
99
- I18n.translate(:foo, :count => 1, :locale => :de)
100
- rescue I18n::ArgumentError => e
101
- block_given? ? yield(e) : raise(e)
102
- end
103
-
104
- def force_missing_interpolation_argument
105
- store_translations('de', :foo => "%{bar}")
106
- I18n.translate(:foo, :baz => 'baz', :locale => :de)
107
- rescue I18n::ArgumentError => e
108
- block_given? ? yield(e) : raise(e)
109
- end
110
-
111
- def force_reserved_interpolation_key
112
- store_translations('de', :foo => "%{scope}")
113
- I18n.translate(:foo, :baz => 'baz', :locale => :de)
114
- rescue I18n::ArgumentError => e
115
- block_given? ? yield(e) : raise(e)
116
- end
117
- end
@@ -1,20 +0,0 @@
1
- require 'test_helper'
2
-
3
- class I18nGettextPluralKeysTest < I18n::TestCase
4
- def setup
5
- super
6
- I18n::Gettext.plural_keys[:zz] = [:value1, :value2]
7
- end
8
-
9
- test "Returns the plural keys of the given locale if present" do
10
- assert_equal I18n::Gettext.plural_keys(:zz), [:value1, :value2]
11
- end
12
-
13
- test "Returns the plural keys of :en if given locale not present" do
14
- assert_equal I18n::Gettext.plural_keys(:yy), [:one, :other]
15
- end
16
-
17
- test "Returns the whole hash with no arguments" do
18
- assert_equal I18n::Gettext.plural_keys, { :en => [:one, :other], :zz => [:value1, :value2] }
19
- end
20
- end
@@ -1,91 +0,0 @@
1
- require 'test_helper'
2
-
3
- # thanks to Masao's String extensions, some tests taken from Masao's tests
4
- # http://github.com/mutoh/gettext/blob/edbbe1fa8238fa12c7f26f2418403015f0270e47/test/test_string.rb
5
-
6
- class I18nInterpolateTest < I18n::TestCase
7
- test "String interpolates a hash argument w/ named placeholders" do
8
- assert_equal "Masao Mutoh", I18n.interpolate("%{first} %{last}", :first => 'Masao', :last => 'Mutoh' )
9
- end
10
-
11
- test "String interpolates a hash argument w/ named placeholders (reverse order)" do
12
- assert_equal "Mutoh, Masao", I18n.interpolate("%{last}, %{first}", :first => 'Masao', :last => 'Mutoh' )
13
- end
14
-
15
- test "String interpolates named placeholders with sprintf syntax" do
16
- assert_equal "10, 43.4", I18n.interpolate("%<integer>d, %<float>.1f", :integer => 10, :float => 43.4)
17
- end
18
-
19
- test "String interpolates named placeholders with sprintf syntax, does not recurse" do
20
- assert_equal "%<not_translated>s", I18n.interpolate("%{msg}", :msg => '%<not_translated>s', :not_translated => 'should not happen' )
21
- end
22
-
23
- test "String interpolation does not replace anything when no placeholders are given" do
24
- assert_equal "aaa", I18n.interpolate("aaa", :num => 1)
25
- end
26
-
27
- test "String interpolation sprintf behaviour equals Ruby 1.9 behaviour" do
28
- assert_equal "1", I18n.interpolate("%<num>d", :num => 1)
29
- assert_equal "0b1", I18n.interpolate("%<num>#b", :num => 1)
30
- assert_equal "foo", I18n.interpolate("%<msg>s", :msg => "foo")
31
- assert_equal "1.000000", I18n.interpolate("%<num>f", :num => 1.0)
32
- assert_equal " 1", I18n.interpolate("%<num>3.0f", :num => 1.0)
33
- assert_equal "100.00", I18n.interpolate("%<num>2.2f", :num => 100.0)
34
- assert_equal "0x64", I18n.interpolate("%<num>#x", :num => 100.0)
35
- assert_raise(ArgumentError) { I18n.interpolate("%<num>,d", :num => 100) }
36
- assert_raise(ArgumentError) { I18n.interpolate("%<num>/d", :num => 100) }
37
- end
38
-
39
- test "String interpolation raises an I18n::MissingInterpolationArgument when the string has extra placeholders" do
40
- assert_raise(I18n::MissingInterpolationArgument) do # Ruby 1.9 msg: "key not found"
41
- I18n.interpolate("%{first} %{last}", :first => 'Masao')
42
- end
43
- end
44
-
45
- test "String interpolation does not raise when extra values were passed" do
46
- assert_nothing_raised do
47
- assert_equal "Masao Mutoh", I18n.interpolate("%{first} %{last}", :first => 'Masao', :last => 'Mutoh', :salutation => 'Mr.' )
48
- end
49
- end
50
-
51
- test "% acts as escape character in String interpolation" do
52
- assert_equal "%{first}", I18n.interpolate("%%{first}", :first => 'Masao')
53
- assert_equal "% 1", I18n.interpolate("%% %<num>d", :num => 1.0)
54
- assert_equal "%{num} %<num>d", I18n.interpolate("%%{num} %%<num>d", :num => 1)
55
- end
56
-
57
- def test_sprintf_mix_unformatted_and_formatted_named_placeholders
58
- assert_equal "foo 1.000000", I18n.interpolate("%{name} %<num>f", :name => "foo", :num => 1.0)
59
- end
60
-
61
- class RailsSafeBuffer < String
62
-
63
- def gsub(*args, &block)
64
- to_str.gsub(*args, &block)
65
- end
66
-
67
- end
68
- test "with String subclass that redefined gsub method" do
69
- assert_equal "Hello mars world", I18n.interpolate(RailsSafeBuffer.new("Hello %{planet} world"), :planet => 'mars')
70
- end
71
- end
72
-
73
- class I18nMissingInterpolationCustomHandlerTest < I18n::TestCase
74
- def setup
75
- super
76
- @old_handler = I18n.config.missing_interpolation_argument_handler
77
- I18n.config.missing_interpolation_argument_handler = lambda do |key, values, string|
78
- "missing key is #{key}, values are #{values.inspect}, given string is '#{string}'"
79
- end
80
- end
81
-
82
- def teardown
83
- I18n.config.missing_interpolation_argument_handler = @old_handler
84
- super
85
- end
86
-
87
- test "String interpolation can use custom missing interpolation handler" do
88
- assert_equal %|Masao missing key is last, values are {:first=>"Masao"}, given string is '%{first} %{last}'|,
89
- I18n.interpolate("%{first} %{last}", :first => 'Masao')
90
- end
91
- end
@@ -1,34 +0,0 @@
1
- require 'test_helper'
2
-
3
- class I18nLoadPathTest < I18n::TestCase
4
- def setup
5
- super
6
- I18n.locale = :en
7
- I18n.backend = I18n::Backend::Simple.new
8
- store_translations(:en, :foo => {:bar => 'bar', :baz => 'baz'})
9
- end
10
-
11
- test "nested load paths do not break locale loading" do
12
- I18n.load_path = [[locales_dir + '/en.yml']]
13
- assert_equal "baz", I18n.t(:'foo.bar')
14
- end
15
-
16
- test "loading an empty yml file raises an InvalidLocaleData exception" do
17
- assert_raise I18n::InvalidLocaleData do
18
- I18n.load_path = [[locales_dir + '/invalid/empty.yml']]
19
- I18n.t(:'foo.bar', :default => "baz")
20
- end
21
- end
22
-
23
- test "loading an invalid yml file raises an InvalidLocaleData exception" do
24
- assert_raise I18n::InvalidLocaleData do
25
- I18n.load_path = [[locales_dir + '/invalid/syntax.yml']]
26
- I18n.t(:'foo.bar', :default => "baz")
27
- end
28
- end
29
-
30
- test "adding arrays of filenames to the load path does not break locale loading" do
31
- I18n.load_path << Dir[locales_dir + '/*.{rb,yml}']
32
- assert_equal "baz", I18n.t(:'foo.bar')
33
- end
34
- end
@@ -1,24 +0,0 @@
1
- require 'test_helper'
2
-
3
- class I18nMiddlewareTest < I18n::TestCase
4
- def setup
5
- super
6
- I18n.default_locale = :fr
7
- @app = DummyRackApp.new
8
- @middleware = I18n::Middleware.new(@app)
9
- end
10
-
11
- test "middleware initializes new config object after request" do
12
- old_i18n_config_object_id = Thread.current[:i18n_config].object_id
13
- @middleware.call({})
14
-
15
- updated_i18n_config_object_id = Thread.current[:i18n_config].object_id
16
- assert_not_equal updated_i18n_config_object_id, old_i18n_config_object_id
17
- end
18
-
19
- test "succesfully resets i18n locale to default locale by defining new config" do
20
- @middleware.call({})
21
-
22
- assert_equal :fr, I18n.locale
23
- end
24
- end