jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1332467?usp=email )
Change subject: i18n: Clear bundle cache when switching packages ......................................................................
i18n: Clear bundle cache when switching packages
Bundle lookups are cached by language and directory but load data from the global messages package. Invalidate the cache when changing packages to prevent stale translations from the previous source.
Change-Id: I852728fe1fd512c1f8034508a44e1abae3ccc938 --- M pywikibot/i18n.py M tests/i18n_tests.py 2 files changed, 12 insertions(+), 0 deletions(-)
Approvals: jenkins-bot: Verified Xqt: Looks good to me, approved
diff --git a/pywikibot/i18n.py b/pywikibot/i18n.py index 7cfd82e..b8e7f90 100644 --- a/pywikibot/i18n.py +++ b/pywikibot/i18n.py @@ -359,6 +359,7 @@ global _messages_available _messages_package_name = package_name _messages_available = None + _get_bundle.cache_clear()
def messages_available() -> bool: diff --git a/tests/i18n_tests.py b/tests/i18n_tests.py index 9d9871f..d09e47f 100755 --- a/tests/i18n_tests.py +++ b/tests/i18n_tests.py @@ -274,6 +274,17 @@ net = False message_package = 'tests.i18n'
+ def testSwitchMessagesPackage(self) -> None: + """Test that switching packages clears cached translations.""" + self.addCleanup(i18n._get_bundle.cache_clear) + i18n._get_bundle.cache_clear() + self.assertEqual(i18n.twtranslate('en', 'test-localized'), + 'test-localized EN') + + i18n.set_messages_package('pywikibot.scripts.i18n') + with self.assertRaises(TranslationError): + i18n.twtranslate('en', 'test-localized', fallback=False) + def testLocalized(self) -> None: """Test fully localized entry.""" self.assertEqual(i18n.twtranslate('en', 'test-localized'),
pywikibot-commits@lists.wikimedia.org