121
|
1 # i18n.py - internationalization support for mercurial
|
|
2 #
|
|
3 # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
|
|
4 #
|
|
5 # This software may be used and distributed according to the terms of the
|
|
6 # GNU General Public License version 2, incorporated herein by reference.
|
|
7
|
|
8 import encoding
|
|
9 import gettext, sys, os
|
|
10
|
|
11 # modelled after templater.templatepath:
|
|
12 if hasattr(sys, 'frozen'):
|
|
13 module = sys.executable
|
|
14 else:
|
|
15 module = __file__
|
|
16
|
|
17 base = os.path.dirname(module)
|
|
18 for dir in ('.', '..'):
|
|
19 localedir = os.path.normpath(os.path.join(base, dir, 'locale'))
|
|
20 if os.path.isdir(localedir):
|
|
21 break
|
|
22
|
|
23 t = gettext.translation('hg', localedir, fallback=True)
|
|
24
|
|
25 def gettext(message):
|
|
26 """Translate message.
|
|
27
|
|
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.
|
|
30
|
|
31 Important: message is restricted to characters in the encoding
|
|
32 given by sys.getdefaultencoding() which is most likely 'ascii'.
|
|
33 """
|
|
34 # If message is None, t.ugettext will return u'None' as the
|
|
35 # translation whereas our callers expect us to return None.
|
|
36 if message is None:
|
|
37 return message
|
|
38
|
|
39 # We cannot just run the text through encoding.tolocal since that
|
|
40 # leads to infinite recursion when encoding._encoding is invalid.
|
|
41 try:
|
|
42 u = t.ugettext(message)
|
|
43 return u.encode(encoding.encoding, "replace")
|
|
44 except LookupError:
|
|
45 return message
|
|
46
|
|
47 _ = gettext
|
|
48
|