dsh-locale-ru
Manifest validRussian language for DeepSeek Harness: 2615 lines of web interface + 165 lines of shell (menu, tray, dialogs, login window)
dsh-locale-ru — русский язык для веб-интерфейса DeepSeek Harness
Клиентский плагин DSH: добавляет в веб-интерфейс язык «Русский» и словари перевода для всех пространств имён, которые поставляет DSH.
- 2615 строк в 58 пространствах имён — это все словари английского и
китайского интерфейса, извлечённые из установленного DSH
0.2.0-rc.2(locales/source-en.json). - Непереведённые строки (например, из более новой версии DSH) автоматически
остаются английскими: у языка объявлена цепочка отката
ru → en. - Плагин не содержит зависимостей и не требует сборки: браузерная половина —
один самодостаточный файл
lib/client.js.
Состав
| Файл | Назначение |
|---|---|
package.json | Манифест: dsh.client (браузерная половина), dsh.bundle (patch для установки как набора), exports["./client"] |
lib/index.js | Хостовая половина: пустой apply, нужна только чтобы у пакета была строка в Loader |
lib/client.js | Собранный браузерный бандл: определение языка + все словари (window.__ModuleLoader__.load) |
locales/ru.json | Исходник перевода: пространство имён → ключ → русский текст |
locales/source-en.json | Английский/китайский источник, по которому сделан перевод (для проверки и дообновления) |
locale/en.json, locale/ru.json | Отображаемые название и описание плагина на странице «Плагины» |
cordis.patch.yml | Patch-слой набора: вставляет собственную строку плагина |
tools/build-client.mjs | Собирает lib/client.js из locales/ru.json |
tools/verify.mjs | Автономная проверка: манифест, хостовая половина, загрузка бандла, регистрация языка и словарей, покрытие источника, совпадение подстановок {...} |
tools/install.mjs | Установка/удаление в профиле DSH одной командой |
tools/extract-dictionaries.cjs | Извлекает словари из установленного DSH (после обновления DSH) |
Установка
Плагин — обычный локальный модуль (не набор из npm), поэтому установка сводится к копированию папки в профиль и одной строке в пользовательском patch-файле профиля.
# из этой папки; по умолчанию профиль "desktop"
node tools/install.mjs --dry-run # посмотреть, что будет сделано
node tools/install.mjs # установить
Скрипт:
-
копирует пакет в
<DSH_HOME>\profiles\<профиль>\plugins\dsh-locale-ru; -
добавляет в
<DSH_HOME>\profiles\<профиль>\cordis.patch.yml(с резервной копиейcordis.patch.yml.before-locale-ru):- insert: - id: locale-ru name: './plugins/dsh-locale-ru/lib/index.js'
Путь внутри insert-строки разрешается относительно самого patch-файла, поэтому
pnpm install и зависимости профиля не нужны.
Вручную
# <DSH_HOME>\profiles\desktop\cordis.patch.yml — добавить в конец
- insert:
- id: locale-ru
name: './plugins/dsh-locale-ru/lib/index.js'
Из git (без архива и без npm)
Страница «Плагины» принимает git-адрес, tarball, абсолютный локальный путь или имя пакета: вставьте адрес репозитория в «Добавить плагин», и DSH установит пакет как набор, который потом можно включать и выключать там же.
Публикация собственного репозитория — tools\publish-github.cmd <адрес репозитория>:
скрипт добавит origin, запушит ветку main, поставит тег v1.0.0 и напомнит про
релиз с архивом. Репозиторий должен существовать и быть пустым; вход в GitHub
подтверждается в окне Git Credential Manager.
Включение языка
Настройки → Общие → Язык → «Русский». Выбор запоминается в настройках DSH.
Профильный HMR перечитывает конфигурацию сам, поэтому перезапуск хоста не нужен; если язык не появился — обновите страницу (F5).
Удаление
node tools/install.mjs --remove
Обновление перевода после обновления DSH
# 1. что изменилось в установленном DSH
node tools/extract-dictionaries.cjs --check
# 2. переизвлечь источник (при необходимости)
node tools/extract-dictionaries.cjs
# 3. дополнить locales/ru.json новыми ключами и пересобрать бандл
node tools/build-client.mjs
node tools/verify.mjs
Меню окна («Application» / «Edit»)
Это единственное место интерфейса, которое живёт вне веб-словарей, и оно разделено на две части:
| Часть | Кто рисует | Переводится плагином? |
|---|---|---|
| Подписи «Application», «Edit» в строке заголовка (Windows) | десктоп-оболочка, вставляя меню-бар прямо в страницу (shadow DOM, lib/preload-app.cjs) | да — пакет переписывает подписи и aria-label, пока активен русский |
| Пункты внутри («Undo», «Redo», «Cut», «Copy», «Paste», «Delete», «Select All», подменю «Application») | главный процесс оболочки — это нативное меню Electron (Menu.popup, lib/main.js) | нет — из страницы до него не достать |
У оболочки свой словарь ровно на два языка (165 строк, английский и китайский,
lib/main.js и два preload-скрипта), и её функция выбора языка принимает только
zh и en:
// lib/main.js
function resolveDesktopLocale(locale) {
return locale.toLowerCase().startsWith("zh") ? { id: "zh-CN", messages: zh } : { id: "en", messages: en };
}
Поэтому при выбранном русском (locale.preference = "ru") оболочка откатывается
на английский: пункты нативных меню, меню в трее, системные диалоги, экраны
приветствия и обновления остаются английскими. Это ограничение приложения, а не
пакета: чтобы их перевести, DSH должен сам поставлять русскую таблицу для
оболочки. Пакет переводит то, что доступно из страницы, — подписи меню-бара.
Карточка в панели «Плагины»
Пакет регистрирует себя в боковой панели «Плагины» (слот plugins.item):
карточка «Русский язык» с кратким описанием, а на её странице — что переведено,
как устроен перевод оболочки и какие есть ручные команды. Запускать оттуда ничего
не нужно: перевод оболочки пакет готовит сам (см. ниже).
Полный перевод оболочки (патч приложения)
Оболочка приложения (меню окна, трей, диалоги, окно входа, экраны обновления)
содержит свой словарь только на английском и китайском, поэтому её перевод
дописывается прямо в установленное приложение — в три файла внутри app.asar:
| Файл | Что переводит |
|---|---|
lib/main.js | пункты меню окна, меню в трее, системные диалоги (выход, фоновая работа), экраны обновления и ошибок запуска, выбор языка |
lib/preload-app.cjs | подписи меню-бара «Приложение» / «Правка» |
lib/preload-welcome.cjs | окно входа и приветствия |
Что происходит само:
- При запуске хостовая половина пакета (
lib/index.js) проверяет архив приложения; если русского словаря там нет, она готовит исправленный архив рядом (app.asar.locale-ru.new). Это обычная запись файла — приложение продолжает работать как обычно. - Лаунчер (
launch-dsh-ru.vbs) применяет подготовленный архив тогда, когда приложение ещё не запущено, и затем запускает DeepSeek Harness. Поэтому после обновления DSH достаточно запускать приложение как обычно — перевод вернётся сам.
Чтобы это работало, ярлыки DeepSeek Harness должны указывать на лаунчер:
# один раз; исходные ярлыки сохраняются рядом как *.lnk.before-locale-ru
pwsh -File dsh-locale-ru\tools\install-launcher.ps1
# откат ярлыков
pwsh -File dsh-locale-ru\tools\install-launcher.ps1 -Restore
Ручные способы (если ярлыки менять не хочется):
.\apply-shell-ru.cmd # применить сразу (DeepSeek Harness должен быть закрыт)
.\watch-shell-ru.cmd # сторож: применит в момент закрытия приложения
.\restore-shell-ru.cmd # вернуть исходный app.asar
Сторож — тот же скрипт в режиме --swap-when-free: он проверяет подготовленный
архив, а затем каждые 2 секунды пытается его подменить, пока Windows не отдаст
файл (то есть ровно в момент выхода приложения). По умолчанию ждёт 12 часов;
результат виден в окне и в shell-patch.log.
Скрипт осторожен по устройству: каждая правка — замена точного фрагмента текста,
который обязан найтись, иначе ничего не меняется; пересобранный архив проверяется
побайтово по всем записям (меняться могут только три файла), а каждый
исправленный файл проходит node --check. Исходный архив сохраняется рядом как
app.asar.before-locale-ru.
Важно: обновление DSH заменяет app.asar и возвращает английский. Пакет
подготовит патч заново, лаунчер применит его при следующем запуске. Это
неофициальный патч файлов приложения, поэтому он не заменяет исправление на
стороне DSH (оболочке не хватает русской таблицы).
Совместимость
Не включайте пакет одновременно с другой русской локализацией DSH (например, с
одноимённым плагином из npm от другого автора): язык ru регистрируется один
раз, и второй плагин не загрузится. Если русский язык уже есть в «Настройки →
Общие → Язык» до включения пакета — сначала отключите другой плагин.
Ограничения
- Строки до загрузки плагинов. Экран загрузки самого веб-оболочки
(
Loading plugins…,Failed to load plugins) зашит в бандл оболочки и плагином не переводится — он виден доли секунды при первом открытии страницы. - Нативные меню оболочки. Пункты меню окна, меню в трее, системные диалоги, экраны приветствия и обновления переводит сама оболочка, и у неё есть только английский и китайский (см. раздел выше). Подписи самого меню-бара пакет переписывает из страницы.
- Текст, который держит реестр хоста. Описания слэш-команд и подобный текст
регистрируются на стороне хоста парами
{en, zh}и разрешаются вне словарей клиента, поэтому для них показывается английский вариант. - Нет правил множественного числа. Система локализации DSH не поддерживает
склонения по числам, поэтому строки со
{count}переведены нейтральными конструкциями вида «Файлы ({count})», «Выбрано: {count}». - Медиа и кнопки сторонних библиотек (например, подписи в просмотрщике PDF) могут остаться английскими.
- Плагин не переводит ответы модели и системные подсказки — только интерфейс.
Проверка
node tools/verify.mjs
Скрипт загружает lib/client.js так же, как это делает браузерная система
модулей, монтирует плагин на подставной ctx и проверяет: идентификатор строки
модуля совпадает с именем пакета, бандл самодостаточен, язык ru зарегистрирован
с откатом на en, все 58 пространств имён зарегистрированы, все 2615 ключей
источника переведены и множества подстановок {...} совпадают с английскими.
Comments
Loading…
Similar plugins
by warment
Русский язык для DeepSeek Harness web UI — one-command install, 1061 строка, 100% покрытие
★ 4
MIT
JavaScript
Aug 30, 2026
dsh plugin --profile web add deepseek-harness-locale-ruby AbsoluteMikhail
Полная русская локализация веб-интерфейса DeepSeek Harness
★ 3
MIT
TypeScript
Sep 19, 2026
dsh plugin --profile web add @absolutemikhail/dsh-locale-ruby Ragnoryok1
Russian (ru) language pack for the DeepSeek Harness web GUI - installable hybrid dsh.bundle + dsh.client plugin.
★ 2
MIT
TypeScript
Sep 28, 2026
dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ruby azizemreozturk
Turkish (tr) language pack for DeepSeek Harness web UI
★ 0
MIT
JavaScript
Sep 10, 2026
dsh plugin --profile web add dsh-locale-trby GooDAnDReaDY
100% русская локализация и Smart UX для DeepSeek Harness (DSH v0.1.5-rc.1+): 5765 ключей (ядро + 40+ плагинов), единый дизайн настроек dsh-clinebot, экспорт в Markdown, инлайн-перевод, живая типографи
★ 32
↓ 5.7k/wk
MIT
Python
Oct 10, 2026
dsh plugin --profile web add @goodandready/dsh-russian-langby ara-hwang
Korean (ko) language pack for the DeepSeek Harness desktop and web GUI: 2,412 strings across 56 namespaces, plus the tooling that extracts, translates, verifies and rebuilds them.
★ 0
MIT
JavaScript
Oct 5, 2026
dsh plugin --profile web add dsh-ko-locale