前言¶
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 路線:用展示層轉換換版本與覆蓋面,並保留代碼區與用戶輸入不被改寫的邊界。