feat: 完成前端多语言支持和菜单优化
- 缩短菜单标题,解决显示不全问题 - 添加跟随系统语言选项,作为默认选项 - 移除语言切换时的页面刷新,实现无刷新切换 - 完成主要页面的多语言替换: * ConfigPage - 全局配置页面 * ResetPassword - 重置密码页面 * LeaderList - Leader 列表页面 * UserList - 用户列表页面 * Statistics - 统计信息页面 * OrderList - 订单列表页面 * TemplateList - 模板列表页面 * CopyTradingList - 跟单配置列表页面 - 添加简体中文、繁体中文和英文的完整翻译键 - 优化语言设置页面,支持跟随系统语言
This commit is contained in:
@@ -0,0 +1,572 @@
|
||||
# 多语言支持遗漏工作清单
|
||||
|
||||
## 后端遗漏工作
|
||||
|
||||
### ❌ 需要更新的 Controller
|
||||
|
||||
#### 1. CopyTradingController
|
||||
- ✅ 已添加 MessageSource 依赖注入
|
||||
- ❌ **所有 ApiResponse.error() 调用都缺少 messageSource 参数**
|
||||
- 第 31 行:`ApiResponse.error(ErrorCode.PARAM_ACCOUNT_ID_INVALID)` → 需要添加 `, messageSource = messageSource`
|
||||
- 第 34 行:`ApiResponse.error(ErrorCode.PARAM_TEMPLATE_ID_INVALID)` → 需要添加
|
||||
- 第 37 行:`ApiResponse.error(ErrorCode.PARAM_LEADER_ID_INVALID)` → 需要添加
|
||||
- 第 48-49 行:`ApiResponse.error(ErrorCode.PARAM_ERROR, e.message)` → 需要添加 `, messageSource`
|
||||
- 第 55 行:`ApiResponse.error(ErrorCode.SERVER_COPY_TRADING_CREATE_FAILED, e.message)` → 需要添加
|
||||
- 第 72, 77 行:查询列表的错误响应 → 需要添加
|
||||
- 第 88, 99-101, 107 行:更新状态的错误响应 → 需要添加
|
||||
- 第 118, 129-130, 136 行:删除的错误响应 → 需要添加
|
||||
- 第 147, 158-159, 165 行:查询模板的错误响应 → 需要添加
|
||||
|
||||
#### 2. CopyTradingTemplateController
|
||||
- ❌ **未添加 MessageSource 依赖注入**
|
||||
- ❌ **所有 ApiResponse.error() 调用都需要更新**
|
||||
- 需要添加:`private val messageSource: MessageSource`
|
||||
- 需要添加导入:`import com.wrbug.polymarketbot.util.error`
|
||||
- 所有 `ApiResponse.error()` 调用都需要添加 `messageSource` 参数
|
||||
|
||||
#### 3. MarketController
|
||||
- ❌ **未添加 MessageSource 依赖注入**
|
||||
- ❌ **所有 ApiResponse.error() 调用都需要更新**
|
||||
- 第 34 行:`ApiResponse.error(ErrorCode.PARAM_MARKET_ID_EMPTY)`
|
||||
- 第 44, 49 行:`ApiResponse.error(ErrorCode.SERVER_MARKET_PRICE_FETCH_FAILED, e.message)`
|
||||
- 第 62 行:`ApiResponse.error(ErrorCode.PARAM_TOKEN_ID_EMPTY)`
|
||||
- 第 72, 77 行:`ApiResponse.error(ErrorCode.SERVER_MARKET_LATEST_PRICE_FETCH_FAILED, e.message)`
|
||||
|
||||
#### 4. CopyTradingStatisticsController
|
||||
- ❌ **未添加 MessageSource 依赖注入**
|
||||
- ❌ **所有 ApiResponse.error() 调用都需要更新**
|
||||
- 第 31 行:`ApiResponse.error(ErrorCode.PARAM_COPY_TRADING_ID_INVALID)`
|
||||
- 第 42-43, 49 行:统计查询的错误响应
|
||||
- 需要检查整个文件的所有错误响应
|
||||
|
||||
#### 5. ProxyConfigController
|
||||
- ❌ **未添加 MessageSource 依赖注入**
|
||||
- ❌ **所有 ApiResponse.error() 调用都需要更新**
|
||||
- 第 35 行:`ApiResponse.error(ErrorCode.SERVER_ERROR, "获取代理配置失败:${e.message}")`
|
||||
- 第 49 行:`ApiResponse.error(ErrorCode.SERVER_ERROR, "获取代理配置列表失败:${e.message}")`
|
||||
- 需要检查整个文件的所有错误响应
|
||||
|
||||
#### 6. HealthController
|
||||
- ✅ **不需要更新**(没有错误响应,只有健康检查)
|
||||
|
||||
### 更新模式
|
||||
|
||||
对于每个 Controller,需要:
|
||||
|
||||
1. **添加导入**:
|
||||
```kotlin
|
||||
import com.wrbug.polymarketbot.util.error
|
||||
import org.springframework.context.MessageSource
|
||||
```
|
||||
|
||||
2. **添加依赖注入**:
|
||||
```kotlin
|
||||
class YourController(
|
||||
private val yourService: YourService,
|
||||
private val messageSource: MessageSource // 添加这一行
|
||||
)
|
||||
```
|
||||
|
||||
3. **更新所有 ApiResponse.error() 调用**:
|
||||
```kotlin
|
||||
// 模式1:只有 ErrorCode
|
||||
ApiResponse.error(ErrorCode.PARAM_ERROR)
|
||||
→ ApiResponse.error(ErrorCode.PARAM_ERROR, messageSource = messageSource)
|
||||
|
||||
// 模式2:ErrorCode + 消息
|
||||
ApiResponse.error(ErrorCode.PARAM_ERROR, e.message)
|
||||
→ ApiResponse.error(ErrorCode.PARAM_ERROR, e.message, messageSource)
|
||||
```
|
||||
|
||||
## 前端遗漏工作
|
||||
|
||||
### ❌ 需要更新的页面组件(23个页面,只有1个已更新)
|
||||
|
||||
#### ✅ 已完成的页面
|
||||
1. **AccountDetail.tsx** - 已完全使用 i18n
|
||||
|
||||
#### ❌ 待更新的页面(22个)
|
||||
|
||||
1. **Login.tsx**
|
||||
- 硬编码文本:`'登录成功'`, `'登录失败'`, `'用户名'`, `'密码'` 等
|
||||
- 需要添加:`import { useTranslation } from 'react-i18next'`
|
||||
- 需要添加:`const { t } = useTranslation()`
|
||||
- 需要替换所有硬编码文本
|
||||
|
||||
2. **AccountList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
3. **AccountImport.tsx**
|
||||
- 硬编码文本:`'钱包地址与私钥不匹配'`, `'钱包地址格式不正确'`, `'钱包地址'` 等
|
||||
- 需要更新
|
||||
|
||||
4. **AccountEdit.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
5. **LeaderList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
6. **LeaderAdd.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
7. **LeaderEdit.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
8. **TemplateList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
9. **TemplateAdd.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
10. **TemplateEdit.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
11. **CopyTradingList.tsx**
|
||||
- 硬编码文本:`'删除跟单成功'`, `'删除跟单失败'`, `'钱包'`, `'模板'`, `'Leader'`, `'取消'`, `'订单'` 等
|
||||
- 需要更新
|
||||
|
||||
12. **CopyTradingAdd.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
13. **CopyTradingStatistics.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
14. **CopyTradingBuyOrders.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
15. **CopyTradingSellOrders.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
16. **CopyTradingMatchedOrders.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
17. **PositionList.tsx**
|
||||
- 硬编码文本:`'账户'`, `'市场'`, `'搜索账户、市场、方向...'`, `'确认卖出'`, `'取消'`, `'订单类型'`, `'确认赎回'` 等
|
||||
- 需要更新
|
||||
|
||||
18. **OrderList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
19. **Statistics.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
20. **UserList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
21. **ResetPassword.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
22. **SystemSettings.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
23. **ConfigPage.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
### App.tsx 中的硬编码文本
|
||||
|
||||
**App.tsx** 中有硬编码的中文文本:
|
||||
- 第 61 行:`'订单创建'`
|
||||
- 第 63 行:`'订单更新'`
|
||||
- 第 65 行:`'订单取消'`
|
||||
- 第 67 行:`'订单事件'`
|
||||
- 第 79 行:`'买入'`, `'卖出'`
|
||||
- 第 92 行:`'市场:'`, `'状态:'`, `'已成交:'`, `'剩余:'`
|
||||
|
||||
需要:
|
||||
1. 添加 `import { useTranslation } from 'react-i18next'`
|
||||
2. 在组件中使用 `const { t } = useTranslation()`
|
||||
3. 替换所有硬编码文本
|
||||
|
||||
### 前端更新模式
|
||||
|
||||
对于每个页面组件:
|
||||
|
||||
1. **添加导入**:
|
||||
```typescript
|
||||
import { useTranslation } from 'react-i18next'
|
||||
```
|
||||
|
||||
2. **在组件中使用**:
|
||||
```typescript
|
||||
const YourComponent: React.FC = () => {
|
||||
const { t } = useTranslation()
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
3. **替换硬编码文本**:
|
||||
```typescript
|
||||
// 旧代码
|
||||
<Button>保存</Button>
|
||||
message.success('操作成功')
|
||||
|
||||
// 新代码
|
||||
<Button>{t('common.save')}</Button>
|
||||
message.success(t('message.operationSuccess'))
|
||||
```
|
||||
|
||||
4. **扩展语言包**:
|
||||
- 在 `frontend/src/locales/*/common.json` 中添加缺失的翻译键
|
||||
- 确保三个语言包(zh-CN, zh-TW, en)都有对应的翻译
|
||||
|
||||
## 语言包扩展
|
||||
|
||||
### 需要添加的翻译键
|
||||
|
||||
根据检查,需要在语言包中添加以下键:
|
||||
|
||||
```json
|
||||
{
|
||||
"order": {
|
||||
"create": "订单创建",
|
||||
"update": "订单更新",
|
||||
"cancel": "订单取消",
|
||||
"event": "订单事件",
|
||||
"buy": "买入",
|
||||
"sell": "卖出",
|
||||
"market": "市场",
|
||||
"status": "状态",
|
||||
"filled": "已成交",
|
||||
"remaining": "剩余"
|
||||
},
|
||||
"wallet": {
|
||||
"address": "钱包地址",
|
||||
"addressMismatch": "钱包地址与私钥不匹配",
|
||||
"addressInvalid": "钱包地址格式不正确"
|
||||
},
|
||||
"copyTrading": {
|
||||
"deleteSuccess": "删除跟单成功",
|
||||
"deleteFailed": "删除跟单失败",
|
||||
"wallet": "钱包",
|
||||
"template": "模板",
|
||||
"leader": "Leader"
|
||||
},
|
||||
"position": {
|
||||
"account": "账户",
|
||||
"market": "市场",
|
||||
"searchPlaceholder": "搜索账户、市场、方向...",
|
||||
"confirmSell": "确认卖出",
|
||||
"confirmRedeem": "确认赎回",
|
||||
"orderType": "订单类型"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 优先级建议
|
||||
|
||||
### 高优先级(核心功能)
|
||||
1. ✅ 后端:完成所有 Controller 的 MessageSource 更新
|
||||
2. ✅ 前端:更新 Login.tsx(登录页面)
|
||||
3. ✅ 前端:更新 App.tsx(全局通知)
|
||||
|
||||
### 中优先级(常用功能)
|
||||
4. 前端:更新 AccountList.tsx, AccountImport.tsx
|
||||
5. 前端:更新 LeaderList.tsx, LeaderAdd.tsx
|
||||
6. 前端:更新 CopyTradingList.tsx
|
||||
|
||||
### 低优先级(其他页面)
|
||||
7. 前端:逐步更新其他页面组件
|
||||
|
||||
## 验证清单
|
||||
|
||||
完成后检查:
|
||||
|
||||
### 后端
|
||||
- [ ] 所有 Controller 都注入了 MessageSource
|
||||
- [ ] 所有 ApiResponse.error() 调用都传入了 messageSource
|
||||
- [ ] 编译无错误
|
||||
- [ ] 测试不同语言下的错误消息
|
||||
|
||||
### 前端
|
||||
- [ ] 所有页面都使用了 useTranslation
|
||||
- [ ] 所有硬编码文本都已替换
|
||||
- [ ] 语言包包含所有需要的翻译键
|
||||
- [ ] 测试不同语言下的页面显示
|
||||
- [ ] 测试语言切换功能
|
||||
|
||||
|
||||
|
||||
## 后端遗漏工作
|
||||
|
||||
### ❌ 需要更新的 Controller
|
||||
|
||||
#### 1. CopyTradingController
|
||||
- ✅ 已添加 MessageSource 依赖注入
|
||||
- ❌ **所有 ApiResponse.error() 调用都缺少 messageSource 参数**
|
||||
- 第 31 行:`ApiResponse.error(ErrorCode.PARAM_ACCOUNT_ID_INVALID)` → 需要添加 `, messageSource = messageSource`
|
||||
- 第 34 行:`ApiResponse.error(ErrorCode.PARAM_TEMPLATE_ID_INVALID)` → 需要添加
|
||||
- 第 37 行:`ApiResponse.error(ErrorCode.PARAM_LEADER_ID_INVALID)` → 需要添加
|
||||
- 第 48-49 行:`ApiResponse.error(ErrorCode.PARAM_ERROR, e.message)` → 需要添加 `, messageSource`
|
||||
- 第 55 行:`ApiResponse.error(ErrorCode.SERVER_COPY_TRADING_CREATE_FAILED, e.message)` → 需要添加
|
||||
- 第 72, 77 行:查询列表的错误响应 → 需要添加
|
||||
- 第 88, 99-101, 107 行:更新状态的错误响应 → 需要添加
|
||||
- 第 118, 129-130, 136 行:删除的错误响应 → 需要添加
|
||||
- 第 147, 158-159, 165 行:查询模板的错误响应 → 需要添加
|
||||
|
||||
#### 2. CopyTradingTemplateController
|
||||
- ❌ **未添加 MessageSource 依赖注入**
|
||||
- ❌ **所有 ApiResponse.error() 调用都需要更新**
|
||||
- 需要添加:`private val messageSource: MessageSource`
|
||||
- 需要添加导入:`import com.wrbug.polymarketbot.util.error`
|
||||
- 所有 `ApiResponse.error()` 调用都需要添加 `messageSource` 参数
|
||||
|
||||
#### 3. MarketController
|
||||
- ❌ **未添加 MessageSource 依赖注入**
|
||||
- ❌ **所有 ApiResponse.error() 调用都需要更新**
|
||||
- 第 34 行:`ApiResponse.error(ErrorCode.PARAM_MARKET_ID_EMPTY)`
|
||||
- 第 44, 49 行:`ApiResponse.error(ErrorCode.SERVER_MARKET_PRICE_FETCH_FAILED, e.message)`
|
||||
- 第 62 行:`ApiResponse.error(ErrorCode.PARAM_TOKEN_ID_EMPTY)`
|
||||
- 第 72, 77 行:`ApiResponse.error(ErrorCode.SERVER_MARKET_LATEST_PRICE_FETCH_FAILED, e.message)`
|
||||
|
||||
#### 4. CopyTradingStatisticsController
|
||||
- ❌ **未添加 MessageSource 依赖注入**
|
||||
- ❌ **所有 ApiResponse.error() 调用都需要更新**
|
||||
- 第 31 行:`ApiResponse.error(ErrorCode.PARAM_COPY_TRADING_ID_INVALID)`
|
||||
- 第 42-43, 49 行:统计查询的错误响应
|
||||
- 需要检查整个文件的所有错误响应
|
||||
|
||||
#### 5. ProxyConfigController
|
||||
- ❌ **未添加 MessageSource 依赖注入**
|
||||
- ❌ **所有 ApiResponse.error() 调用都需要更新**
|
||||
- 第 35 行:`ApiResponse.error(ErrorCode.SERVER_ERROR, "获取代理配置失败:${e.message}")`
|
||||
- 第 49 行:`ApiResponse.error(ErrorCode.SERVER_ERROR, "获取代理配置列表失败:${e.message}")`
|
||||
- 需要检查整个文件的所有错误响应
|
||||
|
||||
#### 6. HealthController
|
||||
- ✅ **不需要更新**(没有错误响应,只有健康检查)
|
||||
|
||||
### 更新模式
|
||||
|
||||
对于每个 Controller,需要:
|
||||
|
||||
1. **添加导入**:
|
||||
```kotlin
|
||||
import com.wrbug.polymarketbot.util.error
|
||||
import org.springframework.context.MessageSource
|
||||
```
|
||||
|
||||
2. **添加依赖注入**:
|
||||
```kotlin
|
||||
class YourController(
|
||||
private val yourService: YourService,
|
||||
private val messageSource: MessageSource // 添加这一行
|
||||
)
|
||||
```
|
||||
|
||||
3. **更新所有 ApiResponse.error() 调用**:
|
||||
```kotlin
|
||||
// 模式1:只有 ErrorCode
|
||||
ApiResponse.error(ErrorCode.PARAM_ERROR)
|
||||
→ ApiResponse.error(ErrorCode.PARAM_ERROR, messageSource = messageSource)
|
||||
|
||||
// 模式2:ErrorCode + 消息
|
||||
ApiResponse.error(ErrorCode.PARAM_ERROR, e.message)
|
||||
→ ApiResponse.error(ErrorCode.PARAM_ERROR, e.message, messageSource)
|
||||
```
|
||||
|
||||
## 前端遗漏工作
|
||||
|
||||
### ❌ 需要更新的页面组件(23个页面,只有1个已更新)
|
||||
|
||||
#### ✅ 已完成的页面
|
||||
1. **AccountDetail.tsx** - 已完全使用 i18n
|
||||
|
||||
#### ❌ 待更新的页面(22个)
|
||||
|
||||
1. **Login.tsx**
|
||||
- 硬编码文本:`'登录成功'`, `'登录失败'`, `'用户名'`, `'密码'` 等
|
||||
- 需要添加:`import { useTranslation } from 'react-i18next'`
|
||||
- 需要添加:`const { t } = useTranslation()`
|
||||
- 需要替换所有硬编码文本
|
||||
|
||||
2. **AccountList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
3. **AccountImport.tsx**
|
||||
- 硬编码文本:`'钱包地址与私钥不匹配'`, `'钱包地址格式不正确'`, `'钱包地址'` 等
|
||||
- 需要更新
|
||||
|
||||
4. **AccountEdit.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
5. **LeaderList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
6. **LeaderAdd.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
7. **LeaderEdit.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
8. **TemplateList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
9. **TemplateAdd.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
10. **TemplateEdit.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
11. **CopyTradingList.tsx**
|
||||
- 硬编码文本:`'删除跟单成功'`, `'删除跟单失败'`, `'钱包'`, `'模板'`, `'Leader'`, `'取消'`, `'订单'` 等
|
||||
- 需要更新
|
||||
|
||||
12. **CopyTradingAdd.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
13. **CopyTradingStatistics.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
14. **CopyTradingBuyOrders.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
15. **CopyTradingSellOrders.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
16. **CopyTradingMatchedOrders.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
17. **PositionList.tsx**
|
||||
- 硬编码文本:`'账户'`, `'市场'`, `'搜索账户、市场、方向...'`, `'确认卖出'`, `'取消'`, `'订单类型'`, `'确认赎回'` 等
|
||||
- 需要更新
|
||||
|
||||
18. **OrderList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
19. **Statistics.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
20. **UserList.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
21. **ResetPassword.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
22. **SystemSettings.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
23. **ConfigPage.tsx**
|
||||
- 需要检查并替换所有硬编码文本
|
||||
|
||||
### App.tsx 中的硬编码文本
|
||||
|
||||
**App.tsx** 中有硬编码的中文文本:
|
||||
- 第 61 行:`'订单创建'`
|
||||
- 第 63 行:`'订单更新'`
|
||||
- 第 65 行:`'订单取消'`
|
||||
- 第 67 行:`'订单事件'`
|
||||
- 第 79 行:`'买入'`, `'卖出'`
|
||||
- 第 92 行:`'市场:'`, `'状态:'`, `'已成交:'`, `'剩余:'`
|
||||
|
||||
需要:
|
||||
1. 添加 `import { useTranslation } from 'react-i18next'`
|
||||
2. 在组件中使用 `const { t } = useTranslation()`
|
||||
3. 替换所有硬编码文本
|
||||
|
||||
### 前端更新模式
|
||||
|
||||
对于每个页面组件:
|
||||
|
||||
1. **添加导入**:
|
||||
```typescript
|
||||
import { useTranslation } from 'react-i18next'
|
||||
```
|
||||
|
||||
2. **在组件中使用**:
|
||||
```typescript
|
||||
const YourComponent: React.FC = () => {
|
||||
const { t } = useTranslation()
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
3. **替换硬编码文本**:
|
||||
```typescript
|
||||
// 旧代码
|
||||
<Button>保存</Button>
|
||||
message.success('操作成功')
|
||||
|
||||
// 新代码
|
||||
<Button>{t('common.save')}</Button>
|
||||
message.success(t('message.operationSuccess'))
|
||||
```
|
||||
|
||||
4. **扩展语言包**:
|
||||
- 在 `frontend/src/locales/*/common.json` 中添加缺失的翻译键
|
||||
- 确保三个语言包(zh-CN, zh-TW, en)都有对应的翻译
|
||||
|
||||
## 语言包扩展
|
||||
|
||||
### 需要添加的翻译键
|
||||
|
||||
根据检查,需要在语言包中添加以下键:
|
||||
|
||||
```json
|
||||
{
|
||||
"order": {
|
||||
"create": "订单创建",
|
||||
"update": "订单更新",
|
||||
"cancel": "订单取消",
|
||||
"event": "订单事件",
|
||||
"buy": "买入",
|
||||
"sell": "卖出",
|
||||
"market": "市场",
|
||||
"status": "状态",
|
||||
"filled": "已成交",
|
||||
"remaining": "剩余"
|
||||
},
|
||||
"wallet": {
|
||||
"address": "钱包地址",
|
||||
"addressMismatch": "钱包地址与私钥不匹配",
|
||||
"addressInvalid": "钱包地址格式不正确"
|
||||
},
|
||||
"copyTrading": {
|
||||
"deleteSuccess": "删除跟单成功",
|
||||
"deleteFailed": "删除跟单失败",
|
||||
"wallet": "钱包",
|
||||
"template": "模板",
|
||||
"leader": "Leader"
|
||||
},
|
||||
"position": {
|
||||
"account": "账户",
|
||||
"market": "市场",
|
||||
"searchPlaceholder": "搜索账户、市场、方向...",
|
||||
"confirmSell": "确认卖出",
|
||||
"confirmRedeem": "确认赎回",
|
||||
"orderType": "订单类型"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 优先级建议
|
||||
|
||||
### 高优先级(核心功能)
|
||||
1. ✅ 后端:完成所有 Controller 的 MessageSource 更新
|
||||
2. ✅ 前端:更新 Login.tsx(登录页面)
|
||||
3. ✅ 前端:更新 App.tsx(全局通知)
|
||||
|
||||
### 中优先级(常用功能)
|
||||
4. 前端:更新 AccountList.tsx, AccountImport.tsx
|
||||
5. 前端:更新 LeaderList.tsx, LeaderAdd.tsx
|
||||
6. 前端:更新 CopyTradingList.tsx
|
||||
|
||||
### 低优先级(其他页面)
|
||||
7. 前端:逐步更新其他页面组件
|
||||
|
||||
## 验证清单
|
||||
|
||||
完成后检查:
|
||||
|
||||
### 后端
|
||||
- [ ] 所有 Controller 都注入了 MessageSource
|
||||
- [ ] 所有 ApiResponse.error() 调用都传入了 messageSource
|
||||
- [ ] 编译无错误
|
||||
- [ ] 测试不同语言下的错误消息
|
||||
|
||||
### 前端
|
||||
- [ ] 所有页面都使用了 useTranslation
|
||||
- [ ] 所有硬编码文本都已替换
|
||||
- [ ] 语言包包含所有需要的翻译键
|
||||
- [ ] 测试不同语言下的页面显示
|
||||
- [ ] 测试语言切换功能
|
||||
|
||||
Reference in New Issue
Block a user