Skip to content

dsh-auto-i18n

Verified

dsh-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, 中文简介就会显示。本插件就是自动补这两样东西。

翻译来源(三级回退,越靠前越优先)

  1. 作者原稿优先——如果包里已经有 zh-CN.json / zh_CN.json 这类作者写的中文, 直接拿来用,不送机翻(避免把作者的好译文再翻坏)。
  2. 宿主 translator 服务——用 DSH 自带的 ctx.get('translator')(匿名免费通道)。
  3. 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