@ragnoryok1/dsh-client-locale-ru 0.2.1 → 0.2.3

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 CHANGED
@@ -6,6 +6,51 @@
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.3] — 2026-10-19
10
+
11
+ ### Добавлено
12
+
13
+ - **Три чужих словаря, которые мы теперь тоже переводим.** Замер по реестру (поиск «dsh»,
14
+ 60 пакетов с манифестом `dsh`) показал: словари есть у 10 пакетов, мы покрывали 873 ключа
15
+ из 1417. Теперь закрыты все оставшиеся namespace:
16
+ - `dsh-remote-ssh` (@zhangfengshun/dsh-remote-ssh@2.4.33, MIT) — 111 ключей: профили
17
+ подключения, импорт из ~/.ssh/config, удалённые файлы, терминал, синхронизация;
18
+ - `univer` (dsh-univer-office@0.3.7, Apache-2.0) — 49 ключей: живой просмотр документов,
19
+ слияние и отклонение изменений, карточки проверки в разговоре;
20
+ - `web-ui-plugins` (@linxin666/dsh-client-ui-web-ui-settings@0.4.7, Apache-2.0) — 1 ключ.
21
+ - **Покрытие экосистемы: 1327 ключей из 1417 (94 %)** — против 873 (62 %) месяц назад.
22
+
23
+ ### Изменено
24
+
25
+ - **Подписи времени в codexUi** («{count} дн», «{count} нед») не склоняют существительное и
26
+ требовали форм числа, которых у плагина нет. Заменены нейтральной формулировкой
27
+ («дней: {count}», «недель: {count}»).
28
+ - **Семь имён собственных** Remote-SSH (glob, grep, node, sshpass, keyPath, nodePath,
29
+ remoteRoot) добавлены в список латиницы с указанием происхождения; «issue #23» переведено
30
+ в «проблема №23».
31
+
32
+ ### Исправлено
33
+
34
+ - `picker.errNameBad`: литералы «.» и «..» взяты в кавычки — пробел перед точкой был
35
+ дефектом типографики, а без них шаблон требовал закончить фразу двумя точками.
36
+
37
+ Инвентарь и заявленные числа обновлены: **81 namespace, 4949 строк**, пакет 493 КБ.
38
+
39
+ ## [0.2.2] — 2026-10-18
40
+
41
+ ### Изменено
42
+
43
+ - **Метаданные пакета переписаны под поиск.** Замер по реестру: по запросам «dsh language
44
+ pack», «dsh i18n», «dsh russian», «dsh locale» пакет не входил в первые 25 результатов, а
45
+ соседний языковой пакет стоял на первом-втором месте. Описание начиналось со слов, которых
46
+ в запросах нет, и не содержало фразы `dsh language pack`.
47
+ Теперь описание начинается с `dsh language pack — Russian (ru) locale…`, а ключевые слова
48
+ добавлены в трёх видах: служебные (`dsh-language-pack`, `dsh-locale`, `dsh-i18n`,
49
+ `dsh-russian`), человеческие (`language-pack`, `locale`, `russian`) и русские (`русский`,
50
+ `перевод`, `локализация`) — последние нашлись у соседнего пакета, и по ним он ранжировался
51
+ выше нас.
52
+ Код, словари и бандл не менялись: это выпуск метаданных.
53
+
9
54
  ## [0.2.1] — 2026-10-14
10
55
 
11
56
  ### Добавлено
