releaf-i18n_database 1.1.0 → 1.1.1

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
  SHA1:
3
- metadata.gz: 2a615154a3caf016ba53da44efe406cb12669e3b
4
- data.tar.gz: 9d6fbb903b29fbfc9905a65329fbcc785a28abee
3
+ metadata.gz: d7ce7261adffcef80eeae554ebd065fd1184cb2e
4
+ data.tar.gz: b650feda888ca31f88229e99e45769b0bb102153
5
5
  SHA512:
6
- metadata.gz: c2d5ab814fbf1b199c4422e6bf766ebb9adea25dd384d743d20250d0db697e8a79c33b591d9edb290423e4210b0aeb711840119f2afa7aa6c2c75193ed464a26
7
- data.tar.gz: 104410b9c5d1604958c6686af93ef4c466541cd402a99cf03b160bf09f92a046618011b660315b8244942bef1f7263677eb23a09d5142509751c4ed7d6226895
6
+ metadata.gz: 0e18e5b7741bd21daec495cdbe6dae889a552214b453797f830e8ded89b045fa6958d1bd8186283ac08186b087691150b2039cc0bc2e28745334b0e354cf5643
7
+ data.tar.gz: b9b0051f920eb42253cefde4500261918462f44d2abefddf48c021fb7911df6e881473b1fa009ba7b846bdb1bdbed6ee07be13dbc65c5b115f58bb1b1f7fe8e1
@@ -56,8 +56,7 @@ class Releaf::I18nDatabase::TranslationsStore
56
56
  end
57
57
 
58
58
  def valid_pluralized_result?(locale, count, result)
59
- return false unless TwitterCldr.supported_locale?(locale)
60
- result.key?(TwitterCldr::Formatters::Plurals::Rules.rule_for(count, locale))
59
+ result.key?(I18n.t(:'i18n.plural.rule', locale: locale, resolve: false).call(count))
61
60
  end
62
61
 
63
62
  def returnable_result?(result, options)
@@ -1,6 +1,6 @@
1
1
  require 'axlsx_rails'
2
- require 'twitter_cldr'
3
2
  require 'i18n'
3
+ require 'rails-i18n'
4
4
  require 'roo'
5
5
 
6
6
  module Releaf::I18nDatabase
@@ -13,4 +13,3 @@ module Releaf::I18nDatabase
13
13
  [Releaf::I18nDatabase::Backend, Releaf::I18nDatabase::HumanizeMissingTranslations]
14
14
  end
15
15
  end
16
-
@@ -4,12 +4,15 @@ module Releaf
4
4
  module I18nDatabase
5
5
  class Backend
6
6
 
7
- include ::I18n::Backend::Base, ::I18n::Backend::Flatten
7
+ include ::I18n::Backend::Base
8
+ include ::I18n::Backend::Flatten
9
+ include ::I18n::Backend::Pluralization
10
+
8
11
  UPDATED_AT_KEY = 'releaf.i18n_database.translations.updated_at'
9
12
  DEFAULT_CONFIG = {
10
13
  translation_auto_creation: true,
11
14
  translation_auto_creation_patterns: [/.*/],
12
- translation_auto_creation_exclusion_patterns: [/^attributes\./]
15
+ translation_auto_creation_exclusion_patterns: [/^attributes\./, /^i18n\./]
13
16
  }
14
17
  attr_accessor :translations_cache
15
18
 
@@ -18,9 +21,11 @@ module Releaf
18
21
  end
19
22
 
20
23
  def self.locales_pluralizations
21
- Releaf.application.config.all_locales.map do|locale|
22
- TwitterCldr::Formatters::Plurals::Rules.all_for(locale) if TwitterCldr.supported_locale?(locale)
23
- end.flatten.uniq.compact
24
+ keys = Releaf.application.config.all_locales.map{ |locale| I18n.t(:'i18n.plural.keys', locale: locale) }.flatten
25
+ # always add zero as it skipped for some locales even when there is zero form (lv for example)
26
+ keys << :zero
27
+
28
+ keys.uniq
24
29
  end
25
30
 
26
31
  def self.configure_component
@@ -335,6 +335,7 @@ feature "Translations" do
335
335
  context "with nonexistent translation" do
336
336
  before do
337
337
  allow(Releaf.application.config).to receive(:all_locales).and_return(["ru", "lv"])
338
+ allow(I18n).to receive(:locale_available?).and_return(true)
338
339
  end
339
340
 
340
341
  it "creates empty translation" do
@@ -378,4 +379,48 @@ feature "Translations" do
378
379
  end
379
380
  end
380
381
  end
