起因很简单。我平时会看很多英文网页,技术文档、产品页面、开源项目说明、论坛讨论都算。看得多了以后,我越来越烦一个动作链:复制一段英文,切到翻译网站,粘贴,看译文,再切回原页面。短内容还好,长内容是真的磨人。等你看完几段,原本的阅读节奏已经被拆得七零八落。
更麻烦的是,很多翻译工具虽然能给出结果,但体验总差一口气。要么整页翻完以后原文不好回看,要么译文和上下文完全脱节,要么术语翻得不对劲,尤其是技术文章,越往下读越别扭。我后来慢慢意识到,自己真正缺的不是“再一个翻译网站”,而是一个直接待在网页里的工具。它最好点一下就能翻,最好别把原文彻底抹掉,最好还能让我对术语和风格有一点控制。

这个插件,我是按“阅读工具”而不是“翻译按钮”去做的
一开始我就给这个插件定了一个方向:它不只是把文字翻出来,而是尽量别打断阅读。
所以最早做的,不是一堆复杂设置,而是几个最核心的体验点。
第一,它要能直接在当前网页里工作。一键翻整页是底线,不然还是回到了复制粘贴那套老路上。第二,它不能只给我一份纯译文。我很多时候不是完全看不懂原文,而是需要一份更顺手的辅助理解,所以我希望它能保留对照关系。第三,它得适合长页面。文档页、博客页和论坛串都可能很长,如果一口气整页处理,体验未必好,所以我后来加了懒加载翻译,让页面先把当前看到的部分处理掉,后面滚动时再继续补。
慢慢往下做的时候,我又发现另一个问题:通用翻译适合快读,但到了技术内容、术语密集的页面,翻译质量就会开始飘。所以插件最后保留了两条路。一条是默认走 Google 翻译公共接口,优点是开箱即用,速度也快;另一条是允许用户自己填 DeepSeek API Key,把术语、自定义风格这些更细的需求接进来。这样就不会把所有用户都绑在同一条使用路径上。
从现在的功能看,这个插件已经不是“点一下翻译”的最小形态了。它支持整页翻译、双语对照、替换原文、原文下方显示、行内显示、划词翻译、自动翻译、站点规则、术语表、自定义风格和本地缓存。说白了,这些都不是为了凑配置项,而是我自己在用的过程中,觉得少了哪一块就不顺手,才一点点补上去的。
下面这张设置页截图,基本能把插件的性格说明白:它不是一个只追求“能跑”的小插件,而是明显往长期使用的方向在走。

从代码结构上看,这个项目其实挺克制
做完之后我自己回头看,反而很喜欢它的一点,就是结构没有故意做重。
它不是那种一定要上 React、再上状态管理、再上构建链、再上主题系统的工程。这个项目的主体非常直接:
manifest.jsonbackground.jscontent.jscontent.csspopup.html / popup.js / popup.cssoptions.html / options.jsicons/这样的结构有一个好处:你一眼就知道东西放在哪儿。
manifest.json 是扩展入口,background.js 负责翻译请求调度、缓存和重试,content.js 负责扫页面、注入译文和恢复原文,popup.* 是快捷操作入口,options.* 则承载更完整的设置项。这个拆法谈不上多高级,但非常实用。后面要补功能、查问题或者改交互的时候,不容易乱成一锅粥。

真正开始发布之前,我先做了一个判断
插件写完以后,接下来当然就是发布。但我没有第一时间进 Edge 后台,而是先问了自己一个问题:这个项目到底需不需要再加一层构建流程?
最后我的结论很明确,它不需要。
因为这个项目本质上就是一个 Manifest V3 原生扩展目录。HTML、JS、CSS 都是浏览器直接运行的文件,图标也齐了,manifest.json 里把入口、权限、background、popup、options 都声明完整了。换句话说,它不是那种必须依赖 npm run build 才能产出可发布文件的工程。
这个判断特别重要。很多人一看到“发布”,就会条件反射去想要不要套 Vite、Webpack,或者额外搞一个 dist/。但对这个项目来说,真正重要的不是再加工程化,而是做一个规范、干净、可重复生成的上架包。
我是怎么打包这个插件的
既然项目本身已经是原生扩展结构,那我做的事情就很直接:补一个打包脚本,把真正需要上传到商店的东西整理出来。
脚本本身不复杂,主要做几件事:
读取 manifest.json里的版本号建一个干净的临时打包目录 只复制扩展运行需要的文件 排除 .git、文档、临时目录这些无关内容输出可直接上传到后台的 ZIP
这里有个特别容易踩坑的小地方:ZIP 根目录必须直接包含 manifest.json。也就是说,压缩包打开后第一层就应该看到 manifest.json、background.js、content.js、popup.html、options.html 和 icons/。如果你把外层目录整体打进去,后台就有机会直接不认。
这个坑很基础,但第一次提扩展的人特别容易碰到。
真正费时间的,其实是审核材料
这次发布最直观的感受就是:代码能跑,只是第一步。
真正把一个插件送进商店,代码外面的东西反而很花时间,比如:
隐私政策 URL 网站 URL 支持邮箱 商店描述 Logo 截图 给审核员看的认证说明
这些东西如果没有准备好,插件写得再顺,也不代表能顺利走完提审流程。
隐私政策这件事,我最后用的是最务实的方案
一开始项目里没有现成的隐私政策页面。但这个插件会处理网页中的待翻译文本,也会在本地保存用户设置、可选保存用户自己填的 API Key,还会做本地缓存。所以在 Edge 后台里,这类插件最好不要把数据处理逻辑写得含含糊糊。
我最后的做法很简单:新增一份 docs/PRIVACY_POLICY.md,推到公开的 GitHub 仓库,然后直接用公开链接作为隐私政策 URL。
这不算多“品牌化”,但对个人开发者来说特别省事:
不用单独搭站 链接稳定 内容可版本化 后面更新也方便
后台有一项会问是否访问、收集或传输个人信息。我的选择是“是”。原因也不复杂,不是为了把问题说重,而是这个插件确实会处理用户网页文本,并且支持用户本地保存配置和 Key。既然真实情况是这样,那就把逻辑交代清楚,别为了显得轻巧硬选“否”。

