@ragnoryok1/dsh-client-locale-ru 0.2.21 → 0.2.23
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 +41 -0
- package/NAMESPACES.md +26 -21
- package/README-en.md +16 -9
- package/README-zh.md +15 -9
- package/README.md +16 -9
- package/docs/how-to-translate-dsh.md +119 -0
- package/lib/client.js +923 -164
- package/package.json +10 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,44 @@
|
|
|
1
|
+
## [0.2.23] — 2026-10-30
|
|
2
|
+
|
|
3
|
+
### Изменено
|
|
4
|
+
|
|
5
|
+
- **Метаданные под поиск npm.** Поиск весит имя, описание и ключевые слова, а в нашем
|
|
6
|
+
имени слова «russian» нет. Описание теперь содержит целую фразу «Russian language
|
|
7
|
+
pack» и русское предложение — под запросы «russian language pack» и «русская
|
|
8
|
+
локализация», где нас раньше не было в выдаче вовсе. Заодно исправлено число
|
|
9
|
+
плагинов: 520 → 522.
|
|
10
|
+
|
|
11
|
+
Замеры до правки: «locale ru» — 1-е место, «dsh ru» — 3-е, «русский deepseek» —
|
|
12
|
+
4-е, но «dsh russian», «russian dsh», «russian language pack» и «русская
|
|
13
|
+
локализация» — за пределами первых 25.
|
|
14
|
+
|
|
15
|
+
## [0.2.22] — 2026-10-28
|
|
16
|
+
|
|
17
|
+
### Добавлено
|
|
18
|
+
|
|
19
|
+
- **Харнесс 0.2.2-alpha.2: девять новых секций — 745 строк.** `liveshare` (224),
|
|
20
|
+
`forgePanel` (199), `stats` (177), `creationRecommendations` (55),
|
|
21
|
+
`cuaPermissions` (49), `pluginRecommendations` (25), `actionCards` (14),
|
|
22
|
+
`fileDrag` и `messageQuotes` (по 1). Плюс 108 новых ключей в уже переведённых
|
|
23
|
+
секциях: версии и обновления в `pluginManager` (69), `chat`, `conversation`,
|
|
24
|
+
`question`, `pluginMarket`, `voice-input` и других.
|
|
25
|
+
|
|
26
|
+
### Исправлено
|
|
27
|
+
|
|
28
|
+
- **Аудит больше не путает русское с английским.** Проверка «значение совпадает с
|
|
29
|
+
английским шаблоном» собирала шаблоны по одному ключу из любого файла дерева. У
|
|
30
|
+
0.2.2 в нём появились русские словари приложения и установщика, и наши же
|
|
31
|
+
значения совпадали с ними: 2 368 ложных находок, за которыми настоящие было не
|
|
32
|
+
видно. Теперь шаблон с кириллицей в набор не попадает — осталось три настоящих.
|
|
33
|
+
- **Убраны мусорные секции** (93 строки), названные как файлы: `.runs.json`,
|
|
34
|
+
`.ndjson.zst`, `deepseek-model-label-1017`, `permission.access`, — и девять
|
|
35
|
+
ключей, которых в 0.2.2 больше нет.
|
|
36
|
+
- Добавлена пара форм числа `toast.cleared`, которой не хватало.
|
|
37
|
+
|
|
38
|
+
### Изменено
|
|
39
|
+
|
|
40
|
+
- Счёт: **594** namespace и **69 177** строк.
|
|
41
|
+
|
|
1
42
|
## [0.2.21] — 2026-10-26
|
|
2
43
|
|
|
3
44
|
### Добавлено
|
package/NAMESPACES.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- Сгенерировано `npm run namespaces`; проверяется `npm run check:namespaces`. -->
|
|
2
2
|
# Что переведено
|
|
3
3
|
|
|
4
|
-
Пакет переводит **
|
|
4
|
+
Пакет переводит **594 namespace** — 69177 строк. Колонка «как это выглядит»
|
|
5
5
|
берёт заголовок самого namespace (то, что читает пользователь), а не отдельное описание:
|
|
6
6
|
список нельзя разойтись с переводами.
|
|
7
7
|
|
|
@@ -12,9 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
| namespace | как это выглядит | строк | источник |
|
|
14
14
|
|---|---|---|---|
|
|
15
|
-
| `.ndjson.zst` | Английская страница (USD) | 2 | dsh-usage-badge@0.1.9 |
|
|
16
|
-
| `.runs.json` | Название | 70 | dsh-tongflow@0.8.4 |
|
|
17
15
|
| `about.huaqiu` | О плагине | 9 | @huaqiu/dsh-huaqiu-about@0.6.6 |
|
|
16
|
+
| `actionCards` | — | 14 | харнесс |
|
|
18
17
|
| `agency` | — | 94 | @michengai/dsh-agency-agents@1.2.10 |
|
|
19
18
|
| `agent-community` | Bots团队 | 1 | @dsh-plugin-agent-community/ui-agent-community@0.3.9 |
|
|
20
19
|
| `agent-schedule` | tool.call.toolview | 61 | dsh-agent-toolkit@0.4.13 |
|
|
@@ -28,7 +27,7 @@
|
|
|
28
27
|
| `ai4scholar` | AI4Scholar | 38 | dsh-ai4scholar@0.3.8 |
|
|
29
28
|
| `anet` | ANet | 49 | @sleep2agi/dsh-anet@0.1.0-preview.34 |
|
|
30
29
|
| `apiDashboard` | 哦鲸鲸 | 166 | dsh-api-dashboard@1.7.0 |
|
|
31
|
-
| `approval` | — |
|
|
30
|
+
| `approval` | — | 7 | харнесс |
|
|
32
31
|
| `approval-review` | Журнал согласований | 43 | dsh-approval-review@0.6.4 |
|
|
33
32
|
| `approvalVoice` | Голосовые уведомления о подтверждениях | 18 | dsh-approval-voice@0.3.0 |
|
|
34
33
|
| `archive-manager` | Менеджер архива | 35 | @mlgbnb/dsh-archive-manager@1.0.10 |
|
|
@@ -51,7 +50,7 @@
|
|
|
51
50
|
| `catppuccin` | — | 85 | @nonamelego/dsh-catppuccin@0.6.4 |
|
|
52
51
|
| `chaos` | — | 239 | @hanxuanliang/dsh-chaos@0.1.2 |
|
|
53
52
|
| `chart` | — | 7 | dsh-ab-chart@0.1.19 |
|
|
54
|
-
| `chat` | — |
|
|
53
|
+
| `chat` | — | 204 | харнесс |
|
|
55
54
|
| `chat-timeline` | — | 7 | dsh-chat-timeline@0.1.5 |
|
|
56
55
|
| `claude-code-mods` | — | 4 | харнесс |
|
|
57
56
|
| `clawock` | — | 459 | clawock-dsh@0.4.0 |
|
|
@@ -68,7 +67,7 @@
|
|
|
68
67
|
| `config-manager` | — | 36 | dsh-config-manager@0.1.79 |
|
|
69
68
|
| `context-zip` | ContextZip | 39 | dsh-context-zip@0.1.10 |
|
|
70
69
|
| `contextMemory` | Контекстная память | 48 | dsh-context-memory@0.9.0 |
|
|
71
|
-
| `conversation` | — |
|
|
70
|
+
| `conversation` | — | 382 | харнесс |
|
|
72
71
|
| `conversation-anchors` | Якоря | 23 | @biggerboy123/dsh-conversation-anchors@0.1.21 |
|
|
73
72
|
| `conversation.session.header.actions` | Подробное использование | 303 | dsh-damage-pulse@4.2.9 |
|
|
74
73
|
| `cordis` | — | 51 | харнесс |
|
|
@@ -76,12 +75,13 @@
|
|
|
76
75
|
| `costTrack` | Стоимость | 34 | dsh-cost-track@0.6.1 |
|
|
77
76
|
| `cotTranslation` | — | 32 | харнесс |
|
|
78
77
|
| `cpa-panel` | — | 126 | dsh-cpa-switch@0.18.1 |
|
|
78
|
+
| `creationRecommendations` | Персональные страницы | 55 | харнесс |
|
|
79
|
+
| `cuaPermissions` | Разрешить управление компьютером | 49 | харнесс |
|
|
79
80
|
| `cursor-effect` | — | 13 | dsh-smooth-cursor-patched@0.1.9-patched.6 |
|
|
80
81
|
| `custom-headers` | — | 31 | dsh-custom-headers@0.3.0 |
|
|
81
82
|
| `daruma` | — | 28 | dsh-daruma@0.1.10 |
|
|
82
|
-
| `deepseek-model-label-1017` | — | 1 | харнесс |
|
|
83
83
|
| `delegateRouter` | shell.overlay | 1 | dsh-delegate-router@0.4.5 |
|
|
84
|
-
| `deliverables` | — |
|
|
84
|
+
| `deliverables` | — | 57 | харнесс |
|
|
85
85
|
| `desktop-launcher` | — | 47 | @linxin666/dsh-desktop-launcher@0.3.13 |
|
|
86
86
|
| `devDashboard` | Dev Dashboard | 4 | dsh-plugin-control-your-development@0.6.2 |
|
|
87
87
|
| `diff-stat` | — | 23 | dsh-diff-stat@0.1.9 |
|
|
@@ -276,8 +276,10 @@
|
|
|
276
276
|
| `feedback` | — | 20 | харнесс |
|
|
277
277
|
| `feishu-assistant` | Ассистент Feishu | 52 | dsh-feishu-assistant@0.2.0 |
|
|
278
278
|
| `file-review` | — | 71 | dsh-file-review@0.8.10 |
|
|
279
|
+
| `fileDrag` | — | 1 | харнесс |
|
|
279
280
|
| `fileExplorer` | — | 79 | @jaxzhou/dsh-file-explorer@0.1.11 |
|
|
280
281
|
| `foldPositions` | — | 481 | billion-context@0.1.202 |
|
|
282
|
+
| `forgePanel` | — | 199 | харнесс |
|
|
281
283
|
| `formatforge` | — | 22 | @tianbuyu-wwx/dsh-formatforge@3.0.0 |
|
|
282
284
|
| `free-proxy` | — | 88 | dsh-freeroute@0.10.3 |
|
|
283
285
|
| `genui` | — | 77 | dsh-plugin-genui@0.15.1 |
|
|
@@ -311,6 +313,7 @@
|
|
|
311
313
|
| `liang.skin` | — | 5 | dsh-client-liang-intensity-skin@0.1.6 |
|
|
312
314
|
| `liangshen` | — | 42 | @linxin666/dsh-liangshen@0.4.8 |
|
|
313
315
|
| `liao-sidebar-organizer` | Название ссылки | 43 | dsh-liao-sidebar@0.2.6 |
|
|
316
|
+
| `liveshare` | — | 225 | харнесс |
|
|
314
317
|
| `llm-qoder` | — | 168 | @eghrhegpe/dsh-connect-qoder@0.7.5 |
|
|
315
318
|
| `llm-verifier` | — | 344 | dsh-llm-verifier@0.10.1 |
|
|
316
319
|
| `local.vcs` | Изменения VCS | 260 | @feng0531/dsh-vcs@0.4.10 |
|
|
@@ -323,6 +326,7 @@
|
|
|
323
326
|
| `memory-porter` | — | 83 | dsh-memory-porter@0.1.0 |
|
|
324
327
|
| `meow-cachebilling` | — | 2 | meow-cachebilling@0.8.0 |
|
|
325
328
|
| `meow-memory` | — | 92 | meow-memory@0.31.1 |
|
|
329
|
+
| `messageQuotes` | — | 1 | харнесс |
|
|
326
330
|
| `michengai.codexUi` | — | 293 | @michengai/dsh-codex-ui@1.1.47 |
|
|
327
331
|
| `mimo` | — | 4 | dsh-mimo-connect@0.3.5 |
|
|
328
332
|
| `misakanet.panel.density.v1` | — | 149 | misakanet@2.48.0 |
|
|
@@ -344,24 +348,24 @@
|
|
|
344
348
|
| `office-ppt` | — | 63 | dsh-workbuddy-ppt@0.1.0 |
|
|
345
349
|
| `om-compaction` | — | 84 | dsh-plugin-om@0.0.61 |
|
|
346
350
|
| `oomol.settings` | Подключения OOMOL | 71 | dsh-oomol@1.0.0 |
|
|
347
|
-
| `open-in-app` | — |
|
|
351
|
+
| `open-in-app` | — | 47 | харнесс |
|
|
348
352
|
| `opencodeFree` | Видимость моделей | 53 | dsh-opencode-free@0.3.7 |
|
|
349
353
|
| `openrouter-providers` | — | 55 | dsh-openrouter-providers@1.6.0 |
|
|
350
354
|
| `orbit-model` | — | 36 | @kasenri/dsh-orbit@0.6.7 |
|
|
351
355
|
| `peakIndicator` | — | 12 | dsh-peak-indicator@0.1.32 |
|
|
352
356
|
| `peakrate-model` | — | 48 | dsh-peakrate@0.3.1 |
|
|
353
|
-
| `permission.access` | Права доступа | 21 | харнесс |
|
|
354
357
|
| `personaDafeiyu` | Персоны | 81 | dsh-persona-dafeiyu@0.5.0 |
|
|
355
358
|
| `personalDirective` | Переключение личной директивы | 5 | dsh-personal-directive@0.2.11 |
|
|
356
359
|
| `pet` | — | 81 | @linxin666/dsh-pet@0.4.8 |
|
|
357
360
|
| `pet.config` | Настройки питомца | 150 | dsh-pet@0.3.8 |
|
|
358
361
|
| `picturereader` | — | 3 | picturereader@3.3.3 |
|
|
359
362
|
| `pin` | — | 2 | @vlln/dsh-navbar@0.4.0 |
|
|
360
|
-
| `plan` | — |
|
|
363
|
+
| `plan` | — | 16 | харнесс |
|
|
361
364
|
| `plugin-store` | — | 77 | dsh-plugins-store@0.1.4 |
|
|
362
365
|
| `plugin.intellijMcp` | IntelliJ IDEA MCP | 36 | dsh-intellij-mcp@1.0.5 |
|
|
363
|
-
| `pluginManager` | Плагины |
|
|
364
|
-
| `pluginMarket` | Обзор плагинов |
|
|
366
|
+
| `pluginManager` | Плагины | 294 | харнесс |
|
|
367
|
+
| `pluginMarket` | Обзор плагинов | 87 | харнесс |
|
|
368
|
+
| `pluginRecommendations` | Рекомендуемый плагин | 25 | харнесс |
|
|
365
369
|
| `pluginTopology` | Топология плагинов | 82 | @sleetdrop/dsh-plugin-topology@0.9.0 |
|
|
366
370
|
| `pocketMobileNav` | 📱 Доступ с телефона | 96 | dsh-pocket@2.12.0 |
|
|
367
371
|
| `power.button` | — | 39 | dsh-power-xc@0.1.6 |
|
|
@@ -394,20 +398,20 @@
|
|
|
394
398
|
| `russian-lang` | — | 95 | @goodandready/dsh-russian-lang@0.4.5 |
|
|
395
399
|
| `schedule-attention-enhancer` | plugins.detail.section | 1 | @stolyarovmn/dsh-client-ui-schedule-tab@0.8.0 |
|
|
396
400
|
| `schedule.catalog` | — | 90 | харнесс |
|
|
397
|
-
| `schedule.manager` | Задачи автоматизации |
|
|
401
|
+
| `schedule.manager` | Задачи автоматизации | 209 | харнесс |
|
|
398
402
|
| `searchPool` | Пул поиска | 56 | dsh-search-failover@0.3.23 |
|
|
399
403
|
| `secretMask` | — | 2 | харнесс |
|
|
400
404
|
| `select-quote` | — | 32 | dsh-select-quote@0.3.9 |
|
|
401
405
|
| `session-colorful-unread-pin-jobs` | — | 12 | dsh-session-colorful-unread-pin-jobs@2.0.0 |
|
|
402
406
|
| `session-complete-notify` | Пример сессии | 107 | @telosmaylx/dsh-session-notify@0.1.23 |
|
|
403
407
|
| `session-inspector` | — | 52 | харнесс |
|
|
404
|
-
| `session-log-download` | — |
|
|
408
|
+
| `session-log-download` | — | 14 | харнесс |
|
|
405
409
|
| `session-manager` | — | 283 | dsh-session-manager@0.7.5 |
|
|
406
410
|
| `session-title-pattern` | — | 39 | dsh-session-title-pattern@0.8.9 |
|
|
407
411
|
| `sessionColor` | — | 17 | @idoall/dsh-session-colors@0.1.11 |
|
|
408
412
|
| `sessionGraph` | — | 288 | @benz-ai-x/dsh-research-graph@0.1.5-rc.1 |
|
|
409
413
|
| `sessions` | — | 399 | dsh-plugin-ideas-manager@0.10.3 |
|
|
410
|
-
| `settings` | Настройки |
|
|
414
|
+
| `settings` | Настройки | 42 | харнесс |
|
|
411
415
|
| `settings-search-v5` | Настройки | 145 | @objectivex666/dsh-settings-search@1.14.0 |
|
|
412
416
|
| `settings.account` | Учётная запись | 94 | харнесс |
|
|
413
417
|
| `settings.acp` | — | 95 | @zaimokuza/dsh-acp-adapter@0.1.0-rc.10 |
|
|
@@ -458,7 +462,7 @@
|
|
|
458
462
|
| `settings.model-capability` | — | 170 | dsh-plugin-model-capability@1.4.0 |
|
|
459
463
|
| `settings.modelContextCatalog` | Контекстные окна моделей | 88 | dsh-model-context-catalog@0.5.0 |
|
|
460
464
|
| `settings.modelProxy` | Прокси моделей | 77 | dsh-plugin-model-proxy@0.1.6 |
|
|
461
|
-
| `settings.models` | Модели |
|
|
465
|
+
| `settings.models` | Модели | 137 | харнесс |
|
|
462
466
|
| `settings.modelVisibility` | Видимость моделей | 16 | dsh-model-visibility@0.2.1 |
|
|
463
467
|
| `settings.multi2api` | Аккаунты Multi2API | 78 | dsh-multi2api@0.1.9 |
|
|
464
468
|
| `settings.neu` | — | 5 | dsh-neu-theme@0.1.2 |
|
|
@@ -505,7 +509,7 @@
|
|
|
505
509
|
| `shortcuts` | Горячие клавиши | 56 | харнесс |
|
|
506
510
|
| `shortcuts.layout` | — | 1 | харнесс |
|
|
507
511
|
| `shorts.sidebar` | — | 58 | dsh-shorts-wall@1.4.2 |
|
|
508
|
-
| `sidebar` | — |
|
|
512
|
+
| `sidebar` | — | 7 | харнесс |
|
|
509
513
|
| `sidebarBrowser` | — | 26 | харнесс |
|
|
510
514
|
| `sidebarCodePreview` | Код | 3 | харнесс |
|
|
511
515
|
| `sidebarDocumentPreview` | — | 22 | харнесс |
|
|
@@ -527,6 +531,7 @@
|
|
|
527
531
|
| `smoothStream.chat` | — | 2 | dsh-smooth-stream@0.7.0 |
|
|
528
532
|
| `solution-explorer` | — | 194 | dsh-solution-explorer@1.0.2 |
|
|
529
533
|
| `sse` | OpenAI Codex OAuth | 2 | @jcy2387/dsh-codex-provider@0.1.7-rc.2.1 |
|
|
534
|
+
| `stats` | — | 177 | харнесс |
|
|
530
535
|
| `status-rotator` | — | 4 | dsh-status-rotator@0.37.0 |
|
|
531
536
|
| `stepTrace` | Трассировка шагов | 31 | dsh-step-trace@0.6.1 |
|
|
532
537
|
| `style` | — | 3 | dsh-output-styles@0.8.1 |
|
|
@@ -554,7 +559,7 @@
|
|
|
554
559
|
| `traceCompare` | Maze | 10 | dsh-maze@2.4.0 |
|
|
555
560
|
| `tracescope` | — | 611 | @rebornace/dsh-tracescope@0.3.5 |
|
|
556
561
|
| `tradeSearch` | — | 15 | dsh-ab-market-research@0.2.12 |
|
|
557
|
-
| `trajectory` | — |
|
|
562
|
+
| `trajectory` | — | 199 | харнесс |
|
|
558
563
|
| `trust` | — | 246 | dsh-trust-check@0.2.4 |
|
|
559
564
|
| `ui-background` | — | 30 | deepseek-harness-background@0.6.1 |
|
|
560
565
|
| `ui-enhancer` | — | 120 | dsh-ui-enhancer@0.2.0 |
|
|
@@ -576,7 +581,7 @@
|
|
|
576
581
|
| `viewManager` | Менеджер вкладок представлений | 41 | dsh-view-manager@0.2.2 |
|
|
577
582
|
| `vision` | — | 35 | dsh-vision-web@0.1.0 |
|
|
578
583
|
| `vision-recognizer` | — | 33 | dsh-vision-recognizer@0.2.0 |
|
|
579
|
-
| `voice-input` | — |
|
|
584
|
+
| `voice-input` | — | 114 | харнесс |
|
|
580
585
|
| `voice-mode` | — | 250 | dsh-voice-mode@0.7.28 |
|
|
581
586
|
| `w2m.target` | — | 22 | @twinsearth/w2m-dsh-plugin@1.4.3 |
|
|
582
587
|
| `wallpaper-engine` | — | 987 | dsh-plugin-wallpaper-engine@1.4.0 |
|
|
@@ -602,4 +607,4 @@
|
|
|
602
607
|
| `xrn1997-dsh-novel` | — | 160 | @xrn1997/dsh-novel@0.8.0 |
|
|
603
608
|
| `zhihu-search` | — | 19 | dsh-zhihu-search@2.2.1 |
|
|
604
609
|
|
|
605
|
-
Итого: **
|
|
610
|
+
Итого: **594** namespace, **69177** строк.
|
package/README-en.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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.23",
|
|
5
5
|
"tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
|
|
6
|
-
"description": "Russian for the DeepSeek Harness web GUI: the whole interface plus the menus of
|
|
6
|
+
"description": "Russian language pack for the DeepSeek Harness web GUI: the whole interface plus the menus of 522 third-party plugins — 594 sections, 69 177 strings. Русский язык для веб-интерфейса DeepSeek Harness: весь интерфейс и меню 522 плагинов, 594 раздела, 69 177 строк.",
|
|
7
7
|
"icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
|
|
8
|
-
"compatible_versions": ["v0.2.1-rc.3", "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"],
|
|
8
|
+
"compatible_versions": ["v0.2.2-alpha.2", "v0.2.1-rc.3", "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",
|
|
10
10
|
"install_method": "dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru"
|
|
11
11
|
}
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
[](https://www.npmjs.com/package/@ragnoryok1/dsh-client-locale-ru)
|
|
21
21
|
[](LICENSE)
|
|
22
22
|
[](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
|
|
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
27
|
The plugin makes the [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) interface Russian. Everything you see is translated: settings, side panels, dialogs, hints, error messages — and the menus of third-party plugins that ship no Russian of their own.
|
|
28
28
|
|
|
29
|
-
The pack currently holds
|
|
29
|
+
The pack currently holds 594 sections and 69,177 strings, 520 of them dictionaries of third-party plugins — more than any other Russian pack for the harness I could find.
|
|
30
30
|
|
|
31
31
|
Install is one command: `dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru`; Russian is then picked in the settings, under General.
|
|
32
32
|
|
|
@@ -39,7 +39,7 @@ The pack does not modify harness files and does not touch your data. If a newer
|
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
-
The complete inventory is in [NAMESPACES.md](NAMESPACES.md):
|
|
42
|
+
The complete inventory is in [NAMESPACES.md](NAMESPACES.md): 594 namespaces, 69,177 strings, with the bundled plugin dictionaries marked.
|
|
43
43
|
|
|
44
44
|
Plugins outside the harness tree are translated the same way, but their English text comes from their own publication: `plugins/<namespace>.json` records the package, the version, the licence and the strings extracted from its bundle. What is still English in your installation is shown by `npm run report:plugins`: it walks the profile's `node_modules`, finds each plugin's own dictionary and compares its keys with ours, and a plugin without a dictionary is reported as such — there is nothing to translate until it asks for one.
|
|
45
45
|
|
|
@@ -107,7 +107,7 @@ two (the message names the version) or drop the `minimumReleaseAge` limit in the
|
|
|
107
107
|
settings.
|
|
108
108
|
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.
|
|
109
109
|
|
|
110
|
-
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
|
|
110
|
+
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 2023 kB: the banner ships as JPEG, and the icon and source map stay out of the npm payload.
|
|
111
111
|
|
|
112
112
|
## Why hybrid
|
|
113
113
|
|
|
@@ -202,6 +202,13 @@ translates the title, the description, the accessible name and a bundle row —
|
|
|
202
202
|
it must alone.
|
|
203
203
|
|
|
204
204
|
|
|
205
|
+
## If you want to translate the harness into your language
|
|
206
|
+
|
|
207
|
+
The order of work, the pitfalls and the checks we went through are collected in
|
|
208
|
+
[docs/how-to-translate-dsh.md](docs/how-to-translate-dsh.md): how to find namespaces, why templates
|
|
209
|
+
must never be collected by key across files, what a runtime dependency change does to a translation,
|
|
210
|
+
and how to hand publishing over to CI.
|
|
211
|
+
|
|
205
212
|
## License
|
|
206
213
|
|
|
207
214
|
MIT
|
package/README-zh.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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.23",
|
|
5
5
|
"tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
|
|
6
|
-
"description": "Russian for the DeepSeek Harness web GUI: the whole interface plus the menus of
|
|
6
|
+
"description": "Russian language pack for the DeepSeek Harness web GUI: the whole interface plus the menus of 522 third-party plugins — 594 sections, 69 177 strings. Русский язык для веб-интерфейса DeepSeek Harness: весь интерфейс и меню 522 плагинов, 594 раздела, 69 177 строк.",
|
|
7
7
|
"icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
|
|
8
|
-
"compatible_versions": ["v0.2.1-rc.3", "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"],
|
|
8
|
+
"compatible_versions": ["v0.2.2-alpha.2", "v0.2.1-rc.3", "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",
|
|
10
10
|
"install_method": "dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru"
|
|
11
11
|
}
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
[](https://www.npmjs.com/package/@ragnoryok1/dsh-client-locale-ru)
|
|
21
21
|
[](LICENSE)
|
|
22
22
|
[](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
|
|
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
27
|
插件把 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 的界面变成俄语。你看到的一切都会被翻译:设置、侧边栏、对话框、提示、错误信息——以及没有自带俄语的三方插件菜单。
|
|
28
28
|
|
|
29
|
-
目前包里有
|
|
29
|
+
目前包里有 594 个分区、69 177 条文案,其中 520 份是第三方插件的词典——比我能找到的任何其他俄语包都多。
|
|
30
30
|
|
|
31
31
|
安装只需一条命令:`dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru`,然后在设置 General 里选择俄语。
|
|
32
32
|
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
-
完整清单见 [NAMESPACES.md](NAMESPACES.md):
|
|
41
|
+
完整清单见 [NAMESPACES.md](NAMESPACES.md):594 个 namespace、69,177 条字符串,随包附带的插件词典单独标注。
|
|
42
42
|
|
|
43
43
|
harness 树之外的插件用同样的方式翻译,但英文取自它们自己的发布物:`plugins/<namespace>.json` 记录包名、版本、许可证,以及从其 bundle 中提取的字符串。安装里还剩哪些英文,用 `npm run report:plugins` 查看:它遍历 profile 的 `node_modules`,找出每个插件自己的词典并与我们的对照;没有词典的插件会照实标注——在它请求翻译之前无从翻译。
|
|
44
44
|
|
|
@@ -95,7 +95,7 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
|
|
|
95
95
|
|
|
96
96
|
清单按 harness 自身的规则检查,而不是靠肉眼(`npm run check:manifest`,包含在 `verify` 中)。每一条规则都取自 harness 源码,每一条都对应一种否则会先落到用户头上的失败:`parseDshClient` 接受任意字符串作为 `platform`,但消费方只保留 `platform === 'web'` 的行,因此写成 `'Web'` 这样的笔误会**悄悄关掉**客户端那一半;声明了 `dsh.client` 却没有 `./client` 导出会让 `client-modules` 抛错;`dsh.bundle.patch` 必须指向确实存在的文件。
|
|
97
97
|
|
|
98
|
-
从 GitHub 安装同样可用:`dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru`(插件目录生成的就是这种不带 npm scope 的写法)安装的是仓库归档,而构建好的 `lib/` 已提交进 git——你的机器上不会运行构建,也不需要运行。正因如此,`npm run check:built`(包含在 `verify` 中)会重新构建 `lib/` 并与提交内容比对:git 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为
|
|
98
|
+
从 GitHub 安装同样可用:`dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru`(插件目录生成的就是这种不带 npm scope 的写法)安装的是仓库归档,而构建好的 `lib/` 已提交进 git——你的机器上不会运行构建,也不需要运行。正因如此,`npm run check:built`(包含在 `verify` 中)会重新构建 `lib/` 并与提交内容比对:git 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为 2023 kB:横幅以 JPEG 提供,图标与源码映射不进入 npm 包。
|
|
99
99
|
|
|
100
100
|
## 为什么是混合插件
|
|
101
101
|
|
|
@@ -135,6 +135,12 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
|
|
|
135
135
|
同样这 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 的一行,而该不动的它不动。
|
|
136
136
|
|
|
137
137
|
|
|
138
|
+
## 想把 harness 翻译成自己的语言
|
|
139
|
+
|
|
140
|
+
我们走过的顺序、坑和检查都整理在 [docs/how-to-translate-dsh.md](docs/how-to-translate-dsh.md):
|
|
141
|
+
如何找到各个命名空间、为什么不能跨文件按 key 收集模板、运行时依赖变更会怎样影响译文,
|
|
142
|
+
以及如何把发布交给 CI。
|
|
143
|
+
|
|
138
144
|
## 许可证
|
|
139
145
|
|
|
140
146
|
MIT
|
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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.23",
|
|
5
5
|
"tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
|
|
6
|
-
"description": "Russian for the DeepSeek Harness web GUI: the whole interface plus the menus of
|
|
6
|
+
"description": "Russian language pack for the DeepSeek Harness web GUI: the whole interface plus the menus of 522 third-party plugins — 594 sections, 69 177 strings. Русский язык для веб-интерфейса DeepSeek Harness: весь интерфейс и меню 522 плагинов, 594 раздела, 69 177 строк.",
|
|
7
7
|
"icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
|
|
8
|
-
"compatible_versions": ["v0.2.1-rc.3", "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"],
|
|
8
|
+
"compatible_versions": ["v0.2.2-alpha.2", "v0.2.1-rc.3", "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",
|
|
10
10
|
"install_method": "dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru"
|
|
11
11
|
}
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
[](https://www.npmjs.com/package/@ragnoryok1/dsh-client-locale-ru)
|
|
21
21
|
[](LICENSE)
|
|
22
22
|
[](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
|
|
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
27
|
Плагин делает интерфейс [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) русским. Переводится всё, что вы видите: настройки, боковые панели, диалоги, подсказки, сообщения об ошибках — и меню сторонних плагинов, у которых нет своего русского перевода.
|
|
28
28
|
|
|
29
|
-
Сейчас в пакете 587 разделов и
|
|
29
|
+
Сейчас в пакете 587 разделов и 69 177 строк, из них 520 словарей сторонних плагинов — больше, чем у любого другого русского пакета для харнесса, который я смог найти.
|
|
30
30
|
|
|
31
31
|
Установка — одна команда: `dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru`, дальше русский выбирается в настройках, в разделе General.
|
|
32
32
|
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
-
Полный список переведённого — в [NAMESPACES.md](NAMESPACES.md):
|
|
42
|
+
Полный список переведённого — в [NAMESPACES.md](NAMESPACES.md): 594 namespace, 69 177 строк, словари плагинов помечены отдельно.
|
|
43
43
|
|
|
44
44
|
Плагины за пределами дерева харнесса переводятся так же, но их английский текст берётся из собственной публикации: `plugins/<namespace>.json` хранит пакет, версию, лицензию и строки, выгруженные из бандла. Что осталось английским в вашей установке, покажет `npm run report:plugins`: он обходит `node_modules` профиля, находит у каждого плагина его собственный словарь и сверяет ключи с нашими, а плагин без словаря так и помечает — переводить нечего, пока он не спросит перевод.
|
|
45
45
|
|
|
@@ -106,7 +106,7 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
|
|
|
106
106
|
половину; declared `dsh.client` без экспорта `./client` заставляет `client-modules` бросить
|
|
107
107
|
ошибку; `dsh.bundle.patch` обязан указывать на существующий файл.
|
|
108
108
|
|
|
109
|
-
Установка из GitHub тоже работает: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (в таком виде команду генерирует каталог плагинов, без `@`-скоупа) ставит архив репозитория, а собранный `lib/` лежит в git — сборка на вашей машине не запускается и не требуется. Поэтому `npm run check:built` (входит в `verify`) пересобирает `lib/` и сверяет его с коммитом: устаревший бандл в git иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает
|
|
109
|
+
Установка из GitHub тоже работает: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (в таком виде команду генерирует каталог плагинов, без `@`-скоупа) ставит архив репозитория, а собранный `lib/` лежит в git — сборка на вашей машине не запускается и не требуется. Поэтому `npm run check:built` (входит в `verify`) пересобирает `lib/` и сверяет его с коммитом: устаревший бандл в git иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает 2023 КБ: баннер отдаётся JPEG, а иконка и карта исходников в npm не входят.
|
|
110
110
|
|
|
111
111
|
## Почему гибрид
|
|
112
112
|
|
|
@@ -201,6 +201,13 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
|
|
|
201
201
|
должен.
|
|
202
202
|
|
|
203
203
|
|
|
204
|
+
## Если хотите перевести харнесс на свой язык
|
|
205
|
+
|
|
206
|
+
Порядок, ловушки и проверки, через которые мы прошли, собраны в
|
|
207
|
+
[`docs/how-to-translate-dsh.md`](docs/how-to-translate-dsh.md): как найти секции, почему
|
|
208
|
+
нельзя собирать шаблоны по одному ключу из любого файла, что делает с переводом смена
|
|
209
|
+
зависимости рантайма и как отдать публикацию CI.
|
|
210
|
+
|
|
204
211
|
## Лицензия
|
|
205
212
|
|
|
206
213
|
MIT
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Как перевести DeepSeek Harness на свой язык
|
|
2
|
+
|
|
3
|
+
Это руководство — наш опыт перевода веб-клиента DSH на русский: 594 секции и 69 177 строк,
|
|
4
|
+
которые сейчас работают у нескольких тысяч человек. Здесь нет теории локализации; здесь
|
|
5
|
+
описано, как устроен словарь харнесса, что ломается на каждом шаге и как это проверить
|
|
6
|
+
машиной, а не глазами.
|
|
7
|
+
|
|
8
|
+
## Как устроены строки в DSH
|
|
9
|
+
|
|
10
|
+
Веб-клиент не держит текста в компонентах. Каждый пакет объявляет секцию и словарь:
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
locale.register('settings.models', {
|
|
14
|
+
en: { reorderModel: 'Reorder model', fetchKeepOne: 'Keep at least one model checked.' },
|
|
15
|
+
zh: { reorderModel: '重新排序模型', fetchKeepOne: '至少保留一个选中的模型。' },
|
|
16
|
+
})
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Секция — это пространство имён; ключ уникален внутри неё, но не между секциями: `cancel`
|
|
20
|
+
есть в десятках словарей, и это разные строки. Рантайм `@deepseek-ai/dsh-client-locale`
|
|
21
|
+
подменяет словарь на клиенте, поэтому сторонний перевод не требует правок в харнессе.
|
|
22
|
+
|
|
23
|
+
Найти все секции:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
grep -rE "register\(\s*['\"]|PropsLocale<\s*['\"]|export const NS = ['\"]" packages --include=*.ts --include=*.tsx
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Шаг 1. Соберите английские строки
|
|
30
|
+
|
|
31
|
+
Не переводите из интерфейса: словарь придётся поддерживать, а не пересматривать. Выгрузите
|
|
32
|
+
`en` каждой секции в JSON — это ваш вход и ваш эталон:
|
|
33
|
+
|
|
34
|
+
```js
|
|
35
|
+
const start = /(?:export\s+)?const\s+en\b[^=]*=\s*\{/.exec(text) // где словарь
|
|
36
|
+
// дальше — сбалансированные скобки от первого `{`, чтобы не зацепить `zh`
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Две ловушки, на которых мы потеряли часы:
|
|
40
|
+
|
|
41
|
+
- **Словарь не всегда в том же файле.** `register` живёт в `mount.ts`, а `en` — в
|
|
42
|
+
соседнем `locales.ts`. Если в файле регистрации словаря нет, смотрите каталог.
|
|
43
|
+
- **Имя секции не всегда литерал.** Бывает `export const NS = 'cuaPermissions'` плюс
|
|
44
|
+
`register(NS, …)`. Ищите тройку: `register('x')`, `PropsLocale<'x'>`, `NS = 'x'`.
|
|
45
|
+
|
|
46
|
+
## Шаг 2. Переводите ключ за ключом, не строку за строкой
|
|
47
|
+
|
|
48
|
+
Правила, которые у нас выросли в проверки:
|
|
49
|
+
|
|
50
|
+
- **Плейсхолдеры неприкосновенны.** `{count}`, `{name}`, `{version}` обязаны остаться
|
|
51
|
+
в переводе, иначе строка отрисуется с пустотой. Проверяется регуляркой по обеим сторонам.
|
|
52
|
+
- **Формы числа.** Там, где английский держит `one`/`other`, русский держит три формы.
|
|
53
|
+
Мы генерируем пары из одного шаблона и требуем, чтобы форма `one` и `other`
|
|
54
|
+
существовали вместе с базовым ключом.
|
|
55
|
+
- **Технические имена не переводятся:** имена продуктов (`DSH`, `LiveShare`), названия
|
|
56
|
+
шрифтов (`Comic Sans MS`), обозначения клавиш (`Ctrl+S`), команды (`dsh plugin remove …`).
|
|
57
|
+
Держите их в отдельном списке разрешений, иначе очередная проверка их «исправит».
|
|
58
|
+
- **Один термин — один перевод.** У нас `session` — всегда «сессия», `turn` — «раунд»,
|
|
59
|
+
`step` — «шаг». Без глоссария через сто строк появляется «сеанс», и это видно в интерфейсе.
|
|
60
|
+
|
|
61
|
+
## Шаг 3. Проверяйте машиной
|
|
62
|
+
|
|
63
|
+
Всё, что можно проверить, должно падать на сборке. Наши проверки, которые реально ловили
|
|
64
|
+
дефекты:
|
|
65
|
+
|
|
66
|
+
| проверка | что ловит |
|
|
67
|
+
|---|---|
|
|
68
|
+
| ключи, которых нет в шаблоне | опечатка в ключе: строка молча не появляется |
|
|
69
|
+
| ключи, добавленные харнессом | новый ключ без перевода после обновления |
|
|
70
|
+
| пары форм числа | пропущенная форма, и вместо числа — пусто |
|
|
71
|
+
| плейсхолдеры | `{count}` потерян или переименован |
|
|
72
|
+
| остатки латиницы и иероглифов | непереведённая строка |
|
|
73
|
+
| запрещённые термины | «сеанс» рядом с «сессия» |
|
|
74
|
+
| длина относительно шаблона | перевод втрое длиннее и рвёт вёрстку |
|
|
75
|
+
|
|
76
|
+
**Главная ловушка проверок:** не собирайте шаблоны «по ключу из любого файла». Ключ
|
|
77
|
+
`cancel` есть в сотнях словарей, и если сложить их в одну кучу, любая русская строка
|
|
78
|
+
совпадёт с русской строкой из чужой локализации. У нас из-за этого проверка выдавала
|
|
79
|
+
2 368 ложных находок, за которыми не было видно трёх настоящих. Сравнивайте в пределах
|
|
80
|
+
секции — или отсекайте шаблоны с кириллицей, если секции нет.
|
|
81
|
+
|
|
82
|
+
## Шаг 4. Держите синхронизацию с харнессом
|
|
83
|
+
|
|
84
|
+
Харнесс двигается быстро: за неделю вышло три тега, и один из них (0.2.2-alpha.2) добавил
|
|
85
|
+
745 строк в девяти новых секциях. Плановый прогон проверок против свежего дерева — это не
|
|
86
|
+
роскошь, а способ не отстать на релиз:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
git -C ../deepseek-harness fetch --tags
|
|
90
|
+
git -C ../deepseek-harness checkout dsh-v0.2.2-alpha.2
|
|
91
|
+
npm run verify -- ../deepseek-harness/packages
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Отдельно проверяйте **совместимость рантайма**: у 0.2.2-alpha.2 сменилась зависимость
|
|
95
|
+
(`cordis@~4.0.6-alpha.1`), и наш диапазон её не пускал — установка падала с `ERESOLVE`,
|
|
96
|
+
пока мы не расширили `peerDependencies`.
|
|
97
|
+
|
|
98
|
+
## Шаг 5. Не доверяйте именам секций
|
|
99
|
+
|
|
100
|
+
Секции приходят из кода, и в них попадает мусор. У нас жили две «секции» с именами файлов
|
|
101
|
+
(`.runs.json`, `.ndjson.zst`) — 72 строки, которых никто никогда не видел, и они искажали
|
|
102
|
+
и счёт, и проверки. Если имя секции похоже на имя файла или оканчивается точкой — почти
|
|
103
|
+
наверняка это ошибка разбора, а не словарь.
|
|
104
|
+
|
|
105
|
+
## Шаг 6. Выпускайте так, чтобы это можно было повторить
|
|
106
|
+
|
|
107
|
+
- Собранный код держите в репозитории и сверяйте пересборкой с коммитом: иначе
|
|
108
|
+
пользователь получит устаревший бандл, а проверки этого не увидят.
|
|
109
|
+
- Публикацию отдайте CI по тегу: у нас ручная публикация дважды застревала на 2FA,
|
|
110
|
+
и версии просто не доезжали до реестра.
|
|
111
|
+
- Числа в README (секции, строки, размер) считайте из пакета, а не вручную: за релиз
|
|
112
|
+
они разъезжаются дважды.
|
|
113
|
+
|
|
114
|
+
## Что почитать у нас
|
|
115
|
+
|
|
116
|
+
- `scripts/audit.mjs` — все проверки в одном месте, включая отсечку шаблонов с кириллицей.
|
|
117
|
+
- `scripts/keep-english.json` — список того, что остаётся латиницей, с причиной для каждой записи.
|
|
118
|
+
- `scripts/terminology.json` — глоссарий и запрещённые варианты.
|
|
119
|
+
- `docs/harness-descriptors-ru.patch` — как переводятся описания плагинов в каталоге.
|