如何翻译 Markdown 文件?-2-几种商业及开源解决方案介绍
背景
近期在搭建英文博客-<e-whisper.com>, 需要对现有的所有中文 Markdown 翻译为英文。
需求如下:
- 将 Markdown 文件从中文 (zh-CN) 翻译为英文 (en)
- 翻译后要保留 Markdown 的完整格式
- 部分 Markdown block 不需要翻译,如:front-matter、代码块 等
但是实际使用中,试了好几款翻译(包括 Google,DeepL,Azure), 结果发现效果都不理想。
也找到了一些专门针对 markdown 的翻译方案,基本上都是这种方案:将 Markdown 拆分为"段".
一起看看吧。
Markdown 商业及开源解决方案
- simpleen: 商业版
- GT4T: 商业版
- markdown-translator: GitHub 开源项目,基于 JavaScript 和 Azure Translate 收费 API
- Markdown Docs Translator: GitHub 开源项目,基于 Python 和 主流免费翻译 API (Yandex/Google/Bing/Deepl)
- ChatGPT + Prompt(markdown+翻译) ?
Simpleen
Simpleen 是个在线翻译服务,你可以通过不同的方式使用 Simpleen 来翻译和本地化你的软件:
使用在线 web 翻译器,在本地使用 CLI(连续翻译)或通过 API 自定义使用。其后端是调用 Deppl 的翻译服务。
以下是使用其翻译的效果:
可以看到,翻译除了将[toc]
翻译为 \[toc]
之外,其他都完全准确。
另外上图也可以看到,Simpleen 定位非常准确,就是针对开发者群体的,还有 Variable 相关功能。
Simpleen 一大特色功能是:Custom Translator, 如:
- Python-i18n
- Vue I18n
- YAML
- JSON
- Markdown
- ...
同时 Simpleen 也支持自定义词库功能,称为:Glossaries. 可以自定义个人词库。
Simpleen 就是将完整的 markdown 文档,按照 markdown 语法格式,将其拆分为一个个的 Segment. 并对每一个 Segment 进行翻译,如下:
通过 Segments 也可以看出,Simpleen 是将上篇提到的 2 种方法结合起来实现:
- 将 Markdown 转换为 html
- 将 html 拆分为 Segments
- 将 Segment 逐一翻译
- 将翻译后的 Segment html 转换为 markdown.
Simpleen 使用总结
优点:
- 准确度高
- 实用的特色功能:Custom Translator
- 实用的特色功能:Variable 支持
- 实用的特色功能:Glossaries
- 底层基于 Deepl, Deepl 的翻译效果是最自然的。
- 多种使用方式:web/api/cli
缺点:
- 贵,基于 Segment 收费,价格也贵的厉害。
- 最便宜的月费也得 $15, 并且只有 1,000 Text Segments
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 这里宣称可以翻译 Markdown, 具体步骤也很详细,这里就不展开了。
但是我在实际使用中,一方面发现它是个桌面 app, 没有 api/cli, 不适合开发者的使用需求,另一方面它对 markdown 的翻译结果相比 Simpleen 准确度欠佳。
markdown-translator
使用 Azure 文本翻译 API 直接翻译 Markdown 文件
其使用的前提条件是:从 Azure 服务 获取文本翻译 API 密钥
主要是通过 CLI 的方式使用:
# 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
也可以通过模块方式使用:
# install module
npm install markdown-translator
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 的方案结合一些脚本,可以实现批量翻译,效率很高。
比如很简单的一个脚本,实现批量翻译:
#!/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 进行开发定制。
Markdown Docs Translator
Markdown Docs Translator 是一个 Markdown 文档的自动翻译器,用 Python 构建。该工具支持多种翻译服务,并提供各种选项来定制翻译过程。
功能:
- 支持多种翻译服务(Yandex, Google, Bing, Deepl)。
- 多线程以加快翻译速度。
- 覆盖原始文件、删除原始文件或用翻译文本创建一个新文件的选项。
- 缓存以加快重复翻译。
- 动词水平控制。
具体使用方法也是先安装再通过 CLI 使用:
pipx install md-translate
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: 商业版
- GT4T: 商业版
- markdown-translator: GitHub 开源项目,基于 JavaScript 和 Azure Translate 收费 API
- Markdown Docs Translator: GitHub 开源项目,基于 Python 和 主流免费翻译 API (Yandex/Google/Bing/Deepl)
相关方案肯定很多,笔者由于精力和时间所限,无法一一列举。欢迎各位补充~
同时也结合近期 ChatGPT 的爆火,提出用 ChatGPT 翻译 markdown 的可能性。
希望对您有所帮助。
如何翻译 Markdown 文件?-2-几种商业及开源解决方案介绍的更多相关文章
- 初遇Git与MarkDown 文件
新年好! 昨晚熬夜在学Git,稍微会了一些命令. 推荐大家去try.github.io上学习,这是GitHub提供的网页,它在网页提供了一个“伪”模拟器,根据网页的提示学习命令.网页上说15分钟就能学 ...
- .md即markdown文件的基本常用编写语法(图文并茂)
序言: 很久没有写博客了,感觉只要是不写博客,人就很变得很懒,学的知识点感觉还是记不住,渐渐地让我明白,看的越多,懂的越少(你这话不是有毛病吗?应该是看的越多,懂的越多才对),此话怎讲,当你在茫茫的前 ...
- 为Markdown文件生成目录
缘由 思路 效果 代码实现 缘由 Markdown源生文件源生不支持目录,目前比较主流的生成目录的方式(各式插件),都是转化为HTML文件.虽然HTML文件可以生成眼花缭乱的目录,但是修改起来又没有M ...
- .md即markdown文件的基本常用编写语法
因为现在的前端基本上都用上了前端构建工具,那就难免要写一些readme等等的说明性文件,但是这样的文件一般都是.md的文件,编写的语法自然跟其他格式的文件有所区别,本文也是我学习写markdown文件 ...
- 转 .md即markdown文件的基本常用编写语法(图文并茂)
原文链接:.md即markdown文件的基本常用编写语法(图文并茂) 序言: 很久没有写博客了,感觉只要是不写博客,人就很变得很懒,学的知识点感觉还是记不住,渐渐地让我明白,看的越多,懂的越少(你这话 ...
- Markdown文件导出为HTML的小程序
Markdown文件导出为HTML的小程序 为什么做 最近把一些学习经验记下来,总结成MarkDown文件,不知不觉已经有12篇了. Sublime Text 的 MarkDown Preview 插 ...
- jsp:jsp包含文件的两种方式
第一种:include指令 include指令:当JSP转换成Servlet时引入指定文件(指令元素),这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件 ...
- markdown文件的基本常用编写语法
.md即markdown文件 1.标题的几种写法: 第一种: 前面带#号,后面带文字,分别表示h1-h6,上图可以看出,只到h6,而且h1下面会有一条横线,注意,#号后面有空格 第二种: ...
- .md 即 markdown 文件的基本常用编写语法
0. 前言 Markdown 是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式.现在的项目都使用了 git 仓库,再加上远程仓库 github 托管,那就难免要写一些 ...
- Linux下文件的七种类型
文件属性 1. 本章引言 上一章通过学习文件io,知道了如何使用文件io来打开文件,对文件进行读写等操作,那么我们这一章将换一个角度,专门围绕文件属性进行相关的讨论. 1.1 什么是文件属性? 我们通 ...
随机推荐
- 【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误
问题描述 在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端的文档中操作 "在开发人员门户中启用 OAuth 2.0 用户授权&qu ...
- Redisson 框架中的分布式锁
实现分布式锁通常有三种方式:数据库.Redis 和 Zookeeper.我们比较常用的是通过 Redis 和 Zookeeper 实现分布式锁.Redisson 框架中封装了通过 Redis 实现的分 ...
- STL-RBTree模拟实现
#pragma once #include<assert.h> #include<iostream> using std::cout; using std::endl; usi ...
- Shell脚本自动下载FTP文件上传到S3
1. shell脚本下载 #!/bin/bash #用户名 USER=xxx #密码 PASSWORD=xxx #下载文件临时目录 SRCTDIR=/approveform/uat/tempin #S ...
- java线程池知识整理
参考,欢迎点击原文:https://www.jianshu.com/p/246021d04310(java多线程那点事) https://blog.csdn.net/fanrenxiang/artic ...
- 反编译和逆向出现:java.lang.VerifyError(新问题样本)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间
自古以来,人们对理想世界的探索从未停止,而最近元宇宙的热潮加速了这一步伐,带来了许多新的应用.作为元宇宙的关键入口,虚拟现实(VR)将成为连接虚拟和现实的桥梁.苹果发布的VISION PRO头戴设备将 ...
- 首届实时渲染3D动画创作大赛结果公布,看大奖英伟达A6000花落谁家!
根据评选标准,经过评委组层层选拔,首届实时渲染3D动画创作大赛,最终获奖结果出炉啦. 本次赛事报名人数达212人,入围作品共40份,其中Omniverse组11份,专业组15份,学生组14份.在宣布最 ...
- C#无需第三方插件实现json和table互转
using System; using System.Collections.Generic; using System.Collections; using System.Linq; using S ...
- 降低FTP服务器速度的解决方案(Filezilla等)
我最近发现,尽管有70Mbps(8.75MB / s)的互联网连接和1Gbps(125MB / s)的专用服务器可以从中下载,但我似乎只能从FTP服务器上以大约16.8Mbps(2.1MB / s)的 ...