From f095448e4e7cfef9e91c1ac0ddc5aa755c9455b7 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 22 Mar 2026 17:19:05 +0000 Subject: [PATCH 1/3] Always provide a translated name --- generate.py | 4 +++- requirements.txt | 1 + tests/test_translated_names.py | 5 ++++- translated_names.py | 11 +++++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/generate.py b/generate.py index be49be7e7..29bfadd72 100644 --- a/generate.py +++ b/generate.py @@ -84,7 +84,9 @@ def get_project_data( core_change, change, built, - translated_name=languages_built.get(language.code, ''), + translated_name=languages_built.get(language.code) + or translated_names._babel_autonym(language.code) + or '', contribution_link=contribute.get_contrib_link(language.code, repo), ) diff --git a/requirements.txt b/requirements.txt index 3d362eaea..cb26e1833 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +babel gitpython urllib3 potodo diff --git a/tests/test_translated_names.py b/tests/test_translated_names.py index 91a6b08e6..945a6c95b 100644 --- a/tests/test_translated_names.py +++ b/tests/test_translated_names.py @@ -20,10 +20,13 @@ def test_get_languages(self): self.assertIn('pl', result) self.assertIn('zh-cn', result) - self.assertEqual(result.get('en'), None) self.assertEqual(result.get('pl'), 'polski') self.assertEqual(result.get('zh-cn'), '简体中文') + def test__babel_autonym(self): + self.assertEqual(translated_names._babel_autonym('en'), 'English') + self.assertEqual(translated_names._babel_autonym('ga'), 'Gaeilge') + if __name__ == '__main__': unittest.main() diff --git a/translated_names.py b/translated_names.py index f266b98d3..f985029e1 100644 --- a/translated_names.py +++ b/translated_names.py @@ -7,9 +7,20 @@ import tomllib from collections.abc import Iterator +from babel import Locale +from babel.core import UnknownLocaleError from urllib3 import PoolManager +def _babel_autonym(code: str) -> str | None: + """Get the translated name for a language code with Babel""" + try: + locale = Locale.parse(code.replace('-', '_')) + return locale.get_display_name(locale) + except (UnknownLocaleError, ValueError): + return None + + def get_languages(http: PoolManager) -> Iterator[tuple[str, str]]: data = http.request( 'GET', From 70dbfbec332c0b85ebfe4448a91f8ffd8e277938 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 22 Mar 2026 22:08:38 +0000 Subject: [PATCH 2/3] =?UTF-8?q?Review=20Ma=C4=87ka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generate.py | 2 +- tests/test_translated_names.py | 2 +- translated_names.py | 12 +++++------- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/generate.py b/generate.py index 29bfadd72..a6df9c6f3 100644 --- a/generate.py +++ b/generate.py @@ -85,7 +85,7 @@ def get_project_data( change, built, translated_name=languages_built.get(language.code) - or translated_names._babel_autonym(language.code) + or translated_names.babel_autonym(language.code) or '', contribution_link=contribute.get_contrib_link(language.code, repo), ) diff --git a/tests/test_translated_names.py b/tests/test_translated_names.py index 945a6c95b..5d5a97215 100644 --- a/tests/test_translated_names.py +++ b/tests/test_translated_names.py @@ -23,7 +23,7 @@ def test_get_languages(self): self.assertEqual(result.get('pl'), 'polski') self.assertEqual(result.get('zh-cn'), '简体中文') - def test__babel_autonym(self): + def test_babel_autonym(self): self.assertEqual(translated_names._babel_autonym('en'), 'English') self.assertEqual(translated_names._babel_autonym('ga'), 'Gaeilge') diff --git a/translated_names.py b/translated_names.py index f985029e1..b0b15953b 100644 --- a/translated_names.py +++ b/translated_names.py @@ -1,9 +1,3 @@ -""" -Fetch translated names of languages. - -Yield a tuple of language code and a string with the translated name. -""" - import tomllib from collections.abc import Iterator @@ -12,7 +6,7 @@ from urllib3 import PoolManager -def _babel_autonym(code: str) -> str | None: +def babel_autonym(code: str) -> str | None: """Get the translated name for a language code with Babel""" try: locale = Locale.parse(code.replace('-', '_')) @@ -22,6 +16,10 @@ def _babel_autonym(code: str) -> str | None: def get_languages(http: PoolManager) -> Iterator[tuple[str, str]]: + """ + Fetch languages built through docsbuild-scripts. + Yields language codes and translated language names. + """ data = http.request( 'GET', 'https://raw.githubusercontent.com/python/docsbuild-scripts/refs/heads/main/config.toml', From ddc4d69a2103abd1574b64edad004aacef87acfe Mon Sep 17 00:00:00 2001 From: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com> Date: Sun, 22 Mar 2026 22:15:14 +0000 Subject: [PATCH 3/3] Oops, update the tests too Co-authored-by: Maciej Olko --- tests/test_translated_names.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_translated_names.py b/tests/test_translated_names.py index 5d5a97215..0c2fb1e12 100644 --- a/tests/test_translated_names.py +++ b/tests/test_translated_names.py @@ -24,8 +24,8 @@ def test_get_languages(self): self.assertEqual(result.get('zh-cn'), '简体中文') def test_babel_autonym(self): - self.assertEqual(translated_names._babel_autonym('en'), 'English') - self.assertEqual(translated_names._babel_autonym('ga'), 'Gaeilge') + self.assertEqual(translated_names.babel_autonym('en'), 'English') + self.assertEqual(translated_names.babel_autonym('ga'), 'Gaeilge') if __name__ == '__main__':