前言¶
DeepSeek Harness(DSH)内置语言目前主要是简体中文(zh)和英文(en)。在台湾地区日常使用时,常见问题是:主界面是简体,第三方插件各自带简体文案,语言包往往追不上新版本,界面上会出现「一半繁体、一半简体」或某次升级后翻译静默失效。
dsh-zh-tw-ui 不走 DSH 语言列表里新增 locale、也不注册整包词典,而是在浏览器渲染层把已经出现在页面上的简体中文转成繁体中文(台湾用词)。下面介绍它的定位、工作原理,以及如何从仓库安装到 desktop / web profile。
这是什么¶
- 名称:
dsh-zh-tw-ui(npm 包名与仓库同名) - 维护者:linmino
- 版本(package.json):0.1.0,许可证 MIT
- 分类:社区目录归类为「趣味换装」——本质是界面呈现层的本地化,不改变 DSH 核心逻辑
- 一句话:在 Web / Desktop 客户端,用 DOM 文本转换(OpenCC + 少量覆盖表)把整页已渲染文案转为繁体台湾用语,包含 DSH 本体与第三方插件在界面上显示的简体字串
设置里仍可选 Settings → General → Language: 中文 (Simplified);底层 locale 保持 zh,屏幕上看到的是转换后的繁体。README 用下面方式说明这种「表里不一」是刻意设计,以便移除其他语言包后界面仍是中文、仍有内容可转:
Settings -> General -> Language: 中文 (Simplified) <- the app's own locale
What you actually see: 繁體中文(台灣) <- converted on screen
核心功能¶
覆盖范围¶
按项目 README 中的目标(G1–G5),插件侧重:
- 整页界面:DSH 自带文案、第三方插件文案,以及后续动态插入的内容(流式输出、面板更新等),在 DOM 层统一处理。
- 与 DSH 版本解耦:不声明
@deepseek-ai/*peer,不 patchLocaleRuntime,不注册词典 namespace,因此不依赖 DSH 某一版的内部 API 形状。 - 可逆、可审计:提供 runtime 开关、覆盖表、跳过标记(见下文安全边界);安装脚本会备份 profile 相关文件。
非目标(README 明确写出):不是语言包;不做英文翻译、不调用模型;不改写已持久化存储的数据;仅 Web / Desktop 客户端(TUI、无 DOM 的 profile 不适用);canvas 绘制文字、跨域 iframe 不处理。
转换机制¶
页面上的文本节点大致经以下路径(README 图示):
screen text → DOM text node → OpenCC cn→twp → override table → 写回 DOM
↑
└── MutationObserver:新增节点 / 文本变更时重跑
- 引擎:OpenCC
cn → twp(大陆简体 → 繁体,含台湾词汇),例如 设置→設定、网络→網路、软件→軟體、插件→外掛 等。 - 覆盖表:
src/convert.mjs中的DEFAULT_OVERRIDES修正 OpenCC 未覆盖或非台湾习惯用语(如 只讀→唯讀、超時→逾時、許可權→權限)。 - 文档语言:将
<html lang>设为zh-Hant-TW,便于浏览器选用台湾字形。 - 性能与 React:按文本节点 memo;无汉字则跳过;仅在实际变化时写回,并记录自身写入以避免与 React 来回震荡。
安全边界:哪些内容不会被改¶
复制代码、编辑输入应与未安装插件时一致。README 表格摘要如下:
| 对象 | 行为 |
|---|---|
<code> <pre>、CodeMirror / Monaco / xterm 等 |
子树与属性不转换 |
<input> <textarea> 等 |
仅可转换 placeholder / title;用户输入不碰 |
contenteditable |
不转换 |
<script> <style> <canvas> <iframe> 等 |
不转换 |
带 data-zh-tw-skip 或 translate="no" |
不转换 |
| 无汉字的字串 | 原样通过 |
与其他繁体方案的差异(背景)¶
README 在 2026-10-13 核对过若干社区方案:词典类往往盖不全 namespace 且缺键时回退到简体;patch 核心的包可能在 DSH 升级后静默失效;peer 范围过窄会导致启动时被 compatibility gate 跳过整包。本项目 trade-off 是:只做展示层转换,换得版本独立与第三方插件可见文案一并处理;展示层局限(例如已存进数据库的简体、canvas 内文字)见仓库 README 的 Limitations 一节。
同功能的替代之一 README 提到 dsh-multi-lang-ui;本项目刻意保持「仅 DOM 转换、无词典同步」的单职责体量。
安装与启用¶
README 写明:当前推荐路径是从本仓库安装(npm 发布小节在资料中已截断,此处不展开未完整出现的命令)。
在已具备 Node.js 的环境下,按仓库说明执行:
git clone https://github.com/linmino/dsh-zh-tw-ui.git
cd dsh-zh-tw-ui
node install.mjs --profile desktop
--profile desktop为默认;Web 专用 profile 使用--profile web。install.mjs会做四件事(均可通过uninstall.mjs回滚方向还原):备份 profile 的package.json与cordis.patch.yml(*.zh-tw-ui.bak);把dsh-zh-tw-ui加入dsh.profile.bundles;将 locale 行的preference设为zh;把 profile 下node_modules/dsh-zh-tw-ui链接到本目录。脚本不运行包管理器,不会重算整个 profile 依赖树。
安装后必须重启 DeepSeek Harness——新 bundle 在启动时组合,仅刷新页面不够。
卸载方向可使用 package.json 中的脚本:
node uninstall.mjs --profile desktop
(具体参数与 desktop/web 与安装时一致。)
典型用法¶
- 完成上述安装并重启 DSH。
- 在 Settings → General → Language 选择 中文 (Simplified)(或与安装脚本写入的
zhpreference 一致)。 - 打开 Web UI 或 Desktop 客户端,确认菜单、设置、已安装第三方插件在页面上的简体文案显示为繁体台湾用语。
- 若某块 UI 不应被转换,在对应 DOM 上按 README 使用
data-zh-tw-skip或translate="no"(需插件或页面支持该标记)。
无额外「调用 API」步骤;转换在客户端注入逻辑中自动进行。
适用场景与注意¶
适合谁
- 在台湾或习惯繁体(台湾)用语的开发者,希望 DSH Web / Desktop 界面统一为繁体,且不想维护随 DSH 版本更新的巨型词典。
- 安装了大量简体文案的社区插件,词典类语言包无法覆盖插件 namespace 时,仍希望屏幕上看到繁体。
务必知晓
- 插件随 当前 DSH profile 的 bundle 机制 加载,与 DSH 进程同一前端运行环境;安装前应阅读 GitHub 仓库 源码与 MIT 许可证,自行评估是否纳入工作环境。
- 转换发生在展示层:聊天记录、配置里已存的简体不会因此改写;导出数据、API payload 仍以底层 locale 与原始存储为准。
- 不支持 TUI、无 DOM 场景;canvas、跨域 iframe 内文字不会转。
- 仅做简体→繁体(台湾),英文界面不会因此被翻译。
DSH 生态强调「一切皆插件」;插件目录站点 SkillHub 上的 linmino/dsh-zh-tw-ui 为社区索引,与 DeepSeek / 幻方无官方从属关系。
结尾¶
若你的痛点是「语言包盖不全、升级后静默失效、第三方插件仍是简体」,可以评估 dsh-zh-tw-ui 的 DOM + OpenCC 路线:用展示层转换换版本与覆盖面,并保留代码区与用户输入不被改写的边界。