LocalizationManager.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #include "editor-support/cocostudio/LocalizationManager.h"
  2. #include "platform/CCPlatformMacros.h"
  3. #include "platform/CCFileUtils.h"
  4. #include "editor-support/cocostudio/CSLanguageDataBinary_generated.h"
  5. using namespace cocostudio;
  6. using namespace cocos2d;
  7. static JsonLocalizationManager* _sharedJsonLocalizationManager = nullptr;
  8. ILocalizationManager* JsonLocalizationManager::getInstance()
  9. {
  10. if (!_sharedJsonLocalizationManager)
  11. {
  12. _sharedJsonLocalizationManager = new (std::nothrow) JsonLocalizationManager();
  13. }
  14. return _sharedJsonLocalizationManager;
  15. }
  16. void JsonLocalizationManager::destroyInstance()
  17. {
  18. if (_sharedJsonLocalizationManager != nullptr)
  19. {
  20. delete _sharedJsonLocalizationManager;
  21. _sharedJsonLocalizationManager = nullptr;
  22. }
  23. }
  24. JsonLocalizationManager::JsonLocalizationManager()
  25. :languageData(nullptr)
  26. {
  27. }
  28. JsonLocalizationManager::~JsonLocalizationManager()
  29. {
  30. CC_SAFE_DELETE(languageData);
  31. }
  32. bool JsonLocalizationManager::initLanguageData(std::string file)
  33. {
  34. bool result = false;
  35. std::string data = FileUtils::getInstance()->getStringFromFile(file);
  36. if (!data.empty())
  37. {
  38. if (!languageData)
  39. languageData = new rapidjson::Document;
  40. languageData->Parse(data.c_str());
  41. if (languageData->IsObject())
  42. result = true;
  43. else
  44. CC_SAFE_DELETE(languageData);
  45. }
  46. return result;
  47. }
  48. std::string JsonLocalizationManager::getLocalizationString(std::string key)
  49. {
  50. std::string result = key;
  51. if (languageData && languageData->HasMember(key.c_str()) &&
  52. (*languageData)[key.c_str()].IsString())
  53. result = (*languageData)[key.c_str()].GetString();
  54. return result;
  55. }
  56. static BinLocalizationManager* _sharedBinLocalizationManager = nullptr;
  57. ILocalizationManager* BinLocalizationManager::getInstance()
  58. {
  59. if (!_sharedBinLocalizationManager)
  60. {
  61. _sharedBinLocalizationManager = new (std::nothrow) BinLocalizationManager();
  62. }
  63. return _sharedBinLocalizationManager;
  64. }
  65. void BinLocalizationManager::destroyInstance()
  66. {
  67. if (_sharedBinLocalizationManager != nullptr)
  68. {
  69. delete _sharedBinLocalizationManager;
  70. _sharedBinLocalizationManager = nullptr;
  71. }
  72. }
  73. BinLocalizationManager::BinLocalizationManager()
  74. {
  75. }
  76. BinLocalizationManager::~BinLocalizationManager()
  77. {
  78. }
  79. bool BinLocalizationManager::initLanguageData(std::string file)
  80. {
  81. bool result = false;
  82. languageData.clear();
  83. Data buf = FileUtils::getInstance()->getDataFromFile(file);
  84. if (!buf.isNull())
  85. {
  86. auto lanSet = flatbuffers::GetLanguageSet(buf.getBytes());
  87. if (lanSet && lanSet->languageItems()->size() > 0)
  88. {
  89. result = true;
  90. auto items = lanSet->languageItems();
  91. int count = items->size();
  92. for (int i = 0; i < count; i++)
  93. {
  94. auto it = items->Get(i);
  95. std::string key = it->key()->c_str();
  96. std::string value = it->value()->c_str();
  97. if (!key.empty())
  98. languageData[key] = value;
  99. }
  100. }
  101. }
  102. return result;
  103. }
  104. std::string BinLocalizationManager::getLocalizationString(std::string key)
  105. {
  106. std::string result = key;
  107. if (!languageData.empty())
  108. {
  109. auto it = languageData.find(key);
  110. if (it != languageData.end())
  111. result = it->second;
  112. }
  113. return result;
  114. }
  115. static bool isCurrentBinManager = true;
  116. static ILocalizationManager* _sharedLocalizationManager = nullptr;
  117. ILocalizationManager* LocalizationHelper::getCurrentManager()
  118. {
  119. if (!_sharedLocalizationManager)
  120. {
  121. _sharedLocalizationManager = BinLocalizationManager::getInstance();
  122. isCurrentBinManager = true;
  123. }
  124. return _sharedLocalizationManager;
  125. }
  126. void LocalizationHelper::setCurrentManager(ILocalizationManager* manager, bool isBinary)
  127. {
  128. _sharedLocalizationManager = manager;
  129. isCurrentBinManager = isBinary;
  130. }
  131. bool LocalizationHelper::isBinManager()
  132. {
  133. return isCurrentBinManager;
  134. }