From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Thu, 10 Apr 2025 12:20:36 +0000 (+0200) Subject: [3.13] gh-130320: gettext: Test fallback translations (GH-130321) (GH-132359) X-Git-Tag: v3.13.4~301 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6c8d527937218dc0029a67d1e901045aad5d6859;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-130320: gettext: Test fallback translations (GH-130321) (GH-132359) (cherry picked from commit 4d58c8cb247b585051bfbacd79f77aafd18986b7) Co-authored-by: Tomas R --- diff --git a/Lib/test/test_gettext.py b/Lib/test/test_gettext.py index 9639dd904721..7c7f1f84760a 100644 --- a/Lib/test/test_gettext.py +++ b/Lib/test/test_gettext.py @@ -797,6 +797,62 @@ class GettextCacheTestCase(GettextBaseTest): self.assertEqual(t.__class__, DummyGNUTranslations) +class FallbackTranslations(gettext.NullTranslations): + def gettext(self, message): + return f'gettext: {message}' + + def ngettext(self, msgid1, msgid2, n): + return f'ngettext: {msgid1}, {msgid2}, {n}' + + def pgettext(self, context, message): + return f'pgettext: {context}, {message}' + + def npgettext(self, context, msgid1, msgid2, n): + return f'npgettext: {context}, {msgid1}, {msgid2}, {n}' + + +class FallbackTestCase(GettextBaseTest): + def test_null_translations_fallback(self): + t = gettext.NullTranslations() + t.add_fallback(FallbackTranslations()) + self.assertEqual(t.gettext('foo'), 'gettext: foo') + self.assertEqual(t.ngettext('foo', 'foos', 1), + 'ngettext: foo, foos, 1') + self.assertEqual(t.pgettext('context', 'foo'), + 'pgettext: context, foo') + self.assertEqual(t.npgettext('context', 'foo', 'foos', 1), + 'npgettext: context, foo, foos, 1') + + def test_gnu_translations_fallback(self): + with open(MOFILE, 'rb') as fp: + t = gettext.GNUTranslations(fp) + t.add_fallback(FallbackTranslations()) + self.assertEqual(t.gettext('foo'), 'gettext: foo') + self.assertEqual(t.ngettext('foo', 'foos', 1), + 'ngettext: foo, foos, 1') + self.assertEqual(t.pgettext('context', 'foo'), + 'pgettext: context, foo') + self.assertEqual(t.npgettext('context', 'foo', 'foos', 1), + 'npgettext: context, foo, foos, 1') + + def test_nested_fallbacks(self): + class NestedFallback(gettext.NullTranslations): + def gettext(self, message): + if message == 'foo': + return 'fallback' + return super().gettext(message) + + fallback1 = NestedFallback() + fallback2 = FallbackTranslations() + t = gettext.NullTranslations() + t.add_fallback(fallback1) + t.add_fallback(fallback2) + + self.assertEqual(fallback1.gettext('bar'), 'gettext: bar') + self.assertEqual(t.gettext('foo'), 'fallback') + self.assertEqual(t.gettext('bar'), 'gettext: bar') + + class ExpandLangTestCase(unittest.TestCase): def test_expand_lang(self): # Test all combinations of territory, charset and