num2words 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/CHANGELOG.md +71 -0
- data/Gemfile +1 -0
- data/README.md +105 -82
- data/bin/console +1 -1
- data/config/locales/ar.yml +36 -0
- data/config/locales/be.yml +31 -0
- data/config/locales/bg.yml +31 -0
- data/config/locales/bn.yml +26 -0
- data/config/locales/cs.yml +31 -0
- data/config/locales/da.yml +31 -0
- data/config/locales/de.yml +31 -0
- data/config/locales/el.yml +36 -0
- data/config/locales/en.yml +41 -0
- data/config/locales/es.yml +31 -0
- data/config/locales/et.yml +26 -0
- data/config/locales/fa.yml +31 -0
- data/config/locales/fi.yml +26 -0
- data/config/locales/fr.yml +31 -0
- data/config/locales/gu.yml +26 -0
- data/config/locales/he.yml +36 -0
- data/config/locales/hi.yml +31 -0
- data/config/locales/hr.yml +31 -0
- data/config/locales/hu.yml +31 -0
- data/config/locales/id.yml +31 -0
- data/config/locales/it.yml +31 -0
- data/config/locales/ja.yml +31 -0
- data/config/locales/kn.yml +26 -0
- data/config/locales/ko.yml +31 -0
- data/config/locales/kz.yml +36 -0
- data/config/locales/lt.yml +26 -0
- data/config/locales/lv.yml +26 -0
- data/config/locales/ml.yml +26 -0
- data/config/locales/mr.yml +26 -0
- data/config/locales/ms.yml +26 -0
- data/config/locales/nb.yml +36 -0
- data/config/locales/nl.yml +31 -0
- data/config/locales/pa.yml +26 -0
- data/config/locales/pl.yml +31 -0
- data/config/locales/pt.yml +31 -0
- data/config/locales/ro.yml +31 -0
- data/config/locales/ru.yml +36 -0
- data/config/locales/sk.yml +26 -0
- data/config/locales/sl.yml +26 -0
- data/config/locales/sr.yml +31 -0
- data/config/locales/sv.yml +33 -0
- data/config/locales/sw.yml +26 -0
- data/config/locales/ta.yml +26 -0
- data/config/locales/te.yml +26 -0
- data/config/locales/th.yml +31 -0
- data/config/locales/tr.yml +31 -0
- data/config/locales/uk.yml +31 -0
- data/config/locales/ur.yml +26 -0
- data/config/locales/vi.yml +31 -0
- data/config/locales/zh.yml +21 -0
- data/lib/num2words/converter.rb +97 -59
- data/lib/num2words/core_ext.rb +10 -6
- data/lib/num2words/i18n.rb +30 -0
- data/lib/num2words/locales/ar.rb +19 -0
- data/lib/num2words/locales/be.rb +19 -0
- data/lib/num2words/locales/bg.rb +19 -0
- data/lib/num2words/locales/bn.rb +19 -0
- data/lib/num2words/locales/cs.rb +19 -0
- data/lib/num2words/locales/da.rb +19 -0
- data/lib/num2words/locales/de.rb +19 -0
- data/lib/num2words/locales/el.rb +19 -0
- data/lib/num2words/locales/en.rb +22 -0
- data/lib/num2words/locales/es.rb +19 -0
- data/lib/num2words/locales/et.rb +19 -0
- data/lib/num2words/locales/fa.rb +19 -0
- data/lib/num2words/locales/fi.rb +19 -0
- data/lib/num2words/locales/fr.rb +19 -0
- data/lib/num2words/locales/gu.rb +19 -0
- data/lib/num2words/locales/he.rb +19 -0
- data/lib/num2words/locales/hi.rb +19 -0
- data/lib/num2words/locales/hr.rb +19 -0
- data/lib/num2words/locales/hu.rb +19 -0
- data/lib/num2words/locales/id.rb +19 -0
- data/lib/num2words/locales/it.rb +19 -0
- data/lib/num2words/locales/ja.rb +19 -0
- data/lib/num2words/locales/kn.rb +19 -0
- data/lib/num2words/locales/ko.rb +19 -0
- data/lib/num2words/locales/kz.rb +19 -0
- data/lib/num2words/locales/lt.rb +19 -0
- data/lib/num2words/locales/lv.rb +19 -0
- data/lib/num2words/locales/ml.rb +19 -0
- data/lib/num2words/locales/mr.rb +19 -0
- data/lib/num2words/locales/ms.rb +19 -0
- data/lib/num2words/locales/nl.rb +19 -0
- data/lib/num2words/locales/no.rb +19 -0
- data/lib/num2words/locales/pa.rb +19 -0
- data/lib/num2words/locales/pl.rb +19 -0
- data/lib/num2words/locales/pt.rb +19 -0
- data/lib/num2words/locales/ro.rb +19 -0
- data/lib/num2words/locales/ru.rb +22 -0
- data/lib/num2words/locales/sk.rb +19 -0
- data/lib/num2words/locales/sl.rb +19 -0
- data/lib/num2words/locales/sr.rb +19 -0
- data/lib/num2words/locales/sv.rb +19 -0
- data/lib/num2words/locales/sw.rb +19 -0
- data/lib/num2words/locales/ta.rb +19 -0
- data/lib/num2words/locales/te.rb +19 -0
- data/lib/num2words/locales/th.rb +19 -0
- data/lib/num2words/locales/tr.rb +19 -0
- data/lib/num2words/locales/uk.rb +19 -0
- data/lib/num2words/locales/ur.rb +19 -0
- data/lib/num2words/locales/vi.rb +19 -0
- data/lib/num2words/locales/zh.rb +19 -0
- data/lib/num2words/locales.rb +33 -0
- data/lib/num2words/version.rb +1 -1
- data/lib/num2words.rb +6 -4
- data/num2words.gemspec +2 -0
- metadata +120 -3
@@ -0,0 +1,26 @@
|
|
1
|
+
ur:
|
2
|
+
num2words:
|
3
|
+
ones_masc: ["صفر", "ایک", "دو", "تین", "چار", "پانچ", "چھ", "سات", "آٹھ", "نو"]
|
4
|
+
ones_fem: ["صفر", "ایک", "دو", "تین", "چار", "پانچ", "چھ", "سات", "آٹھ", "نو"]
|
5
|
+
teens: ["دس", "گیارہ", "بارہ", "تیرہ", "چودہ", "پندرہ", "سولہ", "سترہ", "اٹھارہ", "انیس"]
|
6
|
+
tens: ["", "", "بییس", "تیس", "چالیس", "پچاس", "ساٹھ", "ستر", "اسی", "نوے"]
|
7
|
+
hundreds: ["", "سو", "دو سو", "تین سو", "چار سو", "پانچ سو", "چھ سو", "سات سو", "آٹھ سو", "نو سو"]
|
8
|
+
|
9
|
+
scales:
|
10
|
+
- ["", "", ""]
|
11
|
+
- ["ہزار", "ہزار", "ہزار"]
|
12
|
+
- ["لاکھ", "لاکھ", "لاکھ"]
|
13
|
+
- ["کروڑ", "کروڑ", "کروڑ"]
|
14
|
+
- ["ٹریلین", "ٹریلین", "ٹریلین"]
|
15
|
+
|
16
|
+
currencies:
|
17
|
+
PKR:
|
18
|
+
name: ["روپیہ", "روپے", "روپے"]
|
19
|
+
fractional:
|
20
|
+
name: ["پیسہ", "پیسے", "پیسے"]
|
21
|
+
feminine: false
|
22
|
+
USD:
|
23
|
+
name: ["ڈالر", "ڈالر", "ڈالر"]
|
24
|
+
fractional:
|
25
|
+
name: ["سینٹ", "سینٹ", "سینٹ"]
|
26
|
+
feminine: false
|
@@ -0,0 +1,31 @@
|
|
1
|
+
vi:
|
2
|
+
num2words:
|
3
|
+
ones_masc: ["không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"]
|
4
|
+
ones_fem: ["không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"]
|
5
|
+
teens: ["mười", "mười một", "mười hai", "mười ba", "mười bốn", "mười lăm", "mười sáu", "mười bảy", "mười tám", "mười chín"]
|
6
|
+
tens: ["", "", "hai mươi", "ba mươi", "bốn mươi", "năm mươi", "sáu mươi", "bảy mươi", "tám mươi", "chín mươi"]
|
7
|
+
hundreds: ["", "một trăm", "hai trăm", "ba trăm", "bốn trăm", "năm trăm", "sáu trăm", "bảy trăm", "tám trăm", "chín trăm"]
|
8
|
+
|
9
|
+
scales:
|
10
|
+
- ["", "", ""]
|
11
|
+
- ["nghìn", "nghìn", "nghìn"]
|
12
|
+
- ["triệu", "triệu", "triệu"]
|
13
|
+
- ["tỷ", "tỷ", "tỷ"]
|
14
|
+
- ["nghìn tỷ", "nghìn tỷ", "nghìn tỷ"]
|
15
|
+
|
16
|
+
currencies:
|
17
|
+
VND:
|
18
|
+
name: ["đồng", "đồng", "đồng"]
|
19
|
+
fractional:
|
20
|
+
name: ["hào", "hào", "hào"]
|
21
|
+
feminine: false
|
22
|
+
USD:
|
23
|
+
name: ["đô la", "đô la", "đô la"]
|
24
|
+
fractional:
|
25
|
+
name: ["xu", "xu", "xu"]
|
26
|
+
feminine: false
|
27
|
+
EUR:
|
28
|
+
name: ["euro", "euro", "euro"]
|
29
|
+
fractional:
|
30
|
+
name: ["xu", "xu", "xu"]
|
31
|
+
feminine: false
|
@@ -0,0 +1,21 @@
|
|
1
|
+
zh:
|
2
|
+
num2words:
|
3
|
+
ones_masc: ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
|
4
|
+
ones_fem: ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
|
5
|
+
teens: ["十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九"]
|
6
|
+
tens: ["", "十", "二十", "三十", "四十", "五十", "六十", "七十", "八十", "九十"]
|
7
|
+
hundreds: ["", "一百", "二百", "三百", "四百", "五百", "六百", "七百", "八百", "九百"]
|
8
|
+
|
9
|
+
scales:
|
10
|
+
- ["", "", ""] # 10^0
|
11
|
+
- ["千", "千", "千"] # 10^3
|
12
|
+
- ["万", "万", "万"] # 10^4
|
13
|
+
- ["亿", "亿", "亿"] # 10^8
|
14
|
+
- ["兆", "兆", "兆"] # 10^12
|
15
|
+
|
16
|
+
currencies:
|
17
|
+
CNY:
|
18
|
+
name: ["元", "元", "元"]
|
19
|
+
fractional:
|
20
|
+
name: ["角", "分", "分"]
|
21
|
+
feminine: false
|
data/lib/num2words/converter.rb
CHANGED
@@ -2,97 +2,135 @@
|
|
2
2
|
|
3
3
|
module Num2words
|
4
4
|
class Converter
|
5
|
-
|
6
|
-
|
5
|
+
class << self
|
6
|
+
def to_words(number, *args, **opts)
|
7
|
+
locale = args.first.is_a?(Symbol) ? args.first : opts[:locale] || I18n.default_locale
|
8
|
+
feminine = opts[:feminine] || false
|
9
|
+
style = opts[:style] || :fraction
|
10
|
+
word_case = opts[:word_case] || :downcase
|
11
|
+
locale_data = Locales[locale]
|
12
|
+
|
13
|
+
result = if number.is_a?(Float)
|
14
|
+
to_words_fractional(number, locale, feminine, locale_data, style: style)
|
15
|
+
else
|
16
|
+
to_words_integer(number, locale, feminine, locale_data)
|
17
|
+
end
|
18
|
+
|
19
|
+
apply_case(result, word_case)
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_currency(amount, *args, **opts)
|
23
|
+
locale = args.first.is_a?(Symbol) ? args.first : opts[:locale] || I18n.default_locale
|
24
|
+
word_case = opts[:word_case] || :downcase
|
25
|
+
locale_data = Locales[locale]
|
7
26
|
|
8
|
-
|
9
|
-
|
27
|
+
major_str, minor_str = sprintf('%.2f', amount).split('.')
|
28
|
+
major_value = major_str.to_i
|
29
|
+
minor_value = minor_str.to_i
|
10
30
|
|
11
|
-
|
12
|
-
|
31
|
+
major_words = to_words(major_value, locale: locale)
|
32
|
+
major_name = pluralize(major_value, *locale_data::MAJOR_UNIT)
|
13
33
|
|
14
|
-
|
15
|
-
|
34
|
+
minor_words = to_words(minor_value, locale: locale, feminine: true)
|
35
|
+
minor_name = pluralize(minor_value, *locale_data::MINOR_UNIT)
|
16
36
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
%w[тысяча тысячи тысяч], # 10^3
|
21
|
-
%w[миллион миллиона миллионов], # 10^6
|
22
|
-
%w[миллиард миллиарда миллиардов], # 10^9
|
23
|
-
%w[триллион триллиона триллионов] # 10^12
|
24
|
-
].freeze
|
37
|
+
result = [major_words, major_name, minor_words, minor_name].join(" ")
|
38
|
+
apply_case(result, word_case)
|
39
|
+
end
|
25
40
|
|
26
|
-
|
27
|
-
KOP = %w[копейка копейки копеек].freeze
|
41
|
+
private
|
28
42
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
case
|
33
|
-
when 1 then
|
43
|
+
def pluralize(number, singular, few, plural)
|
44
|
+
return plural if (11..14).include?(number % 100)
|
45
|
+
|
46
|
+
case number % 10
|
47
|
+
when 1 then singular
|
34
48
|
when 2..4 then few
|
35
|
-
else
|
49
|
+
else plural
|
36
50
|
end
|
37
51
|
end
|
38
52
|
|
39
53
|
# n — 0..999, scale_idx — индекс разряда (0 — единицы, 1 — тысячи, ...)
|
40
54
|
# feminine: true — использовать женский род для единиц (нужно для тысяч/копеек)
|
41
|
-
def triple_to_words(n, scale_idx, feminine: false)
|
55
|
+
def triple_to_words(n, scale_idx, local_data, feminine: false)
|
42
56
|
return [] if n.zero?
|
43
|
-
|
44
57
|
words = []
|
45
|
-
words << HUNDREDS[n / 100] if n >= 100
|
46
58
|
|
59
|
+
words << local_data::HUNDREDS[n / 100] if n >= 100
|
47
60
|
rest = n % 100
|
61
|
+
|
48
62
|
if rest.between?(10, 19)
|
49
|
-
words << TEENS[rest - 10]
|
63
|
+
words << local_data::TEENS[rest - 10]
|
50
64
|
else
|
51
|
-
words << TENS[rest / 10] if rest >= 20
|
65
|
+
words << local_data::TENS[rest / 10] if rest >= 20
|
52
66
|
ones = rest % 10
|
53
|
-
if ones.positive?
|
54
|
-
words << (feminine ? ONES_FEM[ones] : ONES_MASC[ones])
|
55
|
-
end
|
67
|
+
words << (feminine ? local_data::ONES_FEM[ones] : local_data::ONES_MASC[ones]) if ones.positive?
|
56
68
|
end
|
57
69
|
|
58
|
-
|
59
|
-
words << pluralize(n, *SCALES[scale_idx]) unless scale_idx.zero?
|
70
|
+
words << pluralize(n, *local_data::SCALES[scale_idx]) unless scale_idx.zero?
|
60
71
|
words.compact
|
61
72
|
end
|
62
73
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
74
|
+
def to_words_fractional(number, locale, feminine, locale_data, style: :fraction)
|
75
|
+
minus_word = locale_data::GRAMMAR[:minus] || "minus"
|
76
|
+
conjunction_word = locale_data::GRAMMAR[:conjunction] || "and"
|
77
|
+
default_fraction = locale_data::GRAMMAR[:default_fraction] || "parts"
|
78
|
+
fractions_data = locale_data::FRACTIONS || {}
|
67
79
|
|
68
|
-
|
69
|
-
.chars.reverse.each_slice(3).map(&:reverse)
|
70
|
-
.map(&:join).map!(&:to_i).reverse
|
80
|
+
sign_word = number.negative? ? minus_word : ""
|
71
81
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
82
|
+
integer_string, fraction_string = number.abs.to_s.split('.', 2)
|
83
|
+
integer_value = integer_string.to_i
|
84
|
+
|
85
|
+
return to_words_integer(integer_value, locale, feminine, locale_data) if fraction_string.to_i.zero?
|
86
|
+
|
87
|
+
fraction_string = fraction_string.sub(/0+\z/, "")
|
88
|
+
numerator = fraction_string.to_i
|
89
|
+
denominator = 10 ** fraction_string.length
|
90
|
+
|
91
|
+
integer_words = to_words_integer(integer_value, locale, feminine, locale_data)
|
92
|
+
|
93
|
+
if locale.to_sym == :en && style == :decimal
|
94
|
+
fraction_digits = fraction_string.chars.map { |d| to_words_integer(d.to_i, locale, feminine, locale_data) }
|
95
|
+
full_string = [sign_word, integer_words, "point", fraction_digits.join(" ")].reject(&:empty?).join(" ")
|
96
|
+
return full_string
|
77
97
|
end
|
78
|
-
|
98
|
+
|
99
|
+
numerator_words = to_words_integer(numerator, locale, (locale.to_sym == :ru ? true : feminine), locale_data)
|
100
|
+
|
101
|
+
denom_forms = fractions_data[denominator] || fractions_data[denominator.to_s] # массив склонений
|
102
|
+
denominator_words = denom_forms.is_a?(Array) ? pluralize(numerator, *denom_forms) : default_fraction
|
103
|
+
|
104
|
+
[sign_word, integer_words, conjunction_word, numerator_words, denominator_words].reject(&:empty?).join(" ")
|
79
105
|
end
|
80
106
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
rub = Integer(rub_str)
|
86
|
-
# всегда 2 знака для копеек; обрезаем лишние, дополняем недостающие
|
87
|
-
kop = (kop_str || "0")[0, 2].ljust(2, "0").to_i
|
107
|
+
def to_words_integer(number, locale, feminine, locale_data)
|
108
|
+
integer_value = Integer(number)
|
109
|
+
|
110
|
+
return (feminine ? locale_data::ONES_FEM[0] : locale_data::ONES_MASC[0]) if integer_value.zero?
|
88
111
|
|
89
|
-
|
90
|
-
|
112
|
+
groups = integer_value.to_s
|
113
|
+
.chars.reverse.each_slice(3).map(&:reverse)
|
114
|
+
.map(&:join).map!(&:to_i).reverse
|
91
115
|
|
92
|
-
|
93
|
-
|
116
|
+
words = []
|
117
|
+
groups.each_with_index do |group_value, index|
|
118
|
+
scale_index = groups.size - index - 1
|
119
|
+
group_feminine = (scale_index == 1) || feminine
|
120
|
+
words.concat triple_to_words(group_value, scale_index, locale_data, feminine: group_feminine)
|
121
|
+
end
|
122
|
+
|
123
|
+
words.join(" ")
|
124
|
+
end
|
94
125
|
|
95
|
-
|
126
|
+
def apply_case(text, word_case)
|
127
|
+
case word_case
|
128
|
+
when :upper then text.upcase
|
129
|
+
when :capitalize then text.capitalize
|
130
|
+
when :title then text.split.map(&:capitalize).join(" ")
|
131
|
+
when :downcase then text.downcase
|
132
|
+
else text
|
133
|
+
end
|
96
134
|
end
|
97
135
|
end
|
98
136
|
end
|
data/lib/num2words/core_ext.rb
CHANGED
@@ -1,17 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Integer
|
4
|
-
def to_words(
|
5
|
-
Num2words::Converter.to_words(self,
|
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
|
15
|
-
Num2words::Converter.
|
14
|
+
def to_words(*args, **opts)
|
15
|
+
Num2words::Converter.to_words(self, *args, **opts)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_currency(*args, **opts)
|
19
|
+
Num2words::Converter.to_currency(self, *args, **opts)
|
16
20
|
end
|
17
21
|
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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.SAR.name", locale: :ar)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.BYN.name", locale: :be)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.BGN.name", locale: :bg)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.BDT.name", locale: :bn)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.CZK.name", locale: :cs)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.DKK.name", locale: :da)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.EUR.name", locale: :de)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.EUR.name", locale: :el)
|
14
|
+
MINOR_UNIT = I18n.t("num2words.currencies.EUR.fractional.name", locale: :el)
|
15
|
+
end
|
16
|
+
|
17
|
+
register :el, EL
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.USD.name", locale: :en)
|
14
|
+
MINOR_UNIT = I18n.t("num2words.currencies.USD.fractional.name", locale: :en)
|
15
|
+
|
16
|
+
FRACTIONS = I18n.t("num2words.fractions", locale: :en)
|
17
|
+
GRAMMAR = I18n.t("num2words.grammar", locale: :en)
|
18
|
+
end
|
19
|
+
|
20
|
+
register :en, EN
|
21
|
+
end
|
22
|
+
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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.EUR.name", locale: :es)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.EUR.name", locale: :et)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.IRR.name", locale: :fa)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.EUR.name", locale: :fi)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.EUR.name", locale: :fr)
|
14
|
+
MINOR_UNIT = 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
|
+
MAJOR_UNIT = I18n.t("num2words.currencies.INR.name", locale: :gu)
|
14
|
+
MINOR_UNIT = I18n.t("num2words.currencies.INR.fractional.name", locale: :gu)
|
15
|
+
end
|
16
|
+
|
17
|
+
register :gu, GU
|
18
|
+
end
|
19
|
+
end
|