AlicizaX/Client/Assets/Books/Framework/Runtime/Localization.md

98 lines
2.1 KiB
Markdown
Raw Normal View History

2026-04-01 13:20:06 +08:00
# Localization
## 模块概述
Localization 模块负责语言管理、本地化表装载、键值查询与格式化输出。它支持启动时加载内置表与资源表,也支持运行时异步切换语言。
## 快速开始
1. 挂载 `LocalizationComponent`
2. 设置默认语言
3. 配置启动表或资源路径
4. 使用 `GameApp.Localization.GetString()`
```csharp
using AlicizaX;
public sealed class LocalizationQuickStart
{
public string GetTitle()
{
return GameApp.Localization.GetString("UI_Title");
}
}
```
## 架构说明
```text
LocalizationComponent
└─ LocalizationService
├─ GameLocaizationTable
├─ LocalizationLanguage
└─ LocalizationChangeEvent
```
## 核心类与接口
### `ILocalizationService`
公开能力:
- `Language`
- `Initialize(string language)`
- `ChangedLanguage(string language)`
- `SwitchLanguageAsync(string language, CancellationToken cancellationToken = default)`
- `GetString(...)`
- `TryGetRawString(...)`
- `CoverAddLocalizationConfig(...)`
- `IncreAddLocalizationConfig(...)`
- `ReloadLocalizationConfig(...)`
## API 参考
### `Initialize(string language)`
- 必填参数:`language`
- 返回值:无
### `SwitchLanguageAsync(string language, CancellationToken cancellationToken = default)`
- 必填参数:`language`
- 可选参数:`cancellationToken`
- 返回值:`UniTask`
### `GetString(string key, params object[] args)`
- 必填参数:`key`
- 可选参数:`args`
- 返回值:`string`
## 完整使用示例
```csharp
using AlicizaX;
using Cysharp.Threading.Tasks;
using UnityEngine;
public sealed class LocalizationExample : MonoBehaviour
{
private async void Start()
{
Debug.Log(GameApp.Localization.GetString("UI_Start"));
await GameApp.Localization.SwitchLanguageAsync("English");
Debug.Log(GameApp.Localization.GetString("UI_Start"));
}
}
```
## 最佳实践
- 统一 Key 命名规则
- 语言切换事件中只做刷新,不做重资源初始化
## 常见错误
- Key 不存在却未做兜底
- 资源服务未注册时依赖资源路径表