I18n 发表于 2023-06-15 15:20:17 字数统计 199 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263using System.Collections.Generic; using System.Globalization; using System.IO; using System.Xml; namespace I18n { public class I18nTool { private readonly Dictionary<string, Dictionary<string, string>> _translations; public I18nTool(string filePath) { _translations = new Dictionary<string, Dictionary<string, string>>(); var xmlDocument = new XmlDocument(); xmlDocument.Load(filePath); foreach (XmlNode languageNode in xmlDocument.SelectNodes("/languages/language")) { var language = languageNode.Attributes["name"].Value; var translationDict = new Dictionary<string, string>(); foreach (XmlNode translationNode in languageNode.SelectNodes("translation")) { var key = translationNode.Attributes["key"].Value; var value = translationNode.InnerText; translationDict[key] = value; } _translations[language] = translationDict; } } public string Translate(string key, string language = null) { if (language == null) { language = CultureInfo.CurrentUICulture.Name; } if (_translations.TryGetValue(language, out var translationDict) && translationDict.TryGetValue(key, out var value)) { return value; } return key; } } } // <languages> // <language name="en-US"> // <translation key="hello">Hello</translation> // <translation key="world">World</translation> // </language> // <language name="zh-CN"> // <translation key="hello">你好</translation> // <translation key="world">世界</translation> // </language> // </languages>