@ragnoryok1/dsh-client-locale-ru 0.2.11 → 0.2.13
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 +49 -0
- package/NAMESPACES.md +9 -2
- package/README.en.md +21 -16
- package/README.md +21 -16
- package/README.zh.md +12 -12
- package/lib/client.js +1568 -0
- package/package.json +6 -4
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,55 @@
|
|
|
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.13] — 2026-10-20
|
|
10
|
+
|
|
11
|
+
### Добавлено
|
|
12
|
+
|
|
13
|
+
- **Словари сторонних плагинов: 66.** За этот релиз их стало на семь больше:
|
|
14
|
+
`dsh-context` (595 ключей), `clearai` (297), `dsh-skill-hub` (262),
|
|
15
|
+
`@xfqz86/dsh-usage-stats` (210), `@goodandready/dsh-key-limits` (140),
|
|
16
|
+
`@michengai/dsh-skills-manager` (118), `@michengai/dsh-agency-agents` (92) и
|
|
17
|
+
`dsh-plugins-store` (77). Всего 130 namespace и 14 086 строк, из них 11 053 — в
|
|
18
|
+
словарях плагинов, 3 033 — в namespace самого харнесса.
|
|
19
|
+
- **Выгрузка словарей читает и минифицированные сборки.** Плагин, собранный минификатором,
|
|
20
|
+
пишет `locale.register(Au,{zh:m,en:h})`: namespace — буква в обратных кавычках, словарь —
|
|
21
|
+
объект под именем в одну букву. Раньше такой пакет читался как «слов нет» и терялся.
|
|
22
|
+
Теперь namespace и словарь ищутся по всему пакету, словарь собирается из частей
|
|
23
|
+
(`{ ...enCommon, ...enSkills }`) и находится даже там, где плагин регистрирует его
|
|
24
|
+
через свою обёртку (`addLocale("en", KL_en)`).
|
|
25
|
+
- **Плагин `clearai` оставлен непереведённым.** Его словарь разбит на китайские фрагменты
|
|
26
|
+
предложений, а плагин склеивает их в китайские фразы: фрагмент нельзя перевести
|
|
27
|
+
отдельно, а половина переведённого словаря дала бы в интерфейсе смесь языков.
|
|
28
|
+
|
|
29
|
+
### Исправлено
|
|
30
|
+
|
|
31
|
+
- **Аудит больше не считает дефектом непарную кавычку, которую открывает сам плагин.**
|
|
32
|
+
Значение `deleteConfirm` у `dsh-key-limits` кончается открытой ёлочкой — закрывающую
|
|
33
|
+
добавляет код плагина. Если и в английском шаблоне кавычка непарная, наша тоже.
|
|
34
|
+
- **Проверка `check:built` больше не врачит о больших бандлах.** `git show` файла больше
|
|
35
|
+
мегабайта упирался в мегабайтный буфер `spawnSync` и завершался ошибкой, а проверка
|
|
36
|
+
читала это как «файла нет в коммите».
|
|
37
|
+
|
|
38
|
+
## [0.2.12] — 2026-10-20
|
|
39
|
+
|
|
40
|
+
### Добавлено
|
|
41
|
+
|
|
42
|
+
- **Названия и описания сторонних плагинов — на русском.** Проход, который подставляет
|
|
43
|
+
русское название плагина в отрисованный интерфейс, знал только 32 названия плагинов
|
|
44
|
+
самого харнесса. Теперь в `src/client/plugin-names-ru.json` лежат названия и описания
|
|
45
|
+
ещё 32 сторонних плагинов — тех, чьи словари пакет переводит: английский текст взят
|
|
46
|
+
из их собственной публикации, русский — из того же словаря. Файл собирается
|
|
47
|
+
(`npm run build:plugin-names`), а гейт `npm run check:plugin-names:map` падает, когда
|
|
48
|
+
карта разошлась со словарями. Одно и то же английское название не может быть
|
|
49
|
+
переведено дважды: по-разному у харнесса и у плагина — сборка падает.
|
|
50
|
+
|
|
51
|
+
### Исправлено
|
|
52
|
+
|
|
53
|
+
- **Проверка собранного бандла перестала врать о больших файлах.** `git show` бандла
|
|
54
|
+
больше мегабайта упирался в мегабайтный буфер `spawnSync` и завершался ошибкой, а
|
|
55
|
+
проверка читала это как «файла нет в коммите»: бандл любого размера выше лимита нельзя
|
|
56
|
+
было сверить с коммитом.
|
|
57
|
+
|
|
9
58
|
## [0.2.11] — 2026-10-20
|
|
10
59
|
|
|
11
60
|
### Добавлено
|
package/NAMESPACES.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- Сгенерировано `npm run namespaces`; проверяется `npm run check:namespaces`. -->
|
|
2
2
|
# Что переведено
|
|
3
3
|
|
|
4
|
-
Пакет переводит **
|
|
4
|
+
Пакет переводит **130 namespace** — 14086 строк. Колонка «как это выглядит»
|
|
5
5
|
берёт заголовок самого namespace (то, что читает пользователь), а не отдельное описание:
|
|
6
6
|
список нельзя разойтись с переводами.
|
|
7
7
|
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
| namespace | как это выглядит | строк | источник |
|
|
14
14
|
|---|---|---|---|
|
|
15
|
+
| `agency` | — | 94 | @michengai/dsh-agency-agents@1.2.8 |
|
|
15
16
|
| `agent-team` | Команда агентов | 25 | харнесс |
|
|
16
17
|
| `approval` | — | 5 | харнесс |
|
|
17
18
|
| `better-input` | — | 123 | dsh-better-input@0.2.6 |
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
| `documentMarkdown` | — | 4 | харнесс |
|
|
31
32
|
| `dsh-approval-gate` | Шлюз подтверждений | 30 | @goodandready/dsh-approval-gate@0.1.30 |
|
|
32
33
|
| `dsh-clinebot` | ClineBot | 206 | @goodandready/dsh-clinebot@0.5.33 |
|
|
34
|
+
| `dsh-context` | — | 595 | dsh-context@0.73.3 |
|
|
33
35
|
| `dsh-context-lens` | Линза контекста | 11 | @goodandready/dsh-context-lens@0.1.34 |
|
|
34
36
|
| `dsh-cost-meter` | Счётчик расходов | 85 | @goodandready/dsh-cost-meter@0.8.22 |
|
|
35
37
|
| `dsh-cron` | — | 396 | @goodandready/dsh-cron@0.3.14 |
|
|
@@ -40,6 +42,7 @@
|
|
|
40
42
|
| `dsh-image-gen` | Студия ИИ-изображений | 330 | @goodandready/dsh-image-gen@0.12.8 |
|
|
41
43
|
| `dsh-issue-reporter` | Отчёты о проблемах | 99 | @goodandready/dsh-issue-reporter@0.1.14 |
|
|
42
44
|
| `dsh-kanban` | Канбан | 420 | @goodandready/dsh-kanban@0.2.33 |
|
|
45
|
+
| `dsh-key-limits` | Лимиты ключей | 140 | @goodandready/dsh-key-limits@0.2.28 |
|
|
43
46
|
| `dsh-key-rotation` | Ротация ключей | 251 | @goodandready/dsh-key-rotation@0.8.69 |
|
|
44
47
|
| `dsh-lanmode` | DeepSeek Harness | 18 | @goodandready/dsh-lanmode@0.8.48 |
|
|
45
48
|
| `dsh-live-canvas` | Предпросмотр живого холста | 161 | @goodandready/dsh-live-canvas@0.2.30 |
|
|
@@ -53,12 +56,14 @@
|
|
|
53
56
|
| `dsh-session-control` | — | 113 | @goodandready/dsh-session-control@0.2.10 |
|
|
54
57
|
| `dsh-shadow-auditor` | Теневой аудитор безопасности | 74 | @goodandready/dsh-shadow-auditor@0.2.35 |
|
|
55
58
|
| `dsh-skill-explorer` | — | 75 | @linxin666/dsh-client-ui-skill-explorer@0.4.7 |
|
|
59
|
+
| `dsh-skill-hub` | — | 262 | dsh-skill-hub@0.3.26 |
|
|
56
60
|
| `dsh-ssh` | — | 154 | @linxin666/dsh-ssh@0.4.7 |
|
|
57
61
|
| `dsh-subscriptions` | Подписки | 293 | @goodandready/dsh-subscriptions@0.6.72 |
|
|
58
62
|
| `dsh-superpower` | Переключатели навыков | 19 | @wenaixi/dsh-superpower@8.0.0 |
|
|
59
63
|
| `dsh-time-machine` | Машина времени и точки отката | 41 | @goodandready/dsh-time-machine@0.1.30 |
|
|
60
64
|
| `dsh-tts` | Речь | 226 | @goodandready/dsh-tts@0.4.34 |
|
|
61
65
|
| `dsh-usage-guard` | Сторож расхода | 42 | @goodandready/dsh-usage-guard@0.1.19 |
|
|
66
|
+
| `dsh-usage-stats` | — | 210 | @xfqz86/dsh-usage-stats@0.5.1 |
|
|
62
67
|
| `dsh-vision-bridge` | Зрение | 116 | @goodandready/dsh-vision-bridge@0.6.21 |
|
|
63
68
|
| `dsh-voice` | Голос | 321 | @goodandready/dsh-voice@0.9.39 |
|
|
64
69
|
| `dsh-web-gateway` | Веб-шлюз | 95 | @goodandready/dsh-web-gateway@0.2.1 |
|
|
@@ -83,6 +88,7 @@
|
|
|
83
88
|
| `pet` | — | 81 | @linxin666/dsh-pet@0.4.7 |
|
|
84
89
|
| `pin` | — | 2 | @vlln/dsh-navbar@0.4.0 |
|
|
85
90
|
| `plan` | — | 17 | харнесс |
|
|
91
|
+
| `plugin-store` | — | 77 | dsh-plugins-store@0.1.4 |
|
|
86
92
|
| `pluginManager` | Плагины | 227 | харнесс |
|
|
87
93
|
| `pluginMarket` | Обзор плагинов | 78 | харнесс |
|
|
88
94
|
| `question` | — | 31 | харнесс |
|
|
@@ -124,6 +130,7 @@
|
|
|
124
130
|
| `sidebarRight` | — | 34 | харнесс |
|
|
125
131
|
| `sidebarTerminal` | Терминал | 28 | харнесс |
|
|
126
132
|
| `skill` | — | 8 | харнесс |
|
|
133
|
+
| `skills-manager` | — | 118 | @michengai/dsh-skills-manager@1.2.8 |
|
|
127
134
|
| `slash.menu` | — | 9 | харнесс |
|
|
128
135
|
| `subagent` | — | 79 | харнесс |
|
|
129
136
|
| `task-board` | — | 437 | @linxin666/dsh-client-ui-task-board@0.4.7 |
|
|
@@ -136,4 +143,4 @@
|
|
|
136
143
|
| `workflowRun` | — | 20 | харнесс |
|
|
137
144
|
| `workspace` | — | 131 | харнесс |
|
|
138
145
|
|
|
139
|
-
Итого: **
|
|
146
|
+
Итого: **130** namespace, **14086** строк.
|
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.13",
|
|
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: 130 namespaces, 14086 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 — 130 namespaces, 14,086 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 — 64 namespaces (3 033 strings) — plus the dictionaries of 59 third-party plugins, translated from the English each plugin publishes (9 557 strings in total). 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): 130 namespaces, 14,086 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 724 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
|
|
|
@@ -175,11 +175,12 @@ resolves that map without consulting registered dictionaries — its own documen
|
|
|
175
175
|
plugin's name: the pack has no access to another package's map, and the English name stays
|
|
176
176
|
English until the plugin itself ships `locale/ru.json`.
|
|
177
177
|
|
|
178
|
-
The pack carries those names itself:
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
178
|
+
The pack carries those names itself: the names of the 32 harness plugins and the names and
|
|
179
|
+
descriptions of 33 third-party plugins whose dictionaries it translates. Each comes with the
|
|
180
|
+
English text the translation was made from and the Russian text. The rendered interface passes
|
|
181
|
+
through a pass that puts the Russian text where the English was — in the plugin cards, in the
|
|
182
|
+
rows of a bundle, on a plugin's page and in the settings inventory. The accessible name
|
|
183
|
+
(`aria-label`) is replaced too, so a card is read in Russian as a whole.
|
|
183
184
|
|
|
184
185
|
The pass matches exactly: a string is replaced only when the whole string is one of the titles
|
|
185
186
|
or descriptions the pack knows. A sentence that merely mentions a name keeps its wording;
|
|
@@ -190,7 +191,11 @@ The same 32 names go to the harness as a patch (`docs/harness-descriptors-ru.pat
|
|
|
190
191
|
harness interface the plugins are named in Russian, and the patch gets there first. The patch
|
|
191
192
|
is a build artefact — it is built from the translations and the harness tree, and the gate
|
|
192
193
|
`npm run check:descriptor-patch` fails when the built patch and the committed one differ.
|
|
193
|
-
|
|
194
|
+
The third-party names live in `src/client/plugin-names-ru.json`: the file is built from the
|
|
195
|
+
vendored plugin dictionaries (`npm run build:plugin-names`), and the gate
|
|
196
|
+
`npm run check:plugin-names:map` fails when the map has drifted from the dictionaries. The same
|
|
197
|
+
English name cannot be translated two ways — differently in the harness and in a plugin.
|
|
198
|
+
`npm run check:plugin-names` proves on a real document (jsdom, 12 cases) that the pass
|
|
194
199
|
translates the title, the description, the accessible name and a bundle row — and leaves what
|
|
195
200
|
it must alone.
|
|
196
201
|
|
|
@@ -368,7 +373,7 @@ The report is advisory — the same key name can mean different things in differ
|
|
|
368
373
|
(`list.aria` is "Active reminders" in the catalog and "Background jobs" in jobs), so a
|
|
369
374
|
translation is copied across namespaces only where one dictionary serves both. On the pinned
|
|
370
375
|
tag the report is empty: every string the harness renders in a namespace we register lives in
|
|
371
|
-
that namespace. All
|
|
376
|
+
that namespace. All 130 of the pack's namespaces are compared — the link comes both from a
|
|
372
377
|
dictionary imported beside the registration and from the names that registration passes
|
|
373
378
|
(`locale.register(NS, { zh, en })`); without the second rule `common` and `settings.locale`,
|
|
374
379
|
whose dictionaries sit in a neighbouring directory, would stay uncovered. The other direction is
|
|
@@ -379,7 +384,7 @@ settings page.
|
|
|
379
384
|
|
|
380
385
|
## Coverage scope: the harness and plugin dictionaries
|
|
381
386
|
The package translates **the harness client's own namespaces** — 64 namespaces reconciled
|
|
382
|
-
against the pinned tag — and **the dictionaries of third-party plugins**:
|
|
387
|
+
against the pinned tag — and **the dictionaries of third-party plugins**: 66 plugins whose
|
|
383
388
|
English text is vendored from their own publication, with the version and the licence.
|
|
384
389
|
|
|
385
390
|
Plugin dictionaries were out of scope before, and there was a reason: `dshmarket` is already
|
|
@@ -461,7 +466,7 @@ The workflow also has a manual run with a «только проверки, бе
|
|
|
461
466
|
|
|
462
467
|
## Contents
|
|
463
468
|
|
|
464
|
-
- `src/client/dicts.ts` — the Russian dictionaries (
|
|
469
|
+
- `src/client/dicts.ts` — the Russian dictionaries (130 namespaces, 14,086 translations, ~15,000 lines). This is where the main value lies.
|
|
465
470
|
- `src/client/index.ts` — the client plugin entry point (registration of `ru` + the dictionaries).
|
|
466
471
|
- `src/index.ts` — the empty host half (`apply()`).
|
|
467
472
|
- `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.13",
|
|
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: 130 namespaces, 14086 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: 130 namespaces, 14086 перевод, экранная типографика и аудит локализации в 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): 130 namespaces, 14 086 строк, с пометкой у словарей плагинов.
|
|
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 иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает 724 КБ: баннер отдаётся JPEG, а иконка и карта исходников в npm не входят.
|
|
118
118
|
|
|
119
119
|
## Почему гибрид
|
|
120
120
|
|
|
@@ -185,11 +185,12 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
|
|
|
185
185
|
перевести — у пакета нет доступа к чужой карте, и английское название остаётся английским,
|
|
186
186
|
пока сам плагин не привезёт `locale/ru.json`.
|
|
187
187
|
|
|
188
|
-
Пакет несёт эти названия сам:
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
(`aria-label`),
|
|
188
|
+
Пакет несёт эти названия сам: названия 32 плагинов харнесса и названия с описаниями 33
|
|
189
|
+
сторонних плагинов, чьи словари он переводит. У каждого — английский текст, из которого сделан
|
|
190
|
+
перевод, и русский. Отрисованный интерфейс проходит через проход, который подставляет
|
|
191
|
+
русский текст на место английского: в карточках плагинов, в строках состава bundle, на
|
|
192
|
+
странице плагина и в реестре настроек. Подменяется и имя для скринридера (`aria-label`),
|
|
193
|
+
чтобы карточка читалась по-русски целиком.
|
|
193
194
|
|
|
194
195
|
Проход берёт только точное совпадение: строка целиком равна названию или описанию из пакета.
|
|
195
196
|
Предложение, в котором название лишь упомянуто, остаётся как было; код, поля ввода и переписка
|
|
@@ -199,7 +200,11 @@ bundle, на странице плагина и в реестре настрое
|
|
|
199
200
|
интерфейсе самого харнесса плагины называются по-русски, и патч этот до начала. Патч —
|
|
200
201
|
собираемый артефакт: он строится из переводов и дерева харнесса, а гейт
|
|
201
202
|
`npm run check:descriptor-patch` падает, когда собранный и лежащий в репозитории разошлись.
|
|
202
|
-
|
|
203
|
+
Сторонние названия лежат в `src/client/plugin-names-ru.json`: файл собирается из
|
|
204
|
+
выгруженных словарей плагинов (`npm run build:plugin-names`), а гейт
|
|
205
|
+
`npm run check:plugin-names:map` падает, когда карта разошлась со словарями. Одно и то же
|
|
206
|
+
английское название не может быть переведено дважды — по-разному у харнесса и у плагина.
|
|
207
|
+
`npm run check:plugin-names` доказывает на настоящем документе (jsdom, 12 случаев), что проход
|
|
203
208
|
переводит название, описание, имя для скринридера и строку bundle — и не трогает то, что не
|
|
204
209
|
должен.
|
|
205
210
|
|
|
@@ -379,7 +384,7 @@ PLAN_NEXT_ACTION_EN`). Пока читался только первый вид,
|
|
|
379
384
|
(`list.aria` — «Активные напоминания» в каталоге и «Фоновые задачи» в задачах), поэтому
|
|
380
385
|
перевод переносится в чужой namespace только там, где оба namespace обслуживает один и
|
|
381
386
|
тот же словарь. На закреплённом теге отчёт пуст: каждая строка, которую харнесс рисует в
|
|
382
|
-
нашем namespace, лежит именно в нём. Сверяются все
|
|
387
|
+
нашем namespace, лежит именно в нём. Сверяются все 130 namespace пака — привязка строится и по
|
|
383
388
|
импорту словаря рядом с регистрацией, и по именам, которые передаёт сама регистрирующая
|
|
384
389
|
строка (`locale.register(NS, { zh, en })`); без второго правила `common` и `settings.locale`,
|
|
385
390
|
чьи словари лежат в соседнем каталоге, оставались бы вне сверки. Обратная сторона проверяется
|
|
@@ -390,7 +395,7 @@ PLAN_NEXT_ACTION_EN`). Пока читался только первый вид,
|
|
|
390
395
|
|
|
391
396
|
## Область покрытия: харнесс и словари плагинов
|
|
392
397
|
Пакет переводит **собственные namespace клиента харнесса** — 64 namespace сверенных с
|
|
393
|
-
закреплённым тегом, — и **словари сторонних плагинов**:
|
|
398
|
+
закреплённым тегом, — и **словари сторонних плагинов**: 66 плагинов, чей английский текст
|
|
394
399
|
выгружен из их собственной публикации вместе с версией и лицензией.
|
|
395
400
|
|
|
396
401
|
Раньше словари плагинов в область не входили, и на то была причина: у `dshmarket` уже
|
|
@@ -471,7 +476,7 @@ npm run verify -- путь/к/дереву/харнесса
|
|
|
471
476
|
|
|
472
477
|
## Содержимое
|
|
473
478
|
|
|
474
|
-
- `src/client/dicts.ts` — русские словари (
|
|
479
|
+
- `src/client/dicts.ts` — русские словари (130 namespaces, 14086 перевод, ~15 000 строк). Это и есть основная ценность.
|
|
475
480
|
- `src/client/index.ts` — точка входа клиентского плагина (регистрация `ru` + словарей).
|
|
476
481
|
- `src/index.ts` — пустая host-половина (`apply()`).
|
|
477
482
|
- `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.13",
|
|
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: 130 namespaces, 14086 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 提供一份词典——共 130 个 namespace、14,086 条翻译,基于 dsh `0.2.1-alpha.3` 构建。用 `dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru` 安装,然后在 Settings → General 中选择 **Русский**。缺失的 key 会回退到英文,因此更新的 harness 也能照常工作。覆盖范围是 harness 自带的客户端界面(64 个 namespace,3 033 条翻译),以及 59 个第三方插件的词典——它们各自发布的英文原文都被取来翻译(共 9 557 条)。MIT 许可,由社区维护,与 DeepSeek 无隶属关系。
|
|
28
28
|
|
|
29
29
|
> **如果这个包对你有用,请给仓库点一颗 star。** 这是表明「有人需要这份翻译」的唯一信号,它也决定了接下来优先做哪些部分。
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
完整清单见 [NAMESPACES.md](NAMESPACES.md):
|
|
33
|
+
完整清单见 [NAMESPACES.md](NAMESPACES.md):130 个 namespace、14,086 条字符串,随包附带的插件词典单独标注。
|
|
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 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为 724 KB:横幅以 JPEG 提供,图标与源码映射不进入 npm 包。
|
|
94
94
|
|
|
95
95
|
## 为什么是混合插件
|
|
96
96
|
|
|
@@ -123,11 +123,11 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
|
|
|
123
123
|
|
|
124
124
|
插件的名称来自它自己的 `locale/<语言>.json` 文件,而本地化服务解析这张映射时不会去查已注册的词典——它自己的文档写着 «maps do not consult registered dictionaries»。因此词典无法翻译插件名称:本包拿不到别的包的映射,英文名称会一直是英文,直到插件自己带上 `locale/ru.json`。
|
|
125
125
|
|
|
126
|
-
本包自带这些名称:
|
|
126
|
+
本包自带这些名称:32 个 harness 插件的名称,以及 33 个第三方插件的名称与说明(这些插件的词典本包在翻译)。每一项都记着翻译所依据的英文文本和俄文文本。已经渲染出来的界面会经过一个处理流程,把俄文放到英文的位置上:插件卡片、bundle 的组成行、插件详情页以及设置中的插件清单。朗读用的名称(`aria-label`)也会一并替换,因此整张卡片读起来都是俄文。
|
|
127
127
|
|
|
128
128
|
这个流程只做精确匹配:整段文本与本包知道的标题或说明完全相同时才会替换。只是提到了某个名称的句子保持原样;代码、输入框和对话不会被触碰。与排版流程一样,它只在俄文是当前语言时工作。
|
|
129
129
|
|
|
130
|
-
同样这 32 个名称会作为补丁(`docs/harness-descriptors-ru.patch`)送到 harness:在 harness 自己的界面里插件也有俄文名称,而这个补丁先到。补丁是构建产物——它由翻译和 harness 目录树生成,门禁 `npm run check:descriptor-patch`
|
|
130
|
+
同样这 32 个名称会作为补丁(`docs/harness-descriptors-ru.patch`)送到 harness:在 harness 自己的界面里插件也有俄文名称,而这个补丁先到。补丁是构建产物——它由翻译和 harness 目录树生成,门禁 `npm run check:descriptor-patch` 在生成的补丁与仓库里那份不一致时失败。第三方插件的名称放在 `src/client/plugin-names-ru.json`:这个文件由插件词典生成(`npm run build:plugin-names`),门禁 `npm run check:plugin-names:map` 在它与词典不一致时失败。同一个英文名称不能有两种译法——harness 与插件各说各话。`npm run check:plugin-names` 在真实文档上证明(jsdom,12 个用例)这个流程会翻译标题、说明、朗读名称和 bundle 的一行,而该不动的它不动。
|
|
131
131
|
|
|
132
132
|
|
|
133
133
|
## 检查
|
|
@@ -169,11 +169,11 @@ 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。本包的全部
|
|
172
|
+
覆盖率数字不是门禁:有些分区是有意保留英文的。紧随其后,审计会打印**按 namespace** 的报告:它根据注册方重建「namespace → 词典」的对应关系(`NS` 声明,或 `locale.register` 里的字面量;`bind` 与 `PropsLocale` 只是读取 namespace),并列出既不在自己 namespace、也不在运行时回退所用的 `common` 词典中的 key。全局比较 key 名称看不到这类空洞:放在别的 namespace 下的翻译会被算作已覆盖,而那个界面实际显示英文。该报告仅供参考——同名 key 在不同 namespace 下含义可能不同(`list.aria` 在提醒目录里是「活动提醒」,在任务里是「后台任务」),因此只有在两个 namespace 由同一份词典提供服务时才会跨 namespace 搬运翻译。在锁定的标签上,该报告为空:harness 在我们注册的 namespace 里渲染的每一条字符串,都位于该 namespace。本包的全部 130 个 namespace 都会被比对——对应关系既来自紧邻注册处的词典导入,也来自注册语句本身传入的名称(`locale.register(NS, { zh, en })`);若没有第二条规则,词典位于相邻目录的 `common` 与 `settings.locale` 就会落在检查之外。反方向是硬失败而不是参考报告:harness 注册并填充了 key、而本包从不注册的 namespace,会让那个界面停留在英文,而按 key 名称统计的覆盖率看起来依然完整。`settings.sessionLog` 正是这样被发现的——通用设置页上的「上传 Session Log」开关。
|
|
173
173
|
|
|
174
174
|
## 覆盖范围:harness 与插件词典
|
|
175
175
|
本包翻译 **harness 客户端自有的 namespace**——共 64 个 namespace,已与锁定标签核对——以及
|
|
176
|
-
**第三方插件的词典**:
|
|
176
|
+
**第三方插件的词典**:66 个插件,其英文文本连同版本与许可证一起从它们自己的发布物中提取。
|
|
177
177
|
|
|
178
178
|
此前插件词典不在范围内,理由是:`dshmarket` 已经到 1.66.44 版本,它的 key 变化与 harness
|
|
179
179
|
无关,而「全部都覆盖了」这种无声承诺不是承诺,是一笔没人能讨的债。答案其实很简单:把
|
|
@@ -236,7 +236,7 @@ npm run verify -- путь/к/дереву/харнесса
|
|
|
236
236
|
|
|
237
237
|
## 内容
|
|
238
238
|
|
|
239
|
-
- `src/client/dicts.ts`——俄语词典(
|
|
239
|
+
- `src/client/dicts.ts`——俄语词典(130 个 namespace、14,086 条翻译、约 15,000 行)。这正是本包的核心价值。
|
|
240
240
|
- `src/client/index.ts`——客户端插件入口(注册 `ru` 和词典)。
|
|
241
241
|
- `src/index.ts`——空的宿主部分(`apply()`)。
|
|
242
242
|
- `cordis.patch.yml`——profile 补丁(`- insert:` 客户端条目 `locale-ru`)。
|