dsh-ru-locale
perovmpr/dsh-ru-locale
Russian (Русский) language pack for the DeepSeek Harness web GUI: 59 translated namespaces, English fallback per key
설치
dsh plugin --profile web add github:perovmpr/dsh-ru-localeREADME
dsh-ru-locale — русский язык для веб-интерфейса DeepSeek Harness
Языковой пакет-плагин: добавляет в GUI DeepSeek Harness язык Русский и русские переводы для 59 пространств имён клиентских плагинов (2714 строк, 100%). Непереведённые ключи показываются по-английски (встроенный фолбэк локали), поэтому пакет безопасно дополнять постепенно.
Что внутри
package.json манифест: dsh.bundle (патч-слой) + dsh.client (бандл для браузера)
cordis.patch.yml вставляет строку locale-ru в дерево плагинов профиля
lib/index.js host-половина: пустой плагин, нужен только чтобы строка
загрузчика существовала и клиентский бандл стал доступен
lib/client.js сгенерированный клиентский бандл: addLanguage('ru') +
регистрация словарей по пространствам имён
dictionaries.en.json извлечённые английские словари (источник перевода)
translations/ переводы по пакетам
market-index.json индекс формата 1 для каталога Discover
scripts/ извлечение словарей, нарезка, сборка, установка, индекс
Установка
Из npm (в конкретный профиль DSH):
dsh plugin --profile web add dsh-ru-locale
Затем включите пакет как bundle — проще всего на странице Plugins (новая
установка включается автоматически) либо дописав имя в dsh.profile.bundles
в package.json профиля.
Локальная разработка — без registry, символической ссылкой:
node scripts/install.mjs "$DSH_HOME/profiles/web"
Скрипт идемпотентен: добавляет link:-зависимость, дописывает пакет в
dsh.profile.bundles и создаёт симлинк в node_modules профиля.
Выбрать язык: Settings → General → Language → Русский. Если браузер
запрашивает ru, язык подхватывается автоматически.
Публикация
npm login
npm publish --access public # --access public нужен только для scoped-имён
Перед публикацией проверьте npm pack --dry-run: в тарбол должны попасть
cordis.patch.yml, lib/index.js, lib/client.js.
Важно: имя строки в cordis.patch.yml должно совпадать с именем npm-пакета
включая скоуп. Публикуете как @scope/dsh-ru-locale — поменяйте name: там же,
пересоберите (node scripts/build.mjs) и опубликуйте.
Для каталога Discover: node scripts/make-index.mjs --from-registry обновит
market-index.json (индекс валидируется тем же валидатором, что и в DSH) —
выложите файл по https и добавьте его URL в настройках Discover. Discover
живёт в отдельном экспериментальном бандле
@deepseek-ai/dsh-experimental-plugin-market-bundle, в профилях по умолчанию
он выключен.
Автоматическая публикация
.github/workflows/publish.yml публикует пакет по тегу v*. Один раз нужно
завести секрет репозитория NPM_TOKEN — granular access token с правами
Read and write на пакет и включённым «Bypass 2FA» (Settings → Secrets and
variables → Actions). Дальше релиз — одна команда:
npm version patch && git push --follow-tags
Workflow проверит, что тег совпадает с версией в package.json, покажет состав
тарбола и опубликует с --provenance.
Установка прямо с GitHub, без npm
Пакет самодостаточен (собранный lib/client.js лежит в репозитории), поэтому
его можно ставить git-спекой:
dsh plugin --profile web add git+https://github.com/Perovmpr/dsh-ru-locale.git
Минусы: нет semver-обновлений через реестр, установка привязана к коммиту, а в
индексе Discover для такой версии указывается source: { type: "git", url, commit } вместо { type: "npm" }.
Проверка
Пакет проверен на отдельном инстансе dsh web (свой DSH_HOME) в headless
Chromium через CDP:
- страница рендерится по-русски,
<html lang>=ru(приnavigator.languageвидаru-RUязык выбирается автоматически); - при
en-USинтерфейс остаётся английским — фолбэк не сломан; - сервер отдаёт бандл в стартовом графе, установленный артефакт регистрирует 59 пространств имён и 2714 ключей.
Скриншот: preview-ru.png в корне пакета.
Пересборка
node scripts/extract-dictionaries.mjs # обновить английские словари из установленного DSH
node scripts/make-batches.mjs 7 # нарезать на пакеты для перевода
node scripts/build.mjs # проверить переводы и собрать lib/client.js
node scripts/make-index.mjs # обновить market-index.json
build.mjs строго проверяет, что у каждой строки совпадает набор
{placeholder}, и что ключи существуют в английском источнике. Пропущенные
ключи и целые пространства имён разрешены — они уйдут в английский фолбэк.
Ограничения
- Перевод статический: новые строки, добавленные в DSH после сборки, будут по-английски, пока не пересоберёте пакет.
- Плюрализация: строки с
{count}сформулированы без согласования («Файлов: {count}»), потому что реестр локали не поддерживает правила множественного числа. - Пакет рассчитан на веб-интерфейс (
dsh.client.platform: "web"); нативные оболочки используют свою локализацию. - Два пакета, регистрирующих один и тот же язык, конфликтуют: второй не сможет
добавить
ru(его словари подхватятся, но язык уже зарегистрирован первым).