Releases: jqueguiner/num2words2
Release list
v1.0.18
Automated release built by maturin.
- PyPI carries the slim wheels (~2 MB, no bundled
language-detection models) plus the source distribution. - The full wheels attached here embed the lingua-rs models
(~140 MB) sonum2words_sentence(lang=None)auto-detects
natively. Install one withpip install <asset-url>.
What's Changed
- docs: add comprehensive REFERENCE.md + refresh README by @jqueguiner in #118
- ci: auto-purge camo cache on release so README badges refresh by @jqueguiner in #119
- Port conversion engine to Rust; Python becomes a thin binder by @jqueguiner in #122
- release: use PYPI_API_TOKEN for PyPI publish by @jqueguiner in #123
- Bump version to 1.0.11 by @jqueguiner in #124
- Bump version to 1.0.18 by @jqueguiner in #125
Full Changelog: v1.0.17...v1.0.18
v1.0.17
v1.0.17 — service-specific aviation profiles
Closes the last outstanding bullet of upstream issue savoirfairelinux/num2words#478 — "different variations depending on ICAO, FAA, US Navy, US Army".
What's new
Five named aviation profiles, plus a programmatic profile= constructor argument:
from num2words2 import num2words
num2words(5739, lang='en_Aero_FAA') # 'fife seven tree niner'
num2words(5739, lang='en_Aero_USN') # 'fife seven tree niner'
num2words(5739, lang='en_Aero_US_Navy') # 'fife seven tree niner'
num2words(5739, lang='en_Aero_US_Army') # 'fife seven tree niner'
num2words(5739, lang='en_Aero_NATO') # 'fife seven tree niner'
# Or programmatically:
from num2words2.lang_EN_AERO import Num2Word_EN_AERO
Num2Word_EN_AERO(profile='FAA').to_cardinal(5739)Modern services have all converged on the ICAO digit table (FAA AIM 4-2-9 cites ICAO; STANAG 1059 defers to ICAO; US military adopted ICAO post-1956), so today all five profiles produce identical output. They exist as separate named entry points so:
- Calls can document which standard they target in code, even when the bytes match ICAO.
- Future divergent variants — historical WW2-era US Army/Navy respellings, ITU/IMO maritime, tactical service deviations — can be added by populating their profile tuple without breaking back-compat.
Cumulative state of the aviation feature (v1.0.14 → v1.0.17)
| Release | Scope |
|---|---|
| v1.0.14 | initial en_AERO, common-subset digits |
| v1.0.15 | strict ICAO digit table (wun/too/ait) + canonical en_Aero_ICAO key + BCP 47 alias en-x-aero-icao |
| v1.0.16 | per-context phraseology methods: to_altitude, to_flight_level, to_heading, to_squawk, to_runway, to_frequency |
| v1.0.17 | service-specific profiles + programmatic profile= arg |
The full en_Aero_* family is feature-complete for the ICAO/aviation use case as currently defined.
Bug fix bundled
An earlier draft of #117 placed the new subclasses inside the parent class scope by accident, which silently ended Num2Word_EN_AERO before its methods were defined and broke to_cardinal / to_altitude / etc. (smoke test caught it: ICAO suddenly produced plain-English output instead of digit-by-digit). Subclasses now live at module level after the parent class body. ✓
What's Changed
- feat(en_aero): service-specific profiles (FAA, USN, US_Army, NATO) (#117)
Full Changelog: v1.0.16...v1.0.17
Installation
pip install num2words2==1.0.17
# or AUR:
yay -S python-num2words2Documentation
For the full feature reference (all conversion modes, per-call options, language list, aviation phraseology), see REFERENCE.md.
v1.0.16
What's Changed
- feat(en_aero): aviation context phraseology — altitude, FL, heading, squawk, runway, freq (#116) (a78448c)
Full Changelog: v1.0.15...v1.0.16
Languages Supported
167 language codes registered:
af, am, ar, as, az, ba, ban, be, bg, bm, bn, bo, br, bs, ca, ce, ceb, ckb, cn,
cnh, cs, cy, cz, da, de, dk, dv, el, en, en_AERO, en_Aero_ICAO, en_IN, en_NE,
en_NG, en_NP, en_aero_icao, en_x_aero_icao, eo, es, es_CO, es_CR, es_GT, es_HN,
es_NI, es_VE, et, eu, fa, ff, fi, fil, fo, fr, fr_BE, fr_CH, fr_DZ, gl, gu, ha,
haw, he, hi, hmn, hr, ht, hu, hy, id, is, it, ja, jp, jv, jw, ka, ki, kk, km,
kn, ko, kok, ksw, ku, ky, kz, la, lb, lg, lij, ln, lo, lt, lus, lv, mg, mi,
miz, mk, ml, mn, mr, ms, mt, my, nb, ne, nl, nn, no, oc, om, or, pa, pap, pl,
pli, ps, pt, pt_BR, rm, rm_puter, rm_surmiran, rm_sursilv, rm_sutsilv,
rm_vallader, ro, ru, rw, sa, sd, si, sk, sl, sn, so, sq, sr, sr_Cyrl, sr_Latn,
su, sv, sw, ta, te, tet, tg, th, ti, tk, tl, tr, tt, uk, ur, uz, uz_Cyrl,
uz_cyr, vi, wo, xh, yi, yo, zh, zh_CN, zh_HK, zh_TW, zu
Installation
pip install num2words2==1.0.16Usage
from num2words2 import num2words
print(num2words(42, lang='en'))v1.0.15
What's Changed
Full Changelog: v1.0.14...v1.0.15
Languages Supported
167 language codes registered:
af, am, ar, as, az, ba, ban, be, bg, bm, bn, bo, br, bs, ca, ce, ceb, ckb, cn,
cnh, cs, cy, cz, da, de, dk, dv, el, en, en_AERO, en_Aero_ICAO, en_IN, en_NE,
en_NG, en_NP, en_aero_icao, en_x_aero_icao, eo, es, es_CO, es_CR, es_GT, es_HN,
es_NI, es_VE, et, eu, fa, ff, fi, fil, fo, fr, fr_BE, fr_CH, fr_DZ, gl, gu, ha,
haw, he, hi, hmn, hr, ht, hu, hy, id, is, it, ja, jp, jv, jw, ka, ki, kk, km,
kn, ko, kok, ksw, ku, ky, kz, la, lb, lg, lij, ln, lo, lt, lus, lv, mg, mi,
miz, mk, ml, mn, mr, ms, mt, my, nb, ne, nl, nn, no, oc, om, or, pa, pap, pl,
pli, ps, pt, pt_BR, rm, rm_puter, rm_surmiran, rm_sursilv, rm_sutsilv,
rm_vallader, ro, ru, rw, sa, sd, si, sk, sl, sn, so, sq, sr, sr_Cyrl, sr_Latn,
su, sv, sw, ta, te, tet, tg, th, ti, tk, tl, tr, tt, uk, ur, uz, uz_Cyrl,
uz_cyr, vi, wo, xh, yi, yo, zh, zh_CN, zh_HK, zh_TW, zu
Installation
pip install num2words2==1.0.15Usage
from num2words2 import num2words
print(num2words(42, lang='en'))v1.0.14
What's Changed
Full Changelog: v1.0.13...v1.0.14
Languages Supported
164 language codes registered:
af, am, ar, as, az, ba, ban, be, bg, bm, bn, bo, br, bs, ca, ce, ceb, ckb, cn,
cnh, cs, cy, cz, da, de, dk, dv, el, en, en_AERO, en_IN, en_NE, en_NG, en_NP,
eo, es, es_CO, es_CR, es_GT, es_HN, es_NI, es_VE, et, eu, fa, ff, fi, fil, fo,
fr, fr_BE, fr_CH, fr_DZ, gl, gu, ha, haw, he, hi, hmn, hr, ht, hu, hy, id, is,
it, ja, jp, jv, jw, ka, ki, kk, km, kn, ko, kok, ksw, ku, ky, kz, la, lb, lg,
lij, ln, lo, lt, lus, lv, mg, mi, miz, mk, ml, mn, mr, ms, mt, my, nb, ne, nl,
nn, no, oc, om, or, pa, pap, pl, pli, ps, pt, pt_BR, rm, rm_puter, rm_surmiran,
rm_sursilv, rm_sutsilv, rm_vallader, ro, ru, rw, sa, sd, si, sk, sl, sn, so,
sq, sr, sr_Cyrl, sr_Latn, su, sv, sw, ta, te, tet, tg, th, ti, tk, tl, tr, tt,
uk, ur, uz, uz_Cyrl, uz_cyr, vi, wo, xh, yi, yo, zh, zh_CN, zh_HK, zh_TW, zu
Installation
pip install num2words2==1.0.14Usage
from num2words2 import num2words
print(num2words(42, lang='en'))v1.0.13
What's Changed
Full Changelog: v1.0.12...v1.0.13
Languages Supported
163 language codes registered:
af, am, ar, as, az, ba, ban, be, bg, bm, bn, bo, br, bs, ca, ce, ceb, ckb, cn,
cnh, cs, cy, cz, da, de, dk, dv, el, en, en_IN, en_NE, en_NG, en_NP, eo, es,
es_CO, es_CR, es_GT, es_HN, es_NI, es_VE, et, eu, fa, ff, fi, fil, fo, fr,
fr_BE, fr_CH, fr_DZ, gl, gu, ha, haw, he, hi, hmn, hr, ht, hu, hy, id, is, it,
ja, jp, jv, jw, ka, ki, kk, km, kn, ko, kok, ksw, ku, ky, kz, la, lb, lg, lij,
ln, lo, lt, lus, lv, mg, mi, miz, mk, ml, mn, mr, ms, mt, my, nb, ne, nl, nn,
no, oc, om, or, pa, pap, pl, pli, ps, pt, pt_BR, rm, rm_puter, rm_surmiran,
rm_sursilv, rm_sutsilv, rm_vallader, ro, ru, rw, sa, sd, si, sk, sl, sn, so,
sq, sr, sr_Cyrl, sr_Latn, su, sv, sw, ta, te, tet, tg, th, ti, tk, tl, tr, tt,
uk, ur, uz, uz_Cyrl, uz_cyr, vi, wo, xh, yi, yo, zh, zh_CN, zh_HK, zh_TW, zu
Installation
pip install num2words2==1.0.13Usage
from num2words2 import num2words
print(num2words(42, lang='en'))v1.0.12
What's Changed
Full Changelog: v1.0.11...v1.0.12
Languages Supported
163 language codes registered:
af, am, ar, as, az, ba, ban, be, bg, bm, bn, bo, br, bs, ca, ce, ceb, ckb, cn,
cnh, cs, cy, cz, da, de, dk, dv, el, en, en_IN, en_NE, en_NG, en_NP, eo, es,
es_CO, es_CR, es_GT, es_HN, es_NI, es_VE, et, eu, fa, ff, fi, fil, fo, fr,
fr_BE, fr_CH, fr_DZ, gl, gu, ha, haw, he, hi, hmn, hr, ht, hu, hy, id, is, it,
ja, jp, jv, jw, ka, ki, kk, km, kn, ko, kok, ksw, ku, ky, kz, la, lb, lg, lij,
ln, lo, lt, lus, lv, mg, mi, miz, mk, ml, mn, mr, ms, mt, my, nb, ne, nl, nn,
no, oc, om, or, pa, pap, pl, pli, ps, pt, pt_BR, rm, rm_puter, rm_surmiran,
rm_sursilv, rm_sutsilv, rm_vallader, ro, ru, rw, sa, sd, si, sk, sl, sn, so,
sq, sr, sr_Cyrl, sr_Latn, su, sv, sw, ta, te, tet, tg, th, ti, tk, tl, tr, tt,
uk, ur, uz, uz_Cyrl, uz_cyr, vi, wo, xh, yi, yo, zh, zh_CN, zh_HK, zh_TW, zu
Installation
pip install num2words2==1.0.12Usage
from num2words2 import num2words
print(num2words(42, lang='en'))v1.0.11
What's Changed
Full Changelog: v1.0.10...v1.0.11
Languages Supported
163 language codes registered:
af, am, ar, as, az, ba, ban, be, bg, bm, bn, bo, br, bs, ca, ce, ceb, ckb, cn,
cnh, cs, cy, cz, da, de, dk, dv, el, en, en_IN, en_NE, en_NG, en_NP, eo, es,
es_CO, es_CR, es_GT, es_HN, es_NI, es_VE, et, eu, fa, ff, fi, fil, fo, fr,
fr_BE, fr_CH, fr_DZ, gl, gu, ha, haw, he, hi, hmn, hr, ht, hu, hy, id, is, it,
ja, jp, jv, jw, ka, ki, kk, km, kn, ko, kok, ksw, ku, ky, kz, la, lb, lg, lij,
ln, lo, lt, lus, lv, mg, mi, miz, mk, ml, mn, mr, ms, mt, my, nb, ne, nl, nn,
no, oc, om, or, pa, pap, pl, pli, ps, pt, pt_BR, rm, rm_puter, rm_surmiran,
rm_sursilv, rm_sutsilv, rm_vallader, ro, ru, rw, sa, sd, si, sk, sl, sn, so,
sq, sr, sr_Cyrl, sr_Latn, su, sv, sw, ta, te, tet, tg, th, ti, tk, tl, tr, tt,
uk, ur, uz, uz_Cyrl, uz_cyr, vi, wo, xh, yi, yo, zh, zh_CN, zh_HK, zh_TW, zu
Installation
pip install num2words2==1.0.11Usage
from num2words2 import num2words
print(num2words(42, lang='en'))v1.0.10
What's Changed
- fix(base): preserve Decimal precision through to_cardinal_float (savoirfairelinux#603) (#110) (c360558)
- fix(aur): preserve trailing newline + strip CRLF in SSH key (#109) (6f8a346)
Full Changelog: v1.0.9...v1.0.10
Languages Supported
163 language codes registered:
af, am, ar, as, az, ba, ban, be, bg, bm, bn, bo, br, bs, ca, ce, ceb, ckb, cn,
cnh, cs, cy, cz, da, de, dk, dv, el, en, en_IN, en_NE, en_NG, en_NP, eo, es,
es_CO, es_CR, es_GT, es_HN, es_NI, es_VE, et, eu, fa, ff, fi, fil, fo, fr,
fr_BE, fr_CH, fr_DZ, gl, gu, ha, haw, he, hi, hmn, hr, ht, hu, hy, id, is, it,
ja, jp, jv, jw, ka, ki, kk, km, kn, ko, kok, ksw, ku, ky, kz, la, lb, lg, lij,
ln, lo, lt, lus, lv, mg, mi, miz, mk, ml, mn, mr, ms, mt, my, nb, ne, nl, nn,
no, oc, om, or, pa, pap, pl, pli, ps, pt, pt_BR, rm, rm_puter, rm_surmiran,
rm_sursilv, rm_sutsilv, rm_vallader, ro, ru, rw, sa, sd, si, sk, sl, sn, so,
sq, sr, sr_Cyrl, sr_Latn, su, sv, sw, ta, te, tet, tg, th, ti, tk, tl, tr, tt,
uk, ur, uz, uz_Cyrl, uz_cyr, vi, wo, xh, yi, yo, zh, zh_CN, zh_HK, zh_TW, zu
Installation
pip install num2words2==1.0.10Usage
from num2words2 import num2words
print(num2words(42, lang='en'))v1.0.9
What's Changed
- fix(tests): correct stale Arabic e2e expected output (#108) (4411f1b)
- ci(aur): replace KSXGitHub action with direct git commands (#107) (113a39b)
- test: align stale fr/ca currency expectations with v1.0.4-1.0.5 fixes (#106) (b17e6a1)
Full Changelog: v1.0.8...v1.0.9
Languages Supported
163 language codes registered:
af, am, ar, as, az, ba, ban, be, bg, bm, bn, bo, br, bs, ca, ce, ceb, ckb, cn,
cnh, cs, cy, cz, da, de, dk, dv, el, en, en_IN, en_NE, en_NG, en_NP, eo, es,
es_CO, es_CR, es_GT, es_HN, es_NI, es_VE, et, eu, fa, ff, fi, fil, fo, fr,
fr_BE, fr_CH, fr_DZ, gl, gu, ha, haw, he, hi, hmn, hr, ht, hu, hy, id, is, it,
ja, jp, jv, jw, ka, ki, kk, km, kn, ko, kok, ksw, ku, ky, kz, la, lb, lg, lij,
ln, lo, lt, lus, lv, mg, mi, miz, mk, ml, mn, mr, ms, mt, my, nb, ne, nl, nn,
no, oc, om, or, pa, pap, pl, pli, ps, pt, pt_BR, rm, rm_puter, rm_surmiran,
rm_sursilv, rm_sutsilv, rm_vallader, ro, ru, rw, sa, sd, si, sk, sl, sn, so,
sq, sr, sr_Cyrl, sr_Latn, su, sv, sw, ta, te, tet, tg, th, ti, tk, tl, tr, tt,
uk, ur, uz, uz_Cyrl, uz_cyr, vi, wo, xh, yi, yo, zh, zh_CN, zh_HK, zh_TW, zu
Installation
pip install num2words2==1.0.9Usage
from num2words2 import num2words
print(num2words(42, lang='en'))