123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- #include "editor-support/cocostudio/LocalizationManager.h"
- #include "platform/CCPlatformMacros.h"
- #include "platform/CCFileUtils.h"
- #include "editor-support/cocostudio/CSLanguageDataBinary_generated.h"
- using namespace cocostudio;
- using namespace cocos2d;
- static JsonLocalizationManager* _sharedJsonLocalizationManager = nullptr;
- ILocalizationManager* JsonLocalizationManager::getInstance()
- {
- if (!_sharedJsonLocalizationManager)
- {
- _sharedJsonLocalizationManager = new (std::nothrow) JsonLocalizationManager();
- }
- return _sharedJsonLocalizationManager;
- }
- void JsonLocalizationManager::destroyInstance()
- {
- if (_sharedJsonLocalizationManager != nullptr)
- {
- delete _sharedJsonLocalizationManager;
- _sharedJsonLocalizationManager = nullptr;
- }
- }
- JsonLocalizationManager::JsonLocalizationManager()
- :languageData(nullptr)
- {
- }
- JsonLocalizationManager::~JsonLocalizationManager()
- {
- CC_SAFE_DELETE(languageData);
- }
- bool JsonLocalizationManager::initLanguageData(std::string file)
- {
- bool result = false;
- std::string data = FileUtils::getInstance()->getStringFromFile(file);
- if (!data.empty())
- {
- if (!languageData)
- languageData = new rapidjson::Document;
- languageData->Parse(data.c_str());
- if (languageData->IsObject())
- result = true;
- else
- CC_SAFE_DELETE(languageData);
- }
- return result;
- }
- std::string JsonLocalizationManager::getLocalizationString(std::string key)
- {
- std::string result = key;
- if (languageData && languageData->HasMember(key.c_str()) &&
- (*languageData)[key.c_str()].IsString())
- result = (*languageData)[key.c_str()].GetString();
- return result;
- }
- static BinLocalizationManager* _sharedBinLocalizationManager = nullptr;
- ILocalizationManager* BinLocalizationManager::getInstance()
- {
- if (!_sharedBinLocalizationManager)
- {
- _sharedBinLocalizationManager = new (std::nothrow) BinLocalizationManager();
- }
- return _sharedBinLocalizationManager;
- }
- void BinLocalizationManager::destroyInstance()
- {
- if (_sharedBinLocalizationManager != nullptr)
- {
- delete _sharedBinLocalizationManager;
- _sharedBinLocalizationManager = nullptr;
- }
- }
- BinLocalizationManager::BinLocalizationManager()
- {
- }
- BinLocalizationManager::~BinLocalizationManager()
- {
- }
- bool BinLocalizationManager::initLanguageData(std::string file)
- {
- bool result = false;
- languageData.clear();
- Data buf = FileUtils::getInstance()->getDataFromFile(file);
- if (!buf.isNull())
- {
- auto lanSet = flatbuffers::GetLanguageSet(buf.getBytes());
- if (lanSet && lanSet->languageItems()->size() > 0)
- {
- result = true;
- auto items = lanSet->languageItems();
- int count = items->size();
- for (int i = 0; i < count; i++)
- {
- auto it = items->Get(i);
- std::string key = it->key()->c_str();
- std::string value = it->value()->c_str();
- if (!key.empty())
- languageData[key] = value;
- }
- }
- }
- return result;
- }
- std::string BinLocalizationManager::getLocalizationString(std::string key)
- {
- std::string result = key;
- if (!languageData.empty())
- {
- auto it = languageData.find(key);
- if (it != languageData.end())
- result = it->second;
- }
- return result;
- }
- static bool isCurrentBinManager = true;
- static ILocalizationManager* _sharedLocalizationManager = nullptr;
- ILocalizationManager* LocalizationHelper::getCurrentManager()
- {
- if (!_sharedLocalizationManager)
- {
- _sharedLocalizationManager = BinLocalizationManager::getInstance();
- isCurrentBinManager = true;
- }
-
- return _sharedLocalizationManager;
- }
- void LocalizationHelper::setCurrentManager(ILocalizationManager* manager, bool isBinary)
- {
- _sharedLocalizationManager = manager;
- isCurrentBinManager = isBinary;
- }
- bool LocalizationHelper::isBinManager()
- {
- return isCurrentBinManager;
- }
|