@goodandready/dsh-russian-lang 0.1.24 → 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -95
- package/lib/client.js +18 -2
- package/lib/index.js +2 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,108 +1,134 @@
|
|
|
1
|
-
# @goodandready/dsh-russian-lang
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
## Установка
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
dsh plugin --profile web add @goodandready/dsh-russian-lang
|
|
1
|
+
# 📦 @goodandready/dsh-russian-lang
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
<h3>Полная русская локализация, умная типографика и исправление раскладки клавиатуры для DeepSeek Harness</h3>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-russian-lang"><img src="https://img.shields.io/npm/v/@goodandready/dsh-russian-lang.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
|
9
|
+
<a href="LICENSE"><img src="https://img.shields.io/github/license/GooDAnDReaDY/dsh-russian-lang.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
|
|
10
|
+
<a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
|
|
11
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## ⚡ Обзор
|
|
19
|
+
|
|
20
|
+
**`dsh-russian-lang`** — официальный, всеобъемлющий пакет русской локализации для веб-интерфейса [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh).
|
|
21
|
+
|
|
22
|
+
Пакет не просто переводит интерфейс ядра и популярных плагинов, но и добавляет интеллектуальные функции для комфортной русскоязычной работы: **грамматические формы множественного числа (plural)**, автоматическую **расстановку типографики** («ёлочки», длинные тире, неразрывные пробелы) и **исправление ошибочно набранного текста** на неверной раскладке по горячей клавише <kbd>Alt+L</kbd>.
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
graph LR
|
|
26
|
+
subgraph DSHCore [Ядро DeepSeek Harness]
|
|
27
|
+
DSH[Web UI Интерфейс] --> Loader[Загрузчик локализации dsh-russian-lang]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
subgraph TranslationLayer [Слой перевода и адаптации]
|
|
31
|
+
Loader --> CoreDict[30+ Пространств имён ядра DSH / 720+ ключей]
|
|
32
|
+
Loader --> PluginDict[10+ Плагинов экосистемы DSH]
|
|
33
|
+
Loader --> PluralEngine[Движок грамматических Plural-форм]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
subgraph SmartFeatures [Интеллектуальные модули]
|
|
37
|
+
Loader --> Typo[Модуль типографики: кавычки-«ёлочки» и длинные тире]
|
|
38
|
+
Loader --> LayoutFix[Детектор неверной раскладки + Hotkey Alt+L]
|
|
39
|
+
Loader --> Spell[Активация русской проверки орфографии]
|
|
40
|
+
Loader --> Overrides[Пользовательские переопределения ключей]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
subgraph Result [Результат]
|
|
44
|
+
CoreDict --> NativeUI[Нативный русский интерфейс]
|
|
45
|
+
PluginDict --> NativeUI
|
|
46
|
+
PluralEngine --> NativeUI
|
|
47
|
+
Typo --> NativeUI
|
|
48
|
+
LayoutFix --> NativeUI
|
|
49
|
+
Spell --> NativeUI
|
|
50
|
+
Overrides --> NativeUI
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
style DSHCore fill:#1e1e2e,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4
|
|
54
|
+
style TranslationLayer fill:#181825,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4
|
|
55
|
+
style SmartFeatures fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4
|
|
56
|
+
style Result fill:#181825,stroke:#f38ba8,stroke-width:2px,color:#cdd6f4
|
|
61
57
|
```
|
|
62
58
|
|
|
63
|
-
|
|
59
|
+
---
|
|
64
60
|
|
|
65
|
-
##
|
|
61
|
+
## ✨ Полный обзор возможностей
|
|
66
62
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
63
|
+
### 1. 🌐 100% Покрытие ядра DSH (30+ Пространств имён, 720+ ключей)
|
|
64
|
+
* **Диалоги и переписка (`conversation`)**: лента сообщений, ветки обсуждений, карточки вызова инструментов, статус генерации и рассуждений (thinking traces).
|
|
65
|
+
* **Модели и провайдеры (`settings.models`)**: каталог моделей, параметры инференса, управление токенами и ключами API.
|
|
66
|
+
* **Настройки ядра (`settings`, `common`)**: интерфейс настроек, горячие клавиши, системные уведомления, модальные окна и подтверждения.
|
|
67
|
+
* **Рабочие области (`workspace`, `subagent`)**: дерево файлов, управление контекстом, запуск и координация субагентов.
|
|
68
|
+
* **Системные статусы (`status`, `reference`)**: индикаторы сетевого подключения, загрузка файлов и ошибки.
|
|
69
|
+
|
|
70
|
+
### 2. 🧩 Встроенный перевод 10+ плагинов экосистемы DSH
|
|
71
|
+
Локализация автоматически распространяется на сторонние и экосистемные плагины:
|
|
72
|
+
* `token-dashboard` — аналитика и графики расхода токенов;
|
|
73
|
+
* `subscriptions` (`dsh-subscriptions`) — карточки подключения персональных подписок;
|
|
74
|
+
* `dshmarket` и `dshmarket-1.13` — маркетплейс моделей и каталоги провайдеров;
|
|
75
|
+
* `better-sidebar` — улучшенное боковое меню навигации;
|
|
76
|
+
* `task-board` и `kanban` — доски управления задачами и канбан-планировщик;
|
|
77
|
+
* `im-hub` — шлюзы интеграции с мессенджерами;
|
|
78
|
+
* `context-doctor` и `plugins-store` — диагностика контекста и магазин расширений.
|
|
79
|
+
|
|
80
|
+
### 3. 🔢 Русские грамматические формы числительных (Plural)
|
|
81
|
+
Английский язык различает только `1` и `other`. Русский язык требует 3 грамматические формы числительных (`1 файл`, `2 файла`, `5 файлов` / `1 секунда`, `3 секунды`, `10 секунд`). Движок локализации автоматически подставляет правильные окончания в зависимости от числового значения.
|
|
82
|
+
|
|
83
|
+
### 4. ✍️ Интеллектуальный модуль типографики (`russian-lang.typography`)
|
|
84
|
+
Автоматически приводит тексты сообщений и описаний к правилам русской экранной типографики:
|
|
85
|
+
* Заменяет прямые "лапки" на правильные кавычки-«ёлочки» (а вложенные — на „лапки“);
|
|
86
|
+
* Заменяет дефисы между словами на длинные тире (—);
|
|
87
|
+
* Добавляет неразрывные пробелы после коротких союзов и предлогов, предотвращая висячие строки;
|
|
88
|
+
* **Безопасность кода**: типографика строго изолирована и никогда не затрагивает блоки исходного кода, формулы LaTeX и моноширинные поля ввода.
|
|
79
89
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
### 5. ⌨️ Исправление ошибочной раскладки клавиатуры (<kbd>Alt+L</kbd>)
|
|
91
|
+
Если вы забыли переключить раскладку и набрали текст латиницей (например, `ghjtrn d gzkmt` вместо `проект в пальто`), плагин мгновенно:
|
|
92
|
+
* Определяет ошибочный ввод в реальном времени;
|
|
93
|
+
* Показывает ненавязчивую плавающую подсказку над полем ввода;
|
|
94
|
+
* При нажатии горячей клавиши <kbd>Alt+L</kbd> мгновенно конвертирует набранный текст в правильную кириллицу.
|
|
83
95
|
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
### 6. ⚙️ Пользовательские переопределения (`russian-lang.overrides`)
|
|
97
|
+
Вы можете переопределить абсолютно любой системный ключ перевода под терминологию вашей команды в **Настройки → Плагины → Russian Lang → Переопределения** без редактирования исходного кода.
|
|
86
98
|
|
|
87
|
-
|
|
99
|
+
### 7. 🔤 Нативная интеграция в ядро
|
|
100
|
+
Плагин нативно регистрирует пункт **«Русский»** в меню **Настройки → Общие → Язык**, переключает атрибут `<html lang="ru-RU">` и активирует встроенный браузерный словарь проверки орфографии (`spellcheck`).
|
|
88
101
|
|
|
89
|
-
|
|
90
|
-
|-----|------|
|
|
91
|
-
| Интерфейс на русском | `docs/media/ui-russian.png` |
|
|
92
|
-
| Список языков в Настройки → Общие | `docs/media/language-selector.png` |
|
|
102
|
+
---
|
|
93
103
|
|
|
94
|
-
|
|
104
|
+
## 📦 Установка
|
|
95
105
|
|
|
96
|
-
|
|
106
|
+
```bash
|
|
107
|
+
dsh plugin --profile web add @goodandready/dsh-russian-lang
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
После установки откройте веб-интерфейс, перейдите в **Настройки → Общие → Язык**, выберите **«Русский»** и обновите страницу.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## ⚙️ Параметры конфигурации (`settings.yaml`)
|
|
115
|
+
|
|
116
|
+
```yaml
|
|
117
|
+
dsh-russian-lang:
|
|
118
|
+
typography:
|
|
119
|
+
enabled: true
|
|
120
|
+
quotes: true # Преобразование кавычек в «ёлочки»
|
|
121
|
+
dashes: true # Длинные тире
|
|
122
|
+
nbsp: true # Неразрывные пробелы
|
|
123
|
+
layoutFix:
|
|
124
|
+
enabled: true
|
|
125
|
+
hotkey: "Alt+KeyL" # Горячая клавиша исправления раскладки
|
|
126
|
+
spellcheck: true # Браузерная проверка правописания
|
|
127
|
+
overrides: {} # Пользовательские переопределения ключей
|
|
128
|
+
```
|
|
97
129
|
|
|
98
|
-
|
|
99
|
-
— не locale, плагин их не трогает.
|
|
100
|
-
- Плагины, которые рисуют текст инлайном без locale-слотов, не переводятся.
|
|
101
|
-
- Текст, добавленный сторонним плагином без `ctx.locale.register`, остаётся на
|
|
102
|
-
языке плагина — для перевода нужно обновить сам плагин.
|
|
103
|
-
- Фикс раскладки опирается на встроенный частотный словарь (~9k слов) и может
|
|
104
|
-
не распознать редкую терминологию; ложных замен нет — только подсказка.
|
|
130
|
+
---
|
|
105
131
|
|
|
106
|
-
## Лицензия
|
|
132
|
+
## 📄 Лицензия
|
|
107
133
|
|
|
108
|
-
MIT
|
|
134
|
+
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
|
package/lib/client.js
CHANGED
|
@@ -3682,6 +3682,22 @@ window.__ModuleLoader__.load({
|
|
|
3682
3682
|
} catch (err) { return {} }
|
|
3683
3683
|
}
|
|
3684
3684
|
const fill = (template, params) => template.replace(/\{(\w+)\}/g, (match, name) => name in params ? String(params[name]) : match)
|
|
3685
|
+
// lookup: в ядре 0.1.2 lookup(ns, key, chain) требует третий довод —
|
|
3686
|
+
// цепочку языков; в старых ядрах его два. Спрашиваем у самого метода
|
|
3687
|
+
// (lookup.length), цепочку берём у ядра (fallbackChain приватный, но в
|
|
3688
|
+
// собранном коде доступен), иначе минимальная [active]. Голый вызов без
|
|
3689
|
+
// chain ронял чужой слот sidebar.workspaces (chain is not iterable).
|
|
3690
|
+
const lookupChain = () => {
|
|
3691
|
+
try {
|
|
3692
|
+
const chain = runtime.fallbackChain && runtime.fallbackChain(runtime.getLocale().active)
|
|
3693
|
+
if (Array.isArray(chain) && chain.length) return chain
|
|
3694
|
+
} catch (err) { /* ignore */ }
|
|
3695
|
+
return [runtime.getLocale().active]
|
|
3696
|
+
}
|
|
3697
|
+
const lookup = (ns, key) => {
|
|
3698
|
+
const chain = lookupChain()
|
|
3699
|
+
return runtime.lookup.length >= 3 ? runtime.lookup(ns, key, chain) : runtime.lookup(ns, key)
|
|
3700
|
+
}
|
|
3685
3701
|
runtime.translate = function (ns, key, params) {
|
|
3686
3702
|
// 1. Пользовательский override — самый верхний слой.
|
|
3687
3703
|
const overrides = getOverrides()
|
|
@@ -3698,7 +3714,7 @@ window.__ModuleLoader__.load({
|
|
|
3698
3714
|
// Ядро выбирает .one/.other по n===1; русскому нужны few/many.
|
|
3699
3715
|
if (form === 'few' || form === 'many') {
|
|
3700
3716
|
const pluralKey = m[1] + '.' + form
|
|
3701
|
-
const template =
|
|
3717
|
+
const template = lookup(ns, pluralKey) ?? lookup('common', pluralKey)
|
|
3702
3718
|
if (template !== undefined) {
|
|
3703
3719
|
return fill(template, params)
|
|
3704
3720
|
}
|
|
@@ -3707,7 +3723,7 @@ window.__ModuleLoader__.load({
|
|
|
3707
3723
|
// Счётный ключ без суффикса: t('X', {n}). Если словарь даёт формы
|
|
3708
3724
|
// X.one / X.few / X.many - берём подходящую, иначе как раньше.
|
|
3709
3725
|
const pluralKey = key + '.' + form
|
|
3710
|
-
const template =
|
|
3726
|
+
const template = lookup(ns, pluralKey) ?? lookup('common', pluralKey)
|
|
3711
3727
|
if (template !== undefined) {
|
|
3712
3728
|
return fill(template, params)
|
|
3713
3729
|
}
|
package/lib/index.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
// нечего, но у выбора языка есть сохраняемая настройка: регистрируем её схему
|
|
5
5
|
// в собственном namespace, чтобы запись переживала браузеры и машины через
|
|
6
6
|
// штатный механизм настроек DSH.
|
|
7
|
-
import { settingsNamespace } from '@deepseek-ai/dsh-settings'
|
|
8
7
|
import z from '@deepseek-ai/schemastery'
|
|
9
8
|
|
|
10
9
|
export const name = '@goodandready/dsh-russian-lang'
|
|
@@ -21,14 +20,14 @@ const RussianLangSettingsSchema = z.object({
|
|
|
21
20
|
|
|
22
21
|
export function apply(ctx) {
|
|
23
22
|
ctx.inject(['settings'], (settingsCtx) => {
|
|
24
|
-
settingsCtx.settings.register(
|
|
23
|
+
settingsCtx.settings.register('russian-lang', RussianLangSettingsSchema)
|
|
25
24
|
})
|
|
26
25
|
|
|
27
26
|
// #68: русский системный промпт агента (опционально). Регистрируем секцию
|
|
28
27
|
// промпта, которая просит отвечать по-русски, когда включён флаг
|
|
29
28
|
// russian-lang.agentPrompt. Секция — официальная точка расширения ядра.
|
|
30
29
|
ctx.inject(['settings', 'systemPrompt'], (settingsCtx, prompt) => {
|
|
31
|
-
const NS =
|
|
30
|
+
const NS = 'russian-lang'
|
|
32
31
|
const RU_SECTION = 'dsh-russian-lang-agent-prompt'
|
|
33
32
|
const RU_TEXT = 'Отвечай пользователю на русском языке. Если пользователь пишет на другом языке, отвечай на его языке.'
|
|
34
33
|
let current = false
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-russian-lang",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.26",
|
|
4
4
|
"description": "Russian localization for the DeepSeek Harness web UI: adds Русский as the third option in the native Settings - General - Language menu. Translates the full core surface (100% coverage of DSH 0.1.1-rc.2) plus 16 community plugin namespaces - 52 namespaces, 2795 strings (many machine-drafted, queued for manual review), with Russian plural forms, count-key plurals, a typography pass (guillemets, em dash, nbsp), a wrong-layout input hint and browser spellcheck. The locale runtime snapshot is extended at runtime on unpatched cores; no files in the DSH installation are modified. The choice is persisted through the plugin-owned russian-lang namespace.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
60
|
-
"@deepseek-ai/dsh-settings": "^0.1.
|
|
60
|
+
"@deepseek-ai/dsh-settings": "^0.1.2-alpha.2"
|
|
61
61
|
},
|
|
62
62
|
"repository": {
|
|
63
63
|
"type": "git",
|