dsh-plugin-market-zh:DSH 插件市场中文本地镜像

前言

在 DSH 中接入插件索引源后,常见的问题是索引里的大部分内容是英文,难以判断源接得对不对、插件选得好不好。如果有一个本地镜像,把标题、分类、标签和描述补成中文,就能在「插件 → 发现」里直接用中文浏览。

dsh-plugin-market-zh 就是为此设计的一个插件。它不改变上游索引,只在本地生成中文镜像,对已存在中文的内容不做覆盖,仅补充缺失的部分。安装后,DSH 的「发现」页会出现多个中文市场入口,默认内置 6 个公开索引源。

它是什么

dsh-plugin-market-zh 是一个客户端插件,由维护者 shwili 开发。它的核心作用是:为多个 DSH 插件市场索引源,在本地生成机翻的中文镜像,直接显示在「插件 → 发现」里。

插件通过 Host 服务的 HTTP 路由,把每个上游索引映射为本地 JSON 接口,并在「发现」页注册为市场来源。它支持聚合多个来源、去重合并,首次启用时会并行预取索引,再逐条补齐中文。

核心功能

本地镜像路由

插件为每个上游索引开一条本地路由:

  • GET /plugin-market-zh/index/<id>.json 返回单个来源的中文镜像(id 是上游 URL 的 SHA-256 前 10 位)
  • GET /plugin-market-zh/index.json 作为第一个来源的别名(兼容旧地址)
  • GET /plugin-market-zh/all.json 返回所有来源聚合去重后的中文市场

补中文,不覆盖中文

  • 插件包名保留原文
  • 索引里已有的中文原样保留
  • 只有缺中文的标题、分类、标签、描述才走机翻

聚合去重

插件额外注册一个「全部索引源 · 中文」市场,把各来源按包名合并,同一插件的版本取并集,重复来源只留一份。聚合按包名去重,但各目录自己的分类体系会保留。

零配置可用

默认内置 6 个公开索引源,启用后自动注册为市场来源。停用或卸载时自动移除。如需添加更多源,可在「发现 → 市场菜单 → 管理索引来源…」里手动添加 sources[].mirrorUrl。

安装与启用

  1. 克隆插件到本地任意目录:
git clone https://github.com/shwili/dsh-plugin-market-zh.git
  1. 在 DSH profile 的 package.json 里挂上这个包,并加进 bundles(以 Windows 路径为例,换成你的实际路径):
{
  "dependencies": {
    "dsh-plugin-market-zh": "link:D:/path/to/dsh-plugin-market-zh"
  },
  "dsh": {
    "profile": {
      "bundles": [
        // ...原有条目
        "dsh-plugin-market-zh"
      ]
    }
  }
}
  1. 重启 DSH,在「设置 → 插件」里启用。插件通过 inject 等待 webServer 与 pluginMarket 两个 Host 服务就绪后才激活。

典型用法

  1. 打开「插件」→「发现」。市场菜单第一个是「全部索引源 · 中文」,后面是每个来源各自的中文镜像。

  2. 首次启用会并行预取所有索引,再按来源顺序串行机翻。大来源(7,000+ 条)要几分钟,期间部分内容仍是英文,刷新后补齐。

  3. 诊断:访问 http://127.0.0.1:<端口>/plugin-market-zh/status.json,端口就是当前 Web GUI 的端口(例如 63499)。

  4. 如果自动注册市场来源失败(status.json 里 registered.sources=false),可以在「发现 → 市场菜单 → 管理索引来源…」里手动添加 sources[].mirrorUrl,或者聚合地址 http://127.0.0.1:<端口>/plugin-market-zh/all.json。

默认索引源

市场 上游索引
Awesome DSH Plugin 插件精选 · 镜像 https://dshmarket.com/index.json
DSH 插件索引 · 镜像 https://realoiyo.github.io/dsh-plugin-market/index.json
Bruce 的精选插件 · 镜像 https://bruc3van.com/dsh-plugins/index.json
DSH 插件健康索引 · 镜像 https://easonmws.github.io/dsh-plugin-health/index.json
vlln 的 dsh 插件 · 镜像 https://raw.githubusercontent.com/vlln/plugin-registry/main/index.json
贾维斯机制插件族(六插件) · 镜像 https://raw.githubusercontent.com/weft-audit/dsh-market/main/plugin_index.json

dshmarket.com 是 dsh-plugin-catalog 自带的索引域名;cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json 与 awesome-dsh-plugin.com/index.json 是同一份目录的镜像,内容相同,所以没有重复添加。默认用 dshmarket.com 是因为 jsDelivr 在本机网络下出现过间歇性连接失败。

