home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / python2.4 / site-packages / LanguageSelector / LocaleInfo.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-08-31  |  4.2 KB  |  135 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. import string
  5. import subprocess
  6. from gettext import gettext as _
  7.  
  8. class LocaleInfo(object):
  9.     ''' class with handy functions to parse the locale information '''
  10.     environment = '/etc/environment'
  11.     
  12.     def __init__(self, lang_file, country_file, languagelist_file):
  13.         self._lang = { }
  14.         self._country = { }
  15.         self._languagelist = { }
  16.         self._langFile = lang_file
  17.         for line in open(lang_file):
  18.             tmp = line.strip()
  19.             if tmp.startswith('#') or tmp == '':
  20.                 continue
  21.             
  22.             (code, lang) = tmp.split(':')
  23.             self._lang[code] = lang
  24.         
  25.         for line in open(country_file):
  26.             tmp = line.strip()
  27.             if tmp.startswith('#') or tmp == '':
  28.                 continue
  29.             
  30.             (un, code, long_code, descr, cap) = tmp.split(':')
  31.             self._country[code] = descr
  32.         
  33.         for line in open(languagelist_file):
  34.             tmp = line.strip()
  35.             if tmp.startswith('#') or tmp == '':
  36.                 continue
  37.             
  38.             w = tmp.split(';')
  39.             localeenv = w[6].split(':')
  40.             self._languagelist[localeenv[0]] = '%s' % w[6]
  41.         
  42.  
  43.     
  44.     def lang(self, code):
  45.         ''' map language code to language name '''
  46.         if self._lang.has_key(code):
  47.             return self._lang[code]
  48.         
  49.         return ''
  50.  
  51.     
  52.     def country(self, code):
  53.         ''' map country code to country name'''
  54.         if self._country.has_key(code):
  55.             return self._country[code]
  56.         
  57.         return ''
  58.  
  59.     
  60.     def generated_locales(self):
  61.         ''' return a list of locales avaialble on the system
  62.             (runing locale -a) '''
  63.         locales = []
  64.         p = subprocess.Popen([
  65.             'locale',
  66.             '-a'], stdout = subprocess.PIPE)
  67.         for line in p.stdout.readlines():
  68.             tmp = line.strip()
  69.             if tmp.startswith('#') and tmp == '' and tmp == 'C' or tmp == 'POSIX':
  70.                 continue
  71.             
  72.             locale = string.split(tmp)[0]
  73.             locale = string.split(locale, '.')[0]
  74.             locale = string.split(locale, '@')[0]
  75.             if locale not in locales:
  76.                 locales.append(locale)
  77.                 continue
  78.         
  79.         return locales
  80.  
  81.     
  82.     def translate(self, locale):
  83.         ''' get a locale code and output a human readable name '''
  84.         if '_' in locale:
  85.             (lang, country) = string.split(locale, '_')
  86.             l = filter((lambda k: k.startswith(lang + '_')), self.generated_locales())
  87.             if len(l) > 1:
  88.                 mycountry = self.country(country)
  89.                 if mycountry:
  90.                     return '%s (%s)' % (_(self.lang(lang)), _(mycountry))
  91.                 else:
  92.                     return '%s' % _(self.lang(lang))
  93.             else:
  94.                 return _(self.lang(lang))
  95.         
  96.         return _(self.lang(locale))
  97.  
  98.     
  99.     def makeEnvString(self, code):
  100.         ''' input is a language code, output a string that can be put in
  101.             the LANGUAGE enviroment variable.
  102.             E.g: en_DK -> en_DK:en
  103.         '''
  104.         if self._languagelist.has_key(code):
  105.             return self._languagelist[code]
  106.         
  107.         if '_' not in code:
  108.             return code
  109.         
  110.         (lang, region) = string.split(code, '_')
  111.         return '%s:%s' % (code, lang)
  112.  
  113.     
  114.     def getDefaultLanguage(self):
  115.         ''' returns the current default language (e.g. zh_CN) '''
  116.         for line in open(self.environment).readlines():
  117.             line = line.strip()
  118.             if line.startswith('LANGUAGE='):
  119.                 (key, value) = line.split('=')
  120.                 value = value.strip('"')
  121.                 return value.split(':')[0]
  122.                 continue
  123.         
  124.  
  125.  
  126. if __name__ == '__main__':
  127.     datadir = '/usr/share/language-selector/'
  128.     li = LocaleInfo('%s/data/languages' % datadir, '%s/data/countries' % datadir, '%s/data/languagelist' % datadir)
  129.     print li.getDefaultLanguage()
  130.     print li._lang
  131.     print li._country
  132.     print li._languagelist
  133.     print li.generated_locales()
  134.  
  135.