home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 May / maximum-cd-2010-05.iso / DiscContents / boxee-0.9.20.10711.exe / scripts / OpenSubtitles / resources / lib / language.py < prev    next >
Encoding:
Python Source  |  2009-07-20  |  2.8 KB  |  68 lines

  1. """
  2. Language module
  3.  
  4. Nuka1195
  5. """
  6.  
  7. import os
  8. import xbmc
  9. import xml.dom.minidom
  10.  
  11.  
  12. class Language:
  13.     """ Language Class: creates a dictionary of localized strings { int: string } """
  14.     def __init__( self ):
  15.         """ initializer """
  16.         # language folder
  17.         base_path = os.path.join( os.getcwd().replace( ";", "" ), "resources", "language" )
  18.         # get the current language
  19.         language = self._get_language( base_path )
  20.         # create strings dictionary
  21.         self._create_localized_dict( base_path, language )
  22.         
  23.     def _get_language( self, base_path ):
  24.         """ returns the current language if a strings.xml file exists else returns english """
  25.         # get the current users language setting
  26.         language = xbmc.getLanguage().lower()
  27.         # if no strings.xml file exists, default to english
  28.         if ( not os.path.isfile( os.path.join( base_path, language, "strings.xml" ) ) ):
  29.             language = "english"
  30.         return language
  31.  
  32.     def _create_localized_dict( self, base_path, language ):
  33.         """ initializes self.strings and calls _parse_strings_file """
  34.         # localized strings dictionary
  35.         self.strings = {}
  36.         # add localized strings
  37.         self._parse_strings_file( os.path.join( base_path, language, "strings.xml" ) )
  38.         # fill-in missing strings with english strings
  39.         if ( language != "english" ):
  40.             self._parse_strings_file( os.path.join( base_path, "english", "strings.xml" ) )
  41.         
  42.     def _parse_strings_file( self, language_path ):
  43.         """ adds localized strings to self.strings dictionary """
  44.         try:
  45.             # load and parse strings.xml file
  46.             doc = xml.dom.minidom.parse( language_path )
  47.             # make sure this is a valid <strings> xml file
  48.             root = doc.documentElement
  49.             if ( not root or root.tagName != "strings" ): raise
  50.             # parse and resolve each <string id="#"> tag
  51.             strings = root.getElementsByTagName( "string" )
  52.             for string in strings:
  53.                 # convert id attribute to an integer
  54.                 string_id = int( string.getAttribute( "id" ) )
  55.                 # if a valid id add it to self.strings dictionary
  56.                 if ( string_id not in self.strings and string.hasChildNodes() ):
  57.                     self.strings[ string_id ] = string.firstChild.nodeValue
  58.         except:
  59.             # print the error message to the log and debug window
  60.             xbmc.output( "ERROR: Language file %s can't be parsed!" % ( language_path, ) )
  61.         # clean-up document object
  62.         try: doc.unlink()
  63.         except: pass
  64.  
  65.     def localized( self, code ):
  66.         """ returns the localized string if it exists """
  67.         return self.strings.get( code, "Invailid Id %d" % ( code, ) )
  68.