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