n2words 3.1.0 → 5.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 +51 -40
- package/LICENSE +1 -1
- package/README.md +64 -184
- package/dist/am-ET.js +2 -0
- package/dist/am-ET.umd.js +2 -0
- package/dist/am-Latn-ET.js +2 -0
- package/dist/am-Latn-ET.umd.js +2 -0
- package/dist/ar-SA.js +2 -0
- package/dist/ar-SA.umd.js +2 -0
- package/dist/az-AZ.js +2 -0
- package/dist/az-AZ.umd.js +2 -0
- package/dist/bn-BD.js +2 -0
- package/dist/bn-BD.umd.js +2 -0
- package/dist/cs-CZ.js +2 -0
- package/dist/cs-CZ.umd.js +2 -0
- package/dist/da-DK.js +2 -0
- package/dist/da-DK.umd.js +2 -0
- package/dist/de-DE.js +2 -0
- package/dist/de-DE.umd.js +2 -0
- package/dist/el-GR.js +2 -0
- package/dist/el-GR.umd.js +2 -0
- package/dist/en-AU.js +2 -0
- package/dist/en-AU.umd.js +2 -0
- package/dist/en-BD.js +2 -0
- package/dist/en-BD.umd.js +2 -0
- package/dist/en-CA.js +2 -0
- package/dist/en-CA.umd.js +2 -0
- package/dist/en-GB.js +2 -0
- package/dist/en-GB.umd.js +2 -0
- package/dist/en-GH.js +2 -0
- package/dist/en-GH.umd.js +2 -0
- package/dist/en-IE.js +2 -0
- package/dist/en-IE.umd.js +2 -0
- package/dist/en-IN.js +2 -0
- package/dist/en-IN.umd.js +2 -0
- package/dist/en-KE.js +2 -0
- package/dist/en-KE.umd.js +2 -0
- package/dist/en-MY.js +2 -0
- package/dist/en-MY.umd.js +2 -0
- package/dist/en-NG.js +2 -0
- package/dist/en-NG.umd.js +2 -0
- package/dist/en-NZ.js +2 -0
- package/dist/en-NZ.umd.js +2 -0
- package/dist/en-PH.js +2 -0
- package/dist/en-PH.umd.js +2 -0
- package/dist/en-PK.js +2 -0
- package/dist/en-PK.umd.js +2 -0
- package/dist/en-SG.js +2 -0
- package/dist/en-SG.umd.js +2 -0
- package/dist/en-US.js +2 -0
- package/dist/en-US.umd.js +2 -0
- package/dist/en-ZA.js +2 -0
- package/dist/en-ZA.umd.js +2 -0
- package/dist/es-ES.js +2 -0
- package/dist/es-ES.umd.js +2 -0
- package/dist/es-MX.js +2 -0
- package/dist/es-MX.umd.js +2 -0
- package/dist/es-US.js +2 -0
- package/dist/es-US.umd.js +2 -0
- package/dist/fa-IR.js +2 -0
- package/dist/fa-IR.umd.js +2 -0
- package/dist/fi-FI.js +2 -0
- package/dist/fi-FI.umd.js +2 -0
- package/dist/fil-PH.js +2 -0
- package/dist/fil-PH.umd.js +2 -0
- package/dist/fr-BE.js +2 -0
- package/dist/fr-BE.umd.js +2 -0
- package/dist/fr-FR.js +2 -0
- package/dist/fr-FR.umd.js +2 -0
- package/dist/gu-IN.js +2 -0
- package/dist/gu-IN.umd.js +2 -0
- package/dist/ha-NG.js +2 -0
- package/dist/ha-NG.umd.js +2 -0
- package/dist/hbo-IL.js +2 -0
- package/dist/hbo-IL.umd.js +2 -0
- package/dist/he-IL.js +2 -0
- package/dist/he-IL.umd.js +2 -0
- package/dist/hi-IN.js +2 -0
- package/dist/hi-IN.umd.js +2 -0
- package/dist/hr-HR.js +2 -0
- package/dist/hr-HR.umd.js +2 -0
- package/dist/hu-HU.js +2 -0
- package/dist/hu-HU.umd.js +2 -0
- package/dist/id-ID.js +2 -0
- package/dist/id-ID.umd.js +2 -0
- package/dist/it-IT.js +2 -0
- package/dist/it-IT.umd.js +2 -0
- package/dist/ja-JP.js +2 -0
- package/dist/ja-JP.umd.js +2 -0
- package/dist/ka-GE.js +2 -0
- package/dist/ka-GE.umd.js +2 -0
- package/dist/kn-IN.js +2 -0
- package/dist/kn-IN.umd.js +2 -0
- package/dist/ko-KR.js +2 -0
- package/dist/ko-KR.umd.js +2 -0
- package/dist/lt-LT.js +2 -0
- package/dist/lt-LT.umd.js +2 -0
- package/dist/lv-LV.js +2 -0
- package/dist/lv-LV.umd.js +2 -0
- package/dist/mr-IN.js +2 -0
- package/dist/mr-IN.umd.js +2 -0
- package/dist/ms-MY.js +2 -0
- package/dist/ms-MY.umd.js +2 -0
- package/dist/nb-NO.js +2 -0
- package/dist/nb-NO.umd.js +2 -0
- package/dist/nl-NL.js +2 -0
- package/dist/nl-NL.umd.js +2 -0
- package/dist/pa-IN.js +2 -0
- package/dist/pa-IN.umd.js +2 -0
- package/dist/pl-PL.js +2 -0
- package/dist/pl-PL.umd.js +2 -0
- package/dist/pt-BR.js +2 -0
- package/dist/pt-BR.umd.js +2 -0
- package/dist/pt-PT.js +2 -0
- package/dist/pt-PT.umd.js +2 -0
- package/dist/ro-RO.js +2 -0
- package/dist/ro-RO.umd.js +2 -0
- package/dist/ru-RU.js +2 -0
- package/dist/ru-RU.umd.js +2 -0
- package/dist/sr-Cyrl-RS.js +2 -0
- package/dist/sr-Cyrl-RS.umd.js +2 -0
- package/dist/sr-Latn-RS.js +2 -0
- package/dist/sr-Latn-RS.umd.js +2 -0
- package/dist/sv-SE.js +2 -0
- package/dist/sv-SE.umd.js +2 -0
- package/dist/sw-KE.js +2 -0
- package/dist/sw-KE.umd.js +2 -0
- package/dist/ta-IN.js +2 -0
- package/dist/ta-IN.umd.js +2 -0
- package/dist/te-IN.js +2 -0
- package/dist/te-IN.umd.js +2 -0
- package/dist/th-TH.js +2 -0
- package/dist/th-TH.umd.js +2 -0
- package/dist/tr-TR.js +2 -0
- package/dist/tr-TR.umd.js +2 -0
- package/dist/uk-UA.js +2 -0
- package/dist/uk-UA.umd.js +2 -0
- package/dist/ur-PK.js +2 -0
- package/dist/ur-PK.umd.js +2 -0
- package/dist/vi-VN.js +2 -0
- package/dist/vi-VN.umd.js +2 -0
- package/dist/yo-NG.js +2 -0
- package/dist/yo-NG.umd.js +2 -0
- package/dist/zh-Hans-CN.js +2 -0
- package/dist/zh-Hans-CN.umd.js +2 -0
- package/dist/zh-Hant-TW.js +2 -0
- package/dist/zh-Hant-TW.umd.js +2 -0
- package/package.json +61 -88
- package/src/am-ET.d.ts +40 -0
- package/src/am-ET.js +269 -0
- package/src/am-Latn-ET.d.ts +35 -0
- package/src/am-Latn-ET.js +264 -0
- package/src/ar-SA.d.ts +49 -0
- package/{lib/languages/ar.js → src/ar-SA.js} +177 -15
- package/src/az-AZ.d.ts +37 -0
- package/src/az-AZ.js +312 -0
- package/src/bn-BD.d.ts +36 -0
- package/{lib/languages/bn.js → src/bn-BD.js} +110 -6
- package/src/cs-CZ.d.ts +49 -0
- package/{lib/languages/cs.js → src/cs-CZ.js} +240 -14
- package/src/da-DK.d.ts +44 -0
- package/{lib/languages/da.js → src/da-DK.js} +131 -11
- package/src/de-DE.d.ts +57 -0
- package/src/de-DE.js +603 -0
- package/src/el-GR.d.ts +40 -0
- package/src/el-GR.js +418 -0
- package/src/en-AU.d.ts +47 -0
- package/src/en-AU.js +423 -0
- package/src/en-BD.d.ts +49 -0
- package/src/en-BD.js +415 -0
- package/src/en-CA.d.ts +63 -0
- package/src/en-CA.js +518 -0
- package/src/en-GB.d.ts +56 -0
- package/src/en-GB.js +469 -0
- package/src/en-GH.d.ts +11 -0
- package/src/en-GH.js +345 -0
- package/src/en-IE.d.ts +56 -0
- package/src/en-IE.js +479 -0
- package/src/en-IN.d.ts +49 -0
- package/src/en-IN.js +415 -0
- package/src/en-KE.d.ts +11 -0
- package/src/en-KE.js +345 -0
- package/src/en-MY.d.ts +11 -0
- package/src/en-MY.js +347 -0
- package/src/en-NG.d.ts +56 -0
- package/src/en-NG.js +479 -0
- package/src/en-NZ.d.ts +11 -0
- package/{lib/languages/en.js → src/en-NZ.js} +164 -31
- package/src/en-PH.d.ts +11 -0
- package/src/en-PH.js +345 -0
- package/src/en-PK.d.ts +49 -0
- package/src/en-PK.js +415 -0
- package/src/en-SG.d.ts +11 -0
- package/src/en-SG.js +345 -0
- package/src/en-US.d.ts +63 -0
- package/src/en-US.js +516 -0
- package/src/en-ZA.d.ts +56 -0
- package/src/en-ZA.js +478 -0
- package/src/es-ES.d.ts +65 -0
- package/src/es-ES.js +541 -0
- package/src/es-MX.d.ts +58 -0
- package/{lib/languages/es.js → src/es-MX.js} +228 -18
- package/src/es-US.d.ts +58 -0
- package/src/es-US.js +446 -0
- package/src/fa-IR.d.ts +38 -0
- package/src/fa-IR.js +246 -0
- package/src/fi-FI.d.ts +46 -0
- package/{lib/languages/fi.js → src/fi-FI.js} +152 -11
- package/src/fil-PH.d.ts +37 -0
- package/{lib/languages/fil.js → src/fil-PH.js} +144 -8
- package/src/fr-BE.d.ts +49 -0
- package/{lib/languages → src}/fr-BE.js +175 -13
- package/src/fr-FR.d.ts +63 -0
- package/{lib/languages/fr.js → src/fr-FR.js} +182 -16
- package/src/gu-IN.d.ts +35 -0
- package/{lib/languages/gu.js → src/gu-IN.js} +115 -6
- package/src/ha-NG.d.ts +37 -0
- package/{lib/languages/ha.js → src/ha-NG.js} +107 -8
- package/src/hbo-IL.d.ts +39 -0
- package/{lib/languages/hbo.js → src/hbo-IL.js} +211 -19
- package/src/he-IL.d.ts +37 -0
- package/src/he-IL.js +537 -0
- package/src/hi-IN.d.ts +36 -0
- package/{lib/languages/hi.js → src/hi-IN.js} +116 -6
- package/src/hr-HR.d.ts +42 -0
- package/src/hr-HR.js +463 -0
- package/src/hu-HU.d.ts +38 -0
- package/{lib/languages/hu.js → src/hu-HU.js} +164 -6
- package/src/id-ID.d.ts +38 -0
- package/{lib/languages/id.js → src/id-ID.js} +99 -8
- package/src/it-IT.d.ts +59 -0
- package/{lib/languages/it.js → src/it-IT.js} +179 -15
- package/src/ja-JP.d.ts +49 -0
- package/{lib/languages/ja.js → src/ja-JP.js} +111 -12
- package/src/ka-GE.d.ts +44 -0
- package/{lib/languages/ka.js → src/ka-GE.js} +113 -11
- package/src/kn-IN.d.ts +35 -0
- package/{lib/languages/kn.js → src/kn-IN.js} +115 -6
- package/src/ko-KR.d.ts +45 -0
- package/{lib/languages/ko.js → src/ko-KR.js} +94 -12
- package/src/lt-LT.d.ts +49 -0
- package/src/lt-LT.js +543 -0
- package/src/lv-LV.d.ts +49 -0
- package/src/lv-LV.js +595 -0
- package/src/mr-IN.d.ts +36 -0
- package/{lib/languages/mr.js → src/mr-IN.js} +116 -6
- package/src/ms-MY.d.ts +37 -0
- package/{lib/languages/ms.js → src/ms-MY.js} +111 -8
- package/src/nb-NO.d.ts +44 -0
- package/{lib/languages/nb.js → src/nb-NO.js} +153 -11
- package/src/nl-NL.d.ts +54 -0
- package/{lib/languages/nl.js → src/nl-NL.js} +260 -18
- package/src/pa-IN.d.ts +36 -0
- package/{lib/languages/pa.js → src/pa-IN.js} +116 -6
- package/src/pl-PL.d.ts +55 -0
- package/src/pl-PL.js +585 -0
- package/src/pt-BR.d.ts +31 -0
- package/src/pt-BR.js +534 -0
- package/src/pt-PT.d.ts +45 -0
- package/{lib/languages/pt.js → src/pt-PT.js} +234 -12
- package/src/ro-RO.d.ts +44 -0
- package/{lib/languages/ro.js → src/ro-RO.js} +212 -18
- package/src/ru-RU.d.ts +50 -0
- package/src/ru-RU.js +535 -0
- package/src/sr-Cyrl-RS.d.ts +49 -0
- package/src/sr-Cyrl-RS.js +503 -0
- package/src/sr-Latn-RS.d.ts +49 -0
- package/src/sr-Latn-RS.js +503 -0
- package/src/sv-SE.d.ts +44 -0
- package/{lib/languages/sv.js → src/sv-SE.js} +136 -11
- package/src/sw-KE.d.ts +37 -0
- package/{lib/languages/sw.js → src/sw-KE.js} +117 -6
- package/src/ta-IN.d.ts +35 -0
- package/{lib/languages/ta.js → src/ta-IN.js} +109 -6
- package/src/te-IN.d.ts +35 -0
- package/{lib/languages/te.js → src/te-IN.js} +115 -6
- package/src/th-TH.d.ts +38 -0
- package/{lib/languages/th.js → src/th-TH.js} +99 -6
- package/src/tr-TR.d.ts +48 -0
- package/{lib/languages/tr.js → src/tr-TR.js} +168 -23
- package/src/uk-UA.d.ts +42 -0
- package/src/uk-UA.js +463 -0
- package/src/ur-PK.d.ts +36 -0
- package/{lib/languages/ur.js → src/ur-PK.js} +116 -6
- package/src/utils/expand-scientific.d.ts +32 -0
- package/src/utils/expand-scientific.js +65 -0
- package/src/utils/parse-cardinal.d.ts +14 -0
- package/{lib/utils/parse-numeric.js → src/utils/parse-cardinal.js} +14 -44
- package/src/utils/parse-currency.d.ts +14 -0
- package/src/utils/parse-currency.js +91 -0
- package/src/utils/parse-ordinal.d.ts +10 -0
- package/src/utils/parse-ordinal.js +103 -0
- package/src/vi-VN.d.ts +48 -0
- package/{lib/languages/vi.js → src/vi-VN.js} +102 -11
- package/src/yo-NG.d.ts +37 -0
- package/{lib/languages/yo.js → src/yo-NG.js} +109 -9
- package/src/zh-Hans-CN.d.ts +48 -0
- package/{lib/languages/zh-Hans.js → src/zh-Hans-CN.js} +140 -8
- package/src/zh-Hant-TW.d.ts +50 -0
- package/{lib/languages/zh-Hant.js → src/zh-Hant-TW.js} +139 -8
- package/dist/languages/am-Latn.js +0 -3
- package/dist/languages/am-Latn.js.map +0 -1
- package/dist/languages/am.js +0 -3
- package/dist/languages/am.js.map +0 -1
- package/dist/languages/ar.js +0 -3
- package/dist/languages/ar.js.map +0 -1
- package/dist/languages/az.js +0 -3
- package/dist/languages/az.js.map +0 -1
- package/dist/languages/bn.js +0 -3
- package/dist/languages/bn.js.map +0 -1
- package/dist/languages/cs.js +0 -3
- package/dist/languages/cs.js.map +0 -1
- package/dist/languages/da.js +0 -3
- package/dist/languages/da.js.map +0 -1
- package/dist/languages/de.js +0 -3
- package/dist/languages/de.js.map +0 -1
- package/dist/languages/el.js +0 -3
- package/dist/languages/el.js.map +0 -1
- package/dist/languages/en.js +0 -3
- package/dist/languages/en.js.map +0 -1
- package/dist/languages/es.js +0 -3
- package/dist/languages/es.js.map +0 -1
- package/dist/languages/fa.js +0 -3
- package/dist/languages/fa.js.map +0 -1
- package/dist/languages/fi.js +0 -3
- package/dist/languages/fi.js.map +0 -1
- package/dist/languages/fil.js +0 -3
- package/dist/languages/fil.js.map +0 -1
- package/dist/languages/fr-BE.js +0 -3
- package/dist/languages/fr-BE.js.map +0 -1
- package/dist/languages/fr.js +0 -3
- package/dist/languages/fr.js.map +0 -1
- package/dist/languages/gu.js +0 -3
- package/dist/languages/gu.js.map +0 -1
- package/dist/languages/ha.js +0 -3
- package/dist/languages/ha.js.map +0 -1
- package/dist/languages/hbo.js +0 -3
- package/dist/languages/hbo.js.map +0 -1
- package/dist/languages/he.js +0 -3
- package/dist/languages/he.js.map +0 -1
- package/dist/languages/hi.js +0 -3
- package/dist/languages/hi.js.map +0 -1
- package/dist/languages/hr.js +0 -3
- package/dist/languages/hr.js.map +0 -1
- package/dist/languages/hu.js +0 -3
- package/dist/languages/hu.js.map +0 -1
- package/dist/languages/id.js +0 -3
- package/dist/languages/id.js.map +0 -1
- package/dist/languages/it.js +0 -3
- package/dist/languages/it.js.map +0 -1
- package/dist/languages/ja.js +0 -3
- package/dist/languages/ja.js.map +0 -1
- package/dist/languages/ka.js +0 -3
- package/dist/languages/ka.js.map +0 -1
- package/dist/languages/kn.js +0 -3
- package/dist/languages/kn.js.map +0 -1
- package/dist/languages/ko.js +0 -3
- package/dist/languages/ko.js.map +0 -1
- package/dist/languages/lt.js +0 -3
- package/dist/languages/lt.js.map +0 -1
- package/dist/languages/lv.js +0 -3
- package/dist/languages/lv.js.map +0 -1
- package/dist/languages/mr.js +0 -3
- package/dist/languages/mr.js.map +0 -1
- package/dist/languages/ms.js +0 -3
- package/dist/languages/ms.js.map +0 -1
- package/dist/languages/nb.js +0 -3
- package/dist/languages/nb.js.map +0 -1
- package/dist/languages/nl.js +0 -3
- package/dist/languages/nl.js.map +0 -1
- package/dist/languages/pa.js +0 -3
- package/dist/languages/pa.js.map +0 -1
- package/dist/languages/pl.js +0 -3
- package/dist/languages/pl.js.map +0 -1
- package/dist/languages/pt.js +0 -3
- package/dist/languages/pt.js.map +0 -1
- package/dist/languages/ro.js +0 -3
- package/dist/languages/ro.js.map +0 -1
- package/dist/languages/ru.js +0 -3
- package/dist/languages/ru.js.map +0 -1
- package/dist/languages/sr-Cyrl.js +0 -3
- package/dist/languages/sr-Cyrl.js.map +0 -1
- package/dist/languages/sr-Latn.js +0 -3
- package/dist/languages/sr-Latn.js.map +0 -1
- package/dist/languages/sv.js +0 -3
- package/dist/languages/sv.js.map +0 -1
- package/dist/languages/sw.js +0 -3
- package/dist/languages/sw.js.map +0 -1
- package/dist/languages/ta.js +0 -3
- package/dist/languages/ta.js.map +0 -1
- package/dist/languages/te.js +0 -3
- package/dist/languages/te.js.map +0 -1
- package/dist/languages/th.js +0 -3
- package/dist/languages/th.js.map +0 -1
- package/dist/languages/tr.js +0 -3
- package/dist/languages/tr.js.map +0 -1
- package/dist/languages/uk.js +0 -3
- package/dist/languages/uk.js.map +0 -1
- package/dist/languages/ur.js +0 -3
- package/dist/languages/ur.js.map +0 -1
- package/dist/languages/vi.js +0 -3
- package/dist/languages/vi.js.map +0 -1
- package/dist/languages/yo.js +0 -3
- package/dist/languages/yo.js.map +0 -1
- package/dist/languages/zh-Hans.js +0 -3
- package/dist/languages/zh-Hans.js.map +0 -1
- package/dist/languages/zh-Hant.js +0 -3
- package/dist/languages/zh-Hant.js.map +0 -1
- package/dist/n2words.js +0 -3
- package/dist/n2words.js.map +0 -1
- package/lib/languages/am-Latn.d.ts +0 -7
- package/lib/languages/am-Latn.js +0 -159
- package/lib/languages/am.d.ts +0 -7
- package/lib/languages/am.js +0 -159
- package/lib/languages/ar.d.ts +0 -17
- package/lib/languages/az.d.ts +0 -7
- package/lib/languages/az.js +0 -171
- package/lib/languages/bn.d.ts +0 -7
- package/lib/languages/cs.d.ts +0 -18
- package/lib/languages/da.d.ts +0 -14
- package/lib/languages/de.d.ts +0 -17
- package/lib/languages/de.js +0 -320
- package/lib/languages/el.d.ts +0 -14
- package/lib/languages/el.js +0 -236
- package/lib/languages/en.d.ts +0 -17
- package/lib/languages/es.d.ts +0 -21
- package/lib/languages/fa.d.ts +0 -7
- package/lib/languages/fa.js +0 -134
- package/lib/languages/fi.d.ts +0 -14
- package/lib/languages/fil.d.ts +0 -7
- package/lib/languages/fr-BE.d.ts +0 -11
- package/lib/languages/fr.d.ts +0 -21
- package/lib/languages/gu.d.ts +0 -7
- package/lib/languages/ha.d.ts +0 -7
- package/lib/languages/hbo.d.ts +0 -13
- package/lib/languages/he.d.ts +0 -13
- package/lib/languages/he.js +0 -265
- package/lib/languages/hi.d.ts +0 -7
- package/lib/languages/hr.d.ts +0 -11
- package/lib/languages/hr.js +0 -224
- package/lib/languages/hu.d.ts +0 -7
- package/lib/languages/id.d.ts +0 -7
- package/lib/languages/it.d.ts +0 -19
- package/lib/languages/ja.d.ts +0 -17
- package/lib/languages/ka.d.ts +0 -17
- package/lib/languages/kn.d.ts +0 -7
- package/lib/languages/ko.d.ts +0 -14
- package/lib/languages/lt.d.ts +0 -18
- package/lib/languages/lt.js +0 -301
- package/lib/languages/lv.d.ts +0 -18
- package/lib/languages/lv.js +0 -312
- package/lib/languages/mr.d.ts +0 -7
- package/lib/languages/ms.d.ts +0 -7
- package/lib/languages/nb.d.ts +0 -14
- package/lib/languages/nl.d.ts +0 -26
- package/lib/languages/pa.d.ts +0 -7
- package/lib/languages/pl.d.ts +0 -22
- package/lib/languages/pl.js +0 -317
- package/lib/languages/pt.d.ts +0 -17
- package/lib/languages/ro.d.ts +0 -18
- package/lib/languages/ru.d.ts +0 -11
- package/lib/languages/ru.js +0 -245
- package/lib/languages/sr-Cyrl.d.ts +0 -11
- package/lib/languages/sr-Cyrl.js +0 -221
- package/lib/languages/sr-Latn.d.ts +0 -11
- package/lib/languages/sr-Latn.js +0 -221
- package/lib/languages/sv.d.ts +0 -14
- package/lib/languages/sw.d.ts +0 -7
- package/lib/languages/ta.d.ts +0 -7
- package/lib/languages/te.d.ts +0 -7
- package/lib/languages/th.d.ts +0 -7
- package/lib/languages/tr.d.ts +0 -18
- package/lib/languages/uk.d.ts +0 -11
- package/lib/languages/uk.js +0 -224
- package/lib/languages/ur.d.ts +0 -7
- package/lib/languages/vi.d.ts +0 -17
- package/lib/languages/yo.d.ts +0 -7
- package/lib/languages/zh-Hans.d.ts +0 -11
- package/lib/languages/zh-Hant.d.ts +0 -11
- package/lib/n2words.d.ts +0 -55
- package/lib/n2words.js +0 -126
- package/lib/utils/parse-numeric.d.ts +0 -17
- /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
- /package/{lib → src}/utils/is-plain-object.js +0 -0
- /package/{lib → src}/utils/validate-options.d.ts +0 -0
- /package/{lib → src}/utils/validate-options.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Bangla language converter
|
|
2
|
+
* Bangla (Bangladesh) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: bn-BD | Bengali as used in Bangladesh
|
|
5
5
|
*
|
|
6
6
|
* Key features:
|
|
7
7
|
* - Indian numbering system (হাজার, লাখ, কোটি)
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* - Complete word forms for 0-99
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
14
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
15
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
14
16
|
|
|
15
17
|
// ============================================================================
|
|
16
18
|
// Vocabulary
|
|
@@ -21,6 +23,26 @@ const NEGATIVE = 'মাইনাস'
|
|
|
21
23
|
const DECIMAL_SEP = 'দশমিক'
|
|
22
24
|
const HUNDRED = 'শত'
|
|
23
25
|
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Ordinal Vocabulary
|
|
28
|
+
// ============================================================================
|
|
29
|
+
|
|
30
|
+
// Ordinal suffix (adds to cardinal for numbers >= 7)
|
|
31
|
+
const ORDINAL_SUFFIX = 'তম'
|
|
32
|
+
|
|
33
|
+
// Special ordinals for first few numbers (1-6 have irregular forms)
|
|
34
|
+
const ORDINAL_SPECIAL = ['', 'প্রথম', 'দ্বিতীয়', 'তৃতীয়', 'চতুর্থ', 'পঞ্চম', 'ষষ্ঠ']
|
|
35
|
+
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Currency Vocabulary (Bangladeshi Taka)
|
|
38
|
+
// ============================================================================
|
|
39
|
+
|
|
40
|
+
// Taka: singular/plural (same form used in Bengali)
|
|
41
|
+
const TAKA = 'টাকা'
|
|
42
|
+
|
|
43
|
+
// Paisa: singular/plural (same form used in Bengali)
|
|
44
|
+
const PAISA = 'পয়সা'
|
|
45
|
+
|
|
24
46
|
const BELOW_HUNDRED = [
|
|
25
47
|
'শূন্য', 'এক', 'দুই', 'তিন', 'চার', 'পাঁচ', 'ছয়', 'সাত', 'আট', 'নয়',
|
|
26
48
|
'দশ', 'এগারো', 'বারো', 'তেরো', 'চৌদ্দ', 'পনেরো', 'ষোল', 'সতেরো', 'আঠারো', 'উনিশ',
|
|
@@ -141,8 +163,8 @@ function decimalPartToWords (decimalPart) {
|
|
|
141
163
|
* @param {number | string | bigint} value - The numeric value to convert
|
|
142
164
|
* @returns {string} The number in Bengali words
|
|
143
165
|
*/
|
|
144
|
-
function
|
|
145
|
-
const { isNegative, integerPart, decimalPart } =
|
|
166
|
+
function toCardinal (value) {
|
|
167
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
146
168
|
|
|
147
169
|
let result = ''
|
|
148
170
|
|
|
@@ -159,8 +181,90 @@ function toWords (value) {
|
|
|
159
181
|
return result
|
|
160
182
|
}
|
|
161
183
|
|
|
184
|
+
// ============================================================================
|
|
185
|
+
// ORDINAL: toOrdinal(value)
|
|
186
|
+
// ============================================================================
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Converts a positive integer to Bengali ordinal words.
|
|
190
|
+
*
|
|
191
|
+
* Bengali ordinals: First 6 are irregular, then add -তম suffix.
|
|
192
|
+
*
|
|
193
|
+
* @param {bigint} n - Positive integer to convert
|
|
194
|
+
* @returns {string} Bengali ordinal words
|
|
195
|
+
*/
|
|
196
|
+
function integerToOrdinal (n) {
|
|
197
|
+
// Special ordinals for 1-6
|
|
198
|
+
if (n >= 1n && n <= 6n) {
|
|
199
|
+
return ORDINAL_SPECIAL[Number(n)]
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// For 7 and above, add suffix to cardinal
|
|
203
|
+
const cardinal = integerToWords(n)
|
|
204
|
+
return cardinal + ORDINAL_SUFFIX
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Converts a numeric value to Bengali ordinal words.
|
|
209
|
+
*
|
|
210
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
211
|
+
* @returns {string} The number as ordinal words
|
|
212
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
213
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* toOrdinal(1) // 'প্রথম'
|
|
217
|
+
* toOrdinal(2) // 'দ্বিতীয়'
|
|
218
|
+
* toOrdinal(3) // 'তৃতীয়'
|
|
219
|
+
* toOrdinal(10) // 'দশতম'
|
|
220
|
+
*/
|
|
221
|
+
function toOrdinal (value) {
|
|
222
|
+
const integerPart = parseOrdinalValue(value)
|
|
223
|
+
return integerToOrdinal(integerPart)
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// ============================================================================
|
|
227
|
+
// CURRENCY: toCurrency(value, options?)
|
|
228
|
+
// ============================================================================
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Converts a numeric value to Bengali currency words (Bangladeshi Taka).
|
|
232
|
+
*
|
|
233
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
234
|
+
* @returns {string} The amount in Bengali currency words
|
|
235
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
236
|
+
* @throws {Error} If value is not a valid number format
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* toCurrency(42.50) // 'বেয়াল্লিশ টাকা পঞ্চাশ পয়সা'
|
|
240
|
+
* toCurrency(1) // 'এক টাকা'
|
|
241
|
+
* toCurrency(0.01) // 'এক পয়সা'
|
|
242
|
+
*/
|
|
243
|
+
function toCurrency (value) {
|
|
244
|
+
const { isNegative, dollars: taka, cents: paisa } = parseCurrencyValue(value)
|
|
245
|
+
|
|
246
|
+
// Build result
|
|
247
|
+
let result = ''
|
|
248
|
+
if (isNegative) result = NEGATIVE + ' '
|
|
249
|
+
|
|
250
|
+
// Taka part - show if non-zero, or if no paisa
|
|
251
|
+
if (taka > 0n || paisa === 0n) {
|
|
252
|
+
result += integerToWords(taka) + ' ' + TAKA
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Paisa part
|
|
256
|
+
if (paisa > 0n) {
|
|
257
|
+
if (taka > 0n) {
|
|
258
|
+
result += ' '
|
|
259
|
+
}
|
|
260
|
+
result += integerToWords(paisa) + ' ' + PAISA
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return result
|
|
264
|
+
}
|
|
265
|
+
|
|
162
266
|
// ============================================================================
|
|
163
267
|
// Exports
|
|
164
268
|
// ============================================================================
|
|
165
269
|
|
|
166
|
-
export {
|
|
270
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/cs-CZ.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Czech words.
|
|
3
|
+
*
|
|
4
|
+
* This is the main public API. It accepts any valid numeric input
|
|
5
|
+
* (number, string, or bigint) and handles parsing internally.
|
|
6
|
+
*
|
|
7
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
8
|
+
* @returns {string} The number in Czech words
|
|
9
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
10
|
+
* @throws {Error} If value is not a valid number format
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* toCardinal(21) // 'dvacet jedna'
|
|
14
|
+
* toCardinal(1000) // 'tisíc'
|
|
15
|
+
* toCardinal(2000) // 'dva tisíce'
|
|
16
|
+
* toCardinal(5000) // 'pět tisíc'
|
|
17
|
+
*/
|
|
18
|
+
export function toCardinal(value: number | string | bigint): string;
|
|
19
|
+
/**
|
|
20
|
+
* Converts a numeric value to Czech ordinal words (masculine nominative).
|
|
21
|
+
*
|
|
22
|
+
* @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
|
|
23
|
+
* @returns {string} The number as ordinal words
|
|
24
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
25
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* toOrdinal(1) // 'první'
|
|
29
|
+
* toOrdinal(2) // 'druhý'
|
|
30
|
+
* toOrdinal(21) // 'dvacet první'
|
|
31
|
+
* toOrdinal(100) // 'stý'
|
|
32
|
+
* toOrdinal(1000) // 'tisící'
|
|
33
|
+
*/
|
|
34
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
35
|
+
/**
|
|
36
|
+
* Converts a numeric value to Czech currency words (Koruna).
|
|
37
|
+
*
|
|
38
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
39
|
+
* @returns {string} The amount in Czech currency words
|
|
40
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
41
|
+
* @throws {Error} If value is not a valid number format
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* toCurrency(42) // 'čtyřicet dva koruny'
|
|
45
|
+
* toCurrency(1) // 'jedna koruna'
|
|
46
|
+
* toCurrency(1.50) // 'jedna koruna padesát haléřů'
|
|
47
|
+
* toCurrency(-5) // 'mínus pět korun'
|
|
48
|
+
*/
|
|
49
|
+
export function toCurrency(value: number | string | bigint): string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Czech language converter
|
|
2
|
+
* Czech (Czechia) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: cs-CZ | Czech as used in Czechia
|
|
5
5
|
*
|
|
6
6
|
* Czech-specific rules:
|
|
7
7
|
* - Three-form pluralization: 1 = singular, 2-4 = few, 5+ = many
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* - Dynamic decimal separator: celá/celé/celých based on integer
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
15
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
16
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
15
17
|
|
|
16
18
|
// ============================================================================
|
|
17
19
|
// Vocabulary (module-level constants)
|
|
@@ -45,6 +47,34 @@ const PLURAL_FORMS = {
|
|
|
45
47
|
const ZERO = 'nula'
|
|
46
48
|
const NEGATIVE = 'mínus'
|
|
47
49
|
|
|
50
|
+
// ============================================================================
|
|
51
|
+
// Ordinal Vocabulary
|
|
52
|
+
// ============================================================================
|
|
53
|
+
|
|
54
|
+
// Czech ordinals (masculine nominative singular)
|
|
55
|
+
const ORDINAL_ONES = ['', 'první', 'druhý', 'třetí', 'čtvrtý', 'pátý', 'šestý', 'sedmý', 'osmý', 'devátý']
|
|
56
|
+
|
|
57
|
+
// Ordinal teens
|
|
58
|
+
const ORDINAL_TEENS = ['desátý', 'jedenáctý', 'dvanáctý', 'třináctý', 'čtrnáctý', 'patnáctý', 'šestnáctý', 'sedmnáctý', 'osmnáctý', 'devatenáctý']
|
|
59
|
+
|
|
60
|
+
// Ordinal tens (for exact tens)
|
|
61
|
+
const ORDINAL_TENS = ['', '', 'dvacátý', 'třicátý', 'čtyřicátý', 'padesátý', 'šedesátý', 'sedmdesátý', 'osmdesátý', 'devadesátý']
|
|
62
|
+
|
|
63
|
+
// Ordinal hundreds (for exact hundreds)
|
|
64
|
+
const ORDINAL_HUNDREDS = ['', 'stý', 'dvoustý', 'třístý', 'čtyřstý', 'pětistý', 'šestistý', 'sedmistý', 'osmistý', 'devítistý']
|
|
65
|
+
|
|
66
|
+
// Scale ordinals
|
|
67
|
+
const ORDINAL_SCALES = ['tisící', 'miliontý', 'miliardtý', 'biliontý']
|
|
68
|
+
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// Currency Vocabulary (Czech Koruna)
|
|
71
|
+
// ============================================================================
|
|
72
|
+
|
|
73
|
+
// Koruna forms: [singular, few (2-4), many (5+)]
|
|
74
|
+
const KORUNA_FORMS = ['koruna', 'koruny', 'korun']
|
|
75
|
+
// Haléř forms: [singular, few (2-4), many (5+)]
|
|
76
|
+
const HALER_FORMS = ['haléř', 'haléře', 'haléřů']
|
|
77
|
+
|
|
48
78
|
// ============================================================================
|
|
49
79
|
// Segment Building
|
|
50
80
|
// ============================================================================
|
|
@@ -56,8 +86,8 @@ function buildSegment (n) {
|
|
|
56
86
|
if (n === 0) return ''
|
|
57
87
|
|
|
58
88
|
const ones = n % 10
|
|
59
|
-
const tens = Math.
|
|
60
|
-
const hundreds = Math.
|
|
89
|
+
const tens = Math.trunc(n / 10) % 10
|
|
90
|
+
const hundreds = Math.trunc(n / 100)
|
|
61
91
|
|
|
62
92
|
const parts = []
|
|
63
93
|
|
|
@@ -90,8 +120,8 @@ function buildSegmentWithHundreds (n) {
|
|
|
90
120
|
if (n === 0) return ''
|
|
91
121
|
|
|
92
122
|
const ones = n % 10
|
|
93
|
-
const tens = Math.
|
|
94
|
-
const hundreds = Math.
|
|
123
|
+
const tens = Math.trunc(n / 10) % 10
|
|
124
|
+
const hundreds = Math.trunc(n / 100)
|
|
95
125
|
|
|
96
126
|
const parts = []
|
|
97
127
|
|
|
@@ -291,13 +321,13 @@ function decimalPartToWords (decimalPart) {
|
|
|
291
321
|
* @throws {Error} If value is not a valid number format
|
|
292
322
|
*
|
|
293
323
|
* @example
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
324
|
+
* toCardinal(21) // 'dvacet jedna'
|
|
325
|
+
* toCardinal(1000) // 'tisíc'
|
|
326
|
+
* toCardinal(2000) // 'dva tisíce'
|
|
327
|
+
* toCardinal(5000) // 'pět tisíc'
|
|
298
328
|
*/
|
|
299
|
-
function
|
|
300
|
-
const { isNegative, integerPart, decimalPart } =
|
|
329
|
+
function toCardinal (value) {
|
|
330
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
301
331
|
|
|
302
332
|
let result = ''
|
|
303
333
|
|
|
@@ -315,8 +345,204 @@ function toWords (value) {
|
|
|
315
345
|
return result
|
|
316
346
|
}
|
|
317
347
|
|
|
348
|
+
// ============================================================================
|
|
349
|
+
// ORDINAL: toOrdinal(value)
|
|
350
|
+
// ============================================================================
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Builds ordinal for a 0-99 segment when it's the final (ordinal) part.
|
|
354
|
+
*
|
|
355
|
+
* @param {number} n - Number 0-99
|
|
356
|
+
* @returns {string} Ordinal words
|
|
357
|
+
*/
|
|
358
|
+
function buildOrdinalTensOnes (n) {
|
|
359
|
+
if (n === 0) return ''
|
|
360
|
+
|
|
361
|
+
const onesDigit = n % 10
|
|
362
|
+
const tensDigit = Math.trunc(n / 10)
|
|
363
|
+
|
|
364
|
+
if (tensDigit === 0) {
|
|
365
|
+
return ORDINAL_ONES[onesDigit]
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (tensDigit === 1) {
|
|
369
|
+
return ORDINAL_TEENS[onesDigit]
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if (onesDigit === 0) {
|
|
373
|
+
return ORDINAL_TENS[tensDigit]
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
return TENS[tensDigit] + ' ' + ORDINAL_ONES[onesDigit]
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Converts a positive integer to Czech ordinal words (masculine nominative).
|
|
381
|
+
*
|
|
382
|
+
* @param {bigint} n - Positive integer to convert
|
|
383
|
+
* @returns {string} Ordinal Czech words
|
|
384
|
+
*/
|
|
385
|
+
function integerToOrdinal (n) {
|
|
386
|
+
if (n < 100n) {
|
|
387
|
+
return buildOrdinalTensOnes(Number(n))
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
if (n < 1000n) {
|
|
391
|
+
const num = Number(n)
|
|
392
|
+
const hundredsDigit = Math.trunc(num / 100)
|
|
393
|
+
const remainder = num % 100
|
|
394
|
+
|
|
395
|
+
if (remainder === 0) {
|
|
396
|
+
return ORDINAL_HUNDREDS[hundredsDigit]
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return HUNDREDS[hundredsDigit] + ' ' + buildOrdinalTensOnes(remainder)
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if (n < 1_000_000n) {
|
|
403
|
+
const thousands = Number(n / 1000n)
|
|
404
|
+
const remainder = Number(n % 1000n)
|
|
405
|
+
|
|
406
|
+
if (remainder === 0) {
|
|
407
|
+
if (thousands === 1) {
|
|
408
|
+
return ORDINAL_SCALES[0]
|
|
409
|
+
}
|
|
410
|
+
return buildSegment(thousands) + ' ' + ORDINAL_SCALES[0]
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
const scaleWord = pluralize(BigInt(thousands), PLURAL_FORMS[1])
|
|
414
|
+
const thousandsWord = thousands === 1 ? '' : buildSegment(thousands) + ' '
|
|
415
|
+
return (thousands === 1 ? 'tisíc' : thousandsWord + scaleWord) + ' ' + integerToOrdinal(BigInt(remainder))
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return buildLargeOrdinal(n)
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Builds ordinal words for numbers >= 1,000,000.
|
|
423
|
+
*
|
|
424
|
+
* @param {bigint} n - Number >= 1,000,000
|
|
425
|
+
* @returns {string} Ordinal Czech words
|
|
426
|
+
*/
|
|
427
|
+
function buildLargeOrdinal (n) {
|
|
428
|
+
const segmentValues = []
|
|
429
|
+
let temp = n
|
|
430
|
+
while (temp > 0n) {
|
|
431
|
+
segmentValues.push(temp % 1000n)
|
|
432
|
+
temp = temp / 1000n
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
let lastNonZeroIdx = 0
|
|
436
|
+
for (let i = 0; i < segmentValues.length; i++) {
|
|
437
|
+
if (segmentValues[i] !== 0n) {
|
|
438
|
+
lastNonZeroIdx = i
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
const parts = []
|
|
443
|
+
|
|
444
|
+
for (let i = segmentValues.length - 1; i >= 0; i--) {
|
|
445
|
+
const segment = segmentValues[i]
|
|
446
|
+
if (segment === 0n) continue
|
|
447
|
+
|
|
448
|
+
const isLastNonZero = (i === lastNonZeroIdx)
|
|
449
|
+
|
|
450
|
+
if (i === 0) {
|
|
451
|
+
if (isLastNonZero) {
|
|
452
|
+
parts.push(integerToOrdinal(segment))
|
|
453
|
+
} else {
|
|
454
|
+
parts.push(buildSegmentWithHundreds(Number(segment)))
|
|
455
|
+
}
|
|
456
|
+
} else {
|
|
457
|
+
if (isLastNonZero) {
|
|
458
|
+
if (segment === 1n) {
|
|
459
|
+
parts.push(ORDINAL_SCALES[i - 1] || PLURAL_FORMS[i][0])
|
|
460
|
+
} else {
|
|
461
|
+
parts.push(buildSegment(Number(segment)) + ' ' + (ORDINAL_SCALES[i - 1] || PLURAL_FORMS[i][0]))
|
|
462
|
+
}
|
|
463
|
+
} else {
|
|
464
|
+
const forms = PLURAL_FORMS[i]
|
|
465
|
+
if (forms) {
|
|
466
|
+
const scaleWord = pluralize(segment, forms)
|
|
467
|
+
if (segment === 1n) {
|
|
468
|
+
parts.push(scaleWord)
|
|
469
|
+
} else {
|
|
470
|
+
parts.push(buildSegment(Number(segment)) + ' ' + scaleWord)
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
return parts.join(' ')
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Converts a numeric value to Czech ordinal words (masculine nominative).
|
|
482
|
+
*
|
|
483
|
+
* @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
|
|
484
|
+
* @returns {string} The number as ordinal words
|
|
485
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
486
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
487
|
+
*
|
|
488
|
+
* @example
|
|
489
|
+
* toOrdinal(1) // 'první'
|
|
490
|
+
* toOrdinal(2) // 'druhý'
|
|
491
|
+
* toOrdinal(21) // 'dvacet první'
|
|
492
|
+
* toOrdinal(100) // 'stý'
|
|
493
|
+
* toOrdinal(1000) // 'tisící'
|
|
494
|
+
*/
|
|
495
|
+
function toOrdinal (value) {
|
|
496
|
+
const integerPart = parseOrdinalValue(value)
|
|
497
|
+
return integerToOrdinal(integerPart)
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// ============================================================================
|
|
501
|
+
// CURRENCY: toCurrency(value)
|
|
502
|
+
// ============================================================================
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Converts a numeric value to Czech currency words (Koruna).
|
|
506
|
+
*
|
|
507
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
508
|
+
* @returns {string} The amount in Czech currency words
|
|
509
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
510
|
+
* @throws {Error} If value is not a valid number format
|
|
511
|
+
*
|
|
512
|
+
* @example
|
|
513
|
+
* toCurrency(42) // 'čtyřicet dva koruny'
|
|
514
|
+
* toCurrency(1) // 'jedna koruna'
|
|
515
|
+
* toCurrency(1.50) // 'jedna koruna padesát haléřů'
|
|
516
|
+
* toCurrency(-5) // 'mínus pět korun'
|
|
517
|
+
*/
|
|
518
|
+
function toCurrency (value) {
|
|
519
|
+
const { isNegative, dollars: koruny, cents: halere } = parseCurrencyValue(value)
|
|
520
|
+
|
|
521
|
+
let result = ''
|
|
522
|
+
if (isNegative) {
|
|
523
|
+
result = NEGATIVE + ' '
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// Koruna part
|
|
527
|
+
if (koruny > 0n || halere === 0n) {
|
|
528
|
+
result += integerToWords(koruny)
|
|
529
|
+
result += ' ' + pluralize(koruny, KORUNA_FORMS)
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// Haléř part
|
|
533
|
+
if (halere > 0n) {
|
|
534
|
+
if (koruny > 0n) {
|
|
535
|
+
result += ' '
|
|
536
|
+
}
|
|
537
|
+
result += integerToWords(halere)
|
|
538
|
+
result += ' ' + pluralize(halere, HALER_FORMS)
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
return result
|
|
542
|
+
}
|
|
543
|
+
|
|
318
544
|
// ============================================================================
|
|
319
545
|
// Public API
|
|
320
546
|
// ============================================================================
|
|
321
547
|
|
|
322
|
-
export {
|
|
548
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/da-DK.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Danish words.
|
|
3
|
+
*
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @returns {string} The number in Danish words
|
|
6
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
7
|
+
* @throws {Error} If value is not a valid number format
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* toCardinal(21) // 'enogtyve'
|
|
11
|
+
* toCardinal(1000) // 'ettusind'
|
|
12
|
+
* toCardinal(1000000) // 'en millioner'
|
|
13
|
+
*/
|
|
14
|
+
export function toCardinal(value: number | string | bigint): string;
|
|
15
|
+
/**
|
|
16
|
+
* Converts a numeric value to Danish ordinal words.
|
|
17
|
+
*
|
|
18
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
19
|
+
* @returns {string} The number as ordinal words
|
|
20
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
21
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* toOrdinal(1) // 'første'
|
|
25
|
+
* toOrdinal(2) // 'anden'
|
|
26
|
+
* toOrdinal(21) // 'enogtyvede'
|
|
27
|
+
*/
|
|
28
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
29
|
+
/**
|
|
30
|
+
* Converts a numeric value to Danish currency words (Danish Krone).
|
|
31
|
+
*
|
|
32
|
+
* Uses krone/kroner and øre (100 øre = 1 krone).
|
|
33
|
+
*
|
|
34
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
35
|
+
* @returns {string} The amount in Danish currency words
|
|
36
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
37
|
+
* @throws {Error} If value is not a valid number format
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* toCurrency(1) // 'en krone'
|
|
41
|
+
* toCurrency(42) // 'toogfyrre kroner'
|
|
42
|
+
* toCurrency(1.50) // 'en krone og halvtreds øre'
|
|
43
|
+
*/
|
|
44
|
+
export function toCurrency(value: number | string | bigint): string;
|