@goodandready/dsh-russian-lang 0.1.0 → 0.1.2
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 +35 -18
- package/docs/media/language-selector.png +0 -0
- package/docs/media/ui-russian.png +0 -0
- package/lib/client.js +5 -1
- package/package.json +13 -3
package/README.md
CHANGED
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
## Что делает
|
|
6
6
|
|
|
7
|
-
- Регистрирует русские словари для namespace'ов ядра (`common`,
|
|
8
|
-
`settings`, `settings.models`, `workspace`, `subagent`,
|
|
9
|
-
30 namespace'ов
|
|
10
|
-
|
|
11
|
-
-
|
|
7
|
+
- Регистрирует русские словари для namespace'ов ядра (`common`,
|
|
8
|
+
`conversation`, `settings`, `settings.models`, `workspace`, `subagent`,
|
|
9
|
+
`reference` и другие — **30 namespace'ов ядра, 722 ключа, 100%
|
|
10
|
+
покрытия** релизной поверхности DSH 0.1.1-rc.2) и для ряда сторонних
|
|
11
|
+
плагинов (`dsh-market`, `better-sidebar`, `task-board`, `im-hub` и другие —
|
|
12
|
+
**9 namespace'ов, 962 ключа**).
|
|
13
|
+
- Добавляет **«Русский» третьей позицией** в родной список языков
|
|
12
14
|
(**Настройки → Общие → Язык**). Выбор сохраняется штатным механизмом
|
|
13
15
|
настроек DSH и переживает браузеры.
|
|
14
16
|
- Синхронизирует `<html lang="ru">` при активном русском.
|
|
@@ -23,11 +25,13 @@ namespace'ы через `ctx.locale.register(ns, 'ru', dict)` — конфлик
|
|
|
23
25
|
только если пара (namespace, язык) уже занята, а `ru` не занимает никто.
|
|
24
26
|
|
|
25
27
|
Список языков штатного селектора (`Настройки → Общие → Язык`) живёт в snapshot
|
|
26
|
-
локаль-runtime; меню строится из него, и `setLocale()` валидирует выбор по
|
|
27
|
-
же.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
локаль-runtime; меню строится из него, и `setLocale()` валидирует выбор по
|
|
29
|
+
нему же. На версиях ядра, где `ru` ещё не в списке (DSH 0.1.1-rc.2 из
|
|
30
|
+
коробки), плагин расширяет snapshot пунктом «Русский» — файлы ядра не
|
|
31
|
+
правятся. Если ядро когда-нибудь узнает `ru` само, расширение не происходит
|
|
32
|
+
и всё работает штатно. Запись выбора в настройки идёт через собственный
|
|
33
|
+
namespace `russian-lang` (хост-схема ядра знает только `zh/en` и не
|
|
34
|
+
принимает `ru`).
|
|
31
35
|
|
|
32
36
|
Ничего в установке DSH не патчится; удаление плагина полностью возвращает
|
|
33
37
|
интерфейс к исходному состоянию.
|
|
@@ -38,26 +42,39 @@ namespace `russianLang` (хост-схема ядра знает только zh
|
|
|
38
42
|
dsh plugin --profile web add @goodandready/dsh-russian-lang
|
|
39
43
|
```
|
|
40
44
|
|
|
41
|
-
Затем:
|
|
45
|
+
Затем: **Настройки → Общие → Язык → Русский**.
|
|
42
46
|
|
|
43
|
-
##
|
|
44
|
-
|
|
45
|
-
Словари — источник истины (`ru/*.json` — ядро, `ru-plugins/*.json` — сторонние
|
|
46
|
-
плагины). После обновления dsh извлеките английские оригиналы из бандлов,
|
|
47
|
-
сверьте покрытие и перегенерируйте клиентский бандл:
|
|
47
|
+
## Разработка и проверка
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
50
|
python3 extract-dicts.py <profile>/node_modules # обновить *-en.json
|
|
51
51
|
python3 check-coverage.py # что не переведено / устарело
|
|
52
52
|
python3 build.py # собрать lib/client.js
|
|
53
|
+
python3 test/test_extract.py # smoke для extract-dicts/check-coverage
|
|
54
|
+
python3 test/smoke.py # E2E против запущенного стенда
|
|
53
55
|
```
|
|
54
56
|
|
|
57
|
+
Требует `websocket-client` (`pip install websocket-client`) и Chrome на
|
|
58
|
+
`/usr/bin/google-chrome` для `smoke.py`. По умолчанию ходит на
|
|
59
|
+
`https://192.168.1.111:3082`; переопределяется через `DSH_URL`.
|
|
60
|
+
|
|
61
|
+
## Скриншоты
|
|
62
|
+
|
|
63
|
+
| Что | Файл |
|
|
64
|
+
|-----|------|
|
|
65
|
+
| Интерфейс на русском | `docs/media/ui-russian.png` |
|
|
66
|
+
| Список языков в Настройки → Общие | `docs/media/language-selector.png` |
|
|
67
|
+
|
|
68
|
+
Скриншоты обновляются через `python3 test/screenshots.py` против
|
|
69
|
+
запущенного стенда с установленным плагином.
|
|
70
|
+
|
|
55
71
|
## Ограничения
|
|
56
72
|
|
|
57
73
|
- Переводится только веб-интерфейс. Описания тулов и системные промпты агента
|
|
58
74
|
— не locale, плагин их не трогает.
|
|
59
|
-
- Плагины, которые рисуют текст инлайном без locale-слотов, не
|
|
60
|
-
|
|
75
|
+
- Плагины, которые рисуют текст инлайном без locale-слотов, не переводятся.
|
|
76
|
+
- Текст, добавленный сторонним плагином без `ctx.locale.register`, остаётся на
|
|
77
|
+
языке плагина — для перевода нужно обновить сам плагин.
|
|
61
78
|
|
|
62
79
|
## Лицензия
|
|
63
80
|
|
|
Binary file
|
|
Binary file
|
package/lib/client.js
CHANGED
|
@@ -1891,7 +1891,11 @@ window.__ModuleLoader__.load({
|
|
|
1891
1891
|
ctx.effect(() => scope.subscribe(tryBoot), 'dsh-russian-lang: boot')
|
|
1892
1892
|
tryBoot()
|
|
1893
1893
|
|
|
1894
|
-
|
|
1894
|
+
// Подписчик регистрируется синхронно, до первого publish() в tryBoot
|
|
1895
|
+
// ниже - иначе ctx.effect откладывает выполнение, и boot-publish
|
|
1896
|
+
// происходит до того, как syncLang слушатель зарегистрирован.
|
|
1897
|
+
const unsubscribeLang = runtime.subscribe(syncLang)
|
|
1898
|
+
ctx.effect(() => unsubscribeLang, 'dsh-russian-lang: html-lang')
|
|
1895
1899
|
syncLang()
|
|
1896
1900
|
}
|
|
1897
1901
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-russian-lang",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Russian localization for the DeepSeek Harness web UI:
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Russian localization for the DeepSeek Harness web UI: adds Русский as the third option in the native Settings - General - Language menu. Translates 30 core namespaces (722 keys, 100% coverage of the DSH 0.1.1-rc.2 surface) and 9 plugin namespaces (962 keys). 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",
|
|
7
7
|
"exports": {
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"ru-plugins",
|
|
17
17
|
"cordis.patch.yml",
|
|
18
18
|
"README.md",
|
|
19
|
-
"LICENSE"
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"docs/media"
|
|
20
21
|
],
|
|
21
22
|
"dsh": {
|
|
22
23
|
"bundle": {
|
|
@@ -42,6 +43,15 @@
|
|
|
42
43
|
"engines": {
|
|
43
44
|
"node": ">=20"
|
|
44
45
|
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "python3 build.py",
|
|
48
|
+
"check": "python3 check-coverage.py",
|
|
49
|
+
"test": "python3 test/test_extract.py",
|
|
50
|
+
"smoke": "python3 test/smoke.py"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"websocket-client": "^1.7.0"
|
|
54
|
+
},
|
|
45
55
|
"dependencies": {
|
|
46
56
|
"@deepseek-ai/schemastery": "^3.18.1"
|
|
47
57
|
},
|