注:本文文字经 AI 辅助校对排版。

我是胡九思。
做了一个住在 macOS 菜单栏里的英语小助手,名字叫 Pico。
打字的时候,英文贴着指尖实时浮现,按个快捷键,中文直接原位替换成英文;读到看不懂的段落,随手复制一下,译文就会自动弹出来。
至于为什么叫这个名字?先留个悬念,文末有答案。先聊聊它是怎么来的。

绕道剪贴板
一天,我在小众软件上刷到开源项目 floattrans,觉得概念非常巧妙:读取 macOS 输入框的内容,调用系统自带的翻译接口,全程本地翻译并浮窗显示。装上试了试,网页能用,企业微信也能用。
但用了一会儿,我发现了最致命的问题:它在微信里竟然不能边打边译,而且 UI 和功能都有点粗糙。
这个场景不解决,体验直接打折。于是我决定动手改造,给 Pico 定下的第一优先级,就是必须让它能在微信里用起来。
本以为这只是个常规适配,结果一动手就踩了坑。微信的无障碍机制卡得很死,想走原生方式直接提取文本根本行不通,试了几种常见方案都失败了。
撞墙之后我停下来想:正门走不通,能不能绕个弯?
如果不动微信本身,直接去监听系统剪贴板呢?复制是最自然的动作,谁都拦不住,文本一进剪贴板,后面的浮窗翻译就接上了。
我拿这个思路和 AI 探讨了一轮,把误触发场景捋了一遍,确认可行。敲完代码一跑,流程通了!虽然多了一道复制动作,但在封闭的微信环境里,这已经是成本最低且最稳妥的解法。
一次意外的测试
做出来第一个版本,我顺手发给我妹测试。结果她反馈:「微信里边打边翻能用啊!」
我一愣:凭什么她的行,我的不行?
后来反复排查才弄明白:微信新旧版本的无障碍逻辑不一样。她用的旧版(3.8.9)还开放着接口,而我装的新版(4.1.11)已经走不通。不仅如此,她那边的 Edge 和 WPS 也没法边打边译,而我用的 Tabbit 浏览器却一点问题没有——因为 Edge 和 WPS 都是 Chromium 内核,系统根本读不到它们的界面文本。
正是有她的反馈,我才把 macOS 上的应用彻底摸清并划分成了两类:
- 原生开放应用(如 Safari、备忘录):接口开放,直接边打边译;
- 封闭 / Chromium 内核应用(如微信新版、Edge、WPS):切换为剪贴板翻译。
打开 Pico 设置,进入「剪贴板翻译」,开启「翻译复制的文字」并选「自动监听」,之后在任何应用里复制中文,译文就会自动弹出来。嫌自动弹窗频繁,可以换成快捷键 ⌥⇧V 手动触发。殊途同归,译文都出得很快。

打磨细节
核心链路跑通后,我把它当成日常工具来用,原版在交互上的别扭就彻底暴露了——它的窗口死死钉在屏幕最下方,完全挪不动。
屏幕底部常常开着别的窗口,Dock 栏也在那儿,固定的文本框一搁,要么挡住别的内容,要么每次点击都得小心翼翼地避开。一天几百次交互,这点不顺手会被放大几百倍。
改!必须改成能自由挪动的。 我把窗口的定位和拖拽重写了一遍,终于不再憋屈。

但这还没完,强迫症犯了之后,我又觉得界面样式太生硬:浮窗显示出来容易,但要让人觉得「舒服」实在太难——位置、大小、透明度、颜色,哪一样调不好都会难受。
于是我继续调整,把它磨成了如今的模样:
卡片主题与背景:提供 6 种主题色(跟随系统、蓝、绿、紫、橙、粉),标签文字和卡片底色会随之改变。背景效果支持毛玻璃、轻透玻璃、厚实、纯色 4 种,透明度可在 0~70% 之间实时调节,压在别的窗口上时可以直接透视底下内容。
位置与字号:显示位置支持右上、底部居中、右下三个角落,且随时可以拖动到任何位置;字号提供大、中、小三档调节。
长文与防误隐优化:短句自动紧凑,长文本增加了滚动条和高度调节把手(双击可恢复默认尺寸)。同时,鼠标移入文本框时浮窗不会消失,移走后才会按预设的秒数(默认 5 秒)隐去,避免长句还没看完就自动关掉。
无论是边打边译,还是监听剪贴板,译文展现都变得从容自然。



