Files

1 line
84 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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 <path> # 配置文件路径(默认: ./translation-plugin/config.json)\n--quiet, -q # 静默模式,只输出错误信息\n--verbose, -v # 详细模式,输出调试信息\n--debug # 调试模式,输出所有日志\n--json # 以 JSON 格式输出结果\n--no-color # 禁用颜色输出\n--log-file <path> # 日志文件路径\n\n# 翻译选项\n--lang, -l <lang> # 指定目标语言\n--file, -f <file> # 指定翻译文件\n--incremental, -i # 增量翻译\n--dry-run, -d # 预览模式\n--yes, -y # 跳过确认提示\n--continue-on-error # 遇到错误继续执行\n--retry <times> # 失败时重试次数\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 <path> # 配置文件路径(默认: ./translation-plugin/config.json)\n--quiet, -q # 静默模式,只输出错误信息\n--verbose, -v # 详细模式,输出调试信息\n--debug # 调试模式,输出所有日志\n--json # 以 JSON 格式输出结果\n--no-color # 禁用颜色输出\n--log-file <path> # 日志文件路径\n\n# 翻译选项\n--lang, -l <lang> # 指定目标语言\n--file, -f <file> # 指定翻译文件\n--incremental, -i # 增量翻译\n--dry-run, -d # 预览模式\n--yes, -y # 跳过确认提示\n--continue-on-error # 遇到错误继续执行\n--retry <times> # 失败时重试次数\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- 并行处理支持"}}}}