datai/docs/archive/changelog/2026-01-25-002-02-changelog.md

262 lines
8.6 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.

# 变更日志
## 元数据
- 需求编号002-02
- 创建时间2026-01-25
- 创建人AI Assistant
- 版本号v1.0.0
## 变更概述
实现后端国际化功能,包括错误消息国际化、日志消息国际化、验证消息国际化、通知消息国际化、用户语言偏好管理和国际化资源管理等功能。该功能使系统能够根据用户的语言偏好显示相应的多语言内容,提升用户体验。
## 变更内容
### 新增功能
#### 1. 错误消息国际化
- 创建 ErrorCode 枚举类,将错误代码映射到国际化资源键
- 扩展 GlobalExceptionHandler 类,支持根据用户语言偏好返回国际化错误消息
- 实现自动从请求上下文获取用户语言偏好
- 支持默认语言回退机制
#### 2. 日志消息国际化
- 扩展 LogAspect 切面类,支持国际化日志消息
- 在日志记录时自动获取当前用户的语言偏好
- 支持操作日志和系统日志的国际化
#### 3. 验证消息国际化
- 创建 ValidationConfig 配置类,支持国际化验证消息
- 集成 Spring Validation 和 MessageSource
- 自动根据用户语言偏好返回验证错误消息
#### 4. 通知消息国际化
- 扩展 IMessageSystemService 接口,添加国际化通知消息方法
- 扩展 MessageSystemServiceImpl 类,实现国际化通知消息发送
- 支持根据接收者语言偏好发送通知
#### 5. 用户语言偏好管理
- 扩展 SysUser 实体类,添加 langCode 字段存储用户语言偏好
- 创建 I18nController 类,提供语言偏好管理接口
- 支持用户设置和查询语言偏好
- 支持系统默认语言配置
#### 6. 国际化资源管理
- 更新 I18nConfig 配置类,使用 ReloadableResourceBundleMessageSource
- 支持热加载国际化资源文件
- 创建 messages.properties 和 messages_en_US.properties 资源文件
- 提供刷新国际化资源的接口
### 修改功能
#### 1. 扩展 SysUser 实体类
- 添加 langCode 字段VARCHAR(10)
- 添加 getter 和 setter 方法
- 支持用户语言偏好持久化
#### 2. 扩展 MessageUtils 工具类
- 添加支持 Locale 参数的 getMessage 方法
- 添加支持用户 ID 的 getMessage 方法
- 自动从用户上下文获取语言偏好
- 支持默认语言回退
#### 3. 更新 I18nConfig 配置类
- 使用 ReloadableResourceBundleMessageSource 替代 ResourceBundleMessageSource
- 配置资源文件编码为 UTF-8
- 设置缓存时间为 3600 秒
- 支持资源文件热加载
#### 4. 扩展 LogAspect 切面类
- 在记录操作日志时使用国际化消息
- 支持根据当前用户语言偏好记录日志
- 保持原有日志记录逻辑不变
#### 5. 扩展 GlobalExceptionHandler 类
- 在处理异常时使用国际化错误消息
- 支持根据用户语言偏好返回错误消息
- 保持原有异常处理逻辑不变
#### 6. 扩展 IMessageSystemService 接口
- 添加 sendI18nMessage 方法,支持国际化通知消息
- 添加 batchSendI18nMessage 方法,支持批量国际化通知消息
- 保持原有通知消息方法不变
#### 7. 扩展 MessageSystemServiceImpl 类
- 实现 sendI18nMessage 方法
- 实现 batchSendI18nMessage 方法
- 支持根据接收者语言偏好发送通知
- 保持原有通知消息逻辑不变
### 新增代码文件
#### 枚举类
- `datai-framework/src/main/java/com/datai/framework/enums/ErrorCode.java` - 错误代码枚举类
#### 实体类扩展
- `datai-modules-system/src/main/java/com/datai/modules/system/domain/SysUser.java` - 扩展 SysUser 实体类,添加 langCode 字段
#### 工具类扩展
- `datai-framework/src/main/java/com/datai/framework/utils/MessageUtils.java` - 扩展 MessageUtils 工具类,支持国际化
#### 配置类
- `datai-framework/src/main/java/com/datai/framework/config/I18nConfig.java` - 更新 I18nConfig 配置类
- `datai-framework/src/main/java/com/datai/framework/config/ValidationConfig.java` - 新增 ValidationConfig 配置类
#### 切面类扩展
- `datai-framework/src/main/java/com/datai/framework/aspectj/LogAspect.java` - 扩展 LogAspect 切面类,支持国际化日志
#### 异常处理类扩展
- `datai-framework/src/main/java/com/datai/framework/web/exception/GlobalExceptionHandler.java` - 扩展 GlobalExceptionHandler 类,支持国际化错误消息
#### 控制器类
- `datai-framework/src/main/java/com/datai/framework/web/controller/I18nController.java` - 新增 I18nController 类,提供国际化管理接口
#### 国际化资源文件
- `datai-framework/src/main/resources/i18n/messages.properties` - 中文国际化资源文件
- `datai-framework/src/main/resources/i18n/messages_en_US.properties` - 英文国际化资源文件
#### 单元测试
- `datai-framework/src/test/java/com/datai/framework/enums/ErrorCodeTest.java` - ErrorCode 单元测试
- `datai-framework/src/test/java/com/datai/framework/utils/MessageUtilsTest.java` - MessageUtils 单元测试
#### 服务类扩展
- `datai-modules-system/src/main/java/com/datai/modules/system/service/IMessageSystemService.java` - 扩展 IMessageSystemService 接口
- `datai-modules-system/src/main/java/com/datai/modules/system/service/impl/MessageSystemServiceImpl.java` - 扩展 MessageSystemServiceImpl 类
### 新增文档
#### 需求文档
- [后端国际化需求](../requirements/2026-01-21-002-02-后端国际化需求.md)
#### 设计文档
- [后端国际化设计](../design/2026-01-21-002-02-后端国际化设计.md)
#### 决策记录
- [后端国际化技术选型](../decisions/adr/2026-01-25-002-02-ADR-后端国际化技术选型.md)
#### SQL 脚本
- [后端国际化数据库变更](../sql/2026-01-25-002-02-backend-i18n.sql)
#### 提示词文档
- [后端国际化功能实现提示词](../prompts/2026-01-25-002-02-prompt-后端国际化功能.md)
#### 参考代码文档
- [后端国际化参考代码](../reference-code/2026-01-25-002-02-code-后端国际化.md)
#### 实施方案文档
- [后端国际化实施方案](../implementation/2026-01-25-002-02-implementation-后端国际化.md)
#### 会话记录
- [后端国际化功能实现会话记录](../sessions/2026-01-25-002-02-session.md)
## 影响范围
### 模块级别
- `datai-framework` - 框架核心模块
- `datai-modules-system` - 系统模块
### 功能级别
- 国际化i18n功能
- 异常处理功能
- 日志记录功能
- 验证功能
- 通知消息功能
- 用户管理功能
### 文件级别
- 新增 13 个代码文件
- 修改 7 个现有文件
- 新增 2 个国际化资源文件
- 新增 8 个文档文件
### 数据库级别
- 修改 `sys_user` 表,添加 `lang_code` 字段
## 相关文档
### 核心文档
- [需求文档](../requirements/2026-01-21-002-02-后端国际化需求.md)
- [设计文档](../design/2026-01-21-002-02-后端国际化设计.md)
- [决策记录](../decisions/adr/2026-01-25-002-02-ADR-后端国际化技术选型.md)
### 实施文档
- [SQL 脚本](../sql/2026-01-25-002-02-backend-i18n.sql)
- [提示词文档](../prompts/2026-01-25-002-02-prompt-后端国际化功能.md)
- [参考代码文档](../reference-code/2026-01-25-002-02-code-后端国际化.md)
- [实施方案文档](../implementation/2026-01-25-002-02-implementation-后端国际化.md)
### 记录文档
- [会话记录](../sessions/2026-01-25-002-02-session.md)
- [变更日志](./2026-01-25-002-02-changelog.md)
## 技术选型
### 国际化框架
- Spring Framework MessageSource
- ReloadableResourceBundleMessageSource
- ResourceBundleMessageSource
### 数据库
- MySQL 5.7+
- 添加 `lang_code` 字段到 `sys_user`
### 编码格式
- UTF-8
- 支持多语言字符
## 测试
### 单元测试
- ErrorCode 单元测试
- MessageUtils 单元测试
### 集成测试
- 错误消息国际化测试
- 日志消息国际化测试
- 验证消息国际化测试
- 通知消息国际化测试
- 用户语言偏好管理测试
### 手动测试
- 测试不同语言偏好的用户
- 测试默认语言回退机制
- 测试国际化资源热加载
## 部署说明
### 数据库变更
执行以下 SQL 脚本:
```sql
ALTER TABLE sys_user ADD COLUMN lang_code VARCHAR(10) DEFAULT 'zh_CN' COMMENT '语言代码';
```
### 配置文件
确保 `application.yml` 中包含以下配置:
```yaml
spring:
messages:
basename: i18n/messages
encoding: UTF-8
cache-duration: 3600
```
### 资源文件
将国际化资源文件放置在 `src/main/resources/i18n/` 目录下:
- `messages.properties` - 中文
- `messages_en_US.properties` - 英文
## 后续优化
### 性能优化
- 缓存国际化资源
- 优化资源加载机制
### 功能扩展
- 支持更多语言
- 支持动态语言切换
- 支持语言包热更新
### 用户体验
- 提供语言切换界面
- 支持浏览器语言自动检测
- 支持用户自定义语言偏好