From 56c63caf50b18b152541b5dcafd51f645d867074 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Sun, 1 Feb 2026 13:21:04 +0100 Subject: [PATCH] Prepare for 2.18.0 (#1248) * Update authors file * Update changelog for 2.18.0 * Update copyright year * Bump version --- AUTHORS | 4 +++ CHANGES.rst | 55 ++++++++++++++++++++++++++++++++++++ LICENSE | 2 +- babel/__init__.py | 4 +-- babel/core.py | 2 +- babel/dates.py | 2 +- babel/lists.py | 2 +- babel/localedata.py | 2 +- babel/localtime/__init__.py | 2 +- babel/localtime/_fallback.py | 2 +- babel/messages/__init__.py | 2 +- babel/messages/catalog.py | 2 +- babel/messages/checkers.py | 2 +- babel/messages/extract.py | 2 +- babel/messages/frontend.py | 2 +- babel/messages/jslexer.py | 2 +- babel/messages/mofile.py | 2 +- babel/messages/plurals.py | 2 +- babel/messages/pofile.py | 2 +- babel/numbers.py | 2 +- babel/plural.py | 2 +- babel/support.py | 2 +- babel/util.py | 2 +- scripts/generate_authors.py | 3 +- 24 files changed, 83 insertions(+), 23 deletions(-) diff --git a/AUTHORS b/AUTHORS index 89353ae0..79e18d46 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 dcd7aa28..b09e184e 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 6ddae98e..96f467d2 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 0edfa9a8..2fd88bef 100644 --- a/babel/__init__.py +++ b/babel/__init__.py @@ -12,7 +12,7 @@ This package is basically composed of two major parts: 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 @@ from babel.core import ( parse_locale, ) -__version__ = '2.17.0' +__version__ = '2.18.0' __all__ = [ 'Locale', diff --git a/babel/core.py b/babel/core.py index 77de440e..4210b46b 100644 --- a/babel/core.py +++ b/babel/core.py @@ -4,7 +4,7 @@ babel.core 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 6142541c..69610a7f 100644 --- a/babel/dates.py +++ b/babel/dates.py @@ -11,7 +11,7 @@ following environment variables, in that order: * ``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 606d865d..b6c85980 100644 --- a/babel/lists.py +++ b/babel/lists.py @@ -10,7 +10,7 @@ following environment variables, in that order: * ``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 073643c5..2b225a14 100644 --- a/babel/localedata.py +++ b/babel/localedata.py @@ -7,7 +7,7 @@ Low-level locale data access. :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 8076516e..9eb95ab2 100644 --- a/babel/localtime/__init__.py +++ b/babel/localtime/__init__.py @@ -5,7 +5,7 @@ babel.localtime 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 6cd67b5c..21881390 100644 --- a/babel/localtime/_fallback.py +++ b/babel/localtime/_fallback.py @@ -4,7 +4,7 @@ babel.localtime._fallback 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 6e445e6b..8dde3f29 100644 --- a/babel/messages/__init__.py +++ b/babel/messages/__init__.py @@ -4,7 +4,7 @@ babel.messages 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 8a08a226..9a9739a7 100644 --- a/babel/messages/catalog.py +++ b/babel/messages/catalog.py @@ -4,7 +4,7 @@ babel.messages.catalog 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 28081160..4026ab1b 100644 --- a/babel/messages/checkers.py +++ b/babel/messages/checkers.py @@ -6,7 +6,7 @@ Various routines that help with validation of translations. :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 ad370853..6fad8430 100644 --- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -12,7 +12,7 @@ simple plugins. 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 884a7000..f63dd9de 100644 --- a/babel/messages/frontend.py +++ b/babel/messages/frontend.py @@ -4,7 +4,7 @@ babel.messages.frontend 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 df503e94..d751b58f 100644 --- a/babel/messages/jslexer.py +++ b/babel/messages/jslexer.py @@ -5,7 +5,7 @@ babel.messages.jslexer 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 32ba0787..1a6fedfc 100644 --- a/babel/messages/mofile.py +++ b/babel/messages/mofile.py @@ -4,7 +4,7 @@ babel.messages.mofile 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 a03fb4ed..a66fdfe4 100644 --- a/babel/messages/plurals.py +++ b/babel/messages/plurals.py @@ -4,7 +4,7 @@ babel.messages.plurals 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 4a986ab3..b9678a92 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -5,7 +5,7 @@ babel.messages.pofile 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 fbc7eece..2ef9031a 100644 --- a/babel/numbers.py +++ b/babel/numbers.py @@ -12,7 +12,7 @@ following environment variables, in that order: * ``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 e368b1ac..90aa4952 100644 --- a/babel/plural.py +++ b/babel/plural.py @@ -4,7 +4,7 @@ babel.numbers 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 f1149112..8cc2492e 100644 --- a/babel/support.py +++ b/babel/support.py @@ -7,7 +7,7 @@ in applications. .. 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 001fd646..a2bf728c 100644 --- a/babel/util.py +++ b/babel/util.py @@ -4,7 +4,7 @@ babel.util 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 cd18f640..c7387d74 100644 --- a/scripts/generate_authors.py +++ b/scripts/generate_authors.py @@ -9,6 +9,7 @@ aliases = { 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(): -- 2.47.3