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/ES.mjs CHANGED
@@ -1,58 +1,63 @@
1
- import N2WordsBase from '../classes/N2WordsBase.mjs';
1
+ import BaseLanguage from '../classes/BaseLanguage.mjs';
2
2
 
3
- export class N2WordsES extends N2WordsBase {
4
- constructor() {
5
- super();
3
+ export class N2WordsES extends BaseLanguage {
4
+ genderStem;
6
5
 
7
- this.genderStem = 'o';
8
- this.negativeWord = 'menos';
9
- this.separatorWord = 'punto';
10
- this.zero = 'cero';
11
- this.cards = [
12
- { '1000000000000000000000000': 'cuatrillón' },
13
- { '1000000000000000000': 'trillón' },
14
- { '1000000000000': 'billón' },
15
- { '1000000': 'millón' },
16
- { '1000': 'mil' },
17
- { '100': 'cien' },
18
- { '90': 'noventa' },
19
- { '80': 'ochenta' },
20
- { '70': 'setenta' },
21
- { '60': 'sesenta' },
22
- { '50': 'cincuenta' },
23
- { '40': 'cuarenta' },
24
- { '30': 'treinta' },
25
- { '29': 'veintinueve' },
26
- { '28': 'veintiocho' },
27
- { '27': 'veintisiete' },
28
- { '26': 'veintiséis' },
29
- { '25': 'veinticinco' },
30
- { '24': 'veinticuatro' },
31
- { '23': 'veintitrés' },
32
- { '22': 'veintidós' },
33
- { '21': 'veintiuno' },
34
- { '20': 'veinte' },
35
- { '19': 'diecinueve' },
36
- { '18': 'dieciocho' },
37
- { '17': 'diecisiete' },
38
- { '16': 'dieciseis' },
39
- { '15': 'quince' },
40
- { '14': 'catorce' },
41
- { '13': 'trece' },
42
- { '12': 'doce' },
43
- { '11': 'once' },
44
- { '10': 'diez' },
45
- { '9': 'nueve' },
46
- { '8': 'ocho' },
47
- { '7': 'siete' },
48
- { '6': 'seis' },
49
- { '5': 'cinco' },
50
- { '4': 'cuatro' },
51
- { '3': 'tres' },
52
- { '2': 'dos' },
53
- { '1': 'uno' },
54
- { '0': 'cero' }
55
- ];
6
+ constructor(options) {
7
+ options = Object.assign({
8
+ negativeWord: 'menos',
9
+ separatorWord: 'punto',
10
+ zero: 'cero',
11
+ genderStem: 'o'
12
+ }, options);
13
+
14
+ super(options, [
15
+ [1000000000000000000000000n, 'cuatrillón'],
16
+ [1000000000000000000n, 'trillón'],
17
+ [1000000000000n, 'billón'],
18
+ [1000000n, 'millón'],
19
+ [1000n, 'mil'],
20
+ [100n, 'cien'],
21
+ [90n, 'noventa'],
22
+ [80n, 'ochenta'],
23
+ [70n, 'setenta'],
24
+ [60n, 'sesenta'],
25
+ [50n, 'cincuenta'],
26
+ [40n, 'cuarenta'],
27
+ [30n, 'treinta'],
28
+ [29n, 'veintinueve'],
29
+ [28n, 'veintiocho'],
30
+ [27n, 'veintisiete'],
31
+ [26n, 'veintiséis'],
32
+ [25n, 'veinticinco'],
33
+ [24n, 'veinticuatro'],
34
+ [23n, 'veintitrés'],
35
+ [22n, 'veintidós'],
36
+ [21n, 'veintiuno'],
37
+ [20n, 'veinte'],
38
+ [19n, 'diecinueve'],
39
+ [18n, 'dieciocho'],
40
+ [17n, 'diecisiete'],
41
+ [16n, 'dieciseis'],
42
+ [15n, 'quince'],
43
+ [14n, 'catorce'],
44
+ [13n, 'trece'],
45
+ [12n, 'doce'],
46
+ [11n, 'once'],
47
+ [10n, 'diez'],
48
+ [9n, 'nueve'],
49
+ [8n, 'ocho'],
50
+ [7n, 'siete'],
51
+ [6n, 'seis'],
52
+ [5n, 'cinco'],
53
+ [4n, 'cuatro'],
54
+ [3n, 'tres'],
55
+ [2n, 'dos'],
56
+ [1n, 'uno'],
57
+ [0n, 'cero']
58
+ ]);
59
+
60
+ this.genderStem = options.genderStem;
56
61
  }
57
62
 
58
63
  merge(curr, next) {
@@ -93,6 +98,13 @@ export class N2WordsES extends N2WordsBase {
93
98
  }
94
99
  }
95
100
 
96
- export default function(n) {
97
- return new N2WordsES().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 N2WordsES(options).floatToCardinal(value);
98
110
  }
package/lib/i18n/FA.mjs CHANGED
@@ -1,92 +1,104 @@
1
- import N2WordsAbs from '../classes/N2WordsAbs.mjs';
1
+ import AbstractLanguage from '../classes/AbstractLanguage.mjs';
2
2
 
3
- export class N2WordsFA extends N2WordsAbs {
4
- constructor() {
5
- super();
3
+ export class N2WordsFA extends AbstractLanguage {
4
+ namedNumbers = {
5
+ 0: 'صفر',
6
+ 1: 'یک',
7
+ 2: 'دو',
8
+ 3: 'سه',
9
+ 4: 'چهار',
10
+ 5: 'پنج',
11
+ 6: 'شش',
12
+ 7: 'هفت',
13
+ 8: 'هشت',
14
+ 9: 'نه',
15
+ 10: 'ده',
16
+ 11: 'یازده',
17
+ 12: 'دوازده',
18
+ 13: 'سیزده',
19
+ 14: 'چهارده',
20
+ 15: 'پانزده',
21
+ 16: 'شانزده',
22
+ 17: 'هفده',
23
+ 18: 'هجده',
24
+ 19: 'نوزده',
25
+ 20: 'بیست',
26
+ 30: 'سی',
27
+ 40: 'چهل',
28
+ 50: 'پنجاه',
29
+ 60: 'شصت',
30
+ 70: 'هفتاد',
31
+ 80: 'هشتاد',
32
+ 90: 'نود',
33
+ 100: 'صد',
34
+ 200: 'دویست',
35
+ 300: 'سيصد',
36
+ 400: 'چهار صد',
37
+ 500: 'پانصد',
38
+ 600: 'ششصد',
39
+ 700: 'هفتصد',
40
+ 800: 'هشتصد',
41
+ 900: 'نهصد',
42
+ 1000: 'هزار',
43
+ 1000000: 'میلیون',
44
+ };
6
45
 
7
- this.negativeWord = 'منفى';
8
- this.separatorWord = 'ممیّز';
9
- this.zero = 'صفر';
10
- this.namedNumbers = {
11
- 0: 'صفر',
12
- 1: 'یک',
13
- 2: 'دو',
14
- 3: 'سه',
15
- 4: 'چهار',
16
- 5: 'پنج',
17
- 6: 'شش',
18
- 7: 'هفت',
19
- 8: 'هشت',
20
- 9: 'نه',
21
- 10: 'ده',
22
- 11: 'یازده',
23
- 12: 'دوازده',
24
- 13: 'سیزده',
25
- 14: 'چهارده',
26
- 15: 'پانزده',
27
- 16: 'شانزده',
28
- 17: 'هفده',
29
- 18: 'هجده',
30
- 19: 'نوزده',
31
- 20: 'بیست',
32
- 30: 'سی',
33
- 40: 'چهل',
34
- 50: 'پنجاه',
35
- 60: 'شصت',
36
- 70: 'هفتاد',
37
- 80: 'هشتاد',
38
- 90: 'نود',
39
- 100: 'صد',
40
- 200: 'دویست',
41
- 300: 'سيصد',
42
- 400: 'چهار صد',
43
- 500: 'پانصد',
44
- 600: 'ششصد',
45
- 700: 'هفتصد',
46
- 800: 'هشتصد',
47
- 900: 'نهصد',
48
- 1000: 'هزار',
49
- 1000000: 'میلیون',
50
- };
46
+ constructor(options) {
47
+ super(Object.assign({
48
+ negativeWord: 'منفى',
49
+ separatorWord: 'ممیّز',
50
+ zero: 'صفر'
51
+ }, options));
51
52
  }
52
53
 
53
54
  toCardinal(number) {
54
55
  if (this.namedNumbers[number]) {
55
56
  return this.namedNumbers[number];
56
57
  }
57
- if (number > 20 && number < 100) {
58
- let xone = number % 10;
58
+
59
+ if (number > 20n && number < 100n) {
60
+ let xone = number % 10n;
59
61
  let xten = number - xone;
60
62
  return `${this.namedNumbers[xten]} و ${this.namedNumbers[xone]}`;
61
63
  }
62
- if (number > 100 && number < 1000) {
63
- let xhundred = 100 * parseInt(number / 100);
64
+
65
+ if (number > 100n && number < 1000n) {
66
+ let xhundred = 100n * (number / 100n);
64
67
  let tail = this.toCardinal(number - xhundred);
65
68
  return `${this.namedNumbers[xhundred]} و ${tail}`;
66
69
  }
67
- if (number > 1000 && number < 1000000) {
68
- let thousandMultiplier = parseInt(number / 1000);
70
+
71
+ if (number > 1000n && number < 1000000n) {
72
+ let thousandMultiplier = number / 1000n;
69
73
  let namedThousandMultiplier =
70
- (thousandMultiplier === 1
74
+ (thousandMultiplier == 1n
71
75
  ? ''
72
76
  : this.toCardinal(thousandMultiplier)) +
73
77
  ' ' +
74
78
  this.namedNumbers[1000];
75
- let tailNumber = number - thousandMultiplier * 1000;
76
- let tail = tailNumber === 0 ? '' : ' ' + this.toCardinal(tailNumber);
79
+ let tailNumber = number - thousandMultiplier * 1000n;
80
+ let tail = tailNumber == 0n ? '' : ' ' + this.toCardinal(tailNumber);
77
81
  return `${namedThousandMultiplier}${tail}`;
78
82
  }
79
- if (number > 1000000) {
80
- let millionMultiplier = parseInt(number / 1000000);
83
+
84
+ if (number > 1000000n) {
85
+ let millionMultiplier = number / 1000000n;
81
86
  let namedMillion =
82
87
  this.toCardinal(millionMultiplier) + ' ' + this.namedNumbers[1000000];
83
- let tailNumber = number - millionMultiplier * 1000000;
84
- let tail = tailNumber === 0 ? '' : ' و ' + this.toCardinal(tailNumber);
88
+ let tailNumber = number - millionMultiplier * 1000000n;
89
+ let tail = tailNumber == 0n ? '' : ' و ' + this.toCardinal(tailNumber);
85
90
  return `${namedMillion}${tail}`;
86
91
  }
87
92
  }
88
93
  }
89
94
 
90
- export default function(n) {
91
- return new N2WordsFA().floatToCardinal(n);
95
+ /**
96
+ * Converts a value to cardinal (written) form.
97
+ * @param {number|string} value Number to be convert.
98
+ * @param {object} options Options for class.
99
+ * @throws {Error} Value cannot be invalid.
100
+ * @returns {string} Value in cardinal (written) format.
101
+ */
102
+ export default function(value, options) {
103
+ return new N2WordsFA(options).floatToCardinal(value);
92
104
  }
package/lib/i18n/FR.mjs CHANGED
@@ -1,50 +1,49 @@
1
- import N2WordsBase from '../classes/N2WordsBase.mjs';
1
+ import BaseLanguage from '../classes/BaseLanguage.mjs';
2
2
 
3
- export class N2WordsFR extends N2WordsBase {
4
- constructor() {
5
- super();
6
-
7
- this.negativeWord = 'moins';
8
- this.separatorWord = 'virgule';
9
- this.zero = 'zéro';
10
- this.cards = [
11
- { '1000000000000000000000000000': 'quadrilliard' },
12
- { '1000000000000000000000000': 'quadrillion' },
13
- { '1000000000000000000000': 'trilliard' },
14
- { '1000000000000000000': 'trillion' },
15
- { '1000000000000000': 'billiard' },
16
- { '1000000000000': 'billion' },
17
- { '1000000000': 'milliard' },
18
- { '1000000': 'million' },
19
- { '1000': 'mille' },
20
- { '100': 'cent' },
21
- { '80': 'quatre-vingts' },
22
- { '60': 'soixante' },
23
- { '50': 'cinquante' },
24
- { '40': 'quarante' },
25
- { '30': 'trente' },
26
- { '20': 'vingt' },
27
- { '19': 'dix-neuf' },
28
- { '18': 'dix-huit' },
29
- { '17': 'dix-sept' },
30
- { '16': 'seize' },
31
- { '15': 'quinze' },
32
- { '14': 'quatorze' },
33
- { '13': 'treize' },
34
- { '12': 'douze' },
35
- { '11': 'onze' },
36
- { '10': 'dix' },
37
- { '9': 'neuf' },
38
- { '8': 'huit' },
39
- { '7': 'sept' },
40
- { '6': 'six' },
41
- { '5': 'cinq' },
42
- { '4': 'quatre' },
43
- { '3': 'trois' },
44
- { '2': 'deux' },
45
- { '1': 'un' },
46
- { '0': 'zéro' }
47
- ];
3
+ export class N2WordsFR extends BaseLanguage {
4
+ constructor(options) {
5
+ super(Object.assign({
6
+ negativeWord: 'moins',
7
+ separatorWord: 'virgule',
8
+ zero: 'zéro'
9
+ }, options), [
10
+ [1000000000000000000000000000n, 'quadrilliard'],
11
+ [1000000000000000000000000n, 'quadrillion'],
12
+ [1000000000000000000000n, 'trilliard'],
13
+ [1000000000000000000n, 'trillion'],
14
+ [1000000000000000n, 'billiard'],
15
+ [1000000000000n, 'billion'],
16
+ [1000000000n, 'milliard'],
17
+ [1000000n, 'million'],
18
+ [1000n, 'mille'],
19
+ [100n, 'cent'],
20
+ [80n, 'quatre-vingts'],
21
+ [60n, 'soixante'],
22
+ [50n, 'cinquante'],
23
+ [40n, 'quarante'],
24
+ [30n, 'trente'],
25
+ [20n, 'vingt'],
26
+ [19n, 'dix-neuf'],
27
+ [18n, 'dix-huit'],
28
+ [17n, 'dix-sept'],
29
+ [16n, 'seize'],
30
+ [15n, 'quinze'],
31
+ [14n, 'quatorze'],
32
+ [13n, 'treize'],
33
+ [12n, 'douze'],
34
+ [11n, 'onze'],
35
+ [10n, 'dix'],
36
+ [9n, 'neuf'],
37
+ [8n, 'huit'],
38
+ [7n, 'sept'],
39
+ [6n, 'six'],
40
+ [5n, 'cinq'],
41
+ [4n, 'quatre'],
42
+ [3n, 'trois'],
43
+ [2n, 'deux'],
44
+ [1n, 'un'],
45
+ [0n, 'zéro']
46
+ ]);
48
47
  }
49
48
 
50
49
  merge(curr, next) { // {'cent':100}, {'vingt-cinq':25}
@@ -81,6 +80,13 @@ export class N2WordsFR extends N2WordsBase {
81
80
  }
82
81
  }
83
82
 
84
- export default function(n) {
85
- return new N2WordsFR().floatToCardinal(n);
83
+ /**
84
+ * Converts a value to cardinal (written) form.
85
+ * @param {number|string} value Number to be convert.
86
+ * @param {object} options Options for class.
87
+ * @throws {Error} Value cannot be invalid.
88
+ * @returns {string} Value in cardinal (written) format.
89
+ */
90
+ export default function(value, options) {
91
+ return new N2WordsFR(options).floatToCardinal(value);
86
92
  }
package/lib/i18n/HE.mjs CHANGED
@@ -1,34 +1,85 @@
1
1
  import {N2WordsRU} from './RU.mjs';
2
2
 
3
3
  export class N2WordsHE extends N2WordsRU {
4
- constructor() {
5
- super();
4
+ and;
6
5
 
7
- this.negativeWord = 'מינוס'; //TODO: Needs confirmation
8
- this.separatorWord; //TODO
9
- this.zero = 'אפס';
10
- this.and = 'ו';
11
- this.ones = { 1: 'אחת', 2: 'שתים', 3: 'שלש', 4: 'ארבע', 5: 'חמש', 6: 'שש', 7: 'שבע', 8: 'שמונה', 9: 'תשע' };
12
- this.tens = {
13
- 0: 'עשר', 1: 'אחת עשרה', 2: 'שתים עשרה', 3: 'שלש עשרה', 4: 'ארבע עשרה',
14
- 5: 'חמש עשרה', 6: 'שש עשרה', 7: 'שבע עשרה', 8: 'שמונה עשרה', 9: 'תשע עשרה'
15
- };
16
- this.twenties = {
17
- 2: 'עשרים', 3: 'שלשים', 4: 'ארבעים', 5: 'חמישים', 6: 'ששים', 7: 'שבעים', 8: 'שמונים', 9: 'תשעים'
18
- };
19
- this.hundreds = { 1: 'מאה', 2: 'מאתיים', 3: 'מאות' };
20
- this.thousands = {
21
- 1: 'אלף', 2: 'אלפיים', 3: 'שלשת אלפים', 4: 'ארבעת אלפים',
22
- 5: 'חמשת אלפים', 6: 'ששת אלפים', 7: 'שבעת אלפים', 8: 'שמונת אלפים', 9: 'תשעת אלפים'
23
- };
6
+ ones = {
7
+ 1: 'אחת',
8
+ 2: 'שתים',
9
+ 3: 'שלש',
10
+ 4: 'ארבע',
11
+ 5: 'חמש',
12
+ 6: 'שש',
13
+ 7: 'שבע',
14
+ 8: 'שמונה',
15
+ 9: 'תשע'
16
+ };
17
+
18
+ tens = {
19
+ 0: 'עשר',
20
+ 1: 'אחת עשרה',
21
+ 2: 'שתים עשרה',
22
+ 3: 'שלש עשרה',
23
+ 4: 'ארבע עשרה',
24
+ 5: 'חמש עשרה',
25
+ 6: 'שש עשרה',
26
+ 7: 'שבע עשרה',
27
+ 8: 'שמונה עשרה',
28
+ 9: 'תשע עשרה'
29
+ };
30
+
31
+ twenties = {
32
+ 2: 'עשרים',
33
+ 3: 'שלשים',
34
+ 4: 'ארבעים',
35
+ 5: 'חמישים',
36
+ 6: 'ששים',
37
+ 7: 'שבעים',
38
+ 8: 'שמונים',
39
+ 9: 'תשעים'
40
+ };
41
+
42
+ hundreds = {
43
+ 1: 'מאה',
44
+ 2: 'מאתיים',
45
+ 3: 'מאות'
46
+ };
47
+
48
+ thousands = {
49
+ 1: 'אלף',
50
+ 2: 'אלפיים',
51
+ 3: 'שלשת אלפים',
52
+ 4: 'ארבעת אלפים',
53
+ 5: 'חמשת אלפים',
54
+ 6: 'ששת אלפים',
55
+ 7: 'שבעת אלפים',
56
+ 8: 'שמונת אלפים',
57
+ 9: 'תשעת אלפים'
58
+ };
59
+
60
+ constructor(options) {
61
+ /**
62
+ * @todo Confirm `negativeWord`
63
+ * @todo Set `separatorWord`
64
+ */
65
+ options = Object.assign({
66
+ negativeWord: 'מינוס',
67
+ //separatorWord: ,
68
+ zero: 'אפס',
69
+ and: 'ו'
70
+ }, options);
71
+
72
+ super(options);
73
+
74
+ this.and = options.and;
24
75
  }
25
76
 
26
77
  toCardinal(number) {
27
- if (parseInt(number) == 0) {
78
+ if (number == 0) {
28
79
  return this.zero;
29
80
  }
30
81
  const words = [];
31
- const chunks = this.splitByX(JSON.stringify(number), 3);
82
+ const chunks = this.splitByX(number.toString(), 3);
32
83
  let i = chunks.length;
33
84
  for (let j = 0; j < chunks.length; j++) {
34
85
  const x = chunks[j];
@@ -67,6 +118,13 @@ export class N2WordsHE extends N2WordsRU {
67
118
  }
68
119
  }
69
120
 
70
- export default function(n) {
71
- return new N2WordsHE().floatToCardinal(n);
121
+ /**
122
+ * Converts a value to cardinal (written) form.
123
+ * @param {number|string} value Number to be convert.
124
+ * @param {object} options Options for class.
125
+ * @throws {Error} Value cannot be invalid.
126
+ * @returns {string} Value in cardinal (written) format.
127
+ */
128
+ export default function(value, options) {
129
+ return new N2WordsHE(options).floatToCardinal(value);
72
130
  }