@ragnoryok1/dsh-client-locale-ru 0.2.8 → 0.2.10
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/CHANGELOG.md +47 -0
- package/NAMESPACES.md +18 -3
- package/README.en.md +30 -25
- package/README.md +39 -35
- package/README.zh.md +34 -26
- package/images/plugins-ru.png +0 -0
- package/images/settings-ru.png +0 -0
- package/lib/client.js +4094 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,53 @@
|
|
|
6
6
|
Пакет следует за харнессом: целевая версия — `dsh 0.2.1-alpha.1` и новее
|
|
7
7
|
(`>=0.1.0-rc.2 <0.3.0` для `@deepseek-ai/dsh-client-locale`).
|
|
8
8
|
|
|
9
|
+
## [0.2.10] — 2026-10-19
|
|
10
|
+
|
|
11
|
+
### Добавлено
|
|
12
|
+
|
|
13
|
+
- **Словари сторонних плагинов: 32.** За этот релиз их стало на семь больше:
|
|
14
|
+
`dsh-better-sidebar` (627 ключей), `billion-context` (481), `@goodandready/dsh-kanban` (420),
|
|
15
|
+
`@goodandready/dsh-cron` (396), `@goodandready/dsh-image-gen` (330), `@goodandready/dsh-voice` (321)
|
|
16
|
+
и `dsh-univer-office` — четыре новых ключа. Всего 96 namespace и 9012 строки, из них 5979 —
|
|
17
|
+
в словарях плагинов.
|
|
18
|
+
|
|
19
|
+
### Исправлено
|
|
20
|
+
|
|
21
|
+
- **Проверка лишних пар форм больше не путает обычный ключ с формой.** Ключ `card.other`
|
|
22
|
+
(«Other clients») у плагина `billion-context` оканчивается на `.other` — так же, как форма
|
|
23
|
+
множественного числа, — но основания `card` рядом нет, и проверка называла это дрейфом.
|
|
24
|
+
Теперь вопрос задаётся шаблону: форма, у которой нет основы в самом плагине, — обычный
|
|
25
|
+
ключ этого плагина.
|
|
26
|
+
- **Устаревшее разрешение латинского слова убрано:** «install» разрешён теперь везде, и
|
|
27
|
+
прежнее точечное разрешение больше ничего не разрешало.
|
|
28
|
+
|
|
29
|
+
## [0.2.9] — 2026-10-19
|
|
30
|
+
|
|
31
|
+
### Добавлено
|
|
32
|
+
|
|
33
|
+
- **Словари сторонних плагинов: 25.** Пакет переводит не только namespace харнесса, но и словари
|
|
34
|
+
сторонних плагинов: их английский текст выгружается из публикации плагина вместе с версией и
|
|
35
|
+
лицензией (`npm run fetch:plugins`), а перевод сверяется именно с этим снимком, а не с чужим
|
|
36
|
+
русским. В этом релизе добавлены: `dshmarket` (733 ключа), `@goodandready/dsh-tts` (226),
|
|
37
|
+
`@goodandready/dsh-moa` (159), `dsh-better-input` (123), `@goodandready/dsh-cost-meter` (85),
|
|
38
|
+
`dsh-ego-browser` (75), `@goodandready/dsh-usage-guard` (42), `dsh-config-manager` (36),
|
|
39
|
+
`dsh-personal-directive` (5).
|
|
40
|
+
- **Инструмент выгрузки словарей читает чужие форматы.** Ключ, записанный как идентификатор
|
|
41
|
+
(`cancel: "Cancel"`), не попадал в снимок — часть словарей читалась пустыми; регистрация языка
|
|
42
|
+
по одному (`locale.register(NS, "en", en)`) и константа namespace из другого файла пакета тоже
|
|
43
|
+
не распознавались; клиентский бандл не обязательно лежит в `lib/` — `dshmarket` держит его в
|
|
44
|
+
`client/`, и скан только `lib/` находил там словарь хостового модуля. Теперь снимок совпадает с
|
|
45
|
+
тем, что плагин показывает.
|
|
46
|
+
|
|
47
|
+
### Исправлено
|
|
48
|
+
|
|
49
|
+
- **Отчёт о названиях плагинов больше не считает переведённые непереведёнными.**
|
|
50
|
+
`npm run report:descriptors` перечислял все читаемые названия как непереведённые, даже те, у
|
|
51
|
+
которых в дереве харнесса уже лежал `locale/ru.json`. Теперь отчёт делит их на переведённые и
|
|
52
|
+
оставшиеся и говорит число каждых.
|
|
53
|
+
- **`dsh-plugins-store` убран из покрытия:** то, что выгрузка приняла за словарь, оказалось
|
|
54
|
+
фрагментом JSON Schema — переводить схему значит сломать её.
|
|
55
|
+
|
|
9
56
|
## [0.2.8] — 2026-10-19
|
|
10
57
|
|
|
11
58
|
### Добавлено
|
package/NAMESPACES.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- Сгенерировано `npm run namespaces`; проверяется `npm run check:namespaces`. -->
|
|
2
2
|
# Что переведено
|
|
3
3
|
|
|
4
|
-
Пакет переводит **
|
|
4
|
+
Пакет переводит **96 namespace** — 9012 строк. Колонка «как это выглядит»
|
|
5
5
|
берёт заголовок самого namespace (то, что читает пользователь), а не отдельное описание:
|
|
6
6
|
список нельзя разойтись с переводами.
|
|
7
7
|
|
|
@@ -14,10 +14,13 @@
|
|
|
14
14
|
|---|---|---|---|
|
|
15
15
|
| `agent-team` | Команда агентов | 25 | харнесс |
|
|
16
16
|
| `approval` | — | 5 | харнесс |
|
|
17
|
+
| `better-input` | — | 123 | dsh-better-input@0.2.6 |
|
|
18
|
+
| `betterSidebar` | — | 627 | dsh-better-sidebar@0.28.0 |
|
|
17
19
|
| `chat` | — | 200 | харнесс |
|
|
18
20
|
| `claude-code-mods` | — | 4 | харнесс |
|
|
19
21
|
| `command` | — | 28 | харнесс |
|
|
20
22
|
| `common` | — | 41 | харнесс |
|
|
23
|
+
| `config-manager` | — | 36 | dsh-config-manager@0.1.78 |
|
|
21
24
|
| `conversation` | — | 379 | харнесс |
|
|
22
25
|
| `cordis` | — | 51 | харнесс |
|
|
23
26
|
| `cotTranslation` | — | 32 | харнесс |
|
|
@@ -25,14 +28,25 @@
|
|
|
25
28
|
| `deliverables` | — | 60 | харнесс |
|
|
26
29
|
| `documentHtml` | HTML | 4 | харнесс |
|
|
27
30
|
| `documentMarkdown` | — | 4 | харнесс |
|
|
31
|
+
| `dsh-cost-meter` | Счётчик расходов | 85 | @goodandready/dsh-cost-meter@0.8.22 |
|
|
32
|
+
| `dsh-cron` | — | 396 | @goodandready/dsh-cron@0.3.14 |
|
|
33
|
+
| `dsh-image-gen` | Студия ИИ-изображений | 330 | @goodandready/dsh-image-gen@0.12.8 |
|
|
34
|
+
| `dsh-kanban` | Канбан | 420 | @goodandready/dsh-kanban@0.2.33 |
|
|
35
|
+
| `dsh-market` | Магазин плагинов | 733 | dshmarket@1.66.44 |
|
|
36
|
+
| `dsh-moa` | Ансамбль агентов (MoA) | 159 | @goodandready/dsh-moa@0.2.53 |
|
|
28
37
|
| `dsh-remote-ssh` | — | 111 | @zhangfengshun/dsh-remote-ssh@2.4.33 |
|
|
29
38
|
| `dsh-skill-explorer` | — | 75 | @linxin666/dsh-client-ui-skill-explorer@0.4.7 |
|
|
30
39
|
| `dsh-ssh` | — | 154 | @linxin666/dsh-ssh@0.4.7 |
|
|
40
|
+
| `dsh-tts` | Речь | 226 | @goodandready/dsh-tts@0.4.34 |
|
|
41
|
+
| `dsh-usage-guard` | Сторож расхода | 42 | @goodandready/dsh-usage-guard@0.1.19 |
|
|
42
|
+
| `dsh-voice` | Голос | 321 | @goodandready/dsh-voice@0.9.39 |
|
|
31
43
|
| `dsh-web-ui-market` | — | 106 | @linxin666/dsh-client-ui-market@0.4.7 |
|
|
32
44
|
| `dsh-web-ui-preset-center` | — | 46 | @linxin666/dsh-client-ui-preset-center@0.4.7 |
|
|
33
45
|
| `dsh-web-ui-session-archive` | — | 124 | @linxin666/dsh-session-archive@0.4.7 |
|
|
34
46
|
| `dsh-web-ui-usage` | — | 63 | @linxin666/dsh-usage@0.4.7 |
|
|
47
|
+
| `ego-browser` | ego-browser | 75 | dsh-ego-browser@0.8.6 |
|
|
35
48
|
| `feedback` | — | 20 | харнесс |
|
|
49
|
+
| `foldPositions` | — | 481 | billion-context@0.1.202 |
|
|
36
50
|
| `git-graph` | — | 63 | @linxin666/dsh-client-ui-git-graph@0.4.7 |
|
|
37
51
|
| `goal` | — | 12 | харнесс |
|
|
38
52
|
| `inspectorPanel` | Инспектор Node.js | 4 | харнесс |
|
|
@@ -42,6 +56,7 @@
|
|
|
42
56
|
| `model` | — | 23 | харнесс |
|
|
43
57
|
| `open-in-app` | — | 45 | харнесс |
|
|
44
58
|
| `permission.access` | Права доступа | 20 | харнесс |
|
|
59
|
+
| `personalDirective` | Переключение личной директивы | 5 | dsh-personal-directive@0.2.11 |
|
|
45
60
|
| `pet` | — | 81 | @linxin666/dsh-pet@0.4.7 |
|
|
46
61
|
| `plan` | — | 17 | харнесс |
|
|
47
62
|
| `pluginManager` | Плагины | 227 | харнесс |
|
|
@@ -87,11 +102,11 @@
|
|
|
87
102
|
| `task-board` | — | 437 | @linxin666/dsh-client-ui-task-board@0.4.7 |
|
|
88
103
|
| `task-board-github` | — | 113 | @linxin666/dsh-client-ui-task-board-github@0.4.7 |
|
|
89
104
|
| `trajectory` | — | 196 | харнесс |
|
|
90
|
-
| `univer` |
|
|
105
|
+
| `univer` | Просмотр Univer | 53 | dsh-univer-office@0.3.7 |
|
|
91
106
|
| `update` | — | 43 | @linxin666/dsh-update@0.4.7 |
|
|
92
107
|
| `voice-input` | — | 109 | харнесс |
|
|
93
108
|
| `web-ui-plugins` | Веб-плагины | 1 | @linxin666/dsh-client-ui-web-ui-settings@0.4.7 |
|
|
94
109
|
| `workflowRun` | — | 20 | харнесс |
|
|
95
110
|
| `workspace` | — | 131 | харнесс |
|
|
96
111
|
|
|
97
|
-
Итого: **
|
|
112
|
+
Итого: **96** namespace, **9012** строк.
|
package/README.en.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- deepseek-harness-meta
|
|
2
2
|
{
|
|
3
3
|
"name": "Russian (ru) language pack for DeepSeek Harness",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.10",
|
|
5
5
|
"tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
|
|
6
|
-
"description": "Full Russian interface (i18n) for the DeepSeek Harness web GUI:
|
|
6
|
+
"description": "Full Russian interface (i18n) for the DeepSeek Harness web GUI: 96 namespaces, 9012 translated strings, Russian screen typography, and a locale audit in CI pinned to a harness tag. Includes the automation-task manager and the reminder catalog.",
|
|
7
7
|
"icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
|
|
8
8
|
"compatible_versions": ["v0.2.1-rc.2", "v0.2.1-rc.1", "v0.2.1-alpha.5", "v0.2.1-alpha.4", "v0.2.1-alpha.3", "v0.2.1-alpha.2", "v0.2.1-alpha.1", "v0.2.0-rc.2", "v0.2.0-rc.1", "v0.1.7-rc.2", "v0.1.7-rc.1", "v0.1.7-alpha.2"],
|
|
9
9
|
"screenshots": "images",
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
[](LICENSE)
|
|
22
22
|
[](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
|
|
23
23
|
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
24
|
-
[](https://github.com/Ragnoryok1/dsh-client-locale-ru)
|
|
25
|
+
[](https://github.com/Ragnoryok1/dsh-client-locale-ru)
|
|
26
26
|
|
|
27
|
-
Russian (`ru`) language pack for the [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) web GUI (`dsh`). It registers `ru` as a selectable client language through the locale service (`ctx.locale.addLanguage`) plus one dictionary per namespace —
|
|
27
|
+
Russian (`ru`) language pack for the [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) web GUI (`dsh`). It registers `ru` as a selectable client language through the locale service (`ctx.locale.addLanguage`) plus one dictionary per namespace — 96 namespaces, 9,012 strings, built against dsh `0.2.1-rc.2`. Install with `dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru`, then pick **Русский** in Settings → General. Missing keys fall back to English, so a newer harness keeps working. The scope is the harness's own client interface only — third-party plugin dictionaries are deliberately out of scope, and 11 of the 17 most-downloaded ecosystem plugins ship no strings of their own, so they are already Russian through these namespaces. MIT, community-maintained, not affiliated with DeepSeek.
|
|
28
28
|
|
|
29
29
|
> **If the pack was useful to you, please star the repository.** It is the only signal that a
|
|
30
30
|
> translation is wanted, and it is what decides which parts get worked on next.
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
The complete inventory is in [NAMESPACES.md](NAMESPACES.md):
|
|
34
|
+
The complete inventory is in [NAMESPACES.md](NAMESPACES.md): 96 namespaces, 9012 strings, with the bundled plugin dictionaries marked.
|
|
35
35
|
|
|
36
36
|
The plugin names and descriptions on the Plugins page cannot come from this pack: the harness
|
|
37
37
|
keeps them in `locale/<language>.json` inside each package, builds a translation map from them,
|
|
@@ -105,7 +105,7 @@ two (the message names the version) or drop the `minimumReleaseAge` limit in the
|
|
|
105
105
|
settings.
|
|
106
106
|
The manifest is checked against the harness's own rules rather than by eye (`npm run check:manifest`, part of `verify`). Each rule was read out of the harness sources and each is a failure the user would otherwise meet first: `parseDshClient` accepts `platform` as any string while the consumers keep only `platform === 'web'`, so a typo like `'Web'` would **silently drop** the client half; a declared `dsh.client` without the `./client` export makes `client-modules` throw; and `dsh.bundle.patch` has to point at a file that exists.
|
|
107
107
|
|
|
108
|
-
Installing from GitHub works too: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (the form the plugin catalogue generates, without the npm scope) installs the repository archive, and the built `lib/` is committed — no build runs on your machine, and none is needed. That is exactly why `npm run check:built` (part of `verify`) rebuilds `lib/` and compares it with the commit: a stale bundle in git would reach the user, while the audit would never see it, because the audit reads the sources. The published package is
|
|
108
|
+
Installing from GitHub works too: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (the form the plugin catalogue generates, without the npm scope) installs the repository archive, and the built `lib/` is committed — no build runs on your machine, and none is needed. That is exactly why `npm run check:built` (part of `verify`) rebuilds `lib/` and compares it with the commit: a stale bundle in git would reach the user, while the audit would never see it, because the audit reads the sources. The published package is 614 kB: the banner ships as JPEG, and the icon and source map stay out of the npm payload.
|
|
109
109
|
|
|
110
110
|
## Why hybrid
|
|
111
111
|
|
|
@@ -377,32 +377,37 @@ pack never registers, leaves that screen in English while key coverage still loo
|
|
|
377
377
|
This is how `settings.sessionLog` was found — the “Upload Session Log” switch on the general
|
|
378
378
|
settings page.
|
|
379
379
|
|
|
380
|
-
## Coverage scope: the
|
|
380
|
+
## Coverage scope: the harness and plugin dictionaries
|
|
381
|
+
The package translates **the harness client's own namespaces** — 96 namespaces, reconciled
|
|
382
|
+
against the pinned tag — and **the dictionaries of third-party plugins**: 32 plugins whose
|
|
383
|
+
English text is vendored from their own publication, with the version and the licence.
|
|
381
384
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
385
|
+
Plugin dictionaries were out of scope before, and there was a reason: `dshmarket` is already
|
|
386
|
+
at version 1.66.44, its keys change independently of the harness, and a silent promise of
|
|
387
|
+
«everything is covered» is not a promise but a debt nobody can collect. The answer turned
|
|
388
|
+
out to be simple: the foreign English text is **vendored** (`npm run fetch:plugins`) and
|
|
389
|
+
stored next to the translation, with the package name, the version and the licence, and the
|
|
390
|
+
audit holds our translation to that snapshot rather than to somebody else's Russian. We
|
|
391
|
+
checked the 17 most-downloaded plugins in the ecosystem (npm, `keywords:dsh-plugin`, monthly
|
|
392
|
+
downloads) and looked at which of them ship strings of their own at all:
|
|
388
393
|
|
|
389
394
|
| What we found | Plugins |
|
|
390
395
|
|---|---|
|
|
391
396
|
| **No strings of their own** — the interface takes its text from harness namespaces | **11 of 17** |
|
|
392
|
-
| A large dictionary of their own (confirmed by hand) | 2 — `dshmarket` (
|
|
397
|
+
| A large dictionary of their own (confirmed by hand) | 2 — `dshmarket` (733 keys), `@nanmicoder/dsh-agent-teams` (420) |
|
|
393
398
|
| `.d.ts` types only, no strings | 1 — `dsh-plugin-model-proxy` |
|
|
394
399
|
| Needs a separate check | 3 |
|
|
395
400
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
in full.
|
|
399
|
-
|
|
400
|
-
and its keys change independently of the harness.
|
|
401
|
+
For 11 of the 17 most popular plugins the Russian interface already works without a
|
|
402
|
+
dictionary of their own: their text lives in the shared harness namespaces, which the package
|
|
403
|
+
translates in full. Dictionaries exist where a plugin carries strings of its own — there
|
|
404
|
+
are 32 of them, and each records the version its English text was vendored from.
|
|
401
405
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
promise that
|
|
406
|
+
Such a dictionary is a commitment to track someone else's releases, but it is now a
|
|
407
|
+
checkable one: a new version of the plugin with different keys shows up as a difference from
|
|
408
|
+
the snapshot instead of as silence. Need a specific plugin? Open an issue: a dictionary for
|
|
409
|
+
it is possible as a separate layer pinned to a version, rather than as a silent promise that
|
|
410
|
+
«everything is covered».
|
|
406
411
|
|
|
407
412
|
## Development
|
|
408
413
|
|
|
@@ -456,7 +461,7 @@ The workflow also has a manual run with a «только проверки, бе
|
|
|
456
461
|
|
|
457
462
|
## Contents
|
|
458
463
|
|
|
459
|
-
- `src/client/dicts.ts` — the Russian dictionaries (
|
|
464
|
+
- `src/client/dicts.ts` — the Russian dictionaries (96 namespaces, 9012 translations, ~6000 lines). This is where the main value lies.
|
|
460
465
|
- `src/client/index.ts` — the client plugin entry point (registration of `ru` + the dictionaries).
|
|
461
466
|
- `src/index.ts` — the empty host half (`apply()`).
|
|
462
467
|
- `cordis.patch.yml` — the profile patch (`- insert:` of the client entry `locale-ru`).
|
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- deepseek-harness-meta
|
|
2
2
|
{
|
|
3
3
|
"name": "Russian (ru) language pack for DeepSeek Harness",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.10",
|
|
5
5
|
"tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
|
|
6
|
-
"description": "Full Russian interface (i18n) for the DeepSeek Harness web GUI:
|
|
6
|
+
"description": "Full Russian interface (i18n) for the DeepSeek Harness web GUI: 96 namespaces, 9012 translated strings, Russian screen typography, and a locale audit in CI pinned to a harness tag. Includes the automation-task manager and the reminder catalog.",
|
|
7
7
|
"icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
|
|
8
8
|
"compatible_versions": ["v0.2.1-rc.2", "v0.2.1-rc.1", "v0.2.1-alpha.5", "v0.2.1-alpha.4", "v0.2.1-alpha.3", "v0.2.1-alpha.2", "v0.2.1-alpha.1", "v0.2.0-rc.2", "v0.2.0-rc.1", "v0.1.7-rc.2", "v0.1.7-rc.1", "v0.1.7-alpha.2"],
|
|
9
9
|
"screenshots": "images",
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
[](LICENSE)
|
|
22
22
|
[](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
|
|
23
23
|
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
24
|
-
[](https://github.com/Ragnoryok1/dsh-client-locale-ru)
|
|
25
|
+
[](https://github.com/Ragnoryok1/dsh-client-locale-ru)
|
|
26
26
|
|
|
27
|
-
Русский язык для веб-интерфейса DeepSeek Harness:
|
|
27
|
+
Русский язык для веб-интерфейса DeepSeek Harness: 96 namespaces, 9012 перевод, экранная типографика и аудит локализации в CI.
|
|
28
28
|
|
|
29
29
|
> **If the pack was useful to you, please star the repository.** It is the only signal that a
|
|
30
30
|
> translation is wanted, and it is what decides which parts get worked on next.
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
Полный список того, что переведено, — в [NAMESPACES.md](NAMESPACES.md):
|
|
34
|
+
Полный список того, что переведено, — в [NAMESPACES.md](NAMESPACES.md): 96 namespaces, 9012 строки, с пометкой у словарей плагинов.
|
|
35
35
|
|
|
36
36
|
Плагины за пределами дерева харнесса переводятся так же, но их английский текст берётся
|
|
37
37
|
из их собственной публикации: `plugins/<namespace>.json` хранит пакет, версию, лицензию и
|
|
@@ -114,7 +114,7 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
|
|
|
114
114
|
половину; declared `dsh.client` без экспорта `./client` заставляет `client-modules` бросить
|
|
115
115
|
ошибку; `dsh.bundle.patch` обязан указывать на существующий файл.
|
|
116
116
|
|
|
117
|
-
Установка из GitHub тоже работает: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (в таком виде команду генерирует каталог плагинов, без `@`-скоупа) ставит архив репозитория, а собранный `lib/` лежит в git — сборка на вашей машине не запускается и не требуется. Поэтому `npm run check:built` (входит в `verify`) пересобирает `lib/` и сверяет его с коммитом: устаревший бандл в git иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает
|
|
117
|
+
Установка из GitHub тоже работает: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (в таком виде команду генерирует каталог плагинов, без `@`-скоупа) ставит архив репозитория, а собранный `lib/` лежит в git — сборка на вашей машине не запускается и не требуется. Поэтому `npm run check:built` (входит в `verify`) пересобирает `lib/` и сверяет его с коммитом: устаревший бандл в git иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает 614 КБ: баннер отдаётся JPEG, а иконка и карта исходников в npm не входят.
|
|
118
118
|
|
|
119
119
|
## Почему гибрид
|
|
120
120
|
|
|
@@ -379,7 +379,7 @@ PLAN_NEXT_ACTION_EN`). Пока читался только первый вид,
|
|
|
379
379
|
(`list.aria` — «Активные напоминания» в каталоге и «Фоновые задачи» в задачах), поэтому
|
|
380
380
|
перевод переносится в чужой namespace только там, где оба namespace обслуживает один и
|
|
381
381
|
тот же словарь. На закреплённом теге отчёт пуст: каждая строка, которую харнесс рисует в
|
|
382
|
-
нашем namespace, лежит именно в нём. Сверяются все
|
|
382
|
+
нашем namespace, лежит именно в нём. Сверяются все 96 namespace пака — привязка строится и по
|
|
383
383
|
импорту словаря рядом с регистрацией, и по именам, которые передаёт сама регистрирующая
|
|
384
384
|
строка (`locale.register(NS, { zh, en })`); без второго правила `common` и `settings.locale`,
|
|
385
385
|
чьи словари лежат в соседнем каталоге, оставались бы вне сверки. Обратная сторона проверяется
|
|
@@ -388,32 +388,36 @@ PLAN_NEXT_ACTION_EN`). Пока читался только первый вид,
|
|
|
388
388
|
этого не видит. Так нашёлся `settings.sessionLog` — строка «Загружать журнал сессии» на
|
|
389
389
|
странице общих настроек.
|
|
390
390
|
|
|
391
|
-
## Область покрытия:
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
391
|
+
## Область покрытия: харнесс и словари плагинов
|
|
392
|
+
Пакет переводит **собственные namespace клиента харнесса** — 96 namespace, сверенные с
|
|
393
|
+
закреплённым тегом, — и **словари сторонних плагинов**: 32 плагина, чей английский текст
|
|
394
|
+
выгружен из их собственной публикации вместе с версией и лицензией.
|
|
395
|
+
|
|
396
|
+
Раньше словари плагинов в область не входили, и на то была причина: у `dshmarket` уже
|
|
397
|
+
версия 1.66.44, её ключи меняются независимо от харнесса, а молчаливое обещание «покрыто
|
|
398
|
+
всё» — это не обещание, а долг, который нельзя предъявить. Ответ оказался простым: чужой
|
|
399
|
+
английский текст **выгружается** (`npm run fetch:plugins`) и хранится рядом с переводом —
|
|
400
|
+
с именем пакета, версией и лицензией, а аудит сверяет наш перевод именно с этим снимком, а
|
|
401
|
+
не с чужим русским. Мы проверили 17 самых скачиваемых плагинов экосистемы (npm,
|
|
402
|
+
`keywords:dsh-plugin`, скачивания за месяц) и посмотрели, какие из них вообще поставляют
|
|
403
|
+
собственные строки:
|
|
404
|
+
|
|
405
|
+
| Что обнаружено | Плагинов |
|
|
406
|
+
|---|---|
|
|
407
|
+
| **Своих строк нет** — интерфейс берёт текст из namespace харнесса | **11 из 17** |
|
|
408
|
+
| Крупный собственный словарь (подтверждено вручную) | 2 — `dshmarket` (733 ключа), `@nanmicoder/dsh-agent-teams` (420) |
|
|
409
|
+
| Только типы `.d.ts`, строк нет | 1 — `dsh-plugin-model-proxy` |
|
|
410
|
+
| Требует отдельной проверки | 3 |
|
|
411
|
+
|
|
412
|
+
У 11 из 17 популярнейших плагинов русский интерфейс уже работает без отдельного словаря:
|
|
413
|
+
их текст лежит в общих namespace харнесса, которые пакет переводит полностью. Словари
|
|
414
|
+
есть там, где плагин везёт свои строки, — их 32, и у каждого зафиксирована версия, с
|
|
415
|
+
которой выгружен английский текст.
|
|
416
|
+
|
|
417
|
+
Такой словарь — обязательство следить за чужими релизами, но теперь оно проверяемое:
|
|
418
|
+
новая версия плагина с другими ключами видна как расхождение снимка, а не как тишина.
|
|
419
|
+
Нужен конкретный плагин — заведите issue: словарь для него возможен как отдельный слой,
|
|
420
|
+
привязанный к версии, а не как молчаливое обещание «покрыто всё».
|
|
417
421
|
|
|
418
422
|
## Разработка
|
|
419
423
|
|
|
@@ -467,7 +471,7 @@ npm run verify -- путь/к/дереву/харнесса
|
|
|
467
471
|
|
|
468
472
|
## Содержимое
|
|
469
473
|
|
|
470
|
-
- `src/client/dicts.ts` — русские словари (
|
|
474
|
+
- `src/client/dicts.ts` — русские словари (96 namespaces, 9012 перевод, ~6000 строк). Это и есть основная ценность.
|
|
471
475
|
- `src/client/index.ts` — точка входа клиентского плагина (регистрация `ru` + словарей).
|
|
472
476
|
- `src/index.ts` — пустая host-половина (`apply()`).
|
|
473
477
|
- `cordis.patch.yml` — профиль-патч (`- insert:` клиентской строки `locale-ru`).
|
package/README.zh.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- deepseek-harness-meta
|
|
2
2
|
{
|
|
3
3
|
"name": "Russian (ru) language pack for DeepSeek Harness",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.10",
|
|
5
5
|
"tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
|
|
6
|
-
"description": "Full Russian interface (i18n) for the DeepSeek Harness web GUI:
|
|
6
|
+
"description": "Full Russian interface (i18n) for the DeepSeek Harness web GUI: 96 namespaces, 9012 translated strings, Russian screen typography, and a locale audit in CI pinned to a harness tag. Includes the automation-task manager and the reminder catalog.",
|
|
7
7
|
"icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
|
|
8
8
|
"compatible_versions": ["v0.2.1-rc.2", "v0.2.1-rc.1", "v0.2.1-alpha.5", "v0.2.1-alpha.4", "v0.2.1-alpha.3", "v0.2.1-alpha.2", "v0.2.1-alpha.1", "v0.2.0-rc.2", "v0.2.0-rc.1", "v0.1.7-rc.2", "v0.1.7-rc.1", "v0.1.7-alpha.2"],
|
|
9
9
|
"screenshots": "images",
|
|
@@ -21,16 +21,16 @@
|
|
|
21
21
|
[](LICENSE)
|
|
22
22
|
[](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
|
|
23
23
|
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
24
|
-
[](https://github.com/Ragnoryok1/dsh-client-locale-ru)
|
|
25
|
+
[](https://github.com/Ragnoryok1/dsh-client-locale-ru)
|
|
26
26
|
|
|
27
|
-
[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) Web 界面(`dsh`)的俄语(`ru`)语言包。它通过 locale 服务(`ctx.locale.addLanguage`)把 `ru` 注册为可选的客户端语言,并为每个 namespace 提供一份词典——共
|
|
27
|
+
[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) Web 界面(`dsh`)的俄语(`ru`)语言包。它通过 locale 服务(`ctx.locale.addLanguage`)把 `ru` 注册为可选的客户端语言,并为每个 namespace 提供一份词典——共 96 个 namespace、9,012 条翻译,基于 dsh `0.2.1-alpha.3` 构建。用 `dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru` 安装,然后在 Settings → General 中选择 **Русский**。缺失的 key 会回退到英文,因此更新的 harness 也能照常工作。覆盖范围仅限 harness 自带的客户端界面——第三方插件的词典有意不纳入范围,而下载量最高的 17 个生态插件中有 11 个不提供自己的字符串,所以它们通过这些 namespace 已经是俄语界面了。MIT 许可,由社区维护,与 DeepSeek 无隶属关系。
|
|
28
28
|
|
|
29
29
|
> **如果这个包对你有用,请给仓库点一颗 star。** 这是表明「有人需要这份翻译」的唯一信号,它也决定了接下来优先做哪些部分。
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
完整清单见 [NAMESPACES.md](NAMESPACES.md):
|
|
33
|
+
完整清单见 [NAMESPACES.md](NAMESPACES.md):96 个 namespace、9012 条字符串,随包附带的插件词典单独标注。
|
|
34
34
|
|
|
35
35
|
如果 pnpm 报 `ERR_PNPM_NO_MATURE_MATCHING_VERSION`,这不是包坏了,而是成熟度策略:配置文件
|
|
36
36
|
不安装发布不足 48 小时的版本。等一两天(报错信息里写着版本号),或在配置文件设置里去掉
|
|
@@ -90,7 +90,7 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
|
|
|
90
90
|
|
|
91
91
|
清单按 harness 自身的规则检查,而不是靠肉眼(`npm run check:manifest`,包含在 `verify` 中)。每一条规则都取自 harness 源码,每一条都对应一种否则会先落到用户头上的失败:`parseDshClient` 接受任意字符串作为 `platform`,但消费方只保留 `platform === 'web'` 的行,因此写成 `'Web'` 这样的笔误会**悄悄关掉**客户端那一半;声明了 `dsh.client` 却没有 `./client` 导出会让 `client-modules` 抛错;`dsh.bundle.patch` 必须指向确实存在的文件。
|
|
92
92
|
|
|
93
|
-
从 GitHub 安装同样可用:`dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru`(插件目录生成的就是这种不带 npm scope 的写法)安装的是仓库归档,而构建好的 `lib/` 已提交进 git——你的机器上不会运行构建,也不需要运行。正因如此,`npm run check:built`(包含在 `verify` 中)会重新构建 `lib/` 并与提交内容比对:git 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为
|
|
93
|
+
从 GitHub 安装同样可用:`dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru`(插件目录生成的就是这种不带 npm scope 的写法)安装的是仓库归档,而构建好的 `lib/` 已提交进 git——你的机器上不会运行构建,也不需要运行。正因如此,`npm run check:built`(包含在 `verify` 中)会重新构建 `lib/` 并与提交内容比对:git 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为 614 KB:横幅以 JPEG 提供,图标与源码映射不进入 npm 包。
|
|
94
94
|
|
|
95
95
|
## 为什么是混合插件
|
|
96
96
|
|
|
@@ -169,24 +169,32 @@ npm run diff:harness -- <old> <new> # harness 改写了哪些英文
|
|
|
169
169
|
|
|
170
170
|
标签的新旧由单独的 workflow 盯守:`watch-upstream` 每周把锁定的标签与 harness 的标签比对一次,出现更新的标签就开一个 issue(内含操作步骤)并把运行标红——让「落后」按计划被发现,而不是靠用户的截图。版本比较无需网络即可验证(`npm run check:upstream`,五个用例),并且纳入 `verify`:正式版本必须比自己的预发布版本更新,否则盯守会永远报警。
|
|
171
171
|
|
|
172
|
-
覆盖率数字不是门禁:有些分区是有意保留英文的。紧随其后,审计会打印**按 namespace** 的报告:它根据注册方重建「namespace → 词典」的对应关系(`NS` 声明,或 `locale.register` 里的字面量;`bind` 与 `PropsLocale` 只是读取 namespace),并列出既不在自己 namespace、也不在运行时回退所用的 `common` 词典中的 key。全局比较 key 名称看不到这类空洞:放在别的 namespace 下的翻译会被算作已覆盖,而那个界面实际显示英文。该报告仅供参考——同名 key 在不同 namespace 下含义可能不同(`list.aria` 在提醒目录里是「活动提醒」,在任务里是「后台任务」),因此只有在两个 namespace 由同一份词典提供服务时才会跨 namespace 搬运翻译。在锁定的标签上,该报告为空:harness 在我们注册的 namespace 里渲染的每一条字符串,都位于该 namespace。本包的全部
|
|
173
|
-
|
|
174
|
-
##
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
172
|
+
覆盖率数字不是门禁:有些分区是有意保留英文的。紧随其后,审计会打印**按 namespace** 的报告:它根据注册方重建「namespace → 词典」的对应关系(`NS` 声明,或 `locale.register` 里的字面量;`bind` 与 `PropsLocale` 只是读取 namespace),并列出既不在自己 namespace、也不在运行时回退所用的 `common` 词典中的 key。全局比较 key 名称看不到这类空洞:放在别的 namespace 下的翻译会被算作已覆盖,而那个界面实际显示英文。该报告仅供参考——同名 key 在不同 namespace 下含义可能不同(`list.aria` 在提醒目录里是「活动提醒」,在任务里是「后台任务」),因此只有在两个 namespace 由同一份词典提供服务时才会跨 namespace 搬运翻译。在锁定的标签上,该报告为空:harness 在我们注册的 namespace 里渲染的每一条字符串,都位于该 namespace。本包的全部 96 个 namespace 都会被比对——对应关系既来自紧邻注册处的词典导入,也来自注册语句本身传入的名称(`locale.register(NS, { zh, en })`);若没有第二条规则,词典位于相邻目录的 `common` 与 `settings.locale` 就会落在检查之外。反方向是硬失败而不是参考报告:harness 注册并填充了 key、而本包从不注册的 namespace,会让那个界面停留在英文,而按 key 名称统计的覆盖率看起来依然完整。`settings.sessionLog` 正是这样被发现的——通用设置页上的「上传 Session Log」开关。
|
|
173
|
+
|
|
174
|
+
## 覆盖范围:harness 与插件词典
|
|
175
|
+
本包翻译 **harness 客户端自有的 namespace**——共 96 个 namespace,已与锁定标签核对——以及
|
|
176
|
+
**第三方插件的词典**:32 个插件,其英文文本连同版本与许可证一起从它们自己的发布物中提取。
|
|
177
|
+
|
|
178
|
+
此前插件词典不在范围内,理由是:`dshmarket` 已经到 1.66.44 版本,它的 key 变化与 harness
|
|
179
|
+
无关,而「全部都覆盖了」这种无声承诺不是承诺,是一笔没人能讨的债。答案其实很简单:把
|
|
180
|
+
别人的英文文本**提取出来**(`npm run fetch:plugins`),与翻译放在一起——带上包名、版本与
|
|
181
|
+
许可证,审计比对的正是这份快照,而不是别人的俄语。我们检查了生态中下载量最高的 17 个
|
|
182
|
+
插件(npm、`keywords:dsh-plugin`、月下载量),看其中哪些会提供自己的字符串:
|
|
183
|
+
|
|
184
|
+
| 发现的情况 | 插件数 |
|
|
185
|
+
|---|---|
|
|
186
|
+
| **没有自己的字符串**——界面文本取自 harness 的 namespace | **17 个中的 11 个** |
|
|
187
|
+
| 较大的自有词典(已人工确认) | 2 个——`dshmarket`(733 个 key)、`@nanmicoder/dsh-agent-teams`(420) |
|
|
188
|
+
| 只有 `.d.ts` 类型,没有字符串 | 1 个——`dsh-plugin-model-proxy` |
|
|
189
|
+
| 需要单独检查 | 3 个 |
|
|
190
|
+
|
|
191
|
+
在最流行的 17 个插件里,有 11 个的俄语界面无需单独词典即可工作——它们的文本位于 harness
|
|
192
|
+
的公共 namespace 中,而本包已把这些 namespace 完整翻译。词典存在于插件自带字符串的地方,
|
|
193
|
+
共 32 个,每个都记着提取英文文本时所依据的版本。
|
|
194
|
+
|
|
195
|
+
这样的词典意味着要跟进别人的发布节奏,但现在这份责任是可核查的:插件的新版本带来不同的
|
|
196
|
+
key 时,表现为与快照的差异,而不是一片沉默。需要某个具体插件——请开 issue:可以为它做一个
|
|
197
|
+
绑定版本的独立层词典,而不是默默地承诺「全部都覆盖了」。
|
|
190
198
|
|
|
191
199
|
## 开发
|
|
192
200
|
|
|
@@ -228,7 +236,7 @@ npm run verify -- путь/к/дереву/харнесса
|
|
|
228
236
|
|
|
229
237
|
## 内容
|
|
230
238
|
|
|
231
|
-
- `src/client/dicts.ts`——俄语词典(
|
|
239
|
+
- `src/client/dicts.ts`——俄语词典(96 个 namespace、9012 条翻译、约 6000 行)。这正是本包的核心价值。
|
|
232
240
|
- `src/client/index.ts`——客户端插件入口(注册 `ru` 和词典)。
|
|
233
241
|
- `src/index.ts`——空的宿主部分(`apply()`)。
|
|
234
242
|
- `cordis.patch.yml`——profile 补丁(`- insert:` 客户端条目 `locale-ru`)。
|
package/images/plugins-ru.png
CHANGED
|
Binary file
|
package/images/settings-ru.png
CHANGED
|
Binary file
|