多轮审查评估

This commit is contained in:
2026-05-13 09:19:54 +08:00
parent 458f344e83
commit 1b37297585
57 changed files with 3019 additions and 218 deletions

View File

@@ -9,12 +9,13 @@
// ]
// }
//
// 用法(静态 Facade保持调用兼容
// LocalizationManager.Get("ui_start") → "开始游戏"
// LocalizationManager.Get("dlg_hero", "Dialogue") → Dialogue 表中的对应文本
//
// 服务调用(通过 ServiceLocator
// 推荐用法(通过 ServiceLocator 获取 ILocalizationService 实例
// ServiceLocator.GetOrDefault<ILocalizationService>()?.Get("ui_start")
// ServiceLocator.GetOrDefault<ILocalizationService>()?.SetLanguage(Language.English)
//
// 便捷静态方法(内部仍走 ServiceLocator推荐在热路径之外使用
// LocalizationManager.Get("ui_start")
// LocalizationManager.Get("dlg_hero", "Dialogue")
using System;
using System.Collections.Generic;
@@ -28,7 +29,6 @@ namespace BaseGames.Localization
/// 本地化管理器MonoBehaviour挂在 Persistent 场景)。
/// 实现 ILocalizationService + ISaveable通过 ServiceLocator 注册。
/// 语言偏好持久化到 SaveData.Settings.Language不使用 PlayerPrefs。
/// 保留静态 Get() Facade现有调用方无需修改。
/// </summary>
public class LocalizationManager : MonoBehaviour, ILocalizationService, ISaveable
{
@@ -39,15 +39,12 @@ namespace BaseGames.Localization
// 双层缓存languageKey("ChineseSimplified/UI") → (key → value)
private readonly Dictionary<string, Dictionary<string, string>> _cache = new();
// ── 静态事件代理(向后兼容静态订阅方式)─────────────────────────────────
/// <summary>语言切换时触发(静态代理,可通过 LocalizationManager.OnLanguageChanged += 订阅)。</summary>
public static event Action<Language> OnLanguageChanged;
// ILocalizationService 显式实现:委托给静态事件
// ILocalizationService 实例事件
private event Action<Language> _onLanguageChanged;
event Action<Language> ILocalizationService.OnLanguageChanged
{
add { OnLanguageChanged += value; }
remove { OnLanguageChanged -= value; }
add => _onLanguageChanged += value;
remove => _onLanguageChanged -= value;
}
// ── 生命周期 ──────────────────────────────────────────────────────────
@@ -80,7 +77,7 @@ namespace BaseGames.Localization
{
if (_currentLanguage == language) return;
_currentLanguage = language;
OnLanguageChanged?.Invoke(language);
_onLanguageChanged?.Invoke(language);
}
/// <summary>
@@ -118,7 +115,7 @@ namespace BaseGames.Localization
SetLanguage(lang);
}
// ── 静态 Facade保持现有调用方不变────────────────────────────────────
// ── 静态便捷方法 ─────────────────────────────────────────────────────────
/// <summary>
/// 静态快捷获取本地化字符串。委托给 ILocalizationService 实例;服务未注册时直接返回 key。
/// </summary>