利益相关声明:作者与文中产品有直接的利益相关(开发者、自家产品等)

我不是因为看不懂英文,才做了小窗译。恰恰相反,大多数时候我已经看懂了七八成。为了弄懂剩下那两三成,我却总要在原页面、翻译工具和 AI 之间来回切换。

为了效率和体验,我选择自己打造一个翻译工具。

读英文文章时,真正让我停下来的,常常是一句来回看了两遍、每个词都认识,却仍拿不准作者到底在说什么的长句。我会把它复制到 AI 里,先看一遍翻译;如果还是不确定,就把前后文一起放进去再问一次。等再回到文章,那句话虽然弄明白了,原本顺着往下读的节奏也断了。

轮到自己写,麻烦又换了一种。我通常知道自己想说什么,也能写出一个意思大致正确的版本,却很难判断它读起来是不是太书面、太生硬,或者比原意更冷淡。于是我又把草稿交给 AI,说明这是一条社交媒体回复,再让它“自然一点”“别太正式”。有时来回改了两三轮,最后真正采用的,可能只是其中一个词。

说到底,我的需求很简单:读的时候把意思弄明白,写的时候把话说得地道。麻烦在于,每次都要把原文、上下文和草稿搬到另一个工具里,处理完再搬回来。

后来我问了身边几位朋友,发现大家多少都有类似的经历:有人读到长句会顺手打开翻译工具,有人写完之后总要再找 AI 确认一遍。

于是我开始做小窗译。

它最初面对的不是“还缺哪一种翻译功能”,而是:能不能让翻译离正在发生的事情近一点,让人看懂以后,马上接着做原来的事?

第一个问题:功能越多,快捷键越不像快捷键

真正开始做以后,我遇到的第一个问题甚至不是翻译质量,而是用户应该怎样使用这些功能。

最直觉的做法,是为每一种翻译方式分配一组快捷键:划词翻译一个,剪切板翻译一个,截图翻译再来一个;以后增加输入翻译和实时翻译窗,就继续往下加。

从程序的角度看,这套方案很整齐。每个模式都有自己的入口,熟练以后也能一步直达。但我很快发现,开发者眼里的“清楚”,不一定等于使用者手上的“顺手”。

小窗译提供的快捷键( ⌘+E 可以快速唤起划词翻译)

划词翻译足够高频,用过几次就能形成习惯。截图翻译却可能几天才遇到一次。真正碰到一块无法复制的文字时,我往往知道小窗译里有这个功能,却想不起当初给它设置了哪组按键。

一个快捷键只有在记得住的时候,才算快捷。如果还要先打开设置确认,再回到刚才的页面,那么所谓“快速调用”,反而制造了新的中断。

这件事让我改变了思路:与其要求用户记住软件里的所有模式,不如让软件替用户记住。

于是,小窗译默认只保留两个需要形成肌肉记忆的入口:⌘E 用于最高频的划词翻译,⌘J 用于打开快捷面板。

按下 ⌘J,所有翻译方式都会摆在面板里,我不用再回设置里确认快捷键。用得多了,字母又会变成第二段操作:比如 ⌘J → P,直接进入截图翻译。

不熟悉时看着选,熟悉以后顺着按键继续操作。

快捷面板并不是又增加了一个入口。恰恰相反,它是在把入口收回来:偶尔使用时,面板负责提醒;频繁使用以后,手指自然会找到更短的路径。至于程序内部把它们分成多少种模式,不应该成为使用者的负担。

快捷面板解决的是怎样来到翻译前。可窗口出现以后,它究竟应该给我多少东西?

一个结果究竟够不够

Bob 将多个翻译引擎并排呈现做成了一种很有辨识度的体验。面对一句拿不准的表达时,把几个结果放在一起比较,确实很有价值。

最初思考结果窗口时,我也很容易沿着“更多就是更好”的方向走:既然能同时拿到几个答案,为什么不一次都摆出来?

