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.
Files changed (349) hide show
  1. package/README.md +285 -156
  2. package/dist/ArabicConverter.js +3 -0
  3. package/dist/ArabicConverter.js.map +1 -0
  4. package/dist/AzerbaijaniConverter.js +3 -0
  5. package/dist/AzerbaijaniConverter.js.map +1 -0
  6. package/dist/BanglaConverter.js +3 -0
  7. package/dist/BanglaConverter.js.map +1 -0
  8. package/dist/BiblicalHebrewConverter.js +3 -0
  9. package/dist/BiblicalHebrewConverter.js.map +1 -0
  10. package/dist/CroatianConverter.js +3 -0
  11. package/dist/CroatianConverter.js.map +1 -0
  12. package/dist/CzechConverter.js +3 -0
  13. package/dist/CzechConverter.js.map +1 -0
  14. package/dist/DanishConverter.js +3 -0
  15. package/dist/DanishConverter.js.map +1 -0
  16. package/dist/DutchConverter.js +3 -0
  17. package/dist/DutchConverter.js.map +1 -0
  18. package/dist/EnglishConverter.js +3 -0
  19. package/dist/EnglishConverter.js.map +1 -0
  20. package/dist/FilipinoConverter.js +3 -0
  21. package/dist/FilipinoConverter.js.map +1 -0
  22. package/dist/FrenchBelgiumConverter.js +3 -0
  23. package/dist/FrenchBelgiumConverter.js.map +1 -0
  24. package/dist/FrenchConverter.js +3 -0
  25. package/dist/FrenchConverter.js.map +1 -0
  26. package/dist/GermanConverter.js +3 -0
  27. package/dist/GermanConverter.js.map +1 -0
  28. package/dist/GreekConverter.js +3 -0
  29. package/dist/GreekConverter.js.map +1 -0
  30. package/dist/GujaratiConverter.js +3 -0
  31. package/dist/GujaratiConverter.js.map +1 -0
  32. package/dist/HebrewConverter.js +3 -0
  33. package/dist/HebrewConverter.js.map +1 -0
  34. package/dist/HindiConverter.js +3 -0
  35. package/dist/HindiConverter.js.map +1 -0
  36. package/dist/HungarianConverter.js +3 -0
  37. package/dist/HungarianConverter.js.map +1 -0
  38. package/dist/IndonesianConverter.js +3 -0
  39. package/dist/IndonesianConverter.js.map +1 -0
  40. package/dist/ItalianConverter.js +3 -0
  41. package/dist/ItalianConverter.js.map +1 -0
  42. package/dist/JapaneseConverter.js +3 -0
  43. package/dist/JapaneseConverter.js.map +1 -0
  44. package/dist/KannadaConverter.js +3 -0
  45. package/dist/KannadaConverter.js.map +1 -0
  46. package/dist/KoreanConverter.js +3 -0
  47. package/dist/KoreanConverter.js.map +1 -0
  48. package/dist/LatvianConverter.js +3 -0
  49. package/dist/LatvianConverter.js.map +1 -0
  50. package/dist/LithuanianConverter.js +3 -0
  51. package/dist/LithuanianConverter.js.map +1 -0
  52. package/dist/MalayConverter.js +3 -0
  53. package/dist/MalayConverter.js.map +1 -0
  54. package/dist/MarathiConverter.js +3 -0
  55. package/dist/MarathiConverter.js.map +1 -0
  56. package/dist/NorwegianBokmalConverter.js +3 -0
  57. package/dist/NorwegianBokmalConverter.js.map +1 -0
  58. package/dist/PersianConverter.js +3 -0
  59. package/dist/PersianConverter.js.map +1 -0
  60. package/dist/PolishConverter.js +3 -0
  61. package/dist/PolishConverter.js.map +1 -0
  62. package/dist/PortugueseConverter.js +3 -0
  63. package/dist/PortugueseConverter.js.map +1 -0
  64. package/dist/PunjabiConverter.js +3 -0
  65. package/dist/PunjabiConverter.js.map +1 -0
  66. package/dist/RomanianConverter.js +3 -0
  67. package/dist/RomanianConverter.js.map +1 -0
  68. package/dist/RussianConverter.js +3 -0
  69. package/dist/RussianConverter.js.map +1 -0
  70. package/dist/SerbianCyrillicConverter.js +3 -0
  71. package/dist/SerbianCyrillicConverter.js.map +1 -0
  72. package/dist/SerbianLatinConverter.js +3 -0
  73. package/dist/SerbianLatinConverter.js.map +1 -0
  74. package/dist/SimplifiedChineseConverter.js +3 -0
  75. package/dist/SimplifiedChineseConverter.js.map +1 -0
  76. package/dist/SpanishConverter.js +3 -0
  77. package/dist/SpanishConverter.js.map +1 -0
  78. package/dist/SwahiliConverter.js +3 -0
  79. package/dist/SwahiliConverter.js.map +1 -0
  80. package/dist/SwedishConverter.js +3 -0
  81. package/dist/SwedishConverter.js.map +1 -0
  82. package/dist/TamilConverter.js +3 -0
  83. package/dist/TamilConverter.js.map +1 -0
  84. package/dist/TeluguConverter.js +3 -0
  85. package/dist/TeluguConverter.js.map +1 -0
  86. package/dist/ThaiConverter.js +3 -0
  87. package/dist/ThaiConverter.js.map +1 -0
  88. package/dist/TraditionalChineseConverter.js +3 -0
  89. package/dist/TraditionalChineseConverter.js.map +1 -0
  90. package/dist/TurkishConverter.js +3 -0
  91. package/dist/TurkishConverter.js.map +1 -0
  92. package/dist/UkrainianConverter.js +3 -0
  93. package/dist/UkrainianConverter.js.map +1 -0
  94. package/dist/UrduConverter.js +3 -0
  95. package/dist/UrduConverter.js.map +1 -0
  96. package/dist/VietnameseConverter.js +3 -0
  97. package/dist/VietnameseConverter.js.map +1 -0
  98. package/dist/n2words.js +3 -2
  99. package/dist/n2words.js.map +1 -1
  100. package/lib/classes/abstract-language.d.ts +178 -0
  101. package/lib/classes/abstract-language.js +192 -185
  102. package/lib/classes/greedy-scale-language.d.ts +109 -0
  103. package/lib/classes/greedy-scale-language.js +96 -90
  104. package/lib/classes/slavic-language.d.ts +148 -0
  105. package/lib/classes/slavic-language.js +136 -106
  106. package/lib/classes/south-asian-language.d.ts +70 -0
  107. package/lib/classes/south-asian-language.js +58 -65
  108. package/lib/classes/turkic-language.d.ts +26 -0
  109. package/lib/classes/turkic-language.js +22 -26
  110. package/lib/languages/ar.d.ts +30 -0
  111. package/lib/languages/ar.js +49 -133
  112. package/lib/languages/az.d.ts +12 -0
  113. package/lib/languages/az.js +7 -23
  114. package/lib/languages/bn.d.ts +11 -0
  115. package/lib/languages/bn.js +12 -7
  116. package/lib/languages/cs.d.ts +88 -0
  117. package/lib/languages/cs.js +44 -113
  118. package/lib/languages/da.d.ts +15 -0
  119. package/lib/languages/da.js +40 -87
  120. package/lib/languages/de.d.ts +14 -0
  121. package/lib/languages/de.js +34 -68
  122. package/lib/languages/el.d.ts +14 -0
  123. package/lib/languages/el.js +22 -48
  124. package/lib/languages/en.d.ts +16 -0
  125. package/lib/languages/en.js +22 -59
  126. package/lib/languages/es.d.ts +15 -0
  127. package/lib/languages/es.js +49 -81
  128. package/lib/languages/fa.d.ts +47 -0
  129. package/lib/languages/fa.js +90 -73
  130. package/lib/languages/fil.d.ts +16 -0
  131. package/lib/languages/fil.js +35 -76
  132. package/lib/languages/fr-BE.d.ts +11 -0
  133. package/lib/languages/fr-BE.js +15 -51
  134. package/lib/languages/fr.d.ts +15 -0
  135. package/lib/languages/fr.js +33 -72
  136. package/lib/languages/gu.d.ts +11 -0
  137. package/lib/languages/gu.js +10 -34
  138. package/lib/languages/hbo.d.ts +113 -0
  139. package/lib/languages/hbo.js +251 -0
  140. package/lib/languages/he.d.ts +80 -0
  141. package/lib/languages/he.js +41 -164
  142. package/lib/languages/hi.d.ts +11 -0
  143. package/lib/languages/hi.js +12 -7
  144. package/lib/languages/hr.d.ts +80 -0
  145. package/lib/languages/hr.js +51 -95
  146. package/lib/languages/hu.d.ts +22 -0
  147. package/lib/languages/hu.js +35 -53
  148. package/lib/languages/id.d.ts +37 -0
  149. package/lib/languages/id.js +29 -44
  150. package/lib/languages/it.d.ts +37 -0
  151. package/lib/languages/it.js +36 -52
  152. package/lib/languages/ja.d.ts +17 -0
  153. package/lib/languages/ja.js +22 -75
  154. package/lib/languages/kn.d.ts +11 -0
  155. package/lib/languages/kn.js +10 -39
  156. package/lib/languages/ko.d.ts +14 -0
  157. package/lib/languages/ko.js +17 -45
  158. package/lib/languages/lt.d.ts +70 -0
  159. package/lib/languages/lt.js +28 -63
  160. package/lib/languages/lv.d.ts +70 -0
  161. package/lib/languages/lv.js +35 -58
  162. package/lib/languages/mr.d.ts +11 -0
  163. package/lib/languages/mr.js +10 -34
  164. package/lib/languages/ms.d.ts +31 -0
  165. package/lib/languages/ms.js +24 -20
  166. package/lib/languages/nb.d.ts +12 -0
  167. package/lib/languages/nb.js +36 -56
  168. package/lib/languages/nl.d.ts +16 -0
  169. package/lib/languages/nl.js +58 -109
  170. package/lib/languages/pa.d.ts +11 -0
  171. package/lib/languages/{pa-Guru.js → pa.js} +12 -7
  172. package/lib/languages/pl.d.ts +80 -0
  173. package/lib/languages/pl.js +26 -105
  174. package/lib/languages/pt.d.ts +29 -0
  175. package/lib/languages/pt.js +29 -64
  176. package/lib/languages/ro.d.ts +158 -0
  177. package/lib/languages/ro.js +60 -167
  178. package/lib/languages/ru.d.ts +85 -0
  179. package/lib/languages/ru.js +17 -37
  180. package/lib/languages/sr-Cyrl.d.ts +80 -0
  181. package/lib/languages/sr-Cyrl.js +113 -0
  182. package/lib/languages/sr-Latn.d.ts +80 -0
  183. package/lib/languages/sr-Latn.js +54 -98
  184. package/lib/languages/sv.d.ts +14 -0
  185. package/lib/languages/sv.js +26 -63
  186. package/lib/languages/sw.d.ts +39 -0
  187. package/lib/languages/sw.js +26 -21
  188. package/lib/languages/ta.d.ts +20 -0
  189. package/lib/languages/ta.js +26 -26
  190. package/lib/languages/te.d.ts +22 -0
  191. package/lib/languages/te.js +28 -38
  192. package/lib/languages/th.d.ts +17 -0
  193. package/lib/languages/th.js +25 -31
  194. package/lib/languages/tr.d.ts +12 -0
  195. package/lib/languages/tr.js +11 -38
  196. package/lib/languages/uk.d.ts +85 -0
  197. package/lib/languages/uk.js +18 -44
  198. package/lib/languages/ur.d.ts +11 -0
  199. package/lib/languages/ur.js +12 -7
  200. package/lib/languages/vi.d.ts +72 -0
  201. package/lib/languages/vi.js +25 -71
  202. package/lib/languages/zh-Hans.d.ts +21 -0
  203. package/lib/languages/zh-Hans.js +33 -87
  204. package/lib/languages/zh-Hant.d.ts +21 -0
  205. package/lib/languages/zh-Hant.js +111 -0
  206. package/lib/n2words.d.ts +209 -0
  207. package/lib/n2words.js +474 -191
  208. package/package.json +106 -67
  209. package/dist/languages/ar.js +0 -2
  210. package/dist/languages/ar.js.map +0 -1
  211. package/dist/languages/az.js +0 -2
  212. package/dist/languages/az.js.map +0 -1
  213. package/dist/languages/bn.js +0 -2
  214. package/dist/languages/bn.js.map +0 -1
  215. package/dist/languages/cs.js +0 -2
  216. package/dist/languages/cs.js.map +0 -1
  217. package/dist/languages/da.js +0 -2
  218. package/dist/languages/da.js.map +0 -1
  219. package/dist/languages/de.js +0 -2
  220. package/dist/languages/de.js.map +0 -1
  221. package/dist/languages/el.js +0 -2
  222. package/dist/languages/el.js.map +0 -1
  223. package/dist/languages/en.js +0 -2
  224. package/dist/languages/en.js.map +0 -1
  225. package/dist/languages/es.js +0 -2
  226. package/dist/languages/es.js.map +0 -1
  227. package/dist/languages/fa.js +0 -2
  228. package/dist/languages/fa.js.map +0 -1
  229. package/dist/languages/fil.js +0 -2
  230. package/dist/languages/fil.js.map +0 -1
  231. package/dist/languages/fr-BE.js +0 -2
  232. package/dist/languages/fr-BE.js.map +0 -1
  233. package/dist/languages/fr.js +0 -2
  234. package/dist/languages/fr.js.map +0 -1
  235. package/dist/languages/gu.js +0 -2
  236. package/dist/languages/gu.js.map +0 -1
  237. package/dist/languages/he.js +0 -2
  238. package/dist/languages/he.js.map +0 -1
  239. package/dist/languages/hi.js +0 -2
  240. package/dist/languages/hi.js.map +0 -1
  241. package/dist/languages/hr.js +0 -2
  242. package/dist/languages/hr.js.map +0 -1
  243. package/dist/languages/hu.js +0 -2
  244. package/dist/languages/hu.js.map +0 -1
  245. package/dist/languages/id.js +0 -2
  246. package/dist/languages/id.js.map +0 -1
  247. package/dist/languages/it.js +0 -2
  248. package/dist/languages/it.js.map +0 -1
  249. package/dist/languages/ja.js +0 -2
  250. package/dist/languages/ja.js.map +0 -1
  251. package/dist/languages/kn.js +0 -2
  252. package/dist/languages/kn.js.map +0 -1
  253. package/dist/languages/ko.js +0 -2
  254. package/dist/languages/ko.js.map +0 -1
  255. package/dist/languages/lt.js +0 -2
  256. package/dist/languages/lt.js.map +0 -1
  257. package/dist/languages/lv.js +0 -2
  258. package/dist/languages/lv.js.map +0 -1
  259. package/dist/languages/mr.js +0 -2
  260. package/dist/languages/mr.js.map +0 -1
  261. package/dist/languages/ms.js +0 -2
  262. package/dist/languages/ms.js.map +0 -1
  263. package/dist/languages/nb.js +0 -2
  264. package/dist/languages/nb.js.map +0 -1
  265. package/dist/languages/nl.js +0 -2
  266. package/dist/languages/nl.js.map +0 -1
  267. package/dist/languages/pa-Guru.js +0 -2
  268. package/dist/languages/pa-Guru.js.map +0 -1
  269. package/dist/languages/pl.js +0 -2
  270. package/dist/languages/pl.js.map +0 -1
  271. package/dist/languages/pt.js +0 -2
  272. package/dist/languages/pt.js.map +0 -1
  273. package/dist/languages/ro.js +0 -2
  274. package/dist/languages/ro.js.map +0 -1
  275. package/dist/languages/ru.js +0 -2
  276. package/dist/languages/ru.js.map +0 -1
  277. package/dist/languages/sr-Latn.js +0 -2
  278. package/dist/languages/sr-Latn.js.map +0 -1
  279. package/dist/languages/sv.js +0 -2
  280. package/dist/languages/sv.js.map +0 -1
  281. package/dist/languages/sw.js +0 -2
  282. package/dist/languages/sw.js.map +0 -1
  283. package/dist/languages/ta.js +0 -2
  284. package/dist/languages/ta.js.map +0 -1
  285. package/dist/languages/te.js +0 -2
  286. package/dist/languages/te.js.map +0 -1
  287. package/dist/languages/th.js +0 -2
  288. package/dist/languages/th.js.map +0 -1
  289. package/dist/languages/tr.js +0 -2
  290. package/dist/languages/tr.js.map +0 -1
  291. package/dist/languages/uk.js +0 -2
  292. package/dist/languages/uk.js.map +0 -1
  293. package/dist/languages/ur.js +0 -2
  294. package/dist/languages/ur.js.map +0 -1
  295. package/dist/languages/vi.js +0 -2
  296. package/dist/languages/vi.js.map +0 -1
  297. package/dist/languages/zh-Hans.js +0 -2
  298. package/dist/languages/zh-Hans.js.map +0 -1
  299. package/typings/classes/abstract-language.d.ts +0 -144
  300. package/typings/classes/greedy-scale-language.d.ts +0 -148
  301. package/typings/classes/slavic-language.d.ts +0 -145
  302. package/typings/classes/south-asian-language.d.ts +0 -101
  303. package/typings/classes/turkic-language.d.ts +0 -42
  304. package/typings/languages/ar.d.ts +0 -93
  305. package/typings/languages/az.d.ts +0 -25
  306. package/typings/languages/bn.d.ts +0 -1
  307. package/typings/languages/cs.d.ts +0 -120
  308. package/typings/languages/da.d.ts +0 -53
  309. package/typings/languages/de.d.ts +0 -26
  310. package/typings/languages/el.d.ts +0 -11
  311. package/typings/languages/en.d.ts +0 -30
  312. package/typings/languages/es.d.ts +0 -43
  313. package/typings/languages/fa.d.ts +0 -81
  314. package/typings/languages/fil.d.ts +0 -12
  315. package/typings/languages/fr-BE.d.ts +0 -41
  316. package/typings/languages/fr.d.ts +0 -43
  317. package/typings/languages/gu.d.ts +0 -12
  318. package/typings/languages/he.d.ts +0 -197
  319. package/typings/languages/hi.d.ts +0 -1
  320. package/typings/languages/hr.d.ts +0 -110
  321. package/typings/languages/hu.d.ts +0 -37
  322. package/typings/languages/id.d.ts +0 -69
  323. package/typings/languages/it.d.ts +0 -51
  324. package/typings/languages/ja.d.ts +0 -58
  325. package/typings/languages/kn.d.ts +0 -11
  326. package/typings/languages/ko.d.ts +0 -25
  327. package/typings/languages/lt.d.ts +0 -110
  328. package/typings/languages/lv.d.ts +0 -99
  329. package/typings/languages/mr.d.ts +0 -12
  330. package/typings/languages/ms.d.ts +0 -37
  331. package/typings/languages/nb.d.ts +0 -27
  332. package/typings/languages/nl.d.ts +0 -65
  333. package/typings/languages/pa-Guru.d.ts +0 -1
  334. package/typings/languages/pl.d.ts +0 -116
  335. package/typings/languages/pt.d.ts +0 -39
  336. package/typings/languages/ro.d.ts +0 -229
  337. package/typings/languages/ru.d.ts +0 -108
  338. package/typings/languages/sr-Latn.d.ts +0 -98
  339. package/typings/languages/sv.d.ts +0 -30
  340. package/typings/languages/sw.d.ts +0 -1
  341. package/typings/languages/ta.d.ts +0 -1
  342. package/typings/languages/te.d.ts +0 -1
  343. package/typings/languages/th.d.ts +0 -1
  344. package/typings/languages/tr.d.ts +0 -46
  345. package/typings/languages/uk.d.ts +0 -117
  346. package/typings/languages/ur.d.ts +0 -1
  347. package/typings/languages/vi.d.ts +0 -116
  348. package/typings/languages/zh-Hans.d.ts +0 -57
  349. package/typings/n2words.d.ts +0 -177
