i18n 0.9.3 → 0.9.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57b2ff3a6c23f6e74b39b1be0a56311a2b49025f71d9e16ac4fde2d93e6448bf
4
- data.tar.gz: 7d21368bbe369fc644e10785db19f47f7d5eef492dfdebaa090152470ffe3c00
3
+ metadata.gz: 8c2f427a87de527a30014666816a5281355600edcd9732d48d0e3f5ed3a2892a
4
+ data.tar.gz: 0c833c66aebca3795c3881be183c58bbe85879f767c70bff65cb76dd75356edb
5
5
  SHA512:
6
- metadata.gz: 8bd2956e1905c8b3d0dfb65696f6f4b96e91583a649bdf0e81772dad80c72240ee1b96996983b8e44ee312fae58aee63732166268b34669ead66c3f87d716dee
7
- data.tar.gz: e74c46af688ac02e8fb776b39dc873ae9951901b9567e08d1fd21b68d0d5677cbc9ceeba2d8b2f2c1500b3f886084e31eafc80083adaa4572017f3ccb67a0028
6
+ metadata.gz: 87c99a7886fbc70684bfa121fa4d6ba36be32d87f6bcc1bc2a804071c8e197f0b6714ff068fda82a982d33cdd7836f7a3566bc4678bc7061f087939031f83458
7
+ data.tar.gz: 87a4fd3e214d2426f8a97476bbbed0730486f6f5d86dfc47d72f980058a7a367124f659b12180a9a8d524ce9465a2bbd784e8c41d2d0fa1e82a65028b03e1488
@@ -34,17 +34,21 @@ module I18n
34
34
  entry = resolve(locale, key, entry, options)
35
35
  end
36
36
 
37
- entry = entry.dup if entry.is_a?(String)
38
-
39
37
  count = options[:count]
40
- entry = pluralize(locale, entry, count) if count
41
38
 
42
- if entry.nil?
39
+ if entry.nil? && (subtrees? || !count)
43
40
  if (options.key?(:default) && !options[:default].nil?) || !options.key?(:default)
44
41
  throw(:exception, I18n::MissingTranslation.new(locale, key, options))
45
42
  end
46
43
  end
47
44
 
45
+ entry = entry.dup if entry.is_a?(String)
46
+ entry = pluralize(locale, entry, count) if count
47
+
48
+ if entry.nil? && !subtrees?
49
+ throw(:exception, I18n::MissingTranslation.new(locale, key, options))
50
+ end
51
+
48
52
  deep_interpolation = options[:deep_interpolation]
49
53
  values = options.except(*RESERVED_KEYS)
50
54
  if values
@@ -97,6 +101,10 @@ module I18n
97
101
  raise NotImplementedError
98
102
  end
99
103
 
104
+ def subtrees?
105
+ true
106
+ end
107
+
100
108
  # Evaluates defaults.
101
109
  # If given subject is an Array, it walks the array and returns the
102
110
  # first translation that can be resolved. Otherwise it tries to resolve
@@ -145,8 +153,7 @@ module I18n
145
153
  def pluralize(locale, entry, count)
146
154
  return entry unless entry.is_a?(Hash) && count
147
155
 
148
- key = :zero if count == 0 && entry.has_key?(:zero)
149
- key ||= count == 1 ? :one : :other
156
+ key = pluralization_key(entry, count)
150
157
  raise InvalidPluralizationData.new(entry, count, key) unless entry.has_key?(key)
151
158
  entry[key]
152
159
  end
@@ -161,9 +168,7 @@ module I18n
161
168
  # each element of the array is recursively interpolated (until it finds a string)
162
169
  # method interpolates ["yes, %{user}", ["maybe no, %{user}, "no, %{user}"]], :user => "bartuz"
163
170
  # # => "["yes, bartuz",["maybe no, bartuz", "no, bartuz"]]"
164
-
165
-
166
- def interpolate(locale, subject, values = {})
171
+ def interpolate(locale, subject, values = {})
167
172
  return subject if values.empty?
168
173
 
169
174
  case subject
@@ -240,6 +245,11 @@ module I18n
240
245
  end
241
246
  end
242
247
  end
248
+
249
+ def pluralization_key(entry, count)
250
+ key = :zero if count == 0 && entry.has_key?(:zero)
251
+ key ||= count == 1 ? :one : :other
252
+ end
243
253
  end
244
254
  end
245
255
  end
@@ -103,6 +103,10 @@ module I18n
103
103
 
104
104
  protected
105
105
 
106
+ def subtrees?
107
+ @subtrees
108
+ end
109
+
106
110
  def lookup(locale, key, scope = [], options = {})
