75 lines
1.8 KiB
Markdown
75 lines
1.8 KiB
Markdown
|
|
# 国际化配置说明
|
|||
|
|
|
|||
|
|
本项目使用 `react-i18next` 实现国际化支持。
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
pages/i18n/
|
|||
|
|
├── config.ts # i18next 配置和初始化
|
|||
|
|
├── types.ts # TypeScript 类型声明
|
|||
|
|
├── locales/
|
|||
|
|
│ ├── zh-CN/ # 中文翻译
|
|||
|
|
│ │ ├── common.json # 通用组件(Header, Footer等)
|
|||
|
|
│ │ ├── home.json # 首页
|
|||
|
|
│ │ └── docs.json # 文档页(待完善)
|
|||
|
|
│ └── en-US/ # 英文翻译
|
|||
|
|
│ ├── common.json
|
|||
|
|
│ ├── home.json
|
|||
|
|
│ └── docs.json
|
|||
|
|
└── README.md # 本文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 在组件中使用
|
|||
|
|
|
|||
|
|
```tsx
|
|||
|
|
import { useTranslation } from 'react-i18next'
|
|||
|
|
|
|||
|
|
function MyComponent() {
|
|||
|
|
const { t } = useTranslation('common') // 指定命名空间
|
|||
|
|
|
|||
|
|
return <h1>{t('header.nav_docs')}</h1>
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 使用多个命名空间
|
|||
|
|
|
|||
|
|
```tsx
|
|||
|
|
const { t } = useTranslation(['home', 'common'])
|
|||
|
|
|
|||
|
|
// 使用时指定命名空间
|
|||
|
|
t('home:hero.title')
|
|||
|
|
t('common:header.nav_docs')
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 语言切换
|
|||
|
|
|
|||
|
|
用户可以通过以下方式切换语言:
|
|||
|
|
|
|||
|
|
1. **自动检测**:首次访问根据浏览器语言自动选择
|
|||
|
|
2. **手动切换**:点击页面右上角的语言切换按钮
|
|||
|
|
3. **持久化**:语言选择保存在 `localStorage` 中,刷新后保持
|
|||
|
|
|
|||
|
|
## 添加新翻译
|
|||
|
|
|
|||
|
|
1. 在对应的 JSON 文件中添加翻译条目(如 `zh-CN/home.json`)
|
|||
|
|
2. 在对应的英文文件中添加翻译(如 `en-US/home.json`)
|
|||
|
|
3. 在组件中使用 `t('namespace:key')` 获取翻译
|
|||
|
|
|
|||
|
|
## TypeScript 支持
|
|||
|
|
|
|||
|
|
`types.ts` 文件提供了类型声明,使得翻译 key 具有:
|
|||
|
|
|
|||
|
|
- 自动补全
|
|||
|
|
- 编译期类型检查
|
|||
|
|
- 防止拼写错误
|
|||
|
|
|
|||
|
|
## 待完成
|
|||
|
|
|
|||
|
|
- [ ] 文档页翻译(`docs.json`)
|
|||
|
|
- [ ] DocsLayout 导航结构国际化
|
|||
|
|
- [ ] 404 页面国际化
|
|||
|
|
|