Files
PolyHermes/docs/i18n-missing-work-checklist.md
T
WrBug 1a9407c544 feat: 完成前端多语言支持和菜单优化
- 缩短菜单标题,解决显示不全问题
- 添加跟随系统语言选项,作为默认选项
- 移除语言切换时的页面刷新,实现无刷新切换
- 完成主要页面的多语言替换:
  * ConfigPage - 全局配置页面
  * ResetPassword - 重置密码页面
  * LeaderList - Leader 列表页面
  * UserList - 用户列表页面
  * Statistics - 统计信息页面
  * OrderList - 订单列表页面
  * TemplateList - 模板列表页面
  * CopyTradingList - 跟单配置列表页面
- 添加简体中文、繁体中文和英文的完整翻译键
- 优化语言设置页面,支持跟随系统语言
2025-12-04 10:36:28 +08:00

573 lines
17 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.
# 多语言支持遗漏工作清单
## 后端遗漏工作
### ❌ 需要更新的 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)
// 模式2ErrorCode + 消息
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)
// 模式2ErrorCode + 消息
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
- [ ] 所有硬编码文本都已替换
- [ ] 语言包包含所有需要的翻译键
- [ ] 测试不同语言下的页面显示
- [ ] 测试语言切换功能