首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何翻译Markdown文件?-2-几种商业及开源解决方案介绍

如何翻译Markdown文件?-2-几种商业及开源解决方案介绍

作者头像
东风微鸣
发布2023-09-01 16:43:24
发布2023-09-01 16:43:24
9951
举报

背景

近期在搭建英文博客-<e-whisper.com>, 需要对现有的所有中文Markdown翻译为英文.

需求如下:

•将 Markdown 文件从中文(zh-CN)翻译为英文(en)•翻译后要保留 Markdown 的完整格式•部分 Markdown block 不需要翻译, 如: front-matter、代码块 等

但是实际使用中,试了好几款翻译(包括 Google,DeepL,Azure), 结果发现效果都不理想.

也找到了一些专门针对 markdown 的翻译方案, 基本上都是这种方案: 将 Markdown 拆分为"段".

一起看看吧.

Markdown 商业及开源解决方案

•simpleen[1]: 商业版•GT4T[2]: 商业版•markdown-translator[3]: GitHub 开源项目, 基于 JavaScript 和 Azure Translate 收费 API•Markdown Docs Translator[4]: GitHub 开源项目, 基于 Python 和 主流免费翻译 API (Yandex/Google/Bing/Deepl)•ChatGPT + Prompt(markdown+翻译) ?

Simpleen

Simpleen 是个在线翻译服务, 你可以通过不同的方式使用 Simpleen 来翻译和本地化你的软件: 使用在线 web 翻译器,在本地使用 CLI(连续翻译)或通过API自定义使用。其后端是调用 Deppl 的翻译服务.

以下是使用其翻译的效果:

Simpleen 翻译效果

可以看到, 翻译除了将[toc] 翻译为 \[toc] 之外, 其他都完全准确.

另外上图也可以看到, Simpleen 定位非常准确, 就是针对开发者群体的, 还有 Variable 相关功能.

Simpleen 一大特色功能是: Custom Translator, 如:

•Python-i18n•Vue I18n•YAML•JSON•Markdown•...

同时 Simpleen 也支持自定义词库功能, 称为: Glossaries. 可以自定义个人词库.

Simpleen 就是将完整的 markdown 文档, 按照 markdown 语法格式, 将其拆分为一个个的 Segment. 并对每一个 Segment 进行翻译, 如下:

Simpleen Segments

通过 Segments 也可以看出, Simpleen 是将上篇提到的 2 种方法结合起来实现:

1.将 Markdown 转换为 html2.将 html 拆分为 Segments3.将 Segment 逐一翻译4.将翻译后的 Segment html 转换为 markdown.

Simpleen 使用总结

优点:

•准确度高•实用的特色功能: Custom Translator•实用的特色功能: Variable 支持•实用的特色功能: Glossaries•底层基于 Deepl, Deepl 的翻译效果是最自然的.•多种使用方式: web/api/cli

缺点:

•贵, 基于 Segment 收费, 价格也贵的厉害.•最便宜的月费也得 $15, 并且只有 1,000 Text Segments

Simpleen Price

GT4T

📝Reference: GT4T不只是又一个翻译应用。它是一个超级插件,可以帮助你在任何 Windows/Mac 窗口中使用任何语言写作;也是一个超级文件翻译器,你可以不用上传,在你自己的电脑上翻译文件。

官方宣传其特色功能有:

•超级插件: 运行在29个自动翻译引擎之上。无论哪个语言,GT4T总是能为你提供最好的自动翻译。•GT4T文件翻译器: GT4T文件翻译器可以批量翻译文件。GT4T可以处理包括Office或桌面出版文档在内的20种文件类型。而且如果你从事翻译业务并使用CAT工具,你也可以使用GT4T来翻译Trados或其他CAT项目。也有自己的词汇表.

其在Translate Markdown/reStructuredText/AsciiDoc/DocBook XML and other documents [5] 这里宣称可以翻译 Markdown, 具体步骤也很详细, 这里就不展开了.

但是我在实际使用中, 一方面发现它是个桌面app, 没有api/cli, 不适合开发者的使用需求, 另一方面它对 markdown 的翻译结果相比 Simpleen 准确度欠佳.

markdown-translator

使用 Azure 文本翻译 API 直接翻译 Markdown 文件

其使用的前提条件是: 从Azure 服务[6]获取文本翻译 API 密钥

主要是通过 CLI 的方式使用:

代码语言:javascript
复制
# install cli
npm install markdown-translator -g

# set key from Azure Text Translate API
md-translator set --key <your key>
md-translator set --region <your region>

# do translate
md-translator translate --src README.md --dest README.zh.md --to zh

# get more information
md-translator --help

也可以通过模块方式使用:

