num2words 0.1.0 → 0.1.2

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 (113) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/Gemfile +1 -0
  4. data/README.md +104 -81
  5. data/bin/console +1 -1
  6. data/config/locales/ar.yml +36 -0
  7. data/config/locales/be.yml +31 -0
  8. data/config/locales/bg.yml +31 -0
  9. data/config/locales/bn.yml +26 -0
  10. data/config/locales/cs.yml +31 -0
  11. data/config/locales/da.yml +31 -0
  12. data/config/locales/de.yml +31 -0
  13. data/config/locales/el.yml +36 -0
  14. data/config/locales/en.yml +26 -0
  15. data/config/locales/es.yml +31 -0
  16. data/config/locales/et.yml +26 -0
  17. data/config/locales/fa.yml +31 -0
  18. data/config/locales/fi.yml +26 -0
  19. data/config/locales/fr.yml +31 -0
  20. data/config/locales/gu.yml +26 -0
  21. data/config/locales/he.yml +36 -0
  22. data/config/locales/hi.yml +31 -0
  23. data/config/locales/hr.yml +31 -0
  24. data/config/locales/hu.yml +31 -0
  25. data/config/locales/id.yml +31 -0
  26. data/config/locales/it.yml +31 -0
  27. data/config/locales/ja.yml +31 -0
  28. data/config/locales/kn.yml +26 -0
  29. data/config/locales/ko.yml +31 -0
  30. data/config/locales/kz.yml +36 -0
  31. data/config/locales/lt.yml +26 -0
  32. data/config/locales/lv.yml +26 -0
  33. data/config/locales/ml.yml +26 -0
  34. data/config/locales/mr.yml +26 -0
  35. data/config/locales/ms.yml +26 -0
  36. data/config/locales/nb.yml +36 -0
  37. data/config/locales/nl.yml +31 -0
  38. data/config/locales/pa.yml +26 -0
  39. data/config/locales/pl.yml +31 -0
  40. data/config/locales/pt.yml +31 -0
  41. data/config/locales/ro.yml +31 -0
  42. data/config/locales/ru.yml +21 -0
  43. data/config/locales/sk.yml +26 -0
  44. data/config/locales/sl.yml +26 -0
  45. data/config/locales/sr.yml +31 -0
  46. data/config/locales/sv.yml +33 -0
  47. data/config/locales/sw.yml +26 -0
  48. data/config/locales/ta.yml +26 -0
  49. data/config/locales/te.yml +26 -0
  50. data/config/locales/th.yml +31 -0
  51. data/config/locales/tr.yml +31 -0
  52. data/config/locales/uk.yml +31 -0
  53. data/config/locales/ur.yml +26 -0
  54. data/config/locales/vi.yml +31 -0
  55. data/config/locales/zh.yml +21 -0
  56. data/lib/num2words/converter.rb +47 -64
  57. data/lib/num2words/core_ext.rb +6 -6
  58. data/lib/num2words/i18n.rb +30 -0
  59. data/lib/num2words/locales/ar.rb +19 -0
  60. data/lib/num2words/locales/be.rb +19 -0
  61. data/lib/num2words/locales/bg.rb +19 -0
  62. data/lib/num2words/locales/bn.rb +19 -0
  63. data/lib/num2words/locales/cs.rb +19 -0
  64. data/lib/num2words/locales/da.rb +19 -0
  65. data/lib/num2words/locales/de.rb +19 -0
  66. data/lib/num2words/locales/el.rb +19 -0
  67. data/lib/num2words/locales/en.rb +19 -0
  68. data/lib/num2words/locales/es.rb +19 -0
  69. data/lib/num2words/locales/et.rb +19 -0
  70. data/lib/num2words/locales/fa.rb +19 -0
  71. data/lib/num2words/locales/fi.rb +19 -0
  72. data/lib/num2words/locales/fr.rb +19 -0
  73. data/lib/num2words/locales/gu.rb +19 -0
  74. data/lib/num2words/locales/he.rb +19 -0
  75. data/lib/num2words/locales/hi.rb +19 -0
  76. data/lib/num2words/locales/hr.rb +19 -0
  77. data/lib/num2words/locales/hu.rb +19 -0
  78. data/lib/num2words/locales/id.rb +19 -0
  79. data/lib/num2words/locales/it.rb +19 -0
  80. data/lib/num2words/locales/ja.rb +19 -0
  81. data/lib/num2words/locales/kn.rb +19 -0
  82. data/lib/num2words/locales/ko.rb +19 -0
  83. data/lib/num2words/locales/kz.rb +19 -0
  84. data/lib/num2words/locales/lt.rb +19 -0
  85. data/lib/num2words/locales/lv.rb +19 -0
  86. data/lib/num2words/locales/ml.rb +19 -0
  87. data/lib/num2words/locales/mr.rb +19 -0
  88. data/lib/num2words/locales/ms.rb +19 -0
  89. data/lib/num2words/locales/nl.rb +19 -0
  90. data/lib/num2words/locales/no.rb +19 -0
  91. data/lib/num2words/locales/pa.rb +19 -0
  92. data/lib/num2words/locales/pl.rb +19 -0
  93. data/lib/num2words/locales/pt.rb +19 -0
  94. data/lib/num2words/locales/ro.rb +19 -0
  95. data/lib/num2words/locales/ru.rb +19 -0
  96. data/lib/num2words/locales/sk.rb +19 -0
  97. data/lib/num2words/locales/sl.rb +19 -0
  98. data/lib/num2words/locales/sr.rb +19 -0
  99. data/lib/num2words/locales/sv.rb +19 -0
  100. data/lib/num2words/locales/sw.rb +19 -0
  101. data/lib/num2words/locales/ta.rb +19 -0
  102. data/lib/num2words/locales/te.rb +19 -0
  103. data/lib/num2words/locales/th.rb +19 -0
  104. data/lib/num2words/locales/tr.rb +19 -0
  105. data/lib/num2words/locales/uk.rb +19 -0
  106. data/lib/num2words/locales/ur.rb +19 -0
  107. data/lib/num2words/locales/vi.rb +19 -0
  108. data/lib/num2words/locales/zh.rb +19 -0
  109. data/lib/num2words/locales.rb +33 -0
  110. data/lib/num2words/version.rb +1 -1
  111. data/lib/num2words.rb +6 -4
  112. data/num2words.gemspec +2 -0
  113. metadata +119 -3
