test_gettext.py revision 7fa886df3622bbedbeb9c2486a8af5f05334a928
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') 61d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 62d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 63a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass GettextBaseTest(unittest.TestCase): 64a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw def setUp(self): 65a0e0cd3013840299a789f05be239d6ecb6387cdfNeal Norwitz if not os.path.isdir(LOCALEDIR): 66a0e0cd3013840299a789f05be239d6ecb6387cdfNeal Norwitz os.makedirs(LOCALEDIR) 677fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo with open(MOFILE, 'wb') as fp: 687fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo fp.write(base64.decodebytes(GNU_MO_DATA)) 697fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo with open(UMOFILE, 'wb') as fp: 707fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo fp.write(base64.decodebytes(UMO_DATA)) 717fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo with open(MMOFILE, 'wb') as fp: 727fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo fp.write(base64.decodebytes(MMO_DATA)) 73155374d95d8ecd235d3a3edd92dd6f6a23d59f11Walter Dörwald self.env = support.EnvironmentVarGuard() 74155374d95d8ecd235d3a3edd92dd6f6a23d59f11Walter Dörwald self.env['LANGUAGE'] = 'xx' 7537a89334da1fbe5b30f5a03a97b8f8c2a59adc1bÉric Araujo gettext._translations.clear() 76a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw 77a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw def tearDown(self): 78155374d95d8ecd235d3a3edd92dd6f6a23d59f11Walter Dörwald self.env.__exit__() 79155374d95d8ecd235d3a3edd92dd6f6a23d59f11Walter Dörwald del self.env 804aebbb044942ad17d761491b46ff05b6ab8387c9Brett Cannon shutil.rmtree(os.path.split(LOCALEDIR)[0]) 81d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 82ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw 83a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass GettextTestCase1(GettextBaseTest): 84d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def setUp(self): 85a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw GettextBaseTest.setUp(self) 86d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis self.localedir = os.curdir 87d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis self.mofile = MOFILE 88d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis gettext.install('gettext', self.localedir) 89ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw 90d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_some_translations(self): 91a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 92d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # test some translations 93a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_('albatross'), 'albatross') 94ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(_('mullusk'), 'bacon') 95a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_(r'Raymond Luxury Yach-t'), 'Throatwobbler Mangrove') 96ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(_(r'nudge nudge'), 'wink wink') 97d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 98d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_double_quotes(self): 99a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 100d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # double quotes 101a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_("albatross"), 'albatross') 102ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(_("mullusk"), 'bacon') 103a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_(r"Raymond Luxury Yach-t"), 'Throatwobbler Mangrove') 104ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(_(r"nudge nudge"), 'wink wink') 105d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 106d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_triple_single_quotes(self): 107a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 108d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # triple single quotes 109a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_('''albatross'''), 'albatross') 110ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(_('''mullusk'''), 'bacon') 111a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_(r'''Raymond Luxury Yach-t'''), 'Throatwobbler Mangrove') 112ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(_(r'''nudge nudge'''), 'wink wink') 113d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 114d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_triple_double_quotes(self): 115a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 116d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # triple double quotes 117a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_("""albatross"""), 'albatross') 118ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(_("""mullusk"""), 'bacon') 119a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_(r"""Raymond Luxury Yach-t"""), 'Throatwobbler Mangrove') 120ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(_(r"""nudge nudge"""), 'wink wink') 121d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 122d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_multiline_strings(self): 123a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 124d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # multiline strings 125a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_('''This module provides internationalization and localization 1269e035921494cb8f101c3bfc22956fa968c6ab41fBarry Warsawsupport for your Python programs by providing an interface to the GNU 127a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawgettext message catalog library.'''), 128a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw '''Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba 129d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwisfhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH 130a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawtrggrkg zrffntr pngnybt yvoenel.''') 131ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw 132d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_the_alternative_interface(self): 133a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 134d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # test the alternative interface 1357fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo with open(self.mofile, 'rb') as fp: 1367fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo t = gettext.GNUTranslations(fp) 137a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw # Install the translation object 138d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis t.install() 139a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_('nudge nudge'), 'wink wink') 140a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw # Try unicode return type 141801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson t.install() 142a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(_('mullusk'), 'bacon') 143602b9ba6b37c4ac4ed445f8c9e9dccd68d631899Georg Brandl # Test installation of other methods 1441a3284ed69d545e4ef59869998cb8c29233a45faGeorg Brandl import builtins 145801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson t.install(names=["gettext", "lgettext"]) 146801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson eq(_, t.gettext) 147801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson eq(builtins.gettext, t.gettext) 148602b9ba6b37c4ac4ed445f8c9e9dccd68d631899Georg Brandl eq(lgettext, t.lgettext) 1491a3284ed69d545e4ef59869998cb8c29233a45faGeorg Brandl del builtins.gettext 1501a3284ed69d545e4ef59869998cb8c29233a45faGeorg Brandl del builtins.lgettext 151d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 152ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw 153a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass GettextTestCase2(GettextBaseTest): 154d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def setUp(self): 155a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw GettextBaseTest.setUp(self) 156d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis self.localedir = os.curdir 157a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw # Set up the bindings 158d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis gettext.bindtextdomain('gettext', self.localedir) 159d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis gettext.textdomain('gettext') 160a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw # For convenience 161d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis self._ = gettext.gettext 16264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 163d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_bindtextdomain(self): 164a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw self.assertEqual(gettext.bindtextdomain('gettext'), self.localedir) 16564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 166d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_textdomain(self): 167a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw self.assertEqual(gettext.textdomain(), 'gettext') 16864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 169d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_some_translations(self): 170a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 171d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # test some translations 172a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._('albatross'), 'albatross') 173ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._('mullusk'), 'bacon') 174a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._(r'Raymond Luxury Yach-t'), 'Throatwobbler Mangrove') 175ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._(r'nudge nudge'), 'wink wink') 17664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 177d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_double_quotes(self): 178a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 179d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # double quotes 180a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._("albatross"), 'albatross') 181ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._("mullusk"), 'bacon') 182a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._(r"Raymond Luxury Yach-t"), 'Throatwobbler Mangrove') 183ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._(r"nudge nudge"), 'wink wink') 184d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 185d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_triple_single_quotes(self): 186a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 187d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # triple single quotes 188a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._('''albatross'''), 'albatross') 189ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._('''mullusk'''), 'bacon') 190a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._(r'''Raymond Luxury Yach-t'''), 'Throatwobbler Mangrove') 191ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._(r'''nudge nudge'''), 'wink wink') 192d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 193d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_triple_double_quotes(self): 194a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 195d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # triple double quotes 196a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._("""albatross"""), 'albatross') 197ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._("""mullusk"""), 'bacon') 198a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._(r"""Raymond Luxury Yach-t"""), 'Throatwobbler Mangrove') 199ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._(r"""nudge nudge"""), 'wink wink') 200d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 201d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_multiline_strings(self): 202a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 203d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # multiline strings 204a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(self._('''This module provides internationalization and localization 20564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawsupport for your Python programs by providing an interface to the GNU 206a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawgettext message catalog library.'''), 207a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw '''Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba 208d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwisfhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH 209a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawtrggrkg zrffntr pngnybt yvoenel.''') 21064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 21164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 212a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass PluralFormsTestCase(GettextBaseTest): 213d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def setUp(self): 214a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw GettextBaseTest.setUp(self) 215d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis self.mofile = MOFILE 216ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw 217d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_plural_forms1(self): 218a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 219d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis x = gettext.ngettext('There is %s file', 'There are %s files', 1) 220a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(x, 'Hay %s fichero') 221d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis x = gettext.ngettext('There is %s file', 'There are %s files', 2) 222a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(x, 'Hay %s ficheros') 223ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw 224d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_plural_forms2(self): 225a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 2267fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo with open(self.mofile, 'rb') as fp: 2277fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo t = gettext.GNUTranslations(fp) 228d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis x = t.ngettext('There is %s file', 'There are %s files', 1) 229a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(x, 'Hay %s fichero') 230d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis x = t.ngettext('There is %s file', 'There are %s files', 2) 231a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(x, 'Hay %s ficheros') 232d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 233d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_hu(self): 234a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 235d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis f = gettext.c2py('0') 236d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis s = ''.join([ str(f(x)) for x in range(200) ]) 237a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(s, "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") 238d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 239d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_de(self): 240a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 241d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis f = gettext.c2py('n != 1') 242d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis s = ''.join([ str(f(x)) for x in range(200) ]) 243a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(s, "10111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111") 244d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 245d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_fr(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, "00111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111") 250ff6d8136574e9f4e1b11f75a945af5f8ab44a6fdBarry Warsaw 251d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_gd(self): 252a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 253d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis f = gettext.c2py('n==1 ? 0 : n==2 ? 1 : 2') 254d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis s = ''.join([ str(f(x)) for x in range(200) ]) 255a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(s, "20122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222") 256d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 257d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_gd2(self): 258a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 259d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # Tests the combination of parentheses and "?:" 260d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis f = gettext.c2py('n==1 ? 0 : (n==2 ? 1 : 2)') 261d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis s = ''.join([ str(f(x)) for x in range(200) ]) 262a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(s, "20122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222") 263d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 264d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_lt(self): 265a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 266d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2') 267d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis s = ''.join([ str(f(x)) for x in range(200) ]) 268a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(s, "20111111112222222222201111111120111111112011111111201111111120111111112011111111201111111120111111112011111111222222222220111111112011111111201111111120111111112011111111201111111120111111112011111111") 269d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 270d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_ru(self): 271a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 272d899605e30eef8e77f70184eac15fad1bf770586Martin 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') 273d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis s = ''.join([ str(f(x)) for x in range(200) ]) 274a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(s, "20111222222222222222201112222220111222222011122222201112222220111222222011122222201112222220111222222011122222222222222220111222222011122222201112222220111222222011122222201112222220111222222011122222") 275d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 276d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_pl(self): 277a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 278d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis f = gettext.c2py('n==1 ? 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, "20111222222222222222221112222222111222222211122222221112222222111222222211122222221112222222111222222211122222222222222222111222222211122222221112222222111222222211122222221112222222111222222211122222") 281d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 282d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_sl(self): 283a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 284d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis f = gettext.c2py('n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3') 285d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis s = ''.join([ str(f(x)) for x in range(200) ]) 286a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq(s, "30122333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333012233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333") 287d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 288d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis def test_security(self): 289a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw raises = self.assertRaises 290d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis # Test for a dangerous expression 291a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw raises(ValueError, gettext.c2py, "os.chmod('/etc/passwd',0777)") 292a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw 293a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw 294a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawclass UnicodeTranslationsTest(GettextBaseTest): 295a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw def setUp(self): 296a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw GettextBaseTest.setUp(self) 2977fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo with open(UMOFILE, 'rb') as fp: 298edb155fda199f7fa481d0020e911a6eec0705dfaBarry Warsaw self.t = gettext.GNUTranslations(fp) 299801844d6fc8b48cfa969dd2573bd522a2b26f974Benjamin Peterson self._ = self.t.gettext 300d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 301a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw def test_unicode_msgid(self): 302c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson unless = self.assertTrue 303ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum unless(isinstance(self._(''), str)) 304ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum unless(isinstance(self._(''), str)) 305d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 306a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw def test_unicode_msgstr(self): 307a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw eq = self.assertEqual 308ef87d6ed94780fe00250a551031023aeb2898365Guido van Rossum eq(self._('ab\xde'), '\xa4yz') 309d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 310d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 311e960e22579838419541357712bbbc3317c219071Barry Warsawclass WeirdMetadataTest(GettextBaseTest): 312e960e22579838419541357712bbbc3317c219071Barry Warsaw def setUp(self): 313e960e22579838419541357712bbbc3317c219071Barry Warsaw GettextBaseTest.setUp(self) 3147fa886df3622bbedbeb9c2486a8af5f05334a928Éric Araujo with open(MMOFILE, 'rb') as fp: 315e960e22579838419541357712bbbc3317c219071Barry Warsaw try: 316e960e22579838419541357712bbbc3317c219071Barry Warsaw self.t = gettext.GNUTranslations(fp) 317e960e22579838419541357712bbbc3317c219071Barry Warsaw except: 318e960e22579838419541357712bbbc3317c219071Barry Warsaw self.tearDown() 319e960e22579838419541357712bbbc3317c219071Barry Warsaw raise 320e960e22579838419541357712bbbc3317c219071Barry Warsaw 321e960e22579838419541357712bbbc3317c219071Barry Warsaw def test_weird_metadata(self): 322e960e22579838419541357712bbbc3317c219071Barry Warsaw info = self.t.info() 3236ae5d7f2a132aa9690bfb59b8eebcc1fb7c792c8Christian Heimes self.assertEqual(len(info), 9) 324e960e22579838419541357712bbbc3317c219071Barry Warsaw self.assertEqual(info['last-translator'], 325e960e22579838419541357712bbbc3317c219071Barry Warsaw 'John Doe <jdoe@example.com>\nJane Foobar <jfoobar@example.com>') 326e960e22579838419541357712bbbc3317c219071Barry Warsaw 327e960e22579838419541357712bbbc3317c219071Barry Warsaw 3286108bf5ed002925f2092deb025f336d8c2024299Éric Araujoclass DummyGNUTranslations(gettext.GNUTranslations): 3296108bf5ed002925f2092deb025f336d8c2024299Éric Araujo def foo(self): 3306108bf5ed002925f2092deb025f336d8c2024299Éric Araujo return 'foo' 3316108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3326108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3336108bf5ed002925f2092deb025f336d8c2024299Éric Araujoclass GettextCacheTestCase(GettextBaseTest): 3346108bf5ed002925f2092deb025f336d8c2024299Éric Araujo def test_cache(self): 3356108bf5ed002925f2092deb025f336d8c2024299Éric Araujo self.localedir = os.curdir 3366108bf5ed002925f2092deb025f336d8c2024299Éric Araujo self.mofile = MOFILE 3376108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3386108bf5ed002925f2092deb025f336d8c2024299Éric Araujo self.assertEqual(len(gettext._translations), 0) 3396108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3406108bf5ed002925f2092deb025f336d8c2024299Éric Araujo t = gettext.translation('gettext', self.localedir) 3416108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3426108bf5ed002925f2092deb025f336d8c2024299Éric Araujo self.assertEqual(len(gettext._translations), 1) 3436108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3446108bf5ed002925f2092deb025f336d8c2024299Éric Araujo t = gettext.translation('gettext', self.localedir, 3456108bf5ed002925f2092deb025f336d8c2024299Éric Araujo class_=DummyGNUTranslations) 3466108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3476108bf5ed002925f2092deb025f336d8c2024299Éric Araujo self.assertEqual(len(gettext._translations), 2) 3486108bf5ed002925f2092deb025f336d8c2024299Éric Araujo self.assertEqual(t.__class__, DummyGNUTranslations) 3496108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3506108bf5ed002925f2092deb025f336d8c2024299Éric Araujo # Calling it again doesn't add to the cache 3516108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3526108bf5ed002925f2092deb025f336d8c2024299Éric Araujo t = gettext.translation('gettext', self.localedir, 3536108bf5ed002925f2092deb025f336d8c2024299Éric Araujo class_=DummyGNUTranslations) 3546108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3556108bf5ed002925f2092deb025f336d8c2024299Éric Araujo self.assertEqual(len(gettext._translations), 2) 3566108bf5ed002925f2092deb025f336d8c2024299Éric Araujo self.assertEqual(t.__class__, DummyGNUTranslations) 3576108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 3586108bf5ed002925f2092deb025f336d8c2024299Éric Araujo 359a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawdef test_main(): 360ee8712cda46338d223509cc5751fd36509ad3860Benjamin Peterson support.run_unittest(__name__) 361004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 362a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawif __name__ == '__main__': 363a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw test_main() 364a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw 365a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw 366a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# For reference, here's the .po file used to created the GNU_MO_DATA above. 367d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# 368d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# The original version was automatically generated from the sources with 369d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# pygettext. Later it was manually modified to add plural forms support. 37064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 37164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw''' 372a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Dummy translation for the Python test_gettext.py module. 373191487351abb5d2b7daf9d839ca2b3a3c7fdc07bBarry Warsaw# Copyright (C) 2001 Python Software Foundation 374191487351abb5d2b7daf9d839ca2b3a3c7fdc07bBarry Warsaw# Barry Warsaw <barry@python.org>, 2000. 37564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw# 37664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "" 37764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "" 37864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"Project-Id-Version: 2.0\n" 379a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"PO-Revision-Date: 2003-04-11 14:32-0400\n" 380d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis"Last-Translator: J. David Ibanez <j-david@noos.fr>\n" 38164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"Language-Team: XX <python-dev@python.org>\n" 38264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"MIME-Version: 1.0\n" 383d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis"Content-Type: text/plain; charset=iso-8859-1\n" 384d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis"Content-Transfer-Encoding: 8bit\n" 38564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"Generated-By: pygettext.py 1.1\n" 386d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis"Plural-Forms: nplurals=2; plural=n!=1;\n" 38764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 38864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:19 test_gettext.py:25 test_gettext.py:31 test_gettext.py:37 38964dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:51 test_gettext.py:80 test_gettext.py:86 test_gettext.py:92 39064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:98 39164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "nudge nudge" 39264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "wink wink" 39364dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 39464dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:16 test_gettext.py:22 test_gettext.py:28 test_gettext.py:34 39564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:77 test_gettext.py:83 test_gettext.py:89 test_gettext.py:95 39664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "albatross" 39764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "" 39864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 39964dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:18 test_gettext.py:24 test_gettext.py:30 test_gettext.py:36 40064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:79 test_gettext.py:85 test_gettext.py:91 test_gettext.py:97 40164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "Raymond Luxury Yach-t" 40264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "Throatwobbler Mangrove" 40364dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 40464dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:17 test_gettext.py:23 test_gettext.py:29 test_gettext.py:35 40564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:56 test_gettext.py:78 test_gettext.py:84 test_gettext.py:90 40664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:96 40764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "mullusk" 40864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "bacon" 40964dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw 41064dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw#: test_gettext.py:40 test_gettext.py:101 41164dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgid "" 41264dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"This module provides internationalization and localization\n" 41364dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"support for your Python programs by providing an interface to the GNU\n" 41464dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"gettext message catalog library." 41564dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsawmsgstr "" 41664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n" 41764dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n" 41864dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw"trggrkg zrffntr pngnybt yvoenel." 419d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis 420d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# Manually added, as neither pygettext nor xgettext support plural forms 421d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwis# in Python. 422d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwismsgid "There is %s file" 423d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwismsgid_plural "There are %s files" 424d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwismsgstr[0] "Hay %s fichero" 425d899605e30eef8e77f70184eac15fad1bf770586Martin v. Löwismsgstr[1] "Hay %s ficheros" 42664dab4602e17878e816ae1d3f48b2f589ceebdfbBarry Warsaw''' 427a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw 428a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Here's the second example po file example, used to generate the UMO_DATA 429a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# containing utf-8 encoded Unicode strings 430a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw 431a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw''' 432a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Dummy translation for the Python test_gettext.py module. 433a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Copyright (C) 2001 Python Software Foundation 434a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# Barry Warsaw <barry@python.org>, 2000. 435a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw# 436a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawmsgid "" 437a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawmsgstr "" 438a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Project-Id-Version: 2.0\n" 439a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"PO-Revision-Date: 2003-04-11 12:42-0400\n" 440a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Last-Translator: Barry A. WArsaw <barry@python.org>\n" 441a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Language-Team: XX <python-dev@python.org>\n" 442a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"MIME-Version: 1.0\n" 443a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Content-Type: text/plain; charset=utf-8\n" 444a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Content-Transfer-Encoding: 7bit\n" 445a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw"Generated-By: manually\n" 446a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw 447a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw#: nofile:0 448a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawmsgid "ab\xc3\x9e" 449a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsawmsgstr "\xc2\xa4yz" 450a1ce93f87cb221be9a7466c2f9d2b7dc494f458dBarry Warsaw''' 451e960e22579838419541357712bbbc3317c219071Barry Warsaw 452e960e22579838419541357712bbbc3317c219071Barry Warsaw# Here's the third example po file, used to generate MMO_DATA 453e960e22579838419541357712bbbc3317c219071Barry Warsaw 454e960e22579838419541357712bbbc3317c219071Barry Warsaw''' 455e960e22579838419541357712bbbc3317c219071Barry Warsawmsgid "" 456e960e22579838419541357712bbbc3317c219071Barry Warsawmsgstr "" 457e960e22579838419541357712bbbc3317c219071Barry Warsaw"Project-Id-Version: No Project 0.0\n" 458e960e22579838419541357712bbbc3317c219071Barry Warsaw"POT-Creation-Date: Wed Dec 11 07:44:15 2002\n" 459e960e22579838419541357712bbbc3317c219071Barry Warsaw"PO-Revision-Date: 2002-08-14 01:18:58+00:00\n" 460e960e22579838419541357712bbbc3317c219071Barry Warsaw"Last-Translator: John Doe <jdoe@example.com>\n" 461e960e22579838419541357712bbbc3317c219071Barry Warsaw"Jane Foobar <jfoobar@example.com>\n" 462e960e22579838419541357712bbbc3317c219071Barry Warsaw"Language-Team: xx <xx@example.com>\n" 463e960e22579838419541357712bbbc3317c219071Barry Warsaw"MIME-Version: 1.0\n" 464e960e22579838419541357712bbbc3317c219071Barry Warsaw"Content-Type: text/plain; charset=iso-8859-15\n" 465e960e22579838419541357712bbbc3317c219071Barry Warsaw"Content-Transfer-Encoding: quoted-printable\n" 466e960e22579838419541357712bbbc3317c219071Barry Warsaw"Generated-By: pygettext.py 1.3\n" 467e960e22579838419541357712bbbc3317c219071Barry Warsaw''' 468