#Embedded file name: ACEStream\Lang\lang.pyo import sys import os from traceback import print_exc, print_stack from cStringIO import StringIO from ACEStream.GlobalConfig import globalConfig from ACEStream.Core.Session import Session from ACEStream.Utilities.configreader import ConfigReader from ACEStream.Core.BitTornado.__init__ import version_id class Lang: def __init__(self, utility, system_default_locale = 'en_EN'): self.utility = utility default_filename = 'en_EN.lang' langpath = os.path.join(self.utility.getPath(), 'data', 'lang') sys.stdout.write('Setting up languages\n') sys.stdout.write('Default: ' + str(default_filename) + '\n') sys.stdout.write('System: ' + str(system_default_locale) + '\n') self.user_lang = None user_filepath = os.path.join(self.utility.getConfigPath(), 'user.lang') if existsAndIsReadable(user_filepath): self.user_lang = ConfigReader(user_filepath, 'ABC/language') parsed_locale = self.parse_locale(system_default_locale) self.local_lang_filename = parsed_locale + '.lang' self.local_lang = None local_filepath = os.path.join(langpath, self.local_lang_filename) if self.local_lang_filename != default_filename and existsAndIsReadable(local_filepath): if globalConfig.get_mode() == 'client_wx': import wx self.local_lang = wx.FileConfig(localFilename=local_filepath) self.local_lang.SetPath('ABC/language') else: self.local_lang = ConfigReader(local_filepath, 'ABC/language') self.default_lang = None default_filepath = os.path.join(langpath, default_filename) if existsAndIsReadable(default_filepath): self.default_lang = ConfigReader(default_filepath, 'ABC/language') self.cache = {} self.langwarning = False def parse_locale(self, locale_name): if locale_name.startswith('en'): return 'en_EN' elif locale_name.startswith('ru'): return 'ru_RU' else: return locale_name def flush(self): if self.user_lang is not None: try: self.user_lang.DeleteEntry('dummyparam', False) except: pass self.user_lang.Flush() self.cache = {} def get(self, label, tryuser = True, trylocal = True, trydefault = True, giveerror = True): if tryuser and trylocal and trydefault: tryall = True else: tryall = False if tryall and label in self.cache: return self.expandEnter(self.cache[label]) if label == 'version': return version_id if label == 'build': return 'Build 19721' if label == 'build_date': return 'May 19, 2011' if tryuser: text, found = self.getFromLanguage(label, self.user_lang) if found: if tryall: self.cache[label] = text return self.expandEnter(text) if trylocal and self.local_lang is not None: text, found = self.getFromLanguage(label, self.local_lang, giveerror=True) if found: if tryall: self.cache[label] = text return self.expandEnter(text) if trydefault: text, found = self.getFromLanguage(label, self.default_lang) if found: if tryall: self.cache[label] = text return self.expandEnter(text) if giveerror: sys.stdout.write('Language file: Got an error finding: ' + label) self.error(label) return label def expandEnter(self, text): text = text.replace('\\r', '\n') text = text.replace('\\n', '\n') return text def getFromLanguage(self, label, langfile, giveerror = False): try: if langfile is not None: if langfile.Exists(label): return (self.getSingleline(label, langfile), True) if langfile.Exists(label + '_line1'): return (self.getMultiline(label, langfile), True) if giveerror: self.error(label, silent=True) except: fileused = '' langfilenames = {'user.lang': self.user_lang, self.local_lang_filename: self.local_lang, self.default_lang_filename: self.default_lang} for name in langfilenames: if langfilenames[name] == langfile: fileused = name break sys.stderr.write('Error reading language file: (' + fileused + '), label: (' + label + ')\n') data = StringIO() print_exc(file=data) sys.stderr.write(data.getvalue()) return ('', False) def getSingleline(self, label, langfile): return langfile.Read(label) def getMultiline(self, label, langfile): i = 1 text = '' while langfile.Exists(label + '_line' + str(i)): if i != 1: text += '\n' text += langfile.Read(label + '_line' + str(i)) i += 1 if not text: sys.stdout.write('Language file: Got an error reading multiline string\n') self.error(label) return text def writeUser(self, label, text): change = False text_user = self.get(label, trylocal=False, trydefault=False, giveerror=False) text_nonuser = self.get(label, tryuser=False, giveerror=False) user_lang = self.user_lang if text == text_nonuser: if text_user != '': user_lang.Write('exampleparam', 'example value') user_lang.DeleteEntry(label) change = True elif text != text_user: user_lang.Write(label, text) change = True return change def error(self, label, silent = True): if not self.langwarning: self.langwarning = True error_title = self.get('error') error_text = self.get('errorlanguagefile') if error_text == '': error_text = 'Your language file is missing at least one string.\nPlease check to see if an updated version is available.' sys.stderr.write('\nError reading language file!\n') sys.stderr.write(' Cannot find value for variable: ' + label + '\n') def existsAndIsReadable(filename): return os.access(filename, os.F_OK) and os.access(filename, os.R_OK)