123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import re
- import os
- import sys
- import locale
- from libs.ustr import ustr
- __dir__ = os.path.dirname(os.path.abspath(__file__))
- __dirpath__ = os.path.abspath(os.path.join(__dir__, '../resources/strings'))
- try:
- from PyQt5.QtCore import *
- except ImportError:
- if sys.version_info.major >= 3:
- import sip
- sip.setapi('QVariant', 2)
- from PyQt4.QtCore import *
- class StringBundle:
- __create_key = object()
- def __init__(self, create_key, localeStr):
- assert(create_key == StringBundle.__create_key), "StringBundle must be created using StringBundle.getBundle"
- self.idToMessage = {}
- paths = self.__createLookupFallbackList(localeStr)
- for path in paths:
- self.__loadBundle(path)
- @classmethod
- def getBundle(cls, localeStr=None):
- if localeStr is None:
- try:
- localeStr = locale.getlocale()[0] if locale.getlocale() and len(
- locale.getlocale()) > 0 else os.getenv('LANG')
- except:
- print('Invalid locale')
- localeStr = 'en'
- return StringBundle(cls.__create_key, localeStr)
- def getString(self, stringId):
- assert(stringId in self.idToMessage), "Missing string id : " + stringId
- return self.idToMessage[stringId]
- def __createLookupFallbackList(self, localeStr):
- resultPaths = []
- basePath = "\strings" if os.name == 'nt' else "/strings"
- resultPaths.append(basePath)
- if localeStr is not None:
-
- tags = re.split('[^a-zA-Z]', localeStr)
- for tag in tags:
- lastPath = resultPaths[-1]
- resultPaths.append(lastPath + '-' + tag)
- resultPaths[-1] = __dirpath__ + resultPaths[-1] + ".properties"
- return resultPaths
- def __loadBundle(self, path):
- PROP_SEPERATOR = '='
- f = QFile(path)
- if f.exists():
- if f.open(QIODevice.ReadOnly | QFile.Text):
- text = QTextStream(f)
- text.setCodec("UTF-8")
- while not text.atEnd():
- line = ustr(text.readLine())
- key_value = line.split(PROP_SEPERATOR)
- key = key_value[0].strip()
- value = PROP_SEPERATOR.join(key_value[1:]).strip().strip('"')
- self.idToMessage[key] = value
- f.close()
|