NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #260 most downloaded on PyPI
Internationalization utilities
Last release 8 months ago
01 Feb 2026
Ships fairly regularly
a new release about every 5 months
Nearly every release is documented
notes for 45 of 46 stable releases
Nothing withdrawn
no release was ever pulled
16 years old
46 releases · first in 2011
Happy 2026! Like last year's release (ahem...), this one too is being made from FOSDEM 2026, in Brussels, Belgium. 🇧🇪 We'll aspire for a less glacial
Happy 2026! Like last year's release (ahem...), this one too is being made from FOSDEM 2026, in Brussels, Belgium. 🇧🇪
We'll aspire for a less glacial release cycle for 2.19. 😁
Please see CHANGELOG.rst for the detailed change log.
Full Changelog: v2.17.0...v2.18.0
Happy 2026! This release is, coincidentally, also being made from FOSDEM.
We will aspire for a slightly less glacial release cadence in this year; there are interesting features in the pipeline.
Core: Add babel.core.get_cldr_version() by @akx in 1242
Core: Use CLDR 47 by @tomasr8 in 1210
Core: Use canonical IANA zone names in zone_territories by @akx in 1220
Messages: Improve extract performance via ignoring directories early during os.walk by @akx in 968
Messages: Merge in per-format keywords and auto_comments by @akx in 1243
Messages: Update keywords for extraction of dpgettext and dnpgettext by @mardiros in 1235
Messages: Validate all plurals in Python format checker by @tomasr8 in 1188
Time: Use standard library timezone instead of FixedOffsetTimezone by @akx in 1203
Core: Fix formatting for "Empty locale identifier" exception added in #1164 by @akx in 1184
Core: Improve handling of no-inheritance-marker in timezone data by @akx in 1194
Core: Make the number pattern regular expression more efficient by @akx in 1213
Messages: Keep translator comments next to the translation function call by @akx in 1196
Numbers: Fix KeyError that occurred when formatting compact currencies of exactly one thousand in several locales by @bartbroere in 1246
Core: Avoid unnecessary uses of map() by @akx in 1180
Messages: Have init-catalog create directories too by @akx in 1244
Messages: Optimizations for read_po by @akx in 1200
Messages: Use pathlib.Path() in catalog frontend; improve test coverage by @akx in 1204
CI: Renovate CI & lint tools by @akx in 1228
CI: Tighten up CI with Zizmor by @akx in 1230
CI: make job permissions explicit by @akx in 1227
Docs: Add SECURITY.md by @akx in 1229
Docs: Remove u string prefix from docs by @verhovsky in 1174
Docs: Update dates.rst with current unicode.org tr35 link by @clach04 in 1189
General: Add some PyPI classifiers by @tomasr8 in 1186
General: Apply reformatting by hand and with Ruff by @akx in 1202
General: Test on and declare support for Python 3.14 by @akx in 1233
Tests: Convert Unittest testcases with setup/teardown to fixtures by @akx in 1240
Tests: Mark PyPy CI flake as xfail by @akx in 1197
Tests: Move pytest config to pyproject.toml by @tomasr8 in 1187
Tests: Unwrap most unittest test cases to bare functions by @akx in 1241
One column per quarter.
Fix deprecation warnings for datetime.utcnow() by @tomasr8 in #1119
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!
The changelog below is auto-generated by GitHub.
Please see CHANGELOG.rst for additional details.
datetime.utcnow() by @tomasr8 in #1119str.index with str.find by @tomasr8 in #1130format_skeleton by @tomasr8 in #1122parse_time time formats by @tomasr8 in #1141wraptext deprecated; use TextWrapper directly in write_po by @akx in #1140OrderedDict with just dict by @tomasr8 in #1149read_mo logic regarding catalog.charset by @tomasr8 in #1148add_direction by @akx in #1163locale=None by @akx in #1164pytest.raises(match=...) by @akx in #1166/etc/localtime by @akx in #1165Catalog.__setitem__ by @tomasr8 in #1167Message.python_brace_format by @tomasr8 in #1169Literal from the typing module by @tomasr8 in #1175Y, w and W symbols for week-numbering by @jun66j5 in #1179python_format checker by @tomasr8 in #1176Full Changelog: v2.16.0...v2.17.0
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!
CLDR: Babel now uses CLDR 46, by @tomasr8 in 1145
Dates: Allow specifying an explicit format in parse_date/parse_time by @tomasr8 in 1131
Dates: More alternate characters are now supported by format_skeleton. By @tomasr8 in 1122
Dates: Support short and narrow formats for format_timedelta when using add_direction, by @akx in 1163
Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @Dunedan in 1105, and @tomasr8 in 1120
Messages: Initial support for Message.python_brace_format, by @tomasr8 in 1169
Numbers: LC_MONETARY is now preferred when formatting currencies, by @akx in 1173
Dates: Make seconds optional in parse_time time formats by @tomasr8 in 1141
Dates: Replace str.index with str.find by @tomasr8 in 1130
Dates: Strip extra leading slashes in /etc/localtime by @akx in 1165
Dates: Week numbering and formatting of dates with week numbers was repaired by @jun66j5 in 1179
General: Improve handling for locale=None by @akx in 1164
General: Remove redundant assignment in Catalog.__setitem__ by @tomasr8 in 1167
Messages: Fix extracted lineno with nested calls, by @dylankiss in 1126
Messages: Fix of list index out of range when translations is empty, by @gabe-sherman in 1135
Messages: Fix the way obsolete messages are stored by @tomasr8 in 1132
Messages: Simplify read_mo logic regarding catalog.charset by @tomasr8 in 1148
Messages: Use the first matching method & options, rather than first matching method & last options, by @jpmckinney in 1121
Dates: Fix deprecation warnings for datetime.utcnow() by @tomasr8 in 1119
Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @hrnciar in 1155
General: Import Literal from the typing module by @tomasr8 in 1175
General: Replace OrderedDict with just dict by @tomasr8 in 1149
Messages: Mark wraptext deprecated; use TextWrapper directly in write_po by @akx in 1140
Add tzdata as dev dependency and sync with tox.ini by @wandrew004 in 1159
Duplicate test code was deleted by @mattdiaz007 in 1138
Increase test coverage of the python_format checker by @tomasr8 in 1176
Small cleanups by @akx in 1160, 1166, 1170 and 1172
Update CI to use python 3.13 and Ubuntu 24.04 by @tomasr8 in 1153
Upgrade GitHub Actions versions to avoid deprecation warnings by @akx in https://github.com/python-babel/babel/pull/1080
The changelog below is auto-generated by GitHub.
Please see CHANGELOG.rst for additional details.
ast.Str with ast.Constant by @tomasr8 in https://github.com/python-babel/babel/pull/1083format_skeleton(..., fuzzy=True) may raise by @tomasr8 in https://github.com/python-babel/babel/pull/1106Full Changelog: https://github.com/python-babel/babel/compare/v2.15.0...v2.16.0
The changelog below is auto-generated by GitHub.
Please see CHANGELOG.rst for additional details.
ast.Str with ast.Constant by @tomasr8 in #1083format_skeleton(..., fuzzy=True) may raise by @tomasr8 in #1106Full Changelog: v2.15.0...v2.16.0
CLDR: Upgrade to CLDR 45 by @tomasr8 in 1077
Lists: Support list format fallbacks by @akx in 1099
Messages: Initial support for reading mapping configuration as TOML by @akx in 1108
CLDR: Do not allow substituting alternates or drafts in derived locales by @akx in 1113
Core: Allow falling back to modifier-less locale data by @akx in 1104
Core: Allow use of importlib.metadata for finding entrypoints by @akx in 1102
Dates: Avoid crashing on importing localtime when TZ is malformed by @akx in 1100
Messages: Allow parsing .po files that have an extant but empty Language header by @akx in 1101
Messages: Fix --ignore-dirs being incorrectly read (#1094) by @john-psina and @Edwin18 in 1052 and 1095
Messages: Make pgettext search plurals when translation is not found by @tomasr8 in 1085
Replace deprecated ast.Str with ast.Constant by @tomasr8 in 1083
CI fixes by @akx in 1080, 1097, 1103, 1107
Test on Python 3.13 beta releases by @akx in
Normalize package name to lower-case in setup.py by @akx in 1110
Add a mention to the docs that format_skeleton(..., fuzzy=True) may raise by @tomasr8 in 1106
Two hyperlinks (to CLDR) and some typos by @buhtz in 1115
The changelog below is auto-generated by GitHub.
The changelog below is auto-generated by GitHub.
The binary artifacts attached to this GitHub release were generated by the GitHub Actions workflow.
Please see CHANGELOG.rst for additional details.
locale-data and in documentation by @akx in #1074Full Changelog: v2.14.0...v2.15.0
Babel 2.15.0 will require Python 3.8 or newer. (1048)
CLDR: Upgrade to CLDR 44 (1071) (@akx)
Dates: Support for the "fall back to short format" logic for time delta formatting (1075) (@akx)
Message: More versatile .po IO functions (1068) (@akx)
Numbers: Improved support for alternate spaces when parsing numbers (1007) (@ronnix's first contribution)
Upgrade GitHub Actions (1054) (@cclauss's first contribution)
The Unicode license is now included in locale-data and in the documentation (1074) (@akx)
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
The changelog below is auto-generated by GitHub.
Please see CHANGELOG.rst for additional details.
pybabel frontend from distutils/setuptools; remove dependency by @akx in https://github.com/python-babel/babel/pull/1041Full Changelog: https://github.com/python-babel/babel/compare/v2.13.1...v2.14.0
The changelog below is auto-generated by GitHub.
Please see CHANGELOG.rst for additional details.
pybabel frontend from distutils/setuptools; remove dependency by @akx in #1041Full Changelog: v2.13.1...v2.14.0
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.
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.
CLDR/Numbers: Add support of local numbering systems for number symbols by @kajte in 1036
CLDR: Upgrade to CLDR 43 by @rix0rrr in 1043
Frontend: Allow last_translator to be passed as an option to extract_message by @AivGitHub in 1044
Frontend: Decouple pybabel CLI frontend from distutils/setuptools by @akx in 1041
Numbers: Improve parsing of malformed decimals by @Olunusib and @akx in 1042
Enforce trailing commas (enable Ruff COM rule and autofix) by @akx in 1045
CI: use GitHub output formats by @akx in 1046
Depend on setuptools since Python 3.12 by @oprypin in https://github.com/python-babel/babel/pull/1033
Full Changelog: https://github.com/python-babel/babel/compare/v2.13.0...v2.13.1
PyPI: https://pypi.org/project/Babel/2.13.1/
Full Changelog: v2.13.0...v2.13.1
This is a patch release to fix a few bugs.
Fix a typo in _locales_to_names by @Dl84 in 1038 (issue 1037)
Fix setuptools dependency for Python 3.12 by @opryprin in 1033
PyPI: https://pypi.org/project/Babel/2.13.0/
PyPI: https://pypi.org/project/Babel/2.13.0/
(This changelog is auto-generated by GitHub; please see CHANGES.rst for a less verbose listing.)
Locale.parse() does not accept None by @akx in #978babel.support.Translations.load by @akx in #983Full Changelog: v2.12.1...v2.13.0
It was previously announced that this version, Babel 2.13, would be the last version of Babel to support Python 3.7. Babel 2.14 will still support Python 3.7.
Add flag to ignore POT-Creation-Date for updates by @joeportela in 999
Support 't' specifier in keywords by @jeanas in 1015
Add f-string parsing for Python 3.12 (PEP 701) by @encukou in 1027
Various typing-related fixes by @akx in 979, in 978, 981, 983
babel.messages.catalog: deduplicate _to_fuzzy_match_key logic by @akx in 980
Freeze format_time() tests to a specific date to fix test failures by @mgorny in 998
Spelling and grammar fixes by @scop in 1008
Renovate lint tools by @akx in 1017, 1028
Use SPDX license identifier by @vargenau in 994
Use aware UTC datetimes internally by @scop in 1009
@mgorny made their first contribution in 998
@vargenau made their first contribution in 994
@joeportela made their first contribution in 999
@encukou made their first contribution in 1027
Tiny packaging bugfix: py.typed wasn't included.
Tiny packaging bugfix: py.typed wasn't included.
py.typed file in wheels by @AlexWaygood in #975Full Changelog: v2.12.0...v2.12.1
Version 2.12.0 was missing the py.typed marker file. Thanks to Alex Waygood for the fix! 975
The copyright year in all files was bumped to 2023.
PyPI: https://pypi.org/project/Babel/2.12.0/
The below release notes are auto-generated; please see CHANGES.rst for a human-crafted one.
Thank you to all contributors!
Format.compact_decimal utility by @DenverCoder1 in https://github.com/python-babel/babel/pull/921long check by @akx in https://github.com/python-babel/babel/pull/925exc in babel.dates by @akx in https://github.com/python-babel/babel/pull/959Full Changelog: https://github.com/python-babel/babel/compare/v2.11.0...v2.12.0
The below release notes are auto-generated; please see CHANGES.rst for a human-crafted one.
Thank you to all contributors!
Format.compact_decimal utility by @DenverCoder1 in #921long check by @akx in #925exc in babel.dates by @akx in #959Full Changelog: v2.11.0...v2.12.0
Python 3.6 is no longer supported (919) - Aarni Koskela
The get_next_timezone_transition function is no more (958) - Aarni Koskela
Locale.parse() will no longer return None; it will always return a Locale or raise an exception. Passing in None, though technically allowed by the typing, will raise. (966)
CLDR: Babel now uses CLDR 42 (951) - Aarni Koskela
Dates: pytz is now optional; Babel will prefer it but will use zoneinfo when available. (940) - @ds-cbo
General: Babel now ships type annotations, thanks to Jonah Lawrence's work in multiple PRs.
Locales: @modifiers are now retained when parsing locales (947) - martin f. krafft
Messages: JavaScript template string expression extraction is now smarter. (939) - Johannes Wilm
Numbers: NaN and Infinity are now better supported (955) - Jonah Lawrence
Numbers: Short compact currency formats are now supported (926) - Jonah Lawrence
Numbers: There's now a Format.compact_decimal utility function. (921) - Jonah Lawrence
Dates: The cache for parsed datetime patterns is now bounded (967) - Aarni Koskela
Messages: Fuzzy candidate matching accuracy is improved (970) - Jean Abou Samra
Numbers: Compact singular formats and patterns with no numbers work correctly (930, 932) - Jonah Lawrence, Jun Omae
Dates: babel.dates.UTC is now an alias for datetime.timezone.utc (957) - Aarni Koskela
Dates: babel.localtime was slightly cleaned up. (952) - Aarni Koskela
Documentation: Documentation was improved by Maciej Olko, Jonah Lawrence, lilinjie, and Aarni Koskela.
Infrastructure: Babel is now being linted with pre-commit and ruff. - Aarni Koskela
The below release notes are auto-generated; please see CHANGES.rst for a human-crafted one.
The below release notes are auto-generated; please see CHANGES.rst for a human-crafted one.
Thank you to all contributors!
__nonzero__ methods by @sobolevn in https://github.com/python-babel/babel/pull/896__unicode__ declarations by @lukasjuhrich in https://github.com/python-babel/babel/pull/905ast instead of eval for string extraction by @akx in https://github.com/python-babel/babel/pull/915Full Changelog: https://github.com/python-babel/babel/compare/v2.10.3...v2.11.0
The below release notes are auto-generated; please see CHANGES.rst for a human-crafted one.
Thank you to all contributors!
__nonzero__ methods by @sobolevn in #896__unicode__ declarations by @lukasjuhrich in #905ast instead of eval for string extraction by @akx in #915Full Changelog: v2.10.3...v2.11.0
This version, Babel 2.11, is the last version of Babel to support Python 3.6. Babel 2.12 will require Python 3.7 or newer.
Support for hex escapes in JavaScript string literals 877 - Przemyslaw Wegrzyn
Add support for formatting decimals in compact form 909 - Jonah Lawrence
Adapt parse_date to handle ISO dates in ASCII format 842 - Eric L.
This also enables extraction from static f-strings. F-strings with expressions are silently ignored (but won't raise an error as they used to).
Tests: Use regular asserts and pytest.raises() 875 – Aarni Koskela
Wheels are now built in GitHub Actions 888 – Aarni Koskela
Small improvements to the CLDR downloader script 894 – Aarni Koskela
Remove antiquated __nonzero__ methods 896 - Nikita Sobolev
Remove superfluous __unicode__ declarations 905 - Lukas Juhrich
Mark package compatible with Python 3.11 913 - Aarni Koskela
Quiesce pytest warnings 916 - Aarni Koskela
Use email.Message for pofile header parsing instead of the deprecated cgi.parse_header function. 876 – Aarni Koskela
Remove determining time zone via systemsetup on macOS 914 - Aarni Koskela
Update Python versions in documentation 898 - Raphael Nestler
Align BSD-3 license with OSI template 912 - Lukas Kahwe Smith
This is a bugfix release for Babel 2.10.2, which was mistakenly packaged with outdated locale data.
This is a bugfix release for Babel 2.10.2, which was mistakenly packaged with outdated locale data.
Thanks to Michał Górny for pointing this out and Jun Omae for verifying.
This and future Babel PyPI packages will be built by a more automated process, which should make problems like this less likely to occur.
This is a bugfix release for Babel 2.10.1.
This is a bugfix release for Babel 2.10.1.
dayPeriodRule across 0:00 by @jun66j5 in https://github.com/python-babel/babel/pull/871b and B period symbols in time format by @jun66j5 in https://github.com/python-babel/babel/pull/869Full Changelog: https://github.com/python-babel/babel/compare/v2.10.1...v2.10.2
This is a bugfix release for Babel 2.10.1.
Fallback count="other" format in format_currency() (872) - Jun Omae
Fix get_period_id() with dayPeriodRule across 0:00 (871) - Jun Omae
Add support for b and B period symbols in time format (869) - Jun Omae
chore(docs/typo): Fixes a minor typo in a function comment (864) - Frank Harrison
This is a bugfix release for 2.10.0 for a bug that only affects users who do not have setuptools installed.
This is a bugfix release for 2.10.0 for a bug that only affects users who do not have setuptools installed.
Full Changelog: https://github.com/python-babel/babel/compare/v2.10.0...v2.10.1
This is a bugfix release for Babel 2.10.0.
Messages: Fix distutils import. Regressed in 843. (852) - Nehal J Wani
The wheel file is no longer marked as universal, since Babel only supports Python 3.
Don't use the deprecated format_number function internally or in tests by @akx in https://github.com/python-babel/babel/pull/839
This changelog has been created automatically by GitHub.
Please see https://github.com/python-babel/babel/blob/master/CHANGES.rst for a more condensed version. Full Changelog: https://github.com/python-babel/babel/compare/v2.9.0...v2.10.0
--init-missing option for pybabel update by @RuRo in https://github.com/python-babel/babel/pull/785other as fallback form by @akx in https://github.com/python-babel/babel/pull/827The get_next_timezone_transition() function is marked deprecated in this version and will be removed likely as soon as Babel 2.11. No replacement for this function is planned; based on discussion in 716, it's likely the function is not used in any real code. (852) - Aarni Koskela, Paul Ganssle
CLDR: Upgrade to CLDR 41.0. (853) - Aarni Koskela
The c and e plural form operands introduced in CLDR 40 are parsed, but otherwise unsupported. (826)
Non-nominative forms of units are currently ignored.
Messages: Implement --init-missing option for pybabel update (785) - ruro
Messages: For extract, you can now replace the built-in .* / _* ignored directory patterns with ones of your own. (832) - Aarni Koskela, Kinshuk Dua
Messages: Add --check to verify if catalogs are up-to-date (831) - Krzysztof Jagiełło
Messages: Add --header-comment to override default header comment (720) - Mohamed Hafez Morsy, Aarni Koskela
Dates: parse_time now supports 12-hour clock, and is better at parsing partial times. (834) - Aarni Koskela, David Bauer, Arthur Jovart
Dates: parse_date and parse_time now raise ParseError, a subclass of ValueError, in certain cases. (834) - Aarni Koskela
Dates: parse_date and parse_time now accept the format parameter. (834) - Juliette Monsel, Aarni Koskela
The internal babel/_compat.py module is no more (808) - Hugo van Kemenade
Python 3.10 is officially supported (809) - Hugo van Kemenade
There's now a friendly GitHub issue template. (800) – Álvaro Mondéjar Rubio
Don't use the deprecated format_number function internally or in tests - Aarni Koskela
Add GitHub URL for PyPi (846) - Andrii Oriekhov
Python 3.12 compatibility: Prefer setuptools imports to distutils imports (843) - Aarni Koskela
Python 3.11 compatibility: Add deprecations to l*gettext variants (835) - Aarni Koskela
CI: Babel is now tested with PyPy 3.7. (851) - Aarni Koskela
Date formatting: Allow using other as fallback form (827) - Aarni Koskela
Locales: Locale.parse() normalizes variant tags to upper case (829) - Aarni Koskela
A typo in the plural format for Maltese is fixed. (796) - Lukas Winkler
Messages: Catalog date parsing is now timezone independent. (701) - rachele-collin
Messages: Fix duplicate locations when writing without lineno (837) - Sigurd Ljødal
Messages: Fix missing trailing semicolon in plural form headers (848) - farhan5900
CLI: Fix output of --list-locales to not be a bytes repr (845) - Morgan Wahl
Documentation is now correctly built again, and up to date (830) - Aarni Koskela
The internal locale-data loading functions now validate the name of the locale file to be loaded and only allow files within Babel's data directory. T
Dates: Correct default Format().timedelta format to 'long' to mute deprecation warnings – Aarni Koskela
This patch version only differs from 2.8.0 in that it backports in #752.
This patch version only differs from 2.8.0 in that it backports in #752.
This is solely a patch release to make running tests on Py.test 6+ possible.
Support Py.test 6 - Aarni Koskela (747, 750, 752)
CLDR: Upgrade to CLDR 36.0 - Aarni Koskela
These may be backward incompatible in some cases, as some more-or-less internal APIs have changed. Please feel free to file issues if you bump into an…
🎉 A new version, almost exactly a year since 2.6.0!
These may be backward incompatible in some cases, as some more-or-less internal APIs have changed. Please feel free to file issues if you bump into anything strange and we'll try to help!
babel.util.odict have been replaced with
collections.OrderedDict from The Python standard library.pybabel compile: exit with code 1 if errors were encountered - Aarni Koskela (#647)parse_decimal() strict argument and suggestions - Charly C (#590)These may be backward incompatible in some cases, as some more-or-less internal APIs have changed. Please feel free to file issues if you bump into an…
These may be backward incompatible in some cases, as some more-or-less internal APIs have changed. Please feel free to file issues if you bump into anything strange and we'll try to help!
This is a maintenance release that reverts undesired API-breaking changes that slipped into 2.5.2 (see https://github.com/python-babel/babel/issues/55…
This is a maintenance release that reverts undesired API-breaking changes that slipped into 2.5.2 (see https://github.com/python-babel/babel/issues/550).
It is based on v2.5.1 (f29eccd) with commits 7cedb84, 29da2d2 and edfb518 cherry-picked on top.
> ❗️ This version is accidentally not backwards compatible; please use 2.5.3!
❗️ This version is accidentally not backwards compatible; please use 2.5.3! (#550)
Use a fixed datetime to avoid test failures (#520) (@narendravardi)
Bugfix release.
Numbers: Add currency utilities and helpers (#491) (@kdeldycke)
New Features
* Numbers: Add currency utilities and helpers (#491) (@kdeldycke)
* Support PyInstaller (#500, #505) (@wodo)
Minor Improvements and bugfixes
Some of these changes might break your current code and/or tests.
Some of these changes might break your current code and/or tests.
parse_pattern now preserves the full original pattern (#414) (@jtwang)extract_operands (#435) (@akx)(Bugfix release, released on April 22th 2016)
(Bugfix release, released on April 22th 2016)
CLDR: The lxml library is no longer used for CLDR importing, so it should not cause strange failures either. Thanks to @aronbierbaum for the bug report and @jtwang for the fix. (393)
CLI: Every last single CLI usage regression should now be gone, and both distutils and stand-alone CLIs should work as they have in the past. Thanks to @paxswill and @ajaeger for bug reports. (389)
(Bugfix release, released on April 12th 2016)
(Bugfix release, released on April 12th 2016)
CLI: Usage regressions that had snuck in between 2.2 and 2.3 should be no more. (386) Thanks to @ajaeger, @sebdiem and @jcristovao for bug reports and patches.
Dates: Period (am/pm) formatting was broken in certain locales (namely zh_TW). Thanks to @jun66j5 for the bug report.
A bugfix release.
(Bugfix release, released on April 9th 2016)
Dates: Period (am/pm) formatting was broken in certain locales (namely zh_TW). Thanks to @jun66j5 for the bug report. (378, 379)
This is the new wonderful and shiny 2.3 release featuring PyPy3 support, lots of new features and bugfixes. Many thanks go to @akx for serious and awe
This is the new wonderful and shiny 2.3 release featuring PyPy3 support, lots of new features and bugfixes. Many thanks go to @akx for serious and awesome work. We'd also like to thank students who have participated in the IndiaHacks hackathon with us as well as other contributors for their help. You can download the release from https://pypi.python.org/pypi/Babel.
(Note: A 2.3.0 release actually exists but is erroneous.)
(Bugfix release because of deployment problems, released on April 8th 2016)
Nothing published for this version
This is the wonderful 2.2.0 release! Many thanks for many serious contributions go to @etanol , @erickwilder , @benselme and @akx .
This is the wonderful 2.2.0 release! Many thanks for many serious contributions go to @etanol , @erickwilder , @benselme and @akx .
__hash__ to Locale. (#303) (2aa8074)__copy__ and __deepcopy__ to LazyProxy. (a1cc3f1)extract() (#289) (3f58516)format_timedelta(format='narrow') support (edc5eb5)Please note that the preferred way to install Babel is using pip/pypi: https://pypi.python.org/pypi/Babel .
Please note that the preferred way to install Babel is using pip/pypi: https://pypi.python.org/pypi/Babel .
(A 2.1.0 release exists in a quantum state, i.e. it did exist for a few hours but because an ugly distribution error it had to be removed in order to avoid other people pulling the broken distribution. To distribute the fixed version to everyone, the 2.1.1 release was created.)
(Released on July 27th 2015, codename Second Coming)
(Released on July 27th 2015, codename Second Coming)
Added support for looking up currencies that belong to a territory through the babel.numbers.get_territory_currencies function.
Improved Python 3 support.
Fixed some broken tests for timezone behavior.
Improved various smaller things for dealing with dates.
(bugfix release, released on July 29th 2013)
(bugfix release, released on July 29th 2013)
Fixed a bug in likely-subtag resolving for some common locales. This primarily makes zh_CN work again which was broken due to how it was defined in the likely subtags combined with our broken resolving. This fixes 37.
Fixed a bug that caused pybabel to break when writing to stdout on Python 3.
Removed a stray print that was causing issues when writing to stdout for message catalogs.
(bugfix release, released on July 27th 2013)
(bugfix release, released on July 27th 2013)
Included all tests in the tarball. Previously the include skipped past recursive folders.
Changed how tests are invoked and added separate standalone test command. This simplifies testing of the package for linux distributors.
(bugfix release, released on July 27th 2013)
(bugfix release, released on July 27th 2013)
added dummy version requirements for pytz so that it installs on pip 1.4.
Included tests in the tarball.
(Released on July 26th 2013, codename Revival)
(Released on July 26th 2013, codename Revival)
support python 2.6, 2.7, 3.3+ and pypy - drop all other versions
use tox for testing on different pythons
Added support for the locale plural rules defined by the CLDR.
Added format_timedelta function to support localized formatting of relative times with strings such as "2 days" or "1 month" (126).
Fixed negative offset handling of Catalog._set_mime_headers (165).
Fixed the case where messages containing square brackets would break with an unpack error.
updated to CLDR 23
Make the CLDR import script work with Python 2.7.
Fix various typos.
Sort output of list-locales.
Make the POT-Creation-Date of the catalog being updated equal to POT-Creation-Date of the template used to update (148).
Use a more explicit error message if no option or argument (command) is passed to pybabel (81).
Keep the PO-Revision-Date if it is not the default value (148).
Make --no-wrap work by reworking --width's default and mimic xgettext's behaviour of always wrapping comments (145).
Add --project and --version options for commandline (173).
Add a __ne__() method to the Local class.
Explicitly sort instead of using sorted() and don't assume ordering (Jython compatibility).
Removed ValueError raising for string formatting message checkers if the string does not contain any string formatting (150).
Fix Serbian plural forms (213).
Small speed improvement in format_date() (216).
Fix so frontend.CommandLineInterface.run does not accumulate logging handlers (227, reported with initial patch by dfraser)
Fix exception if environment contains an invalid locale setting (200)
use cPickle instead of pickle for better performance (225)
Only use bankers round algorithm as a tie breaker if there are two nearest numbers, round as usual if there is only one nearest number (267, patch by Martin)
Allow disabling cache behaviour in LazyProxy (208, initial patch from Pedro Algarvio)
Support for context-aware methods during message extraction (229, patch from David Rios)
"init" and "update" commands support "--no-wrap" option (289)
fix formatting of fraction in format_decimal() if the input value is a float with more than 7 significant digits (183)
fix format_date() with datetime parameter (282, patch from Xavier Morel)
fix format_decimal() with small Decimal values (214, patch from George Lund)
fix handling of messages containing '\n' (198)
handle irregular multi-line msgstr (no "" as first line) gracefully (171)
parse_decimal() now returns Decimals not floats, API change (178)
no warnings when running setup.py without installed setuptools (262)
modified Locale.__eq__ method so Locales are only equal if all of their attributes (language, territory, script, variant) are equal
resort to hard-coded message extractors/checkers if pkg_resources is installed but no egg-info was found (230)
format_time() and format_datetime() now accept also floats (242)
add babel.support.NullTranslations class similar to gettext.NullTranslations but with all of Babel's new gettext methods (277)
"init" and "update" commands support "--width" option (284)
fix 'input_dirs' option for setuptools integration (232, initial patch by Étienne Bersac)
ensure .mo file header contains the same information as the source .po file (199)
added support for get_language_name() on the locale objects.
added support for get_territory_name() on the locale objects.
added support for get_script_name() on the locale objects.
added pluralization support for currency names and added a '¤¤¤' pattern for currencies that includes the full name.
depend on pytz now and wrap it nicer. This gives us improved support for things like timezone transitions and an overall nicer API.
Added support for explicit charset to PO file reading.
Added experimental Python 3 support.
Added better support for returning timezone names.
Don't throw away a Catalog's obsolete messages when updating it.
Added basic likelySubtag resolving when doing locale parsing and no match can be found.
Backport r493-494: documentation typo fixes.
(released on March 17th 2011)
Backport r493-494: documentation typo fixes.
Make the CLDR import script work with Python 2.7.
Fix various typos.
Fixed Python 2.3 compatibility (146, 233).
Sort output of list-locales.
Make the POT-Creation-Date of the catalog being updated equal to POT-Creation-Date of the template used to update (148).
Use a more explicit error message if no option or argument (command) is passed to pybabel (81).
Keep the PO-Revision-Date if it is not the default value (148).
Make --no-wrap work by reworking --width's default and mimic xgettext's behaviour of always wrapping comments (145).
Fixed negative offset handling of Catalog._set_mime_headers (165).
Add --project and --version options for commandline (173).
Add a __ne__() method to the Local class.
Explicitly sort instead of using sorted() and don't assume ordering (Python 2.3 and Jython compatibility).
Removed ValueError raising for string formatting message checkers if the string does not contain any string formatting (150).
Fix Serbian plural forms (213).
Small speed improvement in format_date() (216).
Fix number formatting for locales where CLDR specifies alt or draft items (217)
Fix bad check in format_time (257, reported with patch and tests by jomae)
Fix so frontend.CommandLineInterface.run does not accumulate logging handlers (227, reported with initial patch by dfraser)
Fix exception if environment contains an invalid locale setting (200)
Fixed the case where messages containing square brackets would break with an unpack error.
(released on April 6th 2010)
Fixed the case where messages containing square brackets would break with an unpack error.
Backport of r467: Fuzzy matching regarding plurals should NOT be checked against len(message.id) because this is always 2, instead, it's should be checked against catalog.num_plurals (212).
Currency symbol definitions that is defined with choice patterns in the CLDR data are no longer imported, so the symbol code will be used instead.
(released on August 25th 2008)
Currency symbol definitions that is defined with choice patterns in the CLDR data are no longer imported, so the symbol code will be used instead.
Fixed quarter support in date formatting.
Fixed a serious memory leak that was introduces by the support for CLDR aliases in 0.9.3 (128).
Locale modifiers such as "@euro" are now stripped from locale identifiers when parsing (136).
The system locales "C" and "POSIX" are now treated as aliases for "en_US_POSIX", for which the CLDR provides the appropriate data. Thanks to Manlio Perillo for the suggestion.
Fixed JavaScript extraction for regular expression literals (138) and concatenated strings.
The Translation class in babel.support can now manage catalogs with different message domains, and exposes the family of d*gettext functions (137).
Fixed invalid message extraction methods causing an UnboundLocalError.
(released on July 9th 2008)
Fixed invalid message extraction methods causing an UnboundLocalError.
Extraction method specification can now use a dot instead of the colon to separate module and function name (105).
Fixed message catalog compilation for locales with more than two plural forms (95).
Fixed compilation of message catalogs for locales with more than two plural forms where the translations were empty (97).
The stripping of the comment tags in comments is optional now and is done for each line in a comment.
Added a JavaScript message extractor.
Updated to CLDR 1.6.
Fixed timezone calculations when formatting datetime and time values.
Added a get_plural function into the plurals module that returns the correct plural forms for a locale as tuple.
Added support for alias definitions in the CLDR data files, meaning that the chance for items missing in certain locales should be greatly reduced (68).
(released on February 4th 2008)
(released on February 4th 2008)
Fixed catalogs' charset values not being recognized (66).
Numerous improvements to the default plural forms.
Fixed fuzzy matching when updating message catalogs (82).
Fixed bug in catalog updating, that in some cases pulled in translations from different catalogs based on the same template.
Location lines in PO files do no longer get wrapped at hyphens in file names (79).
Fixed division by zero error in catalog compilation on empty catalogs (60).
(released on September 7th 2007)
(released on September 7th 2007)
Fixed catalog updating when a message is merged that was previously simple but now has a plural form, for example by moving from gettext to ngettext, or vice versa.
Fixed time formatting for 12 am and 12 pm.
Fixed output encoding of the pybabel --list-locales command.
MO files are now written in binary mode on windows (61).
The new_catalog distutils command has been renamed to init_catalog for consistency with the command-line frontend.
(released on August 20th 2007)
The new_catalog distutils command has been renamed to init_catalog for consistency with the command-line frontend.
Added compilation of message catalogs to MO files (21).
Added updating of message catalogs from POT files (22).
Support for significant digits in number formatting.
Apply proper "banker's rounding" in number formatting in a cross-platform manner.
The number formatting functions now also work with numbers represented by Python Decimal objects (53).
Added extensible infrastructure for validating translation catalogs.
Fixed the extractor not filtering out messages that didn't validate against the keyword's specification (39).
Fixed the extractor raising an exception when encountering an empty string msgid. It now emits a warning to stderr.
Numerous Python message extractor fixes: it now handles nested function calls within a gettext function call correctly, uses the correct line number for multi-line function calls, and other small fixes (tickets 38 and 39).
Improved support for detecting Python string formatting fields in message strings (57).
CLDR upgraded to the 1.5 release.
Improved timezone formatting.
Implemented scientific number formatting.
Added mechanism to lookup locales by alias, for cases where browsers insist on including only the language code in the Accept-Language header, and sometimes even the incorrect language code.
default_locale() would fail when the value of the LANGUAGE environment variable contained multiple language codes separated by colon, as is explicitly
(released on July 2nd 2007)
default_locale() would fail when the value of the LANGUAGE environment variable contained multiple language codes separated by colon, as is explicitly allowed by the GNU gettext tools. As the default_locale() function is called at the module level in some modules, this bug would completely break importing these modules on systems where LANGUAGE is set that way.
The character set specified in PO template files is now respected when creating new catalog files based on that template. This allows the use of characters outside the ASCII range in POT files (17).
The default ordering of messages in generated POT files, which is based on the order those messages are found when walking the source tree, is no longer subject to differences between platforms; directory and file names are now always sorted alphabetically.
The Python message extractor now respects the special encoding comment to be able to handle files containing non-ASCII characters (23).
Added N_ (gettext noop) to the extractor's default keywords.
Made locale string parsing more robust, and also take the script part into account (27).
Added a function to list all locales for which locale data is available.
Added a command-line option to the pybabel command which prints out all available locales (24).
The name of the command-line script has been changed from just babel to pybabel to avoid a conflict with the OpenBabel project (34).
(released on June 20th 2007) - First public release
(released on June 20th 2007)
First public release
Your coding agent can read these notes before it upgrades. Set up the MCP server →