Skip to content

Commit 20f396c

Browse files
committed
Support pluralization in I18n messages backend
Pass all provided options down to I18n.t method. It will use `:count` option to pluralize the message. en: foo: one: %{count} foo other: %{count} foos I18n.t(:foo, count: 1) #=> 1 foo I18n.t(:foo, count: 1) #=> 2 foos
1 parent 3613f98 commit 20f396c

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

lib/dry/schema/messages/i18n.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ def initialize
3232
def get(key, options = EMPTY_HASH)
3333
return unless key
3434

35-
result = t.(key, locale: options.fetch(:locale, default_locale))
35+
options = {locale: default_locale, **options}
36+
result = t.(key, **options)
3637

3738
if result.is_a?(Hash)
3839
text = result[:text]

spec/integration/messages/i18n_spec.rb

+36
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,42 @@ def store_errors(**errors)
203203
expect(meta).to eql(code: 123)
204204
end
205205
end
206+
207+
context "with plural message" do
208+
before do
209+
store_errors(
210+
apples: {
211+
one: "single apple",
212+
other: "%{count} apples"
213+
}
214+
)
215+
end
216+
217+
it "uses correct variant" do
218+
template, meta = messages[:apples, path: :path, count: 3]
219+
220+
expect(template.()).to eql("3 apples")
221+
expect(meta).to eql({})
222+
end
223+
224+
context "without count" do
225+
it "returns meta" do
226+
template, meta = messages[:apples, path: :path]
227+
228+
expect(template.()).to eql({
229+
one: "single apple",
230+
other: "%{count} apples"
231+
})
232+
233+
expect(template.(count: 1)).to eql("single apple")
234+
235+
expect(meta).to eql({
236+
one: "single apple",
237+
other: "%{count} apples"
238+
})
239+
end
240+
end
241+
end
206242
end
207243

208244
context "with dynamic locale" do

0 commit comments

Comments
 (0)