MultiLang.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #include "stdafx.h"
  2. #include "MultiLang.h"
  3. std::string MultiLang::GetStringByKey(int key)
  4. {
  5. return mapMultiLang[key];
  6. }
  7. CString& MultiLang::GetCStringByKey(int key)
  8. {
  9. //std::string ss = mapMultiLang[key];
  10. //return CString(ss.c_str());
  11. return mapMultiLang[key];
  12. }
  13. void MultiLang::OutputCStringByKey(int key, CString& outStr)
  14. {
  15. //std::string ss = mapMultiLang[key];
  16. //return CString(ss.c_str());
  17. outStr= mapMultiLang[key];
  18. }
  19. void MultiLang::SetStringByKey(int key, std::string value)
  20. {
  21. mapMultiLang[key] = value.c_str();
  22. }
  23. bool MultiLang::LoadStringFromXml()
  24. {
  25. tinyxml2::XMLDocument* doc=new tinyxml2::XMLDocument ();
  26. /*char buf[1000];
  27. GetCurrentDirectory(1000, buf);
  28. CString dir = CString(buf);*/
  29. doc->LoadFile(".\\Resources\\XMLData\\LanguageDefine.xml");//载入xml文件
  30. tinyxml2::XMLElement *rootNode;
  31. rootNode = doc->FirstChildElement("Language");
  32. tinyxml2::XMLElement *childNode = rootNode->FirstChildElement("DefaultLanguage");
  33. std::string ss=childNode->GetText();
  34. if (ss == "EN")
  35. {
  36. doc->LoadFile(".\\Resources\\XMLData\\ResourceForCpp\\ResourceForCpp-EN.xml");//载入xml文件
  37. }
  38. else if (ss == "ZH")
  39. {
  40. doc->LoadFile(".\\Resources\\XMLData\\ResourceForCpp\\ResourceForCpp-ZH.xml");//载入xml文件
  41. }
  42. rootNode = doc->FirstChildElement(RootClassName);
  43. tinyxml2::XMLElement *collectionNode = rootNode->FirstChildElement("collection");
  44. tinyxml2::XMLElement *memberNode;
  45. memberNode = collectionNode->FirstChildElement("member");
  46. while (memberNode != NULL)
  47. {
  48. xmls::xString itemKey;
  49. xmls::xString itemText;
  50. xmls::xString itemName;
  51. xmls::Slo slo;
  52. slo.Register("itemKey", &itemKey);
  53. slo.Register("itemText", &itemText);
  54. slo.Register("itemName", &itemName);
  55. slo.Serialize(false, doc, memberNode);
  56. int key = std::atoi(itemKey.c_str ());
  57. mapMultiLang[key] = itemText.value().c_str();
  58. memberNode = memberNode->NextSiblingElement("member");
  59. }
  60. delete doc;
  61. return true;
  62. }
  63. bool MultiLang::SaveStringToXml()
  64. {
  65. tinyxml2::XMLDocument* doc = new tinyxml2::XMLDocument();
  66. doc->LoadFile(".\\Config\\SysData\\MultiLangForCpp.xml");//载入xml文件
  67. tinyxml2::XMLElement *rootNode;
  68. rootNode = doc->FirstChildElement(RootClassName);
  69. tinyxml2::XMLElement *collectionNode = rootNode->FirstChildElement("collection");
  70. for (auto member:mapMultiLang)
  71. {
  72. xmls::xString itemKey;
  73. xmls::xString itemText;
  74. xmls::xString itemName;
  75. xmls::Slo slo;
  76. slo.Register("itemKey", &itemKey);
  77. slo.Register("itemText", &itemText);
  78. slo.Register("itemName", &itemName);
  79. itemKey =std::to_string( member.first);
  80. itemText = member.second;
  81. itemName = "";
  82. tinyxml2::XMLElement *subClassNode = doc->NewElement("member");
  83. slo.Serialize(true, doc, subClassNode);
  84. collectionNode->InsertEndChild(subClassNode);
  85. }
  86. doc->SaveFile(".\\Config\\SysData\\MultiLangForCpp.xml");
  87. delete doc;
  88. return true;
  89. }