43 lines
1.2 KiB
Markdown
43 lines
1.2 KiB
Markdown
# i18n 开发指南
|
||
|
||
## 概述
|
||
|
||
项目使用 Chrome 扩展标准的 `chrome.i18n` API 进行本地化,通过 `src/utils/chromeI18n.ts` 提供类型安全的 React Hook 包装。
|
||
|
||
## 配置
|
||
|
||
- **翻译文件**: `public/_locales/{zh_CN,en}/messages.json`(Chrome 扩展标准格式)
|
||
- **默认语言**: `zh_CN`(在 `wxt.config.ts` 的 `manifest.default_locale` 中配置)
|
||
|
||
## 使用方式
|
||
|
||
```typescript
|
||
import { useI18n } from '@/utils/chromeI18n';
|
||
```
|
||
|
||
## 翻译键格式
|
||
|
||
- **直接 key**: `t('dashboard_title')` → 查找 `dashboard_title`
|
||
- **命名空间格式(兼容旧用法)**: `t('common:buttons.search')` → 查找 `common_buttons_search`
|
||
- **带命名空间参数**: `useI18n(['common', 'features'])`,会自动尝试 `common_key`、`features_key`
|
||
|
||
## 占位符支持
|
||
|
||
```typescript
|
||
t('router_notFoundDescription', { entryPointType: 'popup' });
|
||
```
|
||
|
||
## Hook 返回值
|
||
|
||
```typescript
|
||
{ t, i18n: { language, changeLanguage }, isLoaded }
|
||
```
|
||
|
||
## 回退策略
|
||
|
||
当翻译 key 未命中时,返回 key 本身(开发模式下在控制台记录 warning)
|
||
|
||
## 限制
|
||
|
||
`chrome.i18n` 无法动态切换语言,语言跟随浏览器设置,切换后需刷新页面
|