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
|
-
* Filipino language converter
|
|
2
|
+
* Filipino (Philippines) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: fil-PH | Filipino as used in the Philippines
|
|
5
5
|
*
|
|
6
6
|
* Key features:
|
|
7
7
|
* - Linker "ng" after vowels: "isang daang" (100)
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* - Per-digit decimal reading
|
|
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
|
|
@@ -31,6 +33,25 @@ const DECIMAL_SEP = 'punto'
|
|
|
31
33
|
// Short scale with linker
|
|
32
34
|
const SCALE_WORDS = ['', THOUSAND, 'milyong', 'bilyong', 'trilyong']
|
|
33
35
|
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Ordinal Vocabulary
|
|
38
|
+
// ============================================================================
|
|
39
|
+
|
|
40
|
+
// Filipino ordinals use "ika-" prefix: ika-isa (1st), ikalawa (2nd), etc.
|
|
41
|
+
// Special forms for 1st and 2nd
|
|
42
|
+
const ORDINAL_PREFIX = 'ika'
|
|
43
|
+
const ORDINAL_SPECIAL = {
|
|
44
|
+
1: 'una', // first
|
|
45
|
+
2: 'ikalawa' // second (contracted form)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// Currency Vocabulary (Philippine Peso)
|
|
50
|
+
// ============================================================================
|
|
51
|
+
|
|
52
|
+
const PESO = 'piso'
|
|
53
|
+
const SENTIMO = 'sentimo'
|
|
54
|
+
|
|
34
55
|
// ============================================================================
|
|
35
56
|
// Helper Functions
|
|
36
57
|
// ============================================================================
|
|
@@ -53,8 +74,8 @@ function buildSegment (n) {
|
|
|
53
74
|
if (n === 0) return ''
|
|
54
75
|
|
|
55
76
|
const ones = n % 10
|
|
56
|
-
const tensDigit = Math.
|
|
57
|
-
const hundredsDigit = Math.
|
|
77
|
+
const tensDigit = Math.trunc(n / 10) % 10
|
|
78
|
+
const hundredsDigit = Math.trunc(n / 100)
|
|
58
79
|
|
|
59
80
|
const parts = []
|
|
60
81
|
|
|
@@ -186,8 +207,8 @@ function decimalPartToWords (decimalPart) {
|
|
|
186
207
|
* @param {number | string | bigint} value - The numeric value to convert
|
|
187
208
|
* @returns {string} The number in Filipino words
|
|
188
209
|
*/
|
|
189
|
-
function
|
|
190
|
-
const { isNegative, integerPart, decimalPart } =
|
|
210
|
+
function toCardinal (value) {
|
|
211
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
191
212
|
|
|
192
213
|
let result = ''
|
|
193
214
|
|
|
@@ -204,8 +225,123 @@ function toWords (value) {
|
|
|
204
225
|
return result
|
|
205
226
|
}
|
|
206
227
|
|
|
228
|
+
// ============================================================================
|
|
229
|
+
// ORDINAL: toOrdinal(value)
|
|
230
|
+
// ============================================================================
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Converts a non-negative integer to Filipino ordinal words.
|
|
234
|
+
*
|
|
235
|
+
* Filipino ordinals: una (1st), ikalawa (2nd), then ika- + cardinal.
|
|
236
|
+
*
|
|
237
|
+
* @param {bigint} n - Positive integer to convert
|
|
238
|
+
* @returns {string} Filipino ordinal words
|
|
239
|
+
*/
|
|
240
|
+
function integerToOrdinal (n) {
|
|
241
|
+
// Special forms for 1st and 2nd
|
|
242
|
+
if (n === 1n) return ORDINAL_SPECIAL[1]
|
|
243
|
+
if (n === 2n) return ORDINAL_SPECIAL[2]
|
|
244
|
+
|
|
245
|
+
// For 3+, use ika- prefix + cardinal
|
|
246
|
+
return ORDINAL_PREFIX + '-' + integerToWords(n)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Converts a numeric value to Filipino ordinal words.
|
|
251
|
+
*
|
|
252
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
253
|
+
* @returns {string} The number as ordinal words
|
|
254
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
255
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* toOrdinal(1) // 'una'
|
|
259
|
+
* toOrdinal(2) // 'ikalawa'
|
|
260
|
+
* toOrdinal(3) // 'ika-tatlo'
|
|
261
|
+
*/
|
|
262
|
+
function toOrdinal (value) {
|
|
263
|
+
const integerPart = parseOrdinalValue(value)
|
|
264
|
+
return integerToOrdinal(integerPart)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// ============================================================================
|
|
268
|
+
// CURRENCY: toCurrency(value)
|
|
269
|
+
// ============================================================================
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Converts a numeric value to Filipino currency words (Philippine Peso).
|
|
273
|
+
*
|
|
274
|
+
* Uses piso (peso) and sentimo (centavo).
|
|
275
|
+
*
|
|
276
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
277
|
+
* @returns {string} The amount in Filipino currency words
|
|
278
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
279
|
+
* @throws {Error} If value is not a valid number format
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* toCurrency(42) // 'apatnapu dalawang piso'
|
|
283
|
+
* toCurrency(1.50) // 'isang piso at limampung sentimo'
|
|
284
|
+
* toCurrency(-5) // 'negatibo limang piso'
|
|
285
|
+
*/
|
|
286
|
+
function toCurrency (value) {
|
|
287
|
+
const { isNegative, dollars: pesos, cents: sentimos } = parseCurrencyValue(value)
|
|
288
|
+
|
|
289
|
+
let result = ''
|
|
290
|
+
if (isNegative) {
|
|
291
|
+
result = NEGATIVE + ' '
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Pesos part
|
|
295
|
+
if (pesos > 0n || sentimos === 0n) {
|
|
296
|
+
// Add linker before "piso"
|
|
297
|
+
const pesoWords = integerToWords(pesos)
|
|
298
|
+
if (pesos === 0n) {
|
|
299
|
+
result += pesoWords + ' ' + PESO
|
|
300
|
+
} else {
|
|
301
|
+
// Need to add linker to the last word before "piso"
|
|
302
|
+
const lastSpaceIdx = pesoWords.lastIndexOf(' ')
|
|
303
|
+
if (lastSpaceIdx === -1) {
|
|
304
|
+
// Single word
|
|
305
|
+
result += addLinker(pesoWords) + ' ' + PESO
|
|
306
|
+
} else {
|
|
307
|
+
const prefix = pesoWords.slice(0, lastSpaceIdx + 1)
|
|
308
|
+
const lastWord = pesoWords.slice(lastSpaceIdx + 1)
|
|
309
|
+
if (lastWord.endsWith('ng')) {
|
|
310
|
+
result += pesoWords + ' ' + PESO
|
|
311
|
+
} else {
|
|
312
|
+
result += prefix + addLinker(lastWord) + ' ' + PESO
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Sentimos part
|
|
319
|
+
if (sentimos > 0n) {
|
|
320
|
+
if (pesos > 0n) {
|
|
321
|
+
result += ' at '
|
|
322
|
+
}
|
|
323
|
+
const sentimoWords = integerToWords(sentimos)
|
|
324
|
+
// Add linker before "sentimo"
|
|
325
|
+
const lastSpaceIdx = sentimoWords.lastIndexOf(' ')
|
|
326
|
+
if (lastSpaceIdx === -1) {
|
|
327
|
+
// Single word
|
|
328
|
+
result += addLinker(sentimoWords) + ' ' + SENTIMO
|
|
329
|
+
} else {
|
|
330
|
+
const prefix = sentimoWords.slice(0, lastSpaceIdx + 1)
|
|
331
|
+
const lastWord = sentimoWords.slice(lastSpaceIdx + 1)
|
|
332
|
+
if (lastWord.endsWith('ng')) {
|
|
333
|
+
result += sentimoWords + ' ' + SENTIMO
|
|
334
|
+
} else {
|
|
335
|
+
result += prefix + addLinker(lastWord) + ' ' + SENTIMO
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return result
|
|
341
|
+
}
|
|
342
|
+
|
|
207
343
|
// ============================================================================
|
|
208
344
|
// Exports
|
|
209
345
|
// ============================================================================
|
|
210
346
|
|
|
211
|
-
export {
|
|
347
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/fr-BE.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Belgian French words.
|
|
3
|
+
*
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @param {Object} [options] - Optional configuration
|
|
6
|
+
* @param {boolean} [options.withHyphenSeparator=false] - Use hyphens between words
|
|
7
|
+
* @returns {string} The number in Belgian French words
|
|
8
|
+
*/
|
|
9
|
+
export function toCardinal(value: number | string | bigint, options?: {
|
|
10
|
+
withHyphenSeparator?: boolean | undefined;
|
|
11
|
+
}): string;
|
|
12
|
+
/**
|
|
13
|
+
* Converts a numeric value to Belgian French ordinal words.
|
|
14
|
+
*
|
|
15
|
+
* Belgian French ordinals: premier (1st), then cardinal + ième.
|
|
16
|
+
* Special rules: quatre→quatrième, cinq→cinquième, neuf→neuvième.
|
|
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) // 'premier'
|
|
25
|
+
* toOrdinal(2) // 'deuxième'
|
|
26
|
+
* toOrdinal(70) // 'septantième'
|
|
27
|
+
* toOrdinal(90) // 'nonantième'
|
|
28
|
+
*/
|
|
29
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
30
|
+
/**
|
|
31
|
+
* Converts a numeric value to Belgian French currency words (Euro).
|
|
32
|
+
*
|
|
33
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
34
|
+
* @param {Object} [options] - Optional configuration
|
|
35
|
+
* @param {boolean} [options.and=true] - Use "et" between euros and centimes
|
|
36
|
+
* @returns {string} The amount in Belgian French currency words
|
|
37
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
38
|
+
* @throws {Error} If value is not a valid number format
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* toCurrency(42.50) // 'quarante-deux euros et cinquante centimes'
|
|
42
|
+
* toCurrency(1) // 'un euro'
|
|
43
|
+
* toCurrency(0.99) // 'nonante-neuf centimes'
|
|
44
|
+
* toCurrency(0.01) // 'un centime'
|
|
45
|
+
* toCurrency(42.50, { and: false }) // 'quarante-deux euros cinquante centimes'
|
|
46
|
+
*/
|
|
47
|
+
export function toCurrency(value: number | string | bigint, options?: {
|
|
48
|
+
and?: boolean | undefined;
|
|
49
|
+
}): string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* French (Belgium) language converter
|
|
2
|
+
* French (Belgium) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: fr-BE | French as used in Belgium
|
|
5
5
|
*
|
|
6
6
|
* Belgian French differences from standard French:
|
|
7
7
|
* - septante (70) instead of soixante-dix
|
|
@@ -10,8 +10,10 @@
|
|
|
10
10
|
* - Uses "septante et un" (71), "nonante et un" (91)
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
14
|
-
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'
|
|
16
|
+
import { validateOptions } from './utils/validate-options.js'
|
|
15
17
|
|
|
16
18
|
// ============================================================================
|
|
17
19
|
// Vocabulary
|
|
@@ -31,6 +33,25 @@ const ZERO = 'zéro'
|
|
|
31
33
|
const NEGATIVE = 'moins'
|
|
32
34
|
const DECIMAL_SEP = 'virgule'
|
|
33
35
|
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Ordinal Vocabulary
|
|
38
|
+
// ============================================================================
|
|
39
|
+
|
|
40
|
+
// Ordinal suffix
|
|
41
|
+
const ORDINAL_SUFFIX = 'ième'
|
|
42
|
+
|
|
43
|
+
// Special ordinals
|
|
44
|
+
const PREMIER = 'premier'
|
|
45
|
+
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Currency Vocabulary (Euro)
|
|
48
|
+
// ============================================================================
|
|
49
|
+
|
|
50
|
+
const EURO = 'euro'
|
|
51
|
+
const EUROS = 'euros'
|
|
52
|
+
const CENTIME = 'centime'
|
|
53
|
+
const CENTIMES = 'centimes'
|
|
54
|
+
|
|
34
55
|
// ============================================================================
|
|
35
56
|
// Segment Building
|
|
36
57
|
// ============================================================================
|
|
@@ -39,7 +60,7 @@ function buildSegment (n) {
|
|
|
39
60
|
if (n === 0) return { word: '', endsWithCents: false, endsWithVingts: false }
|
|
40
61
|
|
|
41
62
|
const tensOnes = n % 100
|
|
42
|
-
const hundreds = Math.
|
|
63
|
+
const hundreds = Math.trunc(n / 100)
|
|
43
64
|
|
|
44
65
|
const parts = []
|
|
45
66
|
let endsWithCents = false
|
|
@@ -70,7 +91,7 @@ function buildSegment (n) {
|
|
|
70
91
|
parts.push(TEENS[tensOnes - 10])
|
|
71
92
|
} else if (tensOnes < 70) {
|
|
72
93
|
// 20-69: standard pattern
|
|
73
|
-
const t = Math.
|
|
94
|
+
const t = Math.trunc(tensOnes / 10)
|
|
74
95
|
const o = tensOnes % 10
|
|
75
96
|
if (o === 0) {
|
|
76
97
|
parts.push(TENS[t])
|
|
@@ -263,22 +284,163 @@ function decimalPartToWords (decimalPart, withHyphen) {
|
|
|
263
284
|
* @param {boolean} [options.withHyphenSeparator=false] - Use hyphens between words
|
|
264
285
|
* @returns {string} The number in Belgian French words
|
|
265
286
|
*/
|
|
266
|
-
function
|
|
287
|
+
function toCardinal (value, options) {
|
|
267
288
|
options = validateOptions(options)
|
|
268
|
-
const { isNegative, integerPart, decimalPart } =
|
|
269
|
-
|
|
289
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
290
|
+
|
|
291
|
+
// Apply option defaults
|
|
292
|
+
const { withHyphenSeparator = false } = options
|
|
270
293
|
|
|
271
294
|
let result = ''
|
|
272
|
-
const sep =
|
|
295
|
+
const sep = withHyphenSeparator ? '-' : ' '
|
|
273
296
|
|
|
274
297
|
if (isNegative) {
|
|
275
298
|
result = NEGATIVE + sep
|
|
276
299
|
}
|
|
277
300
|
|
|
278
|
-
result += integerToWords(integerPart,
|
|
301
|
+
result += integerToWords(integerPart, withHyphenSeparator)
|
|
279
302
|
|
|
280
303
|
if (decimalPart) {
|
|
281
|
-
result += sep + DECIMAL_SEP + sep + decimalPartToWords(decimalPart,
|
|
304
|
+
result += sep + DECIMAL_SEP + sep + decimalPartToWords(decimalPart, withHyphenSeparator)
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return result
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// ============================================================================
|
|
311
|
+
// ORDINAL: toOrdinal(value)
|
|
312
|
+
// ============================================================================
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Converts a cardinal number word to its ordinal form.
|
|
316
|
+
* Rules:
|
|
317
|
+
* - 1 → premier (special case)
|
|
318
|
+
* - Drop final -e before adding -ième (quatre → quatrième)
|
|
319
|
+
* - cinq → cinquième (add -u- before -ième)
|
|
320
|
+
* - neuf → neuvième (f → v before -ième)
|
|
321
|
+
*
|
|
322
|
+
* @param {string} cardinalWord - Cardinal word to convert
|
|
323
|
+
* @returns {string} Ordinal form
|
|
324
|
+
*/
|
|
325
|
+
function cardinalToOrdinal (cardinalWord) {
|
|
326
|
+
// Handle special endings
|
|
327
|
+
if (cardinalWord.endsWith('cinq')) {
|
|
328
|
+
// cinq → cinquième (add 'u')
|
|
329
|
+
return cardinalWord + 'u' + ORDINAL_SUFFIX
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (cardinalWord.endsWith('neuf')) {
|
|
333
|
+
// neuf → neuvième (f → v)
|
|
334
|
+
return cardinalWord.slice(0, -1) + 'v' + ORDINAL_SUFFIX
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Drop plural -s from cents/vingts/millions/etc. (quatre-vingts → quatre-vingtième)
|
|
338
|
+
// Note: "trois", "six" also end in s but that's not a plural
|
|
339
|
+
if (cardinalWord.endsWith('cents') ||
|
|
340
|
+
cardinalWord.endsWith('vingts') ||
|
|
341
|
+
cardinalWord.endsWith('millions') ||
|
|
342
|
+
cardinalWord.endsWith('milliards') ||
|
|
343
|
+
cardinalWord.endsWith('billions') ||
|
|
344
|
+
cardinalWord.endsWith('billiards') ||
|
|
345
|
+
cardinalWord.endsWith('trillions') ||
|
|
346
|
+
cardinalWord.endsWith('trilliards') ||
|
|
347
|
+
cardinalWord.endsWith('quadrillions') ||
|
|
348
|
+
cardinalWord.endsWith('quadrilliards')) {
|
|
349
|
+
return cardinalWord.slice(0, -1) + ORDINAL_SUFFIX
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Drop final -e before adding -ième (quatre → quatrième)
|
|
353
|
+
if (cardinalWord.endsWith('e')) {
|
|
354
|
+
return cardinalWord.slice(0, -1) + ORDINAL_SUFFIX
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Default: just add -ième
|
|
358
|
+
return cardinalWord + ORDINAL_SUFFIX
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Converts a positive integer to Belgian French ordinal words.
|
|
363
|
+
*
|
|
364
|
+
* @param {bigint} n - Positive integer
|
|
365
|
+
* @returns {string} Belgian French ordinal words
|
|
366
|
+
*/
|
|
367
|
+
function integerToOrdinal (n) {
|
|
368
|
+
// Special case: 1 → premier
|
|
369
|
+
if (n === 1n) {
|
|
370
|
+
return PREMIER
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Get cardinal form and convert to ordinal
|
|
374
|
+
const cardinalWord = integerToWords(n, false)
|
|
375
|
+
return cardinalToOrdinal(cardinalWord)
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Converts a numeric value to Belgian French ordinal words.
|
|
380
|
+
*
|
|
381
|
+
* Belgian French ordinals: premier (1st), then cardinal + ième.
|
|
382
|
+
* Special rules: quatre→quatrième, cinq→cinquième, neuf→neuvième.
|
|
383
|
+
*
|
|
384
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
385
|
+
* @returns {string} The number as ordinal words
|
|
386
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
387
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
388
|
+
*
|
|
389
|
+
* @example
|
|
390
|
+
* toOrdinal(1) // 'premier'
|
|
391
|
+
* toOrdinal(2) // 'deuxième'
|
|
392
|
+
* toOrdinal(70) // 'septantième'
|
|
393
|
+
* toOrdinal(90) // 'nonantième'
|
|
394
|
+
*/
|
|
395
|
+
function toOrdinal (value) {
|
|
396
|
+
const integerPart = parseOrdinalValue(value)
|
|
397
|
+
return integerToOrdinal(integerPart)
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// ============================================================================
|
|
401
|
+
// CURRENCY: toCurrency(value, options?)
|
|
402
|
+
// ============================================================================
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Converts a numeric value to Belgian French currency words (Euro).
|
|
406
|
+
*
|
|
407
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
408
|
+
* @param {Object} [options] - Optional configuration
|
|
409
|
+
* @param {boolean} [options.and=true] - Use "et" between euros and centimes
|
|
410
|
+
* @returns {string} The amount in Belgian French currency words
|
|
411
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
412
|
+
* @throws {Error} If value is not a valid number format
|
|
413
|
+
*
|
|
414
|
+
* @example
|
|
415
|
+
* toCurrency(42.50) // 'quarante-deux euros et cinquante centimes'
|
|
416
|
+
* toCurrency(1) // 'un euro'
|
|
417
|
+
* toCurrency(0.99) // 'nonante-neuf centimes'
|
|
418
|
+
* toCurrency(0.01) // 'un centime'
|
|
419
|
+
* toCurrency(42.50, { and: false }) // 'quarante-deux euros cinquante centimes'
|
|
420
|
+
*/
|
|
421
|
+
function toCurrency (value, options) {
|
|
422
|
+
options = validateOptions(options)
|
|
423
|
+
const { isNegative, dollars: euros, cents: centimes } = parseCurrencyValue(value)
|
|
424
|
+
const { and: useAnd = true } = options
|
|
425
|
+
|
|
426
|
+
// Build result
|
|
427
|
+
let result = ''
|
|
428
|
+
if (isNegative) result = NEGATIVE + ' '
|
|
429
|
+
|
|
430
|
+
// Euros part
|
|
431
|
+
if (euros > 0n || centimes === 0n) {
|
|
432
|
+
result += integerToWords(euros, false)
|
|
433
|
+
// In French, 0 and 1 are singular: "zéro euro", "un euro"
|
|
434
|
+
result += ' ' + (euros <= 1n ? EURO : EUROS)
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// Centimes part
|
|
438
|
+
if (centimes > 0n) {
|
|
439
|
+
if (euros > 0n) {
|
|
440
|
+
result += useAnd ? ' et ' : ' '
|
|
441
|
+
}
|
|
442
|
+
result += integerToWords(centimes, false)
|
|
443
|
+
result += ' ' + (centimes === 1n ? CENTIME : CENTIMES)
|
|
282
444
|
}
|
|
283
445
|
|
|
284
446
|
return result
|
|
@@ -288,4 +450,4 @@ function toWords (value, options) {
|
|
|
288
450
|
// Exports
|
|
289
451
|
// ============================================================================
|
|
290
452
|
|
|
291
|
-
export {
|
|
453
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/fr-FR.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to French 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
|
+
* @param {Object} [options] - Optional configuration
|
|
9
|
+
* @param {boolean} [options.withHyphenSeparator=false] - Use hyphens between all words
|
|
10
|
+
* @returns {string} The number in French words
|
|
11
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
12
|
+
* @throws {Error} If value is not a valid number format
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* toCardinal(21) // 'vingt et un'
|
|
16
|
+
* toCardinal(80) // 'quatre-vingts'
|
|
17
|
+
* toCardinal(1000000) // 'un million'
|
|
18
|
+
*/
|
|
19
|
+
export function toCardinal(value: number | string | bigint, options?: {
|
|
20
|
+
withHyphenSeparator?: boolean | undefined;
|
|
21
|
+
}): string;
|
|
22
|
+
/**
|
|
23
|
+
* Converts a numeric value to French ordinal words.
|
|
24
|
+
*
|
|
25
|
+
* French ordinals: premier (1st), then cardinal + ième.
|
|
26
|
+
* Special rules: quatre→quatrième, cinq→cinquième, neuf→neuvième.
|
|
27
|
+
*
|
|
28
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
29
|
+
* @returns {string} The number as ordinal words
|
|
30
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
31
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* toOrdinal(1) // 'premier'
|
|
35
|
+
* toOrdinal(2) // 'deuxième'
|
|
36
|
+
* toOrdinal(4) // 'quatrième'
|
|
37
|
+
* toOrdinal(5) // 'cinquième'
|
|
38
|
+
* toOrdinal(9) // 'neuvième'
|
|
39
|
+
* toOrdinal(21) // 'vingt et unième'
|
|
40
|
+
* toOrdinal(100) // 'centième'
|
|
41
|
+
* toOrdinal(1000) // 'millième'
|
|
42
|
+
*/
|
|
43
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
44
|
+
/**
|
|
45
|
+
* Converts a numeric value to French currency words (Euro).
|
|
46
|
+
*
|
|
47
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
48
|
+
* @param {Object} [options] - Optional configuration
|
|
49
|
+
* @param {boolean} [options.and=true] - Use "et" between euros and centimes
|
|
50
|
+
* @returns {string} The amount in French currency words
|
|
51
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
52
|
+
* @throws {Error} If value is not a valid number format
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* toCurrency(42.50) // 'quarante-deux euros et cinquante centimes'
|
|
56
|
+
* toCurrency(1) // 'un euro'
|
|
57
|
+
* toCurrency(0.99) // 'quatre-vingt-dix-neuf centimes'
|
|
58
|
+
* toCurrency(0.01) // 'un centime'
|
|
59
|
+
* toCurrency(42.50, { and: false }) // 'quarante-deux euros cinquante centimes'
|
|
60
|
+
*/
|
|
61
|
+
export function toCurrency(value: number | string | bigint, options?: {
|
|
62
|
+
and?: boolean | undefined;
|
|
63
|
+
}): string;
|