Merge pull request #2936 from consul/i18n-pluralize

Avoid InvalidPluralizationData exception when missing translations
This commit is contained in:
Raimond Garcia
2018-10-05 12:57:48 +02:00
committed by GitHub
2 changed files with 66 additions and 1 deletions

View File

@@ -0,0 +1,19 @@
### From official I18n::Backend::Base
### https://github.com/svenfuchs/i18n/blob/f35b839693c5ecc7ea0ff0f57c5cbf6db1dd73f9/lib/i18n/backend/base.rb#L155
### Just changed one line to return `count` instead of raising the exception `InvalidPluralizationData`
module I18n
module Backend
module Base
def pluralize(locale, entry, count)
return entry unless entry.is_a?(Hash) && count
key = pluralization_key(entry, count)
return count unless entry.has_key?(key)
entry[key]
end
end
end
end

View File

@@ -1,6 +1,7 @@
require 'rails_helper'
require 'i18n/tasks' require 'i18n/tasks'
RSpec.describe 'I18n' do describe 'I18n' do
let(:i18n) { I18n::Tasks::BaseTask.new } let(:i18n) { I18n::Tasks::BaseTask.new }
let(:missing_keys) { i18n.missing_keys } let(:missing_keys) { i18n.missing_keys }
let(:unused_keys) { i18n.unused_keys } let(:unused_keys) { i18n.unused_keys }
@@ -14,4 +15,49 @@ RSpec.describe 'I18n' do
expect(unused_keys).to be_empty, expect(unused_keys).to be_empty,
"#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them" "#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them"
end end
context "Plurals" do
after do
I18n.backend.reload!
end
it "returns plural rule if translation present" do
keys = { zero: "No comments",
one: "1 comment",
other: "%{count} comments" }
I18n.backend.store_translations(:en, { test_plural: keys })
expect(I18n.t("test_plural", count: 0)).to eq("No comments")
expect(I18n.t("test_plural", count: 1)).to eq("1 comment")
expect(I18n.t("test_plural", count: 2)).to eq("2 comments")
end
it "returns default locale's plural rule if whole translation not present" do
keys = { zero: "No comments",
one: "1 comment",
other: "%{count} comments" }
I18n.backend.store_translations(I18n.default_locale, { test_plural: keys })
I18n.backend.store_translations(:zz, {} )
I18n.enforce_available_locales = false
I18n.locale = :zz
expect(I18n.t("test_plural", count: 0)).to eq("No comments")
expect(I18n.t("test_plural", count: 1)).to eq("1 comment")
expect(I18n.t("test_plural", count: 2)).to eq("2 comments")
end
it "returns count if specific plural rule not present" do
keys = { zero: "No comments" }
I18n.backend.store_translations(:en, { test_plural: keys })
expect(I18n.t("test_plural", count: 0)).to eq("No comments")
expect(I18n.t("test_plural", count: 1)).to eq(1)
expect(I18n.t("test_plural", count: 2)).to eq(2)
end
end
end end