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