rockbenben/md-translator

GitHub: rockbenben/md-translator

一款纯浏览器端运行的 Markdown 翻译工具,通过占位符策略在翻译时无损保留代码块、LaTeX 公式、链接等格式,支持对接 25+ 种翻译引擎。

Stars: 58 | Forks: 15

⚡️ Markdown 翻译器

English | 中文

翻译 Markdown 并保留所有格式 — 标题、代码、公式,一切完好无损

License: MIT Live Demo

**MD Translator** 解决了 Markdown 翻译中令人头疼的格式破坏问题。它提供高质量翻译的同时,能精准保留每一个 Markdown 结构 — 代码块、LaTeX 公式、FrontMatter 元数据、链接和强调样式都能保持原样。支持连接 7 个传统翻译 API(DeepL、Google、Azure、DeepLX、Qwen-MT、TranslateGemma、GTX)或 17+ 家 LLM 供应商 — 总计 25+ 种引擎 — 并可同时翻译成 120+ 种语言。所有操作均在浏览器本地运行:你的源文件永远不会离开你的设备,API 密钥也只存储在本地。 👉 **在线体验**: ![MD Translator 界面](./public/img/md-translator-en.webp "MD Translator 界面") ## 核心功能 - **保留格式**:将 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)`, `![alt](https://raw.githubusercontent.com/rockbenben/md-translator/main/path)` | ✅ | | 强调 | `**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, 前端, 大语言模型, 文档工具, 翻译工具, 自动化攻击