dsh-zh-tw-ui:在 DOM 層把 DSH Web 界面轉成繁體中文(臺灣)

前言

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),插件側重:

  1. 整頁界面:DSH 自帶文案、第三方插件文案,以及後續動態插入的內容(流式輸出、面板更新等),在 DOM 層統一處理。
  2. 與 DSH 版本解耦:不聲明 @deepseek-ai/* peer,不 patch LocaleRuntime,不註冊詞典 namespace,因此不依賴 DSH 某一版的內部 API 形狀。
  3. 可逆、可審計:提供 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 與安裝時一致。)

典型用法

  1. 完成上述安裝並重啓 DSH。
  2. 在 Settings → General → Language 選擇 中文 (Simplified)(或與安裝腳本寫入的 zh preference 一致)。
  3. 打開 Web UI 或 Desktop 客戶端,確認菜單、設置、已安裝第三方插件在頁面上的簡體文案顯示爲繁體臺灣用語。
  4. 若某塊 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 路線:用展示層轉換換版本與覆蓋面,並保留代碼區與用戶輸入不被改寫的邊界。

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

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

小夜