@@ -1,21 +1,24 @@
1
- import AbstractLanguage from '../classes/abstract-language.js'
2
-
3
- class Thai extends AbstractLanguage {
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
- convertDecimalsPerDigit = true // Enable digit-by-digit decimal conversion
16
+ usePerDigitDecimals = true // Enable digit-by-digit decimal conversion
9
17
 
10
- // Digits map 1–9
11
- digits = ['หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า']
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.digits[hundredThousands - 1] + 'แสน')
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.digits[tenThousands - 1] + 'หมื่น')
47
+ parts.push(this.onesWords[tenThousands - 1] + 'หมื่น')
45
48
  }
46
49
  }
47
50
 
48
51
  if (thousands > 0) {
49
- parts.push(this.digits[thousands - 1] + 'พัน')
52
+ parts.push(this.onesWords[thousands - 1] + 'พัน')
50
53
  }
51
54
 
52
55
  if (hundreds > 0) {
53
- parts.push(this.digits[hundreds - 1] + 'ร้อย')
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.digits[tens - 1] + 'สิบ')
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.digits[ones - 1])
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
- convertWholePart (number) {
99
- if (number === 0n) {
96
+ integerToWords (integerPart) {
97
+ if (integerPart === 0n) {
100
98
  return this.zeroWord
101
99
  }
102
100
 
103
- const groups = this.splitMillionGroups(number)
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';
@@ -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
- * Inherits from TurkicLanguage shared patterns:
12
- * - Space-separated number combinations
13
- * - Omits '1' before hundreds and thousands
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
- scaleWordPairs = [
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.dropSpaces = dropSpaces
48
+ this.setOptions({
49
+ dropSpaces: false
50
+ }, options)
60
51
 
61
- if (this.dropSpaces === true) {
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';
@@ -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
- * Implements Ukrainian number words using the Slavic language pattern:
12
- * - Ukrainian number words (один/одна, два/дві, три, чотири...)
13
- * - Gender-aware forms (masculine/feminine)
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
- ones = {
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
- onesFeminine = {
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
- tens = {
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
- twenties = {
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
- hundreds = {
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
- thousands = {
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
- * Converts a number to Ukrainian cardinal (written) form.
112
- *
113
- * @param {number|string|bigint} value The number to convert.
114
- * @param {Object} [options={}] Configuration options.
115
- * @param {boolean} [options.feminine=false] Use feminine forms for numbers.
116
- * @returns {string} The number expressed in Ukrainian words.
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';
@@ -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
- class Urdu extends SouthAsianLanguage {
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
- belowHundred = [
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';