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,