##// END OF EJS Templates
i18n: use getattr instead of hasattr...
Augie Fackler -
r14975:b6453836 default
parent child Browse files
Show More
@@ -1,64 +1,63 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 or any later version.
6 # GNU General Public License version 2 or any later version.
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 getattr(sys, 'frozen', None) is not None:
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.join(base, dir, 'locale')
19 localedir = 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 paragraphs = message.split('\n\n')
39 paragraphs = message.split('\n\n')
40 # Be careful not to translate the empty string -- it holds the
40 # Be careful not to translate the empty string -- it holds the
41 # meta data of the .po file.
41 # meta data of the .po file.
42 u = u'\n\n'.join([p and t.ugettext(p) or '' for p in paragraphs])
42 u = u'\n\n'.join([p and t.ugettext(p) or '' for p in paragraphs])
43 try:
43 try:
44 # encoding.tolocal cannot be used since it will first try to
44 # encoding.tolocal cannot be used since it will first try to
45 # decode the Unicode string. Calling u.decode(enc) really
45 # decode the Unicode string. Calling u.decode(enc) really
46 # means u.encode(sys.getdefaultencoding()).decode(enc). Since
46 # means u.encode(sys.getdefaultencoding()).decode(enc). Since
47 # the Python encoding defaults to 'ascii', this fails if the
47 # the Python encoding defaults to 'ascii', this fails if the
48 # translated string use non-ASCII characters.
48 # translated string use non-ASCII characters.
49 return u.encode(encoding.encoding, "replace")
49 return u.encode(encoding.encoding, "replace")
50 except LookupError:
50 except LookupError:
51 # An unknown encoding results in a LookupError.
51 # An unknown encoding results in a LookupError.
52 return message
52 return message
53
53
54 def _plain():
54 def _plain():
55 if 'HGPLAIN' not in os.environ and 'HGPLAINEXCEPT' not in os.environ:
55 if 'HGPLAIN' not in os.environ and 'HGPLAINEXCEPT' not in os.environ:
56 return False
56 return False
57 exceptions = os.environ.get('HGPLAINEXCEPT', '').strip().split(',')
57 exceptions = os.environ.get('HGPLAINEXCEPT', '').strip().split(',')
58 return 'i18n' not in exceptions
58 return 'i18n' not in exceptions
59
59
60 if _plain():
60 if _plain():
61 _ = lambda message: message
61 _ = lambda message: message
62 else:
62 else:
63 _ = gettext
63 _ = gettext
64
General Comments 0
You need to be logged in to leave comments. Login now