lang_manager.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import pygame
  4. import config
  5. import ConfigParser
  6. from skin_manager import MySkinManager
  7. from util_funcs import FileExists
  8. class CaseConfigParser(ConfigParser.SafeConfigParser):
  9. def optionxform(self, optionstr):
  10. return optionstr
  11. class LangManager(object):
  12. """
  13. """
  14. _Langs = {}
  15. _Config = None
  16. # _ConfigFileName = "00_English.ini" ## double % to escape
  17. _ConfigFileName = "99_DEOT_English.ini"
  18. _CJKMode = False
  19. def __init__(self):
  20. self.Init()
  21. def Init(self):
  22. if not self._Langs:
  23. self.SetLangs()
  24. def UpdateLang(self):
  25. self._Langs = {}
  26. self.SetLangs()
  27. def IsCJKMode(self):## in MultiLabel, latins seped by white spaces,CJK no needs for that
  28. # latins = ["English"]
  29. # self._CJKMode = True
  30. # for i in latins:
  31. # if i in self._ConfigFileName:
  32. # self._CJKMode= False
  33. # break
  34. # return self._CJKMode
  35. return False
  36. def SetLangs(self):
  37. self._Config = CaseConfigParser()
  38. #print("SetLangs")
  39. fname = ".lang"
  40. try:
  41. with open(fname, "r") as f:
  42. self._ConfigFileName = f.read()
  43. self._ConfigFileName = self._ConfigFileName.strip("\r\n ")
  44. #print(self._ConfigFileName)
  45. except:
  46. os.system("touch .lang")
  47. print("read lang failed")
  48. None
  49. if self._ConfigFileName == "" or FileExists("langs/"+self._ConfigFileName) == False:
  50. #print("miss file")
  51. self._ConfigFileName = "00_English.ini"
  52. else:
  53. pass
  54. #print("has file",self._ConfigFileName)
  55. try:
  56. self._Config.read("langs/"+self._ConfigFileName)
  57. except Exception, e:
  58. print("read lang ini error %s" % str(e))
  59. return
  60. else:
  61. if "Langs" in self._Config.sections():
  62. lang_opts = self._Config.options("Langs")
  63. for i in lang_opts:
  64. try:
  65. self._Langs[i] = self._Config.get("Langs", i)
  66. except Exception, e:
  67. print("error %s" % str(e))
  68. continue
  69. def Tr(self,english_key_str):
  70. #print("english_key_str", english_key_str)
  71. if english_key_str in self._Langs:
  72. #print( self._Langs[english_key_str] )
  73. return self._Langs[english_key_str].decode("utf8")
  74. else:
  75. return english_key_str
  76. def TrFont(self,orig_font_str):
  77. try:
  78. font_size_number = int(filter(str.isdigit, orig_font_str))
  79. except TypeError:
  80. font_size_number = int(filter(unicode.isdigit, orig_font_str))
  81. if font_size_number > 120:
  82. raise Exception('font string format error')
  83. if "English.ini" in self._ConfigFileName:
  84. return MySkinManager.GiveFont(orig_font_str)
  85. else:
  86. if font_size_number > 28:
  87. # raise Exception('cjk font string format error '+ str(font_size_number))
  88. return MySkinManager.GiveFont(orig_font_str)
  89. else:
  90. return MySkinManager.GiveFont("notosanscjk%d" % font_size_number)
  91. ##global MyLangManager Handler
  92. MyLangManager = None
  93. def InitMyLangManager():
  94. global MyLangManager
  95. if MyLangManager == None:
  96. MyLangManager = LangManager()
  97. InitMyLangManager()