lang_manager.py 3.3 KB

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