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/CZ.mjs CHANGED
@@ -1,97 +1,100 @@
1
1
  import {N2WordsRU} from './RU.mjs';
2
2
 
3
3
  export class N2WordsCZ extends N2WordsRU {
4
- constructor() {
5
- super();
4
+ ones = {
5
+ 1: 'jedna',
6
+ 2: 'dva',
7
+ 3: 'tři',
8
+ 4: 'čtyři',
9
+ 5: 'pět',
10
+ 6: 'šest',
11
+ 7: 'sedm',
12
+ 8: 'osm',
13
+ 9: 'devět'
14
+ };
6
15
 
7
- this.negativeWord = 'mínus';
8
- this.zero = 'nula';
9
- this.ones = {
10
- 1: 'jedna',
11
- 2: 'dva',
12
- 3: 'tři',
13
- 4: 'čtyři',
14
- 5: 'pět',
15
- 6: 'šest',
16
- 7: 'sedm',
17
- 8: 'osm',
18
- 9: 'devět'
19
- };
20
- this.tens = {
21
- 0: 'deset',
22
- 1: 'jedenáct',
23
- 2: 'dvanáct',
24
- 3: 'třináct',
25
- 4: 'čtrnáct',
26
- 5: 'patnáct',
27
- 6: 'šestnáct',
28
- 7: 'sedmnáct',
29
- 8: 'osmnáct',
30
- 9: 'devatenáct'
31
- };
32
- this.twenties = {
33
- 2: 'dvacet',
34
- 3: 'třicet',
35
- 4: 'čtyřicet',
36
- 5: 'padesát',
37
- 6: 'šedesát',
38
- 7: 'sedmdesát',
39
- 8: 'osmdesát',
40
- 9: 'devadesát'
41
- };
42
- this.hundreds = {
43
- 1: 'sto',
44
- 2: 'dvě stě',
45
- 3: 'tři sta',
46
- 4: 'čtyři sta',
47
- 5: 'pět set',
48
- 6: 'šest set',
49
- 7: 'sedm set',
50
- 8: 'osm set',
51
- 9: 'devět set'
52
- };
53
- this.thousands = {
54
- 1: ['tisíc', 'tisíce', 'tisíc'], // 10^ 3
55
- 2: ['milion', 'miliony', 'milionů'], // 10^ 6
56
- 3: ['miliarda', 'miliardy', 'miliard'], // 10^ 9
57
- 4: ['bilion', 'biliony', 'bilionů'], // 10^ 12
58
- 5: ['biliarda', 'biliardy', 'biliard'], // 10^ 15
59
- 6: ['trilion', 'triliony', 'trilionů'], // 10^ 18
60
- 7: ['triliarda', 'triliardy', 'triliard'], // 10^ 21
61
- 8: ['kvadrilion', 'kvadriliony', 'kvadrilionů'], // 10^ 24
62
- 9: ['kvadriliarda', 'kvadriliardy', 'kvadriliard'], // 10^ 27
63
- 10: ['quintillion', 'quintilliony', 'quintillionů'], // 10^ 30
64
- };
16
+ tens = {
17
+ 0: 'deset',
18
+ 1: 'jedenáct',
19
+ 2: 'dvanáct',
20
+ 3: 'třináct',
21
+ 4: 'čtrnáct',
22
+ 5: 'patnáct',
23
+ 6: 'šestnáct',
24
+ 7: 'sedmnáct',
25
+ 8: 'osmnáct',
26
+ 9: 'devatenáct'
27
+ };
28
+
29
+ twenties = {
30
+ 2: 'dvacet',
31
+ 3: 'třicet',
32
+ 4: 'čtyřicet',
33
+ 5: 'padesát',
34
+ 6: 'šedesát',
35
+ 7: 'sedmdesát',
36
+ 8: 'osmdesát',
37
+ 9: 'devadesát'
38
+ };
39
+
40
+ hundreds = {
41
+ 1: 'sto',
42
+ 2: 'dvě stě',
43
+ 3: 'tři sta',
44
+ 4: 'čtyři sta',
45
+ 5: 'pět set',
46
+ 6: 'šest set',
47
+ 7: 'sedm set',
48
+ 8: 'osm set',
49
+ 9: 'devět set'
50
+ };
51
+
52
+ thousands = {
53
+ 1: ['tisíc', 'tisíce', 'tisíc'], // 10^ 3
54
+ 2: ['milion', 'miliony', 'milionů'], // 10^ 6
55
+ 3: ['miliarda', 'miliardy', 'miliard'], // 10^ 9
56
+ 4: ['bilion', 'biliony', 'bilionů'], // 10^ 12
57
+ 5: ['biliarda', 'biliardy', 'biliard'], // 10^ 15
58
+ 6: ['trilion', 'triliony', 'trilionů'], // 10^ 18
59
+ 7: ['triliarda', 'triliardy', 'triliard'], // 10^ 21
60
+ 8: ['kvadrilion', 'kvadriliony', 'kvadrilionů'], // 10^ 24
61
+ 9: ['kvadriliarda', 'kvadriliardy', 'kvadriliard'], // 10^ 27
62
+ 10: ['quintillion', 'quintilliony', 'quintillionů'], // 10^ 30
63
+ };
64
+
65
+ constructor(options) {
66
+ super(Object.assign({
67
+ negativeWord: 'mínus',
68
+ zero: 'nula'
69
+ }, options));
65
70
  }
66
71
 
67
72
  get separatorWord() {
68
- if (this.wholeNumberInt === 0 || this.wholeNumberInt === 1) {
73
+ if (this.wholeNumber == 0n || this.wholeNumber == 1n) {
69
74
  return 'celá';
70
- } else if (this.wholeNumberInt >= 2 && this.wholeNumberInt <= 4) {
75
+ } else if (this.wholeNumber >= 2n && this.wholeNumber <= 4n) {
71
76
  return 'celé';
72
77
  } else {
73
78
  return 'celých';
74
79
  }
75
80
  }
76
81
 
77
- set separatorWord(value) {}
78
-
79
82
  pluralize(n, forms) {
80
83
  let form = 2;
81
84
  if (n == 1) {
82
85
  form = 0;
83
- } else if (((n % 10 < 5) && (n % 10 > 1)) && (n % 100 < 10 || n % 100 > 20)) {
86
+ } else if (((n % 10n < 5n) && (n % 10n > 1n)) && (n % 100n < 10n || n % 100n > 20n)) {
84
87
  form = 1;
85
88
  }
86
89
  return forms[form];
87
90
  }
88
91
 
89
92
  toCardinal(number) {
90
- if (parseInt(number) == 0) {
93
+ if (number == 0) {
91
94
  return this.zero;
92
95
  }
93
96
  const words = [];
94
- const chunks = this.splitByX(JSON.stringify(number), 3);
97
+ const chunks = this.splitByX(number.toString(), 3);
95
98
  let i = chunks.length;
96
99
  for (let j = 0; j < chunks.length; j++) {
97
100
  const x = chunks[j];
@@ -119,6 +122,13 @@ export class N2WordsCZ extends N2WordsRU {
119
122
  }
120
123
  }
121
124
 
122
- export default function(n) {
123
- return new N2WordsCZ().floatToCardinal(n);
125
+ /**
126
+ * Converts a value to cardinal (written) form.
127
+ * @param {number|string} value Number to be convert.
128
+ * @param {object} options Options for class.
129
+ * @throws {Error} Value cannot be invalid.
130
+ * @returns {string} Value in cardinal (written) format.
131
+ */
132
+ export default function(value, options) {
133
+ return new N2WordsCZ(options).floatToCardinal(value);
124
134
  }
package/lib/i18n/DE.mjs CHANGED
@@ -1,52 +1,51 @@
1
- import N2WordsBase from '../classes/N2WordsBase.mjs';
1
+ import BaseLanguage from '../classes/BaseLanguage.mjs';
2
2
 
3
- export class N2WordsDE extends N2WordsBase {
4
- constructor() {
5
- super();
6
-
7
- this.negativeWord = 'minus';
8
- this.separatorWord = 'komma';
9
- this.zero = 'null';
10
- this.cards = [
11
- { '1000000000000000000000000000': 'Quadrilliarde' },
12
- { '1000000000000000000000000': 'Quadrillion' },
13
- { '1000000000000000000000': 'Trilliarde' },
14
- { 1000000000000000000: 'Trillion' },
15
- { 1000000000000000: 'Billiarde' },
16
- { 1000000000000: 'Billion' },
17
- { 1000000000: 'Milliarde' },
18
- { 1000000: 'Million' },
19
- { 1000: 'tausend' },
20
- { 100: 'hundert' },
21
- { 90: 'neunzig' },
22
- { 80: 'achtzig' },
23
- { 70: 'siebzig' },
24
- { 60: 'sechzig' },
25
- { 50: 'fünfzig' },
26
- { 40: 'vierzig' },
27
- { 30: 'dreißig' },
28
- { 20: 'zwanzig' },
29
- { 19: 'neunzehn' },
30
- { 18: 'achtzehn' },
31
- { 17: 'siebzehn' },
32
- { 16: 'sechzehn' },
33
- { 15: 'fünfzehn' },
34
- { 14: 'vierzehn' },
35
- { 13: 'dreizehn' },
36
- { 12: 'zwölf' },
37
- { 11: 'elf' },
38
- { 10: 'zehn' },
39
- { 9: 'neun' },
40
- { 8: 'acht' },
41
- { 7: 'sieben' },
42
- { 6: 'sechs' },
43
- { 5: 'fünf' },
44
- { 4: 'vier' },
45
- { 3: 'drei' },
46
- { 2: 'zwei' },
47
- { 1: 'eins' },
48
- { 0: 'null' }
49
- ];
3
+ export class N2WordsDE extends BaseLanguage {
4
+ constructor(options) {
5
+ super(Object.assign({
6
+ negativeWord: 'minus',
7
+ separatorWord: 'komma',
8
+ zero: 'null'
9
+ }, options), [
10
+ [1000000000000000000000000000n, 'Quadrilliarde'],
11
+ [1000000000000000000000000n, 'Quadrillion'],
12
+ [1000000000000000000000n, 'Trilliarde'],
13
+ [1000000000000000000n, 'Trillion'],
14
+ [1000000000000000n, 'Billiarde'],
15
+ [1000000000000n, 'Billion'],
16
+ [1000000000n, 'Milliarde'],
17
+ [1000000n, 'Million'],
18
+ [1000n, 'tausend'],
19
+ [100n, 'hundert'],
20
+ [90n, 'neunzig'],
21
+ [80n, 'achtzig'],
22
+ [70n, 'siebzig'],
23
+ [60n, 'sechzig'],
24
+ [50n, 'fünfzig'],
25
+ [40n, 'vierzig'],
26
+ [30n, 'dreißig'],
27
+ [20n, 'zwanzig'],
28
+ [19n, 'neunzehn'],
29
+ [18n, 'achtzehn'],
30
+ [17n, 'siebzehn'],
31
+ [16n, 'sechzehn'],
32
+ [15n, 'fünfzehn'],
33
+ [14n, 'vierzehn'],
34
+ [13n, 'dreizehn'],
35
+ [12n, 'zwölf'],
36
+ [11n, 'elf'],
37
+ [10n, 'zehn'],
38
+ [9n, 'neun'],
39
+ [8n, 'acht'],
40
+ [7n, 'sieben'],
41
+ [6n, 'sechs'],
42
+ [5n, 'fünf'],
43
+ [4n, 'vier'],
44
+ [3n, 'drei'],
45
+ [2n, 'zwei'],
46
+ [1n, 'eins'],
47
+ [0n, 'null']
48
+ ]);
50
49
  }
51
50
 
52
51
  merge(curr, next) {
@@ -94,6 +93,13 @@ export class N2WordsDE extends N2WordsBase {
94
93
  }
95
94
  }
96
95
 
97
- export default function(n) {
98
- return new N2WordsDE().floatToCardinal(n);
96
+ /**
97
+ * Converts a value to cardinal (written) form.
98
+ * @param {number|string} value Number to be convert.
99
+ * @param {object} options Options for class.
100
+ * @throws {Error} Value cannot be invalid.
101
+ * @returns {string} Value in cardinal (written) format.
102
+ */
103
+ export default function(value, options) {
104
+ return new N2WordsDE(options).floatToCardinal(value);
99
105
  }
package/lib/i18n/DK.mjs CHANGED
@@ -1,53 +1,58 @@
1
- import N2WordsBase from '../classes/N2WordsBase.mjs';
1
+ import BaseLanguage from '../classes/BaseLanguage.mjs';
2
2
 
3
- export class N2WordsDK extends N2WordsBase {
4
- constructor() {
5
- super();
3
+ export class N2WordsDK extends BaseLanguage {
4
+ ordFlag;
6
5
 
7
- this.negativeWord = 'minus';
8
- this.separatorWord = 'komma';
9
- this.zero = 'nul';
10
- this.ordFlag = false;
11
- this.cards = [
12
- { '1000000000000000000000000000': 'quadrillarder' },
13
- { '1000000000000000000000000': 'quadrillioner' },
14
- { '1000000000000000000000': 'trillarder' },
15
- { '1000000000000000000': 'trillioner' },
16
- { '1000000000000000': 'billarder' },
17
- { '1000000000000': 'billioner' },
18
- { '1000000000': 'millarder' },
19
- { '1000000': 'millioner' },
20
- { '1000': 'tusind' },
21
- { '100': 'hundrede' },
22
- { '90': 'halvfems' },
23
- { '80': 'firs' },
24
- { '70': 'halvfjerds' },
25
- { '60': 'treds' },
26
- { '50': 'halvtreds' },
27
- { '40': 'fyrre' },
28
- { '30': 'tredive' },
29
- { '20': 'tyve' },
30
- { '19': 'nitten' },
31
- { '18': 'atten' },
32
- { '17': 'sytten' },
33
- { '16': 'seksten' },
34
- { '15': 'femten' },
35
- { '14': 'fjorten' },
36
- { '13': 'tretten' },
37
- { '12': 'tolv' },
38
- { '11': 'elleve' },
39
- { '10': 'ti' },
40
- { '9': 'ni' },
41
- { '8': 'otte' },
42
- { '7': 'syv' },
43
- { '6': 'seks' },
44
- { '5': 'fem' },
45
- { '4': 'fire' },
46
- { '3': 'tre' },
47
- { '2': 'to' },
48
- { '1': 'et' },
49
- { '0': 'nul' }
50
- ];
6
+ constructor(options) {
7
+ options = Object.assign({
8
+ negativeWord: 'minus',
9
+ separatorWord: 'komma',
10
+ zero: 'nul',
11
+ ordFlag: false
12
+ }, options);
13
+
14
+ super(options, [
15
+ [1000000000000000000000000000n, 'quadrillarder'],
16
+ [1000000000000000000000000n, 'quadrillioner'],
17
+ [1000000000000000000000n, 'trillarder'],
18
+ [1000000000000000000n, 'trillioner'],
19
+ [1000000000000000n, 'billarder'],
20
+ [1000000000000n, 'billioner'],
21
+ [1000000000n, 'millarder'],
22
+ [1000000n, 'millioner'],
23
+ [1000n, 'tusind'],
24
+ [100n, 'hundrede'],
25
+ [90n, 'halvfems'],
26
+ [80n, 'firs'],
27
+ [70n, 'halvfjerds'],
28
+ [60n, 'treds'],
29
+ [50n, 'halvtreds'],
30
+ [40n, 'fyrre'],
31
+ [30n, 'tredive'],
32
+ [20n, 'tyve'],
33
+ [19n, 'nitten'],
34
+ [18n, 'atten'],
35
+ [17n, 'sytten'],
36
+ [16n, 'seksten'],
37
+ [15n, 'femten'],
38
+ [14n, 'fjorten'],
39
+ [13n, 'tretten'],
40
+ [12n, 'tolv'],
41
+ [11n, 'elleve'],
42
+ [10n, 'ti'],
43
+ [9n, 'ni'],
44
+ [8n, 'otte'],
45
+ [7n, 'syv'],
46
+ [6n, 'seks'],
47
+ [5n, 'fem'],
48
+ [4n, 'fire'],
49
+ [3n, 'tre'],
50
+ [2n, 'to'],
51
+ [1n, 'et'],
52
+ [0n, 'nul']
53
+ ]);
54
+
55
+ this.ordFlag = options.ordFlag;
51
56
  }
52
57
 
53
58
  merge(curr, next) {
@@ -93,6 +98,13 @@ export class N2WordsDK extends N2WordsBase {
93
98
  }
94
99
  }
95
100
 
96
- export default function(n) {
97
- return new N2WordsDK().floatToCardinal(n);
101
+ /**
102
+ * Converts a value to cardinal (written) form.
103
+ * @param {number|string} value Number to be convert.
104
+ * @param {object} options Options for class.
105
+ * @throws {Error} Value cannot be invalid.
106
+ * @returns {string} Value in cardinal (written) format.
107
+ */
108
+ export default function(value, options) {
109
+ return new N2WordsDK(options).floatToCardinal(value);
98
110
  }
package/lib/i18n/EN.mjs CHANGED
@@ -1,72 +1,84 @@
1
- import N2WordsBase from '../classes/N2WordsBase.mjs';
1
+ import BaseLanguage from '../classes/BaseLanguage.mjs';
2
2
 
3
- class N2WordsEN extends N2WordsBase {
4
- constructor() {
5
- super();
6
-
7
- this.negativeWord = 'minus';
8
- this.separatorWord = 'point';
9
- this.zero = 'zero';
10
- this.cards = [
11
- { '1000000000000000000000000000': 'octillion' },
12
- { '1000000000000000000000000': 'septillion' },
13
- { '1000000000000000000000': 'sextillion' },
14
- { '1000000000000000000': 'quintillion' },
15
- { '1000000000000000': 'quadrillion' },
16
- { '1000000000000': 'trillion' },
17
- { '1000000000': 'billion' },
18
- { '1000000': 'million' },
19
- { '1000': 'thousand' },
20
- { '100': 'hundred' },
21
- { '90': 'ninety' },
22
- { '80': 'eighty' },
23
- { '70': 'seventy' },
24
- { '60': 'sixty' },
25
- { '50': 'fifty' },
26
- { '40': 'forty' },
27
- { '30': 'thirty' },
28
- { '20': 'twenty' },
29
- { '19': 'nineteen' },
30
- { '18': 'eighteen' },
31
- { '17': 'seventeen' },
32
- { '16': 'sixteen' },
33
- { '15': 'fifteen' },
34
- { '14': 'fourteen' },
35
- { '13': 'thirteen' },
36
- { '12': 'twelve' },
37
- { '11': 'eleven' },
38
- { '10': 'ten' },
39
- { '9': 'nine' },
40
- { '8': 'eight' },
41
- { '7': 'seven' },
42
- { '6': 'six' },
43
- { '5': 'five' },
44
- { '4': 'four' },
45
- { '3': 'three' },
46
- { '2': 'two' },
47
- { '1': 'one' },
48
- { '0': 'zero' }
49
- ];
3
+ /**
4
+ * This class is for converting numbers to english words.
5
+ */
6
+ class English extends BaseLanguage {
7
+ constructor(options) {
8
+ super(Object.assign({
9
+ negativeWord: 'minus',
10
+ separatorWord: 'point',
11
+ zero: 'zero'
12
+ }, options), [
13
+ [1000000000000000000000000000n, 'octillion'],
14
+ [1000000000000000000000000n, 'septillion'],
15
+ [1000000000000000000000n, 'sextillion'],
16
+ [1000000000000000000n, 'quintillion'],
17
+ [1000000000000000n, 'quadrillion'],
18
+ [1000000000000n, 'trillion'],
19
+ [1000000000n, 'billion'],
20
+ [1000000n, 'million'],
21
+ [1000n, 'thousand'],
22
+ [100n, 'hundred'],
23
+ [90n, 'ninety'],
24
+ [80n, 'eighty'],
25
+ [70n, 'seventy'],
26
+ [60n, 'sixty'],
27
+ [50n, 'fifty'],
28
+ [40n, 'forty'],
29
+ [30n, 'thirty'],
30
+ [20n, 'twenty'],
31
+ [19n, 'nineteen'],
32
+ [18n, 'eighteen'],
33
+ [17n, 'seventeen'],
34
+ [16n, 'sixteen'],
35
+ [15n, 'fifteen'],
36
+ [14n, 'fourteen'],
37
+ [13n, 'thirteen'],
38
+ [12n, 'twelve'],
39
+ [11n, 'eleven'],
40
+ [10n, 'ten'],
41
+ [9n, 'nine'],
42
+ [8n, 'eight'],
43
+ [7n, 'seven'],
44
+ [6n, 'six'],
45
+ [5n, 'five'],
46
+ [4n, 'four'],
47
+ [3n, 'three'],
48
+ [2n, 'two'],
49
+ [1n, 'one'],
50
+ [0n, 'zero']
51
+ ]);
50
52
  }
51
53
 
52
54
  /**
53
- *
54
- *
55
+ * Merge word set pairs
55
56
  * @param {object} lPair {'one':1}
56
57
  * @param {object} rPair {'hundred':100}
57
58
  * @returns {object} {'one hundred': 100}
58
59
  */
59
60
  merge(lPair, rPair) {
60
- const lText = Object.keys(lPair)[0]; const lNum = parseInt(Object.values(lPair)[0]);
61
- const rText = Object.keys(rPair)[0]; const rNum = parseInt(Object.values(rPair)[0]);
61
+ const lText = Object.keys(lPair)[0];
62
+ const lNum = parseInt(Object.values(lPair)[0]);
63
+ const rText = Object.keys(rPair)[0];
64
+ const rNum = parseInt(Object.values(rPair)[0]);
65
+
62
66
  if (lNum == 1 && rNum < 100) return { [rText]: rNum };
63
67
  else if (100 > lNum && lNum > rNum) return { [`${lText}-${rText}`]: lNum + rNum };
64
68
  else if (lNum >= 100 && 100 > rNum) return { [`${lText} and ${rText}`]: lNum + rNum };
65
69
  else if (rNum > lNum) return { [`${lText} ${rText}`]: lNum * rNum };
70
+
66
71
  return { [`${lText} ${rText}`]: lNum + rNum };
67
72
  }
68
73
  }
69
74
 
70
- export default function(n) {
71
- return new N2WordsEN().floatToCardinal(n);
75
+ /**
76
+ * Converts a value to cardinal (written) form.
77
+ * @param {number|string} value Number to be convert.
78
+ * @param {object} options Options for class.
79
+ * @throws {Error} Value cannot be invalid.
80
+ * @returns {string} Value in cardinal (written) format.
81
+ */
82
+ export default function(value, options) {
83
+ return new English(options).floatToCardinal(value);
72
84
  }