diff --git a/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs b/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs index 0de3f1307..86d67fa03 100644 --- a/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs +++ b/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs @@ -38,6 +38,30 @@ namespace AibisDream.Framework public static LocaleKind CurrentLocaleKind => GetLocaleKind(CurrentLanguageCode); + /// + /// 解析 setting.json 中的 Language:空值表示跟随系统语言,否则使用用户保存的 code。 + /// + public static string ResolveLanguage(string savedLanguage) + { + if (!string.IsNullOrWhiteSpace(savedLanguage)) + { + return savedLanguage.Trim(); + } + + return MapSystemLanguage(Application.systemLanguage); + } + + /// + /// 将 Unity 系统语言映射到项目支持的 Locale code。 + /// + public static string MapSystemLanguage(SystemLanguage lang) => lang switch + { + SystemLanguage.Chinese or SystemLanguage.ChineseSimplified or SystemLanguage.ChineseTraditional => "zh-Hans", + SystemLanguage.Japanese => "ja-JP", + SystemLanguage.English => "en", + _ => "en", + }; + static LocalizationKit() { #if UNITY_EDITOR diff --git a/Assets/Scripts/Game Loop/SettingLoader.cs b/Assets/Scripts/Game Loop/SettingLoader.cs index 493703edd..06b3ff6c5 100644 --- a/Assets/Scripts/Game Loop/SettingLoader.cs +++ b/Assets/Scripts/Game Loop/SettingLoader.cs @@ -43,36 +43,11 @@ namespace AibisDream return; } - // 如果文件不存在,则复制默认设置并根据系统语言设置初始语言值 + // 如果文件不存在,则复制默认设置(Language 为空表示跟随系统语言) var defaultSetting = JsonUtil.ReadJObject(SettingDefaultPath); - - // 根据当前系统语言设置初始语言值 - string systemLanguage = GetLanguageBySystemLanguage(); - defaultSetting["Language"] = systemLanguage; - - // 保存设置文件 JsonUtil.SaveJObject(defaultSetting, SettingPath); } - /// - /// 根据系统语言获取对应的语言代码 - /// - /// 语言代码:zh-Hans、en、ja-JP,默认返回 en - private string GetLanguageBySystemLanguage() - { - SystemLanguage systemLang = Application.systemLanguage; - - return systemLang switch - { - SystemLanguage.Chinese => "zh-Hans", - SystemLanguage.ChineseSimplified => "zh-Hans", - SystemLanguage.ChineseTraditional => "zh-Hans", - SystemLanguage.Japanese => "ja-JP", - SystemLanguage.English => "en", - _ => "en", - }; - } - private void LoadAllSetting() { var settingConfig = _container.ReadAll(); @@ -103,8 +78,7 @@ namespace AibisDream #endif break; case "Language": - // 确保本地化系统已初始化 - LocalizationKit.SwitchLanguage(value); + LocalizationKit.SwitchLanguage(LocalizationKit.ResolveLanguage(value)); break; case "OpenTimer": var isTimerOpen = bool.TryParse(value, out var result) ? result : false; diff --git a/Assets/Scripts/UI/Terminal/TerminalSettingPanel.cs b/Assets/Scripts/UI/Terminal/TerminalSettingPanel.cs index c7f59fd47..c2f5d5404 100644 --- a/Assets/Scripts/UI/Terminal/TerminalSettingPanel.cs +++ b/Assets/Scripts/UI/Terminal/TerminalSettingPanel.cs @@ -1,5 +1,6 @@ using System; using AibisDream; +using AibisDream.Framework; using UnityEngine; namespace AibisDream.UI @@ -145,7 +146,7 @@ namespace AibisDream.UI if (settings.TryGetValue("Language", out var language)) { - languageOption?.SetValue(language); + languageOption?.SetValue(LocalizationKit.ResolveLanguage(language)); } } diff --git a/Assets/StreamingAssets/Config/setting.json b/Assets/StreamingAssets/Config/setting.json index 4b7785746..60298a101 100644 --- a/Assets/StreamingAssets/Config/setting.json +++ b/Assets/StreamingAssets/Config/setting.json @@ -1,6 +1,6 @@ { "Volume": "0.20", - "Language": "zh-Hans", + "Language": "", "WindowMode": "FullScreen", "TextSpeed": "3.0", "OpenTimer": false,