dsh-plugin-chinese:为已安装 DSH 插件自动补中文简介

前言

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 时,中文简介才会正常显示。本插件自动补齐这两类缺口。

核心功能

翻译来源(两级回退)

  1. 作者原稿优先:若包内已有 zh-CN.json、zh_CN.json 等作者提供的中文,直接采用,不再机翻。
  2. 宿主 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 一致。

  1. 安装包:
npm install dsh-plugin-chinese
  1. 在 profile 的 cordis.patch.yml 中插入,使插件随宿主加载:
- insert:
    - id: auto-i18n
      name: 'dsh-plugin-chinese'
  1. 重启 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye