mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			324 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			324 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | ||
| import base64
 | ||
| import gettext
 | ||
| 
 | ||
| def test(localedir, mofile):
 | ||
|     # Test basic interface
 | ||
|     os.environ['LANGUAGE'] = 'xx'
 | ||
| 
 | ||
|     print 'installing gettext'
 | ||
|     gettext.install()
 | ||
| 
 | ||
|     print _('calling bindtextdomain with localedir %s') % localedir
 | ||
|     print gettext.bindtextdomain('gettext', localedir)
 | ||
|     print gettext.bindtextdomain()
 | ||
| 
 | ||
|     print gettext.textdomain('gettext')
 | ||
|     print gettext.textdomain()
 | ||
| 
 | ||
|     # test some translations
 | ||
|     print _(u'mullusk')
 | ||
|     print _(r'Raymond Luxury Yach-t')
 | ||
|     print _(ur'nudge nudge')
 | ||
| 
 | ||
|     # double quotes
 | ||
|     print _(u"mullusk")
 | ||
|     print _(r"Raymond Luxury Yach-t")
 | ||
|     print _(ur"nudge nudge")
 | ||
| 
 | ||
|     # triple single quotes
 | ||
|     print _(u'''mullusk''')
 | ||
|     print _(r'''Raymond Luxury Yach-t''')
 | ||
|     print _(ur'''nudge nudge''')
 | ||
| 
 | ||
|     # triple double quotes
 | ||
|     print _(u"""mullusk""")
 | ||
|     print _(r"""Raymond Luxury Yach-t""")
 | ||
|     print _(ur"""nudge nudge""")
 | ||
| 
 | ||
|     # multiline strings
 | ||
|     print _('''This module provides internationalization and localization
 | ||
| support for your Python programs by providing an interface to the GNU
 | ||
| gettext message catalog library.''')
 | ||
| 
 | ||
|     print gettext.dgettext('gettext', 'nudge nudge')
 | ||
| 
 | ||
|     # test the alternative interface
 | ||
|     fp = open(os.path.join(mofile), 'rb')
 | ||
|     t = gettext.GNUTranslations(fp)
 | ||
|     fp.close()
 | ||
| 
 | ||
|     gettext.set(t)
 | ||
|     print t == gettext.get()
 | ||
| 
 | ||
|     print _('nudge nudge')
 | ||
| 
 | ||
| GNU_MO_DATA = '''\
 | ||
| 3hIElQAAAAAFAAAAHAAAAEQAAAAHAAAAbAAAAAAAAACIAAAAFQAAAIkAAAChAAAAnwAAAAcAAABB
 | ||
| AQAACwAAAEkBAAAWAQAAVQEAABYAAABsAgAAoQAAAIMCAAAFAAAAJQMAAAkAAAArAwAAAQAAAAQA
 | ||
| AAACAAAAAAAAAAUAAAAAAAAAAwAAAABSYXltb25kIEx1eHVyeSBZYWNoLXQAVGhpcyBtb2R1bGUg
 | ||
| cHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZv
 | ||
| ciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBH
 | ||
| TlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4AbXVsbHVzawBudWRnZSBudWRnZQBQ
 | ||
| cm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1SZXZpc2lvbi1EYXRlOiBGcmkgQXVnIDE4IDIwOjQ1
 | ||
| OjAzIDIwMDAKTGFzdC1UcmFuc2xhdG9yOiBCYXJyeSBXYXJzYXcgPGJ3YXJzYXdAYmVvcGVuLmNv
 | ||
| bT4KTGFuZ3VhZ2UtVGVhbTogWFggPHB5dGhvbi1kZXZAcHl0aG9uLm9yZz4KTUlNRS1WZXJzaW9u
 | ||
| OiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWVuCkNvbnRlbnQtVHJhbnNm
 | ||
| ZXItRW5jb2Rpbmc6IG5vbmUKR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4xCgBUaHJvYXR3
 | ||
| b2JibGVyIE1hbmdyb3ZlAEd1dmYgemJxaHlyIGNlYml2cXJmIHZhZ3JlYW5ndmJhbnl2bW5ndmJh
 | ||
| IG5hcSB5YnBueXZtbmd2YmEKZmhjY2JlZyBzYmUgbGJoZSBDbGd1YmEgY2VidGVuemYgb2wgY2Vi
 | ||
| aXZxdmF0IG5hIHZhZ3Jlc25wciBnYiBndXIgVEFICnRyZ2dya2cgenJmZm50ciBwbmdueWJ0IHl2
 | ||
| b2VuZWwuAGJhY29uAHdpbmsgd2luawA=
 | ||
| '''
 | ||
| 
 | ||
