@@ -748,6 +748,62 @@ def test_cache(self):
748748 self .assertEqual (t .__class__ , DummyGNUTranslations )
749749
750750
751+ class FallbackTranslations (gettext .NullTranslations ):
752+ def gettext (self , message ):
753+ return f'gettext: { message } '
754+
755+ def ngettext (self , msgid1 , msgid2 , n ):
756+ return f'ngettext: { msgid1 } , { msgid2 } , { n } '
757+
758+ def pgettext (self , context , message ):
759+ return f'pgettext: { context } , { message } '
760+
761+ def npgettext (self , context , msgid1 , msgid2 , n ):
762+ return f'npgettext: { context } , { msgid1 } , { msgid2 } , { n } '
763+
764+
765+ class FallbackTestCase (GettextBaseTest ):
766+ def test_null_translations_fallback (self ):
767+ t = gettext .NullTranslations ()
768+ t .add_fallback (FallbackTranslations ())
769+ self .assertEqual (t .gettext ('foo' ), 'gettext: foo' )
770+ self .assertEqual (t .ngettext ('foo' , 'foos' , 1 ),
771+ 'ngettext: foo, foos, 1' )
772+ self .assertEqual (t .pgettext ('context' , 'foo' ),
773+ 'pgettext: context, foo' )
774+ self .assertEqual (t .npgettext ('context' , 'foo' , 'foos' , 1 ),
775+ 'npgettext: context, foo, foos, 1' )
776+
777+ def test_gnu_translations_fallback (self ):
778+ with open (MOFILE , 'rb' ) as fp :
779+ t = gettext .GNUTranslations (fp )
780+ t .add_fallback (FallbackTranslations ())
781+ self .assertEqual (t .gettext ('foo' ), 'gettext: foo' )
782+ self .assertEqual (t .ngettext ('foo' , 'foos' , 1 ),
783+ 'ngettext: foo, foos, 1' )
784+ self .assertEqual (t .pgettext ('context' , 'foo' ),
785+ 'pgettext: context, foo' )
786+ self .assertEqual (t .npgettext ('context' , 'foo' , 'foos' , 1 ),
787+ 'npgettext: context, foo, foos, 1' )
788+
789+ def test_nested_fallbacks (self ):
790+ class NestedFallback (gettext .NullTranslations ):
791+ def gettext (self , message ):
792+ if message == 'foo' :
793+ return 'fallback'
794+ return super ().gettext (message )
795+
796+ fallback1 = NestedFallback ()
797+ fallback2 = FallbackTranslations ()
798+ t = gettext .NullTranslations ()
799+ t .add_fallback (fallback1 )
800+ t .add_fallback (fallback2 )
801+
802+ self .assertEqual (fallback1 .gettext ('bar' ), 'gettext: bar' )
803+ self .assertEqual (t .gettext ('foo' ), 'fallback' )
804+ self .assertEqual (t .gettext ('bar' ), 'gettext: bar' )
805+
806+
751807class ExpandLangTestCase (unittest .TestCase ):
752808 def test_expand_lang (self ):
753809 # Test all combinations of territory, charset and
0 commit comments