# CoreWing 国际化使用说明

## 概述

CoreWing 项目已完成国际化改造，支持中文（zh_CN）和英文（en_US）两种语言。

## 客户端使用方式

### HTTP Header 配置

客户端通过 HTTP Header 指定语言，支持以下两种方式：

**方式一：使用 Accept-Language（推荐）**
```
Accept-Language: zh_CN
```

**方式二：使用自定义 lang header**
```
lang: en_US
```

### 支持的语言代码

- `zh_CN` - 简体中文（默认）
- `en_US` - 英语

### 示例

#### JavaScript/Axios
```javascript
// 中文请求
axios.get('/user/info', {
  headers: {
    'Accept-Language': 'zh_CN'
  }
});

// 英文请求
axios.get('/user/info', {
  headers: {
    'Accept-Language': 'en_US'
  }
});
```

#### cURL
```bash
# 中文
curl -H "Accept-Language: zh_CN" http://localhost:8080/user/info

# 英文
curl -H "Accept-Language: en_US" http://localhost:8080/user/info
```

#### Java/OkHttp
```java
Request request = new Request.Builder()
    .url("http://localhost:8080/user/info")
    .addHeader("Accept-Language", "zh_CN")
    .build();
```

## 国际化功能范围

### 已国际化的内容

1. **API 响应消息**
   - 成功/失败提示
   - 用户操作反馈（登录、注册、登出等）
   - 数据验证消息

2. **异常和错误消息**
   - 用户认证异常
   - 业务逻辑异常
   - 服务器错误提示

3. **邮件模板**
   - 验证码邮件内容
   - 邮件主题和页脚

4. **短信模板**
   - 验证码短信内容
   - 短信发送结果消息

5. **钉钉推送消息**
   - 反馈通知标题和内容
   - 表单标签文本

## 技术实现

### 架构组成

1. **I18nConfig** - 国际化配置类
   - 配置 MessageSource
   - 实现自定义 LocaleResolver
   - 支持从 Header 读取语言设置

2. **I18nUtil** - 国际化工具类
   - 提供静态方法获取国际化消息
   - 支持消息参数替换

3. **消息资源文件**
   - `messages_zh_CN.properties` - 中文消息（约90条）
   - `messages_en_US.properties` - 英文消息（约90条）

### 消息 Key 命名规范

```
common.*              - 通用消息
user.*                - 用户模块
feedback.*            - 反馈模块
error.*               - 错误消息
email.*               - 邮件模板
sms.*                 - 短信模板
dingtalk.*            - 钉钉推送
```

## 响应示例

### 中文响应 (Accept-Language: zh_CN)
```json
{
  "code": 200,
  "message": "登录成功",
  "data": {
    "token": "xxx",
    "userId": 123
  },
  "success": true
}
```

### 英文响应 (Accept-Language: en_US)
```json
{
  "code": 200,
  "message": "Login successful",
  "data": {
    "token": "xxx",
    "userId": 123
  },
  "success": true
}
```

## 开发指南

### 添加新的国际化消息

1. 在 `messages_zh_CN.properties` 中添加中文消息：
```properties
user.new.feature=这是一个新功能
```

2. 在 `messages_en_US.properties` 中添加对应的英文消息：
```properties
user.new.feature=This is a new feature
```

3. 在代码中使用：
```java
String message = I18nUtil.getMessage("user.new.feature");
```

### 带参数的消息

**资源文件：**
```properties
# 中文
user.welcome=欢迎，{0}！您已成功登录。

# 英文
user.welcome=Welcome, {0}! You have successfully logged in.
```

**代码使用：**
```java
String message = I18nUtil.getMessage("user.welcome", username);
```

## 注意事项

1. **默认语言**：如果客户端未指定语言，系统默认使用中文（zh_CN）

2. **URL 参数支持**：也可以通过 URL 参数切换语言
   ```
   /user/info?lang=en_US
   ```

3. **消息缓存**：资源文件会缓存 1 小时，修改后需要重启应用或等待缓存过期

4. **消息 Key 不存在**：如果找不到对应的消息 key，会返回 key 本身

## 修改文件清单

### 新增文件（3个）
- `src/main/java/com/corewing/app/config/I18nConfig.java`
- `src/main/java/com/corewing/app/util/I18nUtil.java`
- `src/main/resources/i18n/messages_zh_CN.properties`
- `src/main/resources/i18n/messages_en_US.properties`

### 修改文件（13个）
1. `Result.java` - 统一返回结果类
2. `AppUserController.java` - 用户控制器
3. `AppFeedbackController.java` - 反馈控制器
4. `AppUserServiceImpl.java` - 用户服务实现
5. `VerifyCodeServiceImpl.java` - 验证码服务实现
6. `AppFeedbackServiceImpl.java` - 反馈服务实现
7. `GlobalExceptionHandler.java` - 全局异常处理
8. `EmailUtil.java` - 邮件工具类
9. `SmsBaoUtil.java` - 短信工具类
10. `RedisUtil.java` - Redis工具类

## 测试建议

使用 Postman 或 curl 测试不同语言的响应：

```bash
# 测试中文
curl -H "Accept-Language: zh_CN" http://localhost:8080/user/login

# 测试英文
curl -H "Accept-Language: en_US" http://localhost:8080/user/login
```

---

**更新时间：** 2025-01-21
**版本：** 1.0
