#include "stdafx.h" #include "MultiLang.h" void MultiLang::GetCStringByKey(int grpKey,int itmKey,CString& text,CString& des) { text = resGroup[grpKey].mapRes[itmKey].text; des= resGroup[grpKey].mapRes[itmKey].Description ; } CString MultiLang::GetCStringByKey(int grpKey, int itmKey) { return resGroup[grpKey].mapRes[itmKey].text; } CString MultiLang::GetGroupTextByKey(int grpKey) { return resGroup[grpKey].text; } void MultiLang::GetGroupTextByKey(int grpKey, CString& text, CString& des) { text= resGroup[grpKey].text; des = resGroup[grpKey].Description; } void MultiLang::SetCStringByKey(int grpkey,int itmkey, CString value,CString des) { StringRes sr; sr.text = value; sr.Description = des; resGroup[grpkey].mapRes [itmkey]=sr; } 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 *subcollectionNode = collectionNode->FirstChildElement("collection"); while (subcollectionNode != NULL) { int colkey; colkey=std::stoi(subcollectionNode->Attribute("grpKey")); CString colText; colText = subcollectionNode->Attribute("text"); CString colDes; colDes = subcollectionNode->Attribute("description"); tinyxml2::XMLElement *memberNode; ResGroup rg; rg.key = colkey; rg.text = colText; rg.Description = colDes; memberNode = subcollectionNode->FirstChildElement("member"); while (memberNode != NULL) { xmls::xString itemKey; xmls::xString itemText; xmls::xString itemName; xmls::xString itemDes; xmls::Slo slo; slo.Register("itemKey", &itemKey); slo.Register("itemText", &itemText); slo.Register("itemName", &itemName); slo.Register("description", &itemDes); slo.Serialize(false, doc, memberNode); int key = std::stoi(itemKey.value().c_str()); CString itmtext = itemText.value().c_str(); CString itmName = itemName.value().c_str(); CString itmDes = itemDes.value().c_str(); StringRes sr; sr.key = key; sr.text = itmtext; sr.Description = itmDes; rg.mapRes[key] = sr; memberNode = memberNode->NextSiblingElement("member"); } resGroup[colkey] = rg; subcollectionNode = subcollectionNode->NextSiblingElement("collection"); } delete doc; return true; } bool MultiLang::SaveStringToXml() { //tinyxml2::XMLDocument* doc = new tinyxml2::XMLDocument(); //doc->LoadFile(".\\OPTON\\OTSIncA\\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(".\\OPTON\\OTSIncA\\SysData\\MultiLangForCpp.xml"); //delete doc; return true; }