dsh-auto-i18n
Verifieddsh-auto-i18n · v1.1.1 · MIT
Automatically gives every installed DSH plugin a Chinese description — the plugin list stays in Chinese without renaming anything.
Install
dsh plugin add dsh-auto-i18n Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Readme
dsh-auto-i18n
自动给每个已安装的 DSH 插件补上中文功能简介。
插件名一律保持原样——只写 description,绝不写 title。DSH 在缺少 title 时会回落到
package.json 的 name,所以显示名永远是包名或作者自带的中文名,方便按名字查找。
安装
已发布到 npm:dsh-auto-i18n
# 装进当前 DSH profile(desktop)
npm install dsh-auto-i18n
装好后需要在 profile 的 cordis.patch.yml 里插一行让它随宿主加载:
- insert:
- id: auto-i18n
name: 'dsh-auto-i18n'
重启 DSH 即生效,之后新装插件会自动补中文简介,无需再手工干预。
它做什么
DSH 读取插件显示信息的链路是:
插件页 → 宿主 readPluginMeta(specifier)
→ 读 <pkg>/locale/en.json
→ 扫同目录所有 *.json 当语言包
→ 前端按当前界面语言取对应字段
只要包里有 locale/zh.json 且 package.json 的 exports 暴露 ./locale/*.json,
中文简介就会显示。本插件就是自动补这两样东西。
翻译来源(三级回退,越靠前越优先)
- 作者原稿优先——如果包里已经有
zh-CN.json/zh_CN.json这类作者写的中文, 直接拿来用,不送机翻(避免把作者的好译文再翻坏)。 - 宿主 translator 服务——用 DSH 自带的
ctx.get('translator')(匿名免费通道)。 - MyMemory 免费接口——translator 不通时的兜底。
译文落地前会过一遍术语纠错表(GLOSSARY),修正机翻常译错的专有名词
(DeepSeek Harness、Web 界面、豆包 等)。
触发时机
| 时机 | 说明 |
|---|---|
| 启动后 4 秒 | 装完重启即自动补一遍 |
| 每 30 分钟 | 定时巡检(intervalMinutes 可调) |
| 插件变动后 1.5 秒 | 监听 plugin-manager/changed,新装/升级立刻补 |
新装插件自动生效,不需要手工跑脚本。
生效条件(重要)
Node 会缓存 package.json。因此分三种情况:
| 包的状态 | 写入后 |
|---|---|
已声明 ./locale/*.json 导出,只是缺文件 |
刷新页面即生效 |
完全没有 exports 字段(旧式解析) |
刷新页面即生效 |
有 exports 但没有 locale 映射,被自动补上 |
需重启一次才被解析器看到 |
第三种情况会在 report.json 的 restartNeeded 里列出。
配置
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
true |
关掉后不再扫描与翻译 |
intervalMinutes |
30 |
定时扫描间隔(分钟) |
gapMs |
1200 |
翻译请求间隔(毫秒),避免被限流 |
状态文件
都在 $DSH_HOME/auto-i18n/:
cache.json— 已翻译过的原文 → 译文,避免重复请求report.json— 最近一次扫描的明细(scanned / translated / skipped / failed / restartNeeded)auto-i18n.log— 出错或有大变动时记一行
安全约束
- 绝不写 title,插件名永不被改
- 写入用「先写临时文件再 rename」,断开 pnpm 硬链接,不污染 pnpm store
- 只在
locale//locales/下动手,不改包的其他文件 - 原文已是中文的包直接跳过,不送机翻
开发
node test.mjs # 需要能解析 @deepseek-ai/schemastery
测试在临时目录造 6 个假插件包,覆盖:有导出缺文件 / 有 exports 缺映射 / 已有中文 / 有原版中文名 / 无 exports / 原文即中文,断言「不写 title」「保留原版名」「exports 该补才补」「幂等」。
License
MIT