@@ -2,68 +2,16 @@
2
2
 
3
3
  module Num2words
4
4
  class Converter
5
- ONES_MASC = %w[ноль один два три четыре пять шесть семь восемь девять].freeze
6
- ONES_FEM = %w[ноль одна две три четыре пять шесть семь восемь девять].freeze
7
-
8
- TEENS = %w[десять одиннадцать двенадцать тринадцать четырнадцать пятнадцать
9
- шестнадцать семнадцать восемнадцать девятнадцать].freeze
10
-
11
- TENS = [nil, nil, "двадцать", "тридцать", "сорок", "пятьдесят",
12
- "шестьдесят", "семьдесят", "восемьдесят", "девяносто"].freeze
13
-
14
- HUNDREDS = [nil, "сто", "двести", "триста", "четыреста", "пятьсот",
15
- "шестьсот", "семьсот", "восемьсот", "девятьсот"].freeze
16
-
17
- # формы: [one, few, many]
18
- SCALES = [
19
- ["", "", ""], # 10^0 (единицы)
20
- %w[тысяча тысячи тысяч], # 10^3
21
- %w[миллион миллиона миллионов], # 10^6
22
- %w[миллиард миллиарда миллиардов], # 10^9
23
- %w[триллион триллиона триллионов] # 10^12
24
- ].freeze
25
-
26
- RUB = %w[рубль рубля рублей].freeze
27
- KOP = %w[копейка копейки копеек].freeze
28
-
29
5
  class << self
30
- def pluralize(n, one, few, many)
31
- return many if (11..14).include?(n % 100)
32
- case n % 10
33
- when 1 then one
34
- when 2..4 then few
35
- else many
36
- end
37
- end
38
-
39
- # n — 0..999, scale_idx — индекс разряда (0 — единицы, 1 — тысячи, ...)
40
- # feminine: true — использовать женский род для единиц (нужно для тысяч/копеек)
41
- def triple_to_words(n, scale_idx, feminine: false)
42
- return [] if n.zero?
43
-
44
- words = []
45
- words << HUNDREDS[n / 100] if n >= 100
46
-
47
- rest = n % 100
48
- if rest.between?(10, 19)
49
- words << TEENS[rest - 10]
50
- else
51
- words << TENS[rest / 10] if rest >= 20
52
- ones = rest % 10
53
- if ones.positive?
54
- words << (feminine ? ONES_FEM[ones] : ONES_MASC[ones])
55
- end
56
- end
6
+ # number целое число (0..10^12-1)
7
+ def to_words(number, *args, **opts)
8
+ locale = args.first.is_a?(Symbol) ? args.first : opts[:locale] || :ru
9
+ feminine = opts.delete(:feminine) || false
57
10
 
