mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-18 22:46:38 +08:00
7df3f29065
- 00-Index: 文档索引与快速导航 - 01-Overview: 项目概览、目录树、依赖关系、构建运行 - 02-Architecture: MVVM架构、模块划分、核心类职责(含Mermaid图) - 03-ShowCaseSystem: 72个ShowCase清单、路由注册、布局系统 - 04-WorkspaceSystem: 主窗口、导航面板、菜单系统 - 05-LocalizationSystem: LanguageProvider+Source Generator架构 - 06-IconSystem: IconProvider+Source Generator架构 - 07-TechStack: 技术栈清单(C#/Avalonia/ReactiveUI等) - 08-CodingConventions: 编码规范与ReactiveUI使用规范 - 09-RisksAndNotes: 风险、技术债、迭代检查清单
156 lines
4.8 KiB
Markdown
156 lines
4.8 KiB
Markdown
# 国际化系统
|
||
|
||
## 1. 概述
|
||
|
||
Gallery 使用 AtomUI 自研的国际化系统,基于 `LanguageProvider` + Source Generator 实现。支持中文(zh_CN)和英文(en_US)两种语言,运行时动态切换。
|
||
|
||
## 2. 架构
|
||
|
||
```mermaid
|
||
graph TB
|
||
subgraph "定义层"
|
||
LP["LanguageProvider 子类<br/>定义 const string 字段"]
|
||
ZH["zh_CN.cs<br/>中文翻译"]
|
||
EN["en_US.cs<br/>英文翻译"]
|
||
end
|
||
|
||
subgraph "生成层 (Source Generator)"
|
||
Enum["CaseNavigationLangResourceKind<br/>自动生成枚举"]
|
||
Ext["CaseNavigationLangResourceExtension<br/>自动生成 XAML 扩展"]
|
||
Pool["LanguageProviderPool.g.cs<br/>自动生成注册池"]
|
||
end
|
||
|
||
subgraph "使用层"
|
||
XAML["XAML 中使用<br/>{CaseNavigationLangResource DataDisplay}"]
|
||
Code["代码中使用<br/>LanguageManager.Instance"]
|
||
end
|
||
|
||
LP --> Enum
|
||
LP --> Ext
|
||
LP --> Pool
|
||
ZH --> LP
|
||
EN --> LP
|
||
Enum --> XAML
|
||
Ext --> XAML
|
||
Pool --> Code
|
||
```
|
||
|
||
## 3. LanguageProvider 定义模式
|
||
|
||
每个需要国际化的模块定义一个 `LanguageProvider` 子类:
|
||
|
||
```csharp
|
||
// Workspace/Localization/CaseNavigationLang/zh_CN.cs
|
||
[LanguageProvider("CaseNavigation")]
|
||
public class CaseNavigationZhCN : AbstractLanguageProvider
|
||
{
|
||
public const string General = "通用";
|
||
public const string General_Button = "按钮 Button";
|
||
public const string DataDisplay = "数据展示";
|
||
// ...
|
||
}
|
||
```
|
||
|
||
```csharp
|
||
// Workspace/Localization/CaseNavigationLang/en_US.cs
|
||
[LanguageProvider("CaseNavigation")]
|
||
public class CaseNavigationEnUS : AbstractLanguageProvider
|
||
{
|
||
public const string General = "General";
|
||
public const string General_Button = "Button";
|
||
public const string DataDisplay = "Data Display";
|
||
// ...
|
||
}
|
||
```
|
||
|
||
### 关键规则
|
||
|
||
1. **`[LanguageProvider("Name")]`** — 标记类为语言提供者,参数为提供者名称
|
||
2. **同一名称的多个类** — 对应不同语言变体(zh_CN / en_US)
|
||
3. **`const string` 字段** — 字段名作为资源键,字段值作为翻译文本
|
||
4. **字段名必须一致** — 不同语言类中相同含义的字段名必须完全相同
|
||
|
||
## 4. Source Generator 生成内容
|
||
|
||
### 4.1 LanguageResourceConst.g.cs
|
||
|
||
自动生成枚举和 XAML 扩展标记:
|
||
|
||
```csharp
|
||
// 自动生成
|
||
public enum CaseNavigationLangResourceKind
|
||
{
|
||
DataDisplay,
|
||
DataDisplay_Avatar,
|
||
DataDisplay_Badge,
|
||
// ... 所有 const string 字段名
|
||
General,
|
||
General_Button,
|
||
// ...
|
||
}
|
||
|
||
public class CaseNavigationLangResourceExtension : LanguageResourceExtension<CaseNavigationLangResourceKind>
|
||
{
|
||
// XAML 标记扩展,用于在 XAML 中引用国际化文本
|
||
}
|
||
```
|
||
|
||
### 4.2 LanguageProviderPool.g.cs
|
||
|
||
自动生成语言提供者注册池,在应用启动时自动注册所有语言提供者。
|
||
|
||
## 5. XAML 中使用
|
||
|
||
```xml
|
||
<!-- 使用生成的 XAML 扩展 -->
|
||
<NavMenuItem Header="{CaseNavigationLangResource General_Button}"
|
||
ItemKey="{x:Static vm:ButtonViewModel.ID}"/>
|
||
```
|
||
|
||
## 6. 语言切换
|
||
|
||
通过 `Application.Current.SetLanguageVariant()` 切换语言:
|
||
|
||
```csharp
|
||
// 切换到中文
|
||
Application.Current.SetLanguageVariant(LanguageVariant.zh_CN);
|
||
|
||
// 切换到英文
|
||
Application.Current.SetLanguageVariant(LanguageVariant.en_US);
|
||
```
|
||
|
||
切换后,所有使用 `LanguageResourceExtension` 的绑定会自动更新。
|
||
|
||
## 7. 当前国际化模块
|
||
|
||
| 模块 | LanguageProvider 名称 | 文件位置 |
|
||
|------|----------------------|---------|
|
||
| 导航面板 | `CaseNavigation` | `Workspace/Localization/CaseNavigationLang/` |
|
||
| 窗口菜单 | `WorkspaceWindow` | `Workspace/Localization/WorkspaceWindowLang/` |
|
||
|
||
## 8. 新增国际化资源步骤
|
||
|
||
1. 在对应模块的 `Localization/` 目录下创建 `zh_CN.cs` 和 `en_US.cs`
|
||
2. 两个文件中定义相同名称的 `const string` 字段
|
||
3. 使用 `[LanguageProvider("ModuleName")]` 标记类
|
||
4. Source Generator 自动生成枚举和 XAML 扩展
|
||
5. 在 XAML 中使用 `{ModuleNameLangResource FieldName}` 引用
|
||
|
||
## 9. WorkspaceWindowLang 资源清单
|
||
|
||
| 资源键 | 中文 | 英文 |
|
||
|--------|------|------|
|
||
| `MenuItemCompactMode` | 紧凑模式 | Compact Mode |
|
||
| `MenuItemDarkMode` | 暗色模式 | Dark Mode |
|
||
| `MenuItemEnableFullScreen` | 允许全屏 | Enable Full Screen |
|
||
| `MenuItemEnableMaximize` | 允许最大化 | Enable Maximize |
|
||
| `MenuItemEnableMinimize` | 允许最小化 | Enable Minimize |
|
||
| `MenuItemEnableMotion` | 启用动效 | Enable Motion |
|
||
| `MenuItemEnableMove` | 允许移动 | Enable Move |
|
||
| `MenuItemEnablePin` | 允许置顶 | Enable Pin |
|
||
| `MenuItemEnableResize` | 允许调整大小 | Enable Resize |
|
||
| `MenuItemEnableWaveSpirit` | 启用波纹 | Enable Wave Spirit |
|
||
| `MenuItemLanguage` | 语言 | Language |
|
||
| `MenuItemSettings` | 设置 | Settings |
|
||
| `MenuItemTheme` | 主题 | Theme |
|
||
| `MenuItemWindowOptions` | 窗口选项 | Window Options | |