382
+
383
+
384
+ describe "pluralization" do
385
+
386
+ before do
387
+ locales = [:lv, :ru]
388
+ allow(I18n.config).to receive(:available_locales).and_return(locales)
389
+ allow(Releaf.application.config).to receive(:available_locales).and_return(locales)
390
+ allow(Releaf.application.config).to receive(:all_locales).and_return(locales)
391
+
392
+ I18n.reload!
393
+
394
+ [:few, :many, :one, :other, :zero].each do |rule|
395
+ translation = Releaf::I18nDatabase::I18nEntry.create!(key: "public.years.#{rule}")
396
+ locales.each do |locale|
397
+ translation.i18n_entry_translation.create!( locale: locale.to_s, text: "years #{locale} #{rule} XX" )
398
+ end
399
+ end
400
+
401
+ Releaf::I18nDatabase::Backend.reset_cache
402
+ end
403
+
404
+ after do
405
+ # force I18n reloading to restore the original state.
406
+ # for this to work, the stubs must be removed beforehand
407
+ allow(I18n.config).to receive(:available_locales).and_call_original
408
+ allow(Releaf.application.config).to receive(:available_locales).and_call_original
409
+ allow(Releaf.application.config).to receive(:all_locales).and_call_original
410
+ I18n.reload!
411
+ end
412
+
413
+ it "uses rails-i18n pluralization mechanism to detect correct pluralization keys" do
414
+ expect(I18n.t("years", scope: "public", count: 0, locale: :lv)).to eq 'years lv zero XX'
415
+ expect(I18n.t("years", scope: "public", count: 1, locale: :lv)).to eq 'years lv one XX'
416
+ expect(I18n.t("years", scope: "public", count: 3, locale: :lv)).to eq 'years lv other XX'
417
+
418
+ expect(I18n.t("years", scope: "public", count: 1, locale: :ru)).to eq 'years ru one XX'
419
+ expect(I18n.t("years", scope: "public", count: 3, locale: :ru)).to eq 'years ru few XX'
420
+ expect(I18n.t("years", scope: "public", count: 5, locale: :ru)).to eq 'years ru many XX'
421
+ end
422
+
423
+ end
424
+
425
+
381
426
  end
@@ -64,16 +64,8 @@ describe Releaf::I18nDatabase::Backend do
64
64
  describe ".locales_pluralizations" do
65
65
  it "returns array all pluralization forms for releaf locales" do
66
66
  allow(Releaf.application.config).to receive(:all_locales).and_return([:de, :ru, :aasdsd])
67
-
68
- allow(TwitterCldr).to receive(:supported_locale?).with(:de).and_return(true)
69
- allow(TwitterCldr::Formatters::Plurals::Rules).to receive(:all_for).with(:de).and_return([:one, :other, :many])
70
-
71
- allow(TwitterCldr).to receive(:supported_locale?).with(:ru).and_return(true)
72
- allow(TwitterCldr::Formatters::Plurals::Rules).to receive(:all_for).with(:ru).and_return([:one, :other, :few, :zero])
73
-
74
- allow(TwitterCldr).to receive(:supported_locale?).with(:aasdsd).and_return(false)
75
-
76
- expect(described_class.locales_pluralizations).to eq([:one, :other, :many, :few, :zero])
67
+ allow(I18n).to receive(:locale_available?).and_return(true)
68
+ expect(described_class.locales_pluralizations).to eq([:one, :other, :few, :many, :zero])
77
69
  end
78
70
  end
79
71
 
@@ -229,33 +229,15 @@ describe Releaf::I18nDatabase::TranslationsStore do
229
229
  end
230
230
 
231
231
  describe "#valid_pluralized_result?" do
232
- before do
233
- allow(TwitterCldr::Formatters::Plurals::Rules).to receive(:rule_for)
234
- .with(2, :lv).and_return(:few)
235
- end
236
-
237
- context "when unsupported locale given" do
238
- it "return false" do
239
- allow(TwitterCldr).to receive(:supported_locale?).with(:lv).and_return(false)
240
- expect(subject.valid_pluralized_result?(:lv, 2, few: "x", many: "y")).to be false
241
- end
242
- end
243
-
244
232
  context "when given hash contains valid result for given locale and count" do
245
- before do
246
- allow(TwitterCldr).to receive(:supported_locale?).with(:lv).and_return(true)
247
- end
248
-
249
- context "when given hash contains valid result for given locale and count" do
250
- it "return true" do
251
- expect(subject.valid_pluralized_result?(:lv, 2, few: "x", many: "y")).to be true
252
- end
233
+ it "return true" do
234
+ expect(subject.valid_pluralized_result?(:lv, 2, one: "x", other: "y")).to be true
253
235
  end
236
+ end
254
237
 
255
- context "when given hash contains valid result for given locale and count" do
256
- it "return true" do
257
- expect(subject.valid_pluralized_result?(:lv, 2, one: "x", many: "y")).to be false
258
- end
238
+ context "when given hash contains invalid result for given locale and count" do
239
+ it "return false" do
240
+ expect(subject.valid_pluralized_result?(:lv, 2, one: "x", few: "y")).to be false
259
241
  end
260
242
  end
261
243
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: releaf-i18n_database
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - CubeSystems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-23 00:00:00.000000000 Z
11
+ date: 2017-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: releaf-core
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.0
19
+ version: 1.1.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.0
26
+ version: 1.1.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: twitter_cldr
28
+ name: rails-i18n
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.6'
33
+ version: 4.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.6'
40
+ version: 4.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: axlsx_rails
43
43
  requirement: !ruby/object:Gem::Requirement