diff --git a/GFramework.Godot/Setting/Data/LocalizationMap.cs b/GFramework.Godot/Setting/Data/LocalizationMap.cs index fffcd0f7..369d0fc3 100644 --- a/GFramework.Godot/Setting/Data/LocalizationMap.cs +++ b/GFramework.Godot/Setting/Data/LocalizationMap.cs @@ -20,24 +20,47 @@ public class LocalizationMap { private const string DefaultFrameworkLanguage = "eng"; private const string DefaultGodotLocale = "en"; + private readonly Dictionary _frameworkLanguageMap; + private readonly Dictionary _languageMap; /// - /// 用户语言 -> Godot locale 映射表。 + /// 使用默认的 Godot locale 与框架语言码映射初始化本地化设置。 /// - public Dictionary LanguageMap { get; set; } = new(StringComparer.Ordinal) + public LocalizationMap() + : this(CreateDefaultLanguageMap(), CreateDefaultFrameworkLanguageMap()) { - { "简体中文", "zh_CN" }, - { "English", "en" } - }; + } /// - /// 用户语言 -> GFramework 本地化语言码映射表。 + /// 使用外部提供的映射初始化本地化设置。 + /// 构造函数会复制输入字典,避免调用方在实例创建后继续修改内部状态。 /// - public Dictionary FrameworkLanguageMap { get; set; } = new(StringComparer.Ordinal) + /// 用户语言到 Godot locale 的映射。 + /// 用户语言到 GFramework 本地化语言码的映射。 + /// + /// 当 时抛出。 + /// + public LocalizationMap( + IReadOnlyDictionary languageMap, + IReadOnlyDictionary frameworkLanguageMap) { - { "简体中文", "zhs" }, - { "English", "eng" } - }; + ArgumentNullException.ThrowIfNull(languageMap); + ArgumentNullException.ThrowIfNull(frameworkLanguageMap); + + // 复制外部输入,避免公共属性把可变集合直接暴露给调用方。 + _languageMap = new Dictionary(languageMap, StringComparer.Ordinal); + _frameworkLanguageMap = new Dictionary(frameworkLanguageMap, StringComparer.Ordinal); + } + + /// + /// 获取用户语言到 Godot locale 的只读映射表。 + /// + public IReadOnlyDictionary LanguageMap => _languageMap; + + /// + /// 获取用户语言到 GFramework 本地化语言码的只读映射表。 + /// + public IReadOnlyDictionary FrameworkLanguageMap => _frameworkLanguageMap; /// /// 解析用户保存的语言值对应的 Godot locale。 @@ -68,4 +91,22 @@ public class LocalizationMap return FrameworkLanguageMap.GetValueOrDefault(storedLanguage, DefaultFrameworkLanguage); } + + private static Dictionary CreateDefaultLanguageMap() + { + return new Dictionary(StringComparer.Ordinal) + { + { "简体中文", "zh_CN" }, + { "English", "en" } + }; + } + + private static Dictionary CreateDefaultFrameworkLanguageMap() + { + return new Dictionary(StringComparer.Ordinal) + { + { "简体中文", "zhs" }, + { "English", "eng" } + }; + } }