配置项

插件在 cordis.patch.yml 的 plugin-market-zh 行里配置。常见配置项如下:

键 默认值 含义
sourceUrls 上表 6 个索引 要镜像的索引列表,按顺序注册为市场来源
aggregate true 是否额外注册「全部索引源」聚合市场
maxSources 8 最多镜像多少个来源
targetLanguage zh 目标语言,zh/zh-CN 映射为简体
provider bing 匿名翻译通道;google 在部分网络不可达
transport auto auto 优先 Host 服务、缺失时直连;也支持 service、direct
translateTitles false 是否翻译插件标题(默认保留包名/品牌名)
autoTranslate true 后台继续翻译未命中的描述
warmupOnStart true 启动预取完成后立即开始后台翻译
prefetch true 启动时预取所有索引
autoRegister true 自动把镜像地址加入市场来源
removeSourceOnDispose true 停用/卸载时移除所有镜像来源

工作方式

  • 每个来源预取一次上游索引,校验格式 1,解析图标(相对路径按上游 URL 解析;http: 图标因为镜像域名不同会被丢弃),再逐条补中文,生成内存文档并写入本地翻译缓存。
  • 翻译优先走 Host 的 translator 服务(匿名 Bing 通道);该实验服务未挂载时,直连同一个 Bing Edge 匿名端点。多个来源共用一条串行队列,避免同时压满匿名端点;失败后按冷却时间重试。
  • 缓存按来源分开:$DSH_HOME/cache/plugin-market-zh/translations-<hash>.json。已存在的中文不会被覆盖,只补缺失的部分。
  • 聚合用 mergeMarketDocuments:按包名去重,版本取并集,标题/描述优先保留中文,分类/标签/排序键加 s<slot>: 命名空间,避免不同目录的同名 id 冲突。
  • 只在本地起 HTTP 路由,不向模型发请求,不记录会话事件。翻译文本只发往匿名翻译端点,且只缓存在本地。

适用场景与注意

适合在 DSH 的「发现」页需要用中文浏览插件市场的场景。安装前应检查源码与许可证。由于使用匿名翻译端点,翻译质量有限,仅供浏览;安装插件前请以插件主页和仓库为准。

已知限制:

  • 机器翻译质量有限,仅供浏览;安装插件前请以插件主页和仓库为准。
  • 匿名翻译端点由第三方提供,可能限流或变更;失败时保留英文原文,并按冷却时间重试。
  • 上游索引会变,数字只是快照。
  • 首次启用后的后台翻译需要几分钟;大索引在慢网络下预取可能超时(内置市场服务对单个来源有 15 秒读取期限)。
  • 多个来源的文档同时驻留内存(原始 JSON 约 15–30 MB;聚合文档约 13 MB),内存占用高于单个来源。
  • 汉化来源之间仍有重叠;聚合按包名去重,但各目录自己的分类体系会保留。
  • 中文内容依赖 Web UI 当前语言为中文:镜像同时保留 en 原文,英文界面下显示原文。
  • 纯技术标识(例如 env ↔ JSON)会被翻译服务原样返回,此时保留原文而不生成中文。
  • 翻译缓存写在 $DSH_HOME/cache,删掉它等于清空已机翻的内容,需要重新翻。

目录结构

index.js            Host 侧入口:路由注册、来源注册、聚合、诊断
lib/source.js       抓取并校验上游格式 1 索引
lib/mirror.js       生成中文镜像文档
lib/translate.js    批量机翻(Host 服务 / Bing 直连)
lib/cache.js        本地翻译缓存
lib/dictionary.js   分类、标签、排序键的中文词表
lib/localized.js    LocalizedText 的读写工具
lib/runtime.js      单个来源的运行时:预取、文档、缓存、后台补译
lib/aggregate.js    多来源按包名合并
cordis.patch.yml    插入一行 Host 插件配置
locale/zh.json      插件在市场里的中文标题与描述
locale/en.json      英文标题与描述
icon.svg            插件图标

总结

dsh-plugin-market-zh 在本地为多个 DSH 插件市场索引源生成中文镜像,让「插件 → 发现」页可以直接用中文浏览。它支持聚合去重、零配置启用,默认内置 6 个公开索引源。如果你在 DSH 中需要中文插件市场索引,这个插件可以作为补充。

目录页 | GitHub

羽毛球分组比赛记分
小程序二维码

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

Xiaoye