using System.Collections; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using Netch.Properties; using Newtonsoft.Json; namespace Netch.Utils { public static class i18N { /// /// 数据 /// public static Hashtable Data = new Hashtable(); public static string LangCode { get; private set; } /// /// 加载 /// /// 语言代码 public static void Load(string langCode) { LangCode = langCode; var text = ""; if (langCode.Equals("System")) { // 加载系统语言 langCode = CultureInfo.CurrentCulture.Name; } if (langCode == "zh-CN") { // 尝试加载内置中文语言 text = Encoding.UTF8.GetString(Resources.zh_CN); } else if (langCode.Equals("en-US")) { // 清除得到英文 Data.Clear(); return; } else if (File.Exists($"i18n\\{langCode}")) { // 从外置文件中加载语言 text = File.ReadAllText($"i18n\\{langCode}"); } var data = JsonConvert.DeserializeObject>(text); if (data == null) return; Data = new Hashtable(); foreach (var v in data) { Data.Add(v.Key, v.Value); } } /// /// 翻译 /// /// 需要翻译的文本 /// 翻译完毕的文本 public static string Translate(params object[] text) { var a = new StringBuilder(); foreach (var t in text) if (t is string) a.Append(Data.Contains(t) ? Data[t].ToString() : t); else a.Append(t); return a.ToString(); } public static string TranslateFormat(string format, params object[] args) { for (var i = 0; i < args.Length; i++) { if (args[i] is string) { args[i] = Translate((string) args[i]); } } return string.Format(Translate(format), args); } public static List GetTranslateList() { var translateFile = new List {"System", "zh-CN", "en-US"}; if (!Directory.Exists("i18n")) return translateFile; translateFile.AddRange(Directory.GetFiles("i18n", "*").Select(fileName => fileName.Substring(5))); return translateFile; } } }