python-intl
A small library using PyICU to provide a Python
API similar to what the Intl JavaScript API
provides. It is not meant to fully behave the same, but instead be close enough so
the "same" code works on JavaScript and Python, with similar results.
Status: This is very much work in progress. Currently only Intl.DateTimeFormat
exists and this also is not complete yet.
Note: There are a lot of tests running the Python implementation against the JavaScript one and comparing the results. In general things should be pretty stable there. Still there are some cases with known differences. Also note that results depend on the ICU version you have installed on your machine.
General notes about the Python adaption
All names will be using the Python style rules. This means instead of
formatToParts a method will be called format_to_parts. Also a dictionary
key like dayPeriod will be named day_period. Python uses snake case, let's
stick to this.
Instead of passing around undefined objects like in JavaScript we want to use
well defined and typed dataclasses. This for example is true for the
Intl.DateTimeFormat format options, you can use DateTimeFormatOptions as
a clean representation of those. Using a dictionary (which behaves the most
like those JavaScript objects) is still fine and will automatically converted,
as seen in the examples here.
Many objects like for example the DateTimeFormatOptions provide methods to
convert their Python representation to a JavaScript compatible JSON format
by returning a dict using the JavaScript naming. You can use the to_json
method for this.
For example:
import python_intl as Intl
Intl.DateTimeFormatOptions(time_zone_name="short_offset").to_json()
# Will return: {'timeZoneName': 'shortOffset'}
Available Intl classes
Intl.DateTimeFormat
Example usage
import datetime as dt
import python_intl as Intl
datetime = dt.datetime(2026, 8, 15)
formatter = Intl.DateTimeFormat("de-DE", {"year": "numeric", "month": "2-digit", "day": "2-digit"})
formatter.format(datetime) # Will output the German format: "15.08.2026"
datetime_till = dt.datetime(2026, 9, 7)
formatter.format_range(datetime, datetime_till) # Will output the German format: "15.08. – 07.09.2026"
Compatibility
| Method | Status | Python name |
|---|---|---|
DateTimeFormat.format |
✅ | |
DateTimeFormat.formatToParts |
✅ | DateTimeFormat.format_to_parts |
DateTimeFormat.supportedLocalesOf |
❌ | |
DateTimeFormat.formatRange |
✅ | DateTimeFormat.format_range |
DateTimeFormat.formatRangeToParts |
❌ | |
DateTimeFormat.resolvedOptions |
❌ |
Installation
Be sure to be able to install PyICU, see the installation docs there:
https://gitlab.pyicu.org/main/pyicu#installing-pyicu
Hint: I mainly did run into issues with pkg-config not finding the ICU library,
setting PKG_CONFIG_PATH accordingly helps most of the time I guess.
When this is done you should be able to install python-intl using any package
manager, like pip install python-intl or uv add python-intl.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_intl-0.4.0.tar.gz.
File metadata
- Download URL: python_intl-0.4.0.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fdec76f0331d3d7c32ab860338c72936a48715583cd0f3ca854f82d5a0b6756
|
|
| MD5 |
857d78aa879255714b292fb37e7682c4
|
|
| BLAKE2b-256 |
d8ea053ac95e6fc5add94bd37ddf9b734102753c2ba0e00e83a03ea724cb26be
|
File details
Details for the file python_intl-0.4.0-py3-none-any.whl.
File metadata
- Download URL: python_intl-0.4.0-py3-none-any.whl
- Upload date:
- Size: 7.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff7236a2c91bb4ab6ff8fa3702370eecc476b2f8f785b0d862d97bc2dcb613a6
|
|
| MD5 |
feed6e58d13ca062f017cec458ba0ac3
|
|
| BLAKE2b-256 |
e028dc32c07ff604927e3797ebc0652156cb0c5c1a2398981bff813cfd5c7925
|