n2words 1.9.0 → 1.11.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/NO.mjs CHANGED
@@ -1,60 +1,69 @@
1
1
  import N2WordsBase from '../classes/N2WordsBase.mjs';
2
2
 
3
- export default function () {
4
- N2WordsBase.call(this);
3
+ export class N2WordsNO extends N2WordsBase {
4
+ constructor() {
5
+ super();
5
6
 
6
- this.negative_word = 'minus';
7
- this.separator_word = 'komma';
8
- this.ZERO = 'null';
9
- this.cards = [
10
- { '1000000000000000000000000000000000': 'quintillard' },
11
- { '1000000000000000000000000000000': 'quintillion' },
12
- { '1000000000000000000000000000': 'quadrillard' },
13
- { '1000000000000000000000000': 'quadrillion' },
14
- { '1000000000000000000000': 'trillard' },
15
- { 1000000000000000000: 'trillion' },
16
- { 1000000000000000: 'billard' },
17
- { 1000000000000: 'billion' },
18
- { 1000000000: 'millard' },
19
- { 1000000: 'million' },
20
- { 1000: 'tusen' },
21
- { 100: 'hundre' },
22
- { 90: 'nitti' },
23
- { 80: 'åtti' },
24
- { 70: 'sytti' },
25
- { 60: 'seksti' },
26
- { 50: 'femti' },
27
- { 40: 'førti' },
28
- { 30: 'tretti' },
29
- { 20: 'tjue' },
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: 'åtte' },
42
- { 7: 'syv' },
43
- { 6: 'seks' },
44
- { 5: 'fem' },
45
- { 4: 'fire' },
46
- { 3: 'tre' },
47
- { 2: 'to' },
48
- { 1: 'en' },
49
- { 0: 'null' }
50
- ];
51
- this.merge = (lpair, rpair) => { // {'one':1}, {'hundred':100}
52
- const ltext = Object.keys(lpair)[0]; const lnum = parseInt(Object.values(lpair)[0]);
53
- const rtext = Object.keys(rpair)[0]; const rnum = parseInt(Object.values(rpair)[0]);
54
- if (lnum == 1 && rnum < 100) return { [rtext]: rnum };
55
- else if (lnum < 100 && lnum > rnum) return { [`${ltext}-${rtext}`]: lnum + rnum };
56
- else if (lnum >= 100 && rnum < 100) return { [`${ltext} og ${rtext}`]: lnum + rnum };
57
- else if (rnum > lnum) return { [`${ltext} ${rtext}`]: lnum * rnum };
58
- return { [`${ltext}, ${rtext}`]: lnum + rnum };
59
- };
7
+ this.negativeWord = 'minus';
8
+ this.separatorWord = 'komma';
9
+ this.zero = 'null';
10
+ this.cards = [
11
+ { '1000000000000000000000000000000000': 'quintillard' },
12
+ { '1000000000000000000000000000000': 'quintillion' },
13
+ { '1000000000000000000000000000': 'quadrillard' },
14
+ { '1000000000000000000000000': 'quadrillion' },
15
+ { '1000000000000000000000': 'trillard' },
16
+ { 1000000000000000000: 'trillion' },
17
+ { 1000000000000000: 'billard' },
18
+ { 1000000000000: 'billion' },
19
+ { 1000000000: 'millard' },
20
+ { 1000000: 'million' },
21
+ { 1000: 'tusen' },
22
+ { 100: 'hundre' },
23
+ { 90: 'nitti' },
24
+ { 80: 'åtti' },
25
+ { 70: 'sytti' },
26
+ { 60: 'seksti' },
27
+ { 50: 'femti' },
28
+ { 40: 'førti' },
29
+ { 30: 'tretti' },
30
+ { 20: 'tjue' },
31
+ { 19: 'nitten' },
32
+ { 18: 'atten' },
33
+ { 17: 'sytten' },
34
+ { 16: 'seksten' },
35
+ { 15: 'femten' },
36
+ { 14: 'fjorten' },
37
+ { 13: 'tretten' },
38
+ { 12: 'tolv' },
39
+ { 11: 'elleve' },
40
+ { 10: 'ti' },
41
+ { 9: 'ni' },
42
+ { 8: 'åtte' },
43
+ { 7: 'syv' },
44
+ { 6: 'seks' },
45
+ { 5: 'fem' },
46
+ { 4: 'fire' },
47
+ { 3: 'tre' },
48
+ { 2: 'to' },
49
+ { 1: 'en' },
50
+ { 0: 'null' }
51
+ ];
52
+ }
53
+
54
+ merge(lPair, rPair) { // {'one':1}, {'hundred':100}
55
+ const lText = Object.keys(lPair)[0];
56
+ const rText = Object.keys(rPair)[0];
57
+ const lNum = parseInt(Object.values(lPair)[0]);
58
+ const rNum = parseInt(Object.values(rPair)[0]);
59
+ if (lNum == 1 && rNum < 100) return { [rText]: rNum };
60
+ else if (lNum < 100 && lNum > rNum) return { [`${lText}-${rText}`]: lNum + rNum };
61
+ else if (lNum >= 100 && rNum < 100) return { [`${lText} og ${rText}`]: lNum + rNum };
62
+ else if (rNum > lNum) return { [`${lText} ${rText}`]: lNum * rNum };
63
+ return { [`${lText}, ${rText}`]: lNum + rNum };
64
+ }
65
+ }
66
+
67
+ export default function(n) {
68
+ return new N2WordsNO().floatToCardinal(n);
60
69
  }
