@@ -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+
800856class ExpandLangTestCase (unittest .TestCase ):
801857 def test_expand_lang (self ):
802858 # Test all combinations of territory, charset and
0 commit comments