##// END OF EJS Templates
util & scmutil: adapt read/write helpers as request by mpm
util & scmutil: adapt read/write helpers as request by mpm

File last commit:

r13849:9f97de15 default
r14167:0e475380 default
Show More
i18n.py
64 lines | 2.1 KiB | text/x-python | PythonLexer
Martin Geisler
put license and copyright info into comment blocks
r8226 # i18n.py - internationalization support for mercurial
#
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
Benoit Boissinot
i18n first part: make '_' available for files who need it
r1400
Simon Heimberg
separate import lines from mercurial and general python modules
r8312 import encoding
import gettext, sys, os
Martin Geisler
i18n: lookup .mo files in private locale/ directory...
r7650
# modelled after templater.templatepath:
if hasattr(sys, 'frozen'):
module = sys.executable
else:
module = __file__
base = os.path.dirname(module)
for dir in ('.', '..'):
Martin Geisler
i18n: remove unnecessary os.path.normpath call
r9538 localedir = os.path.join(base, dir, 'locale')
Martin Geisler
i18n: lookup .mo files in private locale/ directory...
r7650 if os.path.isdir(localedir):
break
t = gettext.translation('hg', localedir, fallback=True)
Martin Geisler
i18n: encode output in user's local encoding...
r7651
def gettext(message):
"""Translate message.
The message is looked up in the catalog to get a Unicode string,
which is encoded in the local encoding before being returned.
Important: message is restricted to characters in the encoding
given by sys.getdefaultencoding() which is most likely 'ascii'.
"""
# If message is None, t.ugettext will return u'None' as the
# translation whereas our callers expect us to return None.
if message is None:
return message
Martin Geisler
i18n: fix translation of empty paragraphs
r11403 paragraphs = message.split('\n\n')
# Be careful not to translate the empty string -- it holds the
# meta data of the .po file.
u = u'\n\n'.join([p and t.ugettext(p) or '' for p in paragraphs])
Martin Geisler
i18n: encode output in user's local encoding...
r7651 try:
Martin Geisler
i18n: updated outdated comment
r9319 # encoding.tolocal cannot be used since it will first try to
# decode the Unicode string. Calling u.decode(enc) really
# means u.encode(sys.getdefaultencoding()).decode(enc). Since
# the Python encoding defaults to 'ascii', this fails if the
# translated string use non-ASCII characters.
Matt Mackall
move encoding bits from util to encoding...
r7948 return u.encode(encoding.encoding, "replace")
Martin Geisler
i18n: encode output in user's local encoding...
r7651 except LookupError:
Martin Geisler
i18n: move unrelated line out of try-except block
r9320 # An unknown encoding results in a LookupError.
Martin Geisler
i18n: encode output in user's local encoding...
r7651 return message
Brodie Rao
HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT...
r13849 def _plain():
if 'HGPLAIN' not in os.environ and 'HGPLAINEXCEPT' not in os.environ:
return False
exceptions = os.environ.get('HGPLAINEXCEPT', '').strip().split(',')
return 'i18n' not in exceptions
if _plain():
Brodie Rao
ui: add HGPLAIN environment variable for easier scripting...
r10455 _ = lambda message: message
else:
_ = gettext
Martin Geisler
i18n: encode output in user's local encoding...
r7651