@@ -797,6 +797,62 @@ def test_cache(self):
797
797
self .assertEqual (t .__class__ , DummyGNUTranslations )
798
798
799
799
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
+
800
856
class ExpandLangTestCase (unittest .TestCase ):
801
857
def test_expand_lang (self ):
802
858
# Test all combinations of territory, charset and
0 commit comments