launcher/sys.py/UI/lang_manager.py
2019-01-17 00:56:40 +08:00

117 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
import os
import pygame
import config
import ConfigParser
from util_funcs import FileExists
from fonts import fonts
class CaseConfigParser(ConfigParser.SafeConfigParser):
def optionxform(self, optionstr):
return optionstr
class LangManager(object):
"""
"""
_Langs = {}
_Config = None
_ConfigFileName = "00_English.ini" ## double % to escape
_CJKMode = False
def __init__(self):
self.Init()
def Init(self):
if not self._Langs:
self.SetLangs()
def UpdateLang(self):
self._Langs = {}
self.SetLangs()
def IsCJKMode(self):## in MultiLabel, latins seped by white spaces,CJK no needs for that
latins = ["English"]
self._CJKMode = True
for i in latins:
if i in self._ConfigFileName:
self._CJKMode= False
break
return self._CJKMode
def SetLangs(self):
self._Config = CaseConfigParser()
#print("SetLangs")
fname = ".lang"
try:
with open(fname, "r") as f:
self._ConfigFileName = f.read()
self._ConfigFileName = self._ConfigFileName.strip("\r\n ")
#print(self._ConfigFileName)
except:
os.system("touch .lang")
print("read lang failed")
None
if self._ConfigFileName == "" or FileExists("langs/"+self._ConfigFileName) == False:
#print("miss file")
self._ConfigFileName = "00_English.ini"
else:
pass
#print("has file",self._ConfigFileName)
try:
self._Config.read("langs/"+self._ConfigFileName)
except Exception, e:
print("read lang ini error %s" % str(e))
return
else:
if "Langs" in self._Config.sections():
lang_opts = self._Config.options("Langs")
for i in lang_opts:
try:
self._Langs[i] = self._Config.get("Langs", i)
except Exception, e:
print("error %s" % str(e))
continue
def Tr(self,english_key_str):
#print("english_key_str", english_key_str)
if english_key_str in self._Langs:
#print( self._Langs[english_key_str] )
return self._Langs[english_key_str].decode("utf8")
else:
return english_key_str
def TrFont(self,orig_font_str):
try:
font_size_number = int(filter(str.isdigit, orig_font_str))
except TypeError:
font_size_number = int(filter(unicode.isdigit, orig_font_str))
if font_size_number > 120:
raise Exception('font string format error')
if "English.ini" in self._ConfigFileName:
return fonts[orig_font_str]
else:
if font_size_number > 28:
raise Exception('cjk font string format error '+ str(font_size_number))
return fonts["notosanscjk"+str(font_size_number)]
##global MyLangManager Handler
MyLangManager = None
def InitMyLangManager():
global MyLangManager
if MyLangManager == None:
MyLangManager = LangManager()
InitMyLangManager()