[PATCH 2 of 5] i18n: encode output in user's local encoding
Martin Geisler
mg at daimi.au.dk
Fri Jan 9 18:26:42 CST 2009
# HG changeset patch
# User Martin Geisler <mg at daimi.au.dk>
# Date 1231547037 -3600
# Node ID d775f2521088ea0d69e73f79d68c9e5915f123a3
# Parent 3520f542f623f467ed5b5d16a01d7c8333333ac6
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.
diff -r 3520f542f623 -r d775f2521088 mercurial/i18n.py
--- a/mercurial/i18n.py Sat Jan 10 01:22:52 2009 +0100
+++ b/mercurial/i18n.py Sat Jan 10 01:23:57 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
More information about the Mercurial-devel
mailing list