代码语言:javascript
复制
# install module
npm install markdown-translator
代码语言:javascript
复制
const markdownTranslate = require('markdown-translator')
markdownTranslate({
  src,
  // 要么
  text,

  from,
  to,
  subscriptionKey,
}).then((res) => {
  // deal with result
})

目前我的英文站: https://e-whisper.com/ 就是完全基于这种方式翻译的. 大家可以去访问看一下, 评价一下翻译效果怎么样.

它的实现方案也是: 将 markdown 文档拆分为"段", 再进行翻译.

后端调用的是 Azure https://api.cognitive.microsofttranslator.com/ 的 3.0 的文本翻译接口.

另外 Azure 也直接支持 Markdown 文档 翻译功能. 但是价格比文本翻译略贵.

以下是我的一些感受:

优点:

•基于 Azure Translate API, 将markdown 拆分为"段"后调用一次 API 获取完整翻译结果, 价格可接受•翻译后 Markdown 格式基本没有错误.•CLI 的方案结合一些脚本, 可以实现批量翻译, 效率很高.

比如很简单的一个脚本, 实现批量翻译:

代码语言:javascript
复制
#!/bin/bash

# 遍历指定目录下的所有文件
for MD in source/_posts/*; do
    echo "------Translating ${MD}------"
    md-translator translate --from zh-CN --to en --src ${MD} --dest ${MD} 2>&1 >>logs/md-translator.log
done

缺点:

•基于 Azure Translate API, 我个人感觉 Azure 的翻译效果没有 Deppl 的好.•Markdown 内嵌的一些 front-matter 等, 翻译还是存在问题. 建议翻译前先将 front-matter 拿掉.•可能还是 Azure Translate API 的问题, 对同一个词汇前后会出现好多不同版本的翻译后词汇(没有自定义词汇表导致的), 另外上下文也不是特别连贯.

目前的个人感受是基本可用, 但是还是有一些特殊需求无法满足, 后续我可能会尝试直接使用 Azure 最新提供的 Python SDK[7] 进行开发定制.

Markdown Docs Translator

Markdown Docs Translator 是一个 Markdown 文档的自动翻译器,用 Python 构建。该工具支持多种翻译服务,并提供各种选项来定制翻译过程。

功能:

•支持多种翻译服务(Yandex, Google, Bing, Deepl)。•多线程以加快翻译速度。•覆盖原始文件、删除原始文件或用翻译文本创建一个新文件的选项。•缓存以加快重复翻译。•动词水平控制。

具体使用方法也是先安装再通过 CLI 使用:

代码语言:javascript
复制
pipx install md-translate
代码语言:javascript
复制
md-translate path_to_file_or_folder -F source_lang -T target_lang -P service [OPTIONS]

之前, 我试用了好多次, 都没有成功, 可能是跟它使用的是翻译的免费接口有关, 容易被封, 无法提供稳定的服务.

最近看了一下, 它已经改为基于 selenium 模拟浏览器的行为去访问, 可能会好一些. 后续有机会试试.

另外它的代码结构也很清晰明了, 后续也仔细学习一下它的源码.

ChatGPT + Prompt ?

这应该也是一种思路, 利用 ChatGPT 的强大能力. 但是关键点在于如何提供有效的 Prompt, Prompt 可能是要强调 Markdown 语法, 并利用 ChatGPT 出众的上下文理解和自然语言翻译能力给出翻译结果.

甚至还可以利用 ChatGPT 已有的能力, 对文章进行进一步的润色、补充、语气调整等。

未来可期。

不过可能大量翻译的话,API 调用费用会贵上不少吧?

总结

本文很浅显地总结了一些我收集到的 markdown 文档的翻译方案.

主要是基于: 将 Markdown 拆分为"段" 的思路.

或者是: 将 Markdown 拆分为"段" 和 将 Markdown 翻译为 HTML 二者结合起来.

这里我了解了 4 种:

•simpleen[8]: 商业版•GT4T[9]: 商业版•markdown-translator[10]: GitHub 开源项目, 基于 JavaScript 和 Azure Translate 收费 API•Markdown Docs Translator[11]: GitHub 开源项目, 基于 Python 和 主流免费翻译 API (Yandex/Google/Bing/Deepl)

相关方案肯定很多, 笔者由于精力和时间所限, 无法一一列举. 欢迎各位补充~

同时也结合近期 ChatGPT 的爆火,提出用 ChatGPT 翻译 markdown 的可能性.

希望对您有所帮助.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • Markdown 商业及开源解决方案
    • Simpleen
      • Simpleen 使用总结
    • GT4T
    • markdown-translator
    • Markdown Docs Translator
    • ChatGPT + Prompt ?
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档