You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jan 12, 2026. It is now read-only.
Happy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.
Thank you to all contributors, new and old,
and here's to another great year of internationalization and localization!
Features
* CLDR: Babel now uses CLDR 46, by @​tomasr8 in :gh:`1145`
* Dates: Allow specifying an explicit format in parse_date/parse_time by @​tomasr8 in :gh:`1131`
* Dates: More alternate characters are now supported by `format_skeleton`. By @​tomasr8 in :gh:`1122`
* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @​akx in :gh:`1163`
* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @​Dunedan in :gh:`1105`, and @​tomasr8 in :gh:`1120`
* Messages: Initial support for `Message.python_brace_format`, by @​tomasr8 in :gh:`1169`
* Numbers: LC_MONETARY is now preferred when formatting currencies, by @​akx in :gh:`1173`
Bugfixes
Dates: Make seconds optional in parse_time time formats by @tomasr8 in :gh:1141
Dates: Replace str.index with str.find by @tomasr8 in :gh:1130
Dates: Strip extra leading slashes in /etc/localtime by @akx in :gh:1165
Dates: Week numbering and formatting of dates with week numbers was repaired by @jun66j5 in :gh:1179
General: Improve handling for locale=None by @akx in :gh:1164
General: Remove redundant assignment in Catalog.__setitem__ by @tomasr8 in :gh:1167
Messages: Fix extracted lineno with nested calls, by @dylankiss in :gh:1126
Messages: Fix of list index out of range when translations is empty, by @gabe-sherman in :gh:1135
Messages: Fix the way obsolete messages are stored by @tomasr8 in :gh:1132
Messages: Simplify read_mo logic regarding catalog.charset by @tomasr8 in :gh:1148
Messages: Use the first matching method & options, rather than first matching method & last options, by @jpmckinney in :gh:1121
Deprecation and compatibility
* Dates: Fix deprecation warnings for `datetime.utcnow()` by @​tomasr8 in :gh:`1119`
* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @​hrnciar in :gh:`1155`
* General: Import `Literal` from the typing module by @​tomasr8 in :gh:`1175`
* General: Replace `OrderedDict` with just `dict` by @​tomasr8 in :gh:`1149`
* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @​akx in :gh:`1140`
Infrastructure
~~~~~~~~~~~~~~
* Add tzdata as dev dependency and sync with tox.ini by @​wandrew004 in :gh:`1159`
* Duplicate test code was deleted by @​mattdiaz007 in :gh:`1138`
* Increase test coverage of the `python_format` checker by @​tomasr8 in :gh:`1176`
* Small cleanups by @​akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`
* Update CI to use python 3.13 and Ubuntu 24.04 by @​tomasr8 in :gh:`1153`
Version 2.16.0
--------------
Features
~~~~~~~~
* CLDR: Upgrade to CLDR 45 by @​tomasr8 in :gh:`1077`
* Lists: Support list format fallbacks by @​akx in :gh:`1099`
* Messages: Initial support for reading mapping configuration as TOML by @​akx in :gh:`1108`
Bugfixes
~~~~~~~~
* CLDR: Do not allow substituting alternates or drafts in derived locales by @​akx in :gh:`1113`
* Core: Allow falling back to modifier-less locale data by @​akx in :gh:`1104`
* Core: Allow use of importlib.metadata for finding entrypoints by @​akx in :gh:`1102`
* Dates: Avoid crashing on importing localtime when TZ is malformed by @​akx in :gh:`1100`
* Messages: Allow parsing .po files that have an extant but empty Language header by @​akx in :gh:`1101`
* Messages: Fix ``--ignore-dirs`` being incorrectly read (#​1094) by @​john-psina and @​Edwin18 in :gh:`1052` and :gh:`1095`
* Messages: Make pgettext search plurals when translation is not found by @​tomasr8 in :gh:`1085`
Infrastructure
~~~~~~~~~~~~~~
* Replace deprecated `ast.Str` with `ast.Constant` by @​tomasr8 in :gh:`1083`
* CI fixes by @​akx in :gh:`1080`, :gh:`1097`, :gh:`1103`, :gh:`1107`
* Test on Python 3.13 beta releases by @​akx in
* Normalize package name to lower-case in setup.py by @​akx in :gh:`1110`
Documentation
~~~~~~~~~~~~~
* Add a mention to the docs that `format_skeleton(..., fuzzy=True)` may raise by @​tomasr8 in :gh:`1106`
* Two hyperlinks (to CLDR) and some typos by @​buhtz in :gh:`1115`
Version 2.15.0
--------------
Python version support
~~~~~~~~~~~~~~~~~~~~~~
* Babel 2.15.0 will require Python 3.8 or newer. (:gh:`1048`)
Features
~~~~~~~~
* CLDR: Upgrade to CLDR 44 (:gh:`1071`) (@​akx)
* Dates: Support for the "fall back to short format" logic for time delta formatting (:gh:`1075`) (@​akx)
* Message: More versatile .po IO functions (:gh:`1068`) (@​akx)
* Numbers: Improved support for alternate spaces when parsing numbers (:gh:`1007`) (@​ronnix's first contribution)
Infrastructure
~~~~~~~~~~~~~~
* Upgrade GitHub Actions (:gh:`1054`) (@​cclauss's first contribution)
* The Unicode license is now included in `locale-data` and in the documentation (:gh:`1074`) (@​akx)
Version 2.14.0
--------------
Upcoming deprecation
~~~~~~~~~~~~~~~~~~~~
* This version, Babel 2.14, is the last version of Babel to support Python 3.7.
Babel 2.15 will require Python 3.8 or newer.
* We had previously announced Babel 2.13 to have been the last version to support
Python 3.7, but being able to use CLDR 43 with Python 3.7 was deemed important
enough to keep supporting the EOL Python version for one more release.
Possibly backwards incompatible changes
Locale.number_symbols will now have first-level keys for each numbering system.
Since the implicit default numbering system still is "latn", what had previously
been e.g. Locale.number_symbols['decimal'] is now Locale.number_symbols['latn']['decimal'].
Babel no longer directly depends on either distutils or setuptools; if you had been
using the Babel setuptools command extensions, you would need to explicitly depend on setuptools –
though given you're running setup.py you probably already do.
Features
* CLDR/Numbers: Add support of local numbering systems for number symbols by @​kajte in :gh:`1036`
* CLDR: Upgrade to CLDR 43 by @​rix0rrr in :gh:`1043`
* Frontend: Allow last_translator to be passed as an option to extract_message by @​AivGitHub in :gh:`1044`
* Frontend: Decouple `pybabel` CLI frontend from distutils/setuptools by @​akx in :gh:`1041`
* Numbers: Improve parsing of malformed decimals by @​Olunusib and @​akx in :gh:`1042`
Infrastructure
Enforce trailing commas (enable Ruff COM rule and autofix) by @akx in :gh:1045
CI: use GitHub output formats by @akx in :gh:1046
* CLDR: Upgrade to CLDR 45 by @​tomasr8 in :gh:`1077`
* Lists: Support list format fallbacks by @​akx in :gh:`1099`
* Messages: Initial support for reading mapping configuration as TOML by @​akx in :gh:`1108`
Bugfixes
CLDR: Do not allow substituting alternates or drafts in derived locales by @akx in :gh:1113
Core: Allow falling back to modifier-less locale data by @akx in :gh:1104
Core: Allow use of importlib.metadata for finding entrypoints by @akx in :gh:1102
Dates: Avoid crashing on importing localtime when TZ is malformed by @akx in :gh:1100
Messages: Allow parsing .po files that have an extant but empty Language header by @akx in :gh:1101
Messages: Fix --ignore-dirs being incorrectly read (#1094) by @john-psina and @Edwin18 in :gh:1052 and :gh:1095
Messages: Make pgettext search plurals when translation is not found by @tomasr8 in :gh:1085
Infrastructure
* Replace deprecated `ast.Str` with `ast.Constant` by @​tomasr8 in :gh:`1083`
* CI fixes by @​akx in :gh:`1080`, :gh:`1097`, :gh:`1103`, :gh:`1107`
* Test on Python 3.13 beta releases by @​akx in
* Normalize package name to lower-case in setup.py by @​akx in :gh:`1110`
Documentation
~~~~~~~~~~~~~
* Add a mention to the docs that `format_skeleton(..., fuzzy=True)` may raise by @​tomasr8 in :gh:`1106`
* Two hyperlinks (to CLDR) and some typos by @​buhtz in :gh:`1115`
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
If you want to rebase/retry this PR, check this box
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
None yet
0 participants
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==2.15.0→==2.17.0Release Notes
python-babel/babel (Babel)
v2.17.0Compare Source
Happy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.
Thank you to all contributors, new and old,
and here's to another great year of internationalization and localization!
Features
parse_timetime formats by @tomasr8 in :gh:1141str.indexwithstr.findby @tomasr8 in :gh:1130/etc/localtimeby @akx in :gh:11651179locale=Noneby @akx in :gh:1164Catalog.__setitem__by @tomasr8 in :gh:1167112611351132read_mologic regardingcatalog.charsetby @tomasr8 in :gh:11481121Deprecation and compatibility
Locale.number_symbolswill now have first-level keys for each numbering system.Since the implicit default numbering system still is
"latn", what had previouslybeen e.g.
Locale.number_symbols['decimal']is nowLocale.number_symbols['latn']['decimal'].distutilsorsetuptools; if you had beenusing the Babel setuptools command extensions, you would need to explicitly depend on
setuptools–though given you're running
setup.pyyou probably already do.Features
10451046v2.16.0Compare Source
Features
11131104110211001101--ignore-dirsbeing incorrectly read (#1094) by @john-psina and @Edwin18 in :gh:1052and :gh:10951085Infrastructure
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.