rockbenben/md-translator
GitHub: rockbenben/md-translator
一款纯浏览器端运行的 Markdown 翻译工具,通过占位符策略在翻译时无损保留代码块、LaTeX 公式、链接等格式,支持对接 25+ 种翻译引擎。
Stars: 58 | Forks: 15
⚡️ Markdown 翻译器
English | 中文
翻译 Markdown 并保留所有格式 — 标题、代码、公式,一切完好无损
**MD Translator** 解决了 Markdown 翻译中令人头疼的格式破坏问题。它提供高质量翻译的同时,能精准保留每一个 Markdown 结构 — 代码块、LaTeX 公式、FrontMatter 元数据、链接和强调样式都能保持原样。支持连接 7 个传统翻译 API(DeepL、Google、Azure、DeepLX、Qwen-MT、TranslateGemma、GTX)或 17+ 家 LLM 供应商 — 总计 25+ 种引擎 — 并可同时翻译成 120+ 种语言。所有操作均在浏览器本地运行:你的源文件永远不会离开你的设备,API 密钥也只存储在本地。
👉 **在线体验**:

## 核心功能
- **保留格式**:将 FrontMatter、代码块、LaTeX、链接、图片路径、标题、列表、引用块和 HTML/JSX 标签标记化为占位符;翻译后无损还原。
- **原生 Markdown 支持**:仅翻译正文内容;标题、列表、代码块、链接、强调和 LaTeX 保持字节级完美。完全支持 CommonMark + GFM(表格、任务列表、删除线),以及对 MDX 和 Astro 组件的不透明块处理。
- **纯文本模式**:开启“忽略格式”可跳过对纯文本输入(TXT、HTML、日志)的格式解析 — 当 Markdown 分词器过度保护时,或者当你想逐字翻译复杂的 MDX 时非常有用。
- **批量文件上传**:拖入整个 `docs/` 目录,一键翻译所有文件 — 每个翻译后的文件单独导出,可直接放回 Hugo、Jekyll、Hexo、VitePress 或 Docusaurus 的 i18n 文件夹中。
- **多语言输出**:一次性翻译成 120+ 种语言 — 每种语言导出为独立文件。
- **结合上下文翻译**(仅限 LLM):包含周围段落作为上下文,以获得更好的连贯性和术语一致性。自定义系统/用户提示词让你锁定术语和风格。
- **RTL 语言支持**:自动检测并调整 RTL(从右到左)语言的文本方向,如阿拉伯语、希伯来语、乌尔都语和波斯语。
- **无限缓存**(IndexedDB):所有翻译在本地缓存,没有浏览器存储大小限制。
- **文本提取**:剥离 Markdown 语法,清理出纯文本,用于摘要、NLP 或搜索索引。
- **本地运行 / 隐私优先**:所有读取、解析和翻译都在你的浏览器中进行。LLM 请求直接从你的浏览器发送到你配置的 endpoint;源内容永远不会触及我们的服务器,API 密钥仅存在于本地存储中。
- **多语言 UI**:由 next-intl 驱动,提供跨越 18 种语言的完整 UI 翻译。
## 支持的 Markdown 元素
| 元素 | 语法 | 受保护 |
| ------------------------------ | --------------------------------- | --------- |
| FrontMatter 元数据 | `---` 块 | 可选 |
| 标题 | `#` … `######` | ✅ |
| 列表 / 任务列表 | `-` / `*` / `1.` / `- [ ]` | ✅ |
| 表格 | `\| col \| col \|` | ✅ |
| 引用块 | `> quote` | ✅ |
| 链接和图片路径 | `[text](url)`, `` | ✅ |
| 强调 | `**bold**`, `_italic_`, `~~del~~` | 行内 |
| 代码块 / 行内代码 | ` ``` ` 和 `` ` `` | 可选 |
| 行内 / 块级 LaTeX | `$formula$`, `$$formula$$` | 可选 |
| HTML / JSX 及 MDX 组件 | ``, `
`, `` | ✅ |
FrontMatter、代码块和 LaTeX 公式可以被翻译或保持原样 — 每一个都是独立的开关。MDX 和 Astro 组件标签作为不透明块受到保护,而它们之间的纯文本会被正常翻译。
## 翻译 API
支持 **7 个传统 MT API** 和 **17+ 家 LLM 供应商**:
### 传统 API
| API | 质量 | 稳定性 | 免费额度 |
| -------------------- | ------- | --------- | ------------------------------------- |
| **DeepL** | ★★★★★ | ★★★★☆ | 每月 50 万字符 |
| **Google Translate** | ★★★★☆ | ★★★★★ | 每月 50 万字符 |
| **Azure Translate** | ★★★★☆ | ★★★★★ | 每月 200 万字符(前 12 个月) |
| **DeepLX (Free)** | ★★★★☆ | ★★★☆☆ | 自托管或免费公共 endpoint |
| **Qwen-MT** | ★★★★☆ | ★★★★☆ | Alibaba DashScope 配额 |
| **TranslateGemma** | ★★★★☆ | ★★★★☆ | 自托管(LM Studio / Ollama / 等) |
| **GTX API (Free)** | ★★★☆☆ | ★★★☆☆ | 免费(有速率限制) |
### LLM 供应商
支持 **DeepSeek**、**OpenAI**、**Claude**、**Gemini**、**Qwen**、**Moonshot**、**Doubao**、**Zhipu GLM**、**MiniMax**、**Mistral**、**Perplexity**、**Cohere**、**OpenRouter**、**Groq**、**SiliconFlow**、**Nvidia NIM**、**Azure OpenAI**,以及任何**自定义(兼容 OpenAI)**的 endpoint(Ollama / LM Studio / vLLM / Together AI / Fireworks AI 等)。每个供应商都有可配置的模型列表、temperature、系统/用户提示词,以及单次请求的 thinking-mode 开关。
## 结合上下文翻译(仅限 LLM)
LLM 模式可以发送周围行作为每批的上下文,从而提高段落级别的连贯性和术语一致性。
- **并发行数**:并行翻译的最大行数(默认为 20)。设置过高会触发速率限制。
- **上下文行数**:每批包含的上下文行数(默认为 50)。越高 = 连贯性越好,但消耗的 token 越多。
⚠️ **注意事项**:Markdown 非常复杂 — 开启上下文模式可能会略微增加格式出错的风险(未闭合的代码块、列表缩进偏移)。请抽查输出结果,特别是对于具有深层嵌套结构的文档。
## 用例
- 📚 批量翻译多语言技术文档
- 🌐 开源项目文档的 i18n(VitePress / Docusaurus `i18n.locales`)
- 📄 将 GitHub README 或整个文档站点本地化,然后将文件直接放回源码树
- ✍️ Markdown 双语博客内容同步(Hugo / Jekyll / Hexo)
- 🧮 对混合内容(文本 + 代码 + 公式)进行保留格式的翻译
- 🔍 将 Markdown 剥离为纯文本,用于摘要 / NLP / 搜索索引
## 常见问题
**技术文档应该使用哪个引擎?**
强烈推荐使用 AI/LLM — 模型能够在上下文中识别库名、函数名和变量名,而不会错误地翻译它们。Claude Sonnet 在 API 文档术语准确性方面处于领先地位,DeepSeek 提供出色的性价比,而 Gemini 凭借其长上下文特性非常适合书籍长度的文档。传统机器翻译最好留作快速预览使用。
**代码块和公式是如何保持原样的?**
采用占位符保护策略:在翻译之前,将代码围栏、行内代码、LaTeX(`$...$`, `$$...$$`)、链接 URL、图片路径和 HTML/JSX 标签替换为占位符(例如 `<<>>`),然后逐字还原。默认会跳过 FrontMatter;单独的开关用于控制 FrontMatter、代码块、LaTeX 和链接文本。
**它支持 GFM、MDX 或 Astro 吗?**
完全支持标准的 CommonMark 和 GFM(表格、任务列表、删除线、围栏代码)。对于 MDX 和 Astro,组件标签被视为不透明块,而它们之间的纯文本内容会被翻译;开启“忽略格式”可将复杂的 MDX 作为纯文本翻译。
**我的内容会被上传到服务器吗?**
不会。读取、解析和翻译全部在客户端运行。LLM 请求直接从你的浏览器发送到你配置的 API endpoint,并且 API 密钥仅存储在本地浏览器存储中。翻译缓存使用 IndexedDB。
**字幕或 JSON 配置文件怎么办?**
使用配套工具 — 字幕翻译器(SRT/ASS/VTT/LRC)和 JSON 翻译器(i18next / next-intl / vue-i18n) — 它们共享相同的引擎配置和 API 密钥,因此无需重新设置。
## 技术栈
- **框架**:[Next.js 16](https://nextjs.org/)(App Router)+ React 19(使用 React Compiler)
- **UI**:[Ant Design 6](https://ant.design/) + [Tailwind CSS 4](https://tailwindcss.com/)
- **i18n**:[next-intl](https://next-intl-docs.vercel.app/)
- **缓存**:[idb](https://github.com/jakearchibald/idb)(IndexedDB)
- **测试**:[Vitest](https://vitest.dev/) — `restorePlaceholders` 和其他占位符工具均附带单元测试
## 快速开始
### 环境要求
- Node.js >= 20.9.0
- Yarn(推荐)、npm 或 pnpm
### 安装与运行
```
git clone https://github.com/rockbenben/md-translator.git
cd md-translator
yarn install
yarn dev
```
访问 [http://localhost:3000](http://localhost:3000)。
### 生产构建
```
yarn build
```
## 文档与部署
有关详细的配置、API 设置和自托管说明,请参阅 **[官方文档](https://docs.newzone.top/en/guide/translation/md-translator/)**。
**快速部署**:[部署指南](https://docs.newzone.top/en/guide/translation/md-translator/deploy.html)
## 贡献
欢迎任何贡献!随时欢迎提交 issue 和 pull request。
1. Fork 本仓库并创建一个功能分支
2. 在本地运行 `yarn` 和 `yarn dev`
3. 视情况添加测试 / 文档
4. 提交带有清晰描述的 PR
## 许可证
MIT © 2025 [rockbenben](https://github.com/rockbenben)。另请参阅 [LICENSE](./LICENSE)。标签:DLL 劫持, Markdown, 前端, 大语言模型, 文档工具, 翻译工具, 自动化攻击