Set this test up so that we don't have to create xx/LC_MESSAGES in the

cvs tree.  It creates the directory and gettext.mo file on the fly,
from the base64 encode binary data.
This commit is contained in:
Barry Warsaw 2000-08-25 19:50:38 +00:00
parent e332c1f415
commit ff6d813657
1 changed files with 312 additions and 58 deletions

View File

@ -1,76 +1,330 @@
import os import os
import base64
import gettext import gettext
def get_qualified_path(name): def test(localedir, mofile):
"""Return a more qualified path to name""" # Test basic interface
import sys os.environ['LANGUAGE'] = 'xx'
import os
path = sys.path
try:
path = [os.path.dirname(__file__)] + path
except NameError:
pass
for dir in path:
fullname = os.path.join(dir, name)
if os.path.exists(fullname):
return fullname
return name
# Test basic interface print 'installing gettext'
os.environ['LANGUAGE'] = 'xx' gettext.install()
mofile = get_qualified_path('xx') print _('calling bindtextdomain with localedir %s') % localedir
localedir = os.path.dirname(mofile) print gettext.bindtextdomain('gettext', localedir)
print gettext.bindtextdomain()
print 'installing gettext' print gettext.textdomain('gettext')
gettext.install() print gettext.textdomain()
print _('calling bindtextdomain with localedir %s') % localedir # test some translations
print gettext.bindtextdomain('gettext', localedir) print _(u'mullusk')
print gettext.bindtextdomain() print _(r'Raymond Luxury Yach-t')
print _(ur'nudge nudge')
print gettext.textdomain('gettext') # double quotes
print gettext.textdomain() print _(u"mullusk")
print _(r"Raymond Luxury Yach-t")
print _(ur"nudge nudge")
# test some translations # triple single quotes
print _(u'mullusk') print _(u'''mullusk''')
print _(r'Raymond Luxury Yach-t') print _(r'''Raymond Luxury Yach-t''')
print _(ur'nudge nudge') print _(ur'''nudge nudge''')
# double quotes # triple double quotes
print _(u"mullusk") print _(u"""mullusk""")
print _(r"Raymond Luxury Yach-t") print _(r"""Raymond Luxury Yach-t""")
print _(ur"nudge nudge") print _(ur"""nudge nudge""")
# triple single quotes # multiline strings
print _(u'''mullusk''') print _('''This module provides internationalization and localization
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 support for your Python programs by providing an interface to the GNU
gettext message catalog library.''') gettext message catalog library.''')
print gettext.dgettext('gettext', 'nudge nudge') print gettext.dgettext('gettext', 'nudge nudge')
# dcgettext # dcgettext
##import locale ##import locale
##if gettext.dcgettext('gettext', 'nudge nudge', ##if gettext.dcgettext('gettext', 'nudge nudge',
## locale.LC_MESSAGES) <> 'wink wink': ## locale.LC_MESSAGES) <> 'wink wink':
## print _('dcgettext failed') ## print _('dcgettext failed')
# test the alternative interface # test the alternative interface
fp = open(os.path.join(mofile, 'LC_MESSAGES', 'gettext.mo'), 'rb') fp = open(os.path.join(mofile), 'rb')
t = gettext.GNUTranslations(fp) t = gettext.GNUTranslations(fp)
fp.close() fp.close()
gettext.set(t) gettext.set(t)
print t == gettext.get() print t == gettext.get()
print _('nudge nudge') 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, 'w')
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 ""