diff --git a/Netch/Netch.cs b/Netch/Netch.cs
index 1d60a0c5..77a1d9cf 100644
--- a/Netch/Netch.cs
+++ b/Netch/Netch.cs
@@ -39,15 +39,6 @@ namespace Netch
// 加载配置
Configuration.Load();
- // 加载语言
- i18N.Load(Global.Settings.Language);
-
- if (!Directory.Exists("bin") || !Directory.EnumerateFileSystemEntries("bin").Any())
- {
- MessageBoxX.Show(i18N.Translate("Please extract all files then run the program!"));
- Environment.Exit(2);
- }
-
// 检查是否已经运行
if (!Global.Mutex.WaitOne(0, false))
{
@@ -70,6 +61,15 @@ namespace Netch
dir.Delete(true);
}
+ // 加载语言
+ i18N.Load(Global.Settings.Language);
+
+ if (!Directory.Exists("bin") || !Directory.EnumerateFileSystemEntries("bin").Any())
+ {
+ MessageBoxX.Show(i18N.Translate("Please extract all files then run the program!"));
+ Environment.Exit(2);
+ }
+
Logging.Info($"版本: {UpdateChecker.Owner}/{UpdateChecker.Repo}@{UpdateChecker.Version}");
Task.Run(() => { Logging.Info($"主程序 SHA256: {Utils.Utils.SHA256CheckSum(Global.NetchExecutable)}"); });
Task.Run(() =>
diff --git a/Netch/Utils/i18N.cs b/Netch/Utils/i18N.cs
index 4eaeac10..f4e9d2da 100644
--- a/Netch/Utils/i18N.cs
+++ b/Netch/Utils/i18N.cs
@@ -29,49 +29,52 @@ namespace Netch.Utils
///
/// 加载
///
- /// 语言代码
- public static void Load(string langCode)
+ /// 语言代码
+ public static void Load(string value)
{
- LangCode = langCode;
+ string text;
+ var languages = GetTranslateList().Skip(1).ToList();
- var text = "";
- if (langCode.Equals("System"))
- // 加载系统语言
- langCode = CultureInfo.CurrentCulture.Name;
+ LangCode = value.Equals("System") ? CultureInfo.CurrentCulture.Name : value;
- if (langCode == "zh-CN")
+ if (!languages.Contains(LangCode))
{
- // 尝试加载内置中文语言
- 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}");
- }
- else
- {
- Logging.Error($"无法找到语言 {langCode}, 使用系统语言");
- // 加载系统语言
- LangCode = CultureInfo.CurrentCulture.Name;
+ var oldLangCode = LangCode;
+ LangCode = languages.FirstOrDefault(s => GetLanguage(s).Equals(GetLanguage(LangCode))) ?? "en-US";
+ Logging.Info($"找不到语言 {oldLangCode}, 使用 {LangCode}");
}
- var data = JsonConvert.DeserializeObject>(text);
+ switch (LangCode)
+ {
+ case "en-US":
+ Data.Clear();
+ return;
+ case "zh-CN":
+ text = Encoding.UTF8.GetString(Resources.zh_CN);
+ break;
+ default:
+ text = File.ReadAllText($"i18n\\{LangCode}");
+ break;
+ }
- if (data == null)
+ var dictionary = JsonConvert.DeserializeObject>(text);
+
+ if (dictionary == null)
return;
Data = new Hashtable();
- foreach (var v in data)
+ foreach (var v in dictionary)
Data.Add(v.Key, v.Value);
}
+ private static string GetLanguage(string culture)
+ {
+ if (!culture.Contains('-'))
+ return "";
+
+ return culture.Substring(0, culture.IndexOf('-'));
+ }
+
///
/// 翻译
///