Skip to content

Commit 6636178

Browse files
authored
Merge pull request #402 from fatkodima/subtrees-bug
Fix issue with disabled subtrees and pluralization for KeyValue backend
2 parents f892bdc + ef2bc12 commit 6636178

File tree

3 files changed

+56
-6
lines changed

3 files changed

+56
-6
lines changed

lib/i18n/backend/base.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,17 @@ def translate(locale, key, options = {})
3434
entry = resolve(locale, key, entry, options)
3535
end
3636

37+
entry = entry.dup if entry.is_a?(String)
38+
39+
count = options[:count]
40+
entry = pluralize(locale, entry, count) if count
41+
3742
if entry.nil?
3843
if (options.key?(:default) && !options[:default].nil?) || !options.key?(:default)
3944
throw(:exception, I18n::MissingTranslation.new(locale, key, options))
4045
end
4146
end
4247

43-
entry = entry.dup if entry.is_a?(String)
44-
45-
count = options[:count]
46-
entry = pluralize(locale, entry, count) if count
47-
4848
deep_interpolation = options[:deep_interpolation]
4949
values = options.except(*RESERVED_KEYS)
5050
if values

lib/i18n/backend/key_value.rb

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,51 @@ def lookup(locale, key, scope = [], options = {})
107107
key = normalize_flat_keys(locale, key, scope, options[:separator])
108108
value = @store["#{locale}.#{key}"]
109109
value = JSON.decode(value) if value
110-
value.is_a?(Hash) ? value.deep_symbolize_keys : value
110+
111+
if value.is_a?(Hash)
112+
value.deep_symbolize_keys
113+
elsif !value.nil?
114+
value
115+
elsif !@subtrees
116+
SubtreeProxy.new("#{locale}.#{key}", @store)
117+
end
118+
end
119+
end
120+
121+
class SubtreeProxy
122+
def initialize(master_key, store)
123+
@master_key = master_key
124+
@store = store
125+
@subtree = nil
126+
end
127+
128+
def has_key?(key)
129+
@subtree && @subtree.has_key?(key) || self[key]
130+
end
131+
132+
def [](key)
133+
unless @subtree && value = @subtree[key]
134+
value = @store["#{@master_key}.#{key}"]
135+
(@subtree ||= {})[key] = JSON.decode(value) if value
136+
end
137+
value
138+
end
139+
140+
def is_a?(klass)
141+
Hash == klass || super
142+
end
143+
alias :kind_of? :is_a?
144+
145+
def instance_of?(klass)
146+
Hash == klass || super
147+
end
148+
149+
def nil?
150+
@subtree.nil?
151+
end
152+
153+
def inspect
154+
@subtree.inspect
111155
end
112156
end
113157

test/backend/key_value_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,10 @@ def assert_flattens(expected, nested, escape=true, subtree=true)
4040
I18n.t("foo", :raise => true)
4141
end
4242
end
43+
44+
test "translate handles subtrees for pluralization" do
45+
setup_backend!(false)
46+
store_translations(:en, :bar => { :one => "One" })
47+
assert_equal("One", I18n.t("bar", :count => 1))
48+
end
4349
end if I18n::TestCase.key_value?

0 commit comments

Comments
 (0)