package/lib/i18n/PL.mjs CHANGED
@@ -1,70 +1,72 @@
1
- import Num2Word_RU from './RU.mjs';
1
+ import {N2WordsRU} from './RU.mjs';
2
2
 
3
- export default function () {
4
- Num2Word_RU.call(this);
3
+ export class N2WordsPL extends N2WordsRU {
4
+ constructor() {
5
+ super();
5
6
 
6
- this.feminine = false;
7
- this.negative_word = 'minus';
8
- this.separator_word = 'przecinek';
9
- this.ZERO = 'zero';
10
- this.ONES = {
11
- 1: 'jeden',
12
- 2: 'dwa',
13
- 3: 'trzy',
14
- 4: 'cztery',
15
- 5: 'pięć',
16
- 6: 'sześć',
17
- 7: 'siedem',
18
- 8: 'osiem',
19
- 9: 'dziewięć'
20
- };
21
- this.TENS = {
22
- 0: 'dziesięć',
23
- 1: 'jedenaście',
24
- 2: 'dwanaście',
25
- 3: 'trzynaście',
26
- 4: 'czternaście',
27
- 5: 'piętnaście',
28
- 6: 'szesnaście',
29
- 7: 'siedemnaście',
30
- 8: 'osiemnaście',
31
- 9: 'dziewiętnaście'
32
- };
33
- this.TWENTIES = {
34
- 2: 'dwadzieścia',
35
- 3: 'trzydzieści',
36
- 4: 'czterdzieści',
37
- 5: 'pięćdziesiąt',
38
- 6: 'sześćdziesiąt',
39
- 7: 'siedemdziesiąt',
40
- 8: 'osiemdziesiąt',
41
- 9: 'dziewięćdzisiąt'
42
- };
43
- this.HUNDREDS = {
44
- 1: 'sto',
45
- 2: 'dwieście',
46
- 3: 'trzysta',
47
- 4: 'czterysta',
48
- 5: 'pięćset',
49
- 6: 'sześćset',
50
- 7: 'siedemset',
51
- 8: 'osiemset',
52
- 9: 'dziewięćset'
53
- };
54
- this.THOUSANDS = {
55
- 1: ['tysiąc', 'tysiące', 'tysięcy'], // 10^ 3
56
- 2: ['milion', 'miliony', 'milionów'], // 10^ 6
57
- 3: ['miliard', 'miliardy', 'miliardów'], // 10^ 9
58
- 4: ['bilion', 'biliony', 'bilionów'], // 10^ 12
59
- 5: ['biliard', 'biliardy', 'biliardów'], // 10^ 15
60
- 6: ['trylion', 'tryliony', 'trylionów'], // 10^ 18
61
- 7: ['tryliard', 'tryliardy', 'tryliardów'], // 10^ 21
62
- 8: ['kwadrylion', 'kwadryliony', 'kwadrylionów'], // 10^ 24
63
- 9: ['kwaryliard', 'kwadryliardy', 'kwadryliardów'], // 10^ 27
64
- 10: ['kwintylion', 'kwintyliony', 'kwintylionów'], // 10^ 30
65
- };
7
+ this.feminine = false;
8
+ this.negativeWord = 'minus';
9
+ this.separatorWord = 'przecinek';
10
+ this.zero = 'zero';
11
+ this.ones = {
12
+ 1: 'jeden',
13
+ 2: 'dwa',
14
+ 3: 'trzy',
15
+ 4: 'cztery',
16
+ 5: 'pięć',
17
+ 6: 'sześć',
18
+ 7: 'siedem',
19
+ 8: 'osiem',
20
+ 9: 'dziewięć'
21
+ };
22
+ this.tens = {
23
+ 0: 'dziesięć',
24
+ 1: 'jedenaście',
25
+ 2: 'dwanaście',
26
+ 3: 'trzynaście',
27
+ 4: 'czternaście',
28
+ 5: 'piętnaście',
29
+ 6: 'szesnaście',
30
+ 7: 'siedemnaście',
31
+ 8: 'osiemnaście',
32
+ 9: 'dziewiętnaście'
33
+ };
34
+ this.twenties = {
35
+ 2: 'dwadzieścia',
36
+ 3: 'trzydzieści',
37
+ 4: 'czterdzieści',
38
+ 5: 'pięćdziesiąt',
39
+ 6: 'sześćdziesiąt',
40
+ 7: 'siedemdziesiąt',
41
+ 8: 'osiemdziesiąt',
42
+ 9: 'dziewięćdzisiąt'
43
+ };
44
+ this.hundreds = {
45
+ 1: 'sto',
46
+ 2: 'dwieście',
47
+ 3: 'trzysta',
48
+ 4: 'czterysta',
49
+ 5: 'pięćset',
50
+ 6: 'sześćset',
51
+ 7: 'siedemset',
52
+ 8: 'osiemset',
53
+ 9: 'dziewięćset'
54
+ };
55
+ this.thousands = {
56
+ 1: ['tysiąc', 'tysiące', 'tysięcy'], // 10^ 3
57
+ 2: ['milion', 'miliony', 'milionów'], // 10^ 6
58
+ 3: ['miliard', 'miliardy', 'miliardów'], // 10^ 9
59
+ 4: ['bilion', 'biliony', 'bilionów'], // 10^ 12
60
+ 5: ['biliard', 'biliardy', 'biliardów'], // 10^ 15
61
+ 6: ['trylion', 'tryliony', 'trylionów'], // 10^ 18
62
+ 7: ['tryliard', 'tryliardy', 'tryliardów'], // 10^ 21
63
+ 8: ['kwadrylion', 'kwadryliony', 'kwadrylionów'], // 10^ 24
64
+ 9: ['kwaryliard', 'kwadryliardy', 'kwadryliardów'], // 10^ 27
65
+ 10: ['kwintylion', 'kwintyliony', 'kwintylionów'], // 10^ 30
66
+ };
67
+ }
66
68
 
67
- this.pluralize = (n, forms) => {
69
+ pluralize(n, forms) {
68
70
  let form = 2;
69
71
  if (n == 1) {
70
72
  form = 0;
@@ -72,14 +74,14 @@ export default function () {
72
74
  form = 1;
73
75
  }
74
76
  return forms[form];
75
- };
77
+ }
76
78
 
77
- this.toCardinal = (number) => {
79
+ toCardinal(number) {
78
80
  if (parseInt(number) == 0) {
79
- return this.ZERO;
81
+ return this.zero;
80
82
  }
81
83
  const words = [];
82
- const chunks = this.splitbyx(JSON.stringify(number), 3);
84
+ const chunks = this.splitByX(JSON.stringify(number), 3);
83
85
  let i = chunks.length;
84
86
  for (let j = 0; j < chunks.length; j++) {
85
87
  const x = chunks[j];
@@ -87,22 +89,26 @@ export default function () {
87
89
  if (x == 0) {
88
90
  continue;
89
91
  }
90
- const [n1, n2, n3] = this.get_digits(x);
92
+ const [n1, n2, n3] = this.getDigits(x);
91
93
  if (n3 > 0) {
92
- words.push(this.HUNDREDS[n3]);
94
+ words.push(this.hundreds[n3]);
93
95
  }
94
96
  if (n2 > 1) {
95
- words.push(this.TWENTIES[n2]);
97
+ words.push(this.twenties[n2]);
96
98
  }
97
99
  if (n2 == 1) {
98
- words.push(this.TENS[n1]);
100
+ words.push(this.tens[n1]);
99
101
  } else if (n1 > 0 && !(i > 0 && x == 1)) {
100
- words.push(this.ONES[n1]);
102
+ words.push(this.ones[n1]);
101
103
  }
102
104
  if (i > 0) {
103
- words.push(this.pluralize(x, this.THOUSANDS[i]));
105
+ words.push(this.pluralize(x, this.thousands[i]));
104
106
  }
105
107
  }
106
108
  return words.join(' ');
107
- };
109
+ }
110
+ }
111
+
112
+ export default function(n) {
113
+ return new N2WordsPL().floatToCardinal(n);
108
114
  }
package/lib/i18n/PT.mjs CHANGED
@@ -1,60 +1,62 @@
1
1
  import N2WordsBase from '../classes/N2WordsBase.mjs';
2
2
 
3
- export default function () {
4
- N2WordsBase.call(this);
3
+ export class N2WordsPT extends N2WordsBase {
4
+ constructor() {
5
+ super();
5
6
 
6
- this.negative_word = 'menos';
7
- this.separator_word = 'vírgula';
8
- this.ZERO = 'zero';
9
- this.cards = [
10
- { '1000000000000000000000000': 'quatrilião' },
11
- { 1000000000000000000: 'trilião' },
12
- { 1000000000000: 'bilião' },
13
- { 1000000: 'milião' },
14
- { 1000: 'mil' },
15
- { 100: 'cem' },
16
- { 90: 'noventa' },
17
- { 80: 'oitenta' },
18
- { 70: 'setenta' },
19
- { 60: 'sessenta' },
20
- { 50: 'cinquenta' },
21
- { 40: 'quarenta' },
22
- { 30: 'trinta' },
23
- { 20: 'vinte' },
24
- { 19: 'dezanove' },
25
- { 18: 'dezoito' },
26
- { 17: 'dezassete' },
27
- { 16: 'dezasseis' },
28
- { 15: 'quinze' },
29
- { 14: 'catorze' },
30
- { 13: 'treze' },
31
- { 12: 'doze' },
32
- { 11: 'onze' },
33
- { 10: 'dez' },
34
- { 9: 'nove' },
35
- { 8: 'oito' },
36
- { 7: 'sete' },
37
- { 6: 'seis' },
38
- { 5: 'cinco' },
39
- { 4: 'quatro' },
40
- { 3: 'três' },
41
- { 2: 'dois' },
42
- { 1: 'um' },
43
- { 0: 'zero' }
44
- ];
45
- this.hundreds = {
46
- 1: 'cento',
47
- 2: 'duzentos',
48
- 3: 'trezentos',
49
- 4: 'quatrocentos',
50
- 5: 'quinhentos',
51
- 6: 'seiscentos',
52
- 7: 'setecentos',
53
- 8: 'oitocentos',
54
- 9: 'novecentos'
55
- };
7
+ this.negativeWord = 'menos';
8
+ this.separatorWord = 'vírgula';
9
+ this.zero = 'zero';
10
+ this.cards = [
11
+ { '1000000000000000000000000': 'quatrilião' },
12
+ { 1000000000000000000: 'trilião' },
13
+ { 1000000000000: 'bilião' },
14
+ { 1000000: 'milião' },
15
+ { 1000: 'mil' },
16
+ { 100: 'cem' },
17
+ { 90: 'noventa' },
18
+ { 80: 'oitenta' },
19
+ { 70: 'setenta' },
20
+ { 60: 'sessenta' },
21
+ { 50: 'cinquenta' },
22
+ { 40: 'quarenta' },
23
+ { 30: 'trinta' },
24
+ { 20: 'vinte' },
25
+ { 19: 'dezanove' },
26
+ { 18: 'dezoito' },
27
+ { 17: 'dezassete' },
28
+ { 16: 'dezasseis' },
29
+ { 15: 'quinze' },
30
+ { 14: 'catorze' },
31
+ { 13: 'treze' },
32
+ { 12: 'doze' },
33
+ { 11: 'onze' },
34
+ { 10: 'dez' },
35
+ { 9: 'nove' },
36
+ { 8: 'oito' },
37
+ { 7: 'sete' },
38
+ { 6: 'seis' },
39
+ { 5: 'cinco' },
40
+ { 4: 'quatro' },
41
+ { 3: 'três' },
42
+ { 2: 'dois' },
43
+ { 1: 'um' },
44
+ { 0: 'zero' }
45
+ ];
46
+ this.hundreds = {
47
+ 1: 'cento',
48
+ 2: 'duzentos',
49
+ 3: 'trezentos',
50
+ 4: 'quatrocentos',
51
+ 5: 'quinhentos',
52
+ 6: 'seiscentos',
53
+ 7: 'setecentos',
54
+ 8: 'oitocentos',
55
+ 9: 'novecentos'
56
+ };
57
+ }
56
58
 
57
- this.postClean = (words) => {
59
+ postClean(words) {
58
60
  const transforms = ['mil', 'milhão', 'milhões', 'mil milhões', 'bilião', 'biliões', 'mil biliões'];
59
61
  for (let i = 0; i < transforms.length; i++) {
60
62
  const ext = transforms[i];
@@ -63,37 +65,43 @@ export default function () {
63
65
  }
64
66
  }
65
67
  return words;
66
- };
68
+ }
67
69
 
68
- this.merge = (curr, next) => {
69
- let ctext = Object.keys(curr)[0]; const cnum = parseInt(Object.values(curr)[0]);
70
- let ntext = Object.keys(next)[0]; const nnum = parseInt(Object.values(next)[0]);
71
- if (cnum == 1) {
72
- if (nnum < 1000000) return { [ntext]: nnum };
73
- ctext = 'um';
74
- } else if (cnum == 100 && nnum % 1000 != 0) {
75
- ctext = 'cento';
70
+ merge(curr, next) {
71
+ let cText = Object.keys(curr)[0];
72
+ let nText = Object.keys(next)[0];
73
+ const cNum = parseInt(Object.values(curr)[0]);
74
+ const nNum = parseInt(Object.values(next)[0]);
75
+ if (cNum == 1) {
76
+ if (nNum < 1000000) return { [nText]: nNum };
77
+ cText = 'um';
78
+ } else if (cNum == 100 && nNum % 1000 != 0) {
79
+ cText = 'cento';
76
80
  }
77
81
 
78
- if (nnum < cnum) {
79
- // if (cnum < 100) {
80
- // return { [`${ctext} e ${ntext}`]: cnum + nnum }
82
+ if (nNum < cNum) {
83
+ // if (cNum < 100) {
84
+ // return { [`${cText} e ${nText}`]: cNum + nNum }
81
85
  // }
82
- return { [`${ctext} e ${ntext}`]: cnum + nnum };
83
- } else if (nnum % 1000000000 == 0 && cnum > 1) {
84
- ntext = ntext.slice(0, -4) + 'liões';
85
- } else if (nnum % 1000000 == 0 && cnum > 1) {
86
- ntext = ntext.slice(0, -4) + 'lhões';
86
+ return { [`${cText} e ${nText}`]: cNum + nNum };
87
+ } else if (nNum % 1000000000 == 0 && cNum > 1) {
88
+ nText = nText.slice(0, -4) + 'liões';
89
+ } else if (nNum % 1000000 == 0 && cNum > 1) {
90
+ nText = nText.slice(0, -4) + 'lhões';
87
91
  }
88
92
 
89
- if (ntext == 'milião') ntext = 'milhão';
93
+ if (nText == 'milião') nText = 'milhão';
90
94
 
91
- if (nnum == 100) {
92
- ctext = this.hundreds[cnum];
93
- ntext = '';
95
+ if (nNum == 100) {
96
+ cText = this.hundreds[cNum];
97
+ nText = '';
94
98
  } else {
95
- ntext = ' ' + ntext;
99
+ nText = ' ' + nText;
96
100
  }
97
- return { [`${ctext}${ntext}`]: cnum * nnum };
98
- };
101
+ return { [`${cText}${nText}`]: cNum * nNum };
102
+ }
103
+ }
104
+
105
+ export default function(n) {
106
+ return new N2WordsPT().floatToCardinal(n);
99
107
  }