58
- # добавляем наименование разряда (кроме единиц)
59
- words << pluralize(n, *SCALES[scale_idx]) unless scale_idx.zero?
60
- words.compact
61
- end
11
+ locale_data = Locales[locale]
62
12
 
63
- # number — целое число (0..10^12-1)
64
- def to_words(number, feminine: false)
65
13
  number = Integer(number)
66
- return (feminine ? ONES_FEM[0] : ONES_MASC[0]) if number.zero?
14
+ return (feminine ? locale_data::ONES_FEM[0] : locale_data::ONES_MASC[0]) if number.zero?
67
15
 
68
16
  groups = number.to_s
69
17
  .chars.reverse.each_slice(3).map(&:reverse)
@@ -73,27 +21,62 @@ module Num2words
73
21
  groups.each_with_index do |grp, idx|
74
22
  scale_idx = groups.size - idx - 1
75
23
  fem = (scale_idx == 1) || feminine # тысячи — жен. род
76
- words.concat triple_to_words(grp, scale_idx, feminine: fem)
24
+ words.concat triple_to_words(grp, scale_idx, locale_data, feminine: fem)
77
25
  end
78
26
  words.join(" ")
79
27
  end
80
28
 
81
29
  # amount может быть String, Integer, Float, BigDecimal
82
- def to_currency(amount)
30
+ def to_currency(amount, *args, **opts)
31
+ locale = args.first.is_a?(Symbol) ? args.first : opts[:locale] || :ru
32
+ locale_data = Locales[locale]
33
+
83
34
  str = amount.to_s
84
35
  rub_str, kop_str = str.split(".")
85
36
  rub = Integer(rub_str)
86
37
  # всегда 2 знака для копеек; обрезаем лишние, дополняем недостающие
87
38
  kop = (kop_str || "0")[0, 2].ljust(2, "0").to_i
88
39
 
89
- rub_words = to_words(rub)
90
- rub_name = pluralize(rub, *RUB)
40
+ rub_words = to_words(rub, locale: locale)
41
+ rub_name = pluralize(rub, *locale_data::RUB)
91
42
 
92
- kop_words = to_words(kop, feminine: true)
93
- kop_name = pluralize(kop, *KOP)
43
+ kop_words = to_words(kop, locale: locale, feminine: true)
44
+ kop_name = pluralize(kop, *locale_data::KOP)
94
45
 
95
46
  "#{rub_words} #{rub_name} #{kop_words} #{kop_name}"
96
47
  end
48
+
49
+ private
50
+
51
+ def pluralize(n, one, few, many)
52
+ return many if (11..14).include?(n % 100)
53
+ case n % 10
54
+ when 1 then one
55
+ when 2..4 then few
56
+ else many
57
+ end
58
+ end
59
+
60
+ # n — 0..999, scale_idx — индекс разряда (0 — единицы, 1 — тысячи, ...)
61
+ # feminine: true — использовать женский род для единиц (нужно для тысяч/копеек)
62
+ def triple_to_words(n, scale_idx, local_data, feminine: false)
63
+ return [] if n.zero?
64
+ words = []
65
+
66
+ words << local_data::HUNDREDS[n / 100] if n >= 100
67
+ rest = n % 100
68
+
69
+ if rest.between?(10, 19)
70
+ words << local_data::TEENS[rest - 10]
71
+ else
72
+ words << local_data::TENS[rest / 10] if rest >= 20
73
+ ones = rest % 10
74
+ words << (feminine ? local_data::ONES_FEM[ones] : local_data::ONES_MASC[ones]) if ones.positive?
75
+ end
76
+
77
+ words << pluralize(n, *local_data::SCALES[scale_idx]) unless scale_idx.zero?
78
+ words.compact
79
+ end
97
80
  end
98
81
  end
99
82
  end
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Integer
4
- def to_words(feminine: false)
5
- Num2words::Converter.to_words(self, feminine: feminine)
4
+ def to_words(*args, **opts)
5
+ Num2words::Converter.to_words(self, *args, **opts)
6
6
  end
7
7
 
8
- def to_currency
9
- Num2words::Converter.to_currency(self)
8
+ def to_currency(*args, **opts)
9
+ Num2words::Converter.to_currency(self, *args, **opts)
10
10
  end
11
11
  end
12
12
 
13
13
  class Float
