test_gettext.py revision 801844d6fc8b48cfa969dd2573bd522a2b26f974
19e035921494cb8f101c3bfc22956fa968c6ab41fBarry Warsawimport os
2ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsawimport base64
3a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawimport shutil
49e035921494cb8f101c3bfc22956fa968c6ab41fBarry Warsawimport gettext
5d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwisimport unittest
6a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
7ee8712cda46338d223509cc5751fd36509ad3860Benjamin Petersonfrom test import support
8a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
9004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake
10d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# TODO:
11d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis#  - Add new tests, for example for "dgettext"
12d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis#  - Remove dummy tests, for example testing for single and double quotes
13d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis#    has no sense, it would have if we were testing a parser (i.e. pygettext)
14d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis#  - Tests should have only one assert.
1564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
1639478e852827a4ca6955151bf004c7a15099a4b1Guido van RossumGNU_MO_DATA = b'''\
17d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis3hIElQAAAAAGAAAAHAAAAEwAAAALAAAAfAAAAAAAAACoAAAAFQAAAKkAAAAjAAAAvwAAAKEAAADj
18d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisAAAABwAAAIUBAAALAAAAjQEAAEUBAACZAQAAFgAAAN8CAAAeAAAA9gIAAKEAAAAVAwAABQAAALcD
19d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisAAAJAAAAvQMAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAYAAAACAAAAAFJh
20d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwiseW1vbmQgTHV4dXJ5IFlhY2gtdABUaGVyZSBpcyAlcyBmaWxlAFRoZXJlIGFyZSAlcyBmaWxlcwBU
21d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisaGlzIG1vZHVsZSBwcm92aWRlcyBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9u
22d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisCnN1cHBvcnQgZm9yIHlvdXIgUHl0aG9uIHByb2dyYW1zIGJ5IHByb3ZpZGluZyBhbiBpbnRlcmZh
23d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisY2UgdG8gdGhlIEdOVQpnZXR0ZXh0IG1lc3NhZ2UgY2F0YWxvZyBsaWJyYXJ5LgBtdWxsdXNrAG51
24d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisZGdlIG51ZGdlAFByb2plY3QtSWQtVmVyc2lvbjogMi4wClBPLVJldmlzaW9uLURhdGU6IDIwMDAt
25d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisMDgtMjkgMTI6MTktMDQ6MDAKTGFzdC1UcmFuc2xhdG9yOiBKLiBEYXZpZCBJYsOhw7FleiA8ai1k
26d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisYXZpZEBub29zLmZyPgpMYW5ndWFnZS1UZWFtOiBYWCA8cHl0aG9uLWRldkBweXRob24ub3JnPgpN
27d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4
28d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisNTktMQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBub25lCkdlbmVyYXRlZC1CeTogcHlnZXR0
29d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisZXh0LnB5IDEuMQpQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uIT0xOwoAVGhyb2F0
30d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwisd29iYmxlciBNYW5ncm92ZQBIYXkgJXMgZmljaGVybwBIYXkgJXMgZmljaGVyb3MAR3V2ZiB6YnFo
31d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwiseXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZtbmd2YmEgbmFxIHlicG55dm1uZ3ZiYQpmaGNjYmVn
32d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVzbnByIGdiIGd1
33d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4AYmFjb24Ad2luayB3aW5rAA==
34d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis'''
35d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
3639478e852827a4ca6955151bf004c7a15099a4b1Guido van RossumUMO_DATA = b'''\
37a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw3hIElQAAAAACAAAAHAAAACwAAAAFAAAAPAAAAAAAAABQAAAABAAAAFEAAAAPAQAAVgAAAAQAAABm
38a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry WarsawAQAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAYWLDngBQcm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1S
39a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry WarsawZXZpc2lvbi1EYXRlOiAyMDAzLTA0LTExIDEyOjQyLTA0MDAKTGFzdC1UcmFuc2xhdG9yOiBCYXJy
40a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry WarsaweSBBLiBXQXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+Ckxhbmd1YWdlLVRlYW06IFhYIDxweXRob24t
41a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry WarsawZGV2QHB5dGhvbi5vcmc+Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFp
42a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry WarsawbjsgY2hhcnNldD11dGYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CkdlbmVyYXRl
43a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry WarsawZC1CeTogbWFudWFsbHkKAMKkeXoA
44a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw'''
45d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
4639478e852827a4ca6955151bf004c7a15099a4b1Guido van RossumMMO_DATA = b'''\
47e960e22579838419541357712bbbc3317c219071Barry Warsaw3hIElQAAAAABAAAAHAAAACQAAAADAAAALAAAAAAAAAA4AAAAeAEAADkAAAABAAAAAAAAAAAAAAAA
48e960e22579838419541357712bbbc3317c219071Barry WarsawUHJvamVjdC1JZC1WZXJzaW9uOiBObyBQcm9qZWN0IDAuMApQT1QtQ3JlYXRpb24tRGF0ZTogV2Vk
49e960e22579838419541357712bbbc3317c219071Barry WarsawIERlYyAxMSAwNzo0NDoxNSAyMDAyClBPLVJldmlzaW9uLURhdGU6IDIwMDItMDgtMTQgMDE6MTg6
50e960e22579838419541357712bbbc3317c219071Barry WarsawNTgrMDA6MDAKTGFzdC1UcmFuc2xhdG9yOiBKb2huIERvZSA8amRvZUBleGFtcGxlLmNvbT4KSmFu
51e960e22579838419541357712bbbc3317c219071Barry WarsawZSBGb29iYXIgPGpmb29iYXJAZXhhbXBsZS5jb20+Ckxhbmd1YWdlLVRlYW06IHh4IDx4eEBleGFt
52e960e22579838419541357712bbbc3317c219071Barry WarsawcGxlLmNvbT4KTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy
53e960e22579838419541357712bbbc3317c219071Barry Warsawc2V0PWlzby04ODU5LTE1CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFi
54e960e22579838419541357712bbbc3317c219071Barry WarsawbGUKR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4zCgA=
55e960e22579838419541357712bbbc3317c219071Barry Warsaw'''
56e960e22579838419541357712bbbc3317c219071Barry Warsaw
57d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisLOCALEDIR = os.path.join('xx', 'LC_MESSAGES')
58d899605e30eef8e77f70184eac15fad1bf770586Martin v. LöwisMOFILE = os.path.join(LOCALEDIR, 'gettext.mo')
59a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry WarsawUMOFILE = os.path.join(LOCALEDIR, 'ugettext.mo')
60e960e22579838419541357712bbbc3317c219071Barry WarsawMMOFILE = os.path.join(LOCALEDIR, 'metadata.mo')
614aebbb044942ad17d761491b46ff05b6ab8387c9Brett Cannontry:
624aebbb044942ad17d761491b46ff05b6ab8387c9Brett Cannon    LANG = os.environ['LANGUAGE']
634aebbb044942ad17d761491b46ff05b6ab8387c9Brett Cannonexcept:
644aebbb044942ad17d761491b46ff05b6ab8387c9Brett Cannon    LANG = 'en'
65d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
66d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
67a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass GettextBaseTest(unittest.TestCase):
68a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw    def setUp(self):
69a0e0cd3013840299a789f05be239d6ecb6387cdfNeal Norwitz        if not os.path.isdir(LOCALEDIR):
70a0e0cd3013840299a789f05be239d6ecb6387cdfNeal Norwitz            os.makedirs(LOCALEDIR)
71a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp = open(MOFILE, 'wb')
72a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp.write(base64.decodestring(GNU_MO_DATA))
73a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp.close()
74a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp = open(UMOFILE, 'wb')
75a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp.write(base64.decodestring(UMO_DATA))
76a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp.close()
77e960e22579838419541357712bbbc3317c219071Barry Warsaw        fp = open(MMOFILE, 'wb')
78e960e22579838419541357712bbbc3317c219071Barry Warsaw        fp.write(base64.decodestring(MMO_DATA))
79e960e22579838419541357712bbbc3317c219071Barry Warsaw        fp.close()
80a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        os.environ['LANGUAGE'] = 'xx'
81a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
82a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw    def tearDown(self):
834aebbb044942ad17d761491b46ff05b6ab8387c9Brett Cannon        os.environ['LANGUAGE'] = LANG
844aebbb044942ad17d761491b46ff05b6ab8387c9Brett Cannon        shutil.rmtree(os.path.split(LOCALEDIR)[0])
85d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
86ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw
87a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass GettextTestCase1(GettextBaseTest):
88d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def setUp(self):
89a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        GettextBaseTest.setUp(self)
90d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        self.localedir = os.curdir
91d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        self.mofile = MOFILE
92d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        gettext.install('gettext', self.localedir)
93ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw
94d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_some_translations(self):
95a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
96d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # test some translations
97a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_('albatross'), 'albatross')
98ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(_('mullusk'), 'bacon')
99a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_(r'Raymond Luxury Yach-t'), 'Throatwobbler Mangrove')
100ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(_(r'nudge nudge'), 'wink wink')
101d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
102d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_double_quotes(self):
103a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
104d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # double quotes
105a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_("albatross"), 'albatross')
106ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(_("mullusk"), 'bacon')
107a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_(r"Raymond Luxury Yach-t"), 'Throatwobbler Mangrove')
108ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(_(r"nudge nudge"), 'wink wink')
109d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
110d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_triple_single_quotes(self):
111a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
112d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # triple single quotes
113a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_('''albatross'''), 'albatross')
114ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(_('''mullusk'''), 'bacon')
115a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_(r'''Raymond Luxury Yach-t'''), 'Throatwobbler Mangrove')
116ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(_(r'''nudge nudge'''), 'wink wink')
117d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
118d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_triple_double_quotes(self):
119a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
120d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # triple double quotes
121a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_("""albatross"""), 'albatross')
122ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(_("""mullusk"""), 'bacon')
123a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_(r"""Raymond Luxury Yach-t"""), 'Throatwobbler Mangrove')
124ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(_(r"""nudge nudge"""), 'wink wink')
125d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
126d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_multiline_strings(self):
127a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
128d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # multiline strings
129a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_('''This module provides internationalization and localization
1309e035921494cb8f101c3bfc22956fa968c6ab41fBarry Warsawsupport for your Python programs by providing an interface to the GNU
131a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawgettext message catalog library.'''),
132a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw           '''Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba
133d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwisfhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH
134a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawtrggrkg zrffntr pngnybt yvoenel.''')
135ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw
136d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_the_alternative_interface(self):
137a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
138d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # test the alternative interface
139a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp = open(self.mofile, 'rb')
140d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        t = gettext.GNUTranslations(fp)
141d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        fp.close()
142a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        # Install the translation object
143d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        t.install()
144a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_('nudge nudge'), 'wink wink')
145a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        # Try unicode return type
146801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson        t.install()
147a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(_('mullusk'), 'bacon')
148602b9ba6b37c4ac4ed445f8c9e9dccd68d631899Georg Brandl        # Test installation of other methods
1491a3284ed69d545e4ef59869998cb8c29233a45faGeorg Brandl        import builtins
150801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson        t.install(names=["gettext", "lgettext"])
151801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson        eq(_, t.gettext)
152801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson        eq(builtins.gettext, t.gettext)
153602b9ba6b37c4ac4ed445f8c9e9dccd68d631899Georg Brandl        eq(lgettext, t.lgettext)
1541a3284ed69d545e4ef59869998cb8c29233a45faGeorg Brandl        del builtins.gettext
1551a3284ed69d545e4ef59869998cb8c29233a45faGeorg Brandl        del builtins.lgettext
156d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
157ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw
158a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass GettextTestCase2(GettextBaseTest):
159d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def setUp(self):
160a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        GettextBaseTest.setUp(self)
161d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        self.localedir = os.curdir
162a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        # Set up the bindings
163d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        gettext.bindtextdomain('gettext', self.localedir)
164d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        gettext.textdomain('gettext')
165a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        # For convenience
166d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        self._ = gettext.gettext
16764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
168d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_bindtextdomain(self):
169a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        self.assertEqual(gettext.bindtextdomain('gettext'), self.localedir)
17064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
171d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_textdomain(self):
172a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        self.assertEqual(gettext.textdomain(), 'gettext')
17364dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
174d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_some_translations(self):
175a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
176d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # test some translations
177a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._('albatross'), 'albatross')
178ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._('mullusk'), 'bacon')
179a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._(r'Raymond Luxury Yach-t'), 'Throatwobbler Mangrove')
180ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._(r'nudge nudge'), 'wink wink')
18164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
182d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_double_quotes(self):
183a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
184d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # double quotes
185a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._("albatross"), 'albatross')
186ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._("mullusk"), 'bacon')
187a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._(r"Raymond Luxury Yach-t"), 'Throatwobbler Mangrove')
188ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._(r"nudge nudge"), 'wink wink')
189d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
190d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_triple_single_quotes(self):
191a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
192d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # triple single quotes
193a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._('''albatross'''), 'albatross')
194ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._('''mullusk'''), 'bacon')
195a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._(r'''Raymond Luxury Yach-t'''), 'Throatwobbler Mangrove')
196ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._(r'''nudge nudge'''), 'wink wink')
197d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
198d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_triple_double_quotes(self):
199a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
200d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # triple double quotes
201a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._("""albatross"""), 'albatross')
202ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._("""mullusk"""), 'bacon')
203a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._(r"""Raymond Luxury Yach-t"""), 'Throatwobbler Mangrove')
204ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._(r"""nudge nudge"""), 'wink wink')
205d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
206d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_multiline_strings(self):
207a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
208d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # multiline strings
209a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(self._('''This module provides internationalization and localization
21064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawsupport for your Python programs by providing an interface to the GNU
211a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawgettext message catalog library.'''),
212a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw           '''Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba
213d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwisfhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH
214a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawtrggrkg zrffntr pngnybt yvoenel.''')
21564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
21664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
217a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass PluralFormsTestCase(GettextBaseTest):
218d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def setUp(self):
219a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        GettextBaseTest.setUp(self)
220d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        self.mofile = MOFILE
221ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw
222d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_plural_forms1(self):
223a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
224d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        x = gettext.ngettext('There is %s file', 'There are %s files', 1)
225a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(x, 'Hay %s fichero')
226d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        x = gettext.ngettext('There is %s file', 'There are %s files', 2)
227a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(x, 'Hay %s ficheros')
228ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw
229d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_plural_forms2(self):
230a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
231a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp = open(self.mofile, 'rb')
232d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        t = gettext.GNUTranslations(fp)
233d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        fp.close()
234d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        x = t.ngettext('There is %s file', 'There are %s files', 1)
235a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(x, 'Hay %s fichero')
236d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        x = t.ngettext('There is %s file', 'There are %s files', 2)
237a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(x, 'Hay %s ficheros')
238d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
239d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_hu(self):
240a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
241d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('0')
242d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
243a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
244d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
245d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_de(self):
246a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
247d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('n != 1')
248d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
249a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "10111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")
250d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
251d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_fr(self):
252a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
253d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('n>1')
254d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
255a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "00111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")
256ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw
257d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_gd(self):
258a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
259d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('n==1 ? 0 : n==2 ? 1 : 2')
260d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
261a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "20122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")
262d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
263d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_gd2(self):
264a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
265d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # Tests the combination of parentheses and "?:"
266d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('n==1 ? 0 : (n==2 ? 1 : 2)')
267d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
268a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "20122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")
269d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
270d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_lt(self):
271a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
272d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2')
273d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
274a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "20111111112222222222201111111120111111112011111111201111111120111111112011111111201111111120111111112011111111222222222220111111112011111111201111111120111111112011111111201111111120111111112011111111")
275d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
276d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_ru(self):
277a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
278d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2')
279d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
280a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "20111222222222222222201112222220111222222011122222201112222220111222222011122222201112222220111222222011122222222222222220111222222011122222201112222220111222222011122222201112222220111222222011122222")
281d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
282d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_pl(self):
283a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
284d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2')
285d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
286a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "20111222222222222222221112222222111222222211122222221112222222111222222211122222221112222222111222222211122222222222222222111222222211122222221112222222111222222211122222221112222222111222222211122222")
287d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
288d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_sl(self):
289a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
290d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        f = gettext.c2py('n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3')
291d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        s = ''.join([ str(f(x)) for x in range(200) ])
292a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq(s, "30122333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333012233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")
293d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
294d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis    def test_security(self):
295a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        raises = self.assertRaises
296d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        # Test for a dangerous expression
297a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        raises(ValueError, gettext.c2py, "os.chmod('/etc/passwd',0777)")
298a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
299a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
300a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass UnicodeTranslationsTest(GettextBaseTest):
301a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw    def setUp(self):
302a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        GettextBaseTest.setUp(self)
303a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        fp = open(UMOFILE, 'rb')
304d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis        try:
305edb155fda199f7fa481d0020e911a6eec0705dfaBarry Warsaw            self.t = gettext.GNUTranslations(fp)
306a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        finally:
307a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw            fp.close()
308801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson        self._ = self.t.gettext
309d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
310a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw    def test_unicode_msgid(self):
311a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        unless = self.failUnless
312ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        unless(isinstance(self._(''), str))
313ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        unless(isinstance(self._(''), str))
314d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
315a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw    def test_unicode_msgstr(self):
316a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw        eq = self.assertEqual
317ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum        eq(self._('ab\xde'), '\xa4yz')
318d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
319d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
320e960e22579838419541357712bbbc3317c219071Barry Warsawclass WeirdMetadataTest(GettextBaseTest):
321e960e22579838419541357712bbbc3317c219071Barry Warsaw    def setUp(self):
322e960e22579838419541357712bbbc3317c219071Barry Warsaw        GettextBaseTest.setUp(self)
323e960e22579838419541357712bbbc3317c219071Barry Warsaw        fp = open(MMOFILE, 'rb')
324e960e22579838419541357712bbbc3317c219071Barry Warsaw        try:
325e960e22579838419541357712bbbc3317c219071Barry Warsaw            try:
326e960e22579838419541357712bbbc3317c219071Barry Warsaw                self.t = gettext.GNUTranslations(fp)
327e960e22579838419541357712bbbc3317c219071Barry Warsaw            except:
328e960e22579838419541357712bbbc3317c219071Barry Warsaw                self.tearDown()
329e960e22579838419541357712bbbc3317c219071Barry Warsaw                raise
330e960e22579838419541357712bbbc3317c219071Barry Warsaw        finally:
331e960e22579838419541357712bbbc3317c219071Barry Warsaw            fp.close()
332e960e22579838419541357712bbbc3317c219071Barry Warsaw
333e960e22579838419541357712bbbc3317c219071Barry Warsaw    def test_weird_metadata(self):
334e960e22579838419541357712bbbc3317c219071Barry Warsaw        info = self.t.info()
3356ae5d7f2a132aa9690bfb59b8eebcc1fb7c792c8Christian Heimes        self.assertEqual(len(info), 9)
336e960e22579838419541357712bbbc3317c219071Barry Warsaw        self.assertEqual(info['last-translator'],
337e960e22579838419541357712bbbc3317c219071Barry Warsaw           'John Doe <jdoe@example.com>\nJane Foobar <jfoobar@example.com>')
338e960e22579838419541357712bbbc3317c219071Barry Warsaw
339e960e22579838419541357712bbbc3317c219071Barry Warsaw
340a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawdef test_main():
341ee8712cda46338d223509cc5751fd36509ad3860Benjamin Peterson    support.run_unittest(__name__)
342004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake
343a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawif __name__ == '__main__':
344a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw    test_main()
345a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
346a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
347a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# For reference, here's the .po file used to created the GNU_MO_DATA above.
348d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis#
349d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# The original version was automatically generated from the sources with
350d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# pygettext. Later it was manually modified to add plural forms support.
35164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
35264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw'''
353a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Dummy translation for the Python test_gettext.py module.
354191487351abb5d2b7daf9d839ca2b3a3c7fdc07bBarry Warsaw# Copyright (C) 2001 Python Software Foundation
355191487351abb5d2b7daf9d839ca2b3a3c7fdc07bBarry Warsaw# Barry Warsaw <barry@python.org>, 2000.
35664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#
35764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid ""
35864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr ""
35964dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"Project-Id-Version: 2.0\n"
360a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"PO-Revision-Date: 2003-04-11 14:32-0400\n"
361d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis"Last-Translator: J. David Ibanez <j-david@noos.fr>\n"
36264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"Language-Team: XX <python-dev@python.org>\n"
36364dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"MIME-Version: 1.0\n"
364d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis"Content-Type: text/plain; charset=iso-8859-1\n"
365d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis"Content-Transfer-Encoding: 8bit\n"
36664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"Generated-By: pygettext.py 1.1\n"
367d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis"Plural-Forms: nplurals=2; plural=n!=1;\n"
36864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
36964dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:19 test_gettext.py:25 test_gettext.py:31 test_gettext.py:37
37064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:51 test_gettext.py:80 test_gettext.py:86 test_gettext.py:92
37164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:98
37264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "nudge nudge"
37364dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "wink wink"
37464dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
37564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:16 test_gettext.py:22 test_gettext.py:28 test_gettext.py:34
37664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:77 test_gettext.py:83 test_gettext.py:89 test_gettext.py:95
37764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "albatross"
37864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr ""
37964dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
38064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:18 test_gettext.py:24 test_gettext.py:30 test_gettext.py:36
38164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:79 test_gettext.py:85 test_gettext.py:91 test_gettext.py:97
38264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "Raymond Luxury Yach-t"
38364dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "Throatwobbler Mangrove"
38464dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
38564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:17 test_gettext.py:23 test_gettext.py:29 test_gettext.py:35
38664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:56 test_gettext.py:78 test_gettext.py:84 test_gettext.py:90
38764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:96
38864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "mullusk"
38964dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "bacon"
39064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw
39164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:40 test_gettext.py:101
39264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid ""
39364dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"This module provides internationalization and localization\n"
39464dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"support for your Python programs by providing an interface to the GNU\n"
39564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"gettext message catalog library."
39664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr ""
39764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n"
39864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n"
39964dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"trggrkg zrffntr pngnybt yvoenel."
400d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis
401d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# Manually added, as neither pygettext nor xgettext support plural forms
402d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# in Python.
403d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwismsgid "There is %s file"
404d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwismsgid_plural "There are %s files"
405d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwismsgstr[0] "Hay %s fichero"
406d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwismsgstr[1] "Hay %s ficheros"
40764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw'''
408a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
409a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Here's the second example po file example, used to generate the UMO_DATA
410a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# containing utf-8 encoded Unicode strings
411a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
412a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw'''
413a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Dummy translation for the Python test_gettext.py module.
414a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Copyright (C) 2001 Python Software Foundation
415a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Barry Warsaw <barry@python.org>, 2000.
416a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw#
417a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawmsgid ""
418a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawmsgstr ""
419a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Project-Id-Version: 2.0\n"
420a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"PO-Revision-Date: 2003-04-11 12:42-0400\n"
421a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Last-Translator: Barry A. WArsaw <barry@python.org>\n"
422a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Language-Team: XX <python-dev@python.org>\n"
423a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"MIME-Version: 1.0\n"
424a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Content-Type: text/plain; charset=utf-8\n"
425a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Content-Transfer-Encoding: 7bit\n"
426a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Generated-By: manually\n"
427a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw
428a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw#: nofile:0
429a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawmsgid "ab\xc3\x9e"
430a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawmsgstr "\xc2\xa4yz"
431a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw'''
432e960e22579838419541357712bbbc3317c219071Barry Warsaw
433e960e22579838419541357712bbbc3317c219071Barry Warsaw# Here's the third example po file, used to generate MMO_DATA
434e960e22579838419541357712bbbc3317c219071Barry Warsaw
435e960e22579838419541357712bbbc3317c219071Barry Warsaw'''
436e960e22579838419541357712bbbc3317c219071Barry Warsawmsgid ""
437e960e22579838419541357712bbbc3317c219071Barry Warsawmsgstr ""
438e960e22579838419541357712bbbc3317c219071Barry Warsaw"Project-Id-Version: No Project 0.0\n"
439e960e22579838419541357712bbbc3317c219071Barry Warsaw"POT-Creation-Date: Wed Dec 11 07:44:15 2002\n"
440e960e22579838419541357712bbbc3317c219071Barry Warsaw"PO-Revision-Date: 2002-08-14 01:18:58+00:00\n"
441e960e22579838419541357712bbbc3317c219071Barry Warsaw"Last-Translator: John Doe <jdoe@example.com>\n"
442e960e22579838419541357712bbbc3317c219071Barry Warsaw"Jane Foobar <jfoobar@example.com>\n"
443e960e22579838419541357712bbbc3317c219071Barry Warsaw"Language-Team: xx <xx@example.com>\n"
444e960e22579838419541357712bbbc3317c219071Barry Warsaw"MIME-Version: 1.0\n"
445e960e22579838419541357712bbbc3317c219071Barry Warsaw"Content-Type: text/plain; charset=iso-8859-15\n"
446e960e22579838419541357712bbbc3317c219071Barry Warsaw"Content-Transfer-Encoding: quoted-printable\n"
447e960e22579838419541357712bbbc3317c219071Barry Warsaw"Generated-By: pygettext.py 1.3\n"
448e960e22579838419541357712bbbc3317c219071Barry Warsaw'''
449