# 项目管理模块国际化说明
## 已完成内容
### 1. 静态页面国际化
已完成以下部分的国际化:
#### 搜索表单
- 项目编号、名称、项目语言、项目类型
- PD/GPD、PM/GPM、CTA/GCTA
- 申办方、CRO
- 开始时间、结束时间、创建时间、更新时间
- 搜索、重置按钮
#### 操作按钮
- 新增、修改、删除、导出按钮
#### 表格列
- 序号、项目编号、名称、图标
- 项目语言、项目类型、状态
- PD/GPD、PM/GPM、CTA/GCTA
- 申办方、CRO、备注
- 创建者、创建时间、更新时间
- 操作列(修改、删除tooltip)
#### 表单对话框
- 对话框标题(添加/修改项目)
- 所有表单字段标签和占位符
- 确定、取消按钮
#### 提示信息
- 删除确认提示
- 操作成功、删除成功提示
#### 验证规则
- 序号、项目编号、名称、项目语言、项目类型的必填验证提示
### 2. 国际化文件位置
- **中文**: `src/lang/modules/project/management/zh_CN.ts`
- **英文**: `src/lang/modules/project/management/en_US.ts`
### 3. 使用方式
在Vue组件中:
```typescript
import { useI18n } from 'vue-i18n';
import { parseI18nName } from '@/utils/i18n';
const { t } = useI18n();
// 使用国际化函数
t('project.management.search.code')
t('project.management.button.add')
t('project.management.table.name')
// 解析字典的国际化名称
parseI18nName(dict.label)
```
## 字典国际化
### 需要国际化的字典
1. **project_type** (项目类型)
2. **project_language** (项目语言)
### 字典国际化方法
字典数据存储在数据库中,其`label`字段应该是JSON格式,包含多语言数据:
```json
{
"zh_CN": "中文名称",
"en_US": "English Name"
}
```
### 数据库字典配置示例
#### project_type (项目类型)
| 字典值 | 字典标签(JSON格式) |
|--------|---------------------|
| 1 | `{"zh_CN":"临床试验","en_US":"Clinical Trial"}` |
| 2 | `{"zh_CN":"真实世界研究","en_US":"Real World Study"}` |
| 3 | `{"zh_CN":"上市后研究","en_US":"Post-Marketing Study"}` |
#### project_language (项目语言)
| 字典值 | 字典标签(JSON格式) |
|--------|---------------------|
| zh_CN | `{"zh_CN":"中文","en_US":"Chinese"}` |
| en_US | `{"zh_CN":"英文","en_US":"English"}` |
| zh_TW | `{"zh_CN":"繁体中文","en_US":"Traditional Chinese"}` |
### 在管理后台配置字典
1. 进入系统管理 -> 字典管理
2. 找到对应的字典类型(`project_type`、`project_language`)
3. 编辑字典数据的标签字段,使用JSON格式:
```json
{"zh_CN":"中文标签","en_US":"English Label"}
```
### 前端处理
前端代码已使用`parseI18nName(dict.label)`函数处理字典显示:
```vue
```
`parseI18nName`函数会:
1. 解析JSON格式的label
2. 根据当前语言环境返回对应的翻译
3. 如果解析失败或找不到对应语言,返回原始值
## 注意事项
1. **字典标签格式**:必须是有效的JSON格式
2. **语言代码**:使用`zh_CN`和`en_US`作为键名
3. **回退机制**:如果当前语言没有翻译,会依次尝试zh_CN、en_US,最后使用原值
4. **DictTag组件**:已自动支持国际化,无需修改
## 类型错误说明
当前存在一个与国际化无关的TypeScript类型错误:
- 位置:第175行 ``
- 原因:`form.icon`的类型定义与`image-upload`组件预期类型不匹配
- 影响:不影响运行,仅是类型检查警告
- 建议:需要更新`ManagementForm`类型定义或`image-upload`组件的props类型
## 测试建议
1. 切换语言测试所有文本是否正确显示
2. 验证字典数据的国际化显示
3. 测试表单验证提示信息
4. 测试操作提示消息(成功、删除确认等)