| SOLARIS_MO_DATA = '''\
 | ||
| AAAACAAAABEAAAIXAAAB0gAAARD///+d////nQAAAAAAAAAAAAAAAAAAAAIAAAAkAAAAAf///53/
 | ||
| //+dAAAAQgAAAAIAAAABAAAABQAAAGgAAAAD////nf///50AAAB0AAAADQAAAAQAAAAGAAAAmAAA
 | ||
| AA7///+dAAAABwAAAKAAAAAU////nf///50AAAC5AAAAFQAAAAMAAAAMAAAAywAAABb///+d////
 | ||
| nQAAANsAAAAXAAAACQAAAAsAAADsAAAAGP///53///+dAAAA/wAAABkAAAAKAAAADgAAAScAAAAa
 | ||
| ////nf///50AAAFDAAAAGwAAAA0AAAAPAAABXgAAABz///+dAAAAEAAAAgAAAAC+////nf///50A
 | ||
| AAIWAAAA1XRleHQgZG9tYWluIGRpZG4ndCBnZXQgc2V0IHByb3Blcmx5AHJhdyBzdHJpbmcgdHJh
 | ||
| bnNsYXRpb24gZmFpbGVkAHJhdyBVbmljb2RlIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbnVk
 | ||
| Z2UgbnVkZ2UAbXVsdGlsaW5lIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbXVsbHVzawBnb3Qg
 | ||
| dW5leHBlY3RlZCBsb2NhbGVkaXIAZ2V0dGV4dCBpbnN0YWxsZWQAZGdldHRleHQgZmFpbGVkAGRj
 | ||
| Z2V0dGV4dCBmYWlsZWQAY2FsbGluZyB0ZXh0ZG9tYWluAGNhbGxpbmcgYmluZHRleHRkb21haW4g
 | ||
| d2l0aCBsb2NhbGRpciAlcwBiaW5kdGV4dGRvbWFpbihOb25lKSBmYWlsZWQAVW5pY29kZSB0cmFu
 | ||
| c2xhdGlvbiBmYWlsZWQAVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24g
 | ||
| YW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZvciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92
 | ||
| aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBHTlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGli
 | ||
| cmFyeS4AUmF5bW9uZCBMdXh1cnkgWWFjaC10AAAAAAB3aW5rIHdpbmsAAGJhY29uAAAAAAAAAAAA
 | ||
| R3V2ZiB6YnFoeXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZtbmd2YmEgbmFxIHlicG55dm1uZ3Zi
 | ||
| YQpmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVz
 | ||
| bnByIGdiIGd1ciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4AVGhyb2F0d29i
 | ||
| YmxlciBNYW5ncm92ZQBQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTgpQTy1SZXZp
 | ||
| c2lvbi1EYXRlOiAyMDAwLTA4LTE4IDIxOjAxLTA0OjAwCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBO
 | ||
| QU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpN
 | ||
| SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNF
 | ||
| VApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBFTkNPRElORwoA
 | ||
| '''
 | ||
| 
 | ||
| LOCALEDIR = os.path.join('xx', 'LC_MESSAGES')
 | ||
| MOFILE = os.path.join(LOCALEDIR, 'gettext.mo')
 | ||
| 
 | ||
| def setup():
 | ||
|     os.makedirs(LOCALEDIR)
 | ||
|     fp = open(MOFILE, 'wb')
 | ||
|     fp.write(base64.decodestring(GNU_MO_DATA))
 | ||
|     fp.close()
 | ||
| 
 | ||
| def teardown():
 | ||
|     os.unlink(MOFILE)
 | ||
|     os.removedirs(LOCALEDIR)
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| try:
 | ||
|     setup()
 | ||
|     test('.', MOFILE)
 | ||
| finally:
 | ||
|     teardown()
 | ||
|     pass
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| # For reference, here's the .pot and .po files used to created the .mo data
 | ||
| # above.  The .pot file was generated by pygettext.
 | ||
| 
 | ||
| # =============================== messages.pot
 | ||
| 
 | ||
| ### SOME DESCRIPTIVE TITLE.
 | ||
| ### Copyright (C) YEAR ORGANIZATION
 | ||
| ### FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 | ||
| ###
 | ||
| ##msgid ""
 | ||
| ##msgstr ""
 | ||
| ##"Project-Id-Version: PACKAGE VERSION\n"
 | ||
| ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n"
 | ||
| ##"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | ||
| ##"Language-Team: LANGUAGE <LL@li.org>\n"
 | ||
| ##"MIME-Version: 1.0\n"
 | ||
| ##"Content-Type: text/plain; charset=CHARSET\n"
 | ||
| ##"Content-Transfer-Encoding: ENCODING\n"
 | ||
| ##"Generated-By: pygettext.py 1.1\n"
 | ||
| 
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:34
 | ||
| ##msgid "calling textdomain"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:94
 | ||
