cpython/Lib/test/test_gettext.py

325 lines
10 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, '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 ""