UNPKG

vite-plugin-i18n-extract

Version:
192 lines (143 loc) 4.61 kB
# 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