numbers_and_words 1.0.1 → 1.0.3

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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -3
  3. data/README.rdoc +13 -2
  4. data/lib/numbers_and_words/helper_classes/array_extensions/helpers.rb +1 -1
  5. data/lib/numbers_and_words/i18n/locales/numbers.fr-CH.yml +101 -0
  6. data/lib/numbers_and_words/i18n/locales/numbers.nl.yml +45 -0
  7. data/lib/numbers_and_words/i18n.rb +1 -1
  8. data/lib/numbers_and_words/strategies/array_joiner/languages/fr-CH.rb +12 -0
  9. data/lib/numbers_and_words/strategies/array_joiner/languages/nl.rb +12 -0
  10. data/lib/numbers_and_words/strategies/array_joiner/languages.rb +2 -0
  11. data/lib/numbers_and_words/strategies/figures_converter/decorators/fr-CH/base.rb +14 -0
  12. data/lib/numbers_and_words/strategies/figures_converter/decorators/fr-CH/fractional.rb +14 -0
  13. data/lib/numbers_and_words/strategies/figures_converter/decorators/fr-CH/integral.rb +14 -0
  14. data/lib/numbers_and_words/strategies/figures_converter/decorators/fr-CH.rb +5 -0
  15. data/lib/numbers_and_words/strategies/figures_converter/decorators/nl/base.rb +14 -0
  16. data/lib/numbers_and_words/strategies/figures_converter/decorators/nl/fractional.rb +40 -0
  17. data/lib/numbers_and_words/strategies/figures_converter/decorators/nl/integral.rb +19 -0
  18. data/lib/numbers_and_words/strategies/figures_converter/decorators/nl.rb +5 -0
  19. data/lib/numbers_and_words/strategies/figures_converter/decorators.rb +2 -0
  20. data/lib/numbers_and_words/strategies/figures_converter/languages/fr-CH.rb +12 -0
  21. data/lib/numbers_and_words/strategies/figures_converter/languages/nl.rb +21 -3
  22. data/lib/numbers_and_words/strategies/figures_converter/languages/vi.rb +7 -7
  23. data/lib/numbers_and_words/strategies/figures_converter/languages.rb +1 -0
  24. data/lib/numbers_and_words/translations/base.rb +1 -1
  25. data/lib/numbers_and_words/translations/de.rb +1 -0
  26. data/lib/numbers_and_words/translations/fr-CH.rb +28 -0
  27. data/lib/numbers_and_words/translations/ka.rb +1 -0
  28. data/lib/numbers_and_words/translations/nl.rb +12 -2
  29. data/lib/numbers_and_words/translations/vi.rb +1 -0
  30. data/lib/numbers_and_words/translations.rb +1 -0
  31. data/lib/numbers_and_words/version.rb +1 -1
  32. metadata +16 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b5208a2d2ff914744a29fe15c5fd93c7a60b770e0aae261c279cb553f08bf777
4
- data.tar.gz: 69b589aae5e3c2477ad9271ab4749e0f1d0b7c8b03c024ea595711226a6e51b8
3
+ metadata.gz: a2463adcfe14855e68f922f5d1a36844542f6d679d7a07c48e7db1f6913154ae
4
+ data.tar.gz: 25112807d5a331f3935ae9bdc92e26668a5ff77298599df412bfc2e9094ef92b
5
5
  SHA512:
6
- metadata.gz: 19dc40ac39ae76cb5f2f758a4eb0e91f581b56e50c4e5b9bfc574e46fdaca9150ad4aa7f7974bf83666cca17f64692eb35ff1a6ffd3aef9f426e197c8fb20188
7
- data.tar.gz: a622bde5b625c9cd9f8cc04fc41a2ebc5d604db50041d58dab12b115a18646d0bc1b1f234199ab87f041a4ccd6032dc4516e3a3a619f6861f025796197ad3f4d
6
+ metadata.gz: f810b928a2f564b6051b1964ee3fa4970db403bdac92c0b93194713e51e211277f3470fc14bd47974aeb6ebf8cddc916d9cfdb08424259de84338b2d3c3b6f00
7
+ data.tar.gz: 13272058723519b964a39bbf41c5a8774d21a8e19e45111bda6d883bab1925def49003e36ab897a7d2d91d220d69b1cd391589b94d0f6f86f865d42e69be73a3
data/CHANGELOG.md CHANGED
@@ -1,8 +1,19 @@
1
- ## 1.1.0 (Next)
1
+ ## 1.0.4 (Next)
2
2
 
