vite-plugin-i18n-extract
Version:
192 lines (143 loc) • 4.61 kB
Markdown
# vite-plugin-i18n-extract
一个 Vite 插件,用于自动提取中文文本并翻译为多语言。
## 功能特点
- 自动扫描项目中的 `.js`、`.jsx` 和 `.vue` 文件
- 自动提取所有中文文本,生成 JSON 格式的多语言文件
- 通过翻译 API(百度翻译)自动翻译为指定语言
- 生成可直接配合 vue-i18n 使用的多语言资源文件
- 支持翻译缓存,避免重复翻译相同内容
- 支持忽略特定标记的中文文本
## 安装
```bash
npm install vite-plugin-i18n-extract --save-dev
```
## 基本用法
在 `vite.config.js` 中配置插件:
```javascript
// vite.config.js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import i18nExtractPlugin from 'vite-plugin-i18n-extract';
export default defineConfig({
plugins: [
vue(),
i18nExtractPlugin({
outputDir: './src/locales',
sourceLanguage: 'zh-CN',
targetLanguages: ['en-US', 'ja-JP'],
translationService: 'baidu',
apiKey: 'your-baidu-api-key',
apiSecret: 'your-baidu-api-secret',
exclude: ['node_modules', 'dist']
})
]
});
```
## 配置选项
```typescript
interface PluginOptions {
// 基础配置
outputDir?: string; // 语言文件输出目录,默认为 './src/locales'
sourceLanguage?: string; // 源语言代码(默认 zh-CN)
targetLanguages?: string[]; // 需要翻译的目标语言代码
// 文件扫描配置
include?: string[]; // 包含的文件/目录
exclude?: string[]; // 排除的文件/目录
extensions?: string[]; // 扫描的文件扩展名
// 翻译配置
translationService?: 'baidu' | 'google' | 'deepl'; // 翻译服务
apiKey?: string; // API密钥
apiSecret?: string; // API密钥Secret(部分翻译服务需要)
apiConfig?: Record<string, any>; // 服务特定配置
// 高级配置
hashAlgorithm?: string; // 哈希算法
maxConcurrentRequests?: number; // 最大并发翻译请求
cacheEnabled?: boolean; // 是否启用翻译缓存
placeholderPattern?: string; // 变量占位符模式
ignoreMark?: string; // 忽略标记(如 // i18n-ignore)
}
```
## 忽略特定文本
如果你不希望某些中文文本被提取和翻译,可以在代码中添加注释 `// i18n-ignore`:
```javascript
// 以下中文将被提取和翻译
const message = "你好,世界!";
// 以下中文将被忽略
// i18n-ignore
const ignoredMessage = "这段文本不会被提取";
```
## 输出结果
插件会在指定的输出目录(默认为 `./src/locales`)生成以下文件:
```
src/
locales/
zh-CN.json # 原始中文
en-US.json # 英文翻译
ja-JP.json # 日文翻译(如果配置了)
.i18n-cache # 翻译缓存
```
这些文件可以直接用于 vue-i18n 的配置。
## 与 vue-i18n 集成
在你的 Vue 应用中,可以这样使用生成的语言文件:
```javascript
// i18n.js
import { createI18n } from 'vue-i18n';
import zhCN from './locales/zh-CN.json';
import enUS from './locales/en-US.json';
import jaJP from './locales/ja-JP.json';
const i18n = createI18n({
legacy: false,
locale: 'zh-CN',
fallbackLocale: 'zh-CN',
messages: {
'zh-CN': zhCN,
'en-US': enUS,
'ja-JP': jaJP,
},
});
export default i18n;
```
然后在 `main.js` 中导入并使用:
```javascript
import { createApp } from 'vue';
import App from './App.vue';
import i18n from './i18n';
createApp(App).use(i18n).mount('#app');
```
## 使用示例
请查看 [examples](./examples) 目录中的完整示例项目,了解如何在 Vue 3 项目中使用本插件。
## 支持的翻译服务
当前版本支持以下翻译服务:
- 百度翻译 API(默认)
- 更多翻译服务将在后续版本中添加
## 已知问题
1. 当前版本仅支持百度翻译 API,未来计划添加更多翻译服务支持
2. 在某些环境中可能遇到类继承相关的错误,可能需要调整 TypeScript 配置
3. 目前仅支持中文提取,未来可能会扩展到其他语言
## 贡献
欢迎各种形式的贡献:
1. 提交 Issue 报告 bug 或提出功能请求
2. 提交 Pull Request 改进代码
3. 改进文档或添加示例
请遵循以下步骤:
```bash
# 克隆仓库
git clone https://github.com/yourusername/vite-plugin-i18n-extract.git
# 安装依赖
npm install
# 构建项目
npm run build
# 测试插件
cd examples
npm install
npm run dev
```
## 更新日志
### 1.0.0 (2025-04-16)
- 首次发布
- 支持提取中文文本
- 支持百度翻译 API
- 支持翻译缓存
- 支持 Vue 3 + Vite 项目
## 许可证
MIT