前言

《我在用什么浏览器翻译插件?》这篇博文里我提到过我对浏览器翻译插件的体验和需求,那时候用了一阵子的 trancy,后来不知何时就弃用了,当时我就提到过,这不是我理想中的翻译插件(个人主观原因)。

在简单导航(simpleNav)基本不必再改动之后,我又萌生了改一个停更开源翻译插件的想法,虽然很早之前就有过,但 codebbudy 没能给我足够的信心。现在换上了 trae solo,我觉得效率上起码要高出不少。

选择

选择项目

停更许久的翻译插件大多是翻译接口失效或者不好用,看起来只需要替换接口就可以,所以我想找的是轻量,且使用体验比较适合我的项目。对比了一下轻氧翻译和侧边翻译,我最终选择了后者。

侧边翻译是我曾使用过很长一段时间的翻译插件,可惜已经停更很久了。加上现在各大翻译插件都有 AI 模型的加持,传统的机翻很难满足要求。

为了避免误导其他人,所以在遵循原项目的开源协议前提下,把这个新项目命名为“轻量翻译”,英文名:lightrans。

选择接口

既然不要机翻,又要考虑到公开给大众使用,就不能有高昂的开支,所以我首先想到的是用智谱清言的官方 api 调用 GLM 4.5-Flash,但是并发数限制得非常低,加上翻译速度没有达到我期望的即点即译,于是作罢。

好在我又体验了一下 trancy,发现 trancy 也没有免费提供 GLM 模型,而是改成了硅基流动。于是我注册了硅基流动的账号,发现居然有免费的模型可以使用!硅基流动真是带善人!

感谢硅基流动提供的免费模型

首先体验的是 deepseek 的一个模型,翻译速度也很慢(我猜测是因为有推理思考过程),在网上多方了解,发现Hunyuan-MT-7B倒是一个不错的专为翻译而生的小模型,腾讯混元官方的 api 依然是收费的,还好硅基流动限免提供使用。最后我选择了三个体量都不大的小模型:Hunyuan-MT-7BQwen2.5-7B-InstructGLM-4-9b-chat

这三个模型除了混元比较新之外,另外两个都算比较老的模型了,没办法,不花钱嘛,况且效果也不是不好。

根据我的用量级别,我使用这几个模型的速率限制为:1000 RPM 和 80000 TPM。即每分钟请求数1000,每分钟处理 token 数80000。

开改

精简代码

侧边翻译不是个人开发者的作品,应该类似于一些较大的开源项目组织维护,所以侧边翻译里有非常丰富和强大的功能及代码。考虑到我只需要接入一个翻译接口,于是必应、谷歌和百度等翻译接口都删掉了。

初次以外还删掉了分析代码、隐私政策、部分设置项和个别国家的本土化适配等等,源代码从14MB缩减到4.5MB。

添加翻译器

由于我选择的三个模型都是对话模型,所以请求的 api 地址一样,于是我只创建了一个 aitrans 的翻译器,方便测试就在代码里明文写了我的私钥,经过测试,对话框(popup)翻译正常,划词翻译正常,但是网页翻译不正常。

修改

原本的侧边翻译的对话框默认是搜索的,输入文本点击翻译后即会在侧边栏显示翻译结果,但是测试了一下目前的翻译接口都已经失效了。为了获得输入和获取结果的一致性,即当前对话框不会被打断关闭而显示另一个对话框,我改了 popup 的样式,并使它能够直接在当前窗口显示结果。

侧边翻译的对话框

lightrans的对话框翻译

除了对话框以外,侧栏显示翻译也会让人的视线离开当前关注的区域,所以我把划词翻译的结果也以浮动的卡片形式显示在了当前位置,并且和原来一样支持拖动。以下是划词翻译中三个不同模型结果的对比(发音按钮点击无效,功能删了但是还没删按钮):

lightrans混元模型划词翻译

lightrans千问模型划词翻译

lightransGLM模型划词翻译

当然,用不着的设置项也可以删掉,因为我的需求没有那么丰富(不然就用 trancy了),为了追求极简但好用,所以砍掉了许多原本有的功能,也为后面的修改和维护减轻一点负担。

侧边翻译的设置页

轻量翻译的设置页

看起来基本可以正常使用了,但是网页全文翻译依然不行。原项目使用的是谷歌和有道,但是有道已经下线了,谷歌在国内也无法直接访问,看来要支持网页翻译需要改动的还挺多。

中间的过程就不再赘述了,除了新增代码,调试代码之外,还要测试不同的请求频次和字符数,以免触发硅基流动限频的策略。

和原项目一样支持右键选择翻译模型

一开始选中模型进行网页翻译,往往要过十来秒钟页面才会有变化。或许是内容太多了模型处理也要时间吧,于是我设定了分批次提交,最高并发三个,最多重试三次。所以在进行网页翻译的时候可以看到内容是一部分一部分出来的,但是间隔不算大(主要是网页本身的菜单栏花的时间多,正文其实很快)。这样用户能感知到翻译已经开始了,而不是像之前一样等待了十来秒都没反应,于是不断尝试,就更容易触发限频。

lightrans贴一段代码

从翻译结果来看,不知道为什么千问模型会漏掉几个词语不翻译,也可能是我的代码有问题,相比之下,混元模型翻译得还不错,有些专有名词甚至会加括号解释说明。比如昨天在新华网英文站翻译页面时,发现它会解释“GuoChao”这一个词汇,但是我没找到那篇新闻,只能找另一个,没想到也复现了。

上方是翻译,下方是原文

这是更完整的页面翻译。

lightrans使用混元的网页翻译

最后

通过这次改写这个开源项目,我才发现原来微软的机翻 api 也是要钱的,那么多较大的翻译插件都把谷歌和微软翻译免费使用,甚至开放一些 AI 模型翻译免费使用,这样看起来他们真的是在为爱发电了。

而我能轻松改写这个项目,要感谢侧边翻译的开发者们的开源,也要感谢 trae solo 的帮助。考虑到我的 api 限频问题,所以暂时没想过上架应用商店,但是如果愿意体验并且给我提出意见的话,也欢迎下载扩展包尝试一下。

项目地址:hin/Lightrans · CNB

扩展包下载:lightrans_chrome.zip | w4j1e’s drive