3
3
  ### Features
4
4
  * Your contribution here.
5
5
 
6
+ ## 1.0.3 (Dec 23, 2025)
7
+
8
+ ### Features
9
+ * Upgrade RuboCop to 1.78.0. \[[#208](https://github.com/kslazarev/numbers_and_words/pull/208)\]
10
+ * Add support for Swiss-French language. \[[#210](https://github.com/kslazarev/numbers_and_words/pull/210)\]
11
+
12
+ ## 1.0.2 (Jul 5, 2025)
13
+
14
+ ### Features
15
+ * Add support for Dutch floating-point numbers. \[[#207](https://github.com/kslazarev/numbers_and_words/pull/207)\]
16
+
6
17
  ## 1.0.1 (March 7, 2025)
7
18
 
8
19
  ### Features
@@ -154,7 +165,7 @@
154
165
  * Add Lithuanian language. \[[#77](https://github.com/kslazarev/numbers_and_words/pull/77)\] \([@miks](https://github.com/miks)\) \(assignee: [@miks](https://github.com/miks)\)
155
166
 
156
167
  ### Bugs
157
- * Fix latvian one hundread cases. \[[#81](https://github.com/kslazarev/numbers_and_words/pull/81)\] \([@miks](https://github.com/miks)\) \(assignee: [@miks](https://github.com/miks)\)
168
+ * Fix Latvian one hundred cases. \[[#81](https://github.com/kslazarev/numbers_and_words/pull/81)\] \([@miks](https://github.com/miks)\) \(assignee: [@miks](https://github.com/miks)\)
158
169
 
159
170
  ### Supports
160
171
  * Added @miks contacts to contributors list in README. \[[#79](https://github.com/kslazarev/numbers_and_words/issues/79)\] \([@kslazarev](https://github.com/kslazarev)\) \(assignee: [@miks](https://github.com/miks)\)
@@ -196,7 +207,7 @@
196
207
  ## 0.6.0 (March 25, 2013)
197
208
 
198
209
  ### Features
199
- * Support fractional form for Ukranian. \[[#54](https://github.com/kslazarev/numbers_and_words/issues/54)\] \([@kslazarev](https://github.com/kslazarev)\) \(assignee: [@Shk-Serji](https://github.com/Shk-Serji)\)
210
+ * Support fractional form for Ukrainian. \[[#54](https://github.com/kslazarev/numbers_and_words/issues/54)\] \([@kslazarev](https://github.com/kslazarev)\) \(assignee: [@Shk-Serji](https://github.com/Shk-Serji)\)
200
211
  * Support fractional form for Russian. \[[#53](https://github.com/kslazarev/numbers_and_words/issues/53)\] \([@kslazarev](https://github.com/kslazarev)\) \(assignee: [@kslazarev](https://github.com/kslazarev)\)
201
212
  * Added functionality for spanish . \[[#51](https://github.com/kslazarev/numbers_and_words/pull/51)\] \([@jaambros](https://github.com/jaambros)\) \(assignee: [@jaambros](https://github.com/jaambros)\)
202
213
  * Support ordinal form for English and Hungarian. \[[#50](https://github.com/kslazarev/numbers_and_words/issues/50)\] \([@eLod](https://github.com/eLod)\) \(assignee: [@eLod](https://github.com/eLod)\)
data/README.rdoc CHANGED
@@ -25,6 +25,7 @@ Deletrea números en varios idiomas utilizando la gema I18n.
25
25
  * Spanish [es]
26
26
  * Русский [ru]
27
27
  * Français [fr]
28
+ * Français (Suisse) [fr-CH]
28
29
  * Українська [ua]
29
30
  * Magyar [hu]
30
31
  * Lietuvių [lt]
@@ -47,7 +48,7 @@ Deletrea números en varios idiomas utilizando la gema I18n.
47
48
  ** Experimental
48
49
 
49
50
  * {[en-AU], [en-CA], [en-IN], [en-US]}*** => [en]
50
- * {[fr-CA], [fr-CH]}*** => [fr]
51
+ * {[fr-CA]}*** => [fr]
51
52
  * {[de], [de-AT], [de-CH]}*** => [de]
52
53
  * {[it-CH]}*** => [it]
53
54
 
@@ -285,7 +286,7 @@ Deletrea números en varios idiomas utilizando la gema I18n.
285
286
  I18n.with_locale(:ru) { 1001.to_words gender: :neuter }
286
287
  => "одна тысяча одно"
287
288
 
288
- * Ukranian
289
+ * Ukrainian
289
290
 
290
291
  Change gender form: (gender: [:female || :male || :neuter])
291
292
 
@@ -373,6 +374,16 @@ Deletrea números en varios idiomas utilizando la gema I18n.
373
374
  I18n.with_locale(:da) { 1.to_words gender: :neuter }
374
375
  => "et"
375
376
 
377
+ * Dutch
378
+
379
+ Remove 'zero' from integral part of float: (remove_zero: [true || false])
380
+
381
+ I18n.with_locale(:nl) { 0.7.to_words remove_zero: true }
382
+ => "zeven tienden"
383
+
384
+ I18n.with_locale(:nl) { 0.7.to_words remove_zero: false }
385
+ => "nul komma zeven tienden"
386
+
376
387
  == Other options / Другие опции
377
388
 
378
389
  * Precision
@@ -35,7 +35,7 @@ module NumbersAndWords
35
35
  end
36
36
 
37
37
  def figures_array_under_capacity(capacity)
38
- self[0..(capacity * FIGURES_IN_CAPACITY) - ONES_SHIFT]
38
+ self[0..((capacity * FIGURES_IN_CAPACITY) - ONES_SHIFT)]
39
39
  end
40
40
 
41
41
  def ones
@@ -0,0 +1,101 @@
1
+ fr-CH:
2
+ numbers:
3
+ ones: [zéro, un, deux, trois, quatre, cinq, six, sept, huit, neuf]
4
+ teens: [_, onze, douze, treize, quatorze, quinze, seize, dix-sept, dix-huit, dix-neuf]
5
+ tens: [_, dix, vingt, trente, quarante, cinquante, soixante, septante, huitante, nonante]
6
+ eighty: huitante
7
+ hundreds:
8
+ one: cent
9
+ other: cents
10
+ mega: [_, thousands, millions, billions, trillions, quadrillions, quintillion, sextillions, septillions, octillions, nonillions, decillions]
11
+ thousands:
12
+ one: mille
13
+ other: mille
14
+ millions:
15
+ one: million
16
+ other: millions
17
+ billions:
18
+ one: milliard
19
+ other: milliards
20
+ trillions:
21
+ one: billion
22
+ other: billions
23
+ quadrillions:
24
+ one: billiard
25
+ other: billiards
26
+ quintillions:
27
+ one: trillion
28
+ other: trillions
29
+ sextillions:
30
+ one: trilliard
31
+ other: trilliards
32
+ septillions:
33
+ one: quadrillion
34
+ other: quadrillions
35
+ octillions:
36
+ one: quadrilliard
37
+ other: quadrilliards
38
+ nonillions:
39
+ one: quintillion
40
+ other: quintillions
41
+ decillions:
42
+ one: quintilliard
43
+ other: quintilliards
44
+ micro: [_, tenths, hundredths, thousandths, millionths, billionths, trillionths, quadrillionths, quintillionths, sextillionths, septillionths, octillionths, nonillionths, decillionths, undecillionths, duodecillionths, tredecillionths, quattuordecillionths]
45
+ tenths:
46
+ one: dixième
47
+ other: dixièmes
48
+ hundredths:
49
+ one: centième
50
+ other: centièmes
51
+ thousandths:
52
+ one: millième
53
+ other: millièmes
54
+ millionths:
55
+ one: millionième
56
+ other: millionièmes
57
+ billionths:
58
+ one: milliardième
59
+ other: milliardièmes
60
+ trillionths:
61
+ one: billionième
62
+ other: billionièmes
63
+ quadrillionths:
64
+ one: billiardième
65
+ other: billiardièmes
66
+ quintillionths:
67
+ one: trillionième
68
+ other: trillionièmes
69
+ sextillionths:
70
+ one: trilliardième
71
+ other: trilliardièmes
72
+ septillionths:
73
+ one: quadrillionième
74
+ other: quadrillionièmes
75
+ octillionths:
76
+ one: quadrilliardième
77
+ other: quadrilliardièmes
78
+ nonillionths:
79
+ one: quintillionième
80
+ other: quintillionièmes
81
+ decillionths:
82
+ one: quintilliardième
83
+ other: quintilliardièmes
84
+ undecillionths:
85
+ one: sextillionième
86
+ other: sextillionièmes
87
+ duodecillionths:
88
+ one: sextilliardième
89
+ other: sextilliardièmes
90
+ tredecillionths:
91
+ one: septillionième
92
+ other: septillionièmes
93
+ quattuordecillionths:
94
+ one: septilliardième
95
+ other: septilliardièmes
96
+ micro_separator: et
97
+ micro_prefix:
98
+ tens: dix
99
+ hundreds: cent
100
+ union: '-'
101
+ union: et
@@ -8,3 +8,48 @@ nl:
8
8
  mega: [_, duizend, miljoen, miljard, biljoen, biljard, triljoen, triljard, septiljoen, octillion, noniljoen, decillion]
9
9
  union: en
10
10
  union2or3: ën
11
+ micro: [_, tienden, honderdsten, duizendsten, miljoensten, miljardsten, biljoensten, biljardsten, triljoensten, triljardsten, septiljoensten, octillionsten, noniljoensten, decillionsten]
12
+ tienden:
13
+ one: tiende
14
+ other: tienden
15
+ honderdsten:
16
+ one: honderdste
17
+ other: honderdsten
18
+ duizendsten:
19
+ one: duizendste
20
+ other: duizendsten
21
+ miljoensten:
22
+ one: miljoenste
23
+ other: miljoensten
24
+ miljardsten:
25
+ one: miljardste
26
+ other: miljardsten
27
+ biljoensten:
28
+ one: biljoenste
29
+ other: biljoensten
30
+ biljardsten:
31
+ one: biljardste
32
+ other: biljardsten
33
+ triljoensten:
34
+ one: triljoenste
35
+ other: triljoensten
36
+ triljardsten:
37
+ one: triljardste
38
+ other: triljardsten
39
+ septiljoensten:
40
+ one: septiljoenste
41
+ other: septiljoensten
42
+ octillionsten:
43
+ one: octillionste
44
+ other: octillionsten
45
+ noniljoensten:
46
+ one: noniljoenste
47
+ other: noniljoensten
48
+ decillionsten:
49
+ one: decillionste
50
+ other: decillionsten
51
+ micro_separator: komma
52
+ micro_prefix:
53
+ tens: tien
54
+ hundreds: honderd
55
+ union: ''
@@ -8,7 +8,7 @@ module NumbersAndWords
8
8
  module_function
9
9
 
10
10
  def languages
11
- @languages ||= (locale_files.map { |path| path.split(%r{[/.]})[-2].to_sym })
11
+ @languages ||= locale_files.map { |path| path.split(%r{[/.]})[-2].to_sym }
12
12
  end
13
13
 
14
14
  def local_language(locale = ::I18n.locale)
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module ArrayJoiner
6
+ module Languages
7
+ class FrCh < Base
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module ArrayJoiner
6
+ module Languages
7
+ class Nl < Base
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -8,12 +8,14 @@ require 'numbers_and_words/strategies/array_joiner/languages/en'
8
8
  require 'numbers_and_words/strategies/array_joiner/languages/en-GB'
9
9
  require 'numbers_and_words/strategies/array_joiner/languages/es'
10
10
  require 'numbers_and_words/strategies/array_joiner/languages/fr'
11
+ require 'numbers_and_words/strategies/array_joiner/languages/fr-CH'
11
12
  require 'numbers_and_words/strategies/array_joiner/languages/hu'
12
13
  require 'numbers_and_words/strategies/array_joiner/languages/ru'
13
14
  require 'numbers_and_words/strategies/array_joiner/languages/ua'
14
15
  require 'numbers_and_words/strategies/array_joiner/languages/pt-BR'
15
16
  require 'numbers_and_words/strategies/array_joiner/languages/cs'
16
17
  require 'numbers_and_words/strategies/array_joiner/languages/vi'
18
+ require 'numbers_and_words/strategies/array_joiner/languages/nl'
17
19
 
18
20
  module NumbersAndWords
19
21
  module Strategies
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Decorators
7
+ module FrCh
8
+ class Base < Fr::Base
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Decorators
7
+ module FrCh
8
+ class Fractional < Fr::Fractional
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Decorators
7
+ module FrCh
8
+ class Integral < Fr::Integral
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'numbers_and_words/strategies/figures_converter/decorators/fr-CH/base'
4
+ require 'numbers_and_words/strategies/figures_converter/decorators/fr-CH/fractional'
5
+ require 'numbers_and_words/strategies/figures_converter/decorators/fr-CH/integral'
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Decorators
7
+ module Nl
8
+ class Base < Decorators::Base
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Decorators
7
+ module Nl
8
+ class Fractional < Base
9
+ def run
10
+ @strategy.options.options[:fractional_numeral] = true
11
+ "#{super} #{fraction_significance}"
12
+ end
13
+
14
+ private
15
+
16
+ def fraction_significance
17
+ @strategy.translations.micros full_fraction.fraction_capacity, figures.join.to_i
18
+ end
19
+
20
+ def full_fraction
21
+ (0..zero_length).inject(figures.clone) { |result, _el| result.unshift 0 }.to_figures
22
+ end
23
+
24
+ def figures
25
+ @strategy.figures.reverse
26
+ end
27
+
28
+ def zero_length
29
+ fraction_length - figures.length
30
+ end
31
+
32
+ def fraction_length
33
+ @options[:fractional][:length].to_i
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Decorators
7
+ module Nl
8
+ class Integral < Base
9
+ def run
10
+ return '' if @options[:remove_zero] && @strategy.figures.all?(&:zero?)
11
+
12
+ super
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'numbers_and_words/strategies/figures_converter/decorators/nl/base'
4
+ require 'numbers_and_words/strategies/figures_converter/decorators/nl/fractional'
5
+ require 'numbers_and_words/strategies/figures_converter/decorators/nl/integral'
@@ -5,12 +5,14 @@ require 'numbers_and_words/strategies/figures_converter/decorators/en'
5
5
  require 'numbers_and_words/strategies/figures_converter/decorators/en-GB'
6
6
  require 'numbers_and_words/strategies/figures_converter/decorators/es'
7
7
  require 'numbers_and_words/strategies/figures_converter/decorators/fr'
8
+ require 'numbers_and_words/strategies/figures_converter/decorators/fr-CH'
8
9
  require 'numbers_and_words/strategies/figures_converter/decorators/ru'
9
10
  require 'numbers_and_words/strategies/figures_converter/decorators/pt-BR'
10
11
  require 'numbers_and_words/strategies/figures_converter/decorators/hu'
11
12
  require 'numbers_and_words/strategies/figures_converter/decorators/ua'
12
13
  require 'numbers_and_words/strategies/figures_converter/decorators/cs'
13
14
  require 'numbers_and_words/strategies/figures_converter/decorators/vi'
15
+ require 'numbers_and_words/strategies/figures_converter/decorators/nl'
14
16
 
15
17
  module NumbersAndWords
16
18
  module Strategies
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Strategies
5
+ module FiguresConverter
6
+ module Languages
7
+ class FrCh < Fr
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -18,14 +18,34 @@ module NumbersAndWords
18
18
  capacity_words.empty? ? [] : [capacity_words, megs].join
19
19
  end
20
20
 
21
+ def ones(*args)
22
+ super({ fractional_numeral: @options.options[:fractional_numeral] }.merge(args.first || {}))
23
+ end
24
+
25
+ def tens_with_ones(*args)
26
+ super({ fractional_numeral: @options.options[:fractional_numeral] }.merge(args.first || {}))
27
+ end
28
+
21
29
  def simple_number_to_words
22
- if @figures.only_ones && @figures.ones == 1
30
+ if @figures.only_ones && @figures.ones == 1 && !@options.options[:fractional_numeral]
23
31
  [@translations.t(:loose_one)]
24
32
  else
25
33
  super
26
34
  end
27
35
  end
28
36
 
37
+ def zero
38
+ return nil if maybe_remove_zero
39
+
40
+ super
41
+ end
42
+
43
+ private
44
+
45
+ def maybe_remove_zero
46
+ @options.remove_zero&.result
47
+ end
48
+
29
49
  def number_without_capacity_to_words
30
50
  return super unless apply_tens_of_hundreds?
31
51
 
@@ -36,8 +56,6 @@ module NumbersAndWords
36
56
  [([base, translate(:hundreds, 1)] + simple_number_to_words).join]
37
57
  end
38
58
 
39
- private
40
-
41
59
  def apply_tens_of_hundreds?
42
60
  @options.tens_of_hundreds.result &&
43
61
  (1..9).cover?(figures.number_in_capacity(FiguresArray::THOUSAND_CAPACITY)) &&
@@ -7,19 +7,19 @@ module NumbersAndWords
7
7
  class Vi < Base
8
8
  def print_words
9
9
  value = super
10
- remove_billion_noice(value)
10
+ remove_billion_noise(value)
11
11
  end
12
12
 
13
13
  def strings_logic
14
14
  if fractional?
15
15
  if fraction_number_zeros_leading.zero?
16
- @options.options[:integeral] = true
17
- integeral_string_logic
16
+ @options.options[:integral] = true
17
+ integral_string_logic
18
18
  else
19
19
  fractional_with_zero_leading_string_logic
20
20
  end
21
21
  else
22
- integeral_string_logic
22
+ integral_string_logic
23
23
  end
24
24
  end
25
25
 
@@ -28,7 +28,7 @@ module NumbersAndWords
28
28
  (@figures + leading_zeros).map(&:to_words)
29
29
  end
30
30
 
31
- def integeral_string_logic
31
+ def integral_string_logic
32
32
  if @figures.capacity_count
33
33
  number_without_capacity_to_words + complex_number_to_words
34
34
  elsif hundreds?
@@ -66,7 +66,7 @@ module NumbersAndWords
66
66
  end
67
67
 
68
68
  def fractional?
69
- !@options.options[:fractional].nil? && !@options.options[:integeral]
69
+ !@options.options[:fractional].nil? && !@options.options[:integral]
70
70
  end
71
71
 
72
72
  def fraction_length
@@ -79,7 +79,7 @@ module NumbersAndWords
79
79
  fraction_length - @figures.length
80
80
  end
81
81
 
82
- def remove_billion_noice(value)
82
+ def remove_billion_noise(value)
83
83
  parts = value.split(billion_unit).map(&:strip)
84
84
  if value.end_with?(billion_unit)
85
85
  parts.insert(-1, billion_unit).join(' ')
@@ -11,6 +11,7 @@ require 'numbers_and_words/strategies/figures_converter/languages/en-GB'
11
11
  require 'numbers_and_words/strategies/figures_converter/languages/es'
12
12
  require 'numbers_and_words/strategies/figures_converter/languages/et'
13
13
  require 'numbers_and_words/strategies/figures_converter/languages/fr'
14
+ require 'numbers_and_words/strategies/figures_converter/languages/fr-CH'
14
15
  require 'numbers_and_words/strategies/figures_converter/languages/hu'
15
16
  require 'numbers_and_words/strategies/figures_converter/languages/it'
16
17
  require 'numbers_and_words/strategies/figures_converter/languages/ka'
@@ -6,7 +6,7 @@ module NumbersAndWords
6
6
  I18N_NAMESPACE = :numbers
7
7
 
8
8
  def t(attribute, options = {})
9
- ::I18n.t attribute, **options.merge(scope: I18N_NAMESPACE)
9
+ ::I18n.t attribute, **options, scope: I18N_NAMESPACE
10
10
  end
11
11
  end
12
12
  end
@@ -4,6 +4,7 @@ module NumbersAndWords
4
4
  module Translations
5
5
  class De < Base
6
6
  include NumbersAndWords::Translations::Families::Base
7
+
7
8
  DEFAULT_POSTFIX = :combine
8
9
 
9
10
  def ones(number, options = {})
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NumbersAndWords
4
+ module Translations
5
+ class FrCh < Base
6
+ include NumbersAndWords::Translations::Families::Latin
7
+ include NumbersAndWords::Translations::Extensions::FractionSignificance
8
+
9
+ def tens(number, options = {})
10
+ super
11
+ end
12
+
13
+ def tens_with_ones(numbers, options = {})
14
+ separator = numbers.first == 1 ? " #{union} " : '-'
15
+ super(numbers, options.merge(separator:))
16
+ end
17
+
18
+ def hundreds(number, options = {})
19
+ count = options[:pluralize] ? number : 1
20
+ hundreds = t(:hundreds, count:)
21
+
22
+ return hundreds if number == 1
23
+
24
+ [t(:ones)[number], hundreds].join(' ')
25
+ end
26
+ end
27
+ end
28
+ end
@@ -4,6 +4,7 @@ module NumbersAndWords
4
4
  module Translations
5
5
  class Ka < Base
6
6
  include NumbersAndWords::Translations::Families::Latin
7
+
7
8
  TENS_VIGESIMAL_RANGES = [
8
9
  {
9
10
  range: Range.new(0, 4, true),
@@ -4,9 +4,19 @@ module NumbersAndWords
4
4
  module Translations
5
5
  class Nl < Base
6
6
  include NumbersAndWords::Translations::Families::Latin
7
+ include NumbersAndWords::Translations::Extensions::FractionSignificance
7
8
 
8
- def tens_with_ones(numbers, _options = {})
9
- [ones(numbers[0]), tens(numbers[1])].join(union(numbers[0]))
9
+ def ones(number, options = {})
10
+ # In fractional context, use "een" instead of "één" for number 1
11
+ if number == 1 && options[:fractional_numeral]
12
+ t(:ones)[1] # "een" is at index 1 in the ones array
13
+ else
14
+ super
15
+ end
16
+ end
17
+
18
+ def tens_with_ones(numbers, options = {})
19
+ [ones(numbers[0], options), tens(numbers[1])].join(union(numbers[0]))
10
20
  end
11
21
 
12
22
  def hundreds(number, _options = {})
@@ -5,6 +5,7 @@ module NumbersAndWords
5
5
  class Vi < Base
6
6
  include NumbersAndWords::Translations::Families::Latin
7
7
  include NumbersAndWords::Translations::Extensions::FractionSignificance
8
+
8
9
  def ones_of_tens(number, options = {})
9
10
  return t('units.tens.one') if number == 1
10
11
  return t('units.tens.five') if number == 5
@@ -11,6 +11,7 @@ require 'numbers_and_words/translations/en-GB'
11
11
  require 'numbers_and_words/translations/ua'
12
12
  require 'numbers_and_words/translations/tr'
13
13
  require 'numbers_and_words/translations/fr'
14
+ require 'numbers_and_words/translations/fr-CH'
14
15
  require 'numbers_and_words/translations/nl'
15
16
  require 'numbers_and_words/translations/it'
16
17
  require 'numbers_and_words/translations/hu'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NumbersAndWords
4
- VERSION = '1.0.1'
4
+ VERSION = '1.0.3'
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: numbers_and_words
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kirill Lazarev
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-03-07 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: i18n
@@ -95,6 +95,7 @@ files:
95
95
  - lib/numbers_and_words/i18n/locales/numbers.en.yml
96
96
  - lib/numbers_and_words/i18n/locales/numbers.es.yml
97
97
  - lib/numbers_and_words/i18n/locales/numbers.et.yml
98
+ - lib/numbers_and_words/i18n/locales/numbers.fr-CH.yml
98
99
  - lib/numbers_and_words/i18n/locales/numbers.fr.yml
99
100
  - lib/numbers_and_words/i18n/locales/numbers.hu.yml
100
101
  - lib/numbers_and_words/i18n/locales/numbers.hy.yml
@@ -127,8 +128,10 @@ files:
127
128
  - lib/numbers_and_words/strategies/array_joiner/languages/en.rb
128
129
  - lib/numbers_and_words/strategies/array_joiner/languages/es.rb
129
130
  - lib/numbers_and_words/strategies/array_joiner/languages/families/base.rb
131
+ - lib/numbers_and_words/strategies/array_joiner/languages/fr-CH.rb
130
132
  - lib/numbers_and_words/strategies/array_joiner/languages/fr.rb
131
133
  - lib/numbers_and_words/strategies/array_joiner/languages/hu.rb
134
+ - lib/numbers_and_words/strategies/array_joiner/languages/nl.rb
132
135
  - lib/numbers_and_words/strategies/array_joiner/languages/pt-BR.rb
133
136
  - lib/numbers_and_words/strategies/array_joiner/languages/ru.rb
134
137
  - lib/numbers_and_words/strategies/array_joiner/languages/ua.rb
@@ -152,6 +155,10 @@ files:
152
155
  - lib/numbers_and_words/strategies/figures_converter/decorators/es/base.rb
153
156
  - lib/numbers_and_words/strategies/figures_converter/decorators/es/fractional.rb
154
157
  - lib/numbers_and_words/strategies/figures_converter/decorators/es/integral.rb
158
+ - lib/numbers_and_words/strategies/figures_converter/decorators/fr-CH.rb
159
+ - lib/numbers_and_words/strategies/figures_converter/decorators/fr-CH/base.rb
160
+ - lib/numbers_and_words/strategies/figures_converter/decorators/fr-CH/fractional.rb
161
+ - lib/numbers_and_words/strategies/figures_converter/decorators/fr-CH/integral.rb
155
162
  - lib/numbers_and_words/strategies/figures_converter/decorators/fr.rb
156
163
  - lib/numbers_and_words/strategies/figures_converter/decorators/fr/base.rb
157
164
  - lib/numbers_and_words/strategies/figures_converter/decorators/fr/fractional.rb
@@ -160,6 +167,10 @@ files:
160
167
  - lib/numbers_and_words/strategies/figures_converter/decorators/hu/base.rb
161
168
  - lib/numbers_and_words/strategies/figures_converter/decorators/hu/fractional.rb
162
169
  - lib/numbers_and_words/strategies/figures_converter/decorators/hu/integral.rb
170
+ - lib/numbers_and_words/strategies/figures_converter/decorators/nl.rb
171
+ - lib/numbers_and_words/strategies/figures_converter/decorators/nl/base.rb
172
+ - lib/numbers_and_words/strategies/figures_converter/decorators/nl/fractional.rb
173
+ - lib/numbers_and_words/strategies/figures_converter/decorators/nl/integral.rb
163
174
  - lib/numbers_and_words/strategies/figures_converter/decorators/pt-BR.rb
164
175
  - lib/numbers_and_words/strategies/figures_converter/decorators/pt-BR/base.rb
165
176
  - lib/numbers_and_words/strategies/figures_converter/decorators/pt-BR/fractional.rb
@@ -188,6 +199,7 @@ files:
188
199
  - lib/numbers_and_words/strategies/figures_converter/languages/families/base.rb
189
200
  - lib/numbers_and_words/strategies/figures_converter/languages/families/cyrillic.rb
190
201
  - lib/numbers_and_words/strategies/figures_converter/languages/families/helpers.rb
202
+ - lib/numbers_and_words/strategies/figures_converter/languages/fr-CH.rb
191
203
  - lib/numbers_and_words/strategies/figures_converter/languages/fr.rb
192
204
  - lib/numbers_and_words/strategies/figures_converter/languages/hu.rb
193
205
  - lib/numbers_and_words/strategies/figures_converter/languages/hy.rb
@@ -256,6 +268,7 @@ files:
256
268
  - lib/numbers_and_words/translations/families/base.rb
257
269
  - lib/numbers_and_words/translations/families/cyrillic.rb
258
270
  - lib/numbers_and_words/translations/families/latin.rb
271
+ - lib/numbers_and_words/translations/fr-CH.rb
259
272
  - lib/numbers_and_words/translations/fr.rb
260
273
  - lib/numbers_and_words/translations/hu.rb
261
274
  - lib/numbers_and_words/translations/hy.rb
@@ -294,7 +307,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
294
307
  - !ruby/object:Gem::Version
295
308
  version: '0'
296
309
  requirements: []
297
- rubygems_version: 3.6.5
310
+ rubygems_version: 4.0.3
298
311
  specification_version: 4
299
312
  summary: Spell out numbers in several languages
300
313
  test_files: []