From 7201e822389cd3c94994e5434006e6dcf09593a5 Mon Sep 17 00:00:00 2001 From: Artem Kushnerov Date: Fri, 2 Jan 2026 08:01:02 +1000 Subject: [PATCH] Fix i18n relative path + reformat using `pre-commit` (#1740) * fix: i18n relative path + reformat using `pre-commit` * chore: changes --------- Co-authored-by: Katant --- .github/FUNDING.yml | 1 - CHANGES/1740.bugfix.rst | 1 + aiogram/utils/i18n/core.py | 6 +++--- docs/locale/uk_UA/LC_MESSAGES/api/enums/topic_icon_color.po | 1 - .../uk_UA/LC_MESSAGES/api/methods/set_chat_permissions.po | 1 - docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po | 1 - docs/locale/uk_UA/LC_MESSAGES/dispatcher/observer.po | 1 - docs/locale/uk_UA/LC_MESSAGES/utils/callback_answer.po | 1 - docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po | 1 - tests/test_utils/test_i18n.py | 5 +++++ 10 files changed, 9 insertions(+), 10 deletions(-) create mode 100644 CHANGES/1740.bugfix.rst diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 6b2da3b6..c4430ef6 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1 @@ open_collective: aiogram - diff --git a/CHANGES/1740.bugfix.rst b/CHANGES/1740.bugfix.rst new file mode 100644 index 00000000..e2b38536 --- /dev/null +++ b/CHANGES/1740.bugfix.rst @@ -0,0 +1 @@ +Fix I18n initialization with relative path diff --git a/aiogram/utils/i18n/core.py b/aiogram/utils/i18n/core.py index 3cdf8072..088e62fb 100644 --- a/aiogram/utils/i18n/core.py +++ b/aiogram/utils/i18n/core.py @@ -21,7 +21,7 @@ class I18n(ContextInstanceMixin["I18n"]): default_locale: str = "en", domain: str = "messages", ) -> None: - self.path = Path(path) + self.path = Path(path).resolve() self.default_locale = default_locale self.domain = domain self.ctx_locale = ContextVar("aiogram_ctx_locale", default=default_locale) @@ -66,9 +66,9 @@ class I18n(ContextInstanceMixin["I18n"]): translations: dict[str, gettext.GNUTranslations] = {} for name in self.path.iterdir(): - if not (self.path / name).is_dir(): + if not name.is_dir(): continue - mo_path = self.path / name / "LC_MESSAGES" / (self.domain + ".mo") + mo_path = name / "LC_MESSAGES" / (self.domain + ".mo") if mo_path.exists(): with mo_path.open("rb") as fp: diff --git a/docs/locale/uk_UA/LC_MESSAGES/api/enums/topic_icon_color.po b/docs/locale/uk_UA/LC_MESSAGES/api/enums/topic_icon_color.po index 636bf54a..62b9ba19 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/api/enums/topic_icon_color.po +++ b/docs/locale/uk_UA/LC_MESSAGES/api/enums/topic_icon_color.po @@ -32,4 +32,3 @@ msgid "" msgstr "" "Джерело: " "https://github.com/telegramdesktop/tdesktop/blob/991fe491c5ae62705d77aa8fdd44a79caf639c45/Telegram/SourceFiles/data/data_forum_topic.cpp#L51-L56" - diff --git a/docs/locale/uk_UA/LC_MESSAGES/api/methods/set_chat_permissions.po b/docs/locale/uk_UA/LC_MESSAGES/api/methods/set_chat_permissions.po index 84b5a8aa..b4f95788 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/api/methods/set_chat_permissions.po +++ b/docs/locale/uk_UA/LC_MESSAGES/api/methods/set_chat_permissions.po @@ -103,4 +103,3 @@ msgstr "" #: ../../api/methods/set_chat_permissions.rst:50 msgid ":meth:`aiogram.types.chat.Chat.set_permissions`" msgstr "" - diff --git a/docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po b/docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po index a19bb7a1..d3fe7556 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po +++ b/docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po @@ -195,4 +195,3 @@ msgstr "" "Альтернативним способом є об’єднання за допомогою спеціальних функцій " "(:func:`and_f`, :func:`or_f`, :func:`invert_f` з модуля " ":code:`aiogram.filters`):" - diff --git a/docs/locale/uk_UA/LC_MESSAGES/dispatcher/observer.po b/docs/locale/uk_UA/LC_MESSAGES/dispatcher/observer.po index 20cad437..437bf41d 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/dispatcher/observer.po +++ b/docs/locale/uk_UA/LC_MESSAGES/dispatcher/observer.po @@ -106,4 +106,3 @@ msgid "" msgstr "" "Передача події обробнику подій(handler) та зупинка при першому ж збігу. " "Обробник(handler) буде викликало, коли всі його фільтри пройдено." - diff --git a/docs/locale/uk_UA/LC_MESSAGES/utils/callback_answer.po b/docs/locale/uk_UA/LC_MESSAGES/utils/callback_answer.po index 2adc4af9..3bd4280c 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/utils/callback_answer.po +++ b/docs/locale/uk_UA/LC_MESSAGES/utils/callback_answer.po @@ -202,4 +202,3 @@ msgstr "" #: aiogram.utils.callback_answer.CallbackAnswer.cache_time:1 of msgid "Response cache time" msgstr "" - diff --git a/docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po b/docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po index adf8c7d2..5abe1dd6 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po +++ b/docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po @@ -288,4 +288,3 @@ msgstr "" #: aiogram.utils.media_group.MediaGroupBuilder.build:5 of msgid "List of media objects." msgstr "" - diff --git a/tests/test_utils/test_i18n.py b/tests/test_utils/test_i18n.py index aaf58b9e..016b0e23 100644 --- a/tests/test_utils/test_i18n.py +++ b/tests/test_utils/test_i18n.py @@ -1,3 +1,4 @@ +from pathlib import Path from typing import Any, Dict import pytest @@ -27,6 +28,10 @@ class TestI18nCore: def test_init(self, i18n: I18n): assert set(i18n.available_locales) == {"en", "uk"} + def test_init_relative(self): + i18n_relative = I18n(path="tests/data/locales") + assert set(i18n_relative.available_locales) == {"en", "uk"} + def test_reload(self, i18n: I18n): i18n.reload() assert set(i18n.available_locales) == {"en", "uk"}