diff --git a/generate.py b/generate.py index be49be7e7..a6df9c6f3 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..0c2fb1e12 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..b0b15953b 100644 --- a/translated_names.py +++ b/translated_names.py @@ -1,16 +1,25 @@ -""" -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 +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]]: + """ + 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',