RULocalization.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #include "RULocalization.h"
  2. NS_RU_BEGIN
  3. std::unordered_map<std::string, Localization*> Localization::_gLocalizations;
  4. Localization* Localization::instance(std::string key4Local) {
  5. auto localGot = _gLocalizations.find(key4Local);
  6. if (localGot == _gLocalizations.end()) {
  7. auto local = new Localization();
  8. local->_localName = key4Local;
  9. _gLocalizations.insert(pair<std::string, Localization*>(key4Local, local));
  10. return local;
  11. }
  12. return localGot->second;
  13. }
  14. string Localization::getString(string valueKey)
  15. {
  16. if (!_isLoadContent) {
  17. _initLocalContent();
  18. _isLoadContent = true;
  19. }
  20. return _contentMap[valueKey].asString();
  21. }
  22. void Localization::setGroup(int group)
  23. {
  24. _group = group;
  25. }
  26. void Localization::debugLanguage(LanguageType lan)
  27. {
  28. _initLocalContent(lan);
  29. }
  30. void Localization::_initLocalContent()
  31. {
  32. LanguageType lan = Application::getInstance()->getCurrentLanguage();
  33. _initLocalContent(lan);
  34. }
  35. void Localization::_initLocalContent(LanguageType lan){
  36. std::string lanSuffix = "_english";
  37. switch (lan) {
  38. case LanguageType::CHINESE:
  39. lanSuffix = "_chinese";
  40. break;
  41. case LanguageType::ENGLISH:
  42. lanSuffix = "_english";
  43. break;
  44. case LanguageType::FRENCH:
  45. lanSuffix = "_french";
  46. break;
  47. case LanguageType::ITALIAN:
  48. lanSuffix = "_italian";
  49. break;
  50. case LanguageType::GERMAN:
  51. lanSuffix = "_german";
  52. break;
  53. case LanguageType::SPANISH:
  54. lanSuffix = "_spanish";
  55. break;
  56. case LanguageType::RUSSIAN:
  57. lanSuffix = "_russian";
  58. break;
  59. case LanguageType::KOREAN:
  60. lanSuffix = "_korean";
  61. break;
  62. case LanguageType::JAPANESE:
  63. lanSuffix = "_japanese";
  64. break;
  65. case LanguageType::HUNGARIAN:
  66. lanSuffix = "_hungarian";
  67. break;
  68. case LanguageType::PORTUGUESE:
  69. lanSuffix = "_portuguese";
  70. break;
  71. case LanguageType::ARABIC:
  72. lanSuffix = "_arabic";
  73. break;
  74. case LanguageType::POLISH:
  75. lanSuffix = "_polish";
  76. break;
  77. case LanguageType::TURKISH:
  78. lanSuffix = "_turkish";
  79. break;
  80. case LanguageType::UKRAINIAN:
  81. lanSuffix = "_ukrainian";
  82. break;
  83. case LanguageType::ROMANIAN:
  84. lanSuffix = "_romanian";
  85. break;
  86. case LanguageType::BULGARIAN:
  87. lanSuffix = "_bulgarian";
  88. break;
  89. case LanguageType::THAI:
  90. lanSuffix = "_thai";
  91. break;
  92. case LanguageType::HINDI:
  93. lanSuffix = "_hindi";
  94. break;
  95. case LanguageType::MALAY:
  96. lanSuffix = "_malay";
  97. break;
  98. case LanguageType::INDONESIAN:
  99. lanSuffix = "_indonesian";
  100. break;
  101. case LanguageType::VIETNAMESE:
  102. lanSuffix = "_vietnamese";
  103. break;
  104. case LanguageType::FILIPINO:
  105. lanSuffix = "_filipino";
  106. break;
  107. default:
  108. lanSuffix = "_english";
  109. break;
  110. }
  111. FileUtils* fileUtils = FileUtils::getInstance();
  112. if (!fileUtils->isFileExist(_getLocalFileName(lanSuffix))){
  113. if (_group == 0) {
  114. //不存在改成英文多语言
  115. lanSuffix = "_english";
  116. CCASSERT(fileUtils->isFileExist(_getLocalFileName(lanSuffix)), "多语言文件不存在");
  117. _contentMap = fileUtils->getValueMapFromFile(_getLocalFileName(lanSuffix));
  118. }else{
  119. int lastGroup = _group;
  120. _group = 0;
  121. // 默认0分组的多语言在不在
  122. if (fileUtils->isFileExist(_getLocalFileName(lanSuffix))){
  123. _contentMap = fileUtils->getValueMapFromFile(_getLocalFileName(lanSuffix));
  124. }else{ //改成英文多语言
  125. _group = lastGroup;
  126. lanSuffix = "_english";
  127. if (fileUtils->isFileExist(_getLocalFileName(lanSuffix))){
  128. _contentMap = fileUtils->getValueMapFromFile(_getLocalFileName(lanSuffix));
  129. }else{ //默认分组的多语言不存在,改成默认0分组英文多语言
  130. _group = 0;
  131. CCASSERT(fileUtils->isFileExist(_getLocalFileName(lanSuffix)), "多语言文件不存在");
  132. _contentMap = fileUtils->getValueMapFromFile(_getLocalFileName(lanSuffix));
  133. }
  134. }
  135. }
  136. }else{
  137. _contentMap = fileUtils->getValueMapFromFile(_getLocalFileName(lanSuffix));
  138. }
  139. }
  140. string Localization::_getLocalFileName(string lanSuffix){
  141. string localFileName = _localName + lanSuffix + ".plist";
  142. if (_group != 0) {
  143. localFileName = _localName + lanSuffix + Value(_group).asString() + ".plist";
  144. }
  145. return localFileName;
  146. }
  147. NS_RU_END