Skip to main content
P

dsh-ru-locale

perovmpr/dsh-ru-locale

Russian (Русский) language pack for the DeepSeek Harness web GUI: 59 translated namespaces, English fallback per key

Install

dsh plugin --profile web add github:perovmpr/dsh-ru-locale

README

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 (его словари подхватятся, но язык уже зарегистрирован первым).

Related plugins