{"repo": "baomidou/mybatis-plus-doc", "files": {"translation-plugin/README.md": {"58455c97f4f246e4466b3e4d8a8bff918119cd67": {"t": 1785746476.7194762, "n": 13129, "h": "8549db8bf3df1472", "c": "# MyBatis-Plus 文档翻译插件\n\n这是一个专为 MyBatis-Plus 文档项目设计的自动翻译插件,基于 AI 技术实现高质量的技术文档翻译。\n\n## ✨ v2.0 重大更新\n\n全新重构,引入专业 CLI 库,提供更优雅的用户体验:\n\n- 🎨 **现代化 CLI 界面**: 使用 `listr2` 提供实时任务进度展示\n- 🖥️ **交互式操作**: 使用 `inquirer` 实现配置向导和确认提示\n- 📊 **美化输出**: 使用 `boxen` 和 `cli-table3` 提供清晰的信息展示\n- 🔧 **子命令支持**: `translate`, `config`, `status` 等独立命令\n- 📝 **丰富的日志系统**: 支持多级别日志和日志文件输出\n- ⚙️ **全局选项**: `--verbose`, `--quiet`, `--json`, `--no-color` 等\n\n## 功能特性\n\n- 🌍 **多语言支持**: 支持英语、日语、韩语等多种目标语言\n- 🤖 **多 AI 提供商**: 基于 llm.js 支持 OpenAI、Claude、Google Gemini、Groq、Ollama、xAI、DeepSeek 等\n- 📝 **智能翻译**: 保持 Markdown 格式和代码块不变\n- 🔄 **增量翻译**: 只翻译修改过的文件,提高效率\n- 💾 **缓存机制**: 避免重复翻译,节省 API 调用\n- ⚡ **并行处理**: 支持多文件并行翻译\n- 🎯 **精确控制**: 可配置翻译的 frontmatter 字段\n- 📊 **进度显示**: 实时显示翻译进度和统计信息\n- 💰 **成本跟踪**: 实时显示 Token 使用量和成本信息\n\n## 🚀 快速开始\n\n### 1. 安装依赖\n\n```bash\nnpm install\n```\n\n### 2. 配置环境变量\n\n在项目根目录的 `.env` 文件中设置:\n\n```bash\n# 选择 AI Provider(可选,默认使用 deepseek)\nAI_PROVIDER=deepseek # 可选值: deepseek, openai, claude, gemini\n\n# 设置 API Key(必需)\nAPI_KEY=your_api_key_here\n```\n\n或者在终端中临时设置:\n\n```bash\n# 使用 DeepSeek\nexport AI_PROVIDER=deepseek\nexport API_KEY=your_deepseek_api_key\n\n# 使用 OpenAI\nexport AI_PROVIDER=openai\nexport API_KEY=your_openai_api_key\n\n# 使用 Claude\nexport AI_PROVIDER=claude\nexport API_KEY=your_anthropic_api_key\n\n# 使用 Gemini\nexport AI_PROVIDER=gemini\nexport API_KEY=your_google_api_key\n```\n\n### 3. 开始翻译\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 增量翻译(只翻译修改过的文件)\nnpm run translate:incremental\n\n# 预览模式(不实际翻译,只显示会翻译哪些文件)\nnpm run translate:check\n```\n\n## 📖 命令参考\n\n### 翻译命令 (translate)\n\n```bash\n# 基本用法\nnode translation-plugin/translate.js [options]\n\n# 全局选项\n--config # 配置文件路径(默认: ./translation-plugin/config.json)\n--quiet, -q # 静默模式,只输出错误信息\n--verbose, -v # 详细模式,输出调试信息\n--debug # 调试模式,输出所有日志\n--json # 以 JSON 格式输出结果\n--no-color # 禁用颜色输出\n--log-file # 日志文件路径\n\n# 翻译选项\n--lang, -l # 指定目标语言\n--file, -f # 指定翻译文件\n--incremental, -i # 增量翻译\n--dry-run, -d # 预览模式\n--yes, -y # 跳过确认提示\n--continue-on-error # 遇到错误继续执行\n--retry # 失败时重试次数\n```\n\n**示例**:\n\n```bash\n# 翻译所有文件到所有语言(带确认提示)\nnpm run translate\n\n# 静默模式翻译到英语\nnpm run translate -- --lang en --quiet\n\n# 翻译指定文件并跳过确认\nnpm run translate -- --file introduce.mdx --yes\n\n# 增量翻译(仅修改过的文件)\nnpm run translate -- --incremental\n\n# 预览模式(不实际翻译)\nnpm run translate -- --dry-run\n\n# 详细模式 + 日志文件\nnpm run translate -- --verbose --log-file ./logs/translate.log\n\n# JSON 格式输出(适合脚本集成)\nnpm run translate -- --json > result.json\n\n# 遇到错误继续执行,最多重试 3 次\nnpm run translate -- --continue-on-error --retry 3\n```\n\n### 配置命令 (config)\n\n```bash\n# 显示当前配置\nnode translation-plugin/translate.js config show\n\n# 配置初始化向导\nnode translation-plugin/translate.js config init\n\n# 验证配置\nnode translation-plugin/translate.js config validate\n\n# 列出所有 AI Providers\nnode translation-plugin/translate.js config providers\n```\n\n**示例**:\n\n```bash\n# 显示配置(表格格式)\nnpm run translate -- config show\n\n# 显示配置(JSON 格式)\nnpm run translate -- config show --json\n\n# 运行配置向导\nnpm run translate -- config init\n\n# 验证配置是否正确\nnpm run translate -- config validate\n\n# 查看可用的 AI Providers\nnpm run translate -- config providers\n```\n\n### 状态命令 (status)\n\n```bash\n# 查看翻译状态\nnode translation-plugin/translate.js status\n\n# 详细模式(显示需要更新的文件)\nnode translation-plugin/translate.js status --verbose\n```\n\n**示例**:\n\n```bash\n# 查看各语言翻译进度\nnpm run translate -- status\n\n# 查看详细状态(包含需要更新的文件列表)\nnpm run translate -- status --verbose\n\n# JSON 格式输出状态\nnpm run translate -- status --json\n```\n\n### npm scripts 快捷命令\n\n项目已配置以下 npm scripts:\n\n```bash\n# 翻译命令\nnpm run translate # 翻译所有文档\nnpm run translate:en # 翻译到英语\nnpm run translate:ja # 翻译到日语\nnpm run translate:check # 预览模式\nnpm run translate:incremental # 增量翻译\nnpm run translate:file # 翻译指定文件\nnpm run translate:en:file # 翻译指定文件到英语\nnpm run translate:ja:file # 翻译指定文件到日语\n```\n\n## 多 AI Provider 支持\n\n插件现在支持多个 AI 提供商配置,通过环境变量轻松切换:\n\n### 支持的 AI Providers\n\n- **deepseek**: DeepSeek API (默认)\n- **openai**: OpenAI GPT-4\n- **claude**: Anthropic Claude 3 Haiku\n- **gemini**: Google Gemini Pro\n\n### 配置结构\n\n```json\n{\n \"defaultProvider\": \"deepseek\",\n \"aiProviders\": {\n \"deepseek\": {\n \"service\": \"deepseek\",\n \"model\": \"deepseek-chat\",\n \"maxTokens\": 8192,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.deepseek.com\"\n },\n \"openai\": {\n \"service\": \"openai\",\n \"model\": \"gpt-4\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.openai.com/v1\"\n },\n \"claude\": {\n \"service\": \"anthropic\",\n \"model\": \"claude-3-haiku-20240307\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.anthropic.com\"\n },\n \"gemini\": {\n \"service\": \"google\",\n \"model\": \"gemini-pro\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://generativelanguage.googleapis.com/v1beta\"\n }\n }\n}\n```\n\n### 优势\n\n1. **灵活切换**: 通过环境变量快速切换 AI 提供商\n2. **安全性**: API 密钥通过环境变量管理,不会提交到代码库\n3. **扩展性**: 轻松添加新的 AI 提供商\n4. **向后兼容**: 支持旧版配置格式\n5. **统一接口**: 使用 llm.js 提供统一的 API 接口\n\n## 使用方法\n\n### 基本命令\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 翻译指定文件到所有配置的语言\nnpm run translate:file introduce.mdx\n\n# 翻译指定文件到指定语言\nnpm run translate:en:file introduce.mdx\nnpm run translate:ja:file introduce.mdx\n\n# 预览模式(不实际写入文件)\nnpm run translate:check\n\n# 增量翻译(仅翻译修改过的文件)\nnpm run translate:incremental\n```\n\n### 高级用法\n\n```bash\n# 翻译指定文件到指定语言\nnode translation-plugin/translate.js --file introduce.mdx --lang en\n\n# 翻译指定文件到所有配置的语言\nnode translation-plugin/translate.js --file getting-started/install.mdx\n\n# 使用自定义配置文件\nnode translation-plugin/translate.js --config ./custom-config.json\n\n# 组合使用:翻译指定文件到指定语言(预览模式)\nnode translation-plugin/translate.js --file introduce.mdx --lang ja --dry-run\n\n# 组合使用:增量翻译到指定语言\nnode translation-plugin/translate.js --lang ja --incremental --dry-run\n```\n\n## 配置选项详解\n\n### 目标语言 (targetLanguages)\n\n支持的语言代码:\n- `en`: English\n- `ja`: Japanese (日本語)\n- `ko`: Korean (한국어)\n- `fr`: French (Français)\n- `de`: German (Deutsch)\n- `es`: Spanish (Español)\n- `pt`: Portuguese (Português)\n- `ru`: Russian (Русский)\n\n### Frontmatter 键 (frontmatterKeys)\n\n指定需要翻译的 frontmatter 字段:\n```json\n{\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"]\n}\n```\n\n### 文件和目录排除配置\n\n#### 排除文件 (excludeFiles)\n\n指定不需要翻译的文件:\n```json\n{\n \"excludeFiles\": [\n \"404.md\", // 排除所有目录下的 404.md 文件\n \"index.mdx\", // 排除所有目录下的 index.mdx 文件\n \"getting-started/index.mdx\" // 仅排除 getting-started 目录下的 index.mdx\n ]\n}\n```\n\n**配置说明:**\n- **文件名匹配**:如果配置项只包含文件名(如 `\"index.mdx\"`),会排除所有目录下的同名文件\n- **相对路径匹配**:如果配置项包含路径分隔符(如 `\"getting-started/index.mdx\"`),会进行精确的相对路径匹配\n- 相对路径基于 `sourceDir` 配置的源目录\n\n#### 排除目录 (excludeDirs)\n\n指定不需要翻译的目录:\n```json\n{\n \"excludeDirs\": [\n \"en\", // 排除英文翻译目录\n \"ja\", // 排除日文翻译目录\n \"temp\", // 排除临时目录\n \"drafts\" // 排除草稿目录\n ]\n}\n```\n\n**配置说明:**\n- 排除的目录及其所有子目录和文件都不会被翻译\n- 通常用于排除已翻译的目标语言目录,避免重复翻译\n\n### 添加新的 Provider\n\n在 `config.json` 的 `aiProviders` 对象中添加新配置:\n\n```json\n{\n \"aiProviders\": {\n \"your_provider\": {\n \"service\": \"service_name\",\n \"model\": \"model_name\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.example.com\"\n }\n }\n}\n```\n\n### 缓存配置 (cache)\n\n```json\n{\n \"cache\": {\n \"enabled\": true,\n \"cacheDir\": \"translation-plugin/cache\"\n }\n}\n```\n\n### 并行处理配置 (parallel)\n\n```json\n{\n \"parallel\": {\n \"enabled\": true,\n \"maxConcurrency\": 3,\n \"segmentParallel\": false\n }\n}\n```\n\n**配置说明:**\n- `enabled`: 是否启用并行处理(文件级别)\n- `maxConcurrency`: 最大并发数,建议 2-5\n- `segmentParallel`: 是否对同一文档的段落使用并行翻译\n - `true`: 段落并行翻译,速度更快但可能影响上下文连贯性\n - `false`: 段落顺序翻译,保持上下文连贯性(推荐)\n\n### 分段配置 (segmentation)\n\n```json\n{\n \"segmentation\": {\n \"maxLength\": 8000,\n \"enabled\": true,\n \"maxHeadingLevel\": 3\n }\n}\n```\n\n**配置说明:**\n- `maxLength`: 单段最大长度,超过此长度会触发分段翻译\n- `enabled`: 是否启用智能分段翻译\n- `maxHeadingLevel`: 分段的最大标题级别\n - `1`: 只按 H1 (`#`) 分段\n - `2`: 按 H1-H2 (`#`, `##`) 分段\n - `3`: 按 H1-H3 (`#`, `##`, `###`) 分段(推荐)\n - `4-6`: 按更细粒度分段(可能导致段落过多)\n\n### 重试配置 (retryConfig)\n\n```json\n{\n \"retryConfig\": {\n \"maxRetries\": 3,\n \"retryDelay\": 1000\n }\n}\n```\n\n## 翻译规则\n\n插件会自动遵循以下翻译规则:\n\n### ✅ 会翻译的内容\n\n- 指定的 frontmatter 字段(如 title、description)\n- 正文内容\n- 标题和段落\n- 列表项\n- 表格内容\n\n### ❌ 不会翻译的内容\n\n- 代码块(```包围的内容)\n- 行内代码(`包围的内容)\n- MDX 导入语句\n- MDX 组件调用\n- URL 链接\n- 技术专有名词(MyBatis-Plus、Spring Boot 等)\n\n### 质量保证\n\n- 自动验证翻译结果格式\n- 检查代码块、链接数量一致性\n- 保持文档结构完整\n\n## 📁 输出结构\n\n翻译后的文件将按以下结构组织:\n\n```\nsrc/content/docs/\n├── getting-started/\n│ └── introduction.md # 原始中文文档\n├── en/ # 英文翻译\n│ └── getting-started/\n│ └── introduction.md\n└── ja/ # 日文翻译\n └── getting-started/\n └── introduction.md\n```\n\n## 📊 监控翻译进度\n\n运行翻译时,你会看到详细的进度信息:\n\n```\n🌍 开始翻译文档...\n📁 扫描文件: src/content/docs\n🎯 目标语言: en, ja\n📄 找到 15 个文件需要翻译\n\n[1/15] 翻译: getting-started/introduction.md → en ✅\n[2/15] 翻译: getting-started/introduction.md → ja ✅\n...\n\n🎉 翻译完成!\n📊 统计信息:\n - 总文件数: 15\n - 成功翻译: 30 (15 × 2 语言)\n - 失败: 0\n - 耗时: 2分30秒\n```\n\n## 📁 项目结构\n\n```\ntranslation-plugin/\n├── src/\n│ ├── core/ # 核心业务逻辑(v2.0 重构)\n│ │ ├── config.js # 配置管理\n│ │ ├── file-processor.js # 文件处理器\n│ │ ├── translator.js # 核心翻译器\n│ │ └── prompt-template.js # Prompt 模板\n│ └── cli/ # CLI 层(v2.0 新增)\n│ ├── commands/ # 命令处理器\n│ │ ├── translate.js # 翻译命令\n│ │ ├── config.js # 配置命令\n│ │ └── status.js # 状态命令\n│ ├── logger.js # 日志系统\n│ ├── ui.js # UI 组件\n│ └── prompts.js # 交互式提示\n├── test/ # 测试文件\n│ └── test-translation.js\n├── cache/ # 翻译缓存(自动生成)\n├── translate.js # CLI 入口\n├── config.json # 配置文件\n├── README.md # 说明文档\n└── MIGRATION.md # 迁移指南\n```\n\n### 架构说明\n\n**分层设计** (v2.0 重构):\n\n采用清晰的分层架构,将核心业务逻辑与 CLI 表现层分离:\n\n**core/** - 核心业务逻辑层\n- 独立于 CLI,可在其他项目中复用\n- 包含:配置管理、文件处理、翻译逻辑、Prompt 生成\n- 无外部 UI 依赖,纯业务逻辑\n\n**cli/** - 命令行界面层\n- 依赖 core 层提供的业务能力\n- 包含:命令处理、日志系统、UI 组件、交互提示\n- 负责用户交互和结果展示\n\n**优势**:\n- ✅ 职责清晰:业务逻辑与展现分离\n- ✅ 易于维护:模块边界明确\n- ✅ 可复用性强:core 层可独立使用\n- ✅ 易于测试:各层可单独测试\n- ✅ 扩展性好:添加新功能更简单\n\n## 🎨 UI 特性\n\n### 欢迎界面\n\n运行翻译工具时会显示美观的欢迎界面:\n\n```\n╭────────────────────────────────────────╮\n│ │\n│ MyBatis-Plus 文档翻译工具 │\n│ │\n│ 版本: 2.0.0 │\n│ 作者: MyBatis-Plus Team │\n│ │\n╰────────────────────────────────────────╯\n```\n\n### 实时任务进度\n\n使用 listr2 显示实时任务进度:\n\n```\n✔ introduce.mdx → EN [completed]\n⠹ getting-started/install.mdx → EN [running]\n◻ getting-started/install.mdx → JA [pending]\n```\n\n### 统计表格\n\n完成后显示详细的统计表格:\n\n```\n┌───────────┬─────────┐\n│ 统计项 │ 数值 │\n├───────────┼─────────┤\n│ 总任务数 │ 30 │\n│ 成功 │ 28 │\n│ 失败 │ 2 │\n│ 总耗时 │ 125.6秒 │\n└───────────┴─────────┘\n```\n\n## 故障排除\n\n### 常见问题\n\n1. **API Key 错误**\n ```\n 错误: 401 Unauthorized\n 解决: 检查 .env 文件中的 API_KEY 是否正确\n ```\n\n2. **文件权限错误**\n ```\n 错误: 文件写入失败\n 解决: 检查目标目录的写入权限\n ```\n\n3. **网络连接问题**\n ```\n 错误: AI 调用失败\n 解决: 检查网络连接,或配置代理\n ```\n\n4. **Provider 配置错误**\n ```\n 错误: AI Provider 'xxx' 配置未找到\n 解决: 检查 AI_PROVIDER 环境变量和 config.json 中的 aiProviders 配置\n ```\n\n### 调试模式\n\n使用 `--dry-run` 参数进行预览:\n\n```bash\nnpm run translate:check\n```\n\n这会显示将要翻译的文件列表,但不会实际执行翻译。\n\n设置环境变量启用详细日志:\n\n```bash\nDEBUG=true VERBOSE=true npm run translate\n```\n\n## 注意事项\n\n- `API_KEY` 环境变量是必需的,确保为选择的 Provider 设置正确的密钥\n- 不同 Provider 的 API 密钥格式可能不同,请参考对应服务的文档\n- 某些 Provider 可能需要额外的配置(如区域、版本等),可在配置中添加相应参数\n\n## 贡献指南\n\n1. Fork 项目\n2. 创建功能分支\n3. 提交更改\n4. 发起 Pull Request\n\n## 许可证\n\n本项目采用 MIT 许可证。\n\n## 📝 更新日志\n\n### v2.0.0 (2025-01-XX)\n\n**重大更新 - CLI 重构**\n\n- 🎨 **全新 CLI 界面**: 引入专业 CLI 库 (listr2, inquirer, boxen, cli-table3)\n- 📊 **实时进度展示**: 使用 listr2 提供任务列表和实时状态更新\n- 🖥️ **交互式操作**: 配置向导、确认提示、错误处理交互\n- 🔧 **子命令支持**: `translate`, `config`, `status` 独立命令\n- 📝 **日志系统**: 多级别日志 (ERROR, WARN, INFO, DEBUG, VERBOSE) 和日志文件支持\n- ⚙️ **全局选项**: `--quiet`, `--verbose`, `--debug`, `--json`, `--no-color`, `--log-file`\n- 📋 **美化输出**: 表格、进度条、彩色输出、信息框\n- 🛠️ **增强功能**:\n - 翻译前确认提示\n - 错误后继续/重试选项\n - JSON 格式输出支持\n - 翻译状态查询\n - 配置验证和管理\n\n**新增依赖**:\n- `inquirer@^9.0.0` - 交互式提示\n- `ora@^8.0.0` - Spinner 动画\n- `cli-progress@^3.12.0` - 进度条\n- `listr2@^8.0.0` - 任务列表\n- `boxen@^7.1.0` - 信息框\n- `cli-table3@^0.6.0` - 表格\n\n### v1.1.0 (2024-XX-XX)\n- ✨ 新增多 AI Provider 支持\n- ✨ 支持通过环境变量切换 Provider\n- ✨ 改进配置验证和错误提示\n- ✨ 统一 README 文档\n\n### v1.0.0 (2024-XX-XX)\n- 初始版本发布\n- 支持 LLM API\n- 基础翻译功能\n- 缓存和增量翻译\n- 并行处理支持\n\n## 🔄 从 v1.x 迁移到 v2.0\n\nv2.0 完全向后兼容,无需修改配置文件或使用方式。主要变化:\n\n1. **命令行参数**: 新增全局选项和更多翻译选项\n2. **输出格式**: 更美观的界面,支持 `--json` 格式输出\n3. **新增命令**: `config` 和 `status` 子命令\n4. **交互式操作**: 默认会显示确认提示,使用 `-y` 跳过\n\n**推荐更新**:\n\n```bash\n# 重新安装依赖\nnpm install\n\n# 查看新功能\nnode translation-plugin/translate.js --help\nnode translation-plugin/translate.js config --help\nnode translation-plugin/translate.js status --help\n```"}, "098afa9b773e3767c6acea63b3df1b246dd07e0c": {"t": 1785764731.0270495, "n": 13129, "h": "8549db8bf3df1472", "c": "# MyBatis-Plus 文档翻译插件\n\n这是一个专为 MyBatis-Plus 文档项目设计的自动翻译插件,基于 AI 技术实现高质量的技术文档翻译。\n\n## ✨ v2.0 重大更新\n\n全新重构,引入专业 CLI 库,提供更优雅的用户体验:\n\n- 🎨 **现代化 CLI 界面**: 使用 `listr2` 提供实时任务进度展示\n- 🖥️ **交互式操作**: 使用 `inquirer` 实现配置向导和确认提示\n- 📊 **美化输出**: 使用 `boxen` 和 `cli-table3` 提供清晰的信息展示\n- 🔧 **子命令支持**: `translate`, `config`, `status` 等独立命令\n- 📝 **丰富的日志系统**: 支持多级别日志和日志文件输出\n- ⚙️ **全局选项**: `--verbose`, `--quiet`, `--json`, `--no-color` 等\n\n## 功能特性\n\n- 🌍 **多语言支持**: 支持英语、日语、韩语等多种目标语言\n- 🤖 **多 AI 提供商**: 基于 llm.js 支持 OpenAI、Claude、Google Gemini、Groq、Ollama、xAI、DeepSeek 等\n- 📝 **智能翻译**: 保持 Markdown 格式和代码块不变\n- 🔄 **增量翻译**: 只翻译修改过的文件,提高效率\n- 💾 **缓存机制**: 避免重复翻译,节省 API 调用\n- ⚡ **并行处理**: 支持多文件并行翻译\n- 🎯 **精确控制**: 可配置翻译的 frontmatter 字段\n- 📊 **进度显示**: 实时显示翻译进度和统计信息\n- 💰 **成本跟踪**: 实时显示 Token 使用量和成本信息\n\n## 🚀 快速开始\n\n### 1. 安装依赖\n\n```bash\nnpm install\n```\n\n### 2. 配置环境变量\n\n在项目根目录的 `.env` 文件中设置:\n\n```bash\n# 选择 AI Provider(可选,默认使用 deepseek)\nAI_PROVIDER=deepseek # 可选值: deepseek, openai, claude, gemini\n\n# 设置 API Key(必需)\nAPI_KEY=your_api_key_here\n```\n\n或者在终端中临时设置:\n\n```bash\n# 使用 DeepSeek\nexport AI_PROVIDER=deepseek\nexport API_KEY=your_deepseek_api_key\n\n# 使用 OpenAI\nexport AI_PROVIDER=openai\nexport API_KEY=your_openai_api_key\n\n# 使用 Claude\nexport AI_PROVIDER=claude\nexport API_KEY=your_anthropic_api_key\n\n# 使用 Gemini\nexport AI_PROVIDER=gemini\nexport API_KEY=your_google_api_key\n```\n\n### 3. 开始翻译\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 增量翻译(只翻译修改过的文件)\nnpm run translate:incremental\n\n# 预览模式(不实际翻译,只显示会翻译哪些文件)\nnpm run translate:check\n```\n\n## 📖 命令参考\n\n### 翻译命令 (translate)\n\n```bash\n# 基本用法\nnode translation-plugin/translate.js [options]\n\n# 全局选项\n--config # 配置文件路径(默认: ./translation-plugin/config.json)\n--quiet, -q # 静默模式,只输出错误信息\n--verbose, -v # 详细模式,输出调试信息\n--debug # 调试模式,输出所有日志\n--json # 以 JSON 格式输出结果\n--no-color # 禁用颜色输出\n--log-file # 日志文件路径\n\n# 翻译选项\n--lang, -l # 指定目标语言\n--file, -f # 指定翻译文件\n--incremental, -i # 增量翻译\n--dry-run, -d # 预览模式\n--yes, -y # 跳过确认提示\n--continue-on-error # 遇到错误继续执行\n--retry # 失败时重试次数\n```\n\n**示例**:\n\n```bash\n# 翻译所有文件到所有语言(带确认提示)\nnpm run translate\n\n# 静默模式翻译到英语\nnpm run translate -- --lang en --quiet\n\n# 翻译指定文件并跳过确认\nnpm run translate -- --file introduce.mdx --yes\n\n# 增量翻译(仅修改过的文件)\nnpm run translate -- --incremental\n\n# 预览模式(不实际翻译)\nnpm run translate -- --dry-run\n\n# 详细模式 + 日志文件\nnpm run translate -- --verbose --log-file ./logs/translate.log\n\n# JSON 格式输出(适合脚本集成)\nnpm run translate -- --json > result.json\n\n# 遇到错误继续执行,最多重试 3 次\nnpm run translate -- --continue-on-error --retry 3\n```\n\n### 配置命令 (config)\n\n```bash\n# 显示当前配置\nnode translation-plugin/translate.js config show\n\n# 配置初始化向导\nnode translation-plugin/translate.js config init\n\n# 验证配置\nnode translation-plugin/translate.js config validate\n\n# 列出所有 AI Providers\nnode translation-plugin/translate.js config providers\n```\n\n**示例**:\n\n```bash\n# 显示配置(表格格式)\nnpm run translate -- config show\n\n# 显示配置(JSON 格式)\nnpm run translate -- config show --json\n\n# 运行配置向导\nnpm run translate -- config init\n\n# 验证配置是否正确\nnpm run translate -- config validate\n\n# 查看可用的 AI Providers\nnpm run translate -- config providers\n```\n\n### 状态命令 (status)\n\n```bash\n# 查看翻译状态\nnode translation-plugin/translate.js status\n\n# 详细模式(显示需要更新的文件)\nnode translation-plugin/translate.js status --verbose\n```\n\n**示例**:\n\n```bash\n# 查看各语言翻译进度\nnpm run translate -- status\n\n# 查看详细状态(包含需要更新的文件列表)\nnpm run translate -- status --verbose\n\n# JSON 格式输出状态\nnpm run translate -- status --json\n```\n\n### npm scripts 快捷命令\n\n项目已配置以下 npm scripts:\n\n```bash\n# 翻译命令\nnpm run translate # 翻译所有文档\nnpm run translate:en # 翻译到英语\nnpm run translate:ja # 翻译到日语\nnpm run translate:check # 预览模式\nnpm run translate:incremental # 增量翻译\nnpm run translate:file # 翻译指定文件\nnpm run translate:en:file # 翻译指定文件到英语\nnpm run translate:ja:file # 翻译指定文件到日语\n```\n\n## 多 AI Provider 支持\n\n插件现在支持多个 AI 提供商配置,通过环境变量轻松切换:\n\n### 支持的 AI Providers\n\n- **deepseek**: DeepSeek API (默认)\n- **openai**: OpenAI GPT-4\n- **claude**: Anthropic Claude 3 Haiku\n- **gemini**: Google Gemini Pro\n\n### 配置结构\n\n```json\n{\n \"defaultProvider\": \"deepseek\",\n \"aiProviders\": {\n \"deepseek\": {\n \"service\": \"deepseek\",\n \"model\": \"deepseek-chat\",\n \"maxTokens\": 8192,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.deepseek.com\"\n },\n \"openai\": {\n \"service\": \"openai\",\n \"model\": \"gpt-4\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.openai.com/v1\"\n },\n \"claude\": {\n \"service\": \"anthropic\",\n \"model\": \"claude-3-haiku-20240307\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.anthropic.com\"\n },\n \"gemini\": {\n \"service\": \"google\",\n \"model\": \"gemini-pro\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://generativelanguage.googleapis.com/v1beta\"\n }\n }\n}\n```\n\n### 优势\n\n1. **灵活切换**: 通过环境变量快速切换 AI 提供商\n2. **安全性**: API 密钥通过环境变量管理,不会提交到代码库\n3. **扩展性**: 轻松添加新的 AI 提供商\n4. **向后兼容**: 支持旧版配置格式\n5. **统一接口**: 使用 llm.js 提供统一的 API 接口\n\n## 使用方法\n\n### 基本命令\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 翻译指定文件到所有配置的语言\nnpm run translate:file introduce.mdx\n\n# 翻译指定文件到指定语言\nnpm run translate:en:file introduce.mdx\nnpm run translate:ja:file introduce.mdx\n\n# 预览模式(不实际写入文件)\nnpm run translate:check\n\n# 增量翻译(仅翻译修改过的文件)\nnpm run translate:incremental\n```\n\n### 高级用法\n\n```bash\n# 翻译指定文件到指定语言\nnode translation-plugin/translate.js --file introduce.mdx --lang en\n\n# 翻译指定文件到所有配置的语言\nnode translation-plugin/translate.js --file getting-started/install.mdx\n\n# 使用自定义配置文件\nnode translation-plugin/translate.js --config ./custom-config.json\n\n# 组合使用:翻译指定文件到指定语言(预览模式)\nnode translation-plugin/translate.js --file introduce.mdx --lang ja --dry-run\n\n# 组合使用:增量翻译到指定语言\nnode translation-plugin/translate.js --lang ja --incremental --dry-run\n```\n\n## 配置选项详解\n\n### 目标语言 (targetLanguages)\n\n支持的语言代码:\n- `en`: English\n- `ja`: Japanese (日本語)\n- `ko`: Korean (한국어)\n- `fr`: French (Français)\n- `de`: German (Deutsch)\n- `es`: Spanish (Español)\n- `pt`: Portuguese (Português)\n- `ru`: Russian (Русский)\n\n### Frontmatter 键 (frontmatterKeys)\n\n指定需要翻译的 frontmatter 字段:\n```json\n{\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"]\n}\n```\n\n### 文件和目录排除配置\n\n#### 排除文件 (excludeFiles)\n\n指定不需要翻译的文件:\n```json\n{\n \"excludeFiles\": [\n \"404.md\", // 排除所有目录下的 404.md 文件\n \"index.mdx\", // 排除所有目录下的 index.mdx 文件\n \"getting-started/index.mdx\" // 仅排除 getting-started 目录下的 index.mdx\n ]\n}\n```\n\n**配置说明:**\n- **文件名匹配**:如果配置项只包含文件名(如 `\"index.mdx\"`),会排除所有目录下的同名文件\n- **相对路径匹配**:如果配置项包含路径分隔符(如 `\"getting-started/index.mdx\"`),会进行精确的相对路径匹配\n- 相对路径基于 `sourceDir` 配置的源目录\n\n#### 排除目录 (excludeDirs)\n\n指定不需要翻译的目录:\n```json\n{\n \"excludeDirs\": [\n \"en\", // 排除英文翻译目录\n \"ja\", // 排除日文翻译目录\n \"temp\", // 排除临时目录\n \"drafts\" // 排除草稿目录\n ]\n}\n```\n\n**配置说明:**\n- 排除的目录及其所有子目录和文件都不会被翻译\n- 通常用于排除已翻译的目标语言目录,避免重复翻译\n\n### 添加新的 Provider\n\n在 `config.json` 的 `aiProviders` 对象中添加新配置:\n\n```json\n{\n \"aiProviders\": {\n \"your_provider\": {\n \"service\": \"service_name\",\n \"model\": \"model_name\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.example.com\"\n }\n }\n}\n```\n\n### 缓存配置 (cache)\n\n```json\n{\n \"cache\": {\n \"enabled\": true,\n \"cacheDir\": \"translation-plugin/cache\"\n }\n}\n```\n\n### 并行处理配置 (parallel)\n\n```json\n{\n \"parallel\": {\n \"enabled\": true,\n \"maxConcurrency\": 3,\n \"segmentParallel\": false\n }\n}\n```\n\n**配置说明:**\n- `enabled`: 是否启用并行处理(文件级别)\n- `maxConcurrency`: 最大并发数,建议 2-5\n- `segmentParallel`: 是否对同一文档的段落使用并行翻译\n - `true`: 段落并行翻译,速度更快但可能影响上下文连贯性\n - `false`: 段落顺序翻译,保持上下文连贯性(推荐)\n\n### 分段配置 (segmentation)\n\n```json\n{\n \"segmentation\": {\n \"maxLength\": 8000,\n \"enabled\": true,\n \"maxHeadingLevel\": 3\n }\n}\n```\n\n**配置说明:**\n- `maxLength`: 单段最大长度,超过此长度会触发分段翻译\n- `enabled`: 是否启用智能分段翻译\n- `maxHeadingLevel`: 分段的最大标题级别\n - `1`: 只按 H1 (`#`) 分段\n - `2`: 按 H1-H2 (`#`, `##`) 分段\n - `3`: 按 H1-H3 (`#`, `##`, `###`) 分段(推荐)\n - `4-6`: 按更细粒度分段(可能导致段落过多)\n\n### 重试配置 (retryConfig)\n\n```json\n{\n \"retryConfig\": {\n \"maxRetries\": 3,\n \"retryDelay\": 1000\n }\n}\n```\n\n## 翻译规则\n\n插件会自动遵循以下翻译规则:\n\n### ✅ 会翻译的内容\n\n- 指定的 frontmatter 字段(如 title、description)\n- 正文内容\n- 标题和段落\n- 列表项\n- 表格内容\n\n### ❌ 不会翻译的内容\n\n- 代码块(```包围的内容)\n- 行内代码(`包围的内容)\n- MDX 导入语句\n- MDX 组件调用\n- URL 链接\n- 技术专有名词(MyBatis-Plus、Spring Boot 等)\n\n### 质量保证\n\n- 自动验证翻译结果格式\n- 检查代码块、链接数量一致性\n- 保持文档结构完整\n\n## 📁 输出结构\n\n翻译后的文件将按以下结构组织:\n\n```\nsrc/content/docs/\n├── getting-started/\n│ └── introduction.md # 原始中文文档\n├── en/ # 英文翻译\n│ └── getting-started/\n│ └── introduction.md\n└── ja/ # 日文翻译\n └── getting-started/\n └── introduction.md\n```\n\n## 📊 监控翻译进度\n\n运行翻译时,你会看到详细的进度信息:\n\n```\n🌍 开始翻译文档...\n📁 扫描文件: src/content/docs\n🎯 目标语言: en, ja\n📄 找到 15 个文件需要翻译\n\n[1/15] 翻译: getting-started/introduction.md → en ✅\n[2/15] 翻译: getting-started/introduction.md → ja ✅\n...\n\n🎉 翻译完成!\n📊 统计信息:\n - 总文件数: 15\n - 成功翻译: 30 (15 × 2 语言)\n - 失败: 0\n - 耗时: 2分30秒\n```\n\n## 📁 项目结构\n\n```\ntranslation-plugin/\n├── src/\n│ ├── core/ # 核心业务逻辑(v2.0 重构)\n│ │ ├── config.js # 配置管理\n│ │ ├── file-processor.js # 文件处理器\n│ │ ├── translator.js # 核心翻译器\n│ │ └── prompt-template.js # Prompt 模板\n│ └── cli/ # CLI 层(v2.0 新增)\n│ ├── commands/ # 命令处理器\n│ │ ├── translate.js # 翻译命令\n│ │ ├── config.js # 配置命令\n│ │ └── status.js # 状态命令\n│ ├── logger.js # 日志系统\n│ ├── ui.js # UI 组件\n│ └── prompts.js # 交互式提示\n├── test/ # 测试文件\n│ └── test-translation.js\n├── cache/ # 翻译缓存(自动生成)\n├── translate.js # CLI 入口\n├── config.json # 配置文件\n├── README.md # 说明文档\n└── MIGRATION.md # 迁移指南\n```\n\n### 架构说明\n\n**分层设计** (v2.0 重构):\n\n采用清晰的分层架构,将核心业务逻辑与 CLI 表现层分离:\n\n**core/** - 核心业务逻辑层\n- 独立于 CLI,可在其他项目中复用\n- 包含:配置管理、文件处理、翻译逻辑、Prompt 生成\n- 无外部 UI 依赖,纯业务逻辑\n\n**cli/** - 命令行界面层\n- 依赖 core 层提供的业务能力\n- 包含:命令处理、日志系统、UI 组件、交互提示\n- 负责用户交互和结果展示\n\n**优势**:\n- ✅ 职责清晰:业务逻辑与展现分离\n- ✅ 易于维护:模块边界明确\n- ✅ 可复用性强:core 层可独立使用\n- ✅ 易于测试:各层可单独测试\n- ✅ 扩展性好:添加新功能更简单\n\n## 🎨 UI 特性\n\n### 欢迎界面\n\n运行翻译工具时会显示美观的欢迎界面:\n\n```\n╭────────────────────────────────────────╮\n│ │\n│ MyBatis-Plus 文档翻译工具 │\n│ │\n│ 版本: 2.0.0 │\n│ 作者: MyBatis-Plus Team │\n│ │\n╰────────────────────────────────────────╯\n```\n\n### 实时任务进度\n\n使用 listr2 显示实时任务进度:\n\n```\n✔ introduce.mdx → EN [completed]\n⠹ getting-started/install.mdx → EN [running]\n◻ getting-started/install.mdx → JA [pending]\n```\n\n### 统计表格\n\n完成后显示详细的统计表格:\n\n```\n┌───────────┬─────────┐\n│ 统计项 │ 数值 │\n├───────────┼─────────┤\n│ 总任务数 │ 30 │\n│ 成功 │ 28 │\n│ 失败 │ 2 │\n│ 总耗时 │ 125.6秒 │\n└───────────┴─────────┘\n```\n\n## 故障排除\n\n### 常见问题\n\n1. **API Key 错误**\n ```\n 错误: 401 Unauthorized\n 解决: 检查 .env 文件中的 API_KEY 是否正确\n ```\n\n2. **文件权限错误**\n ```\n 错误: 文件写入失败\n 解决: 检查目标目录的写入权限\n ```\n\n3. **网络连接问题**\n ```\n 错误: AI 调用失败\n 解决: 检查网络连接,或配置代理\n ```\n\n4. **Provider 配置错误**\n ```\n 错误: AI Provider 'xxx' 配置未找到\n 解决: 检查 AI_PROVIDER 环境变量和 config.json 中的 aiProviders 配置\n ```\n\n### 调试模式\n\n使用 `--dry-run` 参数进行预览:\n\n```bash\nnpm run translate:check\n```\n\n这会显示将要翻译的文件列表,但不会实际执行翻译。\n\n设置环境变量启用详细日志:\n\n```bash\nDEBUG=true VERBOSE=true npm run translate\n```\n\n## 注意事项\n\n- `API_KEY` 环境变量是必需的,确保为选择的 Provider 设置正确的密钥\n- 不同 Provider 的 API 密钥格式可能不同,请参考对应服务的文档\n- 某些 Provider 可能需要额外的配置(如区域、版本等),可在配置中添加相应参数\n\n## 贡献指南\n\n1. Fork 项目\n2. 创建功能分支\n3. 提交更改\n4. 发起 Pull Request\n\n## 许可证\n\n本项目采用 MIT 许可证。\n\n## 📝 更新日志\n\n### v2.0.0 (2025-01-XX)\n\n**重大更新 - CLI 重构**\n\n- 🎨 **全新 CLI 界面**: 引入专业 CLI 库 (listr2, inquirer, boxen, cli-table3)\n- 📊 **实时进度展示**: 使用 listr2 提供任务列表和实时状态更新\n- 🖥️ **交互式操作**: 配置向导、确认提示、错误处理交互\n- 🔧 **子命令支持**: `translate`, `config`, `status` 独立命令\n- 📝 **日志系统**: 多级别日志 (ERROR, WARN, INFO, DEBUG, VERBOSE) 和日志文件支持\n- ⚙️ **全局选项**: `--quiet`, `--verbose`, `--debug`, `--json`, `--no-color`, `--log-file`\n- 📋 **美化输出**: 表格、进度条、彩色输出、信息框\n- 🛠️ **增强功能**:\n - 翻译前确认提示\n - 错误后继续/重试选项\n - JSON 格式输出支持\n - 翻译状态查询\n - 配置验证和管理\n\n**新增依赖**:\n- `inquirer@^9.0.0` - 交互式提示\n- `ora@^8.0.0` - Spinner 动画\n- `cli-progress@^3.12.0` - 进度条\n- `listr2@^8.0.0` - 任务列表\n- `boxen@^7.1.0` - 信息框\n- `cli-table3@^0.6.0` - 表格\n\n### v1.1.0 (2024-XX-XX)\n- ✨ 新增多 AI Provider 支持\n- ✨ 支持通过环境变量切换 Provider\n- ✨ 改进配置验证和错误提示\n- ✨ 统一 README 文档\n\n### v1.0.0 (2024-XX-XX)\n- 初始版本发布\n- 支持 LLM API\n- 基础翻译功能\n- 缓存和增量翻译\n- 并行处理支持\n\n## 🔄 从 v1.x 迁移到 v2.0\n\nv2.0 完全向后兼容,无需修改配置文件或使用方式。主要变化:\n\n1. **命令行参数**: 新增全局选项和更多翻译选项\n2. **输出格式**: 更美观的界面,支持 `--json` 格式输出\n3. **新增命令**: `config` 和 `status` 子命令\n4. **交互式操作**: 默认会显示确认提示,使用 `-y` 跳过\n\n**推荐更新**:\n\n```bash\n# 重新安装依赖\nnpm install\n\n# 查看新功能\nnode translation-plugin/translate.js --help\nnode translation-plugin/translate.js config --help\nnode translation-plugin/translate.js status --help\n```"}, "19c68e137ce91cb03e71d61a71f3c8eba6628f3e": {"t": 1785764732.6197648, "n": 7577, "h": "08672375b6f59af0", "c": "# MyBatis-Plus 文档翻译插件\n\n这是一个专为 MyBatis-Plus 文档项目设计的自动翻译插件,基于 AI 技术实现高质量的技术文档翻译。\n\n## 功能特性\n\n- 🌍 **多语言支持**: 支持英语、日语、韩语等多种目标语言\n- 🤖 **多 AI 提供商**: 基于 llm.js 支持 OpenAI、Claude、Google Gemini、Groq、Ollama、xAI、DeepSeek 等\n- 📝 **智能翻译**: 保持 Markdown 格式和代码块不变\n- 🔄 **增量翻译**: 只翻译修改过的文件,提高效率\n- 💾 **缓存机制**: 避免重复翻译,节省 API 调用\n- ⚡ **并行处理**: 支持多文件并行翻译\n- 🎯 **精确控制**: 可配置翻译的 frontmatter 字段\n- 📊 **进度显示**: 实时显示翻译进度和统计信息\n- 💰 **成本跟踪**: 实时显示 Token 使用量和成本信息\n\n## 🚀 快速开始\n\n### 1. 安装依赖\n\n```bash\nnpm install\n```\n\n### 2. 配置环境变量\n\n在项目根目录的 `.env` 文件中设置:\n\n```bash\n# 选择 AI Provider(可选,默认使用 deepseek)\nAI_PROVIDER=deepseek # 可选值: deepseek, openai, claude, gemini\n\n# 设置 API Key(必需)\nAPI_KEY=your_api_key_here\n```\n\n或者在终端中临时设置:\n\n```bash\n# 使用 DeepSeek\nexport AI_PROVIDER=deepseek\nexport API_KEY=your_deepseek_api_key\n\n# 使用 OpenAI\nexport AI_PROVIDER=openai\nexport API_KEY=your_openai_api_key\n\n# 使用 Claude\nexport AI_PROVIDER=claude\nexport API_KEY=your_anthropic_api_key\n\n# 使用 Gemini\nexport AI_PROVIDER=gemini\nexport API_KEY=your_google_api_key\n```\n\n### 3. 开始翻译\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 增量翻译(只翻译修改过的文件)\nnpm run translate:incremental\n\n# 预览模式(不实际翻译,只显示会翻译哪些文件)\nnpm run translate:check\n```\n\n## 多 AI Provider 支持\n\n插件现在支持多个 AI 提供商配置,通过环境变量轻松切换:\n\n### 支持的 AI Providers\n\n- **deepseek**: DeepSeek API (默认)\n- **openai**: OpenAI GPT-4\n- **claude**: Anthropic Claude 3 Haiku\n- **gemini**: Google Gemini Pro\n\n### 配置结构\n\n```json\n{\n \"defaultProvider\": \"deepseek\",\n \"aiProviders\": {\n \"deepseek\": {\n \"service\": \"deepseek\",\n \"model\": \"deepseek-chat\",\n \"maxTokens\": 8192,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.deepseek.com\"\n },\n \"openai\": {\n \"service\": \"openai\",\n \"model\": \"gpt-4\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.openai.com/v1\"\n },\n \"claude\": {\n \"service\": \"anthropic\",\n \"model\": \"claude-3-haiku-20240307\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.anthropic.com\"\n },\n \"gemini\": {\n \"service\": \"google\",\n \"model\": \"gemini-pro\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://generativelanguage.googleapis.com/v1beta\"\n }\n }\n}\n```\n\n### 优势\n\n1. **灵活切换**: 通过环境变量快速切换 AI 提供商\n2. **安全性**: API 密钥通过环境变量管理,不会提交到代码库\n3. **扩展性**: 轻松添加新的 AI 提供商\n4. **向后兼容**: 支持旧版配置格式\n5. **统一接口**: 使用 llm.js 提供统一的 API 接口\n\n## 使用方法\n\n### 基本命令\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 翻译指定文件到所有配置的语言\nnpm run translate:file introduce.mdx\n\n# 翻译指定文件到指定语言\nnpm run translate:en:file introduce.mdx\nnpm run translate:ja:file introduce.mdx\n\n# 预览模式(不实际写入文件)\nnpm run translate:check\n\n# 增量翻译(仅翻译修改过的文件)\nnpm run translate:incremental\n```\n\n### 高级用法\n\n```bash\n# 翻译指定文件到指定语言\nnode translation-plugin/translate.js --file introduce.mdx --lang en\n\n# 翻译指定文件到所有配置的语言\nnode translation-plugin/translate.js --file getting-started/install.mdx\n\n# 使用自定义配置文件\nnode translation-plugin/translate.js --config ./custom-config.json\n\n# 组合使用:翻译指定文件到指定语言(预览模式)\nnode translation-plugin/translate.js --file introduce.mdx --lang ja --dry-run\n\n# 组合使用:增量翻译到指定语言\nnode translation-plugin/translate.js --lang ja --incremental --dry-run\n```\n\n## 配置选项详解\n\n### 目标语言 (targetLanguages)\n\n支持的语言代码:\n- `en`: English\n- `ja`: Japanese (日本語)\n- `ko`: Korean (한국어)\n- `fr`: French (Français)\n- `de`: German (Deutsch)\n- `es`: Spanish (Español)\n- `pt`: Portuguese (Português)\n- `ru`: Russian (Русский)\n\n### Frontmatter 键 (frontmatterKeys)\n\n指定需要翻译的 frontmatter 字段:\n```json\n{\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"]\n}\n```\n\n### 文件和目录排除配置\n\n#### 排除文件 (excludeFiles)\n\n指定不需要翻译的文件:\n```json\n{\n \"excludeFiles\": [\n \"404.md\", // 排除所有目录下的 404.md 文件\n \"index.mdx\", // 排除所有目录下的 index.mdx 文件\n \"getting-started/index.mdx\" // 仅排除 getting-started 目录下的 index.mdx\n ]\n}\n```\n\n**配置说明:**\n- **文件名匹配**:如果配置项只包含文件名(如 `\"index.mdx\"`),会排除所有目录下的同名文件\n- **相对路径匹配**:如果配置项包含路径分隔符(如 `\"getting-started/index.mdx\"`),会进行精确的相对路径匹配\n- 相对路径基于 `sourceDir` 配置的源目录\n\n#### 排除目录 (excludeDirs)\n\n指定不需要翻译的目录:\n```json\n{\n \"excludeDirs\": [\n \"en\", // 排除英文翻译目录\n \"ja\", // 排除日文翻译目录\n \"temp\", // 排除临时目录\n \"drafts\" // 排除草稿目录\n ]\n}\n```\n\n**配置说明:**\n- 排除的目录及其所有子目录和文件都不会被翻译\n- 通常用于排除已翻译的目标语言目录,避免重复翻译\n\n### 添加新的 Provider\n\n在 `config.json` 的 `aiProviders` 对象中添加新配置:\n\n```json\n{\n \"aiProviders\": {\n \"your_provider\": {\n \"service\": \"service_name\",\n \"model\": \"model_name\",\n \"maxTokens\": 4096,\n \"temperature\": 0.1,\n \"baseURL\": \"https://api.example.com\"\n }\n }\n}\n```\n\n### 缓存配置 (cache)\n\n```json\n{\n \"cache\": {\n \"enabled\": true,\n \"cacheDir\": \"translation-plugin/cache\"\n }\n}\n```\n\n### 并行处理配置 (parallel)\n\n```json\n{\n \"parallel\": {\n \"enabled\": true,\n \"maxConcurrency\": 3,\n \"segmentParallel\": false\n }\n}\n```\n\n**配置说明:**\n- `enabled`: 是否启用并行处理(文件级别)\n- `maxConcurrency`: 最大并发数,建议 2-5\n- `segmentParallel`: 是否对同一文档的段落使用并行翻译\n - `true`: 段落并行翻译,速度更快但可能影响上下文连贯性\n - `false`: 段落顺序翻译,保持上下文连贯性(推荐)\n\n### 分段配置 (segmentation)\n\n```json\n{\n \"segmentation\": {\n \"maxLength\": 8000,\n \"enabled\": true,\n \"maxHeadingLevel\": 3\n }\n}\n```\n\n**配置说明:**\n- `maxLength`: 单段最大长度,超过此长度会触发分段翻译\n- `enabled`: 是否启用智能分段翻译\n- `maxHeadingLevel`: 分段的最大标题级别\n - `1`: 只按 H1 (`#`) 分段\n - `2`: 按 H1-H2 (`#`, `##`) 分段\n - `3`: 按 H1-H3 (`#`, `##`, `###`) 分段(推荐)\n - `4-6`: 按更细粒度分段(可能导致段落过多)\n\n### 重试配置 (retryConfig)\n\n```json\n{\n \"retryConfig\": {\n \"maxRetries\": 3,\n \"retryDelay\": 1000\n }\n}\n```\n\n## 翻译规则\n\n插件会自动遵循以下翻译规则:\n\n### ✅ 会翻译的内容\n\n- 指定的 frontmatter 字段(如 title、description)\n- 正文内容\n- 标题和段落\n- 列表项\n- 表格内容\n\n### ❌ 不会翻译的内容\n\n- 代码块(```包围的内容)\n- 行内代码(`包围的内容)\n- MDX 导入语句\n- MDX 组件调用\n- URL 链接\n- 技术专有名词(MyBatis-Plus、Spring Boot 等)\n\n### 质量保证\n\n- 自动验证翻译结果格式\n- 检查代码块、链接数量一致性\n- 保持文档结构完整\n\n## 📁 输出结构\n\n翻译后的文件将按以下结构组织:\n\n```\nsrc/content/docs/\n├── getting-started/\n│ └── introduction.md # 原始中文文档\n├── en/ # 英文翻译\n│ └── getting-started/\n│ └── introduction.md\n└── ja/ # 日文翻译\n └── getting-started/\n └── introduction.md\n```\n\n## 📊 监控翻译进度\n\n运行翻译时,你会看到详细的进度信息:\n\n```\n🌍 开始翻译文档...\n📁 扫描文件: src/content/docs\n🎯 目标语言: en, ja\n📄 找到 15 个文件需要翻译\n\n[1/15] 翻译: getting-started/introduction.md → en ✅\n[2/15] 翻译: getting-started/introduction.md → ja ✅\n...\n\n🎉 翻译完成!\n📊 统计信息:\n - 总文件数: 15\n - 成功翻译: 30 (15 × 2 语言)\n - 失败: 0\n - 耗时: 2分30秒\n```\n\n## 目录结构\n\n```\ntranslation-plugin/\n├── src/\n│ ├── config.js # 配置管理\n│ ├── file-processor.js # 文件处理器\n│ ├── prompt-template.js # Prompt 模板\n│ └── translator.js # 核心翻译器\n├── cache/ # 翻译缓存(自动生成)\n├── config.json # 配置文件\n└── README.md # 说明文档\n```\n\n## 故障排除\n\n### 常见问题\n\n1. **API Key 错误**\n ```\n 错误: 401 Unauthorized\n 解决: 检查 .env 文件中的 API_KEY 是否正确\n ```\n\n2. **文件权限错误**\n ```\n 错误: 文件写入失败\n 解决: 检查目标目录的写入权限\n ```\n\n3. **网络连接问题**\n ```\n 错误: AI 调用失败\n 解决: 检查网络连接,或配置代理\n ```\n\n4. **Provider 配置错误**\n ```\n 错误: AI Provider 'xxx' 配置未找到\n 解决: 检查 AI_PROVIDER 环境变量和 config.json 中的 aiProviders 配置\n ```\n\n### 调试模式\n\n使用 `--dry-run` 参数进行预览:\n\n```bash\nnpm run translate:check\n```\n\n这会显示将要翻译的文件列表,但不会实际执行翻译。\n\n设置环境变量启用详细日志:\n\n```bash\nDEBUG=true VERBOSE=true npm run translate\n```\n\n## 注意事项\n\n- `API_KEY` 环境变量是必需的,确保为选择的 Provider 设置正确的密钥\n- 不同 Provider 的 API 密钥格式可能不同,请参考对应服务的文档\n- 某些 Provider 可能需要额外的配置(如区域、版本等),可在配置中添加相应参数\n\n## 贡献指南\n\n1. Fork 项目\n2. 创建功能分支\n3. 提交更改\n4. 发起 Pull Request\n\n## 许可证\n\n本项目采用 MIT 许可证。\n\n## 更新日志\n\n### v1.1.0\n- ✨ 新增多 AI Provider 支持\n- ✨ 支持通过环境变量切换 Provider\n- ✨ 改进配置验证和错误提示\n- ✨ 统一 README 文档\n\n### v1.0.0\n- 初始版本发布\n- 支持 LLM API\n- 基础翻译功能\n- 缓存和增量翻译\n- 并行处理支持"}, "591cf39eee8bbe1ee2c98826615cde5398cb321c": {"t": 1785764734.134732, "n": 6797, "h": "09cb8b788cceeff6", "c": "# MyBatis-Plus 文档翻译插件\n\n这是一个专为 MyBatis-Plus 文档项目设计的自动翻译插件,基于 AI 技术实现高质量的技术文档翻译。\n\n## 功能特性\n\n- 🌍 **多语言支持**: 支持英语、日语、韩语等多种目标语言\n- 🤖 **多 AI 提供商**: 基于 llm.js 支持 OpenAI、Claude、Google Gemini、Groq、Ollama、xAI、DeepSeek 等\n- 📝 **智能翻译**: 保持 Markdown 格式和代码块不变\n- 🔄 **增量翻译**: 只翻译修改过的文件,提高效率\n- 💾 **缓存机制**: 避免重复翻译,节省 API 调用\n- ⚡ **并行处理**: 支持多文件并行翻译\n- 🎯 **精确控制**: 可配置翻译的 frontmatter 字段\n- 📊 **进度显示**: 实时显示翻译进度和统计信息\n- 💰 **成本跟踪**: 实时显示 Token 使用量和成本信息\n\n## 安装依赖\n\n```bash\nnpm install\n```\n\n## 配置\n\n### 1. 基础配置\n\n编辑 `translation-plugin/config.json` 文件:\n\n```json\n{\n \"targetLanguages\": [\"en\", \"ja\"],\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"],\n \"aiProvider\": {\n \"type\": \"openai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gpt-4\"\n }\n}\n```\n\n### 2. 环境变量\n\n你也可以通过环境变量设置 API Key:\n\n```bash\n# 统一的 API 密钥环境变量(适用于所有 AI 服务)\nexport API_KEY=\"your-api-key\"\n```\n\n**注意:** \n- 环境变量的优先级低于配置文件中的 `apiKey` 设置\n- 所有 AI 服务统一使用 `API_KEY` 环境变量,具体服务类型通过配置文件中的 `service` 字段指定\n\n## 使用方法\n\n### 基本命令\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 翻译指定文件到所有配置的语言\nnpm run translate:file introduce.mdx\n\n# 翻译指定文件到指定语言\nnpm run translate:en:file introduce.mdx\nnpm run translate:ja:file introduce.mdx\n\n# 预览模式(不实际写入文件)\nnpm run translate:check\n\n# 增量翻译(仅翻译修改过的文件)\nnpm run translate:incremental\n```\n\n### 高级用法\n\n```bash\n# 翻译指定文件到指定语言\nnode translation-plugin/translate.js --file introduce.mdx --lang en\n\n# 翻译指定文件到所有配置的语言\nnode translation-plugin/translate.js --file getting-started/install.mdx\n\n# 使用自定义配置文件\nnode translation-plugin/translate.js --config ./custom-config.json\n\n# 组合使用:翻译指定文件到指定语言(预览模式)\nnode translation-plugin/translate.js --file introduce.mdx --lang ja --dry-run\n\n# 组合使用:增量翻译到指定语言\nnode translation-plugin/translate.js --lang ja --incremental --dry-run\n```\n\n## 配置选项详解\n\n### 目标语言 (targetLanguages)\n\n支持的语言代码:\n- `en`: English\n- `ja`: Japanese (日本語)\n- `ko`: Korean (한국어)\n- `fr`: French (Français)\n- `de`: German (Deutsch)\n- `es`: Spanish (Español)\n- `pt`: Portuguese (Português)\n- `ru`: Russian (Русский)\n\n### Frontmatter 键 (frontmatterKeys)\n\n指定需要翻译的 frontmatter 字段:\n```json\n{\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"]\n}\n```\n\n### 文件和目录排除配置\n\n#### 排除文件 (excludeFiles)\n\n指定不需要翻译的文件:\n```json\n{\n \"excludeFiles\": [\n \"404.md\", // 排除所有目录下的 404.md 文件\n \"index.mdx\", // 排除所有目录下的 index.mdx 文件\n \"getting-started/index.mdx\" // 仅排除 getting-started 目录下的 index.mdx\n ]\n}\n```\n\n**配置说明:**\n- **文件名匹配**:如果配置项只包含文件名(如 `\"index.mdx\"`),会排除所有目录下的同名文件\n- **相对路径匹配**:如果配置项包含路径分隔符(如 `\"getting-started/index.mdx\"`),会进行精确的相对路径匹配\n- 相对路径基于 `sourceDir` 配置的源目录\n\n#### 排除目录 (excludeDirs)\n\n指定不需要翻译的目录:\n```json\n{\n \"excludeDirs\": [\n \"en\", // 排除英文翻译目录\n \"ja\", // 排除日文翻译目录\n \"temp\", // 排除临时目录\n \"drafts\" // 排除草稿目录\n ]\n}\n```\n\n**配置说明:**\n- 排除的目录及其所有子目录和文件都不会被翻译\n- 通常用于排除已翻译的目标语言目录,避免重复翻译\n\n### AI 提供商配置 (aiProvider)\n\n基于 [llm.js](https://llmjs.themaximalist.com/) 支持多种 AI 提供商:\n\n#### OpenAI\n```json\n{\n \"aiProvider\": {\n \"service\": \"openai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gpt-4\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Anthropic Claude\n```json\n{\n \"aiProvider\": {\n \"service\": \"anthropic\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"claude-3-sonnet-20240229\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Google Gemini\n```json\n{\n \"aiProvider\": {\n \"service\": \"google\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gemini-pro\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Groq (高速推理)\n```json\n{\n \"aiProvider\": {\n \"service\": \"groq\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"llama2-70b-4096\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### 本地模型 (Ollama)\n```json\n{\n \"aiProvider\": {\n \"service\": \"ollama\",\n \"model\": \"llama2\",\n \"baseURL\": \"http://localhost:11434\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### xAI Grok\n```json\n{\n \"aiProvider\": {\n \"service\": \"xai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"grok-beta\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### DeepSeek\n```json\n{\n \"aiProvider\": {\n \"service\": \"deepseek\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"deepseek-chat\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### OpenRouter (推荐)\n```json\n{\n \"aiProvider\": {\n \"service\": \"openrouter\",\n \"apiKey\": \"your-openrouter-api-key\",\n \"model\": \"anthropic/claude-3.5-sonnet\",\n \"baseURL\": \"https://openrouter.ai/api/v1\",\n \"maxTokens\": 8000,\n \"temperature\": 0.1\n }\n}\n```\n\n**OpenRouter 热门模型推荐:**\n- `anthropic/claude-3.5-sonnet` - 最佳质量,适合技术文档\n- `openai/gpt-4o` - OpenAI 最新模型\n- `meta-llama/llama-3.1-70b-instruct` - 开源高质量模型\n- `google/gemini-pro` - Google 模型\n- `anthropic/claude-3-haiku` - 快速且经济的选择\n\n**OpenRouter 优势:**\n- 🌟 统一接口访问多种顶级模型\n- 💰 透明的按使用量计费\n- 🚀 无需管理多个 API 密钥\n- 📊 详细的使用统计和成本跟踪\n- 🔄 模型间轻松切换\n\n### 缓存配置 (cache)\n\n```json\n{\n \"cache\": {\n \"enabled\": true,\n \"cacheDir\": \"translation-plugin/cache\"\n }\n}\n```\n\n### 并行处理配置 (parallel)\n\n```json\n{\n \"parallel\": {\n \"enabled\": true,\n \"maxConcurrency\": 3,\n \"segmentParallel\": false\n }\n}\n```\n\n**配置说明:**\n- `enabled`: 是否启用并行处理(文件级别)\n- `maxConcurrency`: 最大并发数,建议 2-5\n- `segmentParallel`: 是否对同一文档的段落使用并行翻译\n - `true`: 段落并行翻译,速度更快但可能影响上下文连贯性\n - `false`: 段落顺序翻译,保持上下文连贯性(推荐)\n\n### 分段配置 (segmentation)\n\n```json\n{\n \"segmentation\": {\n \"maxLength\": 8000,\n \"enabled\": true,\n \"maxHeadingLevel\": 3\n }\n}\n```\n\n**配置说明:**\n- `maxLength`: 单段最大长度,超过此长度会触发分段翻译\n- `enabled`: 是否启用智能分段翻译\n- `maxHeadingLevel`: 分段的最大标题级别\n - `1`: 只按 H1 (`#`) 分段\n - `2`: 按 H1-H2 (`#`, `##`) 分段\n - `3`: 按 H1-H3 (`#`, `##`, `###`) 分段(推荐)\n - `4-6`: 按更细粒度分段(可能导致段落过多)\n\n### 重试配置 (retryConfig)\n\n```json\n{\n \"retryConfig\": {\n \"maxRetries\": 3,\n \"retryDelay\": 1000\n }\n}\n```\n\n## 翻译规则\n\n插件会自动遵循以下翻译规则:\n\n1. **保持不变的内容**:\n - 代码块(```包围的内容)\n - 行内代码(`包围的内容)\n - MDX 导入语句\n - MDX 组件调用\n - URL 链接\n - 技术专有名词(MyBatis-Plus、Spring Boot 等)\n\n2. **翻译的内容**:\n - 指定的 frontmatter 字段\n - 正文文本内容\n - 保持 Markdown 格式\n\n3. **质量保证**:\n - 自动验证翻译结果格式\n - 检查代码块、链接数量一致性\n - 保持文档结构完整\n\n## 目录结构\n\n```\ntranslation-plugin/\n├── src/\n│ ├── config.js # 配置管理\n│ ├── file-processor.js # 文件处理器\n│ ├── prompt-template.js # Prompt 模板\n│ └── translator.js # 核心翻译器\n├── cache/ # 翻译缓存(自动生成)\n├── config.json # 配置文件\n└── README.md # 说明文档\n```\n\n## 故障排除\n\n### 常见问题\n\n1. **API Key 错误**\n ```\n 错误: OpenAI API Key 未配置\n ```\n 解决:设置环境变量或在配置文件中添加 API Key\n\n2. **文件权限错误**\n ```\n 错误: 文件写入失败\n ```\n 解决:检查目标目录的写入权限\n\n3. **网络连接问题**\n ```\n 错误: AI 调用失败\n ```\n 解决:检查网络连接,或配置代理\n\n### 调试模式\n\n使用 `--dry-run` 参数进行预览:\n\n```bash\nnpm run translate:check\n```\n\n这会显示将要翻译的文件列表,但不会实际执行翻译。\n\n## 贡献指南\n\n1. Fork 项目\n2. 创建功能分支\n3. 提交更改\n4. 发起 Pull Request\n\n## 许可证\n\n本项目采用 MIT 许可证。\n\n## 更新日志\n\n### v1.0.0\n- 初始版本发布\n- 支持 LLM API\n- 基础翻译功能\n- 缓存和增量翻译\n- 并行处理支持"}, "d476aa502091ba51ae93c2a9b3363fbcf9ec6e53": {"t": 1785764735.5561538, "n": 5705, "h": "9ceb959355cd2f55", "c": "# MyBatis-Plus 文档翻译插件\n\n这是一个专为 MyBatis-Plus 文档项目设计的自动翻译插件,基于 AI 技术实现高质量的技术文档翻译。\n\n## 功能特性\n\n- 🌍 **多语言支持**: 支持英语、日语、韩语等多种目标语言\n- 🤖 **多 AI 提供商**: 基于 llm.js 支持 OpenAI、Claude、Google Gemini、Groq、Ollama、xAI、DeepSeek 等\n- 📝 **智能翻译**: 保持 Markdown 格式和代码块不变\n- 🔄 **增量翻译**: 只翻译修改过的文件,提高效率\n- 💾 **缓存机制**: 避免重复翻译,节省 API 调用\n- ⚡ **并行处理**: 支持多文件并行翻译\n- 🎯 **精确控制**: 可配置翻译的 frontmatter 字段\n- 📊 **进度显示**: 实时显示翻译进度和统计信息\n- 💰 **成本跟踪**: 实时显示 Token 使用量和成本信息\n\n## 安装依赖\n\n```bash\nnpm install\n```\n\n## 配置\n\n### 1. 基础配置\n\n编辑 `translation-plugin/config.json` 文件:\n\n```json\n{\n \"targetLanguages\": [\"en\", \"ja\"],\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"],\n \"aiProvider\": {\n \"type\": \"openai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gpt-4\"\n }\n}\n```\n\n### 2. 环境变量\n\n你也可以通过环境变量设置 API Key:\n\n```bash\n# 统一的 API 密钥环境变量(适用于所有 AI 服务)\nexport API_KEY=\"your-api-key\"\n```\n\n**注意:** \n- 环境变量的优先级低于配置文件中的 `apiKey` 设置\n- 所有 AI 服务统一使用 `API_KEY` 环境变量,具体服务类型通过配置文件中的 `service` 字段指定\n\n## 使用方法\n\n### 基本命令\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 预览模式(不实际写入文件)\nnpm run translate:check\n\n# 增量翻译(仅翻译修改过的文件)\nnpm run translate:incremental\n```\n\n### 高级用法\n\n```bash\n# 翻译指定文件\nnode scripts/translate.js --file introduce.mdx --lang en\n\n# 使用自定义配置文件\nnode scripts/translate.js --config ./custom-config.json\n\n# 组合使用\nnode scripts/translate.js --lang ja --incremental --dry-run\n```\n\n## 配置选项详解\n\n### 目标语言 (targetLanguages)\n\n支持的语言代码:\n- `en`: English\n- `ja`: Japanese (日本語)\n- `ko`: Korean (한국어)\n- `fr`: French (Français)\n- `de`: German (Deutsch)\n- `es`: Spanish (Español)\n- `pt`: Portuguese (Português)\n- `ru`: Russian (Русский)\n\n### Frontmatter 键 (frontmatterKeys)\n\n指定需要翻译的 frontmatter 字段:\n```json\n{\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"]\n}\n```\n\n### AI 提供商配置 (aiProvider)\n\n基于 [llm.js](https://llmjs.themaximalist.com/) 支持多种 AI 提供商:\n\n#### OpenAI\n```json\n{\n \"aiProvider\": {\n \"service\": \"openai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gpt-4\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Anthropic Claude\n```json\n{\n \"aiProvider\": {\n \"service\": \"anthropic\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"claude-3-sonnet-20240229\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Google Gemini\n```json\n{\n \"aiProvider\": {\n \"service\": \"google\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gemini-pro\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Groq (高速推理)\n```json\n{\n \"aiProvider\": {\n \"service\": \"groq\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"llama2-70b-4096\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### 本地模型 (Ollama)\n```json\n{\n \"aiProvider\": {\n \"service\": \"ollama\",\n \"model\": \"llama2\",\n \"baseURL\": \"http://localhost:11434\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### xAI Grok\n```json\n{\n \"aiProvider\": {\n \"service\": \"xai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"grok-beta\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### DeepSeek\n```json\n{\n \"aiProvider\": {\n \"service\": \"deepseek\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"deepseek-chat\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### OpenRouter (推荐)\n```json\n{\n \"aiProvider\": {\n \"service\": \"openrouter\",\n \"apiKey\": \"your-openrouter-api-key\",\n \"model\": \"anthropic/claude-3.5-sonnet\",\n \"baseURL\": \"https://openrouter.ai/api/v1\",\n \"maxTokens\": 8000,\n \"temperature\": 0.1\n }\n}\n```\n\n**OpenRouter 热门模型推荐:**\n- `anthropic/claude-3.5-sonnet` - 最佳质量,适合技术文档\n- `openai/gpt-4o` - OpenAI 最新模型\n- `meta-llama/llama-3.1-70b-instruct` - 开源高质量模型\n- `google/gemini-pro` - Google 模型\n- `anthropic/claude-3-haiku` - 快速且经济的选择\n\n**OpenRouter 优势:**\n- 🌟 统一接口访问多种顶级模型\n- 💰 透明的按使用量计费\n- 🚀 无需管理多个 API 密钥\n- 📊 详细的使用统计和成本跟踪\n- 🔄 模型间轻松切换\n\n### 缓存配置 (cache)\n\n```json\n{\n \"cache\": {\n \"enabled\": true,\n \"cacheDir\": \"translation-plugin/cache\"\n }\n}\n```\n\n### 并行处理配置 (parallel)\n\n```json\n{\n \"parallel\": {\n \"enabled\": true,\n \"maxConcurrency\": 3,\n \"segmentParallel\": false\n }\n}\n```\n\n**配置说明:**\n- `enabled`: 是否启用并行处理(文件级别)\n- `maxConcurrency`: 最大并发数,建议 2-5\n- `segmentParallel`: 是否对同一文档的段落使用并行翻译\n - `true`: 段落并行翻译,速度更快但可能影响上下文连贯性\n - `false`: 段落顺序翻译,保持上下文连贯性(推荐)\n\n### 分段配置 (segmentation)\n\n```json\n{\n \"segmentation\": {\n \"maxLength\": 8000,\n \"enabled\": true,\n \"maxHeadingLevel\": 3\n }\n}\n```\n\n**配置说明:**\n- `maxLength`: 单段最大长度,超过此长度会触发分段翻译\n- `enabled`: 是否启用智能分段翻译\n- `maxHeadingLevel`: 分段的最大标题级别\n - `1`: 只按 H1 (`#`) 分段\n - `2`: 按 H1-H2 (`#`, `##`) 分段\n - `3`: 按 H1-H3 (`#`, `##`, `###`) 分段(推荐)\n - `4-6`: 按更细粒度分段(可能导致段落过多)\n\n### 重试配置 (retryConfig)\n\n```json\n{\n \"retryConfig\": {\n \"maxRetries\": 3,\n \"retryDelay\": 1000\n }\n}\n```\n\n## 翻译规则\n\n插件会自动遵循以下翻译规则:\n\n1. **保持不变的内容**:\n - 代码块(```包围的内容)\n - 行内代码(`包围的内容)\n - MDX 导入语句\n - MDX 组件调用\n - URL 链接\n - 技术专有名词(MyBatis-Plus、Spring Boot 等)\n\n2. **翻译的内容**:\n - 指定的 frontmatter 字段\n - 正文文本内容\n - 保持 Markdown 格式\n\n3. **质量保证**:\n - 自动验证翻译结果格式\n - 检查代码块、链接数量一致性\n - 保持文档结构完整\n\n## 目录结构\n\n```\ntranslation-plugin/\n├── src/\n│ ├── config.js # 配置管理\n│ ├── file-processor.js # 文件处理器\n│ ├── prompt-template.js # Prompt 模板\n│ └── translator.js # 核心翻译器\n├── cache/ # 翻译缓存(自动生成)\n├── config.json # 配置文件\n└── README.md # 说明文档\n```\n\n## 故障排除\n\n### 常见问题\n\n1. **API Key 错误**\n ```\n 错误: OpenAI API Key 未配置\n ```\n 解决:设置环境变量或在配置文件中添加 API Key\n\n2. **文件权限错误**\n ```\n 错误: 文件写入失败\n ```\n 解决:检查目标目录的写入权限\n\n3. **网络连接问题**\n ```\n 错误: AI 调用失败\n ```\n 解决:检查网络连接,或配置代理\n\n### 调试模式\n\n使用 `--dry-run` 参数进行预览:\n\n```bash\nnpm run translate:check\n```\n\n这会显示将要翻译的文件列表,但不会实际执行翻译。\n\n## 贡献指南\n\n1. Fork 项目\n2. 创建功能分支\n3. 提交更改\n4. 发起 Pull Request\n\n## 许可证\n\n本项目采用 MIT 许可证。\n\n## 更新日志\n\n### v1.0.0\n- 初始版本发布\n- 支持 LLM API\n- 基础翻译功能\n- 缓存和增量翻译\n- 并行处理支持"}, "b0960a3529e8989f5500790817ba4efaf07b10bd": {"t": 1785764736.8250995, "n": 5133, "h": "3e86e3595d52acea", "c": "# MyBatis-Plus 文档翻译插件\n\n这是一个专为 MyBatis-Plus 文档项目设计的自动翻译插件,基于 AI 技术实现高质量的技术文档翻译。\n\n## 功能特性\n\n- 🌍 **多语言支持**: 支持英语、日语、韩语等多种目标语言\n- 🤖 **多 AI 提供商**: 基于 llm.js 支持 OpenAI、Claude、Google Gemini、Groq、Ollama、xAI、DeepSeek 等\n- 📝 **智能翻译**: 保持 Markdown 格式和代码块不变\n- 🔄 **增量翻译**: 只翻译修改过的文件,提高效率\n- 💾 **缓存机制**: 避免重复翻译,节省 API 调用\n- ⚡ **并行处理**: 支持多文件并行翻译\n- 🎯 **精确控制**: 可配置翻译的 frontmatter 字段\n- 📊 **进度显示**: 实时显示翻译进度和统计信息\n- 💰 **成本跟踪**: 实时显示 Token 使用量和成本信息\n\n## 安装依赖\n\n```bash\nnpm install\n```\n\n## 配置\n\n### 1. 基础配置\n\n编辑 `translation-plugin/config.json` 文件:\n\n```json\n{\n \"targetLanguages\": [\"en\", \"ja\"],\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"],\n \"aiProvider\": {\n \"type\": \"openai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gpt-4\"\n }\n}\n```\n\n### 2. 环境变量\n\n你也可以通过环境变量设置 API Key:\n\n```bash\n# 统一的 API 密钥环境变量(适用于所有 AI 服务)\nexport API_KEY=\"your-api-key\"\n```\n\n**注意:** \n- 环境变量的优先级低于配置文件中的 `apiKey` 设置\n- 所有 AI 服务统一使用 `API_KEY` 环境变量,具体服务类型通过配置文件中的 `service` 字段指定\n\n## 使用方法\n\n### 基本命令\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 预览模式(不实际写入文件)\nnpm run translate:check\n\n# 增量翻译(仅翻译修改过的文件)\nnpm run translate:incremental\n```\n\n### 高级用法\n\n```bash\n# 翻译指定文件\nnode scripts/translate.js --file introduce.mdx --lang en\n\n# 使用自定义配置文件\nnode scripts/translate.js --config ./custom-config.json\n\n# 组合使用\nnode scripts/translate.js --lang ja --incremental --dry-run\n```\n\n## 配置选项详解\n\n### 目标语言 (targetLanguages)\n\n支持的语言代码:\n- `en`: English\n- `ja`: Japanese (日本語)\n- `ko`: Korean (한국어)\n- `fr`: French (Français)\n- `de`: German (Deutsch)\n- `es`: Spanish (Español)\n- `pt`: Portuguese (Português)\n- `ru`: Russian (Русский)\n\n### Frontmatter 键 (frontmatterKeys)\n\n指定需要翻译的 frontmatter 字段:\n```json\n{\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"]\n}\n```\n\n### AI 提供商配置 (aiProvider)\n\n基于 [llm.js](https://llmjs.themaximalist.com/) 支持多种 AI 提供商:\n\n#### OpenAI\n```json\n{\n \"aiProvider\": {\n \"service\": \"openai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gpt-4\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Anthropic Claude\n```json\n{\n \"aiProvider\": {\n \"service\": \"anthropic\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"claude-3-sonnet-20240229\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Google Gemini\n```json\n{\n \"aiProvider\": {\n \"service\": \"google\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gemini-pro\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Groq (高速推理)\n```json\n{\n \"aiProvider\": {\n \"service\": \"groq\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"llama2-70b-4096\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### 本地模型 (Ollama)\n```json\n{\n \"aiProvider\": {\n \"service\": \"ollama\",\n \"model\": \"llama2\",\n \"baseURL\": \"http://localhost:11434\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### xAI Grok\n```json\n{\n \"aiProvider\": {\n \"service\": \"xai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"grok-beta\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### DeepSeek\n```json\n{\n \"aiProvider\": {\n \"service\": \"deepseek\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"deepseek-chat\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### OpenRouter (推荐)\n```json\n{\n \"aiProvider\": {\n \"service\": \"openrouter\",\n \"apiKey\": \"your-openrouter-api-key\",\n \"model\": \"anthropic/claude-3.5-sonnet\",\n \"baseURL\": \"https://openrouter.ai/api/v1\",\n \"maxTokens\": 8000,\n \"temperature\": 0.1\n }\n}\n```\n\n**OpenRouter 热门模型推荐:**\n- `anthropic/claude-3.5-sonnet` - 最佳质量,适合技术文档\n- `openai/gpt-4o` - OpenAI 最新模型\n- `meta-llama/llama-3.1-70b-instruct` - 开源高质量模型\n- `google/gemini-pro` - Google 模型\n- `anthropic/claude-3-haiku` - 快速且经济的选择\n\n**OpenRouter 优势:**\n- 🌟 统一接口访问多种顶级模型\n- 💰 透明的按使用量计费\n- 🚀 无需管理多个 API 密钥\n- 📊 详细的使用统计和成本跟踪\n- 🔄 模型间轻松切换\n\n### 缓存配置 (cache)\n\n```json\n{\n \"cache\": {\n \"enabled\": true,\n \"cacheDir\": \"translation-plugin/cache\"\n }\n}\n```\n\n### 并行处理配置 (parallel)\n\n```json\n{\n \"parallel\": {\n \"enabled\": true,\n \"maxConcurrency\": 3\n }\n}\n```\n\n### 重试配置 (retryConfig)\n\n```json\n{\n \"retryConfig\": {\n \"maxRetries\": 3,\n \"retryDelay\": 1000\n }\n}\n```\n\n## 翻译规则\n\n插件会自动遵循以下翻译规则:\n\n1. **保持不变的内容**:\n - 代码块(```包围的内容)\n - 行内代码(`包围的内容)\n - MDX 导入语句\n - MDX 组件调用\n - URL 链接\n - 技术专有名词(MyBatis-Plus、Spring Boot 等)\n\n2. **翻译的内容**:\n - 指定的 frontmatter 字段\n - 正文文本内容\n - 保持 Markdown 格式\n\n3. **质量保证**:\n - 自动验证翻译结果格式\n - 检查代码块、链接数量一致性\n - 保持文档结构完整\n\n## 目录结构\n\n```\ntranslation-plugin/\n├── src/\n│ ├── config.js # 配置管理\n│ ├── file-processor.js # 文件处理器\n│ ├── prompt-template.js # Prompt 模板\n│ └── translator.js # 核心翻译器\n├── cache/ # 翻译缓存(自动生成)\n├── config.json # 配置文件\n└── README.md # 说明文档\n```\n\n## 故障排除\n\n### 常见问题\n\n1. **API Key 错误**\n ```\n 错误: OpenAI API Key 未配置\n ```\n 解决:设置环境变量或在配置文件中添加 API Key\n\n2. **文件权限错误**\n ```\n 错误: 文件写入失败\n ```\n 解决:检查目标目录的写入权限\n\n3. **网络连接问题**\n ```\n 错误: AI 调用失败\n ```\n 解决:检查网络连接,或配置代理\n\n### 调试模式\n\n使用 `--dry-run` 参数进行预览:\n\n```bash\nnpm run translate:check\n```\n\n这会显示将要翻译的文件列表,但不会实际执行翻译。\n\n## 贡献指南\n\n1. Fork 项目\n2. 创建功能分支\n3. 提交更改\n4. 发起 Pull Request\n\n## 许可证\n\n本项目采用 MIT 许可证。\n\n## 更新日志\n\n### v1.0.0\n- 初始版本发布\n- 支持 LLM API\n- 基础翻译功能\n- 缓存和增量翻译\n- 并行处理支持"}, "f627083a69c12535a4d03c939a136bebb191481c": {"t": 1785764738.2372727, "n": 4423, "h": "06eee1ba265646fe", "c": "# MyBatis-Plus 文档翻译插件\n\n这是一个专为 MyBatis-Plus 文档项目设计的自动翻译插件,基于 AI 技术实现高质量的技术文档翻译。\n\n## 功能特性\n\n- 🌍 **多语言支持**: 支持英语、日语、韩语等多种目标语言\n- 🤖 **多 AI 提供商**: 基于 llm.js 支持 OpenAI、Claude、Google Gemini、Groq、Ollama、xAI、DeepSeek 等\n- 📝 **智能翻译**: 保持 Markdown 格式和代码块不变\n- 🔄 **增量翻译**: 只翻译修改过的文件,提高效率\n- 💾 **缓存机制**: 避免重复翻译,节省 API 调用\n- ⚡ **并行处理**: 支持多文件并行翻译\n- 🎯 **精确控制**: 可配置翻译的 frontmatter 字段\n- 📊 **进度显示**: 实时显示翻译进度和统计信息\n- 💰 **成本跟踪**: 实时显示 Token 使用量和成本信息\n\n## 安装依赖\n\n```bash\nnpm install\n```\n\n## 配置\n\n### 1. 基础配置\n\n编辑 `translation-plugin/config.json` 文件:\n\n```json\n{\n \"targetLanguages\": [\"en\", \"ja\"],\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"],\n \"aiProvider\": {\n \"type\": \"openai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gpt-4\"\n }\n}\n```\n\n### 2. 环境变量\n\n你也可以通过环境变量设置 API Key:\n\n```bash\nexport OPENAI_API_KEY=\"your-api-key\"\n```\n\n## 使用方法\n\n### 基本命令\n\n```bash\n# 翻译所有文档到所有配置的语言\nnpm run translate\n\n# 翻译到指定语言\nnpm run translate:en\nnpm run translate:ja\n\n# 预览模式(不实际写入文件)\nnpm run translate:check\n\n# 增量翻译(仅翻译修改过的文件)\nnpm run translate:incremental\n```\n\n### 高级用法\n\n```bash\n# 翻译指定文件\nnode scripts/translate.js --file introduce.mdx --lang en\n\n# 使用自定义配置文件\nnode scripts/translate.js --config ./custom-config.json\n\n# 组合使用\nnode scripts/translate.js --lang ja --incremental --dry-run\n```\n\n## 配置选项详解\n\n### 目标语言 (targetLanguages)\n\n支持的语言代码:\n- `en`: English\n- `ja`: Japanese (日本語)\n- `ko`: Korean (한국어)\n- `fr`: French (Français)\n- `de`: German (Deutsch)\n- `es`: Spanish (Español)\n- `pt`: Portuguese (Português)\n- `ru`: Russian (Русский)\n\n### Frontmatter 键 (frontmatterKeys)\n\n指定需要翻译的 frontmatter 字段:\n```json\n{\n \"frontmatterKeys\": [\"title\", \"description\", \"tagline\"]\n}\n```\n\n### AI 提供商配置 (aiProvider)\n\n基于 [llm.js](https://llmjs.themaximalist.com/) 支持多种 AI 提供商:\n\n#### OpenAI\n```json\n{\n \"aiProvider\": {\n \"service\": \"openai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gpt-4\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Anthropic Claude\n```json\n{\n \"aiProvider\": {\n \"service\": \"anthropic\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"claude-3-sonnet-20240229\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Google Gemini\n```json\n{\n \"aiProvider\": {\n \"service\": \"google\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"gemini-pro\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### Groq (高速推理)\n```json\n{\n \"aiProvider\": {\n \"service\": \"groq\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"llama2-70b-4096\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### 本地模型 (Ollama)\n```json\n{\n \"aiProvider\": {\n \"service\": \"ollama\",\n \"model\": \"llama2\",\n \"baseURL\": \"http://localhost:11434\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### xAI Grok\n```json\n{\n \"aiProvider\": {\n \"service\": \"xai\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"grok-beta\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n#### DeepSeek\n```json\n{\n \"aiProvider\": {\n \"service\": \"deepseek\",\n \"apiKey\": \"your-api-key\",\n \"model\": \"deepseek-chat\",\n \"maxTokens\": 4000,\n \"temperature\": 0.1\n }\n}\n```\n\n### 缓存配置 (cache)\n\n```json\n{\n \"cache\": {\n \"enabled\": true,\n \"cacheDir\": \"translation-plugin/cache\"\n }\n}\n```\n\n### 并行处理配置 (parallel)\n\n```json\n{\n \"parallel\": {\n \"enabled\": true,\n \"maxConcurrency\": 3\n }\n}\n```\n\n### 重试配置 (retryConfig)\n\n```json\n{\n \"retryConfig\": {\n \"maxRetries\": 3,\n \"retryDelay\": 1000\n }\n}\n```\n\n## 翻译规则\n\n插件会自动遵循以下翻译规则:\n\n1. **保持不变的内容**:\n - 代码块(```包围的内容)\n - 行内代码(`包围的内容)\n - MDX 导入语句\n - MDX 组件调用\n - URL 链接\n - 技术专有名词(MyBatis-Plus、Spring Boot 等)\n\n2. **翻译的内容**:\n - 指定的 frontmatter 字段\n - 正文文本内容\n - 保持 Markdown 格式\n\n3. **质量保证**:\n - 自动验证翻译结果格式\n - 检查代码块、链接数量一致性\n - 保持文档结构完整\n\n## 目录结构\n\n```\ntranslation-plugin/\n├── src/\n│ ├── config.js # 配置管理\n│ ├── file-processor.js # 文件处理器\n│ ├── prompt-template.js # Prompt 模板\n│ └── translator.js # 核心翻译器\n├── cache/ # 翻译缓存(自动生成)\n├── config.json # 配置文件\n└── README.md # 说明文档\n```\n\n## 故障排除\n\n### 常见问题\n\n1. **API Key 错误**\n ```\n 错误: OpenAI API Key 未配置\n ```\n 解决:设置环境变量或在配置文件中添加 API Key\n\n2. **文件权限错误**\n ```\n 错误: 文件写入失败\n ```\n 解决:检查目标目录的写入权限\n\n3. **网络连接问题**\n ```\n 错误: AI 调用失败\n ```\n 解决:检查网络连接,或配置代理\n\n### 调试模式\n\n使用 `--dry-run` 参数进行预览:\n\n```bash\nnpm run translate:check\n```\n\n这会显示将要翻译的文件列表,但不会实际执行翻译。\n\n## 贡献指南\n\n1. Fork 项目\n2. 创建功能分支\n3. 提交更改\n4. 发起 Pull Request\n\n## 许可证\n\n本项目采用 MIT 许可证。\n\n## 更新日志\n\n### v1.0.0\n- 初始版本发布\n- 支持 OpenAI API\n- 基础翻译功能\n- 缓存和增量翻译\n- 并行处理支持"}}}}