diff --git a/AUTHORS b/AUTHORS index 89353ae0f..79e18d46d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -24,6 +24,7 @@ Babel is written and maintained by the Babel team and various contributors: - Hugo van Kemenade - Jun Omae - Heungsub Lee +- Boris Verkhovskiy - Jakob Schnitzer - Sachin Paliwal - Alex Willmer @@ -49,6 +50,9 @@ Babel is written and maintained by the Babel team and various contributors: - Arturas Moskvinas - Leonardo Pistone - Hyunjun Kim +- Bart Broere +- Guillaume Gauvrit +- clach04 - wandrew004 - James McKinney - Tomáš Hrnčiar diff --git a/CHANGES.rst b/CHANGES.rst index dcd7aa28e..b09e184e8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,61 @@ Babel Changelog =============== +Version 2.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. + +Features +~~~~~~~~ + +* Core: Add `babel.core.get_cldr_version()` by @akx in :gh:`1242` +* Core: Use CLDR 47 by @tomasr8 in :gh:`1210` +* Core: Use canonical IANA zone names in zone_territories by @akx in :gh:`1220` +* Messages: Improve extract performance via ignoring directories early during os.walk by @akx in :gh:`968` +* Messages: Merge in per-format keywords and auto_comments by @akx in :gh:`1243` +* Messages: Update keywords for extraction of dpgettext and dnpgettext by @mardiros in :gh:`1235` +* Messages: Validate all plurals in Python format checker by @tomasr8 in :gh:`1188` +* Time: Use standard library `timezone` instead of `FixedOffsetTimezone` by @akx in :gh:`1203` + +Bugfixes +~~~~~~~~ + +* Core: Fix formatting for "Empty locale identifier" exception added in #1164 by @akx in :gh:`1184` +* Core: Improve handling of no-inheritance-marker in timezone data by @akx in :gh:`1194` +* Core: Make the number pattern regular expression more efficient by @akx in :gh:`1213` +* Messages: Keep translator comments next to the translation function call by @akx in :gh:`1196` +* Numbers: Fix KeyError that occurred when formatting compact currencies of exactly one thousand in several locales by @bartbroere in :gh:`1246` + +Other improvements +~~~~~~~~~~~~~~~~~~ + +* Core: Avoid unnecessary uses of `map()` by @akx in :gh:`1180` +* Messages: Have init-catalog create directories too by @akx in :gh:`1244` +* Messages: Optimizations for read_po by @akx in :gh:`1200` +* Messages: Use pathlib.Path() in catalog frontend; improve test coverage by @akx in :gh:`1204` + + +Infrastructure and documentation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +* CI: Renovate CI & lint tools by @akx in :gh:`1228` +* CI: Tighten up CI with Zizmor by @akx in :gh:`1230` +* CI: make job permissions explicit by @akx in :gh:`1227` +* Docs: Add SECURITY.md by @akx in :gh:`1229` +* Docs: Remove u string prefix from docs by @verhovsky in :gh:`1174` +* Docs: Update dates.rst with current unicode.org tr35 link by @clach04 in :gh:`1189` +* General: Add some PyPI classifiers by @tomasr8 in :gh:`1186` +* General: Apply reformatting by hand and with Ruff by @akx in :gh:`1202` +* General: Test on and declare support for Python 3.14 by @akx in :gh:`1233` +* Tests: Convert Unittest testcases with setup/teardown to fixtures by @akx in :gh:`1240` +* Tests: Mark PyPy CI flake as xfail by @akx in :gh:`1197` +* Tests: Move pytest config to `pyproject.toml` by @tomasr8 in :gh:`1187` +* Tests: Unwrap most `unittest` test cases to bare functions by @akx in :gh:`1241` + Version 2.17.0 -------------- diff --git a/LICENSE b/LICENSE index 6ddae98eb..96f467d27 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2025 by the Babel Team, see AUTHORS for more information. +Copyright (c) 2013-2026 by the Babel Team, see AUTHORS for more information. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions diff --git a/babel/__init__.py b/babel/__init__.py index 0edfa9a8f..2fd88befa 100644 --- a/babel/__init__.py +++ b/babel/__init__.py @@ -12,7 +12,7 @@ access to various locale display names, localized number and date formatting, etc. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ @@ -25,7 +25,7 @@ parse_locale, ) -__version__ = '2.17.0' +__version__ = '2.18.0' __all__ = [ 'Locale', diff --git a/babel/core.py b/babel/core.py index 77de440e8..4210b46bb 100644 --- a/babel/core.py +++ b/babel/core.py @@ -4,7 +4,7 @@ Core locale representation and locale data access. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/dates.py b/babel/dates.py index 6142541c4..69610a7f0 100644 --- a/babel/dates.py +++ b/babel/dates.py @@ -11,7 +11,7 @@ * ``LC_ALL``, and * ``LANG`` -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/lists.py b/babel/lists.py index 606d865dc..b6c859800 100644 --- a/babel/lists.py +++ b/babel/lists.py @@ -10,7 +10,7 @@ * ``LC_ALL``, and * ``LANG`` -:copyright: (c) 2015-2025 by the Babel Team. +:copyright: (c) 2015-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/localedata.py b/babel/localedata.py index 073643c57..2b225a142 100644 --- a/babel/localedata.py +++ b/babel/localedata.py @@ -7,7 +7,7 @@ :note: The `Locale` class, which uses this module under the hood, provides a more convenient interface for accessing the locale data. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/localtime/__init__.py b/babel/localtime/__init__.py index 8076516ec..9eb95ab2e 100644 --- a/babel/localtime/__init__.py +++ b/babel/localtime/__init__.py @@ -5,7 +5,7 @@ Babel specific fork of tzlocal to determine the local timezone of the system. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/localtime/_fallback.py b/babel/localtime/_fallback.py index 6cd67b5ce..218813905 100644 --- a/babel/localtime/_fallback.py +++ b/babel/localtime/_fallback.py @@ -4,7 +4,7 @@ Emulated fallback local timezone when all else fails. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/__init__.py b/babel/messages/__init__.py index 6e445e6b0..8dde3f299 100644 --- a/babel/messages/__init__.py +++ b/babel/messages/__init__.py @@ -4,7 +4,7 @@ Support for ``gettext`` message catalogs. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/catalog.py b/babel/messages/catalog.py index 8a08a2268..9a9739a72 100644 --- a/babel/messages/catalog.py +++ b/babel/messages/catalog.py @@ -4,7 +4,7 @@ Data structures for message catalogs. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/checkers.py b/babel/messages/checkers.py index 28081160f..4026ab1b3 100644 --- a/babel/messages/checkers.py +++ b/babel/messages/checkers.py @@ -6,7 +6,7 @@ :since: version 0.9 -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/extract.py b/babel/messages/extract.py index ad3708538..6fad84304 100644 --- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -12,7 +12,7 @@ The main entry points into the extraction functionality are the functions `extract_from_dir` and `extract_from_file`. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/frontend.py b/babel/messages/frontend.py index 884a70006..f63dd9ded 100644 --- a/babel/messages/frontend.py +++ b/babel/messages/frontend.py @@ -4,7 +4,7 @@ Frontends for the message extraction functionality. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/jslexer.py b/babel/messages/jslexer.py index df503e948..d751b58f7 100644 --- a/babel/messages/jslexer.py +++ b/babel/messages/jslexer.py @@ -5,7 +5,7 @@ A simple JavaScript 1.5 lexer which is used for the JavaScript extractor. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/mofile.py b/babel/messages/mofile.py index 32ba07879..1a6fedfcb 100644 --- a/babel/messages/mofile.py +++ b/babel/messages/mofile.py @@ -4,7 +4,7 @@ Writing of files in the ``gettext`` MO (machine object) format. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/plurals.py b/babel/messages/plurals.py index a03fb4edd..a66fdfe41 100644 --- a/babel/messages/plurals.py +++ b/babel/messages/plurals.py @@ -4,7 +4,7 @@ Plural form definitions. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py index 4a986ab36..b9678a924 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -5,7 +5,7 @@ Reading and writing of files in the ``gettext`` PO (portable object) format. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/numbers.py b/babel/numbers.py index fbc7eece9..2ef9031aa 100644 --- a/babel/numbers.py +++ b/babel/numbers.py @@ -12,7 +12,7 @@ * ``LC_ALL``, and * ``LANG`` -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/plural.py b/babel/plural.py index e368b1acf..90aa4952d 100644 --- a/babel/plural.py +++ b/babel/plural.py @@ -4,7 +4,7 @@ CLDR Plural support. See UTS #35. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/support.py b/babel/support.py index f1149112a..8cc2492e8 100644 --- a/babel/support.py +++ b/babel/support.py @@ -7,7 +7,7 @@ .. note: the code in this module is not used by Babel itself -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/babel/util.py b/babel/util.py index 001fd646f..a2bf728cc 100644 --- a/babel/util.py +++ b/babel/util.py @@ -4,7 +4,7 @@ Various utility classes and functions. -:copyright: (c) 2013-2025 by the Babel Team. +:copyright: (c) 2013-2026 by the Babel Team. :license: BSD, see LICENSE for more details. """ diff --git a/scripts/generate_authors.py b/scripts/generate_authors.py index cd18f640a..c7387d744 100644 --- a/scripts/generate_authors.py +++ b/scripts/generate_authors.py @@ -9,6 +9,7 @@ re.compile("Jun Omae"): "Jun Omae", re.compile(r"^Hugo$"): "Hugo van Kemenade", re.compile(r"^Tomas R([.])?"): "Tomas R.", + re.compile(r"^Ruff$"): "", # It's a robot } @@ -22,7 +23,7 @@ def map_alias(name): def get_sorted_authors_list(): authors = check_output(['git', 'log', '--format=%aN'], cwd=root_path).decode('UTF-8') counts = Counter(map_alias(name) for name in authors.splitlines()) - return [author for (author, count) in counts.most_common()] + return [author for (author, count) in counts.most_common() if author] def get_authors_file_content():