##// END OF EJS Templates
i18n: encode output in user's local encoding...
Martin Geisler -
r7651:5b5036ef default
parent child Browse files
Show More
@@ -1,26 +1,51 b''
1 """
1 """
2 i18n.py - internationalization support for mercurial
2 i18n.py - internationalization support for mercurial
3
3
4 Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
4 Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
5
5
6 This software may be used and distributed according to the terms
6 This software may be used and distributed according to the terms
7 of the GNU General Public License, incorporated herein by reference.
7 of the GNU General Public License, incorporated herein by reference.
8 """
8 """
9
9
10 import gettext, sys, os
10 import gettext, sys, os
11
11
12 # modelled after templater.templatepath:
12 # modelled after templater.templatepath:
13 if hasattr(sys, 'frozen'):
13 if hasattr(sys, 'frozen'):
14 module = sys.executable
14 module = sys.executable
15 else:
15 else:
16 module = __file__
16 module = __file__
17
17
18 base = os.path.dirname(module)
18 base = os.path.dirname(module)
19 for dir in ('.', '..'):
19 for dir in ('.', '..'):
20 localedir = os.path.normpath(os.path.join(base, dir, 'locale'))
20 localedir = os.path.normpath(os.path.join(base, dir, 'locale'))
21 if os.path.isdir(localedir):
21 if os.path.isdir(localedir):
22 break
22 break
23
23
24 t = gettext.translation('hg', localedir, fallback=True)
24 t = gettext.translation('hg', localedir, fallback=True)
25 gettext = t.gettext
25
26 def gettext(message):
27 """Translate message.
28
29 The message is looked up in the catalog to get a Unicode string,
30 which is encoded in the local encoding before being returned.
31
32 Important: message is restricted to characters in the encoding
33 given by sys.getdefaultencoding() which is most likely 'ascii'.
34 """
35 # If message is None, t.ugettext will return u'None' as the
36 # translation whereas our callers expect us to return None.
37 if message is None:
38 return message
39
40 # We cannot just run the text through util.tolocal since that
41 # leads to infinite recursion when util._encoding is invalid.
42 try:
43 u = t.ugettext(message)
44 return u.encode(util._encoding, "replace")
45 except LookupError:
46 return message
47
26 _ = gettext
48 _ = gettext
49
50 # Moved after _ because of circular import.
51 import util
General Comments 0
You need to be logged in to leave comments. Login now