14
- def to_currency
15
- Num2words::Converter.to_currency(self)
14
+ def to_currency(*args, **opts)
15
+ Num2words::Converter.to_currency(self, *args, **opts)
16
16
  end
17
17
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "i18n"
4
+
5
+ module Num2words
6
+ module I18nSetup
7
+ def self.load!
8
+ locales_path = File.expand_path("../../config/locales/*.yml", __dir__)
9
+ files = Dir[locales_path]
10
+
11
+ if files.empty?
12
+ raise "Num2words: не найдены файлы локалей в #{locales_path}"
13
+ end
14
+
15
+ I18n.load_path += files
16
+ I18n.available_locales = files.map { |file| File.basename(file, ".*") }.map(&:to_sym)
17
+ I18n.default_locale = :ru
18
+ I18n.enforce_available_locales = true
19
+
20
+ # Проверяем, что ключи реально доступны
21
+ I18n.available_locales.each do |loc|
22
+ unless I18n.exists?("num2words.ones_masc", locale: loc)
23
+ raise "Num2words: отсутствуют ключи для локали #{loc} в locales/#{loc}.yml"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ Num2words::I18nSetup.load!
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module AR
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :ar)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :ar)
8
+ TEENS = I18n.t("num2words.teens", locale: :ar)
9
+ TENS = I18n.t("num2words.tens", locale: :ar)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :ar)
11
+ SCALES = I18n.t("num2words.scales", locale: :ar)
12
+
13
+ RUB = I18n.t("num2words.currencies.SAR.name", locale: :ar)
14
+ KOP = I18n.t("num2words.currencies.SAR.fractional.name", locale: :ar)
15
+ end
16
+
17
+ register :ar, AR
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module BE
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :be)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :be)
8
+ TEENS = I18n.t("num2words.teens", locale: :be)
9
+ TENS = I18n.t("num2words.tens", locale: :be)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :be)
11
+ SCALES = I18n.t("num2words.scales", locale: :be)
12
+
13
+ RUB = I18n.t("num2words.currencies.BYN.name", locale: :be)
14
+ KOP = I18n.t("num2words.currencies.BYN.fractional.name", locale: :be)
15
+ end
16
+
17
+ register :be, BE
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module BG
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :bg)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :bg)
8
+ TEENS = I18n.t("num2words.teens", locale: :bg)
9
+ TENS = I18n.t("num2words.tens", locale: :bg)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :bg)
11
+ SCALES = I18n.t("num2words.scales", locale: :bg)
12
+
13
+ RUB = I18n.t("num2words.currencies.BGN.name", locale: :bg)
14
+ KOP = I18n.t("num2words.currencies.BGN.fractional.name", locale: :bg)
15
+ end
16
+
17
+ register :bg, BG
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module BN
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :bn)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :bn)
8
+ TEENS = I18n.t("num2words.teens", locale: :bn)
9
+ TENS = I18n.t("num2words.tens", locale: :bn)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :bn)
11
+ SCALES = I18n.t("num2words.scales", locale: :bn)
12
+
13
+ RUB = I18n.t("num2words.currencies.BDT.name", locale: :bn)
14
+ KOP = I18n.t("num2words.currencies.BDT.fractional.name", locale: :bn)
15
+ end
16
+
17
+ register :bn, BN
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module CS
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :cs)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :cs)
8
+ TEENS = I18n.t("num2words.teens", locale: :cs)
9
+ TENS = I18n.t("num2words.tens", locale: :cs)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :cs)
11
+ SCALES = I18n.t("num2words.scales", locale: :cs)
12
+
13
+ RUB = I18n.t("num2words.currencies.CZK.name", locale: :cs)
14
+ KOP = I18n.t("num2words.currencies.CZK.fractional.name", locale: :cs)
15
+ end
16
+
17
+ register :cs, CS
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module DA
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :da)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :da)
8
+ TEENS = I18n.t("num2words.teens", locale: :da)
9
+ TENS = I18n.t("num2words.tens", locale: :da)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :da)
11
+ SCALES = I18n.t("num2words.scales", locale: :da)
12
+
13
+ RUB = I18n.t("num2words.currencies.DKK.name", locale: :da)
14
+ KOP = I18n.t("num2words.currencies.DKK.fractional.name", locale: :da)
15
+ end
16
+
17
+ register :da, DA
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module DE
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :de)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :de)
8
+ TEENS = I18n.t("num2words.teens", locale: :de)
9
+ TENS = I18n.t("num2words.tens", locale: :de)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :de)
11
+ SCALES = I18n.t("num2words.scales", locale: :de)
12
+
13
+ RUB = I18n.t("num2words.currencies.EUR.name", locale: :de)
14
+ KOP = I18n.t("num2words.currencies.EUR.fractional.name", locale: :de)
15
+ end
16
+
17
+ register :de, DE
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module EL
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :el)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :el)
8
+ TEENS = I18n.t("num2words.teens", locale: :el)
9
+ TENS = I18n.t("num2words.tens", locale: :el)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :el)
11
+ SCALES = I18n.t("num2words.scales", locale: :el)
12
+
13
+ RUB = I18n.t("num2words.currencies.EUR.name", locale: :el)
14
+ KOP = I18n.t("num2words.currencies.EUR.fractional.name", locale: :el)
15
+ end
16
+
17
+ register :el, EL
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module EN
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :en)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :en)
8
+ TEENS = I18n.t("num2words.teens", locale: :en)
9
+ TENS = I18n.t("num2words.tens", locale: :en)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :en)
11
+ SCALES = I18n.t("num2words.scales", locale: :en)
12
+
13
+ RUB = I18n.t("num2words.currencies.USD.name", locale: :en)
14
+ KOP = I18n.t("num2words.currencies.USD.fractional.name", locale: :en)
15
+ end
16
+
17
+ register :en, EN
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module ES
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :es)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :es)
8
+ TEENS = I18n.t("num2words.teens", locale: :es)
9
+ TENS = I18n.t("num2words.tens", locale: :es)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :es)
11
+ SCALES = I18n.t("num2words.scales", locale: :es)
12
+
13
+ RUB = I18n.t("num2words.currencies.EUR.name", locale: :es)
14
+ KOP = I18n.t("num2words.currencies.EUR.fractional.name", locale: :es)
15
+ end
16
+
17
+ register :es, ES
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module ET
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :et)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :et)
8
+ TEENS = I18n.t("num2words.teens", locale: :et)
9
+ TENS = I18n.t("num2words.tens", locale: :et)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :et)
11
+ SCALES = I18n.t("num2words.scales", locale: :et)
12
+
13
+ RUB = I18n.t("num2words.currencies.EUR.name", locale: :et)
14
+ KOP = I18n.t("num2words.currencies.EUR.fractional.name", locale: :et)
15
+ end
16
+
17
+ register :et, ET
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module FA
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :fa)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :fa)
8
+ TEENS = I18n.t("num2words.teens", locale: :fa)
9
+ TENS = I18n.t("num2words.tens", locale: :fa)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :fa)
11
+ SCALES = I18n.t("num2words.scales", locale: :fa)
12
+
13
+ RUB = I18n.t("num2words.currencies.IRR.name", locale: :fa)
14
+ KOP = I18n.t("num2words.currencies.IRR.fractional.name", locale: :fa)
15
+ end
16
+
17
+ register :fa, FA
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module FI
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :fi)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :fi)
8
+ TEENS = I18n.t("num2words.teens", locale: :fi)
9
+ TENS = I18n.t("num2words.tens", locale: :fi)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :fi)
11
+ SCALES = I18n.t("num2words.scales", locale: :fi)
12
+
13
+ RUB = I18n.t("num2words.currencies.EUR.name", locale: :fi)
14
+ KOP = I18n.t("num2words.currencies.EUR.fractional.name", locale: :fi)
15
+ end
16
+
17
+ register :fi, FI
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module FR
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :fr)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :fr)
8
+ TEENS = I18n.t("num2words.teens", locale: :fr)
9
+ TENS = I18n.t("num2words.tens", locale: :fr)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :fr)
11
+ SCALES = I18n.t("num2words.scales", locale: :fr)
12
+
13
+ RUB = I18n.t("num2words.currencies.EUR.name", locale: :fr)
14
+ KOP = I18n.t("num2words.currencies.EUR.fractional.name", locale: :fr)
15
+ end
16
+
17
+ register :fr, FR
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module GU
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :gu)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :gu)
8
+ TEENS = I18n.t("num2words.teens", locale: :gu)
9
+ TENS = I18n.t("num2words.tens", locale: :gu)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :gu)
11
+ SCALES = I18n.t("num2words.scales", locale: :gu)
12
+
13
+ RUB = I18n.t("num2words.currencies.INR.name", locale: :gu)
14
+ KOP = I18n.t("num2words.currencies.INR.fractional.name", locale: :gu)
15
+ end
16
+
17
+ register :gu, GU
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module HE
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :he)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :he)
8
+ TEENS = I18n.t("num2words.teens", locale: :he)
9
+ TENS = I18n.t("num2words.tens", locale: :he)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :he)
11
+ SCALES = I18n.t("num2words.scales", locale: :he)
12
+
13
+ RUB = I18n.t("num2words.currencies.ILS.name", locale: :he)
14
+ KOP = I18n.t("num2words.currencies.ILS.fractional.name", locale: :he)
15
+ end
16
+
17
+ register :he, HE
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module HI
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :hi)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :hi)
8
+ TEENS = I18n.t("num2words.teens", locale: :hi)
9
+ TENS = I18n.t("num2words.tens", locale: :hi)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :hi)
11
+ SCALES = I18n.t("num2words.scales", locale: :hi)
12
+
13
+ RUB = I18n.t("num2words.currencies.INR.name", locale: :hi)
14
+ KOP = I18n.t("num2words.currencies.INR.fractional.name", locale: :hi)
15
+ end
16
+
17
+ register :hi, HI
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module HR
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :hr)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :hr)
8
+ TEENS = I18n.t("num2words.teens", locale: :hr)
9
+ TENS = I18n.t("num2words.tens", locale: :hr)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :hr)
11
+ SCALES = I18n.t("num2words.scales", locale: :hr)
12
+
13
+ RUB = I18n.t("num2words.currencies.EUR.name", locale: :hr)
14
+ KOP = I18n.t("num2words.currencies.EUR.fractional.name", locale: :hr)
15
+ end
16
+
17
+ register :hr, HR
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module HU
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :hu)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :hu)
8
+ TEENS = I18n.t("num2words.teens", locale: :hu)
9
+ TENS = I18n.t("num2words.tens", locale: :hu)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :hu)
11
+ SCALES = I18n.t("num2words.scales", locale: :hu)
12
+
13
+ RUB = I18n.t("num2words.currencies.HUF.name", locale: :hu)
14
+ KOP = I18n.t("num2words.currencies.HUF.fractional.name", locale: :hu)
15
+ end
16
+
17
+ register :hu, HU
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module ID
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :id)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :id)
8
+ TEENS = I18n.t("num2words.teens", locale: :id)
9
+ TENS = I18n.t("num2words.tens", locale: :id)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :id)
11
+ SCALES = I18n.t("num2words.scales", locale: :id)
12
+
13
+ RUB = I18n.t("num2words.currencies.IDR.name", locale: :id)
14
+ KOP = I18n.t("num2words.currencies.IDR.fractional.name", locale: :id)
15
+ end
16
+
17
+ register :id, ID
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module IT
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :it)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :it)
8
+ TEENS = I18n.t("num2words.teens", locale: :it)
9
+ TENS = I18n.t("num2words.tens", locale: :it)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :it)
11
+ SCALES = I18n.t("num2words.scales", locale: :it)
12
+
13
+ RUB = I18n.t("num2words.currencies.EUR.name", locale: :it)
14
+ KOP = I18n.t("num2words.currencies.EUR.fractional.name", locale: :it)
15
+ end
16
+
17
+ register :it, IT
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module JA
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :ja)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :ja)
8
+ TEENS = I18n.t("num2words.teens", locale: :ja)
9
+ TENS = I18n.t("num2words.tens", locale: :ja)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :ja)
11
+ SCALES = I18n.t("num2words.scales", locale: :ja)
12
+
13
+ RUB = I18n.t("num2words.currencies.JPY.name", locale: :ja)
14
+ KOP = I18n.t("num2words.currencies.JPY.fractional.name", locale: :ja)
15
+ end
16
+
17
+ register :ja, JA
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Num2words
4
+ module Locales
5
+ module KN
6
+ ONES_MASC = I18n.t("num2words.ones_masc", locale: :kn)
7
+ ONES_FEM = I18n.t("num2words.ones_fem", locale: :kn)
8
+ TEENS = I18n.t("num2words.teens", locale: :kn)
9
+ TENS = I18n.t("num2words.tens", locale: :kn)
10
+ HUNDREDS = I18n.t("num2words.hundreds", locale: :kn)
11
+ SCALES = I18n.t("num2words.scales", locale: :kn)
12
+
13
+ RUB = I18n.t("num2words.currencies.INR.name", locale: :kn)
14
+ KOP = I18n.t("num2words.currencies.INR.fractional.name", locale: :kn)
15
+ end
16
+
17
+ register :kn, KN
18
+ end
19
+ end