扩展的弹窗一直在回答错误的问题。1.16 改为画出你正在看的这个页面
Telli.sh: Every Translator 1.16 把工具栏弹窗重做成状态视图:当前页面的微缩图、五个带标签的信息片,以及只有在扩展能确认「确实在运行」时才变绿的状态点。所有配置都搬到了带实时骨架预览的独立设置页;即时翻译获得了自己的标签页和一份 30 天自动清理的历史记录;通知铃现在按浏览器语言、跨 15 个语言版本推送 Telli.sh 博客。
在本周之前,点击 Telli.sh 工具栏图标打开的是一个设置抽屉。1.15 弹窗的标记有 16,936 字节,把八个需要配置的提供方——Chrome 内置 AI、Google、Apps Script、DeepL、Ollama、OpenAI 兼容、OpenRouter、Claude——的完整配置表单全塞了进去,外加五行开关。旁边那个设置页只有 7,621 字节。还不到一半,而真正有空间可用的偏偏是它。
这是一种倒置的信息架构,调多少次字号都救不回来。工具栏弹窗的存在只为回答一个问题,我们后来把它叫作 一眼之问 :它开着吗,它在这个页面上打算做什么? 你应该在一秒之内、不用滚动就拿到答案,然后把弹窗关掉。
Telli.sh: Every Translator 1.16 已于 2026 年 9 月 4 日提交至 Chrome 应用商店,本文发出时仍在审核中。这个版本用一张图来回答一眼之问。
TL;DR
- 弹窗现在是状态视图。 宽 372 像素,高度上限 560 像素,不滚动。里面一个凭据输入框都没有——我们数过了,字面意义上是零。
- 它会画出你正在看的页面的微缩图,从微缩图的各个部位引出细线,连到带标签的信息片上:语言、显示方式、发送预览、提供方、输入助手。这张微缩图对照的是扩展真正渲染出来的界面,连悬浮按钮与输入框之间那 8 像素的间距都一样。
- 绿色表示已验证,而不是「勾选框打上了勾」。 三种状态:在当前标签页运行为绿色,已启用但未验证为琥珀色,关闭为灰色。
- 即时翻译与历史记录 成了第二和第三个标签页。未置顶的历史条目在创建 30 天后过期,置顶的不会。
- 一个通知铃按你的浏览器语言推送我们的博客,读取的是 15 个语言版本各自的 RSS 源。如果你想不打开网站也能知道有新文章,这个铃现在是最省事的办法。
- 所有需要你配置的东西都在设置页上,而那个页面不再用一句话描述某种显示方式,而是直接给你一个能动的微缩演示。
弹窗不再装配置,变化就在这一句里
1.16 背后只有一个决定:配置搬出去,状态搬进来。弹窗头部的齿轮图标会直接跳到设置页的对应分区,所以没有任何东西变得更难找——它们只是不再挡在答案前面。
留在弹窗里的东西是刻意做少的。一个头部,带站点名和按站点的开关——因为「在这个网站上把它关掉」是状态操作,不是配置。一个铃。一个齿轮。然后是主体。
值得一说的正是这个主体。
状态视图是你这个页面的解剖图
在聊天网站上打开弹窗,你看到的是这个网站的线框:两个消息气泡、底部的输入框、坐在它上方的 Telli.sh 悬浮按钮,再往上是预览面板。灰色的骨架条代替文字。从这张微缩图的五个部位,细细的引出线向左延伸,接到一列带标签的信息片上。
每个信息片给一件事命名,并给出它当前的值。
| 信息片 | 指向何处 | 显示的值 |
|---|---|---|
| 语言 | 消息气泡 | 你的阅读语言 → 你的输出语言,例如 English → Auto-detect |
| 显示 | 气泡下方的译文 | 行内注释、双语对照、点击展开、点击切换 |
| 发送预览 | 面板上的按钮 | 开或关 |
| 提供方 | 悬浮按钮 | 九个提供方中被选中的那个 |
| 输入助手 | 输入框 | 目标语言,或者「关」 |
信息片自上而下的顺序与它们所指的部位一致,因此引出线永不交叉。它们的纵向位置不是写死的,而是渲染时实测出来的:理想位置互相重叠的信息片会合并成一组,再把这一组整体居中,让对齐误差由整组分担,而不是全压在最后一个上。把鼠标移到某个信息片上,图中对应的部位会高亮。
这么做的道理在这里。一份设置清单告诉你 displayMode: bilingual 。一张图告诉你 译文会出现在你眼前这个页面的什么位置 。而且这张微缩图不是美化过的插画,它照搬了内容脚本使用的真实几何:悬浮按钮位于输入框上边缘往上 8 像素、右对齐;350 像素宽的预览面板再往上 8 像素,同样右对齐。弹窗教给你的是真实的界面,而不是一个体贴的虚构。
绿点必须有含义,所以我们把它的代价定得很高
旧的开关展示的是意图。你能看到开关是开着的,却依然不知道翻译到底有没有在跑、API 密钥有没有被接受、这个网站究竟受不受支持。
所以 1.16 把绿色花得很省。一共三种状态,每一种都是扩展愿意为之辩护的主张:
- 绿色——「在当前标签页运行」。 这是扩展此刻能够确认的状态。
- 琥珀——「已启用,未验证」。 设置是开的,凭据也在,但没有任何东西证明这一趟往返真的走得通。
- 灰色——「关闭」。 要么被关掉了,要么某个必填项还空着;结果一样:什么都不会被翻译。
提供方这一片是最严格的例子。只有两个提供方能拿到绿色。免费的 Google 翻译模式不需要用户凭据、始终可达,所以是绿的。Chrome 的设备端内置 AI 只有在弹窗真的向 Translator.availability() 询问过你的语言对、并得到可用的答复之后才变绿。其余的——DeepL、Claude、OpenRouter、Ollama、OpenAI 兼容端点、Apps Script、Google API——只要填了 URL 或密钥就停在琥珀色,因为要验证它们,就意味着每次你打开弹窗都得拿你的额度去发一次测试请求。如果它需要的字段还空着,那是灰色而不是琥珀色。明知道跑不起来,扩展不会告诉你它开着。
这是一条故意不讨好的规则。用默认设置的人多半会看到一个绿色的提供方点;用付费 API 的人多半会永远看到琥珀色。琥珀色是诚实的,比起显绿我们更愿意显诚实。
即时翻译:给那些没有页面的文字
上面所有内容都假设你正待在扩展支持的页面上。而很多时候你并不在:有人往工单里贴了一段话,或者你从 PDF 里复制了一句。
即时翻译就是为这种场景准备的第二个弹窗标签页。选好源语言和目标语言,粘贴最多 2,000 个字符,拿到译文,复制走。两个下拉框之间有一个互换按钮。
它不是坐在第一个翻译器旁边的第二个翻译器。请求走的是与扩展在页面上所做的每一次翻译完全相同的后台队列、相同的缓存、相同的提供方,所以你配置过一次的东西在这里同样生效。而且它默认是关的——instantTranslateEnabled 初始为 false ——因为弹窗的职责是一眼之问,一个你没要过的草稿板只会在你和答案之间多加一层。在设置里打开它,弹窗就长出标签栏;不打开,弹窗就仍然只是一个状态视图。
会自己清理的历史:30 天,除非你把它置顶
打开即时翻译后,旁边会出现历史标签页,按时间倒序保存你在那里翻译过的内容,只存在这台设备上。
保留规则只有一句:未置顶的条目在创建 30 天后过期,置顶的条目永不过期。 把你反复要用的句子置顶,它就留下;其余的自己变旧然后消失。
有两个实现细节值得写出来,因为它们决定了你能依赖什么。清理发生在读取列表的时候,而不是靠后台定时器——只有弹窗会读这份列表,所以设个闹钟也不可能比「你打开弹窗」更早删掉任何东西。另外,把一个已经超过 30 天的条目取消置顶,这个动作本身就是删除:置顶正是唯一挡着过期的东西,下一次读取就会把它收走。
作为兜底,还有 200 条的硬上限。真的触到时,置顶条目保留,未置顶中最旧的先出局。标签页顶部有一个清空按钮。
那个铃就是我们的博客,用你的语言
这是我们最希望你注意到的部分,因为它是你关掉标签页之后还在继续工作的那一部分。
弹窗头部有一个通知铃。它展示 Telli.sh 的博客文章:状态视图里最多叠放三张卡片,完整列表在铃的后面,图标上带未读角标。每篇文章都在 telli.sh 上打开。
这个源是按语言版本分的。 扩展读取你浏览器的界面语言,与博客发布的 15 个语言版本——英语、韩语、日语、中文、德语、法语、西班牙语、意大利语、葡萄牙语、俄语、波兰语、越南语、泰语、印尼语、马来语——比对,然后取用那个语言的 RSS 源。如果你的浏览器设成泰语,通知就用泰语来。如果你的浏览器语言不在这 15 个里,你会拿到英语。中文的两种变体都归到同一个中文源。
它的机制是按「别挡路」来设计的。源由弹窗自己拉取,从不依赖后台闹钟,并且先从缓存出图,所以在碰网络之前卡片就已经画好了。缓存保留 6 小时——这个数值既能让新文章在一个工作日内浮现,又能把一天里几十次的弹窗打开收拢成最多四次请求。最多保留 12 条。刷新失败绝不会顶掉一份完好的缓存;回退链依次是实时源、缓存、一张常驻的 Telli.sh 卡片,最后是什么都不显示。
关掉一篇文章,它就一直是关着的。条目的身份来自文章自身的 URL,并去掉查询字符串——那些链接上的跟踪参数是我们的,不是文章的——所以当源刷新并重排时,被关掉的文章不会又冒出来。
如果你一直想跟进我们关于会议翻译和语音识别的文章却总没顾上:装上扩展,文章就会用你的语言、一次三条地送到工具栏。
在你做决定之前就能看见的设置
设置页长成了它本来就该承担这份重量的样子,而它的核心想法是:不该让你靠想象去理解一种显示方式。
显示方式选择器下面有一个实时的微缩演示——和弹窗那张图用的是同一套灰色骨架语言——展示一个消息气泡,译文按该模式实际渲染的样子叠在上面。从行内注释切到双语对照、切到点击展开、切到点击切换,微缩演示跟着变。发送预览、输入助手、即时翻译也各有一份同样的演示,每一份下面那行说明会随设置改变,而不是抽象地描述。
提供方分区不再要求你把模型 ID 背下来。Ollama 的模型列表取自你本地服务器的 /api/tags ;OpenAI 兼容端点读的是 {你的基础 URL}/models ;OpenRouter 和 Anthropic 来自它们各自的目录接口。只要 API 公布了按 token 的价格,选择器就会显示它,并换算成每百万 token 的数字。 OpenRouter 把价格写成 0.0000001 这样的数,在那个量级上没人读得出来。价格方面没有任何写死的、估算的、或在两次刷新之间记住的东西,所以价格从结构上就不可能过期:目录里没有价格,选择器就不显示价格。
支持站点的列表原本是平铺的一长列 30 个,扫都扫不动。现在被归入 8 个类别:聊天与邮件(7 个)、社交(3 个)、社区与论坛(4 个)、开发者(5 个)、维基与参考(2 个)、博客与订阅(3 个)、新闻(4 个)、评论与点评(2 个)。底部还多了一行「没找到你要的网站?告诉我们来添加」。这是扩展第一次为这件事提供任何路径。
还有了首次运行引导。只在安装时出现——绑定在 Chrome 的 install 原因上,更新绝不会触发——三步告诉你这个扩展做什么、哪两项设置决定了其余一切、工具栏按钮在哪里。三步里有两步不是给你看一张控件的图然后让你自己去找,而是直接把页面上真实的控件点亮。
结论:工具栏弹窗不是仪表盘,是仪表盘上的指示灯
旧弹窗的错误不在于难看,也不在于会滚动,而在于它把一个一秒钟的界面当成了工作台。你没法在一个 372 像素宽的盒子里配置八个提供方,也不该为了弄清有没有东西在运行而滚过这场尝试。
1.16 把这两件事干净地分开了。设置页是你做决定的地方——一次做完,并且每个决定都配着它长什么样的图。弹窗是你确认这个决定正在生效的地方——一秒之内,在这个页面,就现在。如果我们做对了,你会更常打开弹窗,而每次待得更短。
1.16 版本截至 2026 年 9 月 4 日仍在 Chrome 应用商店审核中,通过后会以自动更新的方式送达。
Telli.sh 在其中的位置: 扩展负责快文本——聊天、帖子、评论、邮件、论坛楼层——覆盖 30 个站点、52 种阅读语言、9 个翻译提供方,界面本身有 50 种语言。Telli.sh 本体负责另一半:说出来的内容。它录制或导入一场会议,用实际说出的语言转写,翻译成 44 种目标语言,并把原文、对齐的译文和 AI 摘要放进同一份可编辑的笔记里。两边是同一个想法:把译文放在原文旁边,并且不丢掉原文。
资料来源
- Chrome 应用商店上的 Telli.sh: Every Translator —— 1.16 安装包于 2026 年 9 月 4 日提交到的这个商店页面。
- Telli.sh: Every Translator 产品页 — 支持的站点、显示方式、服务商与隐私承诺,集中在一页。
- Telli.sh: Every Translator 已上架 Chrome 应用商店,2026 年 6 月 23 日 —— 首发文章,可用来对照这次重做之前的扩展是什么样。
- 扩展源码,
extension/docs/UX_REDESIGN_PLAN_2026-09-04.md,2026 年 9 月 4 日 —— 促成本次发布六个阶段的评审文档,其中记有 16,936 字节弹窗对 7,621 字节设置页的实测,以及「绿色意味着已验证」这一决定。