##// END OF EJS Templates
i18n: move unrelated line out of try-except block
Martin Geisler -
r9320:884964f9 default
parent child Browse files
Show More
@@ -1,51 +1,52 b''
1 # i18n.py - internationalization support for mercurial
1 # i18n.py - internationalization support for mercurial
2 #
2 #
3 # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
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.
6 # GNU General Public License version 2, incorporated herein by reference.
7
7
8 import encoding
8 import encoding
9 import gettext, sys, os
9 import gettext, sys, os
10
10
11 # modelled after templater.templatepath:
11 # modelled after templater.templatepath:
12 if hasattr(sys, 'frozen'):
12 if hasattr(sys, 'frozen'):
13 module = sys.executable
13 module = sys.executable
14 else:
14 else:
15 module = __file__
15 module = __file__
16
16
17 base = os.path.dirname(module)
17 base = os.path.dirname(module)
18 for dir in ('.', '..'):
18 for dir in ('.', '..'):
19 localedir = os.path.normpath(os.path.join(base, dir, 'locale'))
19 localedir = os.path.normpath(os.path.join(base, dir, 'locale'))
20 if os.path.isdir(localedir):
20 if os.path.isdir(localedir):
21 break
21 break
22
22
23 t = gettext.translation('hg', localedir, fallback=True)
23 t = gettext.translation('hg', localedir, fallback=True)
24
24
25 def gettext(message):
25 def gettext(message):
26 """Translate message.
26 """Translate message.
27
27
28 The message is looked up in the catalog to get a Unicode string,
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.
29 which is encoded in the local encoding before being returned.
30
30
31 Important: message is restricted to characters in the encoding
31 Important: message is restricted to characters in the encoding
32 given by sys.getdefaultencoding() which is most likely 'ascii'.
32 given by sys.getdefaultencoding() which is most likely 'ascii'.
33 """
33 """
34 # If message is None, t.ugettext will return u'None' as the
34 # If message is None, t.ugettext will return u'None' as the
35 # translation whereas our callers expect us to return None.
35 # translation whereas our callers expect us to return None.
36 if message is None:
36 if message is None:
37 return message
37 return message
38
38
39 u = t.ugettext(message)
39 try:
40 try:
40 # encoding.tolocal cannot be used since it will first try to
41 # encoding.tolocal cannot be used since it will first try to
41 # decode the Unicode string. Calling u.decode(enc) really
42 # decode the Unicode string. Calling u.decode(enc) really
42 # means u.encode(sys.getdefaultencoding()).decode(enc). Since
43 # means u.encode(sys.getdefaultencoding()).decode(enc). Since
43 # the Python encoding defaults to 'ascii', this fails if the
44 # the Python encoding defaults to 'ascii', this fails if the
44 # translated string use non-ASCII characters.
45 # translated string use non-ASCII characters.
45 u = t.ugettext(message)
46 return u.encode(encoding.encoding, "replace")
46 return u.encode(encoding.encoding, "replace")
47 except LookupError:
47 except LookupError:
48 # An unknown encoding results in a LookupError.
48 return message
49 return message
49
50
50 _ = gettext
51 _ = gettext
51
52
General Comments 0
You need to be logged in to leave comments. Login now