eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/mercurial/i18n.py
changeset 69 c6bca38c1cbf
equal deleted inserted replaced
68:5ff1fc726848 69:c6bca38c1cbf
       
     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 or any later version.
       
     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.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     paragraphs = message.split('\n\n')
       
    40     # Be careful not to translate the empty string -- it holds the
       
    41     # meta data of the .po file.
       
    42     u = u'\n\n'.join([p and t.ugettext(p) or '' for p in paragraphs])
       
    43     try:
       
    44         # encoding.tolocal cannot be used since it will first try to
       
    45         # decode the Unicode string. Calling u.decode(enc) really
       
    46         # means u.encode(sys.getdefaultencoding()).decode(enc). Since
       
    47         # the Python encoding defaults to 'ascii', this fails if the
       
    48         # translated string use non-ASCII characters.
       
    49         return u.encode(encoding.encoding, "replace")
       
    50     except LookupError:
       
    51         # An unknown encoding results in a LookupError.
       
    52         return message
       
    53 
       
    54 if 'HGPLAIN' in os.environ:
       
    55     _ = lambda message: message
       
    56 else:
       
    57     _ = gettext
       
    58