107
111
  key = normalize_flat_keys(locale, key, scope, options[:separator])
108
112
  value = @store["#{locale}.#{key}"]
@@ -116,6 +120,15 @@ module I18n
116
120
  SubtreeProxy.new("#{locale}.#{key}", @store)
117
121
  end
118
122
  end
123
+
124
+ def pluralize(locale, entry, count)
125
+ if subtrees?
126
+ super
127
+ else
128
+ key = pluralization_key(entry, count)
129
+ entry[key]
130
+ end
131
+ end
119
132
  end
120
133
 
121
134
  class SubtreeProxy
@@ -132,7 +145,10 @@ module I18n
132
145
  def [](key)
133
146
  unless @subtree && value = @subtree[key]
134
147
  value = @store["#{@master_key}.#{key}"]
135
- (@subtree ||= {})[key] = JSON.decode(value) if value
148
+ if value
149
+ value = JSON.decode(value)
150
+ (@subtree ||= {})[key] = value
151
+ end
136
152
  end
137
153
  value
138
154
  end
@@ -44,7 +44,7 @@ module I18n
44
44
  def available_locales
45
45
  init_translations unless initialized?
46
46
  translations.inject([]) do |locales, (locale, data)|
47
- locales << locale unless (data.keys - [:i18n]).empty?
47
+ locales << locale unless data.size <= 1 && (data.empty? || data.has_key?(:i18n))
48
48
  locales
49
49
  end
50
50
  end
@@ -1,3 +1,3 @@
1
1
  module I18n
2
- VERSION = "0.9.3"
2
+ VERSION = "0.9.4"
3
3
  end
@@ -13,7 +13,7 @@ class I18nBackendChainTest < I18n::TestCase
13
13
  })
14
14
  @second = backend(:en => {
15
15
  :bar => 'Bar', :formats => {
16
- :long => 'long',
16
+ :long => 'long',
17
17
  :subformats => {:long => 'long'},
18
18
  },
19
19
  :plural_2 => { :one => 'one' },
@@ -89,3 +89,34 @@ class I18nBackendChainTest < I18n::TestCase
89
89
  backend
90
90
  end
91
91
  end
92
+
93
+ class I18nBackendChainWithKeyValueTest < I18n::TestCase
94
+ def setup_backend!(subtrees = true)
95
+ first = I18n::Backend::KeyValue.new({}, subtrees)
96
+ first.store_translations(:en, :plural_1 => { :one => '%{count}' })
97
+
98
+ second = I18n::Backend::Simple.new
99
+ second.store_translations(:en, :plural_2 => { :one => 'one' })
100
+ I18n.backend = I18n::Backend::Chain.new(first, second)
101
+ end
102
+
103
+ test "subtrees enabled: looks up pluralization translations from the first chained backend" do
104
+ setup_backend!
105
+ assert_equal '1', I18n.t(:plural_1, count: 1)
106
+ end
107
+
108
+ test "subtrees disabled: looks up pluralization translations from the first chained backend" do
109
+ setup_backend!(false)
110
+ assert_equal '1', I18n.t(:plural_1, count: 1)
111
+ end
112
+
113
+ test "subtrees enabled: looks up translations from the second chained backend" do
114
+ setup_backend!
115
+ assert_equal 'one', I18n.t(:plural_2, count: 1)
116
+ end
117
+
118
+ test "subtrees disabled: looks up translations from the second chained backend" do
119
+ setup_backend!(false)
120
+ assert_equal 'one', I18n.t(:plural_2, count: 1)
121
+ end
122
+ end if I18n::TestCase.key_value?
@@ -41,6 +41,18 @@ class I18nBackendKeyValueTest < I18n::TestCase
41
41
  end
42
42
  end
43
43
 
44
+ test "subtrees enabled: given incomplete pluralization data it raises I18n::InvalidPluralizationData" do
45
+ setup_backend!
46
+ store_translations(:en, :bar => { :one => "One" })
47
+ assert_raise(I18n::InvalidPluralizationData) { I18n.t(:bar, :count => 2) }
48
+ end
49
+
50
+ test "subtrees disabled: given incomplete pluralization data it returns an error message" do
51
+ setup_backend!(false)
52
+ store_translations(:en, :bar => { :one => "One" })
53
+ assert_equal "translation missing: en.bar", I18n.t(:bar, :count => 2)
54
+ end
55
+
44
56
  test "translate handles subtrees for pluralization" do
45
57
  setup_backend!(false)
46
58
  store_translations(:en, :bar => { :one => "One" })
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sven Fuchs
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2018-01-22 00:00:00.000000000 Z
16
+ date: 2018-02-09 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: concurrent-ruby