Mercurial > hg
changeset 7651:5b5036ef847a
i18n: encode output in user's local encoding
This makes the translated output obey the HGENCODING environment
variable or the preferred encoding as set by the LANG or LC_ALL
environment variables.
Python 2.4 has a lgettext method which is similar, except that it
doesn't know about HGENCODING or the settings in .hgrc.
author | Martin Geisler <mg@daimi.au.dk> |
---|---|
date | Thu, 15 Jan 2009 00:14:36 +0100 |
parents | 85ae7aaf08e9 |
children | 2605b2ef3f07 |
files | mercurial/i18n.py |
diffstat | 1 files changed, 26 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/i18n.py Thu Jan 15 00:12:35 2009 +0100 +++ b/mercurial/i18n.py Thu Jan 15 00:14:36 2009 +0100 @@ -22,5 +22,30 @@ break t = gettext.translation('hg', localedir, fallback=True) -gettext = t.gettext + +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 + + # We cannot just run the text through util.tolocal since that + # leads to infinite recursion when util._encoding is invalid. + try: + u = t.ugettext(message) + return u.encode(util._encoding, "replace") + except LookupError: + return message + _ = gettext + +# Moved after _ because of circular import. +import util