n2words 1.13.0 → 1.15.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/lib/i18n/KO.mjs CHANGED
@@ -1,34 +1,33 @@
1
- import N2WordsBase from '../classes/N2WordsBase.mjs';
1
+ import BaseLanguage from '../classes/BaseLanguage.mjs';
2
2
 
3
- export class N2WordsKO extends N2WordsBase {
4
- constructor() {
5
- super();
6
-
7
- this.negativeWord = '마이너스';
8
- this.separatorWord = '';
9
- this.zero = '영';
10
- this.cards = [
11
- { '10000000000000000000000000000': '양' },
12
- { '1000000000000000000000000': '자' },
13
- { '100000000000000000000': '해' },
14
- { '10000000000000000': '경' },
15
- { '1000000000000': '조' },
16
- { '100000000': '억' },
17
- { '10000': '만' },
18
- { '1000': '천' },
19
- { '100': '백' },
20
- { '10': '십' },
21
- { '9': '구' },
22
- { '8': '팔' },
23
- { '7': '칠' },
24
- { '6': '육' },
25
- { '5': '오' },
26
- { '4': '사' },
27
- { '3': '삼' },
28
- { '2': '이' },
29
- { '1': '일' },
30
- { '0': '영' }
31
- ];
3
+ export class N2WordsKO extends BaseLanguage {
4
+ constructor(options) {
5
+ super(Object.assign({
6
+ negativeWord: '마이너스',
7
+ separatorWord: '',
8
+ zero: ''
9
+ }, options), [
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,13 @@ export class N2WordsKO extends N2WordsBase {
43
42
  }
44
43
  }
45
44
 
46
- export default function(n) {
47
- return new N2WordsKO().floatToCardinal(n);
45
+ /**
46
+ * Converts a value to cardinal (written) form.
47
+ * @param {number|string} value Number to be convert.
48
+ * @param {object} options Options for class.
49
+ * @throws {Error} Value cannot be invalid.
50
+ * @returns {string} Value in cardinal (written) format.
51
+ */
52
+ export default function(value, options) {
53
+ return new N2WordsKO(options).floatToCardinal(value);
48
54
  }
package/lib/i18n/LT.mjs CHANGED
@@ -1,70 +1,75 @@
1
1
  import {N2WordsRU} from './RU.mjs';
2
2
 
3
3
  export class N2WordsLT extends N2WordsRU {
4
- constructor() {
5
- super();
4
+ ones = {
5
+ 1: 'vienas',
6
+ 2: 'du',
7
+ 3: 'trys',
8
+ 4: 'keturi',
9
+ 5: 'penki',
10
+ 6: 'šeši',
11
+ 7: 'septyni',
12
+ 8: 'aštuoni',
13
+ 9: 'devyni'
14
+ };
6
15
 
7
- this.negativeWord = 'minus';
8
- this.separatorWord = 'kablelis';
9
- this.feminine = false;
10
- this.zero = 'nulis';
11
- this.ones = {
12
- 1: 'vienas',
13
- 2: 'du',
14
- 3: 'trys',
15
- 4: 'keturi',
16
- 5: 'penki',
17
- 6: 'šeši',
18
- 7: 'septyni',
19
- 8: 'aštuoni',
20
- 9: 'devyni'
21
- };
22
- this.onesFeminine = {
23
- 1: 'viena',
24
- 2: 'dvi',
25
- 3: 'trys',
26
- 4: 'keturios',
27
- 5: 'penkios',
28
- 6: 'šešios',
29
- 7: 'septynios',
30
- 8: 'aštuonios',
31
- 9: 'devynios'
32
- };
33
- this.tens = {
34
- 0: 'dešimt',
35
- 1: 'vienuolika',
36
- 2: 'dvylika',
37
- 3: 'trylika',
38
- 4: 'keturiolika',
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
- };
16
+ onesFeminine = {
17
+ 1: 'viena',
18
+ 2: 'dvi',
19
+ 3: 'trys',
20
+ 4: 'keturios',
21
+ 5: 'penkios',
22
+ 6: 'šešios',
23
+ 7: 'septynios',
24
+ 8: 'aštuonios',
25
+ 9: 'devynios'
26
+ };
27
+
28
+ tens = {
29
+ 0: 'dešimt',
30
+ 1: 'vienuolika',
31
+ 2: 'dvylika',
32
+ 3: 'trylika',
33
+ 4: 'keturiolika',
34
+ 5: 'penkiolika',
35
+ 6: 'šešiolika',
36
+ 7: 'septyniolika',
37
+ 8: 'aštuoniolika',
38
+ 9: 'devyniolika'
39
+ };
40
+
41
+ twenties = {
42
+ 2: 'dvidešimt',
43
+ 3: 'trisdešimt',
44
+ 4: 'keturiasdešimt',
45
+ 5: 'penkiasdešimt',
46
+ 6: 'šešiasdešimt',
47
+ 7: 'septyniasdešimt',
48
+ 8: 'aštuoniasdešimt',
49
+ 9: 'devyniasdešimt'
50
+ };
51
+
52
+ hundreds = ['šimtas', 'šimtai'];
53
+
54
+ thousands = {
55
+ 1: ['tūkstantis', 'tūkstančiai', 'tūkstančių'],
56
+ 2: ['milijonas', 'milijonai', 'milijonų'],
57
+ 3: ['milijardas', 'milijardai', 'milijardų'],
58
+ 4: ['trilijonas', 'trilijonai', 'trilijonų'],
59
+ 5: ['kvadrilijonas', 'kvadrilijonai', 'kvadrilijonų'],
60
+ 6: ['kvintilijonas', 'kvintilijonai', 'kvintilijonų'],
61
+ 7: ['sikstilijonas', 'sikstilijonai', 'sikstilijonų'],
62
+ 8: ['septilijonas', 'septilijonai', 'septilijonų'],
63
+ 9: ['oktilijonas', 'oktilijonai', 'oktilijonų'],
64
+ 10: ['naintilijonas', 'naintilijonai', 'naintilijonų'],
65
+ };
66
+
67
+ constructor(options) {
68
+ super(Object.assign({
69
+ negativeWord: 'minus',
70
+ separatorWord: 'kablelis',
71
+ zero: 'nulis'
72
+ }, options));
68
73
  }
69
74
 
70
75
  pluralize(n, forms) {
@@ -79,11 +84,11 @@ export class N2WordsLT extends N2WordsRU {
79
84
  }
80
85
 
81
86
  toCardinal(number) {
82
- if (parseInt(number) == 0) {
87
+ if (number == 0) {
83
88
  return this.zero;
84
89
  }
85
90
  const words = [];
86
- const chunks = this.splitByX(JSON.stringify(number), 3);
91
+ const chunks = this.splitByX(number.toString(), 3);
87
92
  let i = chunks.length;
88
93
  for (let j = 0; j < chunks.length; j++) {
89
94
  const x = chunks[j];
@@ -120,6 +125,13 @@ export class N2WordsLT extends N2WordsRU {
120
125
  }
121
126
  }
122
127
 
123
- export default function(n) {
124
- return new N2WordsLT().floatToCardinal(n);
128
+ /**
129
+ * Converts a value to cardinal (written) form.
130
+ * @param {number|string} value Number to be convert.
131
+ * @param {object} options Options for class.
132
+ * @throws {Error} Value cannot be invalid.
133
+ * @returns {string} Value in cardinal (written) format.
134
+ */
135
+ export default function(value, options) {
136
+ return new N2WordsLT(options).floatToCardinal(value);
125
137
  }
package/lib/i18n/LV.mjs CHANGED
@@ -1,64 +1,69 @@
1
1
  import {N2WordsRU} from './RU.mjs';
2
2
 
3
3
  export class N2WordsLV extends N2WordsRU{
4
- constructor() {
5
- super();
4
+ ones = {
5
+ 1: 'viens',
6
+ 2: 'divi',
7
+ 3: 'trīs',
8
+ 4: 'četri',
9
+ 5: 'pieci',
10
+ 6: 'seši',
11
+ 7: 'septiņi',
12
+ 8: 'astoņi',
13
+ 9: 'deviņi'
14
+ };
6
15
 
7
- this.negativeWord = 'mīnus';
8
- this.separatorWord = 'komats';
9
- this.zero = 'nulle';
10
- this.ones = {
11
- 1: 'viens',
12
- 2: 'divi',
13
- 3: 'trīs',
14
- 4: 'četri',
15
- 5: 'pieci',
16
- 6: 'seši',
17
- 7: 'septiņi',
18
- 8: 'astoņi',
19
- 9: 'deviņi'
20
- };
21
- this.tens = {
22
- 0: 'desmit',
23
- 1: 'vienpadsmit',
24
- 2: 'divpadsmit',
25
- 3: 'trīspadsmit',
26
- 4: 'četrpadsmit',
27
- 5: 'piecpadsmit',
28
- 6: 'sešpadsmit',
29
- 7: 'septiņpadsmit',
30
- 8: 'astoņpadsmit',
31
- 9: 'deviņpadsmit'
32
- };
33
- this.twenties = {
34
- 2: 'divdesmit',
35
- 3: 'trīsdesmit',
36
- 4: 'četrdesmit',
37
- 5: 'piecdesmit',
38
- 6: 'sešdesmit',
39
- 7: 'septiņdesmit',
40
- 8: 'astoņdesmit',
41
- 9: 'deviņdesmit'
42
- };
43
- this.hundreds = ['simts', 'simti', 'simtu'];
44
- this.thousands = {
45
- 1: ['tūkstotis', 'tūkstoši', 'tūkstošu'],
46
- 2: ['miljons', 'miljoni', 'miljonu'],
47
- 3: ['miljards', 'miljardi', 'miljardu'],
48
- 4: ['triljons', 'triljoni', 'triljonu'],
49
- 5: ['kvadriljons', 'kvadriljoni', 'kvadriljonu'],
50
- 6: ['kvintiljons', 'kvintiljoni', 'kvintiljonu'],
51
- 7: ['sikstiljons', 'sikstiljoni', 'sikstiljonu'],
52
- 8: ['septiljons', 'septiljoni', 'septiljonu'],
53
- 9: ['oktiljons', 'oktiljoni', 'oktiljonu'],
54
- 10: ['nontiljons', 'nontiljoni', 'nontiljonu'],
55
- };
16
+ tens = {
17
+ 0: 'desmit',
18
+ 1: 'vienpadsmit',
19
+ 2: 'divpadsmit',
20
+ 3: 'trīspadsmit',
21
+ 4: 'četrpadsmit',
22
+ 5: 'piecpadsmit',
23
+ 6: 'sešpadsmit',
24
+ 7: 'septiņpadsmit',
25
+ 8: 'astoņpadsmit',
26
+ 9: 'deviņpadsmit'
27
+ };
28
+
29
+ twenties = {
30
+ 2: 'divdesmit',
31
+ 3: 'trīsdesmit',
32
+ 4: 'četrdesmit',
33
+ 5: 'piecdesmit',
34
+ 6: 'sešdesmit',
35
+ 7: 'septiņdesmit',
36
+ 8: 'astoņdesmit',
37
+ 9: 'deviņdesmit'
38
+ };
39
+
40
+ hundreds = ['simts', 'simti', 'simtu'];
41
+
42
+ thousands = {
43
+ 1: ['tūkstotis', 'tūkstoši', 'tūkstošu'],
44
+ 2: ['miljons', 'miljoni', 'miljonu'],
45
+ 3: ['miljards', 'miljardi', 'miljardu'],
46
+ 4: ['triljons', 'triljoni', 'triljonu'],
47
+ 5: ['kvadriljons', 'kvadriljoni', 'kvadriljonu'],
48
+ 6: ['kvintiljons', 'kvintiljoni', 'kvintiljonu'],
49
+ 7: ['sikstiljons', 'sikstiljoni', 'sikstiljonu'],
50
+ 8: ['septiljons', 'septiljoni', 'septiljonu'],
51
+ 9: ['oktiljons', 'oktiljoni', 'oktiljonu'],
52
+ 10: ['nontiljons', 'nontiljoni', 'nontiljonu'],
53
+ };
54
+
55
+ constructor(options) {
56
+ super(Object.assign({
57
+ negativeWord: 'mīnus',
58
+ separatorWord: 'komats',
59
+ zero: 'nulle'
60
+ }, options));
56
61
  }
57
62
 
58
63
  pluralize(n, forms) {
59
64
  let form = 2;
60
- if (n != 0) {
61
- if (n % 10 == 1 && n % 100 != 11) {
65
+ if (n != 0n) {
66
+ if (n % 10n == 1n && n % 100n != 11n) {
62
67
  form = 0;
63
68
  } else {
64
69
  form = 1;
@@ -68,11 +73,11 @@ export class N2WordsLV extends N2WordsRU{
68
73
  }
69
74
 
70
75
  toCardinal(number) {
71
- if (parseInt(number) == 0) {
76
+ if (number == 0) {
72
77
  return this.zero;
73
78
  }
74
79
  const words = [];
75
- const chunks = this.splitByX(JSON.stringify(number), 3);
80
+ const chunks = this.splitByX(number.toString(), 3);
76
81
  let i = chunks.length;
77
82
  for (let j = 0; j < chunks.length; j++) {
78
83
  const x = chunks[j];
@@ -107,6 +112,13 @@ export class N2WordsLV extends N2WordsRU{
107
112
  }
108
113
  }
109
114
 
110
- export default function(n) {
111
- return new N2WordsLV().floatToCardinal(n);
115
+ /**
116
+ * Converts a value to cardinal (written) form.
117
+ * @param {number|string} value Number to be convert.
118
+ * @param {object} options Options for class.
119
+ * @throws {Error} Value cannot be invalid.
120
+ * @returns {string} Value in cardinal (written) format.
121
+ */
122
+ export default function(value, options) {
123
+ return new N2WordsLV(options).floatToCardinal(value);
112
124
  }
package/lib/i18n/NL.mjs CHANGED
@@ -1,58 +1,61 @@
1
- import N2WordsBase from '../classes/N2WordsBase.mjs';
1
+ import BaseLanguage from '../classes/BaseLanguage.mjs';
2
2
 
3
- export class N2WordsNL extends N2WordsBase {
4
- constructor(options) {
5
- super();
6
-
7
- this.negativeWord = 'min';
8
- this.separatorWord = 'komma';
9
- this.zero = 'nul';
3
+ export class N2WordsNL extends BaseLanguage {
4
+ includeOptionalAnd;
5
+ noHundredPairs;
10
6
 
11
- this.options = Object.assign({
7
+ constructor(options) {
8
+ options = Object.assign({
9
+ negativeWord: 'min',
10
+ separatorWord: 'komma',
11
+ zero: 'nul',
12
12
  includeOptionalAnd: false,
13
- noHundredPairs: false,
13
+ noHundredPairs: false
14
14
  }, options);
15
15
 
16
- this.cards = [
17
- {'1000000000000000000000000000': 'quadriljard'},
18
- {'1000000000000000000000000': 'quadriljoen'},
19
- {'1000000000000000000000': 'triljard'},
20
- {1000000000000000000: 'triljoen'},
21
- {1000000000000000: 'biljard'},
22
- {1000000000000: 'biljoen'},
23
- {1000000000: 'miljard'},
24
- {1000000: 'miljoen'},
25
- {1000: 'duizend'},
26
- {100: 'honderd'},
27
- {90: 'negentig'},
28
- {80: 'tachtig'},
29
- {70: 'zeventig'},
30
- {60: 'zestig'},
31
- {50: 'vijftig'},
32
- {40: 'veertig'},
33
- {30: 'dertig'},
34
- {20: 'twintig'},
35
- {19: 'negentien'},
36
- {18: 'achttien'},
37
- {17: 'zeventien'},
38
- {16: 'zestien'},
39
- {15: 'vijftien'},
40
- {14: 'veertien'},
41
- {13: 'dertien'},
42
- {12: 'twaalf'},
43
- {11: 'elf'},
44
- {10: 'tien'},
45
- {9: 'negen'},
46
- {8: 'acht'},
47
- {7: 'zeven'},
48
- {6: 'zes'},
49
- {5: 'vijf'},
50
- {4: 'vier'},
51
- {3: 'drie'},
52
- {2: 'twee'},
53
- {1: 'een'},
54
- {0: 'nul'},
55
- ];
16
+ super(options, [
17
+ [1000000000000000000000000000n, 'quadriljard'],
18
+ [1000000000000000000000000n, 'quadriljoen'],
19
+ [1000000000000000000000n, 'triljard'],
20
+ [1000000000000000000n, 'triljoen'],
21
+ [1000000000000000n, 'biljard'],
22
+ [1000000000000n, 'biljoen'],
23
+ [1000000000n, 'miljard'],
24
+ [1000000n, 'miljoen'],
25
+ [1000n, 'duizend'],
26
+ [100n, 'honderd'],
27
+ [90n, 'negentig'],
28
+ [80n, 'tachtig'],
29
+ [70n, 'zeventig'],
30
+ [60n, 'zestig'],
31
+ [50n, 'vijftig'],
32
+ [40n, 'veertig'],
33
+ [30n, 'dertig'],
34
+ [20n, 'twintig'],
35
+ [19n, 'negentien'],
36
+ [18n, 'achttien'],
37
+ [17n, 'zeventien'],
38
+ [16n, 'zestien'],
39
+ [15n, 'vijftien'],
40
+ [14n, 'veertien'],
41
+ [13n, 'dertien'],
42
+ [12n, 'twaalf'],
43
+ [11n, 'elf'],
44
+ [10n, 'tien'],
45
+ [9n, 'negen'],
46
+ [8n, 'acht'],
47
+ [7n, 'zeven'],
48
+ [6n, 'zes'],
49
+ [5n, 'vijf'],
50
+ [4n, 'vier'],
51
+ [3n, 'drie'],
52
+ [2n, 'twee'],
53
+ [1n, 'een'],
54
+ [0n, 'nul'],
55
+ ]);
56
+
57
+ this.includeOptionalAnd = options.includeOptionalAnd;
58
+ this.noHundredPairs = options.noHundredPairs;
56
59
  }
57
60
 
58
61
  merge(curr, next) {
@@ -81,14 +84,14 @@ export class N2WordsNL extends N2WordsBase {
81
84
  nText = cText;
82
85
  const andTxt = temp.endsWith('e') ? 'ën' : 'en';
83
86
  cText = `${temp}${andTxt}`;
84
- } else if (nNum < 13 && cNum < 1000 && this.options.includeOptionalAnd) {
87
+ } else if (nNum < 13 && cNum < 1000 && this.includeOptionalAnd) {
85
88
  cText = `${cText}en`;
86
- } else if (nNum < 13 && cNum >= 1000 && this.options.includeOptionalAnd) {
89
+ } else if (nNum < 13 && cNum >= 1000 && this.includeOptionalAnd) {
87
90
  nText = ` en ${nText}`;
88
91
  } else if (cNum >= 1000000) {
89
92
  cText += ' ';
90
93
  } else {
91
- if (cNum === 1000) {
94
+ if (cNum == 1000) {
92
95
  cText += ' ';
93
96
  }
94
97
  }
@@ -98,18 +101,25 @@ export class N2WordsNL extends N2WordsBase {
98
101
  }
99
102
 
100
103
  toCardinal(value) {
101
- if (value >= 1100 && value < 10000 && !this.options.noHundredPairs) {
102
- const high = Math.floor(value / 100);
103
- const low = value % 100;
104
- if (high % 10 !== 0) {
104
+ if (value >= 1100n && value < 10000n && !this.noHundredPairs) {
105
+ const high = value / 100n;
106
+ const low = value % 100n;
107
+ if (high % 10n !== 0n) {
105
108
  return super.toCardinal(high) + 'honderd' +
106
- (low ? (this.options.includeOptionalAnd ? ' en ' : ' ') + super.toCardinal(low) : '');
109
+ (low ? (this.includeOptionalAnd ? ' en ' : ' ') + super.toCardinal(low) : '');
107
110
  }
108
111
  }
109
112
  return super.toCardinal(value);
110
113
  }
111
114
  }
112
115
 
113
- export default function(n, options = {}) {
114
- return new N2WordsNL(options).floatToCardinal(n);
116
+ /**
117
+ * Converts a value to cardinal (written) form.
118
+ * @param {number|string} value Number to be convert.
119
+ * @param {object} options Options for class.
120
+ * @throws {Error} Value cannot be invalid.
121
+ * @returns {string} Value in cardinal (written) format.
122
+ */
123
+ export default function(value, options) {
124
+ return new N2WordsNL(options).floatToCardinal(value);
115
125
  }