n2words 1.24.0 → 2.0.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/README.md +285 -156
- package/dist/ArabicConverter.js +3 -0
- package/dist/ArabicConverter.js.map +1 -0
- package/dist/AzerbaijaniConverter.js +3 -0
- package/dist/AzerbaijaniConverter.js.map +1 -0
- package/dist/BanglaConverter.js +3 -0
- package/dist/BanglaConverter.js.map +1 -0
- package/dist/BiblicalHebrewConverter.js +3 -0
- package/dist/BiblicalHebrewConverter.js.map +1 -0
- package/dist/CroatianConverter.js +3 -0
- package/dist/CroatianConverter.js.map +1 -0
- package/dist/CzechConverter.js +3 -0
- package/dist/CzechConverter.js.map +1 -0
- package/dist/DanishConverter.js +3 -0
- package/dist/DanishConverter.js.map +1 -0
- package/dist/DutchConverter.js +3 -0
- package/dist/DutchConverter.js.map +1 -0
- package/dist/EnglishConverter.js +3 -0
- package/dist/EnglishConverter.js.map +1 -0
- package/dist/FilipinoConverter.js +3 -0
- package/dist/FilipinoConverter.js.map +1 -0
- package/dist/FrenchBelgiumConverter.js +3 -0
- package/dist/FrenchBelgiumConverter.js.map +1 -0
- package/dist/FrenchConverter.js +3 -0
- package/dist/FrenchConverter.js.map +1 -0
- package/dist/GermanConverter.js +3 -0
- package/dist/GermanConverter.js.map +1 -0
- package/dist/GreekConverter.js +3 -0
- package/dist/GreekConverter.js.map +1 -0
- package/dist/GujaratiConverter.js +3 -0
- package/dist/GujaratiConverter.js.map +1 -0
- package/dist/HebrewConverter.js +3 -0
- package/dist/HebrewConverter.js.map +1 -0
- package/dist/HindiConverter.js +3 -0
- package/dist/HindiConverter.js.map +1 -0
- package/dist/HungarianConverter.js +3 -0
- package/dist/HungarianConverter.js.map +1 -0
- package/dist/IndonesianConverter.js +3 -0
- package/dist/IndonesianConverter.js.map +1 -0
- package/dist/ItalianConverter.js +3 -0
- package/dist/ItalianConverter.js.map +1 -0
- package/dist/JapaneseConverter.js +3 -0
- package/dist/JapaneseConverter.js.map +1 -0
- package/dist/KannadaConverter.js +3 -0
- package/dist/KannadaConverter.js.map +1 -0
- package/dist/KoreanConverter.js +3 -0
- package/dist/KoreanConverter.js.map +1 -0
- package/dist/LatvianConverter.js +3 -0
- package/dist/LatvianConverter.js.map +1 -0
- package/dist/LithuanianConverter.js +3 -0
- package/dist/LithuanianConverter.js.map +1 -0
- package/dist/MalayConverter.js +3 -0
- package/dist/MalayConverter.js.map +1 -0
- package/dist/MarathiConverter.js +3 -0
- package/dist/MarathiConverter.js.map +1 -0
- package/dist/NorwegianBokmalConverter.js +3 -0
- package/dist/NorwegianBokmalConverter.js.map +1 -0
- package/dist/PersianConverter.js +3 -0
- package/dist/PersianConverter.js.map +1 -0
- package/dist/PolishConverter.js +3 -0
- package/dist/PolishConverter.js.map +1 -0
- package/dist/PortugueseConverter.js +3 -0
- package/dist/PortugueseConverter.js.map +1 -0
- package/dist/PunjabiConverter.js +3 -0
- package/dist/PunjabiConverter.js.map +1 -0
- package/dist/RomanianConverter.js +3 -0
- package/dist/RomanianConverter.js.map +1 -0
- package/dist/RussianConverter.js +3 -0
- package/dist/RussianConverter.js.map +1 -0
- package/dist/SerbianCyrillicConverter.js +3 -0
- package/dist/SerbianCyrillicConverter.js.map +1 -0
- package/dist/SerbianLatinConverter.js +3 -0
- package/dist/SerbianLatinConverter.js.map +1 -0
- package/dist/SimplifiedChineseConverter.js +3 -0
- package/dist/SimplifiedChineseConverter.js.map +1 -0
- package/dist/SpanishConverter.js +3 -0
- package/dist/SpanishConverter.js.map +1 -0
- package/dist/SwahiliConverter.js +3 -0
- package/dist/SwahiliConverter.js.map +1 -0
- package/dist/SwedishConverter.js +3 -0
- package/dist/SwedishConverter.js.map +1 -0
- package/dist/TamilConverter.js +3 -0
- package/dist/TamilConverter.js.map +1 -0
- package/dist/TeluguConverter.js +3 -0
- package/dist/TeluguConverter.js.map +1 -0
- package/dist/ThaiConverter.js +3 -0
- package/dist/ThaiConverter.js.map +1 -0
- package/dist/TraditionalChineseConverter.js +3 -0
- package/dist/TraditionalChineseConverter.js.map +1 -0
- package/dist/TurkishConverter.js +3 -0
- package/dist/TurkishConverter.js.map +1 -0
- package/dist/UkrainianConverter.js +3 -0
- package/dist/UkrainianConverter.js.map +1 -0
- package/dist/UrduConverter.js +3 -0
- package/dist/UrduConverter.js.map +1 -0
- package/dist/VietnameseConverter.js +3 -0
- package/dist/VietnameseConverter.js.map +1 -0
- package/dist/n2words.js +3 -2
- package/dist/n2words.js.map +1 -1
- package/lib/classes/abstract-language.d.ts +178 -0
- package/lib/classes/abstract-language.js +192 -185
- package/lib/classes/greedy-scale-language.d.ts +109 -0
- package/lib/classes/greedy-scale-language.js +96 -90
- package/lib/classes/slavic-language.d.ts +148 -0
- package/lib/classes/slavic-language.js +136 -106
- package/lib/classes/south-asian-language.d.ts +70 -0
- package/lib/classes/south-asian-language.js +58 -65
- package/lib/classes/turkic-language.d.ts +26 -0
- package/lib/classes/turkic-language.js +22 -26
- package/lib/languages/ar.d.ts +30 -0
- package/lib/languages/ar.js +49 -133
- package/lib/languages/az.d.ts +12 -0
- package/lib/languages/az.js +7 -23
- package/lib/languages/bn.d.ts +11 -0
- package/lib/languages/bn.js +12 -7
- package/lib/languages/cs.d.ts +88 -0
- package/lib/languages/cs.js +44 -113
- package/lib/languages/da.d.ts +15 -0
- package/lib/languages/da.js +40 -87
- package/lib/languages/de.d.ts +14 -0
- package/lib/languages/de.js +34 -68
- package/lib/languages/el.d.ts +14 -0
- package/lib/languages/el.js +22 -48
- package/lib/languages/en.d.ts +16 -0
- package/lib/languages/en.js +22 -59
- package/lib/languages/es.d.ts +15 -0
- package/lib/languages/es.js +49 -81
- package/lib/languages/fa.d.ts +47 -0
- package/lib/languages/fa.js +90 -73
- package/lib/languages/fil.d.ts +16 -0
- package/lib/languages/fil.js +35 -76
- package/lib/languages/fr-BE.d.ts +11 -0
- package/lib/languages/fr-BE.js +15 -51
- package/lib/languages/fr.d.ts +15 -0
- package/lib/languages/fr.js +33 -72
- package/lib/languages/gu.d.ts +11 -0
- package/lib/languages/gu.js +10 -34
- package/lib/languages/hbo.d.ts +113 -0
- package/lib/languages/hbo.js +251 -0
- package/lib/languages/he.d.ts +80 -0
- package/lib/languages/he.js +41 -164
- package/lib/languages/hi.d.ts +11 -0
- package/lib/languages/hi.js +12 -7
- package/lib/languages/hr.d.ts +80 -0
- package/lib/languages/hr.js +51 -95
- package/lib/languages/hu.d.ts +22 -0
- package/lib/languages/hu.js +35 -53
- package/lib/languages/id.d.ts +37 -0
- package/lib/languages/id.js +29 -44
- package/lib/languages/it.d.ts +37 -0
- package/lib/languages/it.js +36 -52
- package/lib/languages/ja.d.ts +17 -0
- package/lib/languages/ja.js +22 -75
- package/lib/languages/kn.d.ts +11 -0
- package/lib/languages/kn.js +10 -39
- package/lib/languages/ko.d.ts +14 -0
- package/lib/languages/ko.js +17 -45
- package/lib/languages/lt.d.ts +70 -0
- package/lib/languages/lt.js +28 -63
- package/lib/languages/lv.d.ts +70 -0
- package/lib/languages/lv.js +35 -58
- package/lib/languages/mr.d.ts +11 -0
- package/lib/languages/mr.js +10 -34
- package/lib/languages/ms.d.ts +31 -0
- package/lib/languages/ms.js +24 -20
- package/lib/languages/nb.d.ts +12 -0
- package/lib/languages/nb.js +36 -56
- package/lib/languages/nl.d.ts +16 -0
- package/lib/languages/nl.js +58 -109
- package/lib/languages/pa.d.ts +11 -0
- package/lib/languages/{pa-Guru.js → pa.js} +12 -7
- package/lib/languages/pl.d.ts +80 -0
- package/lib/languages/pl.js +26 -105
- package/lib/languages/pt.d.ts +29 -0
- package/lib/languages/pt.js +29 -64
- package/lib/languages/ro.d.ts +158 -0
- package/lib/languages/ro.js +60 -167
- package/lib/languages/ru.d.ts +85 -0
- package/lib/languages/ru.js +17 -37
- package/lib/languages/sr-Cyrl.d.ts +80 -0
- package/lib/languages/sr-Cyrl.js +113 -0
- package/lib/languages/sr-Latn.d.ts +80 -0
- package/lib/languages/sr-Latn.js +54 -98
- package/lib/languages/sv.d.ts +14 -0
- package/lib/languages/sv.js +26 -63
- package/lib/languages/sw.d.ts +39 -0
- package/lib/languages/sw.js +26 -21
- package/lib/languages/ta.d.ts +20 -0
- package/lib/languages/ta.js +26 -26
- package/lib/languages/te.d.ts +22 -0
- package/lib/languages/te.js +28 -38
- package/lib/languages/th.d.ts +17 -0
- package/lib/languages/th.js +25 -31
- package/lib/languages/tr.d.ts +12 -0
- package/lib/languages/tr.js +11 -38
- package/lib/languages/uk.d.ts +85 -0
- package/lib/languages/uk.js +18 -44
- package/lib/languages/ur.d.ts +11 -0
- package/lib/languages/ur.js +12 -7
- package/lib/languages/vi.d.ts +72 -0
- package/lib/languages/vi.js +25 -71
- package/lib/languages/zh-Hans.d.ts +21 -0
- package/lib/languages/zh-Hans.js +33 -87
- package/lib/languages/zh-Hant.d.ts +21 -0
- package/lib/languages/zh-Hant.js +111 -0
- package/lib/n2words.d.ts +209 -0
- package/lib/n2words.js +474 -191
- package/package.json +106 -67
- package/dist/languages/ar.js +0 -2
- package/dist/languages/ar.js.map +0 -1
- package/dist/languages/az.js +0 -2
- package/dist/languages/az.js.map +0 -1
- package/dist/languages/bn.js +0 -2
- package/dist/languages/bn.js.map +0 -1
- package/dist/languages/cs.js +0 -2
- package/dist/languages/cs.js.map +0 -1
- package/dist/languages/da.js +0 -2
- package/dist/languages/da.js.map +0 -1
- package/dist/languages/de.js +0 -2
- package/dist/languages/de.js.map +0 -1
- package/dist/languages/el.js +0 -2
- package/dist/languages/el.js.map +0 -1
- package/dist/languages/en.js +0 -2
- package/dist/languages/en.js.map +0 -1
- package/dist/languages/es.js +0 -2
- package/dist/languages/es.js.map +0 -1
- package/dist/languages/fa.js +0 -2
- package/dist/languages/fa.js.map +0 -1
- package/dist/languages/fil.js +0 -2
- package/dist/languages/fil.js.map +0 -1
- package/dist/languages/fr-BE.js +0 -2
- package/dist/languages/fr-BE.js.map +0 -1
- package/dist/languages/fr.js +0 -2
- package/dist/languages/fr.js.map +0 -1
- package/dist/languages/gu.js +0 -2
- package/dist/languages/gu.js.map +0 -1
- package/dist/languages/he.js +0 -2
- package/dist/languages/he.js.map +0 -1
- package/dist/languages/hi.js +0 -2
- package/dist/languages/hi.js.map +0 -1
- package/dist/languages/hr.js +0 -2
- package/dist/languages/hr.js.map +0 -1
- package/dist/languages/hu.js +0 -2
- package/dist/languages/hu.js.map +0 -1
- package/dist/languages/id.js +0 -2
- package/dist/languages/id.js.map +0 -1
- package/dist/languages/it.js +0 -2
- package/dist/languages/it.js.map +0 -1
- package/dist/languages/ja.js +0 -2
- package/dist/languages/ja.js.map +0 -1
- package/dist/languages/kn.js +0 -2
- package/dist/languages/kn.js.map +0 -1
- package/dist/languages/ko.js +0 -2
- package/dist/languages/ko.js.map +0 -1
- package/dist/languages/lt.js +0 -2
- package/dist/languages/lt.js.map +0 -1
- package/dist/languages/lv.js +0 -2
- package/dist/languages/lv.js.map +0 -1
- package/dist/languages/mr.js +0 -2
- package/dist/languages/mr.js.map +0 -1
- package/dist/languages/ms.js +0 -2
- package/dist/languages/ms.js.map +0 -1
- package/dist/languages/nb.js +0 -2
- package/dist/languages/nb.js.map +0 -1
- package/dist/languages/nl.js +0 -2
- package/dist/languages/nl.js.map +0 -1
- package/dist/languages/pa-Guru.js +0 -2
- package/dist/languages/pa-Guru.js.map +0 -1
- package/dist/languages/pl.js +0 -2
- package/dist/languages/pl.js.map +0 -1
- package/dist/languages/pt.js +0 -2
- package/dist/languages/pt.js.map +0 -1
- package/dist/languages/ro.js +0 -2
- package/dist/languages/ro.js.map +0 -1
- package/dist/languages/ru.js +0 -2
- package/dist/languages/ru.js.map +0 -1
- package/dist/languages/sr-Latn.js +0 -2
- package/dist/languages/sr-Latn.js.map +0 -1
- package/dist/languages/sv.js +0 -2
- package/dist/languages/sv.js.map +0 -1
- package/dist/languages/sw.js +0 -2
- package/dist/languages/sw.js.map +0 -1
- package/dist/languages/ta.js +0 -2
- package/dist/languages/ta.js.map +0 -1
- package/dist/languages/te.js +0 -2
- package/dist/languages/te.js.map +0 -1
- package/dist/languages/th.js +0 -2
- package/dist/languages/th.js.map +0 -1
- package/dist/languages/tr.js +0 -2
- package/dist/languages/tr.js.map +0 -1
- package/dist/languages/uk.js +0 -2
- package/dist/languages/uk.js.map +0 -1
- package/dist/languages/ur.js +0 -2
- package/dist/languages/ur.js.map +0 -1
- package/dist/languages/vi.js +0 -2
- package/dist/languages/vi.js.map +0 -1
- package/dist/languages/zh-Hans.js +0 -2
- package/dist/languages/zh-Hans.js.map +0 -1
- package/typings/classes/abstract-language.d.ts +0 -144
- package/typings/classes/greedy-scale-language.d.ts +0 -148
- package/typings/classes/slavic-language.d.ts +0 -145
- package/typings/classes/south-asian-language.d.ts +0 -101
- package/typings/classes/turkic-language.d.ts +0 -42
- package/typings/languages/ar.d.ts +0 -93
- package/typings/languages/az.d.ts +0 -25
- package/typings/languages/bn.d.ts +0 -1
- package/typings/languages/cs.d.ts +0 -120
- package/typings/languages/da.d.ts +0 -53
- package/typings/languages/de.d.ts +0 -26
- package/typings/languages/el.d.ts +0 -11
- package/typings/languages/en.d.ts +0 -30
- package/typings/languages/es.d.ts +0 -43
- package/typings/languages/fa.d.ts +0 -81
- package/typings/languages/fil.d.ts +0 -12
- package/typings/languages/fr-BE.d.ts +0 -41
- package/typings/languages/fr.d.ts +0 -43
- package/typings/languages/gu.d.ts +0 -12
- package/typings/languages/he.d.ts +0 -197
- package/typings/languages/hi.d.ts +0 -1
- package/typings/languages/hr.d.ts +0 -110
- package/typings/languages/hu.d.ts +0 -37
- package/typings/languages/id.d.ts +0 -69
- package/typings/languages/it.d.ts +0 -51
- package/typings/languages/ja.d.ts +0 -58
- package/typings/languages/kn.d.ts +0 -11
- package/typings/languages/ko.d.ts +0 -25
- package/typings/languages/lt.d.ts +0 -110
- package/typings/languages/lv.d.ts +0 -99
- package/typings/languages/mr.d.ts +0 -12
- package/typings/languages/ms.d.ts +0 -37
- package/typings/languages/nb.d.ts +0 -27
- package/typings/languages/nl.d.ts +0 -65
- package/typings/languages/pa-Guru.d.ts +0 -1
- package/typings/languages/pl.d.ts +0 -116
- package/typings/languages/pt.d.ts +0 -39
- package/typings/languages/ro.d.ts +0 -229
- package/typings/languages/ru.d.ts +0 -108
- package/typings/languages/sr-Latn.d.ts +0 -98
- package/typings/languages/sv.d.ts +0 -30
- package/typings/languages/sw.d.ts +0 -1
- package/typings/languages/ta.d.ts +0 -1
- package/typings/languages/te.d.ts +0 -1
- package/typings/languages/th.d.ts +0 -1
- package/typings/languages/tr.d.ts +0 -46
- package/typings/languages/uk.d.ts +0 -117
- package/typings/languages/ur.d.ts +0 -1
- package/typings/languages/vi.d.ts +0 -116
- package/typings/languages/zh-Hans.d.ts +0 -57
- package/typings/n2words.d.ts +0 -177
package/lib/languages/th.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import AbstractLanguage from '../classes/abstract-language.js'
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { AbstractLanguage } from '../classes/abstract-language.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Thai language converter.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Thai numerals (ศูนย์, หนึ่ง, สอง, สาม)
|
|
8
|
+
* - No word separators (continuous Thai script)
|
|
9
|
+
* - Digit-by-digit decimal reading
|
|
10
|
+
*/
|
|
11
|
+
export class Thai extends AbstractLanguage {
|
|
4
12
|
negativeWord = 'ลบ'
|
|
5
13
|
decimalSeparatorWord = 'จุด'
|
|
6
14
|
zeroWord = 'ศูนย์'
|
|
7
15
|
wordSeparator = ''
|
|
8
|
-
|
|
16
|
+
usePerDigitDecimals = true // Enable digit-by-digit decimal conversion
|
|
9
17
|
|
|
10
|
-
//
|
|
11
|
-
|
|
18
|
+
// Ones words map 1–9
|
|
19
|
+
onesWords = ['หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า']
|
|
12
20
|
|
|
13
|
-
/**
|
|
14
|
-
* Convert numbers below one million to Thai words.
|
|
15
|
-
*
|
|
16
|
-
* @param {number} number The number to convert (0-999999).
|
|
17
|
-
* @returns {string} The Thai representation.
|
|
18
|
-
*/
|
|
21
|
+
/** Converts numbers below one million to Thai words. */
|
|
19
22
|
convertBelowMillion (number) {
|
|
20
23
|
if (number === 0) return ''
|
|
21
24
|
|
|
@@ -34,23 +37,23 @@ class Thai extends AbstractLanguage {
|
|
|
34
37
|
const ones = value % 10
|
|
35
38
|
|
|
36
39
|
if (hundredThousands > 0) {
|
|
37
|
-
parts.push(this.
|
|
40
|
+
parts.push(this.onesWords[hundredThousands - 1] + 'แสน')
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
if (tenThousands > 0) {
|
|
41
44
|
if (tenThousands === 1) {
|
|
42
45
|
parts.push('หนึ่งหมื่น')
|
|
43
46
|
} else {
|
|
44
|
-
parts.push(this.
|
|
47
|
+
parts.push(this.onesWords[tenThousands - 1] + 'หมื่น')
|
|
45
48
|
}
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
if (thousands > 0) {
|
|
49
|
-
parts.push(this.
|
|
52
|
+
parts.push(this.onesWords[thousands - 1] + 'พัน')
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
if (hundreds > 0) {
|
|
53
|
-
parts.push(this.
|
|
56
|
+
parts.push(this.onesWords[hundreds - 1] + 'ร้อย')
|
|
54
57
|
}
|
|
55
58
|
|
|
56
59
|
if (tens > 0) {
|
|
@@ -59,7 +62,7 @@ class Thai extends AbstractLanguage {
|
|
|
59
62
|
} else if (tens === 2) {
|
|
60
63
|
parts.push('ยี่สิบ')
|
|
61
64
|
} else {
|
|
62
|
-
parts.push(this.
|
|
65
|
+
parts.push(this.onesWords[tens - 1] + 'สิบ')
|
|
63
66
|
}
|
|
64
67
|
}
|
|
65
68
|
|
|
@@ -68,19 +71,14 @@ class Thai extends AbstractLanguage {
|
|
|
68
71
|
if (ones === 1 && (tens > 0 || hasHigher)) {
|
|
69
72
|
parts.push('เอ็ด')
|
|
70
73
|
} else {
|
|
71
|
-
parts.push(this.
|
|
74
|
+
parts.push(this.onesWords[ones - 1])
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
return parts.join('')
|
|
76
79
|
}
|
|
77
80
|
|
|
78
|
-
/**
|
|
79
|
-
* Split a number into million-sized groups for processing.
|
|
80
|
-
*
|
|
81
|
-
* @param {bigint} number The number to split.
|
|
82
|
-
* @returns {number[]} Array of number groups.
|
|
83
|
-
*/
|
|
81
|
+
/** Split a number into million-sized groups for processing. */
|
|
84
82
|
splitMillionGroups (number) {
|
|
85
83
|
const groups = []
|
|
86
84
|
let remaining = number
|
|
@@ -95,12 +93,12 @@ class Thai extends AbstractLanguage {
|
|
|
95
93
|
return groups
|
|
96
94
|
}
|
|
97
95
|
|
|
98
|
-
|
|
99
|
-
if (
|
|
96
|
+
integerToWords (integerPart) {
|
|
97
|
+
if (integerPart === 0n) {
|
|
100
98
|
return this.zeroWord
|
|
101
99
|
}
|
|
102
100
|
|
|
103
|
-
const groups = this.splitMillionGroups(
|
|
101
|
+
const groups = this.splitMillionGroups(integerPart)
|
|
104
102
|
const parts = []
|
|
105
103
|
|
|
106
104
|
for (let i = 0; i < groups.length; i++) {
|
|
@@ -117,7 +115,3 @@ class Thai extends AbstractLanguage {
|
|
|
117
115
|
return parts.join('')
|
|
118
116
|
}
|
|
119
117
|
}
|
|
120
|
-
|
|
121
|
-
export default function convertToWords (value, options = {}) {
|
|
122
|
-
return new Thai(options).convertToWords(value)
|
|
123
|
-
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turkish language converter.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Omits 'bir' (one) before hundreds and thousands
|
|
6
|
+
* - Optional space removal via dropSpaces option
|
|
7
|
+
*/
|
|
8
|
+
export class Turkish extends TurkicLanguage {
|
|
9
|
+
constructor(options?: {});
|
|
10
|
+
scaleWords: (string | bigint)[][];
|
|
11
|
+
}
|
|
12
|
+
import { TurkicLanguage } from '../classes/turkic-language.js';
|
package/lib/languages/tr.js
CHANGED
|
@@ -1,25 +1,19 @@
|
|
|
1
|
-
import TurkicLanguage from '../classes/turkic-language.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @typedef {Object} TurkishOptions
|
|
5
|
-
* @property {boolean} [dropSpaces=false] Remove spaces between words if true.
|
|
6
|
-
*/
|
|
1
|
+
import { TurkicLanguage } from '../classes/turkic-language.js'
|
|
7
2
|
|
|
8
3
|
/**
|
|
9
4
|
* Turkish language converter.
|
|
10
5
|
*
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
14
|
-
* - Optional word spacing (dropSpaces option)
|
|
15
|
-
* - Supports 'ş', 'ç', 'ğ', 'ı', 'ü', 'ö' characters
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Omits 'bir' (one) before hundreds and thousands
|
|
8
|
+
* - Optional space removal via dropSpaces option
|
|
16
9
|
*/
|
|
17
10
|
export class Turkish extends TurkicLanguage {
|
|
18
11
|
negativeWord = 'eksi'
|
|
19
12
|
decimalSeparatorWord = 'virgül'
|
|
20
13
|
zeroWord = 'sıfır'
|
|
21
14
|
wordSeparator = ' '
|
|
22
|
-
|
|
15
|
+
|
|
16
|
+
scaleWords = [
|
|
23
17
|
[1_000_000_000_000_000_000n, 'kentilyon'],
|
|
24
18
|
[1_000_000_000_000_000n, 'katrilyon'],
|
|
25
19
|
[1_000_000_000_000n, 'trilyon'],
|
|
@@ -48,36 +42,15 @@ export class Turkish extends TurkicLanguage {
|
|
|
48
42
|
[0n, 'sıfır']
|
|
49
43
|
]
|
|
50
44
|
|
|
51
|
-
|
|
52
|
-
* Initializes the Turkish converter with language-specific options.
|
|
53
|
-
*
|
|
54
|
-
* @param {TurkishOptions} [options={}] Configuration options.
|
|
55
|
-
*/
|
|
56
|
-
constructor ({ dropSpaces = false } = {}) {
|
|
45
|
+
constructor (options = {}) {
|
|
57
46
|
super()
|
|
58
47
|
|
|
59
|
-
this.
|
|
48
|
+
this.setOptions({
|
|
49
|
+
dropSpaces: false
|
|
50
|
+
}, options)
|
|
60
51
|
|
|
61
|
-
if (this.dropSpaces
|
|
52
|
+
if (this.options.dropSpaces) {
|
|
62
53
|
this.wordSeparator = ''
|
|
63
54
|
}
|
|
64
55
|
}
|
|
65
56
|
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Converts a number to Turkish cardinal (written) form.
|
|
69
|
-
*
|
|
70
|
-
* @param {number|string|bigint} value The number to convert.
|
|
71
|
-
* @param {Object} [options] Conversion options (see TR class).
|
|
72
|
-
* @param {boolean} [options.dropSpaces=false] Remove spaces between words if true.
|
|
73
|
-
* @returns {string} The number expressed in Turkish words.
|
|
74
|
-
* @throws {TypeError} If value is NaN or invalid type.
|
|
75
|
-
* @throws {Error} If value is an invalid number string.
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* convertToWords(42, { lang: 'tr' }); // 'kırk iki'
|
|
79
|
-
* convertToWords(42, { lang: 'tr', dropSpaces: true }); // 'kırkiki'
|
|
80
|
-
*/
|
|
81
|
-
export default function convertToWords (value, options = {}) {
|
|
82
|
-
return new Turkish(options).convertToWords(value)
|
|
83
|
-
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ukrainian language converter.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Three-form pluralization (one/few/many)
|
|
6
|
+
* - Gender agreement (один/одна, два/дві)
|
|
7
|
+
* - Ukrainian orthography and phonology
|
|
8
|
+
*/
|
|
9
|
+
export class Ukrainian extends SlavicLanguage {
|
|
10
|
+
onesWords: {
|
|
11
|
+
1: string;
|
|
12
|
+
2: string;
|
|
13
|
+
3: string;
|
|
14
|
+
4: string;
|
|
15
|
+
5: string;
|
|
16
|
+
6: string;
|
|
17
|
+
7: string;
|
|
18
|
+
8: string;
|
|
19
|
+
9: string;
|
|
20
|
+
};
|
|
21
|
+
onesFeminineWords: {
|
|
22
|
+
1: string;
|
|
23
|
+
2: string;
|
|
24
|
+
3: string;
|
|
25
|
+
4: string;
|
|
26
|
+
5: string;
|
|
27
|
+
6: string;
|
|
28
|
+
7: string;
|
|
29
|
+
8: string;
|
|
30
|
+
9: string;
|
|
31
|
+
};
|
|
32
|
+
teensWords: {
|
|
33
|
+
0: string;
|
|
34
|
+
1: string;
|
|
35
|
+
2: string;
|
|
36
|
+
3: string;
|
|
37
|
+
4: string;
|
|
38
|
+
5: string;
|
|
39
|
+
6: string;
|
|
40
|
+
7: string;
|
|
41
|
+
8: string;
|
|
42
|
+
9: string;
|
|
43
|
+
};
|
|
44
|
+
twentiesWords: {
|
|
45
|
+
2: string;
|
|
46
|
+
3: string;
|
|
47
|
+
4: string;
|
|
48
|
+
5: string;
|
|
49
|
+
6: string;
|
|
50
|
+
7: string;
|
|
51
|
+
8: string;
|
|
52
|
+
9: string;
|
|
53
|
+
};
|
|
54
|
+
hundredsWords: {
|
|
55
|
+
1: string;
|
|
56
|
+
2: string;
|
|
57
|
+
3: string;
|
|
58
|
+
4: string;
|
|
59
|
+
5: string;
|
|
60
|
+
6: string;
|
|
61
|
+
7: string;
|
|
62
|
+
8: string;
|
|
63
|
+
9: string;
|
|
64
|
+
};
|
|
65
|
+
pluralForms: {
|
|
66
|
+
1: string[];
|
|
67
|
+
2: string[];
|
|
68
|
+
3: string[];
|
|
69
|
+
4: string[];
|
|
70
|
+
5: string[];
|
|
71
|
+
6: string[];
|
|
72
|
+
7: string[];
|
|
73
|
+
8: string[];
|
|
74
|
+
9: string[];
|
|
75
|
+
10: string[];
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Ukrainian thousands (тисяча) are feminine, requiring одна/двi forms.
|
|
79
|
+
* Other scales (million, billion, etc.) are masculine.
|
|
80
|
+
*/
|
|
81
|
+
scaleGenders: {
|
|
82
|
+
1: boolean;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
import { SlavicLanguage } from '../classes/slavic-language.js';
|
package/lib/languages/uk.js
CHANGED
|
@@ -1,39 +1,19 @@
|
|
|
1
|
-
import SlavicLanguage from '../classes/slavic-language.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @typedef {Object} SlavicOptions
|
|
5
|
-
* @property {boolean} [feminine=false] Use feminine forms for numbers.
|
|
6
|
-
*/
|
|
1
|
+
import { SlavicLanguage } from '../classes/slavic-language.js'
|
|
7
2
|
|
|
8
3
|
/**
|
|
9
4
|
* Ukrainian language converter.
|
|
10
5
|
*
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
13
|
-
* - Gender
|
|
14
|
-
* - Slavic three-form pluralization (тисяча/тисячі/тисяч)
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Three-form pluralization (one/few/many)
|
|
8
|
+
* - Gender agreement (один/одна, два/дві)
|
|
15
9
|
* - Ukrainian orthography and phonology
|
|
16
|
-
*
|
|
17
|
-
* Key Features:
|
|
18
|
-
* - Three-form pluralization system shared across Slavic languages
|
|
19
|
-
* * Form 1 (singular): 1 (e.g., "тисяча")
|
|
20
|
-
* * Form 2 (few): 2-4, 22-24, 32-34... excluding teens (e.g., "тисячі")
|
|
21
|
-
* * Form 3 (many): all other numbers (e.g., "тисяч")
|
|
22
|
-
* - Chunk-based decomposition (splits into groups of 3 digits: ones, thousands, millions, etc.)
|
|
23
|
-
* - Large number handling via thousands[] array with indexed [singular, few, many] forms
|
|
24
|
-
*
|
|
25
|
-
* Features:
|
|
26
|
-
* - Ukrainian-specific letters (і, ї, ґ, є)
|
|
27
|
-
* - Apostrophe usage (п'ять, дев'ять)
|
|
28
|
-
* - Close structural similarity to Russian with distinct vocabulary
|
|
29
|
-
*
|
|
30
|
-
* Inherits from SlavicLanguage for complex pluralization algorithms.
|
|
31
10
|
*/
|
|
32
11
|
export class Ukrainian extends SlavicLanguage {
|
|
33
12
|
negativeWord = 'мiнус'
|
|
34
13
|
decimalSeparatorWord = 'кома'
|
|
35
14
|
zeroWord = 'нуль'
|
|
36
|
-
|
|
15
|
+
|
|
16
|
+
onesWords = {
|
|
37
17
|
1: 'один',
|
|
38
18
|
2: 'два',
|
|
39
19
|
3: 'три',
|
|
@@ -45,7 +25,7 @@ export class Ukrainian extends SlavicLanguage {
|
|
|
45
25
|
9: 'дев\'ять'
|
|
46
26
|
}
|
|
47
27
|
|
|
48
|
-
|
|
28
|
+
onesFeminineWords = {
|
|
49
29
|
1: 'одна',
|
|
50
30
|
2: 'двi',
|
|
51
31
|
3: 'три',
|
|
@@ -57,7 +37,7 @@ export class Ukrainian extends SlavicLanguage {
|
|
|
57
37
|
9: 'дев\'ять'
|
|
58
38
|
}
|
|
59
39
|
|
|
60
|
-
|
|
40
|
+
teensWords = {
|
|
61
41
|
0: 'десять',
|
|
62
42
|
1: 'одинадцять',
|
|
63
43
|
2: 'дванадцять',
|
|
@@ -70,7 +50,7 @@ export class Ukrainian extends SlavicLanguage {
|
|
|
70
50
|
9: 'дев\'ятнадцять'
|
|
71
51
|
}
|
|
72
52
|
|
|
73
|
-
|
|
53
|
+
twentiesWords = {
|
|
74
54
|
2: 'двадцять',
|
|
75
55
|
3: 'тридцять',
|
|
76
56
|
4: 'сорок',
|
|
@@ -81,7 +61,7 @@ export class Ukrainian extends SlavicLanguage {
|
|
|
81
61
|
9: 'дев\'яносто'
|
|
82
62
|
}
|
|
83
63
|
|
|
84
|
-
|
|
64
|
+
hundredsWords = {
|
|
85
65
|
1: 'сто',
|
|
86
66
|
2: 'двiстi',
|
|
87
67
|
3: 'триста',
|
|
@@ -93,7 +73,7 @@ export class Ukrainian extends SlavicLanguage {
|
|
|
93
73
|
9: 'дев\'ятсот'
|
|
94
74
|
}
|
|
95
75
|
|
|
96
|
-
|
|
76
|
+
pluralForms = {
|
|
97
77
|
1: ['тисяча', 'тисячi', 'тисяч'], // 10^ 3
|
|
98
78
|
2: ['мiльйон', 'мiльйони', 'мiльйонiв'], // 10^ 6
|
|
99
79
|
3: ['мiльярд', 'мiльярди', 'мiльярдiв'], // 10^ 9
|
|
@@ -105,18 +85,12 @@ export class Ukrainian extends SlavicLanguage {
|
|
|
105
85
|
9: ['октильйон', 'октильйони', 'октильйонiв'], // 10^ 27
|
|
106
86
|
10: ['нонiльйон', 'нонiльйони', 'нонiльйонiв'] // 10^ 30
|
|
107
87
|
}
|
|
108
|
-
}
|
|
109
88
|
|
|
110
|
-
/**
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
* @throws {TypeError} If value is NaN or invalid type.
|
|
118
|
-
* @throws {Error} If value is an invalid number string.
|
|
119
|
-
*/
|
|
120
|
-
export default function convertToWords (value, options = {}) {
|
|
121
|
-
return new Ukrainian(options).convertToWords(value)
|
|
89
|
+
/**
|
|
90
|
+
* Ukrainian thousands (тисяча) are feminine, requiring одна/двi forms.
|
|
91
|
+
* Other scales (million, billion, etc.) are masculine.
|
|
92
|
+
*/
|
|
93
|
+
scaleGenders = {
|
|
94
|
+
1: true // thousands are feminine
|
|
95
|
+
}
|
|
122
96
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Urdu language converter.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Indian numbering system (ہزار, لاکھ, کروڑ)
|
|
6
|
+
* - Urdu script (right-to-left)
|
|
7
|
+
* - Complete word forms for 0-99
|
|
8
|
+
*/
|
|
9
|
+
export class Urdu extends SouthAsianLanguage {
|
|
10
|
+
}
|
|
11
|
+
import { SouthAsianLanguage } from '../classes/south-asian-language.js';
|
package/lib/languages/ur.js
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
|
-
import SouthAsianLanguage from '../classes/south-asian-language.js'
|
|
1
|
+
import { SouthAsianLanguage } from '../classes/south-asian-language.js'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Urdu language converter.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Indian numbering system (ہزار, لاکھ, کروڑ)
|
|
8
|
+
* - Urdu script (right-to-left)
|
|
9
|
+
* - Complete word forms for 0-99
|
|
10
|
+
*/
|
|
11
|
+
export class Urdu extends SouthAsianLanguage {
|
|
4
12
|
negativeWord = 'منفی'
|
|
5
13
|
decimalSeparatorWord = 'اعشاریہ'
|
|
6
14
|
zeroWord = 'صفر'
|
|
7
15
|
hundredWord = 'سو'
|
|
8
|
-
|
|
16
|
+
|
|
17
|
+
belowHundredWords = [
|
|
9
18
|
'صفر',
|
|
10
19
|
'ایک',
|
|
11
20
|
'دو',
|
|
@@ -120,7 +129,3 @@ class Urdu extends SouthAsianLanguage {
|
|
|
120
129
|
'شنکھ'
|
|
121
130
|
]
|
|
122
131
|
}
|
|
123
|
-
|
|
124
|
-
export default function convertToWords (value, options = {}) {
|
|
125
|
-
return new Urdu(options).convertToWords(value)
|
|
126
|
-
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vietnamese language converter.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Special pronunciation rules (lăm for 5, mốt for final 1)
|
|
6
|
+
* - "Lẻ" (odd/extra) when tens place is zero
|
|
7
|
+
* - Vietnamese diacritical marks
|
|
8
|
+
*/
|
|
9
|
+
export class Vietnamese extends AbstractLanguage {
|
|
10
|
+
belowTwentyWords: {
|
|
11
|
+
0: string;
|
|
12
|
+
1: string;
|
|
13
|
+
2: string;
|
|
14
|
+
3: string;
|
|
15
|
+
4: string;
|
|
16
|
+
5: string;
|
|
17
|
+
6: string;
|
|
18
|
+
7: string;
|
|
19
|
+
8: string;
|
|
20
|
+
9: string;
|
|
21
|
+
10: string;
|
|
22
|
+
11: string;
|
|
23
|
+
12: string;
|
|
24
|
+
13: string;
|
|
25
|
+
14: string;
|
|
26
|
+
15: string;
|
|
27
|
+
16: string;
|
|
28
|
+
17: string;
|
|
29
|
+
18: string;
|
|
30
|
+
19: string;
|
|
31
|
+
};
|
|
32
|
+
twentiesWords: {
|
|
33
|
+
20: string;
|
|
34
|
+
30: string;
|
|
35
|
+
40: string;
|
|
36
|
+
50: string;
|
|
37
|
+
60: string;
|
|
38
|
+
70: string;
|
|
39
|
+
80: string;
|
|
40
|
+
90: string;
|
|
41
|
+
};
|
|
42
|
+
scaleWords: {
|
|
43
|
+
1: string;
|
|
44
|
+
2: string;
|
|
45
|
+
3: string;
|
|
46
|
+
4: string;
|
|
47
|
+
5: string;
|
|
48
|
+
6: string;
|
|
49
|
+
7: string;
|
|
50
|
+
8: string;
|
|
51
|
+
9: string;
|
|
52
|
+
10: string;
|
|
53
|
+
11: string;
|
|
54
|
+
12: string;
|
|
55
|
+
13: string;
|
|
56
|
+
14: string;
|
|
57
|
+
15: string;
|
|
58
|
+
16: string;
|
|
59
|
+
17: string;
|
|
60
|
+
18: string;
|
|
61
|
+
19: string;
|
|
62
|
+
20: string;
|
|
63
|
+
};
|
|
64
|
+
/** Convert numbers less than 100 to Vietnamese words. */
|
|
65
|
+
convertLess100(number: any): any;
|
|
66
|
+
/** Convert numbers less than 1000 to Vietnamese words. */
|
|
67
|
+
convertLess1000(number: any): any;
|
|
68
|
+
/** Convert numbers greater than 1000 to Vietnamese words. */
|
|
69
|
+
convertMore1000(number: any): any;
|
|
70
|
+
integerToWords(integerPart: any): any;
|
|
71
|
+
}
|
|
72
|
+
import { AbstractLanguage } from '../classes/abstract-language.js';
|