
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
dsh-auto-translate
Advanced tools
Zero-token on-demand translation for the DeepSeek Harness web GUI: hover a block to translate it in place, drag-select text for a popup or in-place translation. Never auto-translates the page.
悬停一块,就地翻成中文。不自动翻页、不花 token、文本不出本机。
真机三连 —— 同一段文字,真鼠标在三个位置(npm run capture:demo 可复现;画面是脚本注入的合成舞台,不含任何会话内容)
① 鼠标停在空白处 —— 原文不动

② 鼠标停在文字上约 0.6 秒 —— 就地换成中文

③ 移开后再停一次 —— 换回原文

光标箭头是
capture-demo.mjs画上去的标记(headless 截图拍不到系统光标),位置是真鼠标当时的坐标, 悬停本身也是真实鼠标事件(page.mouse.move)。
| 本插件 | 常见的自动翻译插件 | |
|---|---|---|
| 触发 | 悬停 / 框选,按需 | 页面加载即自动翻 |
| 成本 | 零 token(端侧 WASM 或免费引擎,不经模型) | 多数走模型 / 云 API,按量计费 |
| 隐私 | 默认不出本机(只有首次下模型走镜像) | 文本发往第三方服务 |
| 副作用 | 不碰页面:跳过输入框、代码块、编辑器、自己的面板 | 常会连正在输入的内容一起翻 |
如果你要的是「整页 + 思考链自动翻成 8 种语言」,那 dsh-think-translate 更合适 —— 它是另一种取舍(覆盖面换自动触发与云端引擎)。本插件选的是按需 + 零成本 + 不出本机。
# 一条命令(npm)
dsh plugin --profile web add dsh-auto-translate
# 然后重启 dsh web,再刷新浏览器页面
左下角出现半透明「译 xx」小圆点即成功;找不到圆点时按 Ctrl+Alt+T 呼出面板。
# GitHub
dsh plugin --profile web add github:gst20060726/dsh-auto-translate
# 本地目录(开发 / 离线)
dsh plugin --profile web add link:/absolute/path/to/dsh-auto-translate
# 本地 tgz:先 npm pack 得到 dsh-auto-translate-<版本>.tgz,再把文件发给对方
dsh plugin --profile web add /对方/路径/dsh-auto-translate-0.4.2.tgz
# Gitee 镜像(国内可推)
dsh plugin --profile web add 'git+https://gitee.com/nysjn/dsh-auto-translate.git#<commit>'
三条发布路线都有现成脚本:powershell -File scripts/publish.ps1 -Target tgz|zip|bundle|gitee|github|npm
(tgz/zip/bundle 全本地、无需账号;gitee/github/npm 会交互式问凭据,脚本不保存)。
包内不含约 74MB 的 ONNX Runtime wasm:首次使用时宿主端从 CDN 取回并缓存。要完全离线,先
npm run fetch-vendor再打包。
| 操作 | 效果 |
|---|---|
| 悬停约 0.6 秒 | 该块就地换成译文;移开再悬入再停 → 换回原文(可反复切换) |
| 拖选文字后松手 | 翻译选区:默认弹浮层(原文 + 译文,可复制);面板可改成就地替换(点击页面/按 Esc 还原)。大段选区会按句子分块逐段翻译,浮层里边翻边显示「正在翻译 i/n 段…」 |
Alt + 悬停 | 立即翻译/切换,不等 0.6 秒 |
Ctrl+Alt+T | 呼出/关闭设置面板(找不到圆点时用它) |
Ctrl+Alt+H | 显示/隐藏左下角圆点 |
Ctrl+Alt+P | 暂停/恢复翻译(暂停会还原原文) |
面板按「常用 / 触发与框选 / 引擎与模型 / 高级 / 诊断与重置」分组折叠(默认只展开「常用」,顶部可一键展开/折叠全部,还能切「窄面板」)。面板里还有:目标语言、悬停延迟、由谁翻(本机离线 / 在线免密钥 / 自定义端点)、框选方式、最少选取字数、框选上限(0 = 不限)、在线端点、拉丁源语言、下载/预热、切到本机、重试、全部原文/译文、还原原文、清缓存、使用指南、保存/复制诊断。
| 内容 | |
|---|---|
| 能翻 | DSH 界面本体(外壳、侧栏、按钮、对话框、消息、工具输出)+ 其它插件渲染出来的内容 + Web Component(shadow root)内部的文字 |
| 不翻 | 输入框、code/pre(除非打开「也翻译代码」)、contenteditable、CodeMirror/Monaco、本插件面板自身 |
| 翻不到 | DSH 页面之外的界面:别的浏览器标签页、其它网站、桌面原生 App。插件只被注入到 DSH 的 Web 界面里,拿不到别的标签页 —— 那类需求要用浏览器扩展/用户脚本 |
单次框选默认最多翻 4000 字符(面板可改,0 = 不限;另有 60000 字符硬兜底);超出会明确提示「已按上限只翻前 N 字符」。
0.4.0 起引擎只决定「由谁来翻」,不决定触发方式(触发恒为按需)。
| 引擎 | 是否花 token | 是否出网 | 限制 |
|---|---|---|---|
| 本机离线(推荐,默认) | 否 | 仅首次下模型 | 首次约 425MB(en↔zh);磁盘与内存占用 |
| 在线免密钥 | 否 | 每次翻译发往 MyMemory | 匿名每日额度有限,可能 429 |
| 自定义端点 | 否 | 发往你自己的服务 | 需自建(如 LibreTranslate) |
| 语向 | 模型 | 体积 | 备注 |
|---|---|---|---|
| en → zh | Xenova/opus-mt-en-zh | 200MB(encoder) + 225MB(decoder) | 使用 fp32:该仓库的量化版含 MatMulNBits/DequantizeLinear,在本机 ONNX Runtime 上会触发 TransposeDQWeightsForMatMulNBits Missing required scale 而无法建会话 |
| zh → en | Xenova/opus-mt-zh-en | 同上 | 同理使用 fp32 |
| ja/ko/其它 → zh | Xenova/nllb-200-distilled-600M | 约 600MB | 覆盖 200 语言,按需下载,较慢 |
/dsh-auto-translate/model-v2/...),宿主端带断点续传 + 12 次重试并落盘缓存,避免浏览器直连镜像时的跨域与中断问题。$DSH_HOME/dsh-auto-translate/models。$DSH_HOME/dsh-auto-translate/ort-cache;要完全离线运行,先执行 npm run fetch-vendor 把它们落到本地 vendor/ort/。| 现象 | 处理 |
|---|---|
| 圆点找不到 | Ctrl+Alt+T 呼出面板(会自动显示圆点并修正跑到屏外的位置) |
| 翻译不生效 | 看面板状态行的计数:扫描 / 入队 / 已译 / 跳过语言 / 失败。若「已译」一直为 0,看错误框 |
| 本机模型加载失败 | 点「保存诊断到本机」,把 ~/.dsh/dsh-auto-translate/diagnose-*.json 交给维护者 |
| 进度条卡住 | 点「重试」;宿主缓存已断点续传,通常第二次即通 |
| 想彻底重置 | 面板「清缓存」+ 浏览器站点数据清理(模型在 Cache Storage) |
dsh-auto-translate/
|- index.js # 宿主半:静态资源路由 + 模型同源代理 + 诊断落盘
|- client.js # 浏览器半:扫描/翻译/悬停切换/设置面板
|- vendor/
| |- worker.v5.js # Web Worker:SharedWorker 单实例推理、按语向懒加载
| |- transformers.esm.v2.js # transformers.js 浏览器 ESM(ORT 引用已指向本地)
| |- ort/ # ONNX Runtime 的 wasm 与加载器
|- scripts/fetch-vendor.mjs # 重新生成 vendor/(仓库可不带大文件)
|- scripts/verify-browser.mjs # 真浏览器验收(可选,见下)
|- demo/ # README 用的图:hover-flow.svg 自制示意;panel.png 真机截图裁剪
|- package.json / cordis.patch.yml
/dsh-auto-translate/vendor/*(静态)、/model-v2/*(模型代理+缓存)、/diag(诊断落盘)。npm test # 47 项:契约 + i18n + jsdom E2E(不需要浏览器)
npm run verify:browser # 真浏览器:面板真实布局/是否滚动/是否裁字 + 真实鼠标悬停与框选
verify:browser 用你本机的 Edge/Chrome 起独立临时 profile(不碰你在用的浏览器数据),需要 puppeteer-core
(DSH 配置目录里通常已有;没有就 npm i --no-save puppeteer-core)。它专治 jsdom 测不出的问题:
没有布局引擎就发现不了「面板装不下要滚动」「文字被裁」。输出截图 panel-preview.png 与 JSON 报告,
任一项不通过就以非 0 退出。
README里的demo/panel.png就是这个脚本的产物,再裁掉四周 16px 的页面边带(只留插件面板本身, 不带你自己的会话内容)。整页截图只留本机demo/raw/(已 gitignore):那里面有真实会话。悬停三连(
demo/hover-1|2|3-*.png)由npm run capture:demo生成:脚本往页面注入一块白底舞台 +一个对话块+一个光标标记 —— 这样「光标在空白处」那帧里的空白也是注入的,可以按舞台整块裁切 (560×150)而不带出真实会话。光标位置取真鼠标当时的坐标(系统光标截不到,箭头是画的标记)。 出图时把引擎切成了在线免密钥(否则要等 425MB 本机模型下载);界面表现与引擎无关,只是「由谁翻」不同。
0.1.5-rc.1 及以上(profile web)。MIT
FAQs
Zero-token on-demand translation for the DeepSeek Harness web GUI: hover a block to translate it in place, drag-select text for a popup or in-place translation. Never auto-translates the page.
We found that dsh-auto-translate demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.