@ragnoryok1/dsh-locale-bridge
Русский | English | 中文
Русские словари для сторонних плагинов DeepSeek Harness — как данные, без форков.
Сторонние плагины регистрируют свои namespace локали с zh и en и часто не привозят русского. Перевести такой плагин раньше означало сделать его форк. Этот пакет подставляет недостающий словарь данными: он пытается зарегистрировать русский для namespace, оставляет результат, если namespace был свободен, и уступает, когда плагин привозит свой перевод. Первая нагрузка — маркет плагинов (dsh-market). Плагинам, которые рисуют текст сами и не спрашивают сервис локали, он помочь не может: эта граница реальна, измерена и описана ниже.
Зачем это нужно
Плагины сообщества регистрируют свои строки через сервис локали (ctx.locale.register) с китайским и английским. Русского у них обычно нет, и единственным способом было форкнуть плагин — то есть взять на себя его обновления навсегда.
Мост решает это иначе: словарь подставляется данными.
Как он себя ведёт
Три правила, и все три — следствие контракта локали, а не наших предпочтений:
- Заполняем только свободное.
locale.register(ns, locale, dict) бросает исключение, если у namespace уже есть этот язык. Мост пробует зарегистрировать и считает отказ нормальным исходом.
- Уступаем автору. Как только плагин выпускает свой русский, регистрация моста получает отказ и ничего не перекрывает. Никакого конфликта версий, никакой борьбы за namespace.
- Отчитываемся, а не молчим. Публичного способа спросить, какие namespace заняты, нет — карта словарей приватная. Поэтому факт «не бросило исключение» и есть доказательство, что словарь заполнили именно мы, и он попадает в лог, а не растворяется в пойманной ошибке.
Первая нагрузка: маркет плагинов
Маркет плагинов по-русски
Словарь dsh-market — интерфейс плагина dshmarket.
Переведено 687 из 687 строк — весь интерфейс маркета.
Проверено на живом харнессе. Подпись маркета в настройках берётся из словаря
(t('nav')), и после установки моста она стала русской — «Маркет плагинов»,
английской «Plugin Market» в интерфейсе нет, ошибок в консоли нет.
Покрытие измерено на экране, а не по файлу: из 357 коротких английских значений,
которые могли бы появиться дословно, 350 показаны по-русски. Оставшиеся семь
оказались ложными срабатываниями — это данные каталога, а не текст интерфейса:
| Где встретилось | Что это на самом деле |
|---|
| «local», «official», «source», «files» | описания плагинов, которые маркет получает из своего API |
| «Themes», «Theme» | названия категорий («Themes & Appearance») из того же API |
Переводить их нельзя: это содержимое каталога, оно принадлежит источнику и меняется
без нашего участия. Интерфейс при этом переведён полностью.
Чего он не может
Плагины со своими строками мосту недоступны. Пример — @zseven-w/dsh-android: он выбирает язык сам (androidCopy(locale), только zh/en) и сервис локали не спрашивает вообще. Никакой словарь до такого плагина не дотянется — нужна правка у автора.
Это не изъян моста, а граница контракта. Она измерена: из десяти сторонних пакетов в тестовом профиле четверо используют контракт локали, один рисует текст сам, пятеро своих строк не имеют.
Как добавить словарь
Добавление перевода — изменение данных, а не кода:
- положите JSON рядом с остальными в
src/client/dicts/ (плоский объект «ключ → строка»);
- допишите одну строку в список
DICTIONARIES в src/client/index.ts.
Ключи должны совпадать с исходным словарём плагина: лишние не попадут никуда, недостающие покажутся по-английски (штатный фолбэк контракта), поэтому частичный словарь безопасен.
Установка
dsh plugin --profile web add @ragnoryok1/dsh-locale-bridge
Русский язык добавляется сам, если его ещё не добавил основной пакет локализации, — мост работает и отдельно, и вместе с ним.
Сборка
npm install
npm run build # tsdown -> lib/index.js (host half) + lib/client.js (client bundle, словари внутри)
npm pack
Содержимое
src/client/index.ts — мост: добавление языка, регистрация словарей, отчёт;
src/client/dicts/*.json — словари «в исходнике» и «перевод»;
src/index.ts — пустая host-половина;
cordis.patch.yml — профиль-патч.
Лицензия
MIT. Пакет сообщества, не связан с DeepSeek. Переводы сторонних плагинов сделаны сообществом и могут быть неточны — сообщайте об ошибках в issues.