如何用deepl-node在多语言翻译中稳定保留Markdown格式?
解决方案
针对你遇到的DeepL翻译时Markdown格式错乱问题,可以通过以下几个关键配置和处理步骤来解决:
1. 启用DeepL的格式保留参数
在调用deepl-node的翻译接口时,务必开启preserve_formatting参数,它会告诉DeepL保留输入中的粗体、列表符号等格式标记。同时结合XML标签处理配置,确保只翻译指定标签内的内容:
const { Translator } = require('deepl-node'); const translator = new Translator('你的认证密钥'); async function translateTargetTags(xmlContent, targetLang) { const translationResult = await translator.translateText( xmlContent, null, // 自动检测源语言 targetLang, { tag_handling: 'xml', target_tags: ['text', 'title'], // 指定仅翻译这两个标签内的内容 preserve_formatting: true, // 核心:保留格式标记 split_sentences: 'nonewlines', // 禁止按换行拆分句子,避免破坏列表结构 } ); return translationResult.text; }
2. 确保输入的Markdown格式规范
格式错乱的部分原因可能是输入的Markdown不符合标准:
- 无序列表必须每个项单独占一行:
而非同一行的* One * Two * Three* One * Two * Three,后者DeepL无法正确识别为列表结构。 - 粗体、斜体标记必须成对出现,避免不闭合的符号(如
**bold text)。
3. 针对特殊语言的额外配置
部分语言(如德语、法语)对格式符号的处理逻辑略有差异,可尝试添加以下参数优化:
- 设置
outline_detection: false,防止DeepL将列表误判为文档大纲而修改格式; - 若仍有粗体符号错乱,可在翻译后做简单的格式修复,比如用正则替换多余的符号:
// 修复粗体符号错乱的示例 function fixBoldFormat(text) { return text.replace(/\*\*\*(.*?)__/g, '**$1**'); }
4. 多语言测试与校验
针对目标语言(如英语、西班牙语、日语等)逐一测试,验证格式一致性。可以编写简单的校验脚本,检查翻译后的内容:
- 粗体标记
**是否成对; - 无序列表项是否都以
*开头; - 其他格式标记(如斜体、链接)是否完整保留。
内容的提问来源于stack exchange,提问作者Daniel Corona
相关产品推荐
相关产品推荐

