Skip to content

Commit f40753c

Browse files
committed
feat(localization): 添加本地化服务基础模块
实现本地化服务核心功能,包括: 1. 新增IResourceProvider接口定义资源提供者契约 2. 添加ResourceManager核心资源管理类 3. 实现DefaultResourceProvider默认资源提供者 4. 新增AssemblyResourceProvider程序集资源提供者 5. 创建LocalizationService静态入口类 6. 添加基础资源文件(Resources.resx) 7. 移除测试中不再使用的Reset方法 8. 在解决方案中添加GameFrameX.Foundation.Localization项目
1 parent 5b07f75 commit f40753c

11 files changed

Lines changed: 2065 additions & 17 deletions

File tree

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// GameFrameX 组织下的以及组织衍生的项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
2+
//
3+
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE 文件。
4+
//
5+
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
6+
7+
namespace GameFrameX.Foundation.Localization.Core;
8+
9+
/// <summary>
10+
/// 资源提供者接口 - 本地化资源的基础抽象
11+
/// </summary>
12+
/// <remarks>
13+
/// 定义了获取本地化字符串的基本契约,所有本地化资源提供者都应实现此接口。
14+
/// 实现类可以基于不同的资源存储方式,如程序集资源、文件、数据库等。
15+
/// </remarks>
16+
public interface IResourceProvider
17+
{
18+
/// <summary>
19+
/// 获取本地化字符串
20+
/// </summary>
21+
/// <param name="key">资源键,用于标识特定的本地化字符串</param>
22+
/// <returns>
23+
/// 如果找到对应的本地化字符串,返回本地化值;
24+
/// 如果未找到,返回传入的资源键作为后备值
25+
/// </returns>
26+
/// <remarks>
27+
/// 实现者应该确保线程安全性,支持并发调用。
28+
/// 当传入的键为 null 或空字符串时,应直接返回该键。
29+
/// </remarks>
30+
/// <example>
31+
/// <code>
32+
/// var provider = new MyResourceProvider();
33+
/// var message = provider.GetString("User.Welcome");
34+
/// // 返回:如果找到 "User.Welcome" 对应的本地化字符串,否则返回 "User.Welcome"
35+
/// </code>
36+
/// </example>
37+
string GetString(string key);
38+
}
39+
40+
/// <summary>
41+
/// 可懒加载的资源提供者接口
42+
/// </summary>
43+
/// <remarks>
44+
/// 继承自 IResourceProvider,增加了懒加载能力,支持资源的延迟初始化。
45+
/// 实现者可以优化资源加载性能,只在需要时才加载资源。
46+
/// </remarks>
47+
public interface ILazyResourceProvider : IResourceProvider
48+
{
49+
/// <summary>
50+
/// 获取一个值,指示资源提供者是否已完成初始化
51+
/// </summary>
52+
/// <value>
53+
/// 如果资源提供者已加载并准备好提供服务,则为 true;否则为 false。
54+
/// </value>
55+
bool IsInitialized { get; }
56+
57+
/// <summary>
58+
/// 确保资源已加载并初始化
59+
/// </summary>
60+
/// <remarks>
61+
/// 如果资源尚未加载,此方法将触发资源加载过程。
62+
/// 如果资源已经加载,此方法应该立即返回,不执行额外操作。
63+
/// 实现者应该确保此方法是线程安全的,可以多次调用。
64+
/// </remarks>
65+
/// <example>
66+
/// <code>
67+
/// var provider = new MyLazyResourceProvider();
68+
/// Console.WriteLine($"Initialized: {provider.IsInitialized}"); // false
69+
///
70+
/// provider.EnsureLoaded();
71+
/// Console.WriteLine($"Initialized: {provider.IsInitialized}"); // true
72+
///
73+
/// provider.EnsureLoaded(); // 重复调用应该快速返回
74+
/// </code>
75+
/// </example>
76+
void EnsureLoaded();
77+
}

0 commit comments

Comments
 (0)