1
# i18n.py - internationalization support for mercurial
3
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
5
# This software may be used and distributed according to the terms of the
6
# GNU General Public License version 2 or any later version.
9
import gettext, sys, os
11
# modelled after templater.templatepath:
12
if hasattr(sys, 'frozen'):
13
module = sys.executable
17
base = os.path.dirname(module)
18
for dir in ('.', '..'):
19
localedir = os.path.join(base, dir, 'locale')
20
if os.path.isdir(localedir):
23
t = gettext.translation('hg', localedir, fallback=True)
28
The message is looked up in the catalog to get a Unicode string,
29
which is encoded in the local encoding before being returned.
31
Important: message is restricted to characters in the encoding
32
given by sys.getdefaultencoding() which is most likely 'ascii'.
34
# If message is None, t.ugettext will return u'None' as the
35
# translation whereas our callers expect us to return None.
39
paragraphs = message.split('\n\n')
40
# Be careful not to translate the empty string -- it holds the
41
# meta data of the .po file.
42
u = u'\n\n'.join([p and t.ugettext(p) or '' for p in paragraphs])
44
# encoding.tolocal cannot be used since it will first try to
45
# decode the Unicode string. Calling u.decode(enc) really
46
# means u.encode(sys.getdefaultencoding()).decode(enc). Since
47
# the Python encoding defaults to 'ascii', this fails if the
48
# translated string use non-ASCII characters.
49
return u.encode(encoding.encoding, "replace")
51
# An unknown encoding results in a LookupError.
54
if 'HGPLAIN' in os.environ:
55
_ = lambda message: message