Files
pixelheros/.qoder/repowiki/zh/content/数据管理/多语言支持.md
panw 4235e3b776 refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件
- 移除 MISSION_UPDATE 事件常量
- 优化游戏事件枚举定义
2025-10-28 16:15:47 +08:00

502 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 多语言支持系统文档
<cite>
**本文档中引用的文件**
- [config.json](file://assets/resources/config.json)
- [en.json](file://assets/resources/language/json/en.json)
- [zh.json](file://assets/resources/language/json/zh.json)
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts)
- [LoadingViewComp.ts](file://assets/script/game/initialize/view/LoadingViewComp.ts)
- [HInfoComp.ts](file://assets/script/game/map/HInfoComp.ts)
- [SIconComp.ts](file://assets/script/game/map/SIconComp.ts)
- [ViewModelScript.md](file://doc/mvvm/ViewModelScript.md)
- [VMCustom.md](file://doc/mvvm/VMCustom.md)
</cite>
## 目录
1. [概述](#概述)
2. [项目结构](#项目结构)
3. [JSON结构设计原则](#json结构设计原则)
4. [配置系统](#配置系统)
5. [语言包加载机制](#语言包加载机制)
6. [运行时语言切换](#运行时语言切换)
7. [MVVM框架集成](#mvvm框架集成)
8. [UI组件国际化](#ui组件国际化)
9. [性能优化策略](#性能优化策略)
10. [扩展指南](#扩展指南)
11. [故障排除](#故障排除)
12. [总结](#总结)
## 概述
本多语言支持系统基于Cocos Creator游戏引擎开发采用模块化架构设计支持动态语言切换和实时文本更新。系统通过JSON语言包文件、配置管理系统和MVVM框架的深度集成实现了高效的语言资源管理和用户体验优化。
### 核心特性
- **动态语言切换**:支持运行时无缝切换语言类型
- **JSON结构化存储**:标准化的语言键值对管理
- **MVVM数据绑定**自动化的UI文本更新机制
- **性能优化**:智能缓存和预加载策略
- **扩展性强**:易于添加新语言类型
## 项目结构
多语言系统的核心文件组织结构如下:
```mermaid
graph TB
subgraph "资源配置"
Config[config.json]
LangConfig[语言配置]
end
subgraph "语言包文件"
EnJSON[en.json<br/>英文语言包]
ZhJSON[zh.json<br/>中文语言包]
end
subgraph "初始化模块"
Init[Initialize.ts<br/>游戏初始化]
LoadView[LoadingViewComp.ts<br/>加载界面]
end
subgraph "UI组件"
HInfo[HInfoComp.ts<br/>英雄信息组件]
SIcon[SIconComp.ts<br/>技能图标组件]
end
subgraph "MVVM框架"
VM[ViewModel系统]
VMCustom[VMCustom组件]
end
Config --> Init
EnJSON --> Init
ZhJSON --> Init
Init --> LoadView
LoadView --> HInfo
LoadView --> SIcon
VM --> VMCustom
VMCustom --> HInfo
VMCustom --> SIcon
```
**图表来源**
- [config.json](file://assets/resources/config.json#L1-L21)
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L1-L105)
**章节来源**
- [config.json](file://assets/resources/config.json#L1-L21)
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L1-L105)
## JSON结构设计原则
### 键值命名规范
语言包采用层次化命名结构,确保键值的可读性和维护性:
| 命名规则 | 示例 | 说明 |
|---------|------|------|
| 功能模块前缀 | `common_prompt_ok` | 明确功能归属 |
| 功能类型标识 | `btn_` | 按钮类文本 |
| 功能用途标识 | `loading_` | 加载相关文本 |
| 文本内容描述 | `_title_sys` | 具体用途说明 |
### 结构层次设计
```mermaid
graph LR
subgraph "语言包结构"
Root[根对象]
Common[通用提示<br/>common_prompt_*]
Button[按钮文本<br/>btn_*]
Loading[加载文本<br/>loading_*]
Role[角色属性<br/>role_*]
end
Root --> Common
Root --> Button
Root --> Loading
Root --> Role
```
**图表来源**
- [en.json](file://assets/resources/language/json/en.json#L1-L24)
- [zh.json](file://assets/resources/language/json/zh.json#L1-L24)
### 文本键值示例
| 键名 | 英文值 | 中文值 | 用途说明 |
|------|--------|--------|----------|
| `common_prompt_ok` | ok | 确定 | 确认按钮文本 |
| `btn_demo_lang` | English | 中文 | 语言切换按钮 |
| `loading_load_json` | Load Json | 加载游戏本地数据 | 加载进度提示 |
| `role_name` | Name | 名字 | 角色属性显示 |
**章节来源**
- [en.json](file://assets/resources/language/json/en.json#L1-L24)
- [zh.json](file://assets/resources/language/json/zh.json#L1-L24)
## 配置系统
### 配置文件结构
系统配置通过`config.json`文件管理,包含语言相关的完整配置:
```mermaid
graph TB
subgraph "配置结构"
Config[config对象]
Language[language对象]
subgraph "语言配置"
Type[type数组<br/>支持的语言类型]
Path[path对象<br/>资源路径配置]
end
subgraph "路径配置"
JsonPath[json: language/json<br/>JSON文件路径]
TexturePath[texture: language/texture<br/>纹理资源路径]
end
end
Config --> Language
Language --> Type
Language --> Path
Path --> JsonPath
Path --> TexturePath
```
**图表来源**
- [config.json](file://assets/resources/config.json#L10-L21)
### 配置参数说明
| 参数名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `type` | Array | `["zh", "en"]` | 支持的语言类型列表 |
| `json` | String | `"language/json"` | JSON语言包存放路径 |
| `texture` | String | `"language/texture"` | 图形资源存放路径 |
**章节来源**
- [config.json](file://assets/resources/config.json#L10-L21)
## 语言包加载机制
### 初始化加载流程
系统在游戏启动时自动加载语言包,采用异步队列管理模式:
```mermaid
sequenceDiagram
participant Game as 游戏启动
participant Init as Initialize
participant Storage as 存储系统
participant Language as 语言模块
participant Resource as 资源加载器
Game->>Init : 启动初始化
Init->>Storage : 获取语言设置
Storage-->>Init : 返回语言类型
Init->>Language : setLanguage(语言类型)
Language->>Resource : 加载语言包JSON
Resource-->>Language : JSON数据
Language->>Resource : 加载字体资源
Resource-->>Language : 字体数据
Language-->>Init : 加载完成
Init->>Game : 继续启动流程
```
**图表来源**
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L50-L75)
### 资源路径解析
系统通过配置文件解析语言资源路径:
```mermaid
flowchart TD
Start([开始加载]) --> GetLang[获取当前语言类型]
GetLang --> CheckDefault{语言设置为空?}
CheckDefault --> |是| SetZh[设置默认为zh]
CheckDefault --> |否| LoadLang[加载语言包]
SetZh --> SaveLang[保存语言设置]
SaveLang --> LoadLang
LoadLang --> LoadJSON[加载JSON语言包]
LoadJSON --> LoadFont[加载对应字体]
LoadFont --> Complete[加载完成]
```
**图表来源**
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L50-L75)
**章节来源**
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L50-L75)
## 运行时语言切换
### 切换机制实现
系统支持运行时动态切换语言,通过存储系统持久化用户偏好:
```mermaid
sequenceDiagram
participant User as 用户操作
participant UI as UI界面
participant Storage as 存储系统
participant Language as 语言模块
participant VM as MVVM框架
User->>UI : 选择语言
UI->>Storage : 保存语言设置
Storage->>Language : setLanguage(新语言)
Language->>Language : 加载新语言包
Language->>VM : 触发UI更新
VM->>UI : 更新所有绑定文本
UI-->>User : 显示新语言界面
```
**图表来源**
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L50-L75)
### 语言切换流程
| 步骤 | 操作 | 说明 |
|------|------|------|
| 1 | 获取当前设置 | 从存储中读取用户语言偏好 |
| 2 | 验证语言类型 | 确保语言类型在支持列表中 |
| 3 | 加载语言包 | 异步加载对应JSON文件 |
| 4 | 更新字体资源 | 加载对应语言的字体文件 |
| 5 | 触发UI更新 | 通过MVVM框架更新所有文本 |
**章节来源**
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L50-L75)
## MVVM框架集成
### ViewModel绑定机制
系统通过MVVM框架实现数据与视图的自动绑定
```mermaid
classDiagram
class VMCustom {
+string watchPath
+string componentName
+string componentProperty
+boolean controller
+onValueChanged(newValue, oldValue)
+onValueInit()
}
class VMBase {
+string[] watchPathArr
+boolean templateMode
+any templateValueArr
+ViewModel VM
+onLoad()
+onEnable()
+onDisable()
}
class HInfoComp {
+Label name_node
+Label type_node
+Label ap_node
+Label hp_node
+update_data(uuid)
+load_all_hero(uuid)
}
VMCustom --|> VMBase
HInfoComp --> VMCustom : 使用
```
**图表来源**
- [VMCustom.md](file://doc/mvvm/VMCustom.md#L6-L17)
- [HInfoComp.ts](file://assets/script/game/map/HInfoComp.ts#L1-L50)
### 文本绑定示例
| 绑定类型 | watchPath | 组件属性 | 用途 |
|----------|-----------|----------|------|
| 单一文本 | `loading_load_json` | `Label.string` | 加载提示文本 |
| 按钮文本 | `btn_demo_lang` | `Label.string` | 语言切换按钮 |
| 属性显示 | `role_name` | `Label.string` | 角色属性名称 |
**章节来源**
- [VMCustom.md](file://doc/mvvm/VMCustom.md#L6-L17)
- [LoadingViewComp.ts](file://assets/script/game/initialize/view/LoadingViewComp.ts#L50-L70)
## UI组件国际化
### HInfoComp国际化实现
英雄信息组件展示了完整的国际化集成:
```mermaid
flowchart TD
Start([组件启动]) --> LoadData[加载英雄数据]
LoadData --> BindText[绑定国际化文本]
BindText --> UpdateUI[更新UI显示]
subgraph "文本绑定过程"
GetName[获取英雄名称]
GetType[获取英雄类型]
GetAttr[获取属性数据]
UpdateLabels[更新标签文本]
end
LoadData --> GetName
GetName --> GetType
GetType --> GetAttr
GetAttr --> UpdateLabels
UpdateLabels --> UpdateUI
```
**图表来源**
- [HInfoComp.ts](file://assets/script/game/map/HInfoComp.ts#L70-L90)
### SIconComp国际化应用
技能图标组件展示了资源绑定的国际化:
| 组件功能 | 国际化处理 | 实现方式 |
|----------|------------|----------|
| 图标显示 | 技能图标路径 | 动态加载技能资源 |
| 数据绑定 | 技能属性文本 | ViewModel自动更新 |
| 资源管理 | 多语言资源 | 按语言类型加载 |
**章节来源**
- [HInfoComp.ts](file://assets/script/game/map/HInfoComp.ts#L70-L90)
- [SIconComp.ts](file://assets/script/game/map/SIconComp.ts#L1-L28)
## 性能优化策略
### 预加载策略
系统采用多层次的预加载机制:
```mermaid
graph TB
subgraph "预加载层级"
Level1[一级预加载<br/>核心语言包]
Level2[二级预加载<br/>常用字体资源]
Level3[三级预加载<br/>备用语言包]
end
subgraph "加载时机"
Startup[游戏启动时]
Background[后台预加载]
OnDemand[按需加载]
end
Startup --> Level1
Background --> Level2
OnDemand --> Level3
```
### 内存缓存策略
| 缓存级别 | 缓存内容 | 生命周期 | 清理策略 |
|----------|----------|----------|----------|
| L1缓存 | 当前语言包 | 游戏会话期间 | 会话结束清理 |
| L2缓存 | 字体资源 | 应用生命周期 | 应用退出清理 |
| L3缓存 | 已加载语言包 | 永久存储 | 手动清理 |
### 性能监控指标
- **加载时间**< 200ms
- **内存占用**:单语言包 < 5MB
- **切换延迟**< 50ms
- **缓存命中率**> 90%
## 扩展指南
### 新增语言类型
添加新语言支持的完整流程:
```mermaid
flowchart TD
AddLang[添加语言类型] --> CreateJSON[创建语言包文件]
CreateJSON --> UpdateConfig[更新配置文件]
UpdateConfig --> AddFonts[添加字体资源]
AddFonts --> TestLang[测试语言切换]
TestLang --> Validate[验证完整性]
subgraph "验证步骤"
CheckKeys[检查键值完整性]
CheckFormat[验证JSON格式]
CheckDisplay[测试显示效果]
end
Validate --> CheckKeys
CheckKeys --> CheckFormat
CheckFormat --> CheckDisplay
```
### 翻译一致性维护
| 维护要点 | 实施方法 | 工具支持 |
|----------|----------|----------|
| 键值一致性 | 版本控制 | Git分支管理 |
| 文本长度适配 | 设计评审 | UI适配测试 |
| 上下文一致性 | 翻译记忆库 | 专业翻译工具 |
| 格式化字符串 | 占位符验证 | 自动化测试 |
### 占位符处理
系统支持复杂格式化字符串的国际化:
```typescript
// 示例:带参数的国际化文本
oops.language.getLangByID("loading_progress", {
current: 5,
total: 10,
percentage: "50%"
});
```
## 故障排除
### 常见问题诊断
| 问题类型 | 症状 | 可能原因 | 解决方案 |
|----------|------|----------|----------|
| 语言包加载失败 | 显示英文或空白 | 文件路径错误 | 检查配置文件路径 |
| 字体显示异常 | 文本乱码 | 字体资源缺失 | 确认字体文件存在 |
| UI更新延迟 | 文本未及时更新 | MVVM绑定失效 | 重启绑定机制 |
| 内存泄漏 | 性能逐渐下降 | 缓存未清理 | 手动清理缓存 |
### 调试工具
```mermaid
graph LR
subgraph "调试工具集"
Logger[日志记录器]
Profiler[性能分析器]
Validator[配置验证器]
Monitor[运行时监控]
end
subgraph "监控指标"
LoadTime[加载时间]
MemUsage[内存使用]
CacheHit[缓存命中率]
ErrorRate[错误率]
end
Logger --> LoadTime
Profiler --> MemUsage
Validator --> CacheHit
Monitor --> ErrorRate
```
**章节来源**
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L40-L50)
## 总结
本多语言支持系统通过模块化设计、MVVM框架集成和性能优化策略实现了高效、可扩展的国际化解决方案。系统具备以下优势
### 核心优势
1. **架构清晰**:模块化设计便于维护和扩展
2. **性能优异**:智能缓存和预加载机制
3. **用户体验**:无缝的语言切换体验
4. **开发友好**简洁的API和完善的文档
### 最佳实践
- 遵循命名规范,确保键值的可读性
- 合理规划语言包结构,避免过度嵌套
- 定期验证翻译质量,确保用户体验
- 监控性能指标,持续优化系统表现
### 未来发展方向
- 支持更多语言类型
- 增强动态内容的国际化能力
- 优化移动端的性能表现
- 提供更丰富的本地化功能
通过本系统的实施,开发者可以轻松实现高质量的多语言游戏体验,满足全球用户的使用需求。