但回到真实的阅读过程,大多数时候,我并不是面对一句完全无法理解的英文。更多情况是,整段内容已经看懂了七八成,只是某个从句关系不够确定,或者一个词放在当前语境里拿不准。

我需要的不是重新学习这段话,而是补上缺少的那一小块信息,然后继续往下读。如果每次划词后都同时出现三四个答案,原本只需要一次确认的问题,反而会变成一道选择题:哪个更准确?为什么这里用了不同的词?我要不要再比较一下?

答案更多,不一定意味着阅读更快。于是,小窗译的划词翻译默认先给出一个结果,窗口尽量保持简洁,不主动把更多选择推到眼前。

先补上影响理解的那一小块信息,再继续往下读。

如果这个结果不够自然,或者某个表达仍然让我拿不准,再点开“对比结果”,把其他翻译引擎的答案放到一起。

需要斟酌时,再展开其他引擎的结果。

先给一个结果,不等于拒绝比较,只是把比较留到真正需要的时候。这个原则对句子很有效,却很快遇到了一个明显的例外:单词。

拿 pitch 举例。一个普通翻译结果可能告诉我它是“推销”。答案本身没有错,但 pitch 也可能指音高、球场,或者一次产品提案。离开上下文,只返回其中一个中文词,很可能只是给出了一次正确但无用的回答。

整句翻译和单词查询,表面上都叫翻译,背后的问题却不一样。翻译句子时,我通常已经知道它在讨论什么,只需要补齐完整含义;查询单词时,我很可能真的不知道它是什么意思,也无法提前判断哪个义项符合眼前的场景。

所以,我没有把单词当成一句更短的句子,而是单独做了词典模式:把常见义项、它们之间的差别,以及帮助理解的解释和例子放在一起,再让用户结合上下文判断。

最重要的是,它还用英文提供了词义的解释,就像柯林斯词典一样,英英词典对理解词义的帮助非常大。

查询单词时,自动进入词典模式

我并不想再做一部包罗万象的词典。词典模式要解决的,仍然是阅读停住的那一刻:先把最影响理解的歧义摊开,让人尽快回到原来的句子里。

到这里,所有设计其实都依赖一个没有说出口的前提:文字必须能够被选中。

当文字无法被选中

截图翻译最容易想到的实现方式,是先用 OCR 提取文字,再把识别结果送去翻译。最早思考这个功能时,我也把它理解成一条很直接的流水线:截图、识别、翻译、显示正文。

对于排版规整的文章,这条路通常没有太大问题。但截图里的内容并不总是从上到下排列的正文。

它可能是一张信息图,几段文字分别对应不同图标;也可能是一张聊天截图,双方的消息左右交错;还可能是一个软件界面,按钮、标题和说明散落在不同区域。

这时会出现一种很奇怪的失败:OCR 把字认对了,翻译也没有明显错误,我却还是看不懂这张图。因为文字一旦被抽出来拼成连续正文,标题、按钮和说明原本的对应关系也一起消失了。

我后来意识到,对图片来说,文字所在的位置本身也是信息。这时我想到微信图片翻译带来的那种体验:与其把文字从图片里抽走,不如把译文放回它原来的位置。

于是,我没有再把 OCR 识别出的文字单独抽出来,而是让译文回到对应的区域。这样保留下来的不仅是句子的意思,还有它在画面里的位置。

截图翻译功能

如果只是想看懂截图,可以直接阅读译后的图片;需要继续分享或整理时,原文和译图也应当能方便地从这里带走,而不是再做一轮截图和抄录。

提取翻译内容

把译文放回原图,保住了文字之间的位置关系。但这个办法仍然有一条边界:画面必须停下来。

看英文课程、产品发布会或者没有中文字幕的视频时,截图翻译可以应急,却不适合连续使用。截一次图,等待结果,看完,再截下一张。内容还在播放,翻译过程本身却不断迫使人暂停。

