@@ -748,6 +748,62 @@ def test_cache(self):
748
748
self .assertEqual (t .__class__ , DummyGNUTranslations )
749
749
750
750
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
+
751
807
class ExpandLangTestCase (unittest .TestCase ):
752
808
def test_expand_lang (self ):
753
809
# Test all combinations of territory, charset and
0 commit comments