feat(localization): 支持设置语言跟随系统语言
This commit is contained in:
@@ -38,6 +38,30 @@ namespace AibisDream.Framework
|
||||
|
||||
public static LocaleKind CurrentLocaleKind => GetLocaleKind(CurrentLanguageCode);
|
||||
|
||||
/// <summary>
|
||||
/// 解析 setting.json 中的 Language:空值表示跟随系统语言,否则使用用户保存的 code。
|
||||
/// </summary>
|
||||
public static string ResolveLanguage(string savedLanguage)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(savedLanguage))
|
||||
{
|
||||
return savedLanguage.Trim();
|
||||
}
|
||||
|
||||
return MapSystemLanguage(Application.systemLanguage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 Unity 系统语言映射到项目支持的 Locale code。
|
||||
/// </summary>
|
||||
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
|
||||
|
||||
@@ -43,36 +43,11 @@ namespace AibisDream
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果文件不存在,则复制默认设置并根据系统语言设置初始语言值
|
||||
// 如果文件不存在,则复制默认设置(Language 为空表示跟随系统语言)
|
||||
var defaultSetting = JsonUtil.ReadJObject(SettingDefaultPath);
|
||||
|
||||
// 根据当前系统语言设置初始语言值
|
||||
string systemLanguage = GetLanguageBySystemLanguage();
|
||||
defaultSetting["Language"] = systemLanguage;
|
||||
|
||||
// 保存设置文件
|
||||
JsonUtil.SaveJObject(defaultSetting, SettingPath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据系统语言获取对应的语言代码
|
||||
/// </summary>
|
||||
/// <returns>语言代码:zh-Hans、en、ja-JP,默认返回 en</returns>
|
||||
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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"Volume": "0.20",
|
||||
"Language": "zh-Hans",
|
||||
"Language": "",
|
||||
"WindowMode": "FullScreen",
|
||||
"TextSpeed": "3.0",
|
||||
"OpenTimer": false,
|
||||
|
||||
Reference in New Issue
Block a user