i18n.py
49 lines
| 1.4 KiB
| text/x-python
|
PythonLexer
/ mercurial / i18n.py
Benoit Boissinot
|
r1400 | """ | ||
i18n.py - internationalization support for mercurial | ||||
Vadim Gelfer
|
r2859 | Copyright 2005, 2006 Matt Mackall <mpm@selenic.com> | ||
Benoit Boissinot
|
r1400 | |||
This software may be used and distributed according to the terms | ||||
of the GNU General Public License, incorporated herein by reference. | ||||
""" | ||||
Matt Mackall
|
r7948 | import gettext, sys, os, encoding | ||
Martin Geisler
|
r7650 | |||
# modelled after templater.templatepath: | ||||
if hasattr(sys, 'frozen'): | ||||
module = sys.executable | ||||
else: | ||||
module = __file__ | ||||
base = os.path.dirname(module) | ||||
for dir in ('.', '..'): | ||||
localedir = os.path.normpath(os.path.join(base, dir, 'locale')) | ||||
if os.path.isdir(localedir): | ||||
break | ||||
t = gettext.translation('hg', localedir, fallback=True) | ||||
Martin Geisler
|
r7651 | |||
def gettext(message): | ||||
"""Translate message. | ||||
The message is looked up in the catalog to get a Unicode string, | ||||
which is encoded in the local encoding before being returned. | ||||
Important: message is restricted to characters in the encoding | ||||
given by sys.getdefaultencoding() which is most likely 'ascii'. | ||||
""" | ||||
# If message is None, t.ugettext will return u'None' as the | ||||
# translation whereas our callers expect us to return None. | ||||
if message is None: | ||||
return message | ||||
Matt Mackall
|
r7948 | # We cannot just run the text through encoding.tolocal since that | ||
# leads to infinite recursion when encoding._encoding is invalid. | ||||
Martin Geisler
|
r7651 | try: | ||
u = t.ugettext(message) | ||||
Matt Mackall
|
r7948 | return u.encode(encoding.encoding, "replace") | ||
Martin Geisler
|
r7651 | except LookupError: | ||
return message | ||||
Matt Mackall
|
r3888 | _ = gettext | ||
Martin Geisler
|
r7651 | |||