void LanguageManager::_load(xml::ElementPtr _node, const std::string& _file, Version _version) { std::string default_lang; bool event_change = false; // берем детей и крутимся, основной цикл xml::ElementEnumerator root = _node->getElementEnumerator(); while (root.next(XML_TYPE)) { // парсим атрибуты root->findAttribute("default", default_lang); // берем детей и крутимся xml::ElementEnumerator info = root->getElementEnumerator(); while (info.next("Info")) { // парсим атрибуты std::string name(info->findAttribute("name")); // доюавляем в карту пользователя if (name.empty()) { xml::ElementEnumerator source_info = info->getElementEnumerator(); while (source_info.next("Source")) { loadLanguage(source_info->getContent(), true); } } // добавляем в карту языков else { xml::ElementEnumerator source_info = info->getElementEnumerator(); while (source_info.next("Source")) { std::string file_source = source_info->getContent(); // добавляем в карту mMapFile[name].push_back(file_source); // если добавляемый файл для текущего языка, то подгружаем и оповещаем if (name == mCurrentLanguageName) { loadLanguage(file_source, false); event_change = true; } } } } } if (!default_lang.empty()) setCurrentLanguage(default_lang); else if (event_change) eventChangeLanguage(mCurrentLanguageName); }
bool LanguageManager::setCurrentLanguage(const std::string & _name) { mCurrentLanguage = mMapFile.find(_name); if (mCurrentLanguage == mMapFile.end()) { MYGUI_LOG(Error, "Language '" << _name << "' is not found"); return false; } loadLanguage(mCurrentLanguage->second, ResourceManager::getInstance().getResourceGroup()); eventChangeLanguage(mCurrentLanguage->first); return true; }
void LanguageManager::setCurrentLanguage(const std::string& _name) { MapListString::iterator item = mMapFile.find(_name); if (item == mMapFile.end()) { MYGUI_LOG(Error, "Language '" << _name << "' is not found"); return; } mMapLanguage.clear(); mCurrentLanguageName = _name; for (VectorString::const_iterator iter = item->second.begin(); iter != item->second.end(); ++iter) { loadLanguage(*iter, false); } eventChangeLanguage(mCurrentLanguageName); }