n2words 2.0.0 → 3.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/CHANGELOG.md +49 -0
- package/README.md +86 -188
- package/dist/languages/am-Latn.js +3 -0
- package/dist/languages/am-Latn.js.map +1 -0
- package/dist/languages/am.js +3 -0
- package/dist/languages/am.js.map +1 -0
- package/dist/languages/ar.js +3 -0
- package/dist/languages/ar.js.map +1 -0
- package/dist/languages/az.js +3 -0
- package/dist/languages/az.js.map +1 -0
- package/dist/languages/bn.js +3 -0
- package/dist/languages/bn.js.map +1 -0
- package/dist/languages/cs.js +3 -0
- package/dist/languages/cs.js.map +1 -0
- package/dist/languages/da.js +3 -0
- package/dist/languages/da.js.map +1 -0
- package/dist/languages/de.js +3 -0
- package/dist/languages/de.js.map +1 -0
- package/dist/languages/el.js +3 -0
- package/dist/languages/el.js.map +1 -0
- package/dist/languages/en.js +3 -0
- package/dist/languages/en.js.map +1 -0
- package/dist/languages/es.js +3 -0
- package/dist/languages/es.js.map +1 -0
- package/dist/languages/fa.js +3 -0
- package/dist/languages/fa.js.map +1 -0
- package/dist/languages/fi.js +3 -0
- package/dist/languages/fi.js.map +1 -0
- package/dist/languages/fil.js +3 -0
- package/dist/languages/fil.js.map +1 -0
- package/dist/languages/fr-BE.js +3 -0
- package/dist/languages/fr-BE.js.map +1 -0
- package/dist/languages/fr.js +3 -0
- package/dist/languages/fr.js.map +1 -0
- package/dist/languages/gu.js +3 -0
- package/dist/languages/gu.js.map +1 -0
- package/dist/languages/ha.js +3 -0
- package/dist/languages/ha.js.map +1 -0
- package/dist/languages/hbo.js +3 -0
- package/dist/languages/hbo.js.map +1 -0
- package/dist/languages/he.js +3 -0
- package/dist/languages/he.js.map +1 -0
- package/dist/languages/hi.js +3 -0
- package/dist/languages/hi.js.map +1 -0
- package/dist/languages/hr.js +3 -0
- package/dist/languages/hr.js.map +1 -0
- package/dist/languages/hu.js +3 -0
- package/dist/languages/hu.js.map +1 -0
- package/dist/languages/id.js +3 -0
- package/dist/languages/id.js.map +1 -0
- package/dist/languages/it.js +3 -0
- package/dist/languages/it.js.map +1 -0
- package/dist/languages/ja.js +3 -0
- package/dist/languages/ja.js.map +1 -0
- package/dist/languages/kn.js +3 -0
- package/dist/languages/kn.js.map +1 -0
- package/dist/languages/ko.js +3 -0
- package/dist/languages/ko.js.map +1 -0
- package/dist/languages/lt.js +3 -0
- package/dist/languages/lt.js.map +1 -0
- package/dist/languages/lv.js +3 -0
- package/dist/languages/lv.js.map +1 -0
- package/dist/languages/mr.js +3 -0
- package/dist/languages/mr.js.map +1 -0
- package/dist/languages/ms.js +3 -0
- package/dist/languages/ms.js.map +1 -0
- package/dist/languages/nb.js +3 -0
- package/dist/languages/nb.js.map +1 -0
- package/dist/languages/nl.js +3 -0
- package/dist/languages/nl.js.map +1 -0
- package/dist/languages/pa.js +3 -0
- package/dist/languages/pa.js.map +1 -0
- package/dist/languages/pl.js +3 -0
- package/dist/languages/pl.js.map +1 -0
- package/dist/languages/pt.js +3 -0
- package/dist/languages/pt.js.map +1 -0
- package/dist/languages/ro.js +3 -0
- package/dist/languages/ro.js.map +1 -0
- package/dist/languages/ru.js +3 -0
- package/dist/languages/ru.js.map +1 -0
- package/dist/languages/sr-Cyrl.js +3 -0
- package/dist/languages/sr-Cyrl.js.map +1 -0
- package/dist/languages/sr-Latn.js +3 -0
- package/dist/languages/sr-Latn.js.map +1 -0
- package/dist/languages/sv.js +3 -0
- package/dist/languages/sv.js.map +1 -0
- package/dist/languages/sw.js +3 -0
- package/dist/languages/sw.js.map +1 -0
- package/dist/languages/ta.js +3 -0
- package/dist/languages/ta.js.map +1 -0
- package/dist/languages/te.js +3 -0
- package/dist/languages/te.js.map +1 -0
- package/dist/languages/th.js +3 -0
- package/dist/languages/th.js.map +1 -0
- package/dist/languages/tr.js +3 -0
- package/dist/languages/tr.js.map +1 -0
- package/dist/languages/uk.js +3 -0
- package/dist/languages/uk.js.map +1 -0
- package/dist/languages/ur.js +3 -0
- package/dist/languages/ur.js.map +1 -0
- package/dist/languages/vi.js +3 -0
- package/dist/languages/vi.js.map +1 -0
- package/dist/languages/zh-Hans.js +3 -0
- package/dist/languages/zh-Hans.js.map +1 -0
- package/dist/languages/zh-Hant.js +3 -0
- package/dist/languages/zh-Hant.js.map +1 -0
- package/dist/n2words.js +2 -2
- package/dist/n2words.js.map +1 -1
- package/lib/languages/am-Latn.d.ts +7 -0
- package/lib/languages/am-Latn.js +164 -0
- package/lib/languages/am.d.ts +7 -0
- package/lib/languages/am.js +164 -0
- package/lib/languages/ar.d.ts +14 -27
- package/lib/languages/ar.js +175 -129
- package/lib/languages/az.d.ts +4 -9
- package/lib/languages/az.js +171 -37
- package/lib/languages/bn.d.ts +4 -8
- package/lib/languages/bn.js +138 -124
- package/lib/languages/cs.d.ts +15 -85
- package/lib/languages/cs.js +310 -114
- package/lib/languages/da.d.ts +11 -12
- package/lib/languages/da.js +276 -101
- package/lib/languages/de.d.ts +14 -11
- package/lib/languages/de.js +317 -86
- package/lib/languages/el.d.ts +11 -11
- package/lib/languages/el.js +231 -78
- package/lib/languages/en.d.ts +14 -13
- package/lib/languages/en.js +242 -72
- package/lib/languages/es.d.ts +18 -12
- package/lib/languages/es.js +317 -103
- package/lib/languages/fa.d.ts +4 -44
- package/lib/languages/fa.js +112 -122
- package/lib/languages/fi.d.ts +14 -0
- package/lib/languages/fi.js +245 -0
- package/lib/languages/fil.d.ts +4 -13
- package/lib/languages/fil.js +207 -106
- package/lib/languages/fr-BE.d.ts +8 -8
- package/lib/languages/fr-BE.js +294 -19
- package/lib/languages/fr.d.ts +18 -12
- package/lib/languages/fr.js +352 -89
- package/lib/languages/gu.d.ts +4 -8
- package/lib/languages/gu.js +130 -125
- package/lib/languages/ha.d.ts +7 -0
- package/lib/languages/ha.js +230 -0
- package/lib/languages/hbo.d.ts +10 -110
- package/lib/languages/hbo.js +263 -214
- package/lib/languages/he.d.ts +10 -77
- package/lib/languages/he.js +242 -172
- package/lib/languages/hi.d.ts +4 -8
- package/lib/languages/hi.js +138 -124
- package/lib/languages/hr.d.ts +8 -77
- package/lib/languages/hr.js +194 -89
- package/lib/languages/hu.d.ts +4 -19
- package/lib/languages/hu.js +198 -119
- package/lib/languages/id.d.ts +4 -34
- package/lib/languages/id.js +171 -129
- package/lib/languages/it.d.ts +16 -34
- package/lib/languages/it.js +339 -94
- package/lib/languages/ja.d.ts +14 -14
- package/lib/languages/ja.js +233 -111
- package/lib/languages/kn.d.ts +4 -8
- package/lib/languages/kn.js +130 -35
- package/lib/languages/ko.d.ts +11 -11
- package/lib/languages/ko.js +257 -49
- package/lib/languages/lt.d.ts +15 -67
- package/lib/languages/lt.js +296 -122
- package/lib/languages/lv.d.ts +15 -67
- package/lib/languages/lv.js +297 -106
- package/lib/languages/mr.d.ts +4 -8
- package/lib/languages/mr.js +130 -125
- package/lib/languages/ms.d.ts +4 -28
- package/lib/languages/ms.js +171 -116
- package/lib/languages/nb.d.ts +11 -9
- package/lib/languages/nb.js +282 -87
- package/lib/languages/nl.d.ts +23 -13
- package/lib/languages/nl.js +317 -133
- package/lib/languages/pa.d.ts +4 -8
- package/lib/languages/pa.js +156 -124
- package/lib/languages/pl.d.ts +19 -77
- package/lib/languages/pl.js +307 -87
- package/lib/languages/pt.d.ts +14 -26
- package/lib/languages/pt.js +286 -92
- package/lib/languages/ro.d.ts +15 -155
- package/lib/languages/ro.js +219 -235
- package/lib/languages/ru.d.ts +8 -82
- package/lib/languages/ru.js +222 -78
- package/lib/languages/sr-Cyrl.d.ts +8 -77
- package/lib/languages/sr-Cyrl.js +191 -89
- package/lib/languages/sr-Latn.d.ts +8 -77
- package/lib/languages/sr-Latn.js +191 -89
- package/lib/languages/sv.d.ts +11 -11
- package/lib/languages/sv.js +288 -74
- package/lib/languages/sw.d.ts +4 -36
- package/lib/languages/sw.js +133 -106
- package/lib/languages/ta.d.ts +4 -17
- package/lib/languages/ta.js +129 -201
- package/lib/languages/te.d.ts +4 -19
- package/lib/languages/te.js +141 -196
- package/lib/languages/th.d.ts +4 -14
- package/lib/languages/th.js +135 -91
- package/lib/languages/tr.d.ts +15 -9
- package/lib/languages/tr.js +256 -49
- package/lib/languages/uk.d.ts +8 -82
- package/lib/languages/uk.js +200 -78
- package/lib/languages/ur.d.ts +4 -8
- package/lib/languages/ur.js +156 -124
- package/lib/languages/vi.d.ts +14 -69
- package/lib/languages/vi.js +294 -125
- package/lib/languages/zh-Hans.d.ts +8 -18
- package/lib/languages/zh-Hans.js +163 -92
- package/lib/languages/zh-Hant.d.ts +8 -18
- package/lib/languages/zh-Hant.js +181 -90
- package/lib/n2words.d.ts +53 -209
- package/lib/n2words.js +111 -530
- package/lib/utils/is-plain-object.d.ts +13 -0
- package/lib/utils/is-plain-object.js +17 -0
- package/lib/utils/parse-numeric.d.ts +17 -0
- package/lib/utils/parse-numeric.js +108 -0
- package/lib/utils/validate-options.d.ts +8 -0
- package/lib/utils/validate-options.js +16 -0
- package/package.json +26 -14
- package/dist/ArabicConverter.js +0 -3
- package/dist/ArabicConverter.js.map +0 -1
- package/dist/AzerbaijaniConverter.js +0 -3
- package/dist/AzerbaijaniConverter.js.map +0 -1
- package/dist/BanglaConverter.js +0 -3
- package/dist/BanglaConverter.js.map +0 -1
- package/dist/BiblicalHebrewConverter.js +0 -3
- package/dist/BiblicalHebrewConverter.js.map +0 -1
- package/dist/CroatianConverter.js +0 -3
- package/dist/CroatianConverter.js.map +0 -1
- package/dist/CzechConverter.js +0 -3
- package/dist/CzechConverter.js.map +0 -1
- package/dist/DanishConverter.js +0 -3
- package/dist/DanishConverter.js.map +0 -1
- package/dist/DutchConverter.js +0 -3
- package/dist/DutchConverter.js.map +0 -1
- package/dist/EnglishConverter.js +0 -3
- package/dist/EnglishConverter.js.map +0 -1
- package/dist/FilipinoConverter.js +0 -3
- package/dist/FilipinoConverter.js.map +0 -1
- package/dist/FrenchBelgiumConverter.js +0 -3
- package/dist/FrenchBelgiumConverter.js.map +0 -1
- package/dist/FrenchConverter.js +0 -3
- package/dist/FrenchConverter.js.map +0 -1
- package/dist/GermanConverter.js +0 -3
- package/dist/GermanConverter.js.map +0 -1
- package/dist/GreekConverter.js +0 -3
- package/dist/GreekConverter.js.map +0 -1
- package/dist/GujaratiConverter.js +0 -3
- package/dist/GujaratiConverter.js.map +0 -1
- package/dist/HebrewConverter.js +0 -3
- package/dist/HebrewConverter.js.map +0 -1
- package/dist/HindiConverter.js +0 -3
- package/dist/HindiConverter.js.map +0 -1
- package/dist/HungarianConverter.js +0 -3
- package/dist/HungarianConverter.js.map +0 -1
- package/dist/IndonesianConverter.js +0 -3
- package/dist/IndonesianConverter.js.map +0 -1
- package/dist/ItalianConverter.js +0 -3
- package/dist/ItalianConverter.js.map +0 -1
- package/dist/JapaneseConverter.js +0 -3
- package/dist/JapaneseConverter.js.map +0 -1
- package/dist/KannadaConverter.js +0 -3
- package/dist/KannadaConverter.js.map +0 -1
- package/dist/KoreanConverter.js +0 -3
- package/dist/KoreanConverter.js.map +0 -1
- package/dist/LatvianConverter.js +0 -3
- package/dist/LatvianConverter.js.map +0 -1
- package/dist/LithuanianConverter.js +0 -3
- package/dist/LithuanianConverter.js.map +0 -1
- package/dist/MalayConverter.js +0 -3
- package/dist/MalayConverter.js.map +0 -1
- package/dist/MarathiConverter.js +0 -3
- package/dist/MarathiConverter.js.map +0 -1
- package/dist/NorwegianBokmalConverter.js +0 -3
- package/dist/NorwegianBokmalConverter.js.map +0 -1
- package/dist/PersianConverter.js +0 -3
- package/dist/PersianConverter.js.map +0 -1
- package/dist/PolishConverter.js +0 -3
- package/dist/PolishConverter.js.map +0 -1
- package/dist/PortugueseConverter.js +0 -3
- package/dist/PortugueseConverter.js.map +0 -1
- package/dist/PunjabiConverter.js +0 -3
- package/dist/PunjabiConverter.js.map +0 -1
- package/dist/RomanianConverter.js +0 -3
- package/dist/RomanianConverter.js.map +0 -1
- package/dist/RussianConverter.js +0 -3
- package/dist/RussianConverter.js.map +0 -1
- package/dist/SerbianCyrillicConverter.js +0 -3
- package/dist/SerbianCyrillicConverter.js.map +0 -1
- package/dist/SerbianLatinConverter.js +0 -3
- package/dist/SerbianLatinConverter.js.map +0 -1
- package/dist/SimplifiedChineseConverter.js +0 -3
- package/dist/SimplifiedChineseConverter.js.map +0 -1
- package/dist/SpanishConverter.js +0 -3
- package/dist/SpanishConverter.js.map +0 -1
- package/dist/SwahiliConverter.js +0 -3
- package/dist/SwahiliConverter.js.map +0 -1
- package/dist/SwedishConverter.js +0 -3
- package/dist/SwedishConverter.js.map +0 -1
- package/dist/TamilConverter.js +0 -3
- package/dist/TamilConverter.js.map +0 -1
- package/dist/TeluguConverter.js +0 -3
- package/dist/TeluguConverter.js.map +0 -1
- package/dist/ThaiConverter.js +0 -3
- package/dist/ThaiConverter.js.map +0 -1
- package/dist/TraditionalChineseConverter.js +0 -3
- package/dist/TraditionalChineseConverter.js.map +0 -1
- package/dist/TurkishConverter.js +0 -3
- package/dist/TurkishConverter.js.map +0 -1
- package/dist/UkrainianConverter.js +0 -3
- package/dist/UkrainianConverter.js.map +0 -1
- package/dist/UrduConverter.js +0 -3
- package/dist/UrduConverter.js.map +0 -1
- package/dist/VietnameseConverter.js +0 -3
- package/dist/VietnameseConverter.js.map +0 -1
- package/lib/classes/abstract-language.d.ts +0 -178
- package/lib/classes/abstract-language.js +0 -268
- package/lib/classes/greedy-scale-language.d.ts +0 -109
- package/lib/classes/greedy-scale-language.js +0 -201
- package/lib/classes/slavic-language.d.ts +0 -148
- package/lib/classes/slavic-language.js +0 -281
- package/lib/classes/south-asian-language.d.ts +0 -70
- package/lib/classes/south-asian-language.js +0 -154
- package/lib/classes/turkic-language.d.ts +0 -26
- package/lib/classes/turkic-language.js +0 -59
package/lib/languages/te.js
CHANGED
|
@@ -1,219 +1,164 @@
|
|
|
1
|
-
import { AbstractLanguage } from '../classes/abstract-language.js'
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
|
-
* Telugu language converter
|
|
2
|
+
* Telugu language converter - Functional Implementation
|
|
3
|
+
*
|
|
4
|
+
* Self-contained converter for South Asian numbering.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
6
|
+
* Key features:
|
|
7
|
+
* - Indian numbering system (వెయ్యి, లక్ష, కోటి)
|
|
8
8
|
* - Telugu script
|
|
9
|
+
* - 3-2-2 grouping pattern
|
|
9
10
|
* - Complete word forms for 0-99
|
|
11
|
+
* - Per-digit decimal reading
|
|
10
12
|
*/
|
|
11
|
-
export class Telugu extends AbstractLanguage {
|
|
12
|
-
negativeWord = 'మైనస్'
|
|
13
|
-
decimalSeparatorWord = 'పాయింట్'
|
|
14
|
-
zeroWord = 'సున్నా'
|
|
15
|
-
usePerDigitDecimals = true // Enable digit-by-digit decimal conversion
|
|
16
|
-
|
|
17
|
-
belowHundredWords = [
|
|
18
|
-
'సున్నా',
|
|
19
|
-
'ఒకటి',
|
|
20
|
-
'రెండు',
|
|
21
|
-
'మూడు',
|
|
22
|
-
'నాలుగు',
|
|
23
|
-
'ఐదు',
|
|
24
|
-
'ఆరు',
|
|
25
|
-
'ఏడు',
|
|
26
|
-
'ఎనిమిది',
|
|
27
|
-
'తొమ్మిది',
|
|
28
|
-
'పది',
|
|
29
|
-
'పదకొండు',
|
|
30
|
-
'పన్నెండు',
|
|
31
|
-
'పదమూడు',
|
|
32
|
-
'పద్నాలుగు',
|
|
33
|
-
'పదిహేను',
|
|
34
|
-
'పదహారు',
|
|
35
|
-
'పదిహేడు',
|
|
36
|
-
'పద్దెనిమిది',
|
|
37
|
-
'పంతొమ్మిది',
|
|
38
|
-
'ఇరవై',
|
|
39
|
-
'ఇరవై ఒక్కటి',
|
|
40
|
-
'ఇరవై రెండు',
|
|
41
|
-
'ఇరవై మూడు',
|
|
42
|
-
'ఇరవై నాలుగు',
|
|
43
|
-
'ఇరవై ఐదు',
|
|
44
|
-
'ఇరవై ఆరు',
|
|
45
|
-
'ఇరవై ఏడు',
|
|
46
|
-
'ఇరవై ఎనిమిది',
|
|
47
|
-
'ఇరవై తొమ్మిది',
|
|
48
|
-
'ముప్పై',
|
|
49
|
-
'ముప్పై ఒకటి',
|
|
50
|
-
'ముప్పై రెండు',
|
|
51
|
-
'ముప్పై మూడు',
|
|
52
|
-
'ముప్పై నాలుగు',
|
|
53
|
-
'ముప్పై ఐదు',
|
|
54
|
-
'ముప్పై ఆరు',
|
|
55
|
-
'ముప్పై ఏడు',
|
|
56
|
-
'ముప్పై ఎనిమిది',
|
|
57
|
-
'ముప్పై తొమ్మిది',
|
|
58
|
-
'నలభై',
|
|
59
|
-
'నలభై ఒకటి',
|
|
60
|
-
'నలభై రెండు',
|
|
61
|
-
'నలభై మూడు',
|
|
62
|
-
'నలభై నాలుగు',
|
|
63
|
-
'నలభై ఐదు',
|
|
64
|
-
'నలభై ఆరు',
|
|
65
|
-
'నలభై ఏడు',
|
|
66
|
-
'నలభై ఎనిమిది',
|
|
67
|
-
'నలభై తొమ్మిది',
|
|
68
|
-
'యాభై',
|
|
69
|
-
'యాభై ఒకటి',
|
|
70
|
-
'యాభై రెండు',
|
|
71
|
-
'యాభై మూడు',
|
|
72
|
-
'యాభై నాలుగు',
|
|
73
|
-
'యాభై ఐదు',
|
|
74
|
-
'యాభై ఆరు',
|
|
75
|
-
'యాభై ఏడు',
|
|
76
|
-
'యాభై ఎనిమిది',
|
|
77
|
-
'యాభై తొమ్మిది',
|
|
78
|
-
'అరవై',
|
|
79
|
-
'అరవై ఒకటి',
|
|
80
|
-
'అరవై రెండు',
|
|
81
|
-
'అరవై మూడు',
|
|
82
|
-
'అరవై నాలుగు',
|
|
83
|
-
'అరవై ఐదు',
|
|
84
|
-
'అరవై ఆరు',
|
|
85
|
-
'అరవై ఏడు',
|
|
86
|
-
'అరవై ఎనిమిది',
|
|
87
|
-
'అరవై తొమ్మిది',
|
|
88
|
-
'డెబ్బై',
|
|
89
|
-
'డెబ్బై ఒకటి',
|
|
90
|
-
'డెబ్బై రెండు',
|
|
91
|
-
'డెబ్బై మూడు',
|
|
92
|
-
'డెబ్బై నాలుగు',
|
|
93
|
-
'డెబ్బై ఐదు',
|
|
94
|
-
'డెబ్బై ఆరు',
|
|
95
|
-
'డెబ్బై ఏడు',
|
|
96
|
-
'డెబ్బై ఎనిమిది',
|
|
97
|
-
'డెబ్బై తొమ్మిది',
|
|
98
|
-
'ఎనభై',
|
|
99
|
-
'ఎనభై ఒకటి',
|
|
100
|
-
'ఎనభై రెండు',
|
|
101
|
-
'ఎనభై మూడు',
|
|
102
|
-
'ఎనభై నాలుగు',
|
|
103
|
-
'ఎనభై ఐదు',
|
|
104
|
-
'ఎనభై ఆరు',
|
|
105
|
-
'ఎనభై ఏడు',
|
|
106
|
-
'ఎనభై ఎనిమిది',
|
|
107
|
-
'ఎనభై తొమ్మిది',
|
|
108
|
-
'తొంభై',
|
|
109
|
-
'తొంభై ఒకటి',
|
|
110
|
-
'తొంభై రెండు',
|
|
111
|
-
'తొంభై మూడు',
|
|
112
|
-
'తొంభై నాలుగు',
|
|
113
|
-
'తొంభై ఐదు',
|
|
114
|
-
'తొంభై ఆరు',
|
|
115
|
-
'తొంభై ఏడు',
|
|
116
|
-
'తొంభై ఎనిమిది',
|
|
117
|
-
'తొంభై తొమ్మిది'
|
|
118
|
-
]
|
|
119
|
-
|
|
120
|
-
hundredsWords = [
|
|
121
|
-
'',
|
|
122
|
-
'వంద',
|
|
123
|
-
'రెండు వందలు',
|
|
124
|
-
'మూడు వందలు',
|
|
125
|
-
'నాలుగు వందలు',
|
|
126
|
-
'ఐదు వందలు',
|
|
127
|
-
'ఆరు వందలు',
|
|
128
|
-
'ఏడు వందలు',
|
|
129
|
-
'ఎనిమిది వందలు',
|
|
130
|
-
'తొమ్మిది వందలు'
|
|
131
|
-
]
|
|
132
|
-
|
|
133
|
-
// Ones words map 1–9 for decimal reading
|
|
134
|
-
onesWords = [
|
|
135
|
-
'ఒకటి',
|
|
136
|
-
'రెండు',
|
|
137
|
-
'మూడు',
|
|
138
|
-
'నాలుగు',
|
|
139
|
-
'ఐదు',
|
|
140
|
-
'ఆరు',
|
|
141
|
-
'ఏడు',
|
|
142
|
-
'ఎనిమిది',
|
|
143
|
-
'తొమ్మిది'
|
|
144
|
-
]
|
|
145
|
-
|
|
146
|
-
scaleWords = [
|
|
147
|
-
'',
|
|
148
|
-
'వెయ్యి',
|
|
149
|
-
'లక్ష',
|
|
150
|
-
'కోటి',
|
|
151
|
-
'అరబ్',
|
|
152
|
-
'ఖరబ్',
|
|
153
|
-
'నిల్',
|
|
154
|
-
'పడ్మ',
|
|
155
|
-
'శంకు'
|
|
156
|
-
]
|
|
157
|
-
|
|
158
|
-
/** Convert numbers below 100 to Telugu words. */
|
|
159
|
-
convertBelowHundred (number) {
|
|
160
|
-
return this.belowHundredWords[number]
|
|
161
|
-
}
|
|
162
13
|
|
|
163
|
-
|
|
164
|
-
convertBelowThousand (number) {
|
|
165
|
-
if (number === 0) return ''
|
|
166
|
-
if (number < 100) return this.convertBelowHundred(number)
|
|
14
|
+
import { parseNumericValue } from '../utils/parse-numeric.js'
|
|
167
15
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Vocabulary
|
|
18
|
+
// ============================================================================
|
|
171
19
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
20
|
+
const ZERO = 'సున్నా'
|
|
21
|
+
const NEGATIVE = 'మైనస్'
|
|
22
|
+
const DECIMAL_SEP = 'పాయింట్'
|
|
23
|
+
|
|
24
|
+
const BELOW_HUNDRED = [
|
|
25
|
+
'సున్నా', 'ఒకటి', 'రెండు', 'మూడు', 'నాలుగు', 'ఐదు', 'ఆరు', 'ఏడు', 'ఎనిమిది', 'తొమ్మిది',
|
|
26
|
+
'పది', 'పదకొండు', 'పన్నెండు', 'పదమూడు', 'పద్నాలుగు', 'పదిహేను', 'పదహారు', 'పదిహేడు', 'పద్దెనిమిది', 'పంతొమ్మిది',
|
|
27
|
+
'ఇరవై', 'ఇరవై ఒక్కటి', 'ఇరవై రెండు', 'ఇరవై మూడు', 'ఇరవై నాలుగు', 'ఇరవై ఐదు', 'ఇరవై ఆరు', 'ఇరవై ఏడు', 'ఇరవై ఎనిమిది', 'ఇరవై తొమ్మిది',
|
|
28
|
+
'ముప్పై', 'ముప్పై ఒకటి', 'ముప్పై రెండు', 'ముప్పై మూడు', 'ముప్పై నాలుగు', 'ముప్పై ఐదు', 'ముప్పై ఆరు', 'ముప్పై ఏడు', 'ముప్పై ఎనిమిది', 'ముప్పై తొమ్మిది',
|
|
29
|
+
'నలభై', 'నలభై ఒకటి', 'నలభై రెండు', 'నలభై మూడు', 'నలభై నాలుగు', 'నలభై ఐదు', 'నలభై ఆరు', 'నలభై ఏడు', 'నలభై ఎనిమిది', 'నలభై తొమ్మిది',
|
|
30
|
+
'యాభై', 'యాభై ఒకటి', 'యాభై రెండు', 'యాభై మూడు', 'యాభై నాలుగు', 'యాభై ఐదు', 'యాభై ఆరు', 'యాభై ఏడు', 'యాభై ఎనిమిది', 'యాభై తొమ్మిది',
|
|
31
|
+
'అరవై', 'అరవై ఒకటి', 'అరవై రెండు', 'అరవై మూడు', 'అరవై నాలుగు', 'అరవై ఐదు', 'అరవై ఆరు', 'అరవై ఏడు', 'అరవై ఎనిమిది', 'అరవై తొమ్మిది',
|
|
32
|
+
'డెబ్బై', 'డెబ్బై ఒకటి', 'డెబ్బై రెండు', 'డెబ్బై మూడు', 'డెబ్బై నాలుగు', 'డెబ్బై ఐదు', 'డెబ్బై ఆరు', 'డెబ్బై ఏడు', 'డెబ్బై ఎనిమిది', 'డెబ్బై తొమ్మిది',
|
|
33
|
+
'ఎనభై', 'ఎనభై ఒకటి', 'ఎనభై రెండు', 'ఎనభై మూడు', 'ఎనభై నాలుగు', 'ఎనభై ఐదు', 'ఎనభై ఆరు', 'ఎనభై ఏడు', 'ఎనభై ఎనిమిది', 'ఎనభై తొమ్మిది',
|
|
34
|
+
'తొంభై', 'తొంభై ఒకటి', 'తొంభై రెండు', 'తొంభై మూడు', 'తొంభై నాలుగు', 'తొంభై ఐదు', 'తొంభై ఆరు', 'తొంభై ఏడు', 'తొంభై ఎనిమిది', 'తొంభై తొమ్మిది'
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// Vocabulary (continued)
|
|
39
|
+
// ============================================================================
|
|
40
|
+
|
|
41
|
+
const HUNDREDS = ['', 'వంద', 'రెండు వందలు', 'మూడు వందలు', 'నాలుగు వందలు', 'ఐదు వందలు', 'ఆరు వందలు', 'ఏడు వందలు', 'ఎనిమిది వందలు', 'తొమ్మిది వందలు']
|
|
42
|
+
|
|
43
|
+
// Ones for decimal reading
|
|
44
|
+
const ONES = ['ఒకటి', 'రెండు', 'మూడు', 'నాలుగు', 'ఐదు', 'ఆరు', 'ఏడు', 'ఎనిమిది', 'తొమ్మిది']
|
|
45
|
+
|
|
46
|
+
// Scale words: index 0 = units, 1 = thousand, 2 = lakh, etc.
|
|
47
|
+
const SCALE_WORDS = ['', 'వెయ్యి', 'లక్ష', 'కోటి', 'అరబ్', 'ఖరబ్', 'నిల్', 'పడ్మ', 'శంకు']
|
|
48
|
+
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Conversion Functions
|
|
51
|
+
// ============================================================================
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Converts 0-999 to Telugu words.
|
|
55
|
+
*/
|
|
56
|
+
function convertBelowThousand (n) {
|
|
57
|
+
if (n === 0) return ''
|
|
58
|
+
if (n < 100) return BELOW_HUNDRED[n]
|
|
59
|
+
|
|
60
|
+
const hundreds = Math.trunc(n / 100)
|
|
61
|
+
const remainder = n % 100
|
|
62
|
+
|
|
63
|
+
if (remainder === 0) {
|
|
64
|
+
return HUNDREDS[hundreds]
|
|
65
|
+
}
|
|
66
|
+
return HUNDREDS[hundreds] + ' ' + BELOW_HUNDRED[remainder]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Converts a non-negative integer to Telugu words.
|
|
71
|
+
* Uses recursive approach for Indian 3-2-2 grouping pattern.
|
|
72
|
+
*
|
|
73
|
+
* @param {bigint} n - Non-negative integer to convert
|
|
74
|
+
* @returns {string} Telugu words
|
|
75
|
+
*/
|
|
76
|
+
function integerToWords (n) {
|
|
77
|
+
if (n === 0n) return ZERO
|
|
175
78
|
|
|
176
|
-
|
|
79
|
+
// Fast path: numbers < 1000 (direct lookup)
|
|
80
|
+
if (n < 1000n) {
|
|
81
|
+
return convertBelowThousand(Number(n))
|
|
177
82
|
}
|
|
178
83
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const numStr = number.toString()
|
|
182
|
-
if (numStr.length <= 3) return [Number(numStr)]
|
|
84
|
+
return buildLargeNumberWords(n, 0)
|
|
85
|
+
}
|
|
183
86
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Recursively builds words for numbers >= 1000.
|
|
89
|
+
* Indian grouping: first 3 digits, then 2-digit groups.
|
|
90
|
+
*
|
|
91
|
+
* @param {bigint} n - Number to convert
|
|
92
|
+
* @param {number} scale - Current scale index (0=units, 1=thousands, etc.)
|
|
93
|
+
* @returns {string} Telugu words
|
|
94
|
+
*/
|
|
95
|
+
function buildLargeNumberWords (n, scale) {
|
|
96
|
+
if (n === 0n) return ''
|
|
97
|
+
|
|
98
|
+
// Determine divisor: 1000 for first split, 100 for rest
|
|
99
|
+
const divisor = scale === 0 ? 1000n : 100n
|
|
100
|
+
const segment = Number(n % divisor)
|
|
101
|
+
const rest = n / divisor
|
|
102
|
+
|
|
103
|
+
// Build higher segments first (recursive)
|
|
104
|
+
let result = ''
|
|
105
|
+
if (rest > 0n) {
|
|
106
|
+
result = buildLargeNumberWords(rest, scale + 1)
|
|
107
|
+
}
|
|
187
108
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
109
|
+
// Add current segment
|
|
110
|
+
if (segment > 0) {
|
|
111
|
+
if (result) result += ' '
|
|
112
|
+
|
|
113
|
+
if (scale === 0) {
|
|
114
|
+
// Units segment (0-999)
|
|
115
|
+
result += convertBelowThousand(segment)
|
|
116
|
+
} else {
|
|
117
|
+
// Scale segments (0-99)
|
|
118
|
+
const groupWords = (segment === 1) ? 'ఒక' : BELOW_HUNDRED[segment]
|
|
119
|
+
result += groupWords + ' ' + SCALE_WORDS[scale]
|
|
193
120
|
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return result
|
|
124
|
+
}
|
|
194
125
|
|
|
195
|
-
|
|
126
|
+
function decimalPartToWords (decimalPart) {
|
|
127
|
+
// Per-digit decimal reading
|
|
128
|
+
const digits = []
|
|
129
|
+
for (const char of decimalPart) {
|
|
130
|
+
const d = parseInt(char, 10)
|
|
131
|
+
digits.push(d === 0 ? ZERO : ONES[d - 1])
|
|
196
132
|
}
|
|
133
|
+
return digits.join(' ')
|
|
134
|
+
}
|
|
197
135
|
|
|
198
|
-
|
|
199
|
-
|
|
136
|
+
/**
|
|
137
|
+
* Converts a numeric value to Telugu words.
|
|
138
|
+
*
|
|
139
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
140
|
+
* @returns {string} The number in Telugu words
|
|
141
|
+
*/
|
|
142
|
+
function toWords (value) {
|
|
143
|
+
const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
|
|
200
144
|
|
|
201
|
-
|
|
202
|
-
const groupCount = groups.length
|
|
203
|
-
const words = []
|
|
145
|
+
let result = ''
|
|
204
146
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
147
|
+
if (isNegative) {
|
|
148
|
+
result = NEGATIVE + ' '
|
|
149
|
+
}
|
|
208
150
|
|
|
209
|
-
|
|
210
|
-
const groupWords = (groupValue === 1 && scaleIndex > 0) ? 'ఒక' : this.convertBelowThousand(groupValue)
|
|
211
|
-
words.push(groupWords)
|
|
212
|
-
if (scaleIndex > 0 && this.scaleWords[scaleIndex]) {
|
|
213
|
-
words.push(this.scaleWords[scaleIndex])
|
|
214
|
-
}
|
|
215
|
-
}
|
|
151
|
+
result += integerToWords(integerPart)
|
|
216
152
|
|
|
217
|
-
|
|
153
|
+
if (decimalPart) {
|
|
154
|
+
result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
|
|
218
155
|
}
|
|
156
|
+
|
|
157
|
+
return result
|
|
219
158
|
}
|
|
159
|
+
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// Exports
|
|
162
|
+
// ============================================================================
|
|
163
|
+
|
|
164
|
+
export { toWords }
|
package/lib/languages/th.d.ts
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Thai
|
|
2
|
+
* Converts a numeric value to Thai words.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - No word separators (continuous Thai script)
|
|
7
|
-
* - Digit-by-digit decimal reading
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @returns {string} The number in Thai words
|
|
8
6
|
*/
|
|
9
|
-
export
|
|
10
|
-
onesWords: string[];
|
|
11
|
-
/** Converts numbers below one million to Thai words. */
|
|
12
|
-
convertBelowMillion(number: any): string;
|
|
13
|
-
/** Split a number into million-sized groups for processing. */
|
|
14
|
-
splitMillionGroups(number: any): number[];
|
|
15
|
-
integerToWords(integerPart: any): string;
|
|
16
|
-
}
|
|
17
|
-
import { AbstractLanguage } from '../classes/abstract-language.js';
|
|
7
|
+
export function toWords(value: number | string | bigint): string;
|
package/lib/languages/th.js
CHANGED
|
@@ -1,117 +1,161 @@
|
|
|
1
|
-
import { AbstractLanguage } from '../classes/abstract-language.js'
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
|
-
* Thai language converter
|
|
2
|
+
* Thai language converter - Functional Implementation
|
|
3
|
+
*
|
|
4
|
+
* Self-contained converter with precomputed lookup tables.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* - Thai numerals (ศูนย์, หนึ่ง, สอง, สาม)
|
|
6
|
+
* Key features:
|
|
8
7
|
* - No word separators (continuous Thai script)
|
|
9
|
-
* -
|
|
8
|
+
* - Million-based grouping (ล้าน)
|
|
9
|
+
* - Special handling for 1 as "เอ็ด" in compounds
|
|
10
|
+
* - 20 is "ยี่สิบ" (not "สองสิบ")
|
|
11
|
+
* - Per-digit decimal reading
|
|
10
12
|
*/
|
|
11
|
-
export class Thai extends AbstractLanguage {
|
|
12
|
-
negativeWord = 'ลบ'
|
|
13
|
-
decimalSeparatorWord = 'จุด'
|
|
14
|
-
zeroWord = 'ศูนย์'
|
|
15
|
-
wordSeparator = ''
|
|
16
|
-
usePerDigitDecimals = true // Enable digit-by-digit decimal conversion
|
|
17
|
-
|
|
18
|
-
// Ones words map 1–9
|
|
19
|
-
onesWords = ['หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า']
|
|
20
|
-
|
|
21
|
-
/** Converts numbers below one million to Thai words. */
|
|
22
|
-
convertBelowMillion (number) {
|
|
23
|
-
if (number === 0) return ''
|
|
24
|
-
|
|
25
|
-
let value = number
|
|
26
|
-
const parts = []
|
|
27
|
-
|
|
28
|
-
const hundredThousands = Math.trunc(value / 100000)
|
|
29
|
-
value %= 100000
|
|
30
|
-
const tenThousands = Math.trunc(value / 10000)
|
|
31
|
-
value %= 10000
|
|
32
|
-
const thousands = Math.trunc(value / 1000)
|
|
33
|
-
value %= 1000
|
|
34
|
-
const hundreds = Math.trunc(value / 100)
|
|
35
|
-
value %= 100
|
|
36
|
-
const tens = Math.trunc(value / 10)
|
|
37
|
-
const ones = value % 10
|
|
38
|
-
|
|
39
|
-
if (hundredThousands > 0) {
|
|
40
|
-
parts.push(this.onesWords[hundredThousands - 1] + 'แสน')
|
|
41
|
-
}
|
|
42
13
|
|
|
43
|
-
|
|
44
|
-
if (tenThousands === 1) {
|
|
45
|
-
parts.push('หนึ่งหมื่น')
|
|
46
|
-
} else {
|
|
47
|
-
parts.push(this.onesWords[tenThousands - 1] + 'หมื่น')
|
|
48
|
-
}
|
|
49
|
-
}
|
|
14
|
+
import { parseNumericValue } from '../utils/parse-numeric.js'
|
|
50
15
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Vocabulary
|
|
18
|
+
// ============================================================================
|
|
19
|
+
|
|
20
|
+
const ONES = ['หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า']
|
|
21
|
+
|
|
22
|
+
const ZERO = 'ศูนย์'
|
|
23
|
+
const NEGATIVE = 'ลบ'
|
|
24
|
+
const DECIMAL_SEP = 'จุด'
|
|
25
|
+
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Conversion Functions
|
|
28
|
+
// ============================================================================
|
|
29
|
+
|
|
30
|
+
function convertBelowMillion (n) {
|
|
31
|
+
if (n === 0) return ''
|
|
32
|
+
|
|
33
|
+
let value = n
|
|
34
|
+
const parts = []
|
|
54
35
|
|
|
55
|
-
|
|
56
|
-
|
|
36
|
+
const hundredThousands = Math.trunc(value / 100000)
|
|
37
|
+
value %= 100000
|
|
38
|
+
const tenThousands = Math.trunc(value / 10000)
|
|
39
|
+
value %= 10000
|
|
40
|
+
const thousands = Math.trunc(value / 1000)
|
|
41
|
+
value %= 1000
|
|
42
|
+
const hundreds = Math.trunc(value / 100)
|
|
43
|
+
value %= 100
|
|
44
|
+
const tens = Math.trunc(value / 10)
|
|
45
|
+
const ones = value % 10
|
|
46
|
+
|
|
47
|
+
if (hundredThousands > 0) {
|
|
48
|
+
parts.push(ONES[hundredThousands - 1] + 'แสน')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (tenThousands > 0) {
|
|
52
|
+
if (tenThousands === 1) {
|
|
53
|
+
parts.push('หนึ่งหมื่น')
|
|
54
|
+
} else {
|
|
55
|
+
parts.push(ONES[tenThousands - 1] + 'หมื่น')
|
|
57
56
|
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (thousands > 0) {
|
|
60
|
+
parts.push(ONES[thousands - 1] + 'พัน')
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (hundreds > 0) {
|
|
64
|
+
parts.push(ONES[hundreds - 1] + 'ร้อย')
|
|
65
|
+
}
|
|
58
66
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
+
if (tens > 0) {
|
|
68
|
+
if (tens === 1) {
|
|
69
|
+
parts.push('สิบ')
|
|
70
|
+
} else if (tens === 2) {
|
|
71
|
+
parts.push('ยี่สิบ')
|
|
72
|
+
} else {
|
|
73
|
+
parts.push(ONES[tens - 1] + 'สิบ')
|
|
67
74
|
}
|
|
75
|
+
}
|
|
68
76
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
77
|
+
if (ones > 0) {
|
|
78
|
+
const hasHigher = hundredThousands > 0 || tenThousands > 0 || thousands > 0 || hundreds > 0 || tens > 0
|
|
79
|
+
if (ones === 1 && (tens > 0 || hasHigher)) {
|
|
80
|
+
parts.push('เอ็ด')
|
|
81
|
+
} else {
|
|
82
|
+
parts.push(ONES[ones - 1])
|
|
76
83
|
}
|
|
84
|
+
}
|
|
77
85
|
|
|
78
|
-
|
|
86
|
+
return parts.join('')
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function splitMillionGroups (n) {
|
|
90
|
+
const groups = []
|
|
91
|
+
let remaining = n
|
|
92
|
+
|
|
93
|
+
const million = 1_000_000n
|
|
94
|
+
while (remaining > 0n) {
|
|
95
|
+
const chunk = Number(remaining % million)
|
|
96
|
+
groups.unshift(chunk)
|
|
97
|
+
remaining = remaining / million
|
|
79
98
|
}
|
|
80
99
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
100
|
+
return groups
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function integerToWords (n) {
|
|
104
|
+
if (n === 0n) return ZERO
|
|
85
105
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
106
|
+
const groups = splitMillionGroups(n)
|
|
107
|
+
const parts = []
|
|
108
|
+
|
|
109
|
+
for (let i = 0; i < groups.length; i++) {
|
|
110
|
+
const groupValue = groups[i]
|
|
111
|
+
if (groupValue === 0) continue
|
|
112
|
+
|
|
113
|
+
parts.push(convertBelowMillion(groupValue))
|
|
114
|
+
const remaining = groups.length - i - 1
|
|
115
|
+
if (remaining > 0) {
|
|
116
|
+
parts.push('ล้าน'.repeat(remaining))
|
|
91
117
|
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return parts.join('')
|
|
121
|
+
}
|
|
92
122
|
|
|
93
|
-
|
|
123
|
+
function decimalPartToWords (decimalPart) {
|
|
124
|
+
// Per-digit decimal reading
|
|
125
|
+
const digits = []
|
|
126
|
+
for (const char of decimalPart) {
|
|
127
|
+
const d = parseInt(char, 10)
|
|
128
|
+
digits.push(d === 0 ? ZERO : ONES[d - 1])
|
|
94
129
|
}
|
|
130
|
+
return digits.join('')
|
|
131
|
+
}
|
|
95
132
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Converts a numeric value to Thai words.
|
|
135
|
+
*
|
|
136
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
137
|
+
* @returns {string} The number in Thai words
|
|
138
|
+
*/
|
|
139
|
+
function toWords (value) {
|
|
140
|
+
const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
|
|
100
141
|
|
|
101
|
-
|
|
102
|
-
const parts = []
|
|
142
|
+
let result = ''
|
|
103
143
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
144
|
+
if (isNegative) {
|
|
145
|
+
result = NEGATIVE
|
|
146
|
+
}
|
|
107
147
|
|
|
108
|
-
|
|
109
|
-
const remaining = groups.length - i - 1
|
|
110
|
-
if (remaining > 0) {
|
|
111
|
-
parts.push('ล้าน'.repeat(remaining))
|
|
112
|
-
}
|
|
113
|
-
}
|
|
148
|
+
result += integerToWords(integerPart)
|
|
114
149
|
|
|
115
|
-
|
|
150
|
+
if (decimalPart) {
|
|
151
|
+
result += DECIMAL_SEP + decimalPartToWords(decimalPart)
|
|
116
152
|
}
|
|
153
|
+
|
|
154
|
+
return result
|
|
117
155
|
}
|
|
156
|
+
|
|
157
|
+
// ============================================================================
|
|
158
|
+
// Exports
|
|
159
|
+
// ============================================================================
|
|
160
|
+
|
|
161
|
+
export { toWords }
|
package/lib/languages/tr.d.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Turkish
|
|
2
|
+
* Converts a numeric value to Turkish words.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @param {Object} [options] - Conversion options
|
|
6
|
+
* @param {boolean} [options.dropSpaces=false] - Remove spaces for compound form
|
|
7
|
+
* @returns {string} The number in Turkish words
|
|
8
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
9
|
+
* @throws {Error} If value is not a valid number format
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* toWords(21) // 'yirmi bir'
|
|
13
|
+
* toWords(21, { dropSpaces: true }) // 'yirmibir'
|
|
14
|
+
* toWords(1000) // 'bin'
|
|
7
15
|
*/
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
import { TurkicLanguage } from '../classes/turkic-language.js';
|
|
16
|
+
export function toWords(value: number | string | bigint, options?: {
|
|
17
|
+
dropSpaces?: boolean | undefined;
|
|
18
|
+
}): string;
|