- Hugo van Kemenade
- Jun Omae
- Heungsub Lee
+- Boris Verkhovskiy
- Jakob Schnitzer
- Sachin Paliwal
- Alex Willmer
- Arturas Moskvinas
- Leonardo Pistone
- Hyunjun Kim
+- Bart Broere
+- Guillaume Gauvrit
+- clach04
- wandrew004
- James McKinney
- Tomáš Hrnčiar
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
--------------
-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
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.
"""
parse_locale,
)
-__version__ = '2.17.0'
+__version__ = '2.18.0'
__all__ = [
'Locale',
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.
"""
* ``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.
"""
* ``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.
"""
: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.
"""
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.
"""
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.
"""
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.
"""
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.
"""
: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.
"""
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.
"""
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.
"""
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.
"""
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.
"""
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.
"""
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.
"""
* ``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.
"""
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.
"""
.. 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.
"""
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.
"""
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
}
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():