XmlLocalizationHelper.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 Jiang Yin. All rights reserved.
  4. // Homepage: https://gameframework.cn/
  5. // Feedback: mailto:ellan@gameframework.cn
  6. //------------------------------------------------------------
  7. using GameFramework.Localization;
  8. using System;
  9. using System.Xml;
  10. using UnityGameFramework.Runtime;
  11. namespace MetaClient
  12. {
  13. /// <summary>
  14. /// XML 格式的本地化辅助器。
  15. /// </summary>
  16. public class XmlLocalizationHelper : DefaultLocalizationHelper
  17. {
  18. /// <summary>
  19. /// 解析字典。
  20. /// </summary>
  21. /// <param name="dictionaryString">要解析的字典字符串。</param>
  22. /// <param name="userData">用户自定义数据。</param>
  23. /// <returns>是否解析字典成功。</returns>
  24. public override bool ParseData(ILocalizationManager localizationManager, string dictionaryString, object userData)
  25. {
  26. try
  27. {
  28. string currentLanguage = GameEntry.Localization.Language.ToString();
  29. XmlDocument xmlDocument = new XmlDocument();
  30. xmlDocument.LoadXml(dictionaryString);
  31. XmlNode xmlRoot = xmlDocument.SelectSingleNode("Dictionaries");
  32. XmlNodeList xmlNodeDictionaryList = xmlRoot.ChildNodes;
  33. for (int i = 0; i < xmlNodeDictionaryList.Count; i++)
  34. {
  35. XmlNode xmlNodeDictionary = xmlNodeDictionaryList.Item(i);
  36. if (xmlNodeDictionary.Name != "Dictionary")
  37. {
  38. continue;
  39. }
  40. string language = xmlNodeDictionary.Attributes.GetNamedItem("Language").Value;
  41. if (language != currentLanguage)
  42. {
  43. continue;
  44. }
  45. XmlNodeList xmlNodeStringList = xmlNodeDictionary.ChildNodes;
  46. for (int j = 0; j < xmlNodeStringList.Count; j++)
  47. {
  48. XmlNode xmlNodeString = xmlNodeStringList.Item(j);
  49. if (xmlNodeString.Name != "String")
  50. {
  51. continue;
  52. }
  53. string key = xmlNodeString.Attributes.GetNamedItem("Key").Value;
  54. string value = xmlNodeString.Attributes.GetNamedItem("Value").Value;
  55. if (!localizationManager.AddRawString(key, value))
  56. {
  57. Log.Warning("Can not add raw string with key '{0}' which may be invalid or duplicate.", key);
  58. return false;
  59. }
  60. }
  61. }
  62. return true;
  63. }
  64. catch (Exception exception)
  65. {
  66. Log.Warning("Can not parse dictionary data with exception '{0}'.", exception.ToString());
  67. return false;
  68. }
  69. }
  70. }
  71. }