home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 January / maximum-cd-2011-01.iso / DiscContents / calibre-0.7.26.msi / file_1468 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-10-31  |  5.2 KB  |  161 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from __future__ import with_statement
  5. __license__ = 'GPL v3'
  6. __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
  7. __docformat__ = 'restructuredtext en'
  8. import os
  9. import locale
  10. import re
  11. import cStringIO
  12. import cPickle
  13. from gettext import GNUTranslations
  14. _available_translations = None
  15.  
  16. def available_translations():
  17.     global _available_translations
  18.     return _available_translations
  19.  
  20.  
  21. def get_lang():
  22.     prefs = prefs
  23.     import calibre.utils.config
  24.     lang = prefs['language']
  25.     lang = os.environ.get('CALIBRE_OVERRIDE_LANG', lang)
  26.     if lang is not None:
  27.         return lang
  28.     lang = locale.getdefaultlocale([
  29.         'LANGUAGE',
  30.         'LC_ALL',
  31.         'LC_CTYPE',
  32.         'LC_MESSAGES',
  33.         'LANG'])[0]
  34.     if lang:
  35.         match = re.match('[a-z]{2,3}(_[A-Z]{2}){0,1}', lang)
  36.         if match:
  37.             lang = match.group()
  38.         
  39.     
  40.     if lang == 'zh':
  41.         lang = 'zh_CN'
  42.     
  43.     if lang is None:
  44.         lang = 'en'
  45.     
  46.     return lang
  47.  
  48.  
  49. def messages_path(lang):
  50.     return P('localization/locales/%s/LC_MESSAGES' % lang)
  51.  
  52.  
  53. def get_lc_messages_path(lang):
  54.     hlang = None
  55.     if lang in available_translations():
  56.         hlang = lang
  57.     else:
  58.         xlang = lang.split('_')[0]
  59.         if xlang in available_translations():
  60.             hlang = xlang
  61.         
  62.     if hlang is not None:
  63.         return messages_path(hlang)
  64.  
  65.  
  66. def set_translators():
  67.     lang = get_lang()
  68.     if lang:
  69.         buf = None
  70.         iso639 = None
  71.         if os.access(lang + '.po', os.R_OK):
  72.             make = make
  73.             import calibre.translations.msgfmt
  74.             buf = cStringIO.StringIO()
  75.             make(lang + '.po', buf)
  76.             buf = cStringIO.StringIO(buf.getvalue())
  77.         
  78.         mpath = get_lc_messages_path(lang)
  79.         if mpath is not None:
  80.             if buf is None:
  81.                 buf = open(os.path.join(mpath, 'messages.mo'), 'rb')
  82.             
  83.             mpath = mpath.replace(os.sep + 'nds' + os.sep, os.sep + 'de' + os.sep)
  84.             isof = os.path.join(mpath, 'iso639.mo')
  85.             if os.path.exists(isof):
  86.                 iso639 = open(isof, 'rb')
  87.             
  88.         
  89.         if buf is not None:
  90.             t = GNUTranslations(buf)
  91.             if iso639 is not None:
  92.                 iso639 = GNUTranslations(iso639)
  93.                 t.add_fallback(iso639)
  94.             
  95.             t.install(unicode = True)
  96.         
  97.     
  98.  
  99. _iso639 = None
  100. _extra_lang_codes = {
  101.     'pt_BR': _('Brazilian Portuguese'),
  102.     'en_GB': _('English (UK)'),
  103.     'zh_CN': _('Simplified Chinese'),
  104.     'zh_HK': _('Chinese (HK)'),
  105.     'zh_TW': _('Traditional Chinese'),
  106.     'en': _('English'),
  107.     'en_AU': _('English (Australia)'),
  108.     'en_NZ': _('English (New Zealand)'),
  109.     'en_CA': _('English (Canada)'),
  110.     'en_IN': _('English (India)'),
  111.     'en_TH': _('English (Thailand)'),
  112.     'en_CY': _('English (Cyprus)'),
  113.     'en_PK': _('English (Pakistan)'),
  114.     'en_IL': _('English (Israel)'),
  115.     'en_SG': _('English (Singapore)'),
  116.     'en_YE': _('English (Yemen)'),
  117.     'en_IE': _('English (Ireland)'),
  118.     'en_CN': _('English (China)'),
  119.     'es_PY': _('Spanish (Paraguay)'),
  120.     'de_AT': _('German (AT)'),
  121.     'fr_BE': _('French (BE)'),
  122.     'nl': _('Dutch (NL)'),
  123.     'nl_BE': _('Dutch (BE)'),
  124.     'und': _('Unknown') }
  125.  
  126. def get_language(lang):
  127.     global _iso639
  128.     if lang in _extra_lang_codes:
  129.         return _extra_lang_codes[lang]
  130.     ip = P('localization/iso639.pickle')
  131.     if not os.path.exists(ip):
  132.         return lang
  133.     ans = lang
  134.     lang = lang.split('_')[0].lower()
  135.     if len(lang) == 2:
  136.         ans = _iso639['by_2'].get(lang, ans)
  137.     elif len(lang) == 3:
  138.         if lang in _iso639['by_3b']:
  139.             ans = _iso639['by_3b'][lang]
  140.         else:
  141.             ans = _iso639['by_3t'].get(lang, ans)
  142.     
  143.     return _(ans)
  144.  
  145.  
  146. def set_qt_translator(translator):
  147.     lang = get_lang()
  148.     if lang is not None:
  149.         if lang == 'nds':
  150.             lang = 'de'
  151.         
  152.         mpath = get_lc_messages_path(lang)
  153.         if mpath is not None:
  154.             p = os.path.join(mpath, 'qt.qm')
  155.             if os.path.exists(p):
  156.                 return translator.load(p)
  157.         
  158.     
  159.     return False
  160.  
  161.