官方中文界面词条
Official Chinese UI strings
别名:汉化、语言设置、中文界面、locale 机制、zh 词条
DSH 本体自带的中文界面:`@deepseek-ai/dsh-client-locale` 用「命名空间 × 语言」字典提供词条,宿主把语言偏好存在 `$DSH_HOME/settings.yaml`,切换即时生效、不用重载页面。想找汉化的第一步是确认语言设置,不是装插件。
一句话
中文界面不是装出来的,是 DSH 本体自带的:它是一套「命名空间 × 语言」的字典注册表加一个语言偏好。所以「我的 DSH 是英文的」这个问题,正确解法是去设置里切语言,而不是去找汉化包——这正是本站要抢在第三方汉化教程之前说清的一件事。
机制
实现(@deepseek-ai/dsh-client-locale,实测 0.1.0-rc.6)里几个关键常量:
| 常量 | 值 | 含义 |
|---|---|---|
LOCALE_IDS | ["zh", "en"] | 出厂就是这两套语言 |
LOCALE_SETTINGS_NAMESPACE | "locale" | 偏好落在这个 settings 命名空间 |
LOCALE_PREFERENCE_FIELD | "preference" | 字段名 |
FALLBACK_LOCALE | "zh" | 兜底语言是中文 |
COMMON_NS | (共享命名空间) | 跨功能的通用词条 |
SETTINGS_NS | "settings.locale" | 语言这一行自己也是词条(language.title) |
偏好落在 $DSH_HOME/settings.yaml 的 locale.preference(宿主 settings,不是 profile 层)。没写这个字段时,浏览器自己的语言作数:按主语言子标签匹配(zh-Hans-CN → zh、en-GB → en),匹配不上就用 zh,而且这个暂定值会在插件激活后被宿主设置实时替换。
查找链(实现注释口径):当前语言的命名空间 → 该命名空间的 zh 回落 → 共享 common 命名空间(当前语言,然后 zh)→ 最后回落成键名本身。最后那一步是排错重点:界面上莫名出现 some.key.name 这种点分文字不是 bug,是词条没注册——先去找对应插件的字典,而不是重装。
语言怎么切
界面上是设置里的一行:注册进 settings.general.item 槽,菜单项是「中文 / English」(language.title 在 zh 字典里就是「语言」)。切换即时生效、不用重载页面:字典变化通过 LocaleFace 的 subscribe 通知渲染路径重新取值,而 locale/change 事件只在真正换语言时触发(注册新字典不触发——这是有意避免启动期事件风暴)。切换后某处没变,说明那段文案不走 slot 渲染路径。
一个真实的坑:有些文案不跟着切
README 列了这条已知限制,值得按原文口径记下:设置行、侧边栏、问题作答器、模型选择使用 locale 席位(跟着切);其他包仍直接拥有静态文本;而在 slot 渲染路径之外、注册时就捕获的文案(例如命令注册表里的命令描述)会保持注册时的语言。
两个直接后果:一是「切成中文了但某处还是英文」可能是上游还没本地化,不是你配错了,别去覆盖它;二是给第三方插件补汉化的正确姿势是给上游字典提 PR,外层覆盖既不跟上游更新走,也修不了「注册时捕获」这一类。
与「第三方插件的中文化」的分工
分区 assets 里另有一条「第三方插件的中文化(占位 · 欢迎贡献)」:本词条管 DSH 本体自带的 zh 字典(你做的是确认/切换语言设置,现状已出厂),那条管第三方插件自己的字典(你做的是给上游 locales 提 PR,现状有缺口)。不要在外层覆盖别人的字典——既不跟上游更新走,也修不了「注册时捕获」这一类。
与其它东西的关系
| 关系 | 对象 | 说明 |
|---|---|---|
| 落在 | client/1 官方 Web UI | 它改的就是这个界面的文字 |
| 同层邻居 | theme/1 官方主题插件 | 一个管词条、一个管配色,都在「设置 → 通用」里 |
| 机制层 | concept/4 client 半端 | 字典是客户端半端插件提供的 |
| 相邻概念 | concept/2 profile | 语言偏好不在 profile 层,是全机共享的 settings |
未核实 / 未声明
locale字段写的是zh,不是zh-CN:实现里出厂的 id 就是zh/en(LOCALE_IDS),匹配也只按主语言子标签做;而分区文件写的是zh-CN。两者不是一个体系里的东西,本站按实现写locale: zh,差异如实记录在此。- 词条数量:本轮没有统计 zh 字典里到底有多少条,所以不给「汉化覆盖率」这类数字。
- 「服务端与客户端都用同一套命名空间」:分区条目的 blurb 这么写。本轮实际读到的注册调用都在客户端侧(
ctx.provide("locale", …)与ctx.slots.installLocale),服务端侧如何使用同一套命名空间的代码路径未核实,所以本词条不重复这个断言。 install不是一条可执行命令:它随 bundle 层出厂,没有dsh plugin add形式的安装命令,此字段写的是落点与偏好位置。- 远程浏览器:README 说 settings API 仅限回环请求,远程浏览器的语言选择只保留在进程内(不落盘)。上游自述,本轮未复现。
repo/ 许可证:取自该包package.json的repository.url(directory: packages/client/locale)与license: MIT;仓库根 LICENSE 本轮未读取。
谁引用了这一条
信息表
- assetType
- locale
- category
- appearance.locale
- install
- 内置:随客户端 bundle 自带,没有单独的安装命令;语言偏好写在 $DSH_HOME/settings.yaml 的 locale.preference
- locale
- zh
- provides
- 界面词条(zh / en 两套字典),走「命名空间 × 语言」注册表;`t()` 由 slot 系统注入,查不到键时回落 zh,再回落到键名本身
- repo
- deepseek-ai/deepseek-harness
- titleEn
- Official Chinese UI strings
- updatedAt
- 2026-10-02
标签:本地化、界面、设置、中文