package/NAMESPACES.md CHANGED
@@ -1,93 +1,97 @@
1
- <!-- Сгенерировано `npm run namespaces`; проверяется `npm run check:namespaces`. -->
2
- # Что переведено
3
-
4
- Пакет переводит **77 namespace** — 4495 строк. Колонка «как это выглядит»
5
- берёт заголовок самого namespace (то, что читает пользователь), а не отдельное описание:
6
- список нельзя разойтись с переводами.
7
-
8
- Колонка «источник» говорит, откуда взят английский текст: «харнесс» — собственные словари
9
- клиента, «пакет@версия» — словарь стороннего плагина, выгруженный из его собственной
10
- публикации (`npm run fetch:plugins`). Плагины проверяются теми же правилами, поэтому
11
- список — это обещание, а не перечень.
12
-
13
- | namespace | как это выглядит | строк | источник |
14
- |---|---|---|---|
15
- | `agent-team` | Команда агентов | 25 | харнесс |
16
- | `approval` | — | 5 | харнесс |
17
- | `chat` | — | 200 | харнесс |
18
- | `claude-code-mods` | — | 4 | харнесс |
19
- | `command` | — | 28 | харнесс |
20
- | `common` | — | 41 | харнесс |
21
- | `conversation` | — | 379 | харнесс |
22
- | `cordis` | — | 51 | харнесс |
23
- | `cotTranslation` | — | 32 | харнесс |
24
- | `deepseek-model-label-1017` | — | 1 | харнесс |
25
- | `deliverables` | — | 60 | харнесс |
26
- | `documentHtml` | HTML | 4 | харнесс |
27
- | `documentMarkdown` | — | 4 | харнесс |
28
- | `dsh-skill-explorer` | — | 75 | @linxin666/dsh-client-ui-skill-explorer@0.4.7 |
29
- | `dsh-ssh` | — | 154 | @linxin666/dsh-ssh@0.4.7 |
30
- | `dsh-web-ui-market` | — | 106 | @linxin666/dsh-client-ui-market@0.4.7 |
31
- | `dsh-web-ui-preset-center` | — | 46 | @linxin666/dsh-client-ui-preset-center@0.4.7 |
32
- | `dsh-web-ui-session-archive` | — | 124 | @linxin666/dsh-session-archive@0.4.7 |
33
- | `dsh-web-ui-usage` | — | 63 | @linxin666/dsh-usage@0.4.7 |
34
- | `feedback` | — | 20 | харнесс |
35
- | `git-graph` | — | 63 | @linxin666/dsh-client-ui-git-graph@0.4.7 |
36
- | `goal` | — | 12 | харнесс |
37
- | `inspectorPanel` | Инспектор Node.js | 4 | харнесс |
38
- | `job` | — | 50 | харнесс |
39
- | `liangshen` | — | 42 | @linxin666/dsh-liangshen@0.4.7 |
40
- | `model` | — | 23 | харнесс |
41
- | `open-in-app` | — | 45 | харнесс |
42
- | `permission.access` | Права доступа | 20 | харнесс |
43
- | `pet` | — | 81 | @linxin666/dsh-pet@0.4.7 |
44
- | `plan` | — | 17 | харнесс |
45
- | `pluginManager` | Плагины | 227 | харнесс |
46
- | `pluginMarket` | Обзор плагинов | 78 | харнесс |
47
- | `question` | — | 31 | харнесс |
48
- | `reference` | — | 15 | харнесс |
49
- | `remote` | Удалённый доступ | 115 | @linxin666/dsh-remote-web-ui@0.4.7 |
50
- | `schedule.catalog` | — | 90 | харнесс |
51
- | `schedule.manager` | Задачи автоматизации | 207 | харнесс |
52
- | `secretMask` | — | 2 | харнесс |
53
- | `session-inspector` | — | 52 | харнесс |
54
- | `session-log-download` | — | 10 | харнесс |
55
- | `settings` | Настройки | 41 | харнесс |
56
- | `settings.account` | Учётная запись | 94 | харнесс |
57
- | `settings.agentLoop` | Цикл агента | 12 | харнесс |
58
- | `settings.agentPreset` | Пресеты агента | 47 | харнесс |
59
- | `settings.locale` | — | 1 | харнесс |
60
- | `settings.models` | Модели | 134 | харнесс |
61
- | `settings.permission` | Права доступа | 20 | харнесс |
62
- | `settings.pluginInventory` | — | 37 | харнесс |
63
- | `settings.plugins` | Встроенные плагины | 5 | харнесс |
64
- | `settings.sessionLog` | — | 4 | харнесс |
65
- | `settings.shell` | Командная оболочка | 14 | харнесс |
66
- | `settings.subagent` | — | 35 | харнесс |
67
- | `settings.theme` | — | 25 | харнесс |
68
- | `settings.webSearch` | Веб-поиск | 27 | харнесс |
69
- | `shortcuts` | Горячие клавиши | 56 | харнесс |
70
- | `shortcuts.layout` | — | 1 | харнесс |
71
- | `sidebar` | — | 5 | харнесс |
72
- | `sidebarBrowser` | — | 26 | харнесс |
73
- | `sidebarCodePreview` | Код | 3 | харнесс |
74
- | `sidebarDocumentPreview` | — | 22 | харнесс |
75
- | `sidebarExcel` | Таблица | 15 | харнесс |
76
- | `sidebarFiles` | — | 17 | харнесс |
77
- | `sidebarImage` | Изображение | 11 | харнесс |
78
- | `sidebarOffice` | Документ Office | 15 | харнесс |
79
- | `sidebarPdf` | PDF | 15 | харнесс |
80
- | `sidebarRight` | — | 34 | харнесс |
81
- | `sidebarTerminal` | Терминал | 28 | харнесс |
82
- | `skill` | — | 8 | харнесс |
83
- | `slash.menu` | — | 9 | харнесс |
84
- | `subagent` | — | 79 | харнесс |
85
- | `task-board` | — | 437 | @linxin666/dsh-client-ui-task-board@0.4.7 |
86
- | `task-board-github` | — | 113 | @linxin666/dsh-client-ui-task-board-github@0.4.7 |
87
- | `trajectory` | — | 196 | харнесс |
88
- | `update` | — | 43 | @linxin666/dsh-update@0.4.7 |
89
- | `voice-input` | — | 109 | харнесс |
90
- | `workflowRun` | — | 20 | харнесс |
91
- | `workspace` | — | 131 | харнесс |
92
-
93
- Итого: **77** namespace, **4495** строк.
1
+ <!-- Сгенерировано `npm run namespaces`; проверяется `npm run check:namespaces`. -->
2
+ # Что переведено
3
+
4
+ Пакет переводит **81 namespace** — 4949 строк. Колонка «как это выглядит»
5
+ берёт заголовок самого namespace (то, что читает пользователь), а не отдельное описание:
6
+ список нельзя разойтись с переводами.
7
+
8
+ Колонка «источник» говорит, откуда взят английский текст: «харнесс» — собственные словари
9
+ клиента, «пакет@версия» — словарь стороннего плагина, выгруженный из его собственной
10
+ публикации (`npm run fetch:plugins`). Плагины проверяются теми же правилами, поэтому
11
+ список — это обещание, а не перечень.
12
+
13
+ | namespace | как это выглядит | строк | источник |
14
+ |---|---|---|---|
15
+ | `agent-team` | Команда агентов | 25 | харнесс |
16
+ | `approval` | — | 5 | харнесс |
17
+ | `chat` | — | 200 | харнесс |
18
+ | `claude-code-mods` | — | 4 | харнесс |
19
+ | `command` | — | 28 | харнесс |
20
+ | `common` | — | 41 | харнесс |
21
+ | `conversation` | — | 379 | харнесс |
22
+ | `cordis` | — | 51 | харнесс |
23
+ | `cotTranslation` | — | 32 | харнесс |
24
+ | `deepseek-model-label-1017` | — | 1 | харнесс |
25
+ | `deliverables` | — | 60 | харнесс |
26
+ | `documentHtml` | HTML | 4 | харнесс |
27
+ | `documentMarkdown` | — | 4 | харнесс |
28
+ | `dsh-remote-ssh` | — | 111 | @zhangfengshun/dsh-remote-ssh@2.4.33 |
29
+ | `dsh-skill-explorer` | — | 75 | @linxin666/dsh-client-ui-skill-explorer@0.4.7 |
30
+ | `dsh-ssh` | — | 154 | @linxin666/dsh-ssh@0.4.7 |
31
+ | `dsh-web-ui-market` | — | 106 | @linxin666/dsh-client-ui-market@0.4.7 |
32
+ | `dsh-web-ui-preset-center` | — | 46 | @linxin666/dsh-client-ui-preset-center@0.4.7 |
33
+ | `dsh-web-ui-session-archive` | — | 124 | @linxin666/dsh-session-archive@0.4.7 |
34
+ | `dsh-web-ui-usage` | — | 63 | @linxin666/dsh-usage@0.4.7 |
35
+ | `feedback` | — | 20 | харнесс |
36
+ | `git-graph` | — | 63 | @linxin666/dsh-client-ui-git-graph@0.4.7 |
37
+ | `goal` | — | 12 | харнесс |
38
+ | `inspectorPanel` | Инспектор Node.js | 4 | харнесс |
39
+ | `job` | — | 50 | харнесс |
40
+ | `liangshen` | — | 42 | @linxin666/dsh-liangshen@0.4.7 |
41
+ | `michengai.codexUi` | — | 293 | @michengai/dsh-codex-ui@1.1.42 |
42
+ | `model` | — | 23 | харнесс |
43
+ | `open-in-app` | — | 45 | харнесс |
44
+ | `permission.access` | Права доступа | 20 | харнесс |
45
+ | `pet` | — | 81 | @linxin666/dsh-pet@0.4.7 |
46
+ | `plan` | — | 17 | харнесс |
47
+ | `pluginManager` | Плагины | 227 | харнесс |
48
+ | `pluginMarket` | Обзор плагинов | 78 | харнесс |
49
+ | `question` | — | 31 | харнесс |
50
+ | `reference` | — | 15 | харнесс |
51
+ | `remote` | Удалённый доступ | 115 | @linxin666/dsh-remote-web-ui@0.4.7 |
52
+ | `schedule.catalog` | — | 90 | харнесс |
53
+ | `schedule.manager` | Задачи автоматизации | 207 | харнесс |
54
+ | `secretMask` | — | 2 | харнесс |
55
+ | `session-inspector` | — | 52 | харнесс |
56
+ | `session-log-download` | — | 10 | харнесс |
57
+ | `settings` | Настройки | 41 | харнесс |
58
+ | `settings.account` | Учётная запись | 94 | харнесс |
59
+ | `settings.agentLoop` | Цикл агента | 12 | харнесс |
60
+ | `settings.agentPreset` | Пресеты агента | 47 | харнесс |
61
+ | `settings.locale` | — | 1 | харнесс |
62
+ | `settings.models` | Модели | 134 | харнесс |
63
+ | `settings.permission` | Права доступа | 20 | харнесс |
64
+ | `settings.pluginInventory` | — | 37 | харнесс |
65
+ | `settings.plugins` | Встроенные плагины | 5 | харнесс |
66
+ | `settings.sessionLog` | — | 4 | харнесс |
67
+ | `settings.shell` | Командная оболочка | 14 | харнесс |
68
+ | `settings.subagent` | — | 35 | харнесс |
69
+ | `settings.theme` | — | 25 | харнесс |
70
+ | `settings.webSearch` | Веб-поиск | 27 | харнесс |
71
+ | `shortcuts` | Горячие клавиши | 56 | харнесс |
72
+ | `shortcuts.layout` | — | 1 | харнесс |
73
+ | `sidebar` | — | 5 | харнесс |
74
+ | `sidebarBrowser` | — | 26 | харнесс |
75
+ | `sidebarCodePreview` | Код | 3 | харнесс |
76
+ | `sidebarDocumentPreview` | — | 22 | харнесс |
77
+ | `sidebarExcel` | Таблица | 15 | харнесс |
78
+ | `sidebarFiles` | — | 17 | харнесс |
79
+ | `sidebarImage` | Изображение | 11 | харнесс |
80
+ | `sidebarOffice` | Документ Office | 15 | харнесс |
81
+ | `sidebarPdf` | PDF | 15 | харнесс |
82
+ | `sidebarRight` | — | 34 | харнесс |
83
+ | `sidebarTerminal` | Терминал | 28 | харнесс |
84
+ | `skill` | — | 8 | харнесс |
85
+ | `slash.menu` | — | 9 | харнесс |
86
+ | `subagent` | — | 79 | харнесс |
87
+ | `task-board` | — | 437 | @linxin666/dsh-client-ui-task-board@0.4.7 |
88
+ | `task-board-github` | — | 113 | @linxin666/dsh-client-ui-task-board-github@0.4.7 |
89
+ | `trajectory` | — | 196 | харнесс |
90
+ | `univer` | — | 49 | dsh-univer-office@0.3.7 |
91
+ | `update` | — | 43 | @linxin666/dsh-update@0.4.7 |
92
+ | `voice-input` | — | 109 | харнесс |
93
+ | `web-ui-plugins` | Веб-плагины | 1 | @linxin666/dsh-client-ui-web-ui-settings@0.4.7 |
94
+ | `workflowRun` | — | 20 | харнесс |
95
+ | `workspace` | — | 131 | харнесс |
96
+
97
+ Итого: **81** namespace, **4949** строк.
package/README.en.md CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "Russian (ru) language pack for DeepSeek Harness",
4
4
  "version": "0.2.1",
5
5
  "tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
