前言¶
DeepSeek Harness(DSH)的插件页会展示每个包的功能简介。宿主读取元信息时,通常走 locale/en.json,前端再按界面语言选字段。不少社区插件只写了英文 description,且未提供 locale/zh.json,或未在 package.json 的 exports 里暴露 ./locale/*.json,界面上就会长期是英文。
手工给每个包装语言包成本高,也不利于新装插件后立刻可读。dsh-plugin-chinese 由 FragrantLotus 维护,面向「已安装插件列表要中文简介、插件名仍按原名检索」这一需求:只翻译并写入 description 的 zh,不改 title 与包名。
这是什么¶
dsh-plugin-chinese 是 DSH 生态中的一款插件(npm 包名 dsh-plugin-chinese,当前版本 1.2.0,MIT 许可证)。它在宿主加载后,扫描已安装的 DSH 插件,为缺少中文简介的包补上 locale/zh.json(必要时补 exports 映射),并通过内存注入让界面不必等重启也能看到中文说明。
插件名在列表中保持原样:DSH 缺少 title 时会回落到 package.json 的 name,本插件 deliberately 不写 title,只处理简介文案。
DSH 里中文简介为何常常缺失¶
README 里描述的读取链路如下:
插件页 → 宿主 readPluginMeta(specifier)
→ 读 <pkg>/locale/en.json
→ 扫同目录所有 *.json 当语言包
→ 前端按当前界面语言取对应字段
只有同时存在 locale/zh.json,且 exports 暴露了 ./locale/*.json 时,中文简介才会正常显示。本插件自动补齐这两类缺口。
核心功能¶
翻译来源(两级回退)¶
- 作者原稿优先:若包内已有
zh-CN.json、zh_CN.json等作者提供的中文,直接采用,不再机翻。 - 宿主 translator 服务:通过 DSH 的
ctx.get('translator');README 说明本机实测可走 Bing 匿名通道,无需 API key。
若 translator 不可用,对应插件记为「翻译服务不可用」并跳过,等下次巡检再试。译文写入前会经术语表 GLOSSARY 修正机翻易错的专有名词。
触发时机¶
| 时机 | 说明 |
|---|---|
| 启动后 4 秒 | 重启后自动补一遍 |
| 每 30 分钟 | 定时巡检(intervalMinutes 可调) |
| 插件变动后 1.5 秒 | 监听 plugin-manager/changed,新装或升级后补全 |
新装插件无需手工跑脚本。
两条腿:内存注入与写盘¶
内存注入(立刻生效)
宿主缓存插件元信息后,仅写文件可能要等到下次重读才变。本插件在启动数秒后包装 pluginPackages.metaOf、pluginManager.listBundles、pluginManager.listPlugins、pluginInventory.list 四个入口,把 zh 补进 meta.description;前端 resolveText() 从 { en, zh } 取中文。该层直接 readdir + readFile 读磁盘语言包,绕开 Node 对 exports 的解析缓存,与重启后的展示一致。
实现上需剥开 Cordis getTraceable() 的 Proxy(Symbol.for('cordis.original')),补丁打在真身及原型上,避免 shadow 副本导致网关看不到改动。每 60 秒探针调用 listBundles,统计带 meta.description.zh 的条数,区分「包装已挂上」与「界面真能读到中文」。
写磁盘语言包(长期生效)
同步写入 <pkg>/locale/zh.json;若包缺 locale 的 exports 映射会自动补上。卸载本插件后,已写入的中文文件仍保留。
生效条件与 restartNeeded¶
| 包的状态 | 写入磁盘后 |
|---|---|
已声明 ./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,不覆盖已有zh - 写入采用临时文件再
rename,并断开 pnpm 硬链接 - 仅修改
locale/或locales/下文件 - 原文已是中文的包跳过
- 插件禁用或卸载时通过
dispose()还原包装函数
已知限制¶
- 升级目标插件可能覆盖本插件写入的
locale/zh.json,下次巡检会重新补上。 - 作者后续自行添加中文简介时,本插件识别后跳过,不覆盖。
安装与启用¶
下面介绍 npm 安装与 Cordis patch 挂载,与 README 一致。
- 安装包:
npm install dsh-plugin-chinese
- 在 profile 的
cordis.patch.yml中插入,使插件随宿主加载:
- insert:
- id: auto-i18n
name: 'dsh-plugin-chinese'
- 重启 DSH。之后新安装的插件会在变动监听与定时巡检中自动补中文简介。
package.json 要求宿主 dsh 版本 >=0.2.0-rc.1。
典型用法¶
安装并 patch 后无需额外 CLI:打开 DSH 插件页,在界面语言为中文时查看已安装插件的简介是否出现 zh 文案。
需要排查时可查看 $DSH_HOME/auto-i18n/report.json 与 auto-i18n.log,确认哪些包被跳过、哪些需要重启后磁盘路径才完全生效。
维护者在仓库中提供自测入口(非最终用户必跑):
node test.mjs # 磁盘翻译路径
node test-inject.mjs # 内存注入路径
适用场景与注意¶
适合长期在 DSH 里安装较多英文简介插件、希望列表可读性更好、又希望插件名保持英文或原作者命名以便搜索的用户。
本插件会以当前 DSH 进程的权限读写各插件包下的 locale/ 文件,并调用宿主 translator;安装前应阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的环境与安全策略。DSH 社区插件目录(如 SkillHub 条目)为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-plugin-chinese 用「写盘 + 内存注入」两条路径,在不动插件名的前提下为已安装 DSH 插件补全中文功能简介,并兼顾作者已有中文稿与 translator 不可用时的跳过策略。若要查看分类与安装入口,可访问 SkillHub 目录页;实现细节与配置以 GitHub README 为准。
- 目录页:https://www.skillhub.cn/plugins/FragrantLotus/dsh-plugin-chinese
- GitHub:https://github.com/FragrantLotus/dsh-plugin-chinese