#include "stdafx.h" #include "MultiLang.h" std::string MultiLang::GetStringByKey(int key) { return mapMultiLang[key]; } CString& MultiLang::GetCStringByKey(int key) { //std::string ss = mapMultiLang[key]; //return CString(ss.c_str()); return mapMultiLang[key]; } void MultiLang::OutputCStringByKey(int key, CString& outStr) { //std::string ss = mapMultiLang[key]; //return CString(ss.c_str()); outStr= mapMultiLang[key]; } void MultiLang::SetStringByKey(int key, std::string value) { mapMultiLang[key] = value.c_str(); } bool MultiLang::LoadStringFromXml() { tinyxml2::XMLDocument* doc=new tinyxml2::XMLDocument (); /*char buf[1000]; GetCurrentDirectory(1000, buf); CString dir = CString(buf);*/ doc->LoadFile(".\\Resources\\XMLData\\LanguageDefine.xml");//载入xml文件 tinyxml2::XMLElement *rootNode; rootNode = doc->FirstChildElement("Language"); tinyxml2::XMLElement *childNode = rootNode->FirstChildElement("DefaultLanguage"); std::string ss=childNode->GetText(); if (ss == "EN") { doc->LoadFile(".\\Resources\\XMLData\\ResourceForCpp\\ResourceForCpp-EN.xml");//载入xml文件 } else if (ss == "ZH") { doc->LoadFile(".\\Resources\\XMLData\\ResourceForCpp\\ResourceForCpp-ZH.xml");//载入xml文件 } rootNode = doc->FirstChildElement(RootClassName); tinyxml2::XMLElement *collectionNode = rootNode->FirstChildElement("collection"); tinyxml2::XMLElement *memberNode; memberNode = collectionNode->FirstChildElement("member"); while (memberNode != NULL) { xmls::xString itemKey; xmls::xString itemText; xmls::xString itemName; xmls::Slo slo; slo.Register("itemKey", &itemKey); slo.Register("itemText", &itemText); slo.Register("itemName", &itemName); slo.Serialize(false, doc, memberNode); int key = std::atoi(itemKey.c_str ()); mapMultiLang[key] = itemText.value().c_str(); memberNode = memberNode->NextSiblingElement("member"); } delete doc; return true; } bool MultiLang::SaveStringToXml() { tinyxml2::XMLDocument* doc = new tinyxml2::XMLDocument(); doc->LoadFile(".\\Config\\SysData\\MultiLangForCpp.xml");//载入xml文件 tinyxml2::XMLElement *rootNode; rootNode = doc->FirstChildElement(RootClassName); tinyxml2::XMLElement *collectionNode = rootNode->FirstChildElement("collection"); for (auto member:mapMultiLang) { xmls::xString itemKey; xmls::xString itemText; xmls::xString itemName; xmls::Slo slo; slo.Register("itemKey", &itemKey); slo.Register("itemText", &itemText); slo.Register("itemName", &itemName); itemKey =std::to_string( member.first); itemText = member.second; itemName = ""; tinyxml2::XMLElement *subClassNode = doc->NewElement("member"); slo.Serialize(true, doc, subClassNode); collectionNode->InsertEndChild(subClassNode); } doc->SaveFile(".\\Config\\SysData\\MultiLangForCpp.xml"); delete doc; return true; }