6
- "description": "Full Russian interface for the DeepSeek Harness web GUI: 77 namespaces, 4495 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.",
6
+ "description": "Full Russian interface for the DeepSeek Harness web GUI: 81 namespaces, 4949 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](https://img.shields.io/npm/l/%40ragnoryok1%2Fdsh-client-locale-ru)](LICENSE)
22
22
  [![verify](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml/badge.svg)](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
23
23
  [![dsh](https://img.shields.io/badge/dsh-0.2.1--rc.2%2B-6366f1)](https://github.com/deepseek-ai/deepseek-harness)
24
- [![namespaces](https://img.shields.io/badge/namespaces-77-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
- [![strings](https://img.shields.io/badge/strings-4%2C495-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
24
+ [![namespaces](https://img.shields.io/badge/namespaces-81-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
+ [![strings](https://img.shields.io/badge/strings-4949-6466f1)](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 — 77 namespaces, 4,495 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.
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 — 81 namespaces, 4,949 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): 77 namespaces, 4495 strings, with the bundled plugin dictionaries marked.
34
+ The complete inventory is in [NAMESPACES.md](NAMESPACES.md): 81 namespaces, 4949 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,
@@ -98,7 +98,7 @@ After that, the next time `dsh web` starts, **Русский** will appear in th
98
98
 
99
99
  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.
100
100
 
101
- 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 482 kB: the banner ships as JPEG, and the icon and source map stay out of the npm payload.
101
+ 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 493 kB: the banner ships as JPEG, and the icon and source map stay out of the npm payload.
102
102
 
103
103
  ## Why hybrid
104
104
 
@@ -342,7 +342,7 @@ settings page.
342
342
 
343
343
  ## Coverage scope: the official interface only
344
344
 
345
- The package translates **the harness client's own namespaces** — 77 namespaces, reconciled against
345
+ The package translates **the harness client's own namespaces** — 81 namespaces, reconciled against
346
346
  the pinned tag. Third-party plugin dictionaries are deliberately out of scope, and here is
347
347
  why.
348
348
 
@@ -419,7 +419,7 @@ The workflow also has a manual run with a «только проверки, бе
419
419
 
420
420
  ## Contents
421
421
 
422
- - `src/client/dicts.ts` — the Russian dictionaries (77 namespaces, 4495 translations, ~3000 lines). This is where the main value lies.
422
+ - `src/client/dicts.ts` — the Russian dictionaries (81 namespaces, 4949 translations, ~3000 lines). This is where the main value lies.
423
423
  - `src/client/index.ts` — the client plugin entry point (registration of `ru` + the dictionaries).
424
424
  - `src/index.ts` — the empty host half (`apply()`).
425
425
  - `cordis.patch.yml` — the profile patch (`- insert:` of the client entry `locale-ru`).
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "Russian (ru) language pack for DeepSeek Harness",
4
4
  "version": "0.2.1",
5
5
  "tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
6
- "description": "Full Russian interface for the DeepSeek Harness web GUI: 77 namespaces, 4495 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.",
6
+ "description": "Full Russian interface for the DeepSeek Harness web GUI: 81 namespaces, 4949 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](https://img.shields.io/npm/l/%40ragnoryok1%2Fdsh-client-locale-ru)](LICENSE)
22
22
  [![verify](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml/badge.svg)](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
23
23
  [![dsh](https://img.shields.io/badge/dsh-0.2.1--rc.2%2B-6366f1)](https://github.com/deepseek-ai/deepseek-harness)
24
- [![namespaces](https://img.shields.io/badge/namespaces-77-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
- [![strings](https://img.shields.io/badge/strings-4%2C495-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
24
+ [![namespaces](https://img.shields.io/badge/namespaces-81-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
+ [![strings](https://img.shields.io/badge/strings-4949-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
26
26
 
27
- Русский язык для веб-интерфейса DeepSeek Harness: 77 namespaces, 4495 перевод, экранная типографика и аудит локализации в CI.
27
+ Русский язык для веб-интерфейса DeepSeek Harness: 81 namespaces, 4949 перевод, экранная типографика и аудит локализации в 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): 77 namespaces, 4495 строки, с пометкой у словарей плагинов.
34
+ Полный список того, что переведено, — в [NAMESPACES.md](NAMESPACES.md): 81 namespaces, 4949 строки, с пометкой у словарей плагинов.
35
35
 
36
36
  Плагины за пределами дерева харнесса переводятся так же, но их английский текст берётся
37
37
  из их собственной публикации: `plugins/<namespace>.json` хранит пакет, версию, лицензию и
@@ -107,7 +107,7 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
107
107
  половину; declared `dsh.client` без экспорта `./client` заставляет `client-modules` бросить
108
108
  ошибку; `dsh.bundle.patch` обязан указывать на существующий файл.
109
109
 
110
- Установка из GitHub тоже работает: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (в таком виде команду генерирует каталог плагинов, без `@`-скоупа) ставит архив репозитория, а собранный `lib/` лежит в git — сборка на вашей машине не запускается и не требуется. Поэтому `npm run check:built` (входит в `verify`) пересобирает `lib/` и сверяет его с коммитом: устаревший бандл в git иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает 482 КБ: баннер отдаётся JPEG, а иконка и карта исходников в npm не входят.
110
+ Установка из GitHub тоже работает: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (в таком виде команду генерирует каталог плагинов, без `@`-скоупа) ставит архив репозитория, а собранный `lib/` лежит в git — сборка на вашей машине не запускается и не требуется. Поэтому `npm run check:built` (входит в `verify`) пересобирает `lib/` и сверяет его с коммитом: устаревший бандл в git иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает 493 КБ: баннер отдаётся JPEG, а иконка и карта исходников в npm не входят.
111
111
 
112
112
  ## Почему гибрид
113
113
 
@@ -343,7 +343,7 @@ PLAN_NEXT_ACTION_EN`). Пока читался только первый вид,
343
343
  (`list.aria` — «Активные напоминания» в каталоге и «Фоновые задачи» в задачах), поэтому
344
344
  перевод переносится в чужой namespace только там, где оба namespace обслуживает один и
345
345
  тот же словарь. На закреплённом теге отчёт пуст: каждая строка, которую харнесс рисует в
346
- нашем namespace, лежит именно в нём. Сверяются все 77 namespace пака — привязка строится и по
346
+ нашем namespace, лежит именно в нём. Сверяются все 81 namespace пака — привязка строится и по
347
347
  импорту словаря рядом с регистрацией, и по именам, которые передаёт сама регистрирующая
348
348
  строка (`locale.register(NS, { zh, en })`); без второго правила `common` и `settings.locale`,
349
349
  чьи словари лежат в соседнем каталоге, оставались бы вне сверки. Обратная сторона проверяется
@@ -354,7 +354,7 @@ PLAN_NEXT_ACTION_EN`). Пока читался только первый вид,
354
354
 
355
355
  ## Область покрытия: только официальный интерфейс
356
356
 
357
- Пакет переводит **собственные namespace клиента харнесса** — 77 namespace, сверенные с
357
+ Пакет переводит **собственные namespace клиента харнесса** — 81 namespace, сверенные с
358
358
  закреплённым тегом. Словари сторонних плагинов в область сознательно не входят, и вот
359
359
  почему.
360
360
 
@@ -431,7 +431,7 @@ npm run verify -- путь/к/дереву/харнесса
431
431
 
432
432
  ## Содержимое
433
433
 
434
- - `src/client/dicts.ts` — русские словари (77 namespaces, 4495 перевод, ~3000 строк). Это и есть основная ценность.
434
+ - `src/client/dicts.ts` — русские словари (81 namespaces, 4949 перевод, ~3000 строк). Это и есть основная ценность.
435
435
  - `src/client/index.ts` — точка входа клиентского плагина (регистрация `ru` + словарей).
436
436
  - `src/index.ts` — пустая host-половина (`apply()`).
437
437
  - `cordis.patch.yml` — профиль-патч (`- insert:` клиентской строки `locale-ru`).
package/README.zh.md CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "Russian (ru) language pack for DeepSeek Harness",
4
4
  "version": "0.2.1",
5
5
  "tags": ["localization", "russian", "i18n", "web-gui", "language-pack"],
6
- "description": "Full Russian interface for the DeepSeek Harness web GUI: 77 namespaces, 4495 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.",
6
+ "description": "Full Russian interface for the DeepSeek Harness web GUI: 81 namespaces, 4949 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](https://img.shields.io/npm/l/%40ragnoryok1%2Fdsh-client-locale-ru)](LICENSE)
22
22
  [![verify](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml/badge.svg)](https://github.com/Ragnoryok1/dsh-client-locale-ru/actions/workflows/verify.yml)
23
23
  [![dsh](https://img.shields.io/badge/dsh-0.2.1--rc.2%2B-6366f1)](https://github.com/deepseek-ai/deepseek-harness)
24
- [![namespaces](https://img.shields.io/badge/namespaces-77-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
- [![strings](https://img.shields.io/badge/strings-4%2C495-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
24
+ [![namespaces](https://img.shields.io/badge/namespaces-81-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
+ [![strings](https://img.shields.io/badge/strings-4949-6466f1)](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 提供一份词典——共 77 个 namespace、4,495 条翻译,基于 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 无隶属关系。
27
+ [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) Web 界面(`dsh`)的俄语(`ru`)语言包。它通过 locale 服务(`ctx.locale.addLanguage`)把 `ru` 注册为可选的客户端语言,并为每个 namespace 提供一份词典——共 81 个 namespace、4,949 条翻译,基于 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):77 个 namespace、4495 条字符串,随包附带的插件词典单独标注。
33
+ 完整清单见 [NAMESPACES.md](NAMESPACES.md):81 个 namespace、4949 条字符串,随包附带的插件词典单独标注。
34
34
 
35
35
  「插件」页面上的插件名称与说明无法由本包提供:harness 把她们放在每个包的 `locale/<语言>.json`
36
36
  里并据此拼出翻译映射,而 locale 服务的 `resolveText` 根本不查词典(原文注释:maps do not
@@ -85,7 +85,7 @@ dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru
85
85
 
86
86
  清单按 harness 自身的规则检查,而不是靠肉眼(`npm run check:manifest`,包含在 `verify` 中)。每一条规则都取自 harness 源码,每一条都对应一种否则会先落到用户头上的失败:`parseDshClient` 接受任意字符串作为 `platform`,但消费方只保留 `platform === 'web'` 的行,因此写成 `'Web'` 这样的笔误会**悄悄关掉**客户端那一半;声明了 `dsh.client` 却没有 `./client` 导出会让 `client-modules` 抛错;`dsh.bundle.patch` 必须指向确实存在的文件。
87
87
 
88
- 从 GitHub 安装同样可用:`dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru`(插件目录生成的就是这种不带 npm scope 的写法)安装的是仓库归档,而构建好的 `lib/` 已提交进 git——你的机器上不会运行构建,也不需要运行。正因如此,`npm run check:built`(包含在 `verify` 中)会重新构建 `lib/` 并与提交内容比对:git 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为 482 KB:横幅以 JPEG 提供,图标与源码映射不进入 npm 包。
88
+ 从 GitHub 安装同样可用:`dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru`(插件目录生成的就是这种不带 npm scope 的写法)安装的是仓库归档,而构建好的 `lib/` 已提交进 git——你的机器上不会运行构建,也不需要运行。正因如此,`npm run check:built`(包含在 `verify` 中)会重新构建 `lib/` 并与提交内容比对:git 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为 493 KB:横幅以 JPEG 提供,图标与源码映射不进入 npm 包。
89
89
 
90
90
  ## 为什么是混合插件
91
91
 
@@ -140,7 +140,7 @@ npm run diff:harness -- <old> <new> # harness 改写了哪些英文
140
140
 
141
141
  审计在 CI(`.github/workflows/verify.yml`)中针对**锁定的 harness 标签**运行,而不是针对随便一份本地 checkout。同一次运行还会**每周按计划**触发一次:即使没人改动,译文也会腐坏——上游继续前进,本地一切正常,而偏差只在用户构建时才浮现。门禁覆盖完整性(key 与 namespace)、复数形式、占位符、英文与中文残留、术语、正文中的拉丁词、文本卫生、首尾空格、风格、取值的排版、«ё»、组合短语、设置侧栏标签的长度以及对外宣称的数字——每一项都已经抓到过真实缺陷。除此之外,审计还会打印**参考报告**——它们不是门禁,因为需要人来判断:比对了多少个 namespace、哪些无法建立对应关系、是否还留有「数字 + 需变格的名词」,以及短字符串是否长到英文的 2.8 倍以上(排版风险——«Effort» → «Уровень рассуждения» 是俄语的正常长度,不是缺陷)。
142
142
 
143
- 审计按 harness 实际书写的形式读取模板:字符串、**段落数组**(各模式的指南就是这样存储的)以及**常量引用**(`'hint.plan': PLAN_NEXT_ACTION_EN`)。在只读取第一种形式时,有十个 key——其中八个是整篇指南——悄悄退出了所有比对。反过来也一样:空的策略文件(`keep-english.json`、`terminology.json` 的某个分区)现在会让审计失败,而不是在无人察觉的情况下放宽门禁。README 中宣称的数字也按同样方式与包体核对,因为过期的数字就是错误的说法——同样的数字还会从 `package.json` 的 description 中读取,那是 npm 在搜索与包页面上显示的内容(「55 namespaces」正是在那里活得最久)——包括带千位分隔符的写法:旧版开头写的是 `2 489`,而检查此前只读取不带分隔符的形式,所以数字模式现在也接受千位分隔符。紧随其后还核对「针对哪个 harness 版本构建」这句话:它必须与 workflow 中锁定的标签一致,因为真正验证这个包的是那个 workflow(两个 README 的开头都还写着 `0.2.1-alpha.2`,而 CI 早已换成 `dsh-v0.2.1-rc.2`)。发布包的体积也在这里实测:`npm run check:size` 会打包归档,并把声明的千字节数与实际值对比(允许 1 KB 误差——不同 Node 构建下的 gzip 压缩结果略有差别,而这句话本身也只精确到整千字节)。
143
+ 审计按 harness 实际书写的形式读取模板:字符串、**段落数组**(各模式的指南就是这样存储的)以及**常量引用**(`'hint.plan': PLAN_NEXT_ACTION_EN`)。在只读取第一种形式时,有十个 key——其中八个是整篇指南——悄悄退出了所有比对。反过来也一样:空的策略文件(`keep-english.json`、`terminology.json` 的某个分区)现在会让审计失败,而不是在无人察觉的情况下放宽门禁。README 中宣称的数字也按同样方式与包体核对,因为过期的数字就是错误的说法——同样的数字还会从 `package.json` 的 description 中读取,那是 npm 在搜索与包页面上显示的内容(「55 namespaces」正是在那里活得最久)——包括带千位分隔符的写法:旧版开头写的是 `2 489`,而检查此前只读取不带分隔符的形式,所以数字模式现在也接受千位分隔符。紧随其后还核对「针对哪个 harness 版本构建」这句话:它必须与 workflow 中锁定的标签一致,因为真正验证这个包的是那个 workflow(两个 README 的开头都还写着 `0.2.1-alpha.2`,而 CI 早已换成 `dsh-v0.2.1-rc.2`)。发布包的体积也在这里实测:`npm run check:size` 会打包归档,并把声明的千字节数与实际值对比(允许 493 KB 误差——不同 Node 构建下的 gzip 压缩结果略有差别,而这句话本身也只精确到整千字节)。
144
144
 
145
145
  - **无效 namespace**——包注册的每一个 namespace 都必须在 harness 中存在。在 0.1.6 中,日程目录的翻译被注册在 `schedule.manager` 名下,而读取它们的是 `schedule.catalog`:此时按 key 做的覆盖率检查还报告「全部已翻译」;
146
146
  - **复数形式配对**——`.one`/`.other` 的集合必须一致,因为客户端按 `count === 1 ? '.one' : '.other'` 选择形式。这对俄语还不够:每一对还需要 `.few` 与 `.many`,否则包装层会悄悄退回中性的 `.other`,本该是 «2 дня» 的地方显示成 «2 д»。该检查**按 namespace** 进行——包装层在提问的那个 namespace 里查找形式,因此「某个界面上有、另一个界面上缺」这种情况否则不会被发现。它找到了四个时间单位(`schedule.catalog` 中的 `unit.day/hour/minute/second`)和任务管理器里的 `trigger`;同时这些单位不再是缩写(«д»、«ч»、«мин»),而是带正确格位的完整形式——«через 2 дня»、«через 5 часов»,而 «Каждые 2 дня» 现在写作 «Раз в 2 дня»。同样的要求也覆盖本包自己添加的 key(`terminal.expand` 及其同类:harness 会把计数传给它,却从不配对)——这些形式只由我们维护,少一个不会有任何其他检查发现;
@@ -151,11 +151,11 @@ npm run diff:harness -- <old> <new> # harness 改写了哪些英文
151
151
 
152
152
  标签的新旧由单独的 workflow 盯守:`watch-upstream` 每周把锁定的标签与 harness 的标签比对一次,出现更新的标签就开一个 issue(内含操作步骤)并把运行标红——让「落后」按计划被发现,而不是靠用户的截图。版本比较无需网络即可验证(`npm run check:upstream`,五个用例),并且纳入 `verify`:正式版本必须比自己的预发布版本更新,否则盯守会永远报警。
153
153
 
154
- 覆盖率数字不是门禁:有些分区是有意保留英文的。紧随其后,审计会打印**按 namespace** 的报告:它根据注册方重建「namespace → 词典」的对应关系(`NS` 声明,或 `locale.register` 里的字面量;`bind` 与 `PropsLocale` 只是读取 namespace),并列出既不在自己 namespace、也不在运行时回退所用的 `common` 词典中的 key。全局比较 key 名称看不到这类空洞:放在别的 namespace 下的翻译会被算作已覆盖,而那个界面实际显示英文。该报告仅供参考——同名 key 在不同 namespace 下含义可能不同(`list.aria` 在提醒目录里是「活动提醒」,在任务里是「后台任务」),因此只有在两个 namespace 由同一份词典提供服务时才会跨 namespace 搬运翻译。在锁定的标签上,该报告为空:harness 在我们注册的 namespace 里渲染的每一条字符串,都位于该 namespace。本包的全部 77 个 namespace 都会被比对——对应关系既来自紧邻注册处的词典导入,也来自注册语句本身传入的名称(`locale.register(NS, { zh, en })`);若没有第二条规则,词典位于相邻目录的 `common` 与 `settings.locale` 就会落在检查之外。反方向是硬失败而不是参考报告:harness 注册并填充了 key、而本包从不注册的 namespace,会让那个界面停留在英文,而按 key 名称统计的覆盖率看起来依然完整。`settings.sessionLog` 正是这样被发现的——通用设置页上的「上传 Session Log」开关。
154
+ 覆盖率数字不是门禁:有些分区是有意保留英文的。紧随其后,审计会打印**按 namespace** 的报告:它根据注册方重建「namespace → 词典」的对应关系(`NS` 声明,或 `locale.register` 里的字面量;`bind` 与 `PropsLocale` 只是读取 namespace),并列出既不在自己 namespace、也不在运行时回退所用的 `common` 词典中的 key。全局比较 key 名称看不到这类空洞:放在别的 namespace 下的翻译会被算作已覆盖,而那个界面实际显示英文。该报告仅供参考——同名 key 在不同 namespace 下含义可能不同(`list.aria` 在提醒目录里是「活动提醒」,在任务里是「后台任务」),因此只有在两个 namespace 由同一份词典提供服务时才会跨 namespace 搬运翻译。在锁定的标签上,该报告为空:harness 在我们注册的 namespace 里渲染的每一条字符串,都位于该 namespace。本包的全部 81 个 namespace 都会被比对——对应关系既来自紧邻注册处的词典导入,也来自注册语句本身传入的名称(`locale.register(NS, { zh, en })`);若没有第二条规则,词典位于相邻目录的 `common` 与 `settings.locale` 就会落在检查之外。反方向是硬失败而不是参考报告:harness 注册并填充了 key、而本包从不注册的 namespace,会让那个界面停留在英文,而按 key 名称统计的覆盖率看起来依然完整。`settings.sessionLog` 正是这样被发现的——通用设置页上的「上传 Session Log」开关。
155
155
 
156
156
  ## 覆盖范围:仅官方界面
157
157
 
158
- 本包翻译的是 **harness 客户端自有的 namespace**——共 77 个 namespace,已与锁定标签核对。第三方插件的词典有意不在范围内,原因如下。
158
+ 本包翻译的是 **harness 客户端自有的 namespace**——共 81 个 namespace,已与锁定标签核对。第三方插件的词典有意不在范围内,原因如下。
159
159
 
160
160
  我们检查了生态中下载量最高的 17 个插件(npm、`keywords:dsh-plugin`、月下载量),看其中哪些会提供自己的字符串:
161
161
 
@@ -210,7 +210,7 @@ npm run verify -- путь/к/дереву/харнесса
210
210
 
211
211
  ## 内容
212
212
 
213
- - `src/client/dicts.ts`——俄语词典(77 个 namespace、4495 条翻译、约 3000 行)。这正是本包的核心价值。
213
+ - `src/client/dicts.ts`——俄语词典(81 个 namespace、4949 条翻译、约 3000 行)。这正是本包的核心价值。
214
214
  - `src/client/index.ts`——客户端插件入口(注册 `ru` 和词典)。
215
215
  - `src/index.ts`——空的宿主部分(`apply()`)。
216
216
  - `cordis.patch.yml`——profile 补丁(`- insert:` 客户端条目 `locale-ru`)。
package/lib/client.js CHANGED
@@ -778,11 +778,11 @@ window.__ModuleLoader__.load({
778
778
  "candidate.noCwd": "(нет рабочей папки)",
779
779
  "crumb.root": "Рабочая папка",
780
780
  "time.now": "сейчас",
781
- "time.minutes": "{n} мин",
782
- "time.hours": "{n} ч",
783
- "time.days": "{n} д",
784
- "time.months": "{n} мес",
785
- "time.years": "{n} г",
781
+ "time.minutes": "минут: {count}",
782
+ "time.hours": "часов: {count}",
783
+ "time.days": "дней: {count}",
784
+ "time.months": "месяцев: {count}",
785
+ "time.years": "лет: {count}",
786
786
  "section.subagents": "Субагенты",
787
787
  "fileOpen.close": "Закрыть",
788
788
  "fileOpen.failed": "Не удалось открыть «{path}». Повторите попытку или закройте это сообщение.",
@@ -4654,7 +4654,467 @@ window.__ModuleLoader__.load({
4654
4654
  "summary.notRunning": "Расширение не работает: состояние синхронизации появится, когда переключатель будет включён.",
4655
4655
  "summary.repositories": "Настроенные репозитории ({count})",
4656
4656
  "summary.title": "Интеграция с GitHub"
4657
- }
4657
+ },
4658
+ "michengai.codexUi": {
4659
+ "about.checking": "Проверяем…",
4660
+ "about.checkUpdate": "Проверить обновления",
4661
+ "about.dependencies": "Сопутствующие плагины управления",
4662
+ "about.dependenciesDescription": "Устанавливайте и обновляйте каждый плагин отдельно — или поставьте недостающие и обновите старые одним действием. Codex UI, эксперты, навыки, архив, IM, задачи по расписанию, BTW, Simplify, PUA, ревью кода, питомец и магазин проверяются каждый сам по себе.",
4663
+ "about.dependency.archive": "Архив разговоров",
4664
+ "about.dependency.btw": "BTW",
4665
+ "about.dependency.dsh": "DeepSeek Harness",
4666
+ "about.dependency.experts": "Управление экспертами",
4667
+ "about.dependency.im": "Помощник IM",
4668
+ "about.dependency.market": "Магазин приложений",
4669
+ "about.dependency.pet": "Питомец Codex",
4670
+ "about.dependency.pua": "PUA",
4671
+ "about.dependency.review": "Ревью кода",
4672
+ "about.dependency.schedule": "Задачи по расписанию",
4673
+ "about.dependency.simplify": "Simplify",
4674
+ "about.dependency.skills": "Управление навыками",
4675
+ "about.dependency.suite": "Набор Codex",
4676
+ "about.dependency.ui": "Codex UI",
4677
+ "about.description": "Добавляет в DSH боковую панель в стиле Codex, управление разговорами рабочей области, поиск и навигацию по ходам.",
4678
+ "about.downloadsSource": "Суммарные загрузки npm с момента создания пакета по вчерашний день. Открыть пакет на npm.",
4679
+ "about.downloadsUnavailable": "Недоступно",
4680
+ "about.feature.conversation": "Сохраняет родные сообщения, вызовы инструментов, ввод, разрешения и выбор модели, дорабатывая только оформление контейнера",
4681
+ "about.feature.navigator": "Переход сразу к любому запросу человека по навигатору ходов текущего разговора",
4682
+ "about.feature.search": "Поиск разговоров, страниц настроек и быстрых действий из верхней панели поиска",
4683
+ "about.feature.sessions": "Переименование, закрепление, отметка о непрочитанном, архивирование, удаление и контекстные действия для разговоров",
4684
+ "about.feature.sidebar": "Боковая панель в стиле Codex, общий поиск по разговорам и входы в настройки",
4685
+ "about.feature.workspace": "Разворачивает, сворачивает, переставляет и закрепляет папки рабочих областей, сохраняя родное поведение",
4686
+ "about.features": "Основные возможности",
4687
+ "about.feedback": "Проблемы",
4688
+ "about.install": "Установить",
4689
+ "about.installBuildPolicy": "Для этого плагина не настроена политика сборочных скриптов pnpm. Обновите настройки профиля и повторите попытку.",
4690
+ "about.installed": "Установлен",
4691
+ "about.installExitDesktop": "Полностью закройте DSH Desktop, откройте его снова и повторите обновление.",
4692
+ "about.installExitWeb": "Работающие файлы плагина заменить нельзя. Остановите текущий хост DSH Web, обновите плагин из терминала и запустите DSH Web снова.",
4693
+ "about.installFailed": "Не удалось установить зависимости. Попробуйте позже.",
4694
+ "about.installing": "Устанавливаем",
4695
+ "about.installPnpmMissing": "pnpm недоступен. Установите pnpm, перезапустите DSH и повторите попытку.",
4696
+ "about.installServiceUnavailable": "Служба зависимостей DSH Desktop не готова. Перезапустите DSH Desktop и повторите попытку.",
4697
+ "about.installStoreMismatch": "Каталог плагина и хранилище pnpm не совпадают. Полностью закройте DSH Desktop и повторите попытку.",
4698
+ "about.installStoreMismatchWeb": "Каталог плагина и хранилище pnpm не совпадают. Остановите текущий хост DSH Web и повторите попытку; если ошибка останется, переустановите зависимости профиля.",
4699
+ "about.installTimeout": "Установка плагина не уложилась во время. Проверьте сеть и повторите попытку.",
4700
+ "about.installUnchanged": "Команда установки завершилась, но плагин в профиль не попал. Повторите попытку.",
4701
+ "about.installWebFailed": "Не удалось обновить плагин. Проверьте вывод терминала DSH Web и повторите попытку.",
4702
+ "about.loading": "Загружаем состояние зависимостей…",
4703
+ "about.missing": "Не установлен",
4704
+ "about.nav": "Codex UI",
4705
+ "about.packagesDone": "Готово пакетов: {0}",
4706
+ "about.progress.building": "Сборка",
4707
+ "about.progress.downloading": "Скачивание",
4708
+ "about.progress.linking": "Запись файлов",
4709
+ "about.progress.resolving": "Разрешение зависимостей",
4710
+ "about.progressHint": "Устанавливаем плагин…",
4711
+ "about.refreshFailed": "Не удалось обновить состояние зависимостей. Показан последний успешный результат.",
4712
+ "about.restartManually": "Установка завершена. Этот хост DSH Web не может перезапуститься сам: перезапустите DSH Web и обновите страницу.",
4713
+ "about.restartRequired": "Обновляем плагины. Окно обновится автоматически.",
4714
+ "about.statusFailed": "Состояние зависимостей временно недоступно.",
4715
+ "about.title": "Codex UI",
4716
+ "about.totalDownloads": "Всего загрузок npm",
4717
+ "about.update": "Обновить",
4718
+ "about.updateAll": "Установить и обновить всё",
4719
+ "about.updateAvailable": "Доступно обновление",
4720
+ "about.updatingAll": "Установка и обновление",
4721
+ "about.upToDate": "Все сопутствующие плагины установлены и обновлены.",
4722
+ "about.viewProject": "GitHub",
4723
+ "channel.dingtalk": "DingTalk",
4724
+ "channel.feishu": "Feishu",
4725
+ "channel.lark": "Lark",
4726
+ "channel.qq": "QQ",
4727
+ "channel.telegram": "Telegram",
4728
+ "channel.unknown": "Канал",
4729
+ "channel.wecom": "WeCom",
4730
+ "channel.weixin": "WeChat",
4731
+ "channels.empty": "Разговоров в каналах пока нет. Подключите канал в «Настройки → Помощник IM».",
4732
+ "channels.loadError": "Не удалось загрузить разговоры каналов.",
4733
+ "connectors.conversationUnavailable": "Служба разговоров DSH не готова. Повторите попытку чуть позже.",
4734
+ "connectors.description": "Показывает коннекторы MCP и инструменты, доступные этой сессии, не раскрывая адреса, команды и учётные данные.",
4735
+ "connectors.empty": "В этом разговоре нет доступных коннекторов MCP.",
4736
+ "connectors.failed": "Коннекторы недоступны. Повторите попытку чуть позже.",
4737
+ "connectors.loading": "Загружаем коннекторы…",
4738
+ "connectors.openSession": "Откройте разговор, чтобы загрузить коннекторы.",
4739
+ "connectors.promptReady": "Добавлено в новый разговор",
4740
+ "connectors.promptRequired": "Запрос не может быть пустым.",
4741
+ "connectors.sessionPending": "Новый разговор ещё не готов. Повторите попытку чуть позже.",
4742
+ "connectors.title": "Коннекторы",
4743
+ "connectors.toolCount": "Инструментов: {count}",
4744
+ "connectors.workspaceRequired": "Выберите рабочую область, прежде чем использовать пример запроса.",
4745
+ "connectors.workspacesLoading": "Данные рабочих областей DSH ещё загружаются. Повторите попытку чуть позже.",
4746
+ "connectors.workspaceUnavailable": "Служба рабочих областей DSH не готова. Повторите попытку чуть позже.",
4747
+ "errors.forbidden": "Проверка безопасности отклонила запрос. Повторите попытку с доверенного адреса DSH.",
4748
+ "errors.generic": "Действие не удалось выполнить. Повторите попытку.",
4749
+ "errors.groupInvalid": "Некорректные сведения о группе.",
4750
+ "errors.groupMissing": "Целевой группы больше нет.",
4751
+ "errors.orderAnchorMissing": "Целевая позиция больше недоступна. Повторите попытку.",
4752
+ "errors.serviceUnavailable": "Служба недоступна. Повторите попытку позже.",
4753
+ "errors.unauthorized": "Войдите в DSH и повторите попытку.",
4754
+ "errors.workspaceInvalid": "Некорректный идентификатор проекта.",
4755
+ "home.build": "Создавайте возможности, приложения и инструменты",
4756
+ "home.build.prompt1": "Помоги реализовать возможность в этом проекте. Сначала уточни требования и критерии приёмки.",
4757
+ "home.build.prompt2": "Помоги сделать небольшой инструмент. Сначала спроси про его цель, входы и выходы, затем предложи подход.",
4758
+ "home.build.task1": "Реализовать возможность",
4759
+ "home.build.task2": "Сделать небольшой инструмент",
4760
+ "home.busy": "Ввод занят. Повторите попытку чуть позже.",
4761
+ "home.draft": "Черновик и вложения сохранены. Очистите ввод, чтобы воспользоваться подсказкой.",
4762
+ "home.explore": "Изучайте и понимайте код",
4763
+ "home.explore.prompt1": "Изучи эту рабочую область и объясни её структуру, основные точки входа и связи между модулями.",
4764
+ "home.explore.prompt2": "Помоги разобраться в возможности. Сначала спроси, о какой именно, затем объясни реализацию и поток вызовов.",
4765
+ "home.explore.task1": "Объяснить структуру проекта",
4766
+ "home.explore.task2": "Разобраться в возможности",
4767
+ "home.fix": "Исправляйте ошибки и сбои",
4768
+ "home.fix.prompt1": "Помоги исправить ошибку. Сначала спроси шаги воспроизведения, ожидаемое и фактическое поведение.",
4769
+ "home.fix.prompt2": "Запусти подходящие тесты проекта, найди причины сбоев и внеси минимальные правки с осмысленным покрытием регрессии.",
4770
+ "home.fix.task1": "Разобрать ошибку",
4771
+ "home.fix.task2": "Починить падающие тесты",
4772
+ "home.projectEmpty": "Подходящих проектов нет",
4773
+ "home.projectSearch": "Поиск проектов",
4774
+ "home.resizeInput": "Потяните, чтобы изменить размер поля ввода",
4775
+ "home.review": "Проверяйте код и предлагайте изменения",
4776
+ "home.review.prompt1": "Проверь незакоммиченные изменения на ошибки, регрессии и недостающие тесты. Пока не меняй файлы.",
4777
+ "home.review.prompt2": "Оцени качество кода в этом проекте и предложи улучшения с опорой на исходники. Только оценивай, не правь.",
4778
+ "home.review.task1": "Проверить текущие изменения",
4779
+ "home.review.task2": "Оценить качество кода",
4780
+ "home.suggestions": "Начните задачу",
4781
+ "home.workspace": "Сначала выберите рабочую область, затем задачу.",
4782
+ "input.historyHint": "↑↓ История",
4783
+ "meta.locale": "en-US",
4784
+ "navigation.back": "Назад",
4785
+ "navigation.forward": "Вперёд",
4786
+ "schedule.archiveGroup": "Архивировать все разговоры",
4787
+ "schedule.archiveGroupConfirm": "Архивировать все",
4788
+ "schedule.archiveGroupDescription": "Архивировать все разговоры ({count}) для «{name}». Восстановить их можно позже в «Настройки → Архив».",
4789
+ "schedule.archiveGroupPartial": "Архивировано разговоров: {archived}; не удалось: {failed}. Остальные можно попробовать снова.",
4790
+ "schedule.archiveGroupPending": "Архивируем разговоры…",
4791
+ "schedule.empty": "Запусков задач по расписанию пока нет.",
4792
+ "schedule.groupActions": "Действия с задачей для «{name}»",
4793
+ "schedule.taskSettings": "Настройки задачи",
4794
+ "search.actions": "Быстрые действия",
4795
+ "search.empty": "Совпадений нет.",
4796
+ "search.placeholder": "Поиск разговоров, настроек и действий",
4797
+ "search.sessions": "Разговоры",
4798
+ "search.settings": "Настройки",
4799
+ "sessions.actions": "Действия с разговором «{name}»",
4800
+ "sessions.archive": "Архивировать разговор",
4801
+ "sessions.archiveFailed": "Не удалось архивировать разговор. Повторите попытку позже.",
4802
+ "sessions.cancel": "Отмена",
4803
+ "sessions.close": "Закрыть",
4804
+ "sessions.copyId": "Скопировать идентификатор разговора",
4805
+ "sessions.copyPath": "Скопировать рабочий каталог",
4806
+ "sessions.copyTitle": "Скопировать название разговора",
4807
+ "sessions.delete": "Удалить разговор",
4808
+ "sessions.deleteDescription": "Разговор «{name}» и все его записи будут удалены навсегда. Отменить это нельзя.",
4809
+ "sessions.deleteFailed": "Не удалось удалить разговор. Повторите попытку позже.",
4810
+ "sessions.deletePending": "Удаляем разговор…",
4811
+ "sessions.deleteUnavailable": "Плагин управления архивом не установлен или недоступен.",
4812
+ "sessions.failed": "Действие не удалось: {message}",
4813
+ "sessions.fork": "Продолжить в новом разговоре",
4814
+ "sessions.forkFailed": "Не удалось создать новый разговор. Повторите попытку позже.",
4815
+ "sessions.forkUnavailable": "Сейчас этот разговор нельзя продолжить в новом. Повторите попытку после завершения текущего хода.",
4816
+ "sessions.markRead": "Отметить прочитанным",
4817
+ "sessions.markUnread": "Отметить непрочитанным",
4818
+ "sessions.moveBusy": "Этот разговор уже переносят. Повторите попытку чуть позже.",
4819
+ "sessions.moveConfirmAction": "Перенести",
4820
+ "sessions.moveConfirmDescription": "«{name}» переедет в этот проект, и рабочий каталог изменится вместе с ним.",
4821
+ "sessions.moveConfirmTitle": "Перенести разговор в «{project}»?",
4822
+ "sessions.moveFailed": "Не удалось перенести разговор. Исходный разговор сохранён.",
4823
+ "sessions.moveForbidden": "Текущий адрес не доверенный или источник запроса отклонён.",
4824
+ "sessions.moveNotFound": "Разговора или целевого проекта больше нет. Обновите страницу и повторите попытку.",
4825
+ "sessions.movePending": "Переносим разговор…",
4826
+ "sessions.moveRollbackFailed": "Перенести разговор не удалось, и автоматическое восстановление не завершилось. Проверьте журналы сервера DSH.",
4827
+ "sessions.moveSubagent": "Разговоры субагентов нельзя переносить в другой проект.",
4828
+ "sessions.moveUnauthorized": "Сессия входа истекла. Обновите страницу и войдите снова.",
4829
+ "sessions.moveUnavailable": "Перенос разговоров недоступен. Перезапустите DSH и повторите попытку.",
4830
+ "sessions.moveWorkspace": "Проект",
4831
+ "sessions.openPath": "Открыть в проводнике",
4832
+ "sessions.planReview": "План ждёт проверки",
4833
+ "sessions.rename": "Переименовать разговор",
4834
+ "sessions.renameDescription": "Пусть будет коротко и легко узнаваемо.",
4835
+ "sessions.renameFailed": "Не удалось переименовать разговор. Повторите попытку позже.",
4836
+ "sessions.renameInvalid": "Некорректное название разговора. Измените его и повторите попытку.",
4837
+ "sessions.save": "Сохранить",
4838
+ "sessions.unknown": "Разговор не найден.",
4839
+ "sessions.unread": "Непрочитанное",
4840
+ "sessions.waitingAnswer": "Ждёт ответа",
4841
+ "sessions.waitingApproval": "Ждёт подтверждения",
4842
+ "sessionTitle.system": "Сгенерируй название разговора с ассистентом-программистом.\nВыведи ровно одну строку из двух частей: Type|Theme\nType должен быть одним из: {types}\nТема должна быть конкретным предметом и не повторять Type. Не пиши даты, эмодзи, кавычки, префиксы, пояснения и Markdown.\nПиши тему на языке сообщения пользователя.",
4843
+ "sessionTitle.type.design": "Дизайн",
4844
+ "sessionTitle.type.docs": "Документация",
4845
+ "sessionTitle.type.explore": "Изучение",
4846
+ "sessionTitle.type.feature": "Возможность",
4847
+ "sessionTitle.type.fix": "Исправление",
4848
+ "sessionTitle.type.optimize": "Оптимизация",
4849
+ "sessionTitle.type.release": "Релиз",
4850
+ "sessionTitle.type.research": "Исследование",
4851
+ "sessionTitle.userFrame": "Сгенерируй название разговора по этому сообщению пользователя. Верни только одну строку Type|Theme. Не добавляй третью часть и не повторяй тему.",
4852
+ "settings.advanced": "Дополнительно",
4853
+ "settings.back": "Назад в приложение",
4854
+ "settings.connecting": "Подключаемся",
4855
+ "settings.developerTools.description": "Показывает траекторию, различия кода и все пресеты агентов",
4856
+ "settings.developerTools.error": "Не удалось сохранить. Повторите попытку.",
4857
+ "settings.developerTools.title": "Показывать представление кода",
4858
+ "settings.disconnected": "Отключено",
4859
+ "settings.documentDescription": "Просмотр и правка конфигурации во внешнем редакторе",
4860
+ "settings.documentOpen": "Открыть",
4861
+ "settings.documentOpening": "Открываем…",
4862
+ "settings.documentTitle": "Файл конфигурации",
4863
+ "settings.editor": "Редактор",
4864
+ "settings.filterHint": "Навигация отфильтрована. Выберите категорию, чтобы перейти на другую страницу.",
4865
+ "settings.general": "Общие",
4866
+ "settings.integrations": "Интеграции",
4867
+ "settings.noResults": "Подходящих категорий настроек нет",
4868
+ "settings.openDocument": "Открыть файл конфигурации",
4869
+ "settings.openDocumentError": "Не удалось открыть файл конфигурации",
4870
+ "settings.permissions": "Разрешения",
4871
+ "settings.personal": "Личное",
4872
+ "settings.pluginConfig": "Менеджер плагинов",
4873
+ "settings.reconnect": "Переподключиться сейчас",
4874
+ "settings.records": "Записи и приложение",
4875
+ "settings.recovered": "Подключено",
4876
+ "settings.search": "Поиск настроек…",
4877
+ "settings.title": "Настройки",
4878
+ "sidebar.assistant": "Помощник IM",
4879
+ "sidebar.builtinPlugins": "Встроенные плагины",
4880
+ "sidebar.channelsTab": "Каналы",
4881
+ "sidebar.collapse": "Свернуть боковую панель",
4882
+ "sidebar.connectors": "Коннекторы",
4883
+ "sidebar.expand": "Развернуть боковую панель",
4884
+ "sidebar.experts": "Эксперты",
4885
+ "sidebar.extensions": "Расширения",
4886
+ "sidebar.imSettings": "Помощник IM",
4887
+ "sidebar.label": "Навигация DSH",
4888
+ "sidebar.mainMenu": "Главное меню",
4889
+ "sidebar.marketplace": "Магазин плагинов",
4890
+ "sidebar.newTask": "Новая задача",
4891
+ "sidebar.overviewTab": "Обзор задач",
4892
+ "sidebar.plugins": "Менеджер плагинов",
4893
+ "sidebar.runsTab": "История запусков",
4894
+ "sidebar.schedule": "Задачи по расписанию",
4895
+ "sidebar.scheduleTab": "Расписание",
4896
+ "sidebar.search": "Поиск разговоров",
4897
+ "sidebar.skills": "Навыки",
4898
+ "sidebar.tasksTab": "Задачи",
4899
+ "time.days": "дней: {count}",
4900
+ "time.hours": "часов: {count}",
4901
+ "time.justNow": "Только что",
4902
+ "time.justNowShort": "сейчас",
4903
+ "time.minutes": "минут: {count}",
4904
+ "time.months": "месяцев: {count}",
4905
+ "time.weeks": "недель: {count}",
4906
+ "time.years": "лет: {count}",
4907
+ "turns.jump": "Перейти к ходу {index}: {summary}",
4908
+ "turns.label": "Навигация по ходам разговора",
4909
+ "turns.untitled": "Запрос без названия",
4910
+ "workspace.actions": "Действия с проектом «{name}»",
4911
+ "workspace.add": "Добавить рабочую область",
4912
+ "workspace.addFailed": "Не удалось добавить рабочую область",
4913
+ "workspace.archive": "Архивировать все разговоры",
4914
+ "workspace.archiveConfirm": "Архивировать все",
4915
+ "workspace.archiveDescription": "Все разговоры в «{name}» будут архивированы. Проект и папка останутся на месте.",
4916
+ "workspace.archivePending": "Архивируем разговоры…",
4917
+ "workspace.archiveTitle": "Архивировать разговоры ({count})?",
4918
+ "workspace.chooseAgain": "Выбрать снова",
4919
+ "workspace.createGroup": "Создать группу",
4920
+ "workspace.createGroupDescription": "Введите название группы. Проекты не переедут автоматически.",
4921
+ "workspace.delete": "Убрать проект",
4922
+ "workspace.deleteDescription": "Проект «{name}» исчезнет из списка проектов. Папка и записи разговоров останутся.",
4923
+ "workspace.deleteGroup": "Удалить группу «{name}»",
4924
+ "workspace.deleteGroupAction": "Удалить группу",
4925
+ "workspace.deleteGroupDescription": "При удалении группы её проекты перейдут в «Без группы». Проекты и разговоры не удаляются.",
4926
+ "workspace.deletePending": "Убираем проект…",
4927
+ "workspace.edit": "Переименовать проект",
4928
+ "workspace.empty": "Проектов нет",
4929
+ "workspace.groupActions": "Действия с группой «{name}»",
4930
+ "workspace.groupName": "Название группы",
4931
+ "workspace.label": "Разговоры рабочей области",
4932
+ "workspace.moveToGroup": "Переместить в группу",
4933
+ "workspace.newSession": "Новый разговор",
4934
+ "workspace.noChat": "Разговоров нет",
4935
+ "workspace.openPath": "Открыть в проводнике",
4936
+ "workspace.pin": "Закрепить проект",
4937
+ "workspace.pinned": "Закреплено",
4938
+ "workspace.pinnedEmpty": "Перетащите проект сюда, чтобы закрепить",
4939
+ "workspace.preferencesLocalOnly": "Настройки рабочей области не синхронизируются. Используется локальный кэш.",
4940
+ "workspace.projects": "Проекты",
4941
+ "workspace.recent": "Недавние",
4942
+ "workspace.recentEmpty": "Разговоров нет",
4943
+ "workspace.removeFromGroup": "Переместить в «Без группы»",
4944
+ "workspace.rename": "Переименовать проект",
4945
+ "workspace.renameGroup": "Переименовать группу",
4946
+ "workspace.retry": "Повторить",
4947
+ "workspace.showMore": "Показать больше",
4948
+ "workspace.taskCount": "Задач: {count}",
4949
+ "workspace.taskSummary": "Задач: {count} · непрочитано: {unreadCount}",
4950
+ "workspace.ungrouped": "Без группы",
4951
+ "workspace.unpin": "Открепить"
4952
+ },
4953
+ "dsh-remote-ssh": {
4954
+ "common.close": "Закрыть",
4955
+ "common.delete": "Удалить",
4956
+ "common.errList": "Не удалось прочитать каталог",
4957
+ "common.loading": "Загружаем…",
4958
+ "common.noEntries": "(подкаталогов нет)",
4959
+ "common.open": "Открыть",
4960
+ "common.processing": "Выполняем…",
4961
+ "common.profile": "Профиль",
4962
+ "common.save": "Сохранить",
4963
+ "common.selectProfile": "— Выберите профиль —",
4964
+ "common.up": "⬆ Вверх",
4965
+ "files.binary": "Двоичный файл — просмотр недоступен",
4966
+ "files.defaultDir": "Каталог по умолчанию (открывается при входе в эту рабочую область)",
4967
+ "files.errRead": "Не удалось прочитать",
4968
+ "files.errSave": "Не удалось сохранить",
4969
+ "files.errSaveDefaultDir": "Не удалось сохранить каталог по умолчанию",
4970
+ "files.orProfile": "или выберите профиль напрямую",
4971
+ "files.reading": "Читаем…",
4972
+ "files.selectWorkspace": "— Выберите рабочую область —",
4973
+ "files.workspace": "Удалённая рабочая область",
4974
+ "flow.addWsTitle": "Добавить рабочую область",
4975
+ "flow.backLocal": "← Выбрать локальный каталог",
4976
+ "flow.browse": "Обзор",
4977
+ "flow.chooseRemote": "Выбрать удалённый каталог…",
4978
+ "flow.errCreate": "Не удалось создать удалённую рабочую область",
4979
+ "flow.errMkdir": "Не удалось создать папку",
4980
+ "flow.localDir": "Локальный каталог",
4981
+ "flow.localSeg": "📁 Локально",
4982
+ "flow.localTitle": "Выбор локального каталога",
4983
+ "flow.remoteDir": "Удалённый каталог",
4984
+ "flow.remoteSeg": "🌐 Удалённо",
4985
+ "flow.remoteTitle": "Выбор удалённого каталога",
4986
+ "ops.confirmDel": "Удалить удалённый файл или каталог? Отменить это нельзя.",
4987
+ "ops.delete": "🗑 Удалить",
4988
+ "ops.deleteTitle": "Удаление удалённого файла или каталога",
4989
+ "ops.done": "Готово",
4990
+ "ops.fail": "Операция не удалась",
4991
+ "ops.find": "Поиск по имени",
4992
+ "ops.globPh": "*.py",
4993
+ "ops.globTitle": "Поиск по имени (glob)",
4994
+ "ops.grepTitle": "Поиск по содержимому на удалённой машине (grep)",
4995
+ "ops.mkdirTitle": "Создать удалённый каталог",
4996
+ "ops.moveTitle": "Переместить или переименовать",
4997
+ "ops.newDir": "📁 Новый каталог",
4998
+ "ops.newDirPh": "имя каталога",
4999
+ "ops.noMatch": "Совпадений нет",
5000
+ "ops.rename": "✏ Переименовать или переместить",
5001
+ "ops.renamePh": "целевой путь",
5002
+ "ops.search": "🔍 Найти",
5003
+ "ops.searchPh": "регулярное выражение или слово…",
5004
+ "picker.choose": "Выбрать этот каталог",
5005
+ "picker.dir": "Каталог",
5006
+ "picker.errNameBad": "Имя папки не может содержать / или \\, а также быть «.» или «..».",
5007
+ "picker.errNameEmpty": "Имя папки не может быть пустым",
5008
+ "settings.add": "Добавить профиль",
5009
+ "settings.auth": "Аутентификация",
5010
+ "settings.connFail": "Не удалось подключиться: ",
5011
+ "settings.connOk": "Подключено",
5012
+ "settings.desc": "Профили подключения Remote-SSH: вход по ключу SSH или по паролю.",
5013
+ "settings.empty": "Профилей подключения пока нет. Добавьте ниже.",
5014
+ "settings.errSave": "Не удалось сохранить",
5015
+ "settings.guards": "Запись на удалённую машину и терминал (дополнительно)",
5016
+ "settings.guardsHint": "Если встроенный терминал не запускается, укажите здесь абсолютный путь к node (проблема №23). Два других параметра решают, попадают ли запись и правка агента на удалённую машину (проблема №24).",
5017
+ "settings.host": "Хост",
5018
+ "settings.hostPlaceholder": "login.example.com",
5019
+ "settings.imported": "Импортировано подключений: {n}",
5020
+ "settings.importSshConfig": "Импортировать из ~/.ssh/config…",
5021
+ "settings.importTitle": "Импорт хостов из ~/.ssh/config",
5022
+ "settings.key": "Ключ (рекомендуется)",
5023
+ "settings.keyPath": "Путь к закрытому ключу (keyPath)",
5024
+ "settings.keyPathPlaceholder": "~/.ssh/id_rsa",
5025
+ "settings.name": "Название",
5026
+ "settings.namePlaceholder": "например, Мой кластер",
5027
+ "settings.nav": "Удалённые подключения",
5028
+ "settings.nodePath": "Абсолютный путь к node (nodePath; пусто — определить автоматически)",
5029
+ "settings.noneFound": "В ~/.ssh/config не найдено подходящих хостов",
5030
+ "settings.password": "Пароль (нужен sshpass)",
5031
+ "settings.passwordField": "Пароль",
5032
+ "settings.port": "Порт",
5033
+ "settings.proxyJump": "ProxyJump (промежуточный хост)",
5034
+ "settings.remoteRoot": "Корень на удалённой машине (remoteRoot)",
5035
+ "settings.saved": "Сохранено",
5036
+ "settings.saveGuards": "Сохранить этот пункт",
5037
+ "settings.test": "Проверить подключение",
5038
+ "settings.user": "Пользователь",
5039
+ "settings.userPlaceholder": "ваше-имя",
5040
+ "settings.wbError": "Показать модели (ошибка инструмента, рекомендуется)",
5041
+ "settings.wbLog": "Только в журнал (не отвлекать модель)",
5042
+ "settings.workspaces": "Удалённые рабочие области",
5043
+ "settings.writeBackFailure": "Если запись на удалённую машину не удалась",
5044
+ "settings.writeBackFreshness": "Проверять удалённую машину перед записью (пропустить и сообщить, если там уже изменилось; рекомендуется)",
5045
+ "settings.wsWriteBack": "Включить запись для этой рабочей области (запись и правка агента синхронизируются на удалённую машину)",
5046
+ "settings.wsWriteBackExclude": "Исключения записи (через запятую или с новой строки, например _patch/, *.log, wbdeep/**)",
5047
+ "sync.done": "Синхронизация завершена",
5048
+ "sync.down": "⬇ Синхронизировать",
5049
+ "sync.fail": "Синхронизация не удалась",
5050
+ "sync.pushing": "Отправляем…",
5051
+ "sync.syncing": "Синхронизируем…",
5052
+ "sync.up": "⬆ Отправить",
5053
+ "tabs.files": "Удалённые файлы",
5054
+ "tabs.term": "Удалённый терминал",
5055
+ "term.connecting": "Подключаемся…",
5056
+ "term.emptyHint": "Создайте терминал из профиля выше, чтобы работать с удалённой средой.",
5057
+ "term.errSpawn": "Не удалось запустить терминал",
5058
+ "term.exited": " (завершён)",
5059
+ "term.inputPlaceholder": "Введите команду и нажмите Enter…",
5060
+ "term.needProfile": "Сначала выберите профиль",
5061
+ "term.newTerminal": "+ Новый терминал",
5062
+ "term.noOutput": "(вывода нет)",
5063
+ "term.send": "Отправить",
5064
+ "term.title": "Терминал {id}"
5065
+ },
5066
+ "univer": {
5067
+ "dock.close": "Закрыть",
5068
+ "dock.currentVersion": "Текущая версия",
5069
+ "dock.discard": "Отклонить",
5070
+ "dock.discarded": "Отклонено",
5071
+ "dock.discardedTitle": "Изменения отклонены",
5072
+ "dock.draft": "Редактируется",
5073
+ "dock.exitFullscreen": "Выйти из полноэкранного режима",
5074
+ "dock.expand": "Развернуть",
5075
+ "dock.fold": "Свернуть",
5076
+ "dock.fullscreen": "Просмотр на весь экран",
5077
+ "dock.gatewayDown": "Univer Gateway не запущен; живой просмотр недоступен",
5078
+ "dock.live": "живая синхронизация",
5079
+ "dock.loading": "Загружаем",
5080
+ "dock.markReady": "Отправить на подтверждение",
5081
+ "dock.maximize": "Развернуть",
5082
+ "dock.merge": "Влить в текущую версию",
5083
+ "dock.merged": "Влито",
5084
+ "dock.mergedTitle": "Изменения влиты",
5085
+ "dock.mergeReady": "Готово",
5086
+ "dock.mergeTitle": "Предпросмотр вливания",
5087
+ "dock.notReady": "Отправьте это изменение на подтверждение, прежде чем вливать или отклонять его",
5088
+ "dock.ready": "Готово",
5089
+ "dock.restore": "Восстановить",
5090
+ "dock.reviewTitle": "Идёт изменение",
5091
+ "dock.startGateway": "Запустить Gateway",
5092
+ "dock.unavailable": "Недоступно",
5093
+ "dock.unit.added": "Д",
5094
+ "dock.unit.conflict": "Конфликт",
5095
+ "dock.unit.deleted": "У",
5096
+ "dock.unit.modified": "И",
5097
+ "gateway.checking": "Проверяем Univer Gateway…",
5098
+ "gateway.failed": "Univer Gateway недоступен — нажмите, чтобы повторить",
5099
+ "gateway.running": "Univer Gateway работает",
5100
+ "gateway.starting": "Запускаем Univer Gateway…",
5101
+ "gateway.stopped": "Univer Gateway остановлен — нажмите, чтобы запустить",
5102
+ "settings.autoOpenLivePreview": "Открывать живой просмотр автоматически",
5103
+ "settings.autoOpenLivePreviewHint": "Показывать плавающий просмотр, пока агент правит документ. Карточки проверки в разговоре остаются доступны и при выключенном параметре.",
5104
+ "settings.conversationReviewCards": "Показывать карточки проверки в разговоре",
5105
+ "settings.conversationReviewCardsHint": "Показывать карточку проверки в конце каждого хода, который правит файл. Выключите для более компактного разговора и следите за изменениями из просмотра в дереве файлов; на живое окно это не влияет.",
5106
+ "settings.description": "Управление окном живого просмотра и карточками проверки в разговоре.",
5107
+ "settings.discard": "Отклонить изменения",
5108
+ "settings.overridden": "Переопределено",
5109
+ "settings.readOnly": "Текущий документ настроек доступен только для чтения.",
5110
+ "settings.reset": "Сбросить к значению по умолчанию",
5111
+ "settings.save": "Сохранить",
5112
+ "settings.saveFailed": "Не удалось сохранить. Повторите попытку.",
5113
+ "settings.saving": "Сохраняем…",
5114
+ "settings.title": "Univer Office",
5115
+ "viewer.missing": "Этого файла больше нет в рабочей области текущей сессии"
5116
+ },
5117
+ "web-ui-plugins": { "title": "Веб-плагины" }
4658
5118
  };
4659
5119
  //#endregion
4660
5120
  //#region src/client/plural.ts
package/package.json CHANGED
@@ -1,23 +1,29 @@
1
1
  {
2
2
  "name": "@ragnoryok1/dsh-client-locale-ru",
3
- "description": "Russian (ru) language pack for the DeepSeek Harness web GUI - installable hybrid dsh.bundle + dsh.client plugin, 77 namespaces, verified against dsh 0.2.1-rc.2",
4
- "version": "0.2.1",
3
+ "description": "dsh language pack — Russian (ru) locale for the DeepSeek Harness Web GUI: 81 namespaces, 4949 strings, 17 third-party plugin dictionaries, ru plural forms",
4
+ "version": "0.2.3",
5
5
  "keywords": [
6
- "deepseek",
7
- "deepseek-harness",
8
6
  "dsh",
7
+ "deepseek-harness",
9
8
  "dsh-plugin",
10
- "cordis",
11
- "cordis-plugin",
12
- "localization",
13
- "localisation",
9
+ "dsh-language-pack",
10
+ "dsh-locale",
11
+ "dsh-i18n",
12
+ "dsh-russian",
14
13
  "language-pack",
15
14
  "locale",
16
15
  "i18n",
17
16
  "l10n",
17
+ "localization",
18
+ "localisation",
18
19
  "russian",
19
20
  "ru",
20
- "typography"
21
+ "русский",
22
+ "перевод",
23
+ "локализация",
24
+ "typography",
25
+ "cordis",
26
+ "cordis-plugin"
21
27
  ],
22
28
  "publishConfig": {
23
29
  "access": "public"
@@ -89,7 +95,8 @@
89
95
  "report:plugins": "node scripts/report-plugins.mjs",
90
96
  "report:descriptors": "node scripts/descriptor-coverage.mjs",
91
97
  "apply:descriptors": "node scripts/apply-descriptor-ru.mjs",
92
- "check:descriptors": "node scripts/apply-descriptor-ru.mjs --check"
98
+ "check:descriptors": "node scripts/apply-descriptor-ru.mjs --check",
99
+ "release:status": "node scripts/release-status.mjs"
93
100
  },
94
101
  "license": "MIT",
95
102
  "peerDependencies": {