我在 Edge 开发者后台是怎么一步步发布的
真正进后台以后,流程反而没有想象中复杂。
第一步是创建新扩展。这里就是先建一个草稿壳子,后面程序包、属性和商店资料都会挂在这个草稿上。
第二步是上传 ZIP。后台会自动读取扩展名称、版本号、权限和支持语言。如果程序包状态变成“已完成”,说明结构和清单基本没问题。
第三步是设置可用性。这次我是公开发布,所以直接保留了默认值:公用、全部市场。除非你是灰度测试或者只想私下分发,不然一般不用折腾这一层。
第四步是填属性。我这里主要补了类别、隐私政策 URL、网站 URL 和支持邮箱。类别我选的是“高效工作”,因为这个插件本质上确实是在提高网页阅读效率。
第五步是做 Store 一览。这里至少要补全一门语言的展示信息。我最后补的是英语(美国)描述、一张商店 Logo 和一张截图。为什么先写英文?因为平台识别出的默认语言项里就有英语,顺着它补最省事。
第六步是写认证说明,也就是给审核员看的那段备注。这里千万不要偷懒。我写的核心信息就几个:插件不需要登录账号即可测试,默认 Google 模式可以直接使用,DeepSeek 只是用户可选的增强模式,浏览器内部页面比如 edge:// 本来就不支持。把这些说清楚,比一句“请审核”有用得多。

商店截图这件事,我为什么没去截后台
这次我最后选的商店截图,是插件设置页。
原因很简单,这张图本身就已经能说明很多东西:它不是一个只有单按钮的脚本插件,它支持多翻译引擎,支持语言切换,支持术语表和风格控制,说明这个项目已经有比较完整的产品思路了。
而且设置页截图有一个额外优点:信息干净。相比之下,开发者后台截图虽然“过程感”强,但很容易把注意力带偏。对读者来说,真正有价值的是你做了什么、怎么思考的、怎么解决问题的,不是你后台页面长什么样。
所以如果是写文章,我更倾向于用产品截图配合自己画的流程图,而不是把后台一页页截图堆上去。
这次发布之后,我对这个项目有三个更明确的认识
第一,它特别适合轻量发布路径。它本来就是一个完整的 MV3 扩展,所以最合理的动作就是保持结构清晰、打干净的 ZIP、补齐商店材料,而不是强行再加一整套工程壳。
第二,它真正的价值不是“翻译”,而是“阅读不断线”。现在回头看,我觉得这个插件最值得讲的地方,不是接了哪个 API,而是它围绕阅读过程补了很多细节:对照、懒加载、术语、自定义风格、恢复原文。这些东西放在一起,才让它像一个真正能长期用的工具。
第三,审核员最怕的是看不懂你的插件怎么测。如果你的插件依赖账号、隐藏入口或者复杂授权,但你又没解释,审核过程就会变得很被动。所以认证说明这一步,真的值得单独花几分钟把逻辑写直白。
写在最后
我做这个插件,最初真的只是想解决自己看网页时的一个小痛点:别再为了翻几段英文,不停地切窗口、复制、粘贴、找回上下文。
但等我把它做完、整理好、再一步步送进 Edge 商店审核队列之后,我反而更确定一件事:一个插件从“能跑”到“能发布”,中间隔着的不是几次按钮点击,而是你有没有把它当成一个真正的产品看。
你得想明白它到底解决什么问题,核心体验是什么,权限和数据流是不是说得明白,审核员能不能看懂、能不能测通。把这些事情想透了,发布这件事其实就没有那么玄。
插件安装链接:(QuickTranslate - 网页即时翻译)
(https://microsoftedge.microsoft.com/addons/detail/quicktranslate-%E7%BD%91%E9%A1%B5%E5%8D%B3%E6%97%B6%E7%BF%BB%E8%AF%91/cokgionhaabkphagnhlenfadepcdpdac)
项目开源地址:https://github.com/Julian-cloud-max/translation
觉得有用请点个赞或start支持一下!
夜雨聆风