Skip to content

Commit 6c8d527

Browse files
[3.13] pythongh-130320: gettext: Test fallback translations (pythonGH-130321) (pythonGH-132359)
(cherry picked from commit 4d58c8c) Co-authored-by: Tomas R <[email protected]>
1 parent fc85256 commit 6c8d527

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

Lib/test/test_gettext.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,62 @@ def test_cache(self):
797797
self.assertEqual(t.__class__, DummyGNUTranslations)
798798

799799

800+
class FallbackTranslations(gettext.NullTranslations):
801+
def gettext(self, message):
802+
return f'gettext: {message}'
803+
804+
def ngettext(self, msgid1, msgid2, n):
805+
return f'ngettext: {msgid1}, {msgid2}, {n}'
806+
807+
def pgettext(self, context, message):
808+
return f'pgettext: {context}, {message}'
809+
810+
def npgettext(self, context, msgid1, msgid2, n):
811+
return f'npgettext: {context}, {msgid1}, {msgid2}, {n}'
812+
813+
814+
class FallbackTestCase(GettextBaseTest):
815+
def test_null_translations_fallback(self):
816+
t = gettext.NullTranslations()
817+
t.add_fallback(FallbackTranslations())
818+
self.assertEqual(t.gettext('foo'), 'gettext: foo')
819+
self.assertEqual(t.ngettext('foo', 'foos', 1),
820+
'ngettext: foo, foos, 1')
821+
self.assertEqual(t.pgettext('context', 'foo'),
822+
'pgettext: context, foo')
823+
self.assertEqual(t.npgettext('context', 'foo', 'foos', 1),
824+
'npgettext: context, foo, foos, 1')
825+
826+
def test_gnu_translations_fallback(self):
827+
with open(MOFILE, 'rb') as fp:
828+
t = gettext.GNUTranslations(fp)
829+
t.add_fallback(FallbackTranslations())
830+
self.assertEqual(t.gettext('foo'), 'gettext: foo')
831+
self.assertEqual(t.ngettext('foo', 'foos', 1),
832+
'ngettext: foo, foos, 1')
833+
self.assertEqual(t.pgettext('context', 'foo'),
834+
'pgettext: context, foo')
835+
self.assertEqual(t.npgettext('context', 'foo', 'foos', 1),
836+
'npgettext: context, foo, foos, 1')
837+
838+
def test_nested_fallbacks(self):
839+
class NestedFallback(gettext.NullTranslations):
840+
def gettext(self, message):
841+
if message == 'foo':
842+
return 'fallback'
843+
return super().gettext(message)
844+
845+
fallback1 = NestedFallback()
846+
fallback2 = FallbackTranslations()
847+
t = gettext.NullTranslations()
848+
t.add_fallback(fallback1)
849+
t.add_fallback(fallback2)
850+
851+
self.assertEqual(fallback1.gettext('bar'), 'gettext: bar')
852+
self.assertEqual(t.gettext('foo'), 'fallback')
853+
self.assertEqual(t.gettext('bar'), 'gettext: bar')
854+
855+
800856
class ExpandLangTestCase(unittest.TestCase):
801857
def test_expand_lang(self):
802858
# Test all combinations of territory, charset and

0 commit comments

Comments
 (0)