现在,就可以看看完整的效果啦~
第一种:实时浮动,边打边译。

注意:Pico 的翻译方向是固定的。比如你可以设置原语言是中文,目标语言是英文,也可以反过来,同时也支持多语言(中、英、日、俄、韩、法、德、西,任意组合)。
特意没做自动识别语言,因为我不想让它成为下一个翻译软件。
第二种:编辑器里选中一句话,复制,英文在屏幕上弹出。 适用于任何无法即时翻译的情况,哈哈。

边打边译受限于打字速度,句子都不长,译文速度和文本框大小正合适;但剪贴板翻译经常是一大段,之前的固定框不能滚,多长都整个撑开,很占屏幕。
现在的版本针对这个做了优化:卡片最高只到半屏,长内容在卡片里接着滚;底边加了小把手,上下拖动可调高度,双击恢复默认;鼠标停在卡片上时不会自动消失,移走后才按默认秒数隐去,长句也能安心看完。
- 加了小把手:上下拖动可调节高度,双击恢复默认尺寸。
- 加了滚动条:方便查看长内容。
- 防误隐优化:新版本解决了自动消失的问题,鼠标移入文本框时不会消失,移走后才会按默认秒数消失。这听起来可能枯燥,但实际使用时会发现很重要。
这些用法我都写进了设置的「使用技巧」,忘了随时可以去翻。
不知不觉学英语
看到译文只是第一步,让译文顺畅嵌入工作流才是关键。在设置的「快捷操作」里,有两个非常核心的开关:
- 替换原文(
⌥⇧[):在输入框里选中中文,按一下快捷键,中文原位换成英文。 - 复制译文(
⌥⇧]):按一下,译文直接进剪贴板。

写回功能尤为实用:在聊天框或 GitHub 输入框里打完中文按一下,英文直接落进输入框,回车即可发送,全程手不用碰鼠标。
此外,Pico 还支持语音朗读,可在「停止输入时」「整句完成时」或「按快捷键时」自动匹配目标语言朗读(翻到英文就是英文女声)。
这些合在一起,就是它最开始的定位:让你不知不觉地学英语。平时打字,顺手看一眼译文,用的都是简单常见的表达,速度快到不用等。看多了,有些表达自然就会了。
真正静音
隐私是我非常关注的部分,因此 Pico 在设计上做到了彻底的本地化与透明:
- 默认本地引擎:默认采用 macOS 系统自带的本地翻译引擎,离线也能用。
- 自定义 API 保密:如果你选择接入大模型,API 密钥只保存在你自己 Mac 的 Keychain(钥匙串)里,不同步云端,我也获取不到。
- 数据完全归属本地:翻译历史全量保存在你本地电脑;软件不会读取你的密码框;诊断日志不会自动上传——只有排查问题时需要你手动提供,且日志仅记录操作逻辑,绝不包含个人信息。你甚至可以设置排除软件名单。
作为开发者,我不知道也不想知道你翻译过什么,我想这是一份基本的尊重。
极致的纯粹
随着核心功能、交互和视觉稳定下来,我开始收到一些用户反馈。但我一直提醒自己:别把工具做成什么都往里装的口袋。
朋友曾建议做分级词汇、生词本,我想了想还是没加——词汇表一上来,它就变成一个厚重的翻译软件了。
9 天,66 次提交,9 个版本。发到第 9 个版本的时候,虽然中途为了修一个在我妹电脑上偶发的 Bug 几乎崩溃。

但回看结果,它已经非常接近我最初想要的东西了:一个恰到好处的工具。


在这个到处都在把软件做大做全的时代,我反倒越来越喜欢这种小东西,不占地方,不抢注意力,安静地把一件事做完。
完全静音。
最后,回答开头留下的悬念:为什么叫 Pico?
pico- 取自物理词头(皮可),代表 10的-12次方(万亿分之一)。
一方面,它的响应极快,译文与指尖同步,快到极致;另一方面,它的体积极小,安装包仅有 2MB,小到极致——这个名字代表了我对它的全部期冀。
官网与演示:myvibe.so/siyou-a/pico
开源代码:github.com/asiyoua/pico (MIT 协议)
下载DMG ,拖进应用程序文件夹就能用,无需注册,可自动更新。希望这个小工具,也能让你的 Mac 体验顺畅一点点。