| ##msgid "dgettext failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:25
 | ||
| ##msgid "gettext installed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:32
 | ||
| ##msgid "bindtextdomain(None) failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54
 | ||
| ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74
 | ||
| ##msgid "Raymond Luxury Yach-t"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51
 | ||
| ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71
 | ||
| ##msgid "mullusk"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:38
 | ||
| ##msgid "text domain didn't get set properly"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:98
 | ||
| ##msgid "dcgettext failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57
 | ||
| ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77
 | ||
| ##msgid "nudge nudge"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55
 | ||
| ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75
 | ||
| ##msgid "raw string translation failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:30
 | ||
| ##msgid "got unexpected localedir"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58
 | ||
| ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78
 | ||
| ##msgid "raw Unicode string translation failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52
 | ||
| ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72
 | ||
| ##msgid "Unicode translation failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:90
 | ||
| ##msgid "multiline string translation failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:81
 | ||
| ##msgid ""
 | ||
| ##"This module provides internationalization and localization\n"
 | ||
| ##"support for your Python programs by providing an interface to the GNU\n"
 | ||
| ##"gettext message catalog library."
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:26
 | ||
| ##msgid "calling bindtextdomain with localdir %s"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| # =============================== messages.po
 | ||
| 
 | ||
| ### Dummy translation for Python's test_gettext.py module.
 | ||
| ### Copyright (C) 2000 BeOpen.com
 | ||
| ### Barry Warsaw <bwarsaw@beopen.com>, 2000.
 | ||
| ###
 | ||
| ###, fuzzy
 | ||
| ##msgid ""
 | ||
| ##msgstr ""
 | ||
| ##"Project-Id-Version: PACKAGE VERSION\n"
 | ||
| ##"PO-Revision-Date: 2000-08-18 21:01-04:00\n"
 | ||
| ##"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | ||
| ##"Language-Team: LANGUAGE <LL@li.org>\n"
 | ||
| ##"MIME-Version: 1.0\n"
 | ||
| ##"Content-Type: text/plain; charset=CHARSET\n"
 | ||
| ##"Content-Transfer-Encoding: ENCODING\n"
 | ||
| 
 | ||
| ### SOME DESCRIPTIVE TITLE.
 | ||
| ### Copyright (C) YEAR ORGANIZATION
 | ||
| ### FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 | ||
| ###
 | ||
| ##msgid ""
 | ||
| ##msgstr ""
 | ||
| ##"Project-Id-Version: 2.0\n"
 | ||
| ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n"
 | ||
| ##"Last-Translator: Barry Warsaw <bwarsaw@beopen.com>\n"
 | ||
| ##"Language-Team: XX <python-dev@python.org>\n"
 | ||
| ##"MIME-Version: 1.0\n"
 | ||
| ##"Content-Type: text/plain; charset=en\n"
 | ||
| ##"Content-Transfer-Encoding: none\n"
 | ||
| ##"Generated-By: pygettext.py 1.1\n"
 | ||
| 
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:34
 | ||
| ##msgid "calling textdomain"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:94
 | ||
| ##msgid "dgettext failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:25
 | ||
| ##msgid "gettext installed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:32
 | ||
| ##msgid "bindtextdomain(None) failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54
 | ||
| ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74
 | ||
| ##msgid "Raymond Luxury Yach-t"
 | ||
| ##msgstr "Throatwobbler Mangrove"
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51
 | ||
| ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71
 | ||
| ##msgid "mullusk"
 | ||
| ##msgstr "bacon"
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:38
 | ||
| ##msgid "text domain didn't get set properly"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:98
 | ||
| ##msgid "dcgettext failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57
 | ||
| ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77
 | ||
| ##msgid "nudge nudge"
 | ||
| ##msgstr "wink wink"
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55
 | ||
| ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75
 | ||
| ##msgid "raw string translation failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:30
 | ||
| ##msgid "got unexpected localedir"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58
 | ||
| ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78
 | ||
| ##msgid "raw Unicode string translation failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52
 | ||
| ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72
 | ||
| ##msgid "Unicode translation failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:90
 | ||
| ##msgid "multiline string translation failed"
 | ||
| ##msgstr ""
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:81
 | ||
| ##msgid ""
 | ||
| ##"This module provides internationalization and localization\n"
 | ||
| ##"support for your Python programs by providing an interface to the GNU\n"
 | ||
| ##"gettext message catalog library."
 | ||
| ##msgstr "Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n"
 | ||
| ##"fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n"
 | ||
| ##"trggrkg zrffntr pngnybt yvoenel."
 | ||
| 
 | ||
| ###: Lib/test/test_gettext.py:26
 | ||
| ##msgid "calling bindtextdomain with localdir %s"
 | ||
| ##msgstr ""
 | 
