n2words 1.10.0 → 1.11.1
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 -1
- package/CHANGELOG.md +23 -0
- package/README.md +18 -20
- package/dist/n2words.js +1 -1
- package/lib/classes/N2WordsAbs.mjs +5 -4
- package/lib/i18n/EN.mjs +1 -1
- package/lib/i18n/HR.mjs +117 -0
- package/lib/i18n/NL.mjs +1 -1
- package/lib/i18n/SR.mjs +9 -9
- package/lib/n2words.mjs +4 -0
- package/package.json +15 -14
- package/webpack.config.js +1 -4
|
@@ -21,8 +21,8 @@ export default class {
|
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
*
|
|
24
|
-
* @param {number} decimalPart
|
|
25
|
-
* @returns {string}
|
|
24
|
+
* @param {number} decimalPart Decimal part of the number to convert.
|
|
25
|
+
* @returns {string} Decimal part in written format.
|
|
26
26
|
*/
|
|
27
27
|
toDecimal(decimalPart) {
|
|
28
28
|
let decimalPartArray = Array.from(decimalPart);
|
|
@@ -39,8 +39,9 @@ export default class {
|
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
*
|
|
42
|
-
* @param {number} value
|
|
43
|
-
* @
|
|
42
|
+
* @param {number} value Float number.
|
|
43
|
+
* @throws {TypeError} Value must be a valid number.
|
|
44
|
+
* @returns {string|undefined} Cardinal number in written format.
|
|
44
45
|
*/
|
|
45
46
|
floatToCardinal(value) {
|
|
46
47
|
if (isNaN(Number(value))) {
|
package/lib/i18n/EN.mjs
CHANGED
|
@@ -54,7 +54,7 @@ class N2WordsEN extends N2WordsBase {
|
|
|
54
54
|
*
|
|
55
55
|
* @param {object} lPair {'one':1}
|
|
56
56
|
* @param {object} rPair {'hundred':100}
|
|
57
|
-
* @returns {object}
|
|
57
|
+
* @returns {object} {'one hundred': 100}
|
|
58
58
|
*/
|
|
59
59
|
merge(lPair, rPair) {
|
|
60
60
|
const lText = Object.keys(lPair)[0]; const lNum = parseInt(Object.values(lPair)[0]);
|
package/lib/i18n/HR.mjs
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import {N2WordsRU} from './RU.mjs';
|
|
2
|
+
|
|
3
|
+
export class N2WordsHR extends N2WordsRU {
|
|
4
|
+
constructor() {
|
|
5
|
+
super();
|
|
6
|
+
|
|
7
|
+
this.negativeWord = 'minus';
|
|
8
|
+
this.separatorWord = 'zarez';
|
|
9
|
+
this.zero = 'nula';
|
|
10
|
+
this.ones = {
|
|
11
|
+
1: ['jedan', 'jedna'],
|
|
12
|
+
2: ['dva', 'dvije'],
|
|
13
|
+
3: ['tri', 'tri'],
|
|
14
|
+
4: ['četiri', 'četiri'],
|
|
15
|
+
5: ['pet', 'pet'],
|
|
16
|
+
6: ['šest', 'šest'],
|
|
17
|
+
7: ['sedam', 'sedam'],
|
|
18
|
+
8: ['osam', 'osam'],
|
|
19
|
+
9: ['devet', 'devet']
|
|
20
|
+
};
|
|
21
|
+
this.tens = {
|
|
22
|
+
0: 'deset',
|
|
23
|
+
1: 'jedanaest',
|
|
24
|
+
2: 'dvanaest',
|
|
25
|
+
3: 'trinaest',
|
|
26
|
+
4: 'četrnaest',
|
|
27
|
+
5: 'petnaest',
|
|
28
|
+
6: 'šesnaest',
|
|
29
|
+
7: 'sedamnaest',
|
|
30
|
+
8: 'osamnaest',
|
|
31
|
+
9: 'devetnaest'
|
|
32
|
+
};
|
|
33
|
+
this.twenties = {
|
|
34
|
+
2: 'dvadeset',
|
|
35
|
+
3: 'trideset',
|
|
36
|
+
4: 'četrdeset',
|
|
37
|
+
5: 'pedeset',
|
|
38
|
+
6: 'šezdeset',
|
|
39
|
+
7: 'sedamdeset',
|
|
40
|
+
8: 'osamdeset',
|
|
41
|
+
9: 'devedeset'
|
|
42
|
+
};
|
|
43
|
+
this.hundreds = {
|
|
44
|
+
1: 'sto',
|
|
45
|
+
2: 'dvjesto',
|
|
46
|
+
3: 'tristo',
|
|
47
|
+
4: 'četiristo',
|
|
48
|
+
5: 'petsto',
|
|
49
|
+
6: 'šesto',
|
|
50
|
+
7: 'sedamsto',
|
|
51
|
+
8: 'osamsto',
|
|
52
|
+
9: 'devetsto'
|
|
53
|
+
};
|
|
54
|
+
this.SCALE = {
|
|
55
|
+
0: ['', '', '', false],
|
|
56
|
+
1: ['tisuća', 'tisuće', 'tisuća', true], // 10 ^ 3
|
|
57
|
+
2: ['milijun', 'milijuna', 'milijuna', false], // 10 ^ 6
|
|
58
|
+
3: ['milijarda', 'milijarde', 'milijarda', false], // 10 ^ 9
|
|
59
|
+
4: ['bilijun', 'bilijuna', 'bilijuna', false], // 10 ^ 12
|
|
60
|
+
5: ['bilijarda', 'bilijarde', 'bilijarda', false], // 10 ^ 15
|
|
61
|
+
6: ['trilijun', 'trilijuna', 'trilijuna', false], // 10 ^ 18
|
|
62
|
+
7: ['trilijarda', 'trilijarde', 'trilijarda', false], // 10 ^ 21
|
|
63
|
+
8: ['kvadrilijun', 'kvadrilijuna', 'kvadrilijuna', false], // 10 ^ 24
|
|
64
|
+
9: ['kvadrilijarda', 'kvadrilijarde', 'kvadrilijarda', false], // 10 ^ 27
|
|
65
|
+
10: ['kvintilijun', 'kvintilijuna', 'kvintilijuna', false], // 10 ^ 30
|
|
66
|
+
};
|
|
67
|
+
this.feminine = false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
pluralize(n, forms) {
|
|
71
|
+
let form = 2;
|
|
72
|
+
if ((n % 100 < 10) || (n % 100 > 20)) {
|
|
73
|
+
if (n % 10 == 1) {
|
|
74
|
+
form = 0;
|
|
75
|
+
} else if ((n % 10 > 1) && (n % 10 < 5)) {
|
|
76
|
+
form = 1;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return forms[form];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
toCardinal(number) {
|
|
83
|
+
if (parseInt(number) == 0) {
|
|
84
|
+
return this.zero;
|
|
85
|
+
}
|
|
86
|
+
const words = [];
|
|
87
|
+
const chunks = this.splitByX(JSON.stringify(number), 3);
|
|
88
|
+
let i = chunks.length;
|
|
89
|
+
for (let j = 0; j < chunks.length; j++) {
|
|
90
|
+
const x = chunks[j];
|
|
91
|
+
i = i - 1;
|
|
92
|
+
// if (x == 0) { continue; }
|
|
93
|
+
const [n1, n2, n3] = this.getDigits(x);
|
|
94
|
+
if (n3 > 0) {
|
|
95
|
+
words.push(this.hundreds[n3]);
|
|
96
|
+
}
|
|
97
|
+
if (n2 > 1) {
|
|
98
|
+
words.push(this.twenties[n2]);
|
|
99
|
+
}
|
|
100
|
+
if (n2 == 1) {
|
|
101
|
+
words.push(this.tens[n1]);
|
|
102
|
+
} else if (n1 > 0) {
|
|
103
|
+
const isFeminine = (this.feminine || this.SCALE[i][3]);
|
|
104
|
+
const genderIdx = isFeminine ? 1 : 0;
|
|
105
|
+
words.push(this.ones[n1][genderIdx]);
|
|
106
|
+
}
|
|
107
|
+
if ((i > 0) && (x != 0)) {
|
|
108
|
+
words.push(this.pluralize(x, this.SCALE[i]));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return words.join(' ');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export default function(n) {
|
|
116
|
+
return new N2WordsHR().floatToCardinal(n);
|
|
117
|
+
}
|
package/lib/i18n/NL.mjs
CHANGED
package/lib/i18n/SR.mjs
CHANGED
|
@@ -44,7 +44,7 @@ export class N2WordsSR extends N2WordsRU {
|
|
|
44
44
|
1: 'sto',
|
|
45
45
|
2: 'dvesta',
|
|
46
46
|
3: 'trista',
|
|
47
|
-
4: '
|
|
47
|
+
4: 'četiristo',
|
|
48
48
|
5: 'petsto',
|
|
49
49
|
6: 'šesto',
|
|
50
50
|
7: 'sedamsto',
|
|
@@ -55,14 +55,14 @@ export class N2WordsSR extends N2WordsRU {
|
|
|
55
55
|
0: ['', '', '', false],
|
|
56
56
|
1: ['hiljada', 'hiljade', 'hiljada', true], // 10 ^ 3
|
|
57
57
|
2: ['milion', 'miliona', 'miliona', false], // 10 ^ 6
|
|
58
|
-
3: ['
|
|
59
|
-
4: ['
|
|
60
|
-
5: ['
|
|
61
|
-
6: ['
|
|
62
|
-
7: ['
|
|
63
|
-
8: ['
|
|
64
|
-
9: ['
|
|
65
|
-
10: ['
|
|
58
|
+
3: ['milijarda', 'milijarde', 'milijarda', false], // 10 ^ 9
|
|
59
|
+
4: ['bilion', 'biliona', 'biliona', false], // 10 ^ 12
|
|
60
|
+
5: ['bilijarda', 'bilijarde', 'bilijarda', false], // 10 ^ 15
|
|
61
|
+
6: ['trilion', 'triliona', 'triliona', false], // 10 ^ 18
|
|
62
|
+
7: ['trilijarda', 'trilijarde', 'trilijarda', false], // 10 ^ 21
|
|
63
|
+
8: ['kvadrilion', 'kvadriliona', 'kvadriliona', false], // 10 ^ 24
|
|
64
|
+
9: ['kvadrilijarda', 'kvadrilijarde', 'kvadrilijarda', false], // 10 ^ 27
|
|
65
|
+
10: ['kvintilion', 'kvintiliona', 'kvintiliona', false], // 10 ^ 30
|
|
66
66
|
};
|
|
67
67
|
this.feminine = false;
|
|
68
68
|
}
|
package/lib/n2words.mjs
CHANGED
|
@@ -8,6 +8,7 @@ import n2wordsES from './i18n/ES.mjs';
|
|
|
8
8
|
import n2wordsFA from './i18n/FA.mjs';
|
|
9
9
|
import n2wordsFR from './i18n/FR.mjs';
|
|
10
10
|
import n2wordsHE from './i18n/HE.mjs';
|
|
11
|
+
import n2wordsHR from './i18n/HR.mjs';
|
|
11
12
|
import n2wordsHU from './i18n/HU.mjs';
|
|
12
13
|
import n2wordsID from './i18n/ID.mjs';
|
|
13
14
|
import n2wordsIT from './i18n/IT.mjs';
|
|
@@ -49,6 +50,7 @@ const supportedLanguages = [
|
|
|
49
50
|
'zh',
|
|
50
51
|
'hu',
|
|
51
52
|
'id',
|
|
53
|
+
'hr',
|
|
52
54
|
];
|
|
53
55
|
|
|
54
56
|
/**
|
|
@@ -111,6 +113,8 @@ export default function(n, options = {lang: 'en'}) {
|
|
|
111
113
|
} else if (lang === 'HE') {
|
|
112
114
|
// only for numbers <= 9999
|
|
113
115
|
return n2wordsHE(n);
|
|
116
|
+
} else if (lang === 'HR') {
|
|
117
|
+
return n2wordsHR(n);
|
|
114
118
|
} else if (lang === 'HU') {
|
|
115
119
|
return n2wordsHU(n);
|
|
116
120
|
} else if (lang === 'KO') {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n2words",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.1",
|
|
4
4
|
"description": "Convert numbers to words, in multiple languages",
|
|
5
5
|
"main": "dist/n2words.js",
|
|
6
6
|
"scripts": {
|
|
@@ -45,7 +45,8 @@
|
|
|
45
45
|
"persian",
|
|
46
46
|
"chinese",
|
|
47
47
|
"hungarian",
|
|
48
|
-
"indonesian"
|
|
48
|
+
"indonesian",
|
|
49
|
+
"croatian"
|
|
49
50
|
],
|
|
50
51
|
"author": "Wael TELLAT",
|
|
51
52
|
"license": "MIT",
|
|
@@ -54,19 +55,19 @@
|
|
|
54
55
|
},
|
|
55
56
|
"homepage": "https://github.com/forzagreen/n2words#readme",
|
|
56
57
|
"devDependencies": {
|
|
57
|
-
"@babel/core": "^7.
|
|
58
|
-
"@babel/preset-env": "^7.
|
|
59
|
-
"ava": "^
|
|
60
|
-
"babel-loader": "^8.2.
|
|
61
|
-
"c8": "^7.
|
|
62
|
-
"core-js": "^3.
|
|
63
|
-
"eslint": "^
|
|
64
|
-
"eslint-plugin-ava": "^
|
|
65
|
-
"eslint-plugin-import": "^2.
|
|
66
|
-
"eslint-plugin-jsdoc": "^
|
|
58
|
+
"@babel/core": "^7.17.7",
|
|
59
|
+
"@babel/preset-env": "^7.16.11",
|
|
60
|
+
"ava": "^4.1.0",
|
|
61
|
+
"babel-loader": "^8.2.3",
|
|
62
|
+
"c8": "^7.11.0",
|
|
63
|
+
"core-js": "^3.21.1",
|
|
64
|
+
"eslint": "^8.11.0",
|
|
65
|
+
"eslint-plugin-ava": "^13.2.0",
|
|
66
|
+
"eslint-plugin-import": "^2.25.4",
|
|
67
|
+
"eslint-plugin-jsdoc": "^38.0.4",
|
|
67
68
|
"eslint-plugin-node": "^11.1.0",
|
|
68
|
-
"webpack": "^5.
|
|
69
|
-
"webpack-cli": "^4.
|
|
69
|
+
"webpack": "^5.70.0",
|
|
70
|
+
"webpack-cli": "^4.9.2"
|
|
70
71
|
},
|
|
71
72
|
"ava": {
|
|
72
73
|
"files": [
|
package/webpack.config.js
CHANGED
|
@@ -12,9 +12,6 @@ module.exports = {
|
|
|
12
12
|
rules: [{
|
|
13
13
|
test: /\.m?js$/,
|
|
14
14
|
exclude: /node_modules/,
|
|
15
|
-
resolve: {
|
|
16
|
-
fullySpecified: false,
|
|
17
|
-
},
|
|
18
15
|
use: {
|
|
19
16
|
loader: 'babel-loader',
|
|
20
17
|
options: {
|
|
@@ -23,7 +20,7 @@ module.exports = {
|
|
|
23
20
|
'@babel/preset-env',
|
|
24
21
|
{
|
|
25
22
|
useBuiltIns: 'usage',
|
|
26
|
-
corejs: '3.
|
|
23
|
+
corejs: '3.21.1',
|
|
27
24
|
},
|
|
28
25
|
],
|
|
29
26
|
],
|