dsh-client-locale-ru
Community Russian localization for the DeepSeek Harness (dsh) web UI.
It registers the ru language through the public locale API — locale.addLanguage() + locale.register() — so Русский appears in the language picker next to English and 中文.
Coverage: 73 namespaces, 3477 strings (ru-dicts.json) — verified against the client's own en dictionaries (dsh 0.2.1-rc.5): 0 missing keys.
Quick start
# install into the profile you use: web UI or the desktop app
dsh plugin --profile web add dsh-client-locale-ru
dsh plugin --profile desktop add dsh-client-locale-ru
Restart the client (the web UI only needs a page reload) and pick Русский in Settings → Language. Nothing else to configure — the plugin registers the ru locale with all 3477 strings.
No npm access? Take dsh-client-locale-ru-0.2.3.tgz from Releases, unpack it, and install the folder: dsh plugin --profile web add <path-to-folder>.
Install
The plugin is a dsh bundle: it declares dsh.bundle.patch (the loader patch that inserts the locale-ru row) and dsh.client (the browser module). Install it into a profile:
# from a local checkout of this repository
dsh plugin --profile web add /path/to/dsh-client-locale-ru
# or from npm
dsh plugin --profile web add dsh-client-locale-ru
dsh desktop (the Electron app) manages its own profile and has its own CLI; install it the same way with that CLI, then restart the app. In the Web UI the equivalent operation is plugin_manager → install_bundle with this directory as the target.
After installing, restart the client (or reload the page) and pick Русский in Settings → language.
How it works
client.js is a browser module:
window.__ModuleLoader__.load({
id: 'dsh-client-locale-ru',
factory(require) {
const RU_DICTS = { /* namespace -> key -> Russian text */ };
return {
inject: ['locale'],
apply(ctx) {
ctx.locale.addLanguage({ id: 'ru', label: 'Русский', fallback: 'en' });
for (const [ns, dict] of Object.entries(RU_DICTS)) ctx.locale.register(ns, 'ru', dict);
},
};
},
});
The dictionary is embedded as a literal because the browser module table cannot read files from disk.
Editing the translation
- Edit
ru-dicts.json(namespace → key → Russian text). - Regenerate the browser module:
node make-client.js(ornpm run build). - Restart the client.
ru-dicts.json is { "<namespace>": { "<key>": "<text>" } }, where the namespace matches the one a client plugin registers (const NS = "…" or locale.register(<var>, …)).
Status
Any key missing from the dictionary falls back to English, so partial coverage degrades gracefully.
The translation follows the English sources of dsh 0.2.1-rc.5, using the Chinese strings as a hint where English is ambiguous; an audit against the shipped en dictionaries reports 0 missing keys.
Two parts of the desktop app are not covered, because they are not dsh strings: the native application menu (Application, Edit, …), the tray menu and the quit/update dialogs belong to the Electron shell, which ships its own English/Chinese dictionary (resources/app.asar/lib/main.js). We have asked upstream to add ru there — see discussion #8824.
Credits
The dictionary combines original translations with entries adopted from @ragnoryok1/dsh-client-locale-ru (MIT, © Ragnoryok1) — 493 strings merged on 2026-10-04. Everything else is our own translation.
License
MIT — see LICENSE. The Russian dictionaries are a community translation of strings shipped with DeepSeek Harness (MIT, © DeepSeek), and include portions of @ragnoryok1/dsh-client-locale-ru (MIT, © Ragnoryok1).
No comments yet. Be the first to write one.