n2words 1.12.2 → 1.14.0
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.
- package/.eslintrc.json +2 -2
- package/README.md +3 -2
- package/bench.mjs +94 -0
- package/dist/n2words.js +1 -1
- package/examples/node.mjs +10 -0
- package/lib/classes/AbstractLanguage.mjs +151 -0
- package/lib/classes/BaseLanguage.mjs +174 -0
- package/lib/i18n/AR.mjs +19 -9
- package/lib/i18n/AZ.mjs +62 -0
- package/lib/i18n/CZ.mjs +78 -69
- package/lib/i18n/DE.mjs +54 -49
- package/lib/i18n/DK.mjs +56 -50
- package/lib/i18n/EN.mjs +64 -53
- package/lib/i18n/ES.mjs +61 -55
- package/lib/i18n/FA.mjs +74 -63
- package/lib/i18n/FR.mjs +52 -47
- package/lib/i18n/HE.mjs +75 -23
- package/lib/i18n/HR.mjs +82 -70
- package/lib/i18n/HU.mjs +80 -75
- package/lib/i18n/ID.mjs +27 -20
- package/lib/i18n/IT.mjs +26 -17
- package/lib/i18n/KO.mjs +36 -31
- package/lib/i18n/LT.mjs +80 -67
- package/lib/i18n/LV.mjs +68 -57
- package/lib/i18n/NL.mjs +72 -61
- package/lib/i18n/NO.mjs +56 -51
- package/lib/i18n/PL.mjs +79 -67
- package/lib/i18n/PT.mjs +50 -44
- package/lib/i18n/RU.mjs +152 -122
- package/lib/i18n/SR.mjs +82 -70
- package/lib/i18n/TR.mjs +54 -362
- package/lib/i18n/UK.mjs +13 -6
- package/lib/i18n/VI.mjs +31 -24
- package/lib/i18n/ZH.mjs +38 -32
- package/lib/n2words.mjs +33 -103
- package/package.json +18 -11
- package/webpack.config.js +1 -1
- package/lib/classes/N2WordsAbs.mjs +0 -72
- package/lib/classes/N2WordsBase.mjs +0 -105
package/lib/i18n/HU.mjs
CHANGED
|
@@ -1,70 +1,69 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseLanguage from '../classes/BaseLanguage.mjs';
|
|
2
2
|
|
|
3
|
-
export class N2WordsHU extends
|
|
3
|
+
export class N2WordsHU extends BaseLanguage {
|
|
4
4
|
constructor() {
|
|
5
|
-
super(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
];
|
|
58
|
-
this.zero = 'nulla';
|
|
5
|
+
super({
|
|
6
|
+
negativeWord: 'mínusz',
|
|
7
|
+
separatorWord: 'egész',
|
|
8
|
+
zero: 'nulla'
|
|
9
|
+
},[
|
|
10
|
+
[1000000000000000000000000000n, 'quadrilliárd'],
|
|
11
|
+
[1000000000000000000000000n, 'quadrillió'],
|
|
12
|
+
[1000000000000000000000n, 'trilliárd'],
|
|
13
|
+
[1000000000000000000n, 'trillió'],
|
|
14
|
+
[1000000000000000n, 'billiárd'],
|
|
15
|
+
[1000000000000n, 'billió'],
|
|
16
|
+
[1000000000n, 'milliárd'],
|
|
17
|
+
[1000000n, 'millió'],
|
|
18
|
+
[1000n, 'ezer'],
|
|
19
|
+
[100n, 'száz'],
|
|
20
|
+
[90n, 'kilencven'],
|
|
21
|
+
[80n, 'nyolcvan'],
|
|
22
|
+
[70n, 'hetven'],
|
|
23
|
+
[60n, 'hatvan'],
|
|
24
|
+
[50n, 'ötven'],
|
|
25
|
+
[40n, 'negyven'],
|
|
26
|
+
[30n, 'harminc'],
|
|
27
|
+
[29n, 'huszonkilenc'],
|
|
28
|
+
[28n, 'huszonnyolc'],
|
|
29
|
+
[27n, 'huszonhét'],
|
|
30
|
+
[26n, 'huszonhat'],
|
|
31
|
+
[25n, 'huszonöt'],
|
|
32
|
+
[24n, 'huszonnégy'],
|
|
33
|
+
[23n, 'huszonhárom'],
|
|
34
|
+
[22n, 'huszonkettő'],
|
|
35
|
+
[21n, 'huszonegy'],
|
|
36
|
+
[20n, 'húsz'],
|
|
37
|
+
[19n, 'tizenkilenc'],
|
|
38
|
+
[18n, 'tizennyolc'],
|
|
39
|
+
[17n, 'tizenhét'],
|
|
40
|
+
[16n, 'tizenhat'],
|
|
41
|
+
[15n, 'tizenöt'],
|
|
42
|
+
[14n, 'tizennégy'],
|
|
43
|
+
[13n, 'tizenhárom'],
|
|
44
|
+
[12n, 'tizenkettő'],
|
|
45
|
+
[11n, 'tizenegy'],
|
|
46
|
+
[10n, 'tíz'],
|
|
47
|
+
[9n, 'kilenc'],
|
|
48
|
+
[8n, 'nyolc'],
|
|
49
|
+
[7n, 'hét'],
|
|
50
|
+
[6n, 'hat'],
|
|
51
|
+
[5n, 'öt'],
|
|
52
|
+
[4n, 'négy'],
|
|
53
|
+
[3n, 'három'],
|
|
54
|
+
[2n, 'kettő'],
|
|
55
|
+
[1n, 'egy'],
|
|
56
|
+
[0n, 'nulla']
|
|
57
|
+
]);
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
tensToCardinal(number) {
|
|
62
|
-
if (this.
|
|
63
|
-
return this.
|
|
61
|
+
if (this.getCardWord(number)) {
|
|
62
|
+
return this.getCardWord(number);
|
|
64
63
|
} else {
|
|
65
64
|
const tens = Math.floor(number / 10);
|
|
66
65
|
const units = number % 10;
|
|
67
|
-
return this.
|
|
66
|
+
return this.getCardWord(tens * 10) + this.toCardinal(units);
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
69
|
|
|
@@ -85,35 +84,35 @@ export class N2WordsHU extends N2WordsBase {
|
|
|
85
84
|
prefix = this.toCardinal(thousands, '') + prefix;
|
|
86
85
|
}
|
|
87
86
|
let postfix = this.toCardinal(number % 1000, '');
|
|
88
|
-
let middle = (number <= 2000 || postfix
|
|
87
|
+
let middle = (number <= 2000 || postfix == '') ? '' : '-';
|
|
89
88
|
return prefix + middle + postfix;
|
|
90
89
|
}
|
|
91
90
|
|
|
92
91
|
bigNumberToCardinal(number) {
|
|
93
|
-
const numberLength =
|
|
92
|
+
const numberLength = number.toString().length;
|
|
94
93
|
let digits = (numberLength % 3 !== 0) ? numberLength : numberLength - 2;
|
|
95
94
|
let exp = 10 ** (Math.floor(digits / 3) * 3);
|
|
96
|
-
let prefix = this.toCardinal(
|
|
97
|
-
let rest = this.toCardinal(number % exp, '');
|
|
95
|
+
let prefix = this.toCardinal(number / BigInt(exp), '');
|
|
96
|
+
let rest = this.toCardinal(number % BigInt(exp), '');
|
|
98
97
|
let postfix = (rest !== '') ? ('-' + rest) : '';
|
|
99
|
-
return prefix + this.
|
|
98
|
+
return prefix + this.getCardWord(exp) + postfix;
|
|
100
99
|
}
|
|
101
100
|
|
|
102
101
|
toCardinal(number, zero = this.zero) {
|
|
103
102
|
let words = '';
|
|
104
103
|
|
|
105
|
-
if (number ==
|
|
104
|
+
if (number == 0n) {
|
|
106
105
|
words = zero;
|
|
107
106
|
} else if (zero == '' && number == 2) {
|
|
108
107
|
words = 'két';
|
|
109
|
-
} else if (number <
|
|
110
|
-
words = this.
|
|
111
|
-
} else if (number <
|
|
112
|
-
words = this.tensToCardinal(number);
|
|
113
|
-
} else if (number <
|
|
114
|
-
words = this.hundredsToCardinal(number);
|
|
115
|
-
} else if (number <
|
|
116
|
-
words = this.thousandsToCardinal(number);
|
|
108
|
+
} else if (number < 30n) {
|
|
109
|
+
words = this.getCardWord(Number(number));
|
|
110
|
+
} else if (number < 100n) {
|
|
111
|
+
words = this.tensToCardinal(Number(number));
|
|
112
|
+
} else if (number < 1000n) {
|
|
113
|
+
words = this.hundredsToCardinal(Number(number));
|
|
114
|
+
} else if (number < 1000000n) {
|
|
115
|
+
words = this.thousandsToCardinal(Number(number));
|
|
117
116
|
} else {
|
|
118
117
|
words = this.bigNumberToCardinal(number);
|
|
119
118
|
}
|
|
@@ -122,6 +121,12 @@ export class N2WordsHU extends N2WordsBase {
|
|
|
122
121
|
}
|
|
123
122
|
}
|
|
124
123
|
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Converts a value to cardinal (written) form.
|
|
126
|
+
* @param {number|string} value Number to be convert.
|
|
127
|
+
* @throws {Error} Value cannot be invalid.
|
|
128
|
+
* @returns {string} Value in cardinal (written) format.
|
|
129
|
+
*/
|
|
130
|
+
export default function(value) {
|
|
131
|
+
return new N2WordsHU().floatToCardinal(value);
|
|
127
132
|
}
|
package/lib/i18n/ID.mjs
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import AbstractLanguage from '../classes/AbstractLanguage.mjs';
|
|
2
2
|
|
|
3
|
-
export class N2WordsID extends
|
|
3
|
+
export class N2WordsID extends AbstractLanguage {
|
|
4
4
|
constructor() {
|
|
5
|
-
super(
|
|
5
|
+
super({
|
|
6
|
+
negativeWord: 'min',
|
|
7
|
+
separatorWord: 'koma',
|
|
8
|
+
zero: 'nol'
|
|
9
|
+
});
|
|
6
10
|
|
|
7
|
-
this.negativeWord = 'min';
|
|
8
|
-
this.separatorWord = 'koma';
|
|
9
|
-
this.zero = 'nol';
|
|
10
11
|
this.base = {
|
|
11
12
|
0: [],
|
|
12
13
|
1: ['satu'],
|
|
@@ -37,7 +38,7 @@ export class N2WordsID extends N2WordsAbs {
|
|
|
37
38
|
splitBy3(number) {
|
|
38
39
|
// Split to groups of 3 numbers: 1234567 -> [['1'], ['234'], ['567']]
|
|
39
40
|
let blocks = [];
|
|
40
|
-
let strNumber =
|
|
41
|
+
let strNumber = number.toString();
|
|
41
42
|
let length = strNumber.length;
|
|
42
43
|
let firstBlock;
|
|
43
44
|
|
|
@@ -66,13 +67,13 @@ export class N2WordsID extends N2WordsAbs {
|
|
|
66
67
|
let wordBlocks = [];
|
|
67
68
|
let spelling;
|
|
68
69
|
let firstBlock = blocks[0];
|
|
69
|
-
if (firstBlock[0].length
|
|
70
|
-
if (firstBlock[0]
|
|
70
|
+
if (firstBlock[0].length == 1) {
|
|
71
|
+
if (firstBlock[0] == '0') {
|
|
71
72
|
spelling = ['nol'];
|
|
72
73
|
} else {
|
|
73
74
|
spelling = this.base[parseInt(firstBlock[0])];
|
|
74
75
|
}
|
|
75
|
-
} else if (firstBlock[0].length
|
|
76
|
+
} else if (firstBlock[0].length == 2) {
|
|
76
77
|
spelling = this.getTens(firstBlock[0]);
|
|
77
78
|
} else {
|
|
78
79
|
spelling = this.getHundreds(
|
|
@@ -92,9 +93,9 @@ export class N2WordsID extends N2WordsAbs {
|
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
getHundreds(number) { // 'ratus'
|
|
95
|
-
if (number
|
|
96
|
+
if (number == '1') {
|
|
96
97
|
return ['seratus'];
|
|
97
|
-
} else if (number
|
|
98
|
+
} else if (number == '0') {
|
|
98
99
|
return [];
|
|
99
100
|
} else {
|
|
100
101
|
return this.base[parseInt(number)].concat(['ratus']);
|
|
@@ -102,15 +103,15 @@ export class N2WordsID extends N2WordsAbs {
|
|
|
102
103
|
}
|
|
103
104
|
|
|
104
105
|
getTens(number) { // 'puluh'
|
|
105
|
-
if (number[0]
|
|
106
|
-
if (number[1]
|
|
106
|
+
if (number[0] == '1') {
|
|
107
|
+
if (number[1] == '0') {
|
|
107
108
|
return ['sepuluh'];
|
|
108
|
-
} else if (number[1]
|
|
109
|
+
} else if (number[1] == '1') {
|
|
109
110
|
return ['sebelas'];
|
|
110
111
|
} else {
|
|
111
112
|
return this.base[parseInt(number[1])].concat(['belas']);
|
|
112
113
|
}
|
|
113
|
-
} else if (number[0]
|
|
114
|
+
} else if (number[0] == '0') {
|
|
114
115
|
return this.base[parseInt(number[1])];
|
|
115
116
|
} else {
|
|
116
117
|
return this.base[parseInt(number[0])].concat(['puluh']).concat(
|
|
@@ -124,7 +125,7 @@ export class N2WordsID extends N2WordsAbs {
|
|
|
124
125
|
let length = wordBlocks.length - 1;
|
|
125
126
|
let firstBlock = [wordBlocks[0]];
|
|
126
127
|
let start = 0;
|
|
127
|
-
if (length
|
|
128
|
+
if (length == 1 && firstBlock[0][0] == '1') {
|
|
128
129
|
wordList.push('seribu');
|
|
129
130
|
start = 1;
|
|
130
131
|
}
|
|
@@ -133,7 +134,7 @@ export class N2WordsID extends N2WordsAbs {
|
|
|
133
134
|
if (!wordBlocks[i][1].length) {
|
|
134
135
|
continue;
|
|
135
136
|
}
|
|
136
|
-
if (i
|
|
137
|
+
if (i == length) {
|
|
137
138
|
break;
|
|
138
139
|
}
|
|
139
140
|
wordList = wordList.concat([this.thousands[(length - i) * 3]]);
|
|
@@ -150,6 +151,12 @@ export class N2WordsID extends N2WordsAbs {
|
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
|
|
153
|
-
|
|
154
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Converts a value to cardinal (written) form.
|
|
156
|
+
* @param {number|string} value Number to be convert.
|
|
157
|
+
* @throws {Error} Value cannot be invalid.
|
|
158
|
+
* @returns {string} Value in cardinal (written) format.
|
|
159
|
+
*/
|
|
160
|
+
export default function (value) {
|
|
161
|
+
return new N2WordsID().floatToCardinal(value);
|
|
155
162
|
}
|
package/lib/i18n/IT.mjs
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseLanguage from '../classes/BaseLanguage.mjs';
|
|
2
2
|
|
|
3
|
-
export class N2WordsIT extends
|
|
3
|
+
export class N2WordsIT extends BaseLanguage {
|
|
4
4
|
constructor() {
|
|
5
|
-
super(
|
|
5
|
+
super({
|
|
6
|
+
negativeWord: 'meno',
|
|
7
|
+
separatorWord: 'virgola',
|
|
8
|
+
zero: 'zero'
|
|
9
|
+
},[]);
|
|
10
|
+
|
|
11
|
+
/** @todo Adapt language to work with {@link BaseLanguage} better */
|
|
6
12
|
|
|
7
|
-
this.negativeWord = 'meno';
|
|
8
|
-
this.separatorWord = 'virgola';
|
|
9
|
-
this.zero = 'zero';
|
|
10
13
|
this.cardinalWords = [
|
|
11
14
|
this.zero, 'uno', 'due', 'tre', 'quattro', 'cinque', 'sei', 'sette', 'otto',
|
|
12
15
|
'nove', 'dieci', 'undici', 'dodici', 'tredici', 'quattordici', 'quindici',
|
|
@@ -83,7 +86,7 @@ export class N2WordsIT extends N2WordsBase {
|
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
bigNumberToCardinal(number) {
|
|
86
|
-
const digits = Array.from(
|
|
89
|
+
const digits = Array.from(number.toString());
|
|
87
90
|
const predigits = (digits.length % 3 == 0) ? 3 : digits.length % 3;
|
|
88
91
|
const multiplier = digits.slice(0, predigits); // first `predigits` elements
|
|
89
92
|
const exponent = digits.slice(predigits); // without the first `predigits` elements
|
|
@@ -95,7 +98,7 @@ export class N2WordsIT extends N2WordsBase {
|
|
|
95
98
|
prefix = this.toCardinal(parseInt(multiplier.join('')));
|
|
96
99
|
infix = ' ' + infix.slice(0, -1) + 'i'; // without last element
|
|
97
100
|
}
|
|
98
|
-
const isSetsEqual = (a, b) => a.size
|
|
101
|
+
const isSetsEqual = (a, b) => a.size == b.size && [...a].every(value => b.has(value));
|
|
99
102
|
if (!isSetsEqual(new Set(exponent), new Set(['0']))) {
|
|
100
103
|
postfix = this.toCardinal(parseInt(exponent.join('')));
|
|
101
104
|
if (postfix.includes(' e ')) {
|
|
@@ -112,14 +115,14 @@ export class N2WordsIT extends N2WordsBase {
|
|
|
112
115
|
toCardinal(number) {
|
|
113
116
|
let words = '';
|
|
114
117
|
|
|
115
|
-
if (number <
|
|
118
|
+
if (number < 20n) {
|
|
116
119
|
words = this.cardinalWords[number];
|
|
117
|
-
} else if (number <
|
|
118
|
-
words = this.tensToCardinal(number);
|
|
119
|
-
} else if (number <
|
|
120
|
-
words = this.hundredsToCardinal(number);
|
|
121
|
-
} else if (number <
|
|
122
|
-
words = this.thousandsToCardinal(number);
|
|
120
|
+
} else if (number < 100n) {
|
|
121
|
+
words = this.tensToCardinal(Number(number));
|
|
122
|
+
} else if (number < 1000n) {
|
|
123
|
+
words = this.hundredsToCardinal(Number(number));
|
|
124
|
+
} else if (number < 1000000n) {
|
|
125
|
+
words = this.thousandsToCardinal(Number(number));
|
|
123
126
|
} else {
|
|
124
127
|
words = this.bigNumberToCardinal(number);
|
|
125
128
|
}
|
|
@@ -128,6 +131,12 @@ export class N2WordsIT extends N2WordsBase {
|
|
|
128
131
|
}
|
|
129
132
|
}
|
|
130
133
|
|
|
131
|
-
|
|
132
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Converts a value to cardinal (written) form.
|
|
136
|
+
* @param {number|string} value Number to be convert.
|
|
137
|
+
* @throws {Error} Value cannot be invalid.
|
|
138
|
+
* @returns {string} Value in cardinal (written) format.
|
|
139
|
+
*/
|
|
140
|
+
export default function(value) {
|
|
141
|
+
return new N2WordsIT().floatToCardinal(value);
|
|
133
142
|
}
|
package/lib/i18n/KO.mjs
CHANGED
|
@@ -1,34 +1,33 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseLanguage from '../classes/BaseLanguage.mjs';
|
|
2
2
|
|
|
3
|
-
export class N2WordsKO extends
|
|
3
|
+
export class N2WordsKO extends BaseLanguage {
|
|
4
4
|
constructor() {
|
|
5
|
-
super(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
];
|
|
5
|
+
super({
|
|
6
|
+
negativeWord: '마이너스',
|
|
7
|
+
separatorWord: '점',
|
|
8
|
+
zero: '영'
|
|
9
|
+
},[
|
|
10
|
+
[10000000000000000000000000000n, '양'],
|
|
11
|
+
[1000000000000000000000000n, '자'],
|
|
12
|
+
[100000000000000000000n, '해'],
|
|
13
|
+
[10000000000000000n, '경'],
|
|
14
|
+
[1000000000000n, '조'],
|
|
15
|
+
[100000000n, '억'],
|
|
16
|
+
[10000n, '만'],
|
|
17
|
+
[1000n, '천'],
|
|
18
|
+
[100n, '백'],
|
|
19
|
+
[10n, '십'],
|
|
20
|
+
[9n, '구'],
|
|
21
|
+
[8n, '팔'],
|
|
22
|
+
[7n, '칠'],
|
|
23
|
+
[6n, '육'],
|
|
24
|
+
[5n, '오'],
|
|
25
|
+
[4n, '사'],
|
|
26
|
+
[3n, '삼'],
|
|
27
|
+
[2n, '이'],
|
|
28
|
+
[1n, '일'],
|
|
29
|
+
[0n, '영']
|
|
30
|
+
]);
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
merge(lPair, rPair) {
|
|
@@ -43,6 +42,12 @@ export class N2WordsKO extends N2WordsBase {
|
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Converts a value to cardinal (written) form.
|
|
47
|
+
* @param {number|string} value Number to be convert.
|
|
48
|
+
* @throws {Error} Value cannot be invalid.
|
|
49
|
+
* @returns {string} Value in cardinal (written) format.
|
|
50
|
+
*/
|
|
51
|
+
export default function(value) {
|
|
52
|
+
return new N2WordsKO().floatToCardinal(value);
|
|
48
53
|
}
|
package/lib/i18n/LT.mjs
CHANGED
|
@@ -1,70 +1,77 @@
|
|
|
1
1
|
import {N2WordsRU} from './RU.mjs';
|
|
2
2
|
|
|
3
3
|
export class N2WordsLT extends N2WordsRU {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
feminine = false;
|
|
5
|
+
|
|
6
|
+
ones = {
|
|
7
|
+
1: 'vienas',
|
|
8
|
+
2: 'du',
|
|
9
|
+
3: 'trys',
|
|
10
|
+
4: 'keturi',
|
|
11
|
+
5: 'penki',
|
|
12
|
+
6: 'šeši',
|
|
13
|
+
7: 'septyni',
|
|
14
|
+
8: 'aštuoni',
|
|
15
|
+
9: 'devyni'
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
onesFeminine = {
|
|
19
|
+
1: 'viena',
|
|
20
|
+
2: 'dvi',
|
|
21
|
+
3: 'trys',
|
|
22
|
+
4: 'keturios',
|
|
23
|
+
5: 'penkios',
|
|
24
|
+
6: 'šešios',
|
|
25
|
+
7: 'septynios',
|
|
26
|
+
8: 'aštuonios',
|
|
27
|
+
9: 'devynios'
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
tens = {
|
|
31
|
+
0: 'dešimt',
|
|
32
|
+
1: 'vienuolika',
|
|
33
|
+
2: 'dvylika',
|
|
34
|
+
3: 'trylika',
|
|
35
|
+
4: 'keturiolika',
|
|
36
|
+
5: 'penkiolika',
|
|
37
|
+
6: 'šešiolika',
|
|
38
|
+
7: 'septyniolika',
|
|
39
|
+
8: 'aštuoniolika',
|
|
40
|
+
9: 'devyniolika'
|
|
41
|
+
};
|
|
6
42
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
5: 'penkiolika',
|
|
40
|
-
6: 'šešiolika',
|
|
41
|
-
7: 'septyniolika',
|
|
42
|
-
8: 'aštuoniolika',
|
|
43
|
-
9: 'devyniolika'
|
|
44
|
-
};
|
|
45
|
-
this.twenties = {
|
|
46
|
-
2: 'dvidešimt',
|
|
47
|
-
3: 'trisdešimt',
|
|
48
|
-
4: 'keturiasdešimt',
|
|
49
|
-
5: 'penkiasdešimt',
|
|
50
|
-
6: 'šešiasdešimt',
|
|
51
|
-
7: 'septyniasdešimt',
|
|
52
|
-
8: 'aštuoniasdešimt',
|
|
53
|
-
9: 'devyniasdešimt'
|
|
54
|
-
};
|
|
55
|
-
this.hundreds = ['šimtas', 'šimtai'];
|
|
56
|
-
this.thousands = {
|
|
57
|
-
1: ['tūkstantis', 'tūkstančiai', 'tūkstančių'],
|
|
58
|
-
2: ['milijonas', 'milijonai', 'milijonų'],
|
|
59
|
-
3: ['milijardas', 'milijardai', 'milijardų'],
|
|
60
|
-
4: ['trilijonas', 'trilijonai', 'trilijonų'],
|
|
61
|
-
5: ['kvadrilijonas', 'kvadrilijonai', 'kvadrilijonų'],
|
|
62
|
-
6: ['kvintilijonas', 'kvintilijonai', 'kvintilijonų'],
|
|
63
|
-
7: ['sikstilijonas', 'sikstilijonai', 'sikstilijonų'],
|
|
64
|
-
8: ['septilijonas', 'septilijonai', 'septilijonų'],
|
|
65
|
-
9: ['oktilijonas', 'oktilijonai', 'oktilijonų'],
|
|
66
|
-
10: ['naintilijonas', 'naintilijonai', 'naintilijonų'],
|
|
67
|
-
};
|
|
43
|
+
twenties = {
|
|
44
|
+
2: 'dvidešimt',
|
|
45
|
+
3: 'trisdešimt',
|
|
46
|
+
4: 'keturiasdešimt',
|
|
47
|
+
5: 'penkiasdešimt',
|
|
48
|
+
6: 'šešiasdešimt',
|
|
49
|
+
7: 'septyniasdešimt',
|
|
50
|
+
8: 'aštuoniasdešimt',
|
|
51
|
+
9: 'devyniasdešimt'
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
hundreds = ['šimtas', 'šimtai'];
|
|
55
|
+
|
|
56
|
+
thousands = {
|
|
57
|
+
1: ['tūkstantis', 'tūkstančiai', 'tūkstančių'],
|
|
58
|
+
2: ['milijonas', 'milijonai', 'milijonų'],
|
|
59
|
+
3: ['milijardas', 'milijardai', 'milijardų'],
|
|
60
|
+
4: ['trilijonas', 'trilijonai', 'trilijonų'],
|
|
61
|
+
5: ['kvadrilijonas', 'kvadrilijonai', 'kvadrilijonų'],
|
|
62
|
+
6: ['kvintilijonas', 'kvintilijonai', 'kvintilijonų'],
|
|
63
|
+
7: ['sikstilijonas', 'sikstilijonai', 'sikstilijonų'],
|
|
64
|
+
8: ['septilijonas', 'septilijonai', 'septilijonų'],
|
|
65
|
+
9: ['oktilijonas', 'oktilijonai', 'oktilijonų'],
|
|
66
|
+
10: ['naintilijonas', 'naintilijonai', 'naintilijonų'],
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
constructor() {
|
|
70
|
+
super({
|
|
71
|
+
negativeWord: 'minus',
|
|
72
|
+
separatorWord: 'kablelis',
|
|
73
|
+
zero: 'nulis'
|
|
74
|
+
});
|
|
68
75
|
}
|
|
69
76
|
|
|
70
77
|
pluralize(n, forms) {
|
|
@@ -79,11 +86,11 @@ export class N2WordsLT extends N2WordsRU {
|
|
|
79
86
|
}
|
|
80
87
|
|
|
81
88
|
toCardinal(number) {
|
|
82
|
-
if (
|
|
89
|
+
if (number == 0) {
|
|
83
90
|
return this.zero;
|
|
84
91
|
}
|
|
85
92
|
const words = [];
|
|
86
|
-
const chunks = this.splitByX(
|
|
93
|
+
const chunks = this.splitByX(number.toString(), 3);
|
|
87
94
|
let i = chunks.length;
|
|
88
95
|
for (let j = 0; j < chunks.length; j++) {
|
|
89
96
|
const x = chunks[j];
|
|
@@ -120,6 +127,12 @@ export class N2WordsLT extends N2WordsRU {
|
|
|
120
127
|
}
|
|
121
128
|
}
|
|
122
129
|
|
|
123
|
-
|
|
124
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Converts a value to cardinal (written) form.
|
|
132
|
+
* @param {number|string} value Number to be convert.
|
|
133
|
+
* @throws {Error} Value cannot be invalid.
|
|
134
|
+
* @returns {string} Value in cardinal (written) format.
|
|
135
|
+
*/
|
|
136
|
+
export default function(value) {
|
|
137
|
+
return new N2WordsLT().floatToCardinal(value);
|
|
125
138
|
}
|