当截图开始重复,我意识到需要解决的已经不是“怎样更快地截下一张”,而是能不能让翻译留在这块不断变化的画面旁边。这也是实时翻译窗出现的原因。

打开实时翻译窗以后,可以把它放在屏幕上的一块区域。它更像一个能够移动和缩放的透明取景框:框内画面发生变化,就继续识别其中的文字,并把译文放回对应位置。

对于位置相对固定的视频字幕、在线课程和软件演示,不必再一张张截图,也不必把视线搬到另一个翻译页面。翻译跟着内容一起变化,原来的画面仍然是阅读的主体。

像透镜一样,放到哪里,就能翻译哪里的内容

实时翻译窗真正改变的不是识别频率,而是我终于不用为了理解下一句,反复离开正在看的画面。

到这里,小窗译解决的主要还是开头提到的第一种情况:别人写的。可我最初想解决的,还有另一半——那些我准备发出去的话。

从看懂,到把话说准确

阅读和表达看起来都依赖翻译,衡量结果的标准却不一样。

阅读时,我关心的是能不能迅速理解意思。只要译文准确到足以消除疑问,我就可以继续往下看。写作时,我还会关心一句话听起来像什么。

同一句中文,可以被译成礼貌而正式的英文,也可以更简短、更像社交媒体上的口语。有些表达逐字翻译没有错误,读起来却会显得生硬;有些词意思相近,放进具体语境后,传递出的态度可能完全不同。

这也重新解释了前面那个问题:为什么小窗译默认只显示一个结果,却依然保留多引擎对照?

阅读时,一个结果是在帮我尽快离开翻译;表达时,几个结果则是在帮我判断究竟想怎么说。

例如回复海外社交媒体上的帖子时,我不只想确认“这句话能不能被看懂”,还会在意它会不会太郑重、太冷淡,或者带上一层原本没有的语气。这时,我可以先看一个英文结果;如果仍然拿不准,再把几个引擎的答案放到一起。

几个结果不是等待投票的“正确答案”,而是让我看见同一句话在措辞和语气上的几种走向,再决定哪一种更接近自己原本想说的话。

但当输入从公开帖子变成未发布的文案、内部资料或客户沟通,语气之外又多了一条边界:这些文字会被发送到哪里?

在线翻译引擎和大模型提供了很好的质量,也是我日常使用的重要选择。但面对尚未发布的产品资料、内部沟通内容,或者只是自己还没有整理好的草稿,我有时会在按下发送前犹豫一下。

所以,小窗译也提供本地离线模型。模型准备好以后,翻译可以直接在电脑上完成。对于那些不想离开本机的内容,不必在“要不要翻译”和“要不要上传”之间二选一。

支持自定义翻译服务和模型,提供两个本地翻译模型

本地和在线并不是谁取代谁。阅读公开内容、希望得到更多表达选择时,可以使用在线引擎;面对不想离开本机的文字时,可以切换到本地模型。速度、质量和隐私之间没有唯一答案,我更愿意把选择留给使用者。

把注意力还给原来的事情

回头看,小窗译并不是从一张完整的功能清单里长出来的。每解决一次中断,下一层问题才显出来:记不住的快捷键、被 OCR 拆散的画面、来不及截下来的字幕,以及那些不想发送出去的文字。它们最后都指向同一件事——翻译本身不应该成为新的中断。

我每天仍然会遇到那两种情况:别人写的,以及我准备发出去的。小窗译不会替我读完文章,也不会替我决定一句回复应该是什么语气。它真正应该做的,是在我停住的那一刻补上缺少的信息,然后把我送回刚才那句话、那个画面,以及那条还没有发出的回复。

小窗译可以从 translatewindow.app 下载。免费版可满足绝大多数日常需求,如需购买pro版,少数派用户输入优惠码 SSPAI,可获得15%优惠折扣。