Unicode RBNF
A pure Python implementation of rule based number formatting (RBNF) using the Unicode Common Locale Data Repository (CLDR).
This lets you spell out numbers for a large number of locales:
from unicode_rbnf import RbnfEngine
engine = RbnfEngine.for_language("en")
assert engine.format_number(1234).text == "one thousand two hundred thirty-four"
Different formatting purposes are supported as well, depending on the locale:
from unicode_rbnf import RbnfEngine, FormatPurpose
engine = RbnfEngine.for_language("en")
assert engine.format_number(1999, FormatPurpose.CARDINAL).text == "one thousand nine hundred ninety-nine"
assert engine.format_number(1999, FormatPurpose.YEAR).text == "nineteen ninety-nine"
assert engine.format_number(11, FormatPurpose.ORDINAL).text == "eleventh"
For locales with multiple genders, cases, etc., the different texts are accessible in the result of format_number:
from unicode_rbnf import RbnfEngine
engine = RbnfEngine.for_language("de")
print(engine.format_number(1))
Result:
FormatResult(
text='eins',
text_by_ruleset={
'spellout-numbering': 'eins',
'spellout-cardinal-neuter': 'ein',
'spellout-cardinal-masculine': 'ein',
'spellout-cardinal-feminine': 'eine',
'spellout-cardinal-n': 'einen',
'spellout-cardinal-r': 'einer',
'spellout-cardinal-s': 'eines',
'spellout-cardinal-m': 'einem'
}
)
The text property of the result holds the text of the ruleset with the shortest name (least specific).
Supported locales
See: https://github.com/unicode-org/cldr/tree/release-44/common/rbnf
Engine implementation
Not all features of the RBNF engine are implemented. The following features are available:
- Literal text (
hundred) - Quotient substitution (
<<or←←) - Reminder substitution (
>>or→→) - Optional substitution (
[...]) - Rule substituton (
←%ruleset_name←) - Rule replacement (
=%ruleset_name=) - Special rules:
- Negative numbers (
-x) - Improper fractions (
x.x) - Not a number (
NaN) - Infinity (
Inf)
- Negative numbers (
Some features that will need to be added eventually:
- Proper fraction rules (
0.x) - Preceding reminder substitution (
>>>or→→→) - Number format strings (
==) - Decimal format patterns (
#,##0.00) - Plural replacements (
$(ordinal,one{st}...))
Metadata
Release files for unicode-rbnf 2.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| unicode_rbnf-2.4.1.tar.gz | 98.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unicode_rbnf-2.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 248.8 kB
Release files / unicode_rbnf-2.4.1.tar.gz
| Download URL | unicode_rbnf-2.4.1.tar.gz |
|---|---|
| Size | 98.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
17621d76cb9dd22eac493f667317b8563820b3d674374af130017ab281ca8648
|
|
BLAKE2b-256 checksum How to use checksums |
a697ee2a969ddfd3988a11b5e026060dffb60f59e99c9906cff0ffe3384b9345
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency logRelease files / unicode_rbnf-2.4.1-py3-none-any.whl
| Download URL | unicode_rbnf-2.4.1-py3-none-any.whl |
|---|---|
| Size | 150.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
545a10c40316b49a6f14a1470e51a217c75438569c352abdbc5da11fef273498
|
|
BLAKE2b-256 checksum How to use checksums |
e5f7a19bcc91afc3155023c906c85321e456f67936feab151ef808cc5b8ebfe2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency log