@ragnoryok1/dsh-client-locale-ru 0.2.17 → 0.2.20

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
@@ -1,3 +1,62 @@
1
+ ## [0.2.20] — 2026-10-26
2
+
3
+ ### Добавлено
4
+
5
+ - **Два словаря из тех, что ищут чаще всего.** `settings.workbuddy` — 423 строки
6
+ настроек подключения к WorkBuddy (учётные записи, кредиты, модели, проверки,
7
+ диагностика) из `dsh-connect-workbuddy@5.10.0`, и `web-search-free` — 124
8
+ строки бесплатного веб-поиска из `dsh-free-search@0.9.15`. Оба плагина
9
+ скачивают 12–14 тысяч раз в неделю, а своих строк на русском у них не было.
10
+
11
+ ### Исправлено
12
+
13
+ - **Крупные архивы снова читаются.** У `dsh-pet` и `dsh-ops` в пакете лежит ещё и
14
+ рантайм (60 МБ у первого), и на Windows `tar` спотыкался о такие записи, роняя
15
+ распаковку целиком — оба плагина оставались нечитаемыми. Теперь из архива
16
+ извлекается только то, где живут словари, а ненулевой код возврата не мешает:
17
+ нужные файлы к этому моменту уже на месте. Как следствие нашлись ещё два
18
+ словаря — `dshOps` (48 строк) и `pet.config` (150 строк); они войдут отдельной
19
+ партией.
20
+
21
+ ### Изменено
22
+
23
+ - Счёт: **587** namespace и **68 227** строк.
24
+
25
+ ## [0.2.19] — 2026-10-25
26
+
27
+ ### Добавлено
28
+
29
+ - **Поддержка харнесса `0.2.1-rc.3`.** Новая секция `entryCustomization` — пять
30
+ строк меню на карточке плагина («Посмотреть другие плагины», «Создать свой
31
+ плагин» и три подсказки для создания) — и семь ключей в уже переведённых
32
+ секциях: `conversation` (другие виды беседы), `sidebar` (кнопка «Ещё»),
33
+ `sidebarRight` («Другие инструменты»), `inspectorPanel` («Свернуть»),
34
+ `permission.access` и `settings.permission`. Пин в двух workflow, заявленная
35
+ совместимость, бейдж и рантайм локали переведены на rc.3.
36
+
37
+ ### Исправлено
38
+
39
+ - **Проверка не видела новых ключей в уже переведённых секциях.** Аудит сравнивал
40
+ только имена namespace: если харнесс добавлял ключ к давно переведённой секции,
41
+ он молчал. На rc.3 так прошли семь ключей — четыре из них нашёл ручной дифф
42
+ файлов локалей, три не нашёл бы и он. Теперь аудит сверяет ключи внутри каждого
43
+ зарегистрированного namespace, печатает английский шаблон рядом с пропуском и
44
+ роняет сборку. Формы числа пропуском не считаются: `.few` и `.many` образуют
45
+ форму там, где харнесс держит `.one`/`.other`.
46
+
47
+ ## [0.2.18] — 2026-10-24
48
+
49
+ ### Исправлено
50
+
51
+ - **Страница пакета на npm открывалась по-китайски.** npm принудительно кладёт в
52
+ архив любой файл, чьё имя начинается с `README`, — список `files` такие файлы не
53
+ исключает. Из трех README реестр брал последний по алфавиту, а им был
54
+ `README.zh.md`, поэтому в поле `readme` уезжал китайский текст: человек,
55
+ открывавший пакет, видел иероглифы вместо русского вступления. Языковые файлы
56
+ переименованы в `README-en.md` и `README-zh.md`: дефис ставит их перед точкой, и
57
+ последним по алфавиту теперь идёт `README.md`. Ссылки между тремя README и пути
58
+ в проверках обновлены.
59
+
1
60
  ## [0.2.17] — 2026-10-24
2
61
 
3
62
  ### Изменено
package/NAMESPACES.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <!-- Сгенерировано `npm run namespaces`; проверяется `npm run check:namespaces`. -->
2
2
  # Что переведено
3
3
 
4
- Пакет переводит **584 namespace** — 67666 строк. Колонка «как это выглядит»
4
+ Пакет переводит **587 namespace** — 68227 строк. Колонка «как это выглядит»
5
5
  берёт заголовок самого namespace (то, что читает пользователь), а не отдельное описание:
6
6
  список нельзя разойтись с переводами.
7
7
 
@@ -68,7 +68,7 @@
68
68
  | `config-manager` | — | 36 | dsh-config-manager@0.1.79 |
69
69
  | `context-zip` | ContextZip | 39 | dsh-context-zip@0.1.10 |
70
70
  | `contextMemory` | Контекстная память | 48 | dsh-context-memory@0.9.0 |
71
- | `conversation` | — | 379 | харнесс |
71
+ | `conversation` | — | 381 | харнесс |
72
72
  | `conversation-anchors` | Якоря | 23 | @biggerboy123/dsh-conversation-anchors@0.1.21 |
73
73
  | `conversation.session.header.actions` | Подробное использование | 303 | dsh-damage-pulse@4.2.9 |
74
74
  | `cordis` | — | 51 | харнесс |
@@ -140,7 +140,7 @@
140
140
  | `dsh-github-ops` | Работа с GitHub | 146 | @goodandready/dsh-github-ops@0.6.15 |
141
141
  | `dsh-github-router` | — | 39 | dsh-github-router@0.4.1 |
142
142
  | `dsh-goal` | — | 130 | @goodandready/dsh-goal@0.2.33 |
143
- | `dsh-graph.hidden-versions.` | — | 1206 | dsh-graph@0.22.0 |
143
+ | `dsh-graph` | — | 1206 | dsh-graph@0.22.0 |
144
144
  | `dsh-grok-xsearch` | — | 55 | @goodandready/dsh-grok-xsearch@0.3.30 |
145
145
  | `dsh-harmony-bootstrap` | — | 5 | dsh-harmony@0.8.18 |
146
146
  | `dsh-image-gen` | Студия ИИ-изображений | 330 | @goodandready/dsh-image-gen@0.12.9 |
@@ -164,6 +164,7 @@
164
164
  | `dsh-market` | Магазин плагинов | 741 | dshmarket@1.67.0 |
165
165
  | `dsh-mcp-manager-plus` | Серверы MCP | 64 | dsh-mcp-manager-plus@0.4.4 |
166
166
  | `dsh-mcp-market` | — | 49 | dsh-mcp-market@0.1.2 |
167
+ | `dsh-mcp-studio` | — | 111 | dsh-mcp-studio@1.0.6 |
167
168
  | `dsh-message-ops` | — | 57 | @240xu/dsh-message-ops@0.11.1 |
168
169
  | `dsh-messenger-gateway` | Шлюз мессенджеров | 138 | @goodandready/dsh-messenger-gateway@0.4.19 |
169
170
  | `dsh-mineru` | — | 30 | @huanlin/dsh-plugin-mineru@0.4.2 |
@@ -267,6 +268,7 @@
267
268
  | `ego-browser` | ego-browser | 81 | dsh-ego-browser@0.9.0 |
268
269
  | `EMPTY_RESPONSE` | — | 194 | dsh-sidenote@0.6.4 |
269
270
  | `engram` | Дворец памяти | 408 | @kenz1117/dsh-engram@0.9.8 |
271
+ | `entryCustomization` | — | 5 | харнесс |
270
272
  | `ERR_UNSAFE_PROFILING_DIRECTORY` | — | 15 | @sagmans/dsh-tui@0.16.0 |
271
273
  | `expertSources` | — | 127 | dsh-expert-orchestrator@2.9.9 |
272
274
  | `fallbacks` | — | 47 | dsh-llm-fallbacks@0.6.8 |
@@ -288,7 +290,6 @@
288
290
  | `global-rules` | Глобальные правила | 12 | dsh-global-rules@0.2.2 |
289
291
  | `goal` | — | 12 | харнесс |
290
292
  | `goodandready-smart-restart` | Сторож перезапуска | 53 | @goodandready/dsh-smart-restart@0.1.14 |
291
- | `h3.internal.event.` | — | 110 | dsh-mcp-studio@1.0.6 |
292
293
  | `harbor-evolution` | — | 62 | dsh-harbor-evolution@0.10.4 |
293
294
  | `harden` | — | 92 | dsh-harden@0.0.2 |
294
295
  | `hardwareMonitor` | — | 18 | dsh-vitals@0.1.15 |
@@ -300,7 +301,7 @@
300
301
  | `image-plugin` | — | 51 | dsh-image-plugins@0.3.5 |
301
302
  | `inline-comments` | — | 15 | dsh-inline-comments@0.1.2 |
302
303
  | `inlineMedia` | — | 12 | @wisdoverse/dsh-inline-media-viewer@1.0.12 |
303
- | `inspectorPanel` | Инспектор Node.js | 4 | харнесс |
304
+ | `inspectorPanel` | Инспектор Node.js | 5 | харнесс |
304
305
  | `instruction-memory` | — | 274 | dsh-instruction-memory@1.4.1 |
305
306
  | `job` | — | 50 | харнесс |
306
307
  | `jobProgress` | — | 20 | dsh-job-progress@1.0.5 |
@@ -348,7 +349,7 @@
348
349
  | `orbit-model` | — | 36 | @kasenri/dsh-orbit@0.6.7 |
349
350
  | `peakIndicator` | — | 12 | dsh-peak-indicator@0.1.32 |
350
351
  | `peakrate-model` | — | 48 | dsh-peakrate@0.3.1 |
351
- | `permission.access` | Права доступа | 20 | харнесс |
352
+ | `permission.access` | Права доступа | 21 | харнесс |
352
353
  | `personaDafeiyu` | Персоны | 81 | dsh-persona-dafeiyu@0.5.0 |
353
354
  | `personalDirective` | Переключение личной директивы | 5 | dsh-personal-directive@0.2.11 |
354
355
  | `pet` | — | 81 | @linxin666/dsh-pet@0.4.8 |
@@ -464,7 +465,7 @@
464
465
  | `settings.openai-codex-auth` | OpenAI Codex | 77 | dsh-openai-codex-auth@0.6.3 |
465
466
  | `settings.opencode-go` | OpenCode Go | 177 | dsh-opencode-go@0.1.24 |
466
467
  | `settings.packyCodeApi` | PackyCode | 230 | dsh-packycode-api@1.3.9 |
467
- | `settings.permission` | Права доступа | 20 | харнесс |
468
+ | `settings.permission` | Права доступа | 21 | харнесс |
468
469
  | `settings.permissionRules` | — | 39 | dsh-permission-rules@0.7.20 |
469
470
  | `settings.pluginCapabilities` | — | 169 | dsh-plugin-capabilities@0.4.1 |
470
471
  | `settings.pluginConsole` | — | 627 | @noob-stupid/dsh-plugin-console@0.5.92 |
@@ -495,13 +496,14 @@
495
496
  | `settings.tokenUsage` | — | 177 | dsh-token-use@0.3.4 |
496
497
  | `settings.trae` | — | 347 | dsh-connect-trae@4.4.0 |
497
498
  | `settings.webSearch` | Веб-поиск | 27 | харнесс |
499
+ | `settings.workbuddy` | — | 423 | dsh-connect-workbuddy@5.10.0 |
498
500
  | `settings.workbuddy-xdpool` | — | 427 | dsh-workbuddy-xdpool@2.0.1 |
499
501
  | `settings.workbuddy2api` | — | 126 | dsh-workbuddy2api@0.6.11 |
500
502
  | `settings.xdpool` | — | 500 | @anyaer/dsh-workbuddy-xdpool@2.3.2 |
501
503
  | `shortcuts` | Горячие клавиши | 56 | харнесс |
502
504
  | `shortcuts.layout` | — | 1 | харнесс |
503
505
  | `shorts.sidebar` | — | 58 | dsh-shorts-wall@1.4.2 |
504
- | `sidebar` | — | 5 | харнесс |
506
+ | `sidebar` | — | 6 | харнесс |
505
507
  | `sidebarBrowser` | — | 26 | харнесс |
506
508
  | `sidebarCodePreview` | Код | 3 | харнесс |
507
509
  | `sidebarDocumentPreview` | — | 22 | харнесс |
@@ -510,7 +512,7 @@
510
512
  | `sidebarImage` | Изображение | 11 | харнесс |
511
513
  | `sidebarOffice` | Документ Office | 15 | харнесс |
512
514
  | `sidebarPdf` | PDF | 15 | харнесс |
513
- | `sidebarRight` | — | 34 | харнесс |
515
+ | `sidebarRight` | — | 35 | харнесс |
514
516
  | `sidebarTerminal` | Терминал | 28 | харнесс |
515
517
  | `skill` | — | 8 | харнесс |
516
518
  | `skill-center` | Центр навыков | 73 | @restregular/dsh-skill-center@0.3.11 |
@@ -580,6 +582,7 @@
580
582
  | `web-fetch-playwright` | — | 29 | dsh-web-fetch-playwright@0.2.12 |
581
583
  | `web-search-aggregation` | — | 38 | dsh-web-search-aggregation@0.1.11 |
582
584
  | `web-search-anysearch` | Служба поиска AnySearch | 23 | @wenqi_bian/dsh-web-search-anysearch@0.2.0-rc.2 |
585
+ | `web-search-free` | — | 125 | dsh-free-search@0.9.15 |
583
586
  | `web-ui-plugins` | Веб-плагины | 14 | @linxin666/dsh-client-ui-web-ui-settings@0.4.8 |
584
587
  | `webSearchEnhanced` | — | 207 | dsh-web-search-enhanced@0.1.10 |
585
588
  | `whale-meter` | — | 59 | dsh-whale-meter@0.1.0 |
@@ -597,4 +600,4 @@
597
600
  | `xrn1997-dsh-novel` | — | 160 | @xrn1997/dsh-novel@0.8.0 |
598
601
  | `zhihu-search` | — | 19 | dsh-zhihu-search@2.2.1 |
599
602
 
600
- Итого: **584** namespace, **67666** строк.
603
+ Итого: **587** namespace, **68227** строк.
@@ -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.17",
4
+ "version": "0.2.20",
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 520 third-party plugins — 584 sections, 67 666 strings.",
6
+ "description": "Russian for the DeepSeek Harness web GUI: the whole interface plus the menus of 520 third-party plugins — 587 sections, 68 227 strings.",
7
7
  "icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
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"],
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"],
9
9
  "screenshots": "images",
10
10
  "install_method": "dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru"
11
11
  }
@@ -13,20 +13,20 @@
13
13
 
14
14
  # @ragnoryok1/dsh-client-locale-ru
15
15
 
16
- [Русский](README.md) | **English** | [中文](README.zh.md)
16
+ [Русский](README.md) | **English** | [中文](README-zh.md)
17
17
 
18
18
  ![Russian language pack for DeepSeek Harness](assets/banner.jpg)
19
19
 
20
20
  [![npm](https://img.shields.io/npm/v/%40ragnoryok1%2Fdsh-client-locale-ru)](https://www.npmjs.com/package/@ragnoryok1/dsh-client-locale-ru)
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
- [![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-584-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
- [![strings](https://img.shields.io/badge/strings-67666-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
23
+ [![dsh](https://img.shields.io/badge/dsh-0.2.1--rc.3%2B-6366f1)](https://github.com/deepseek-ai/deepseek-harness)
24
+ [![namespaces](https://img.shields.io/badge/namespaces-587-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
+ [![strings](https://img.shields.io/badge/strings-68227-6466f1)](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 584 sections and 67,666 strings, 520 of them dictionaries of third-party plugins — more than any other Russian pack for the harness I could find.
29
+ The pack currently holds 587 sections and 68,227 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): 584 namespaces, 67,666 strings, with the bundled plugin dictionaries marked.
42
+ The complete inventory is in [NAMESPACES.md](NAMESPACES.md): 587 namespaces, 68,227 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 1975 kB: the banner ships as JPEG, and the icon and source map stay out of the npm payload.
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 1996 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
 
@@ -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.17",
4
+ "version": "0.2.20",
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 520 third-party plugins — 584 sections, 67 666 strings.",
6
+ "description": "Russian for the DeepSeek Harness web GUI: the whole interface plus the menus of 520 third-party plugins — 587 sections, 68 227 strings.",
7
7
  "icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
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"],
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"],
9
9
  "screenshots": "images",
10
10
  "install_method": "dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru"
11
11
  }
@@ -13,20 +13,20 @@
13
13
 
14
14
  # @ragnoryok1/dsh-client-locale-ru
15
15
 
16
- [Русский](README.md) | [English](README.en.md) | **中文**
16
+ [Русский](README.md) | [English](README-en.md) | **中文**
17
17
 
18
18
  ![DeepSeek Harness 俄语语言包](assets/banner.jpg)
19
19
 
20
20
  [![npm](https://img.shields.io/npm/v/%40ragnoryok1%2Fdsh-client-locale-ru)](https://www.npmjs.com/package/@ragnoryok1/dsh-client-locale-ru)
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
- [![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-584-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
- [![strings](https://img.shields.io/badge/strings-67666-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
23
+ [![dsh](https://img.shields.io/badge/dsh-0.2.1--rc.3%2B-6366f1)](https://github.com/deepseek-ai/deepseek-harness)
24
+ [![namespaces](https://img.shields.io/badge/namespaces-587-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
+ [![strings](https://img.shields.io/badge/strings-68227-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
26
26
 
27
27
  插件把 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 的界面变成俄语。你看到的一切都会被翻译:设置、侧边栏、对话框、提示、错误信息——以及没有自带俄语的三方插件菜单。
28
28
 
29
- 目前包里有 584 个分区、67 666 条文案,其中 520 份是第三方插件的词典——比我能找到的任何其他俄语包都多。
29
+ 目前包里有 587 个分区、68 227 条文案,其中 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):584 个 namespace、67,666 条字符串,随包附带的插件词典单独标注。
41
+ 完整清单见 [NAMESPACES.md](NAMESPACES.md):587 个 namespace、68,227 条字符串,随包附带的插件词典单独标注。
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 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为 1975 kB:横幅以 JPEG 提供,图标与源码映射不进入 npm 包。
98
+ 从 GitHub 安装同样可用:`dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru`(插件目录生成的就是这种不带 npm scope 的写法)安装的是仓库归档,而构建好的 `lib/` 已提交进 git——你的机器上不会运行构建,也不需要运行。正因如此,`npm run check:built`(包含在 `verify` 中)会重新构建 `lib/` 并与提交内容比对:git 里过期的构建产物会直接落到用户手里,而审计看不到它——审计读的是源码。发布的包为 1996 kB:横幅以 JPEG 提供,图标与源码映射不进入 npm 包。
99
99
 
100
100
  ## 为什么是混合插件
101
101
 
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.17",
4
+ "version": "0.2.20",
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 520 third-party plugins — 584 sections, 67 666 strings.",
6
+ "description": "Russian for the DeepSeek Harness web GUI: the whole interface plus the menus of 520 third-party plugins — 587 sections, 68 227 strings.",
7
7
  "icon": "https://raw.githubusercontent.com/Ragnoryok1/dsh-client-locale-ru/main/assets/icon.png",
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"],
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"],
9
9
  "screenshots": "images",
10
10
  "install_method": "dsh plugin --profile web add @ragnoryok1/dsh-client-locale-ru"
11
11
  }
@@ -13,20 +13,20 @@
13
13
 
14
14
  # @ragnoryok1/dsh-client-locale-ru
15
15
 
16
- **Русский** | [English](README.en.md) | [中文](README.zh.md)
16
+ **Русский** | [English](README-en.md) | [中文](README-zh.md)
17
17
 
18
18
  ![Русский языковой пакет для DeepSeek Harness](assets/banner.jpg)
19
19
 
20
20
  [![npm](https://img.shields.io/npm/v/%40ragnoryok1%2Fdsh-client-locale-ru)](https://www.npmjs.com/package/@ragnoryok1/dsh-client-locale-ru)
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
- [![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-584-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
- [![strings](https://img.shields.io/badge/strings-67666-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
23
+ [![dsh](https://img.shields.io/badge/dsh-0.2.1--rc.3%2B-6366f1)](https://github.com/deepseek-ai/deepseek-harness)
24
+ [![namespaces](https://img.shields.io/badge/namespaces-587-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
25
+ [![strings](https://img.shields.io/badge/strings-68227-6466f1)](https://github.com/Ragnoryok1/dsh-client-locale-ru)
26
26
 
27
27
  Плагин делает интерфейс [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) русским. Переводится всё, что вы видите: настройки, боковые панели, диалоги, подсказки, сообщения об ошибках — и меню сторонних плагинов, у которых нет своего русского перевода.
28
28
 
29
- Сейчас в пакете 584 раздела и 67 666 строк, из них 520 словарей сторонних плагинов — больше, чем у любого другого русского пакета для харнесса, который я смог найти.
29
+ Сейчас в пакете 587 разделов и 68 227 строк, из них 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): 584 namespace, 67 666 строк, словари плагинов помечены отдельно.
42
+ Полный список переведённого — в [NAMESPACES.md](NAMESPACES.md): 587 namespace, 68 227 строк, словари плагинов помечены отдельно.
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 иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает 1975 КБ: баннер отдаётся JPEG, а иконка и карта исходников в npm не входят.
109
+ Установка из GitHub тоже работает: `dsh plugin --profile web add Ragnoryok1/dsh-client-locale-ru` (в таком виде команду генерирует каталог плагинов, без `@`-скоупа) ставит архив репозитория, а собранный `lib/` лежит в git — сборка на вашей машине не запускается и не требуется. Поэтому `npm run check:built` (входит в `verify`) пересобирает `lib/` и сверяет его с коммитом: устаревший бандл в git иначе получил бы именно пользователь, а аудит этого не увидел бы — он читает исходники. Публикуемый пакет занимает 1996 КБ: баннер отдаётся JPEG, а иконка и карта исходников в npm не входят.
110
110
 
111
111
  ## Почему гибрид
112
112
 
package/lib/client.js CHANGED
@@ -55,6 +55,13 @@ window.__ModuleLoader__.load({
55
55
  "codeBlock.unwrap": "Не переносить строки",
56
56
  "workspace.defaultName": "Рабочая папка по умолчанию"
57
57
  },
58
+ "entryCustomization": {
59
+ "install": "Посмотреть другие плагины",
60
+ "create": "Создать свой плагин",
61
+ "createPrompt.sidebar": "Создать плагин DSH с пунктом в левой панели.",
62
+ "createPrompt.conversation": "Создать плагин DSH с собственным видом беседы.",
63
+ "createPrompt.rightbar": "Создать плагин DSH с пунктом в правой панели."
64
+ },
58
65
  "settings.locale": { "language.title": "Язык" },
59
66
  "settings.agentPreset": {
60
67
  "standardUnavailable": "Стандартный режим недоступен. Восстановите его или выберите другой доступный режим.",
@@ -521,7 +528,9 @@ window.__ModuleLoader__.load({
521
528
  "detail.weekday.7": "Вс",
522
529
  "detail.weekday.join": ", ",
523
530
  "row.imageSize": "{width}×{height} px, {bytes} Б",
524
- "row.imageSizeDownscaled": "{width}×{height} px (уменьшено с {originalWidth}×{originalHeight} px), {bytes} Б"
531
+ "row.imageSizeDownscaled": "{width}×{height} px (уменьшено с {originalWidth}×{originalHeight} px), {bytes} Б",
532
+ "session.moreViews": "Другие виды беседы",
533
+ "session.moreViewsCurrent": "Другие виды беседы · {name}"
525
534
  },
526
535
  "deliverables": {
527
536
  "presented.all": "Все файлы: {count}",
@@ -729,7 +738,8 @@ window.__ModuleLoader__.load({
729
738
  "confirm.description": "«Полный доступ» позволяет новым сессиям уменьшать число шагов подтверждения и выполнять больше действий напрямую, включая чувствительные операции, изменение файлов или внешние команды. Используйте его, только если доверяете последующим задачам.",
730
739
  "confirm.acknowledge": "Я понимаю риски и хочу продолжить",
731
740
  "confirm.cancel": "Отмена",
732
- "confirm.enable": "Включить «Полный доступ»"
741
+ "confirm.enable": "Включить «Полный доступ»",
742
+ "close": "Закрыть"
733
743
  },
734
744
  "permission.access": {
735
745
  "description": "Выберите режим прав по умолчанию для новых сессий",
@@ -751,7 +761,8 @@ window.__ModuleLoader__.load({
751
761
  "auto.confirm.title": "Включить автопроверку (экспериментально)?",
752
762
  "auto.confirm.description": "Автопроверка работает без песочницы. Перед каждым вызовом нативного инструмента и внутренним вызовом PTC та же модель, что и у текущего агента, решает, разрешить ли его; вы подтверждаете или отклоняете каждый вызов, который она запретила. Возможность экспериментальная: она может ошибочно разрешить или запретить действие и расходует дополнительные токены.",
753
763
  "auto.confirm.acknowledge": "Я понимаю эти риски и хочу продолжить",
754
- "auto.confirm.enable": "Включить автопроверку"
764
+ "auto.confirm.enable": "Включить автопроверку",
765
+ "loading": "Загрузка"
755
766
  },
756
767
  "plan": {
757
768
  "chip.label": "План",
@@ -1019,7 +1030,8 @@ window.__ModuleLoader__.load({
1019
1030
  "session.new.label": "Новая сессия",
1020
1031
  "toggle.open": "Открыть боковую панель",
1021
1032
  "toggle.collapse": "Свернуть боковую панель",
1022
- "panels.label": "Глобальные панели"
1033
+ "panels.label": "Глобальные панели",
1034
+ "panels.more": "Ещё"
1023
1035
  },
1024
1036
  "skill": {
1025
1037
  "row.title": "Навык",
@@ -1924,7 +1936,8 @@ window.__ModuleLoader__.load({
1924
1936
  "command.float": "Действие недоступно в плавающей панели",
1925
1937
  "command.empty": "Сначала откройте страницу",
1926
1938
  "command.budget": "Максимум две области",
1927
- "command.width": "Недостаточно ширины для разделения — расширьте боковую панель"
1939
+ "command.width": "Недостаточно ширины для разделения — расширьте боковую панель",
1940
+ "tab.guide.more": "Другие инструменты"
1928
1941
  },
1929
1942
  "documentHtml": {
1930
1943
  "title": "HTML",
@@ -2292,7 +2305,8 @@ window.__ModuleLoader__.load({
2292
2305
  "title": "Инспектор Node.js",
2293
2306
  "toggle": "Показать или скрыть инспектор Node.js",
2294
2307
  "resize": "Изменить высоту панели NodeJS Inspector",
2295
- "frameTitle": "Инспектор Node.js"
2308
+ "frameTitle": "Инспектор Node.js",
2309
+ "close": "Свернуть"
2296
2310
  },
2297
2311
  "session-inspector": {
2298
2312
  "tab.title": "Журнал сессии",
@@ -10621,7 +10635,7 @@ window.__ModuleLoader__.load({
10621
10635
  "testingAllProgress": "Проверка {n}/{total}…",
10622
10636
  "testingMatrix": "Проверка ключей…",
10623
10637
  "testKey": "Проверить",
10624
- "testOk": "ОК",
10638
+ "testOk": "OK",
10625
10639
  "title": "Ротация ключей",
10626
10640
  "tokenLimitHint": "Сколько токенов эти учётные данные могут потратить на эту модель за окно квоты. Пусто — без ограничений.",
10627
10641
  "tokenLimitLabel": "Предел токенов",
@@ -15902,7 +15916,7 @@ window.__ModuleLoader__.load({
15902
15916
  "workspaceTabPersonas": "Эксперты",
15903
15917
  "workspaceTabSkills": "Навыки"
15904
15918
  },
15905
- "dsh-graph.hidden-versions.": {
15919
+ "dsh-graph": {
15906
15920
  "activity.allTypes": "Все типы",
15907
15921
  "activity.colActor": "Исполнитель",
15908
15922
  "activity.colEvent": "Событие",
@@ -47450,7 +47464,7 @@ window.__ModuleLoader__.load({
47450
47464
  "status.scanRejected": "Отклонено проверкой безопасности",
47451
47465
  "status.verifyFailed": "Проверка не пройдена"
47452
47466
  },
47453
- "h3.internal.event.": {
47467
+ "dsh-mcp-studio": {
47454
47468
  "addServer": "Добавить сервер",
47455
47469
  "args": "Аргументы (по одному в строке)",
47456
47470
  "cancel": "Отмена",
@@ -47560,7 +47574,8 @@ window.__ModuleLoader__.load({
47560
47574
  "userInvocable": "Вызывается пользователем (/)",
47561
47575
  "view": "Просмотр",
47562
47576
  "viewSkill": "Просмотр навыка",
47563
- "workspaceUnavailable": "Рабочая область недоступна. Откройте или подключите рабочую область перед созданием навыка."
47577
+ "workspaceUnavailable": "Рабочая область недоступна. Откройте или подключите рабочую область перед созданием навыка.",
47578
+ "url": "URL"
47564
47579
  },
47565
47580
  "hypatia-auto-memory": {
47566
47581
  "advancedHint": "Дополнительные поля (исполняемые файлы, лимиты сборщика, настройка очереди) правятся в разделе «Настройки → Плагины» под этим плагином или в конфигурации записи {ns} в патче профиля.",
@@ -68819,6 +68834,558 @@ window.__ModuleLoader__.load({
68819
68834
  "worktreeBranchPrefix": "Префикс веток рабочего дерева",
68820
68835
  "worktreeBranchPrefixEffect": "Изменения префикса действуют на ветки рабочего дерева, создаваемые после этого. Явно заданные полные имена веток не меняются.",
68821
68836
  "yes": "Да"
68837
+ },
68838
+ "settings.workbuddy": {
68839
+ "cliLive.aria": "Идёт раунд CodeBuddy: {detail}",
68840
+ "cliLive.chars": "Символов: {count}",
68841
+ "cliLive.elapsed": "{seconds} с",
68842
+ "cliLive.finishing": "завершается…",
68843
+ "cliLive.lastTool": "последний: {tool}",
68844
+ "cliLive.running": "CodeBuddy",
68845
+ "cliLive.starting": "запускается…",
68846
+ "cliLive.toolCalls": "Инструментов: {count}",
68847
+ "composer.account": "Учётная запись",
68848
+ "composer.credits": "Кредиты",
68849
+ "composer.current": "Используется",
68850
+ "composer.lastRefresh": "Последнее обновление",
68851
+ "composer.newModels": "новые модели",
68852
+ "composer.newModelsNote": "«Новые» значит, что эта машина впервые записала идентификатор модели: когда модель появилась у сервиса, отсюда не видно. Показываются только модели, впервые замеченные за последние 7 дней.",
68853
+ "composer.newModelsRow": "Модели, впервые замеченные этой машиной",
68854
+ "composer.newModelsSep": ", ",
68855
+ "composer.newModelsTitle": "Модели, впервые замеченные этой машиной: ",
68856
+ "composer.noAccounts": "В этом регионе нет учётной записи",
68857
+ "composer.panelTitle": "Кредиты WorkBuddy",
68858
+ "composer.panelTitleCn": "Кредиты WB CN",
68859
+ "composer.panelTitleGlobal": "Кредиты WB AI",
68860
+ "composer.pointsCn": "WB CN",
68861
+ "composer.pointsGlobal": "WB AI",
68862
+ "composer.refreshFailed": "Не удалось обновить кредиты",
68863
+ "composer.signedOut": "Вход не выполнен",
68864
+ "composer.switchTo": "Переключиться на {account}",
68865
+ "composer.testAll": "Проверить все",
68866
+ "composer.testAllHint": "Проверить все учётные записи этого региона по очереди",
68867
+ "composer.testFailed": "Не удалось проверить учётные записи",
68868
+ "composer.testing": "Проверка…",
68869
+ "quotaNotice.fallbackHead": "Квота на этот запрос исчерпана",
68870
+ "quotaNotice.supplement": " (у части моделей есть ещё суточный лимит, не связанный с вашими кредитами)",
68871
+ "row.accountsHint": "Список берётся из локально найденных входов. Токены никогда не показываются и не сохраняются в настройках DSH.",
68872
+ "row.accountsLoading": "Загрузка учётных записей…",
68873
+ "row.accountsRescan": "Найти учётные записи заново",
68874
+ "row.accountsScanning": "Поиск…",
68875
+ "row.accountsWriteFailed": "Изменение учётной записи не сохранилось: {message} — не удалось обновить файл настроек активного профиля (в Windows его может держать антивирус или клиент синхронизации). Прежний выбор продолжает действовать: закройте то, что держит файл, и повторите (точный путь — в docs/WINDOWS.md репозитория плагина).",
68876
+ "row.accountUnnamed": "Учётная запись без имени",
68877
+ "row.cardCrashed": "Область настроек не отрисовалась.",
68878
+ "row.cardCrashedHint": "Сам провайдер моделей не затронут — чат и кредиты работают. Процитируйте строку выше в отчёте об ошибке.",
68879
+ "row.cheer": "Поставить звезду на GitHub",
68880
+ "row.cliBridgeEffortAria": "Уровень рассуждения, на котором работает локальный CLI CodeBuddy",
68881
+ "row.cliBridgeEffortDefault": "Как в CLI",
68882
+ "row.cliBridgeEffortHint": "Записывается в cliBridge.effort и передаётся CLI как --effort. «Как в CLI» оставляет уровень самому CLI. Если у выбранной модели перечислены поддерживаемые уровни, предлагаются только они.",
68883
+ "row.cliBridgeEffortLabel": "Уровень CLI",
68884
+ "row.cliBridgeHint": "Добавляет инструмент codebuddy_ask и команду /codebuddy. Каждый вызов тратит квоту CodeBuddy. injectResult влияет только на /codebuddy: его результат возвращается в беседу и, когда беседа простаивает, стоит одного раунда DSH; вызовы инструментов его не читают. Есть ограничение частоты: 6 раундов на беседу и 20 на процесс в час, по одному раунду за раз. По умолчанию выключено.",
68885
+ "row.cliBridgeLabel": "Поручить работу локальному CLI CodeBuddy",
68886
+ "row.cliBridgeModelAria": "Модель, на которой работает локальный CLI CodeBuddy",
68887
+ "row.cliBridgeModelDefault": "Как в CLI",
68888
+ "row.cliBridgeModelHint": "Записывается в cliBridge.model и передаётся CLI как --model. «Как в CLI» оставляет выбор модели самому CLI. Список — это каталог, который вкладка синхронизировала с сервисом.",
68889
+ "row.cliBridgeModelLabel": "Модель CLI",
68890
+ "row.cliBridgePickersHint": "Все три списка пишут общий блок cliBridge; «Как в CLI» у модели и уровня — это явное пустое значение, а не «не задано»: дальше CLI берёт свои умолчания. Список регионов пишет cliBridge.regionOrder.",
68891
+ "row.cliBridgeRegionOrderAria": "Порядок, в котором локальный CLI CodeBuddy перебирает регионы учётных данных",
68892
+ "row.cliBridgeRegionOrderCnFirst": "Сначала CN",
68893
+ "row.cliBridgeRegionOrderCnOnly": "Только CN",
68894
+ "row.cliBridgeRegionOrderGlobalFirst": "Сначала глобальный",
68895
+ "row.cliBridgeRegionOrderGlobalOnly": "Только глобальный",
68896
+ "row.cliBridgeRegionOrderHint": "Записывается в cliBridge.regionOrder: в каком порядке CLI пробует учётные данные WorkBuddy, пока один из входов не сработает. Фактически использованный регион сообщается в каждом раунде как credential_region. Действует со следующего вызова.",
68897
+ "row.cliBridgeRegionOrderLabel": "Порядок регионов",
68898
+ "row.collapse": "Свернуть",
68899
+ "row.contextBudget": "Бюджет контекста DSH",
68900
+ "row.credentialRejectedChoose": "Другие локальные входы есть, но сейчас ни один из них не ответил сервису. Попробуйте переключиться на любой из списка выше; если не поможет — войдите заново в приложении WorkBuddy.",
68901
+ "row.credentialRejectedIntro": "Токен «{accountName}» больше не принимается сервисом, поэтому кредиты и ежедневная отметка недоступны. Повторный вход поможет, только если дело в самом токене — а на деле верно вот что:",
68902
+ "row.credentialRejectedRelogin": "Другого локального входа нет, переключиться не на что. Войдите заново в приложении WorkBuddy.",
68903
+ "row.credentialRejectedSwitch": "Другой вход на этой машине сервис принял: «{accountName}». Переключение решит проблему — входить заново не нужно.",
68904
+ "row.credentialRejectedSwitchAction": "Переключиться на «{accountName}»",
68905
+ "row.credentialRejectedTitle": "WorkBuddy отклонил токен этой учётной записи",
68906
+ "row.creditPositionAria": "Расположение счётчика кредитов для региона {region}",
68907
+ "row.creditPositionComposer": "панель поля ввода",
68908
+ "row.creditPositionDisabledHint": "Недоступно, пока выключен переключатель выше: сначала отметьте «Показывать кредиты на панели поля ввода».",
68909
+ "row.creditPositionHint": "Где стоит счётчик кредитов. «Панель поля ввода» — по умолчанию, это строка с выбором модели. Выберите «под полем ввода» — строку со счётчиками раундов, шагов и токенов, — если панель поля ввода занял другой плагин и счётчик не появляется.",
68910
+ "row.creditPositionHintInline": "Где стоит счётчик. «Панель поля ввода» — по умолчанию, это строка с выбором модели.",
68911
+ "row.creditPositionLabel": "Расположение",
68912
+ "row.creditPositionStats": "под полем ввода",
68913
+ "row.creditsError": "Запрос кредитов недоступен: {message}",
68914
+ "row.desc": "Модели WorkBuddy в DSH: при каждом обновлении из каталога сервиса читается множитель кредитов для каждой модели, ввод изображений включается отдельно для каждой модели, несколько учётных записей можно переключать или передавать между ними автоматически, а ежедневная отметка и остаток кредитов — в один щелчок. Отечественная и международная стороны — два независимых провайдера, у каждого своя учётная запись: можно пользоваться обеими сразу.",
68915
+ "row.diagAccount": "Обслуживающая учётная запись",
68916
+ "row.diagCatalog": "Моделей в каталоге",
68917
+ "row.diagDomain": "Домен сервиса",
68918
+ "row.diagEnabled": "Включённых моделей",
68919
+ "row.diagFailures": "Последняя ошибка",
68920
+ "row.diagHint": "Что эта карточка действительно прочитала — чтобы можно было сослаться в отчёте. Ничего здесь настройки не меняет.",
68921
+ "row.diagNoFailures": "Ничего не сообщалось.",
68922
+ "row.diagPool": "Пул учётных записей",
68923
+ "row.diagPoolOff": "выключен",
68924
+ "row.diagPoolOn": "включён · учётных записей: {count}",
68925
+ "row.diagPromoUnreadable": "Часов акции не прочитать: {count} — значок скрыт",
68926
+ "row.diagRegion": "Регион",
68927
+ "row.diagToken": "Вход истекает",
68928
+ "row.discard": "Отменить изменения",
68929
+ "row.expand": "Развернуть",
68930
+ "row.extraPrefixesCount": "Действующих добавленных префиксов:",
68931
+ "row.imageToolHint": "Добавляет инструмент workbuddy_draw_image, который МОДЕЛЬ может вызвать сама: около 5,71 кредита за изображение на китайском шлюзе и около 0,03 на международном, без подтверждения на каждый вызов. Отметка здесь разрешает инструмент только для региона этой вкладки. Если он выключен везде, инструмент не регистрируется вовсе.",
68932
+ "row.imageToolLabel": "Разрешить модели рисовать изображения",
68933
+ "row.keepPromptLastHint": "Переносит внедряемый харнессом контекст выполнения выше вашей настоящей подсказки, чтобы страница использования не показывала «Время замера…» вместо вашего вопроса. Число сообщений и текст сохраняются. По умолчанию выключено, потому что это меняет порядок сообщений, который считает сервис.",
68934
+ "row.keepPromptLastLabel": "Записывать то, что набрали вы, а не внедрённый контекст",
68935
+ "row.mediaModelsEmpty": "В этом регионе нет ни одной модели изображений или видео.",
68936
+ "row.mediaModelsError": "Не удалось прочитать список медиамоделей: {message}",
68937
+ "row.mediaModelsHint": "Читается из настройки продуктов этой учётной записи. Инструмент рисования берёт модель отсюда: подсказка без изображения использует модель «текст в изображение», с изображением — «изображение в изображение». Только чтение: чтобы взять другую модель, передайте её инструменту.",
68938
+ "row.mediaModelsLabel": "Модели изображений в этом регионе",
68939
+ "row.mediaModelsRefresh": "Перечитать",
68940
+ "row.mediaModelsRefreshing": "Чтение…",
68941
+ "row.mediaTagImageToImage": "изображение → изображение",
68942
+ "row.mediaTagImageToVideo": "изображение → видео",
68943
+ "row.mediaTagTextToImage": "текст → изображение",
68944
+ "row.mediaTagTextToVideo": "текст → видео",
68945
+ "row.modelCapabilityPending": "Показываются только возможности, заявленные WorkBuddy.",
68946
+ "row.modelContext": "Максимальный контекст {context}",
68947
+ "row.modelImage": "Изображения",
68948
+ "row.modelImageText": "Ввод изображений: провайдер описывает модель как текстовую, поэтому после обновления отметка снимается. Ставьте её сами, только если уверены, что модель читает изображения.",
68949
+ "row.modelImageUnverified": "Ввод изображений не подтверждён: ни один источник провайдера не говорит, что модель читает изображения, поэтому после обновления отметка снимается, а не угадывается. Ставьте её, если проверили сами.",
68950
+ "row.modelMultimodal": "Мультимодальная",
68951
+ "row.modelOff": "Можно отключить",
68952
+ "row.modelOffHint": "Предлагать этой модели уровень «выключено»",
68953
+ "row.modelOffRefused": "отклоняет выключение",
68954
+ "row.modelOffRefusedHint": "Проверено, что оба шлюза отклоняют уровень «выключено» с HTTP 400 (код 11133). С этой отметкой падал бы каждый запрос без уровня рассуждения — прежде всего сводки при сжатии, — поэтому включить это нельзя.",
68955
+ "row.modelOutput": "Ответ {output}",
68956
+ "row.modelRate": "Кредитов: {rate}x",
68957
+ "row.modelReasoning": "Рассуждение: {efforts}",
68958
+ "row.modelsDirty": "есть несохранённые изменения",
68959
+ "row.modelsRefresh": "Обновить из WorkBuddy",
68960
+ "row.modelsRefreshing": "Обновление моделей…",
68961
+ "row.modelsSummary": "включено: {count}",
68962
+ "row.modelsTestAll": "Проверить все модели",
68963
+ "row.modelsTestAllHint": "Проверяет ВСЕ модели каталога этого региона, включая те, что вы НЕ включали, поэтому стоит заметно дороже проверки включённых. Цена одной пробы та же, остановка при отклонённых учётных данных такая же.",
68964
+ "row.modelsTestAuth": "Остановлено: сервис отклонил учётные данные, остальные модели ответили бы так же. Войдите заново и повторите.",
68965
+ "row.modelsTestDone": "Готово: доступно {available} из {total}",
68966
+ "row.modelsTestEnabled": "Проверить включённые модели",
68967
+ "row.modelsTestEnabledHint": "Проверяет каждую включённую модель одним запросом: проба отправляет запрос настоящего объёма, поэтому тратит настоящие кредиты (около 0,01 на модель при размере 25 000 токенов по умолчанию). Строки показывают вердикт по мере готовности. Останавливается, если сервис отклонил учётные данные.",
68968
+ "row.modelsTesting": "Проверка {done}/{total}…",
68969
+ "row.modelsTitle": "Модели",
68970
+ "row.modelUnknown": "Неизвестно",
68971
+ "row.oauthCancel": "Отмена",
68972
+ "row.oauthCancelled": "Вход отменён.",
68973
+ "row.oauthCopied": "Ссылка скопирована",
68974
+ "row.oauthCopy": "Скопировать ссылку",
68975
+ "row.oauthDialogClose": "Закрыть",
68976
+ "row.oauthDone": "Добавлена учётная запись «{accountName}». Выберите её выше, чтобы использовать.",
68977
+ "row.oauthError": "Вход не удался: {message}",
68978
+ "row.oauthExpires": "Окно входа закроется примерно через {minutes} мин.",
68979
+ "row.oauthOpened": "Открыто. Ждём завершения…",
68980
+ "row.oauthOpenHint": "Откройте страницу входа и подтвердите — учётная запись добавится сюда автоматически, когда вы закончите:",
68981
+ "row.oauthReopen": "Открыть страницу снова",
68982
+ "row.oauthStart": "Войти по QR-коду",
68983
+ "row.oauthStartGlobal": "Войти через веб",
68984
+ "row.oauthStarting": "Открывается…",
68985
+ "row.oauthSyncing": "Добавляем учётную запись…",
68986
+ "row.oauthTimedOut": "Вход не уложился во время — начните заново, когда будете готовы.",
68987
+ "row.oauthTitle": "Добавить учётную запись входом по QR-коду",
68988
+ "row.oauthTitleGlobal": "Добавить учётную запись входом через веб",
68989
+ "row.oauthWaiting": "Ждём завершения входа… ({seconds} с)",
68990
+ "row.panelAccounts": "Учётные записи",
68991
+ "row.panelAria": "Разделы карточки",
68992
+ "row.panelCapabilities": "Возможности",
68993
+ "row.panelCapabilitiesHint": "Что плагин может делать от вашего имени. Каждый переключатель срабатывает по щелчку — кнопки «Сохранить» в этом разделе нет.",
68994
+ "row.panelDiag": "Диагностика",
68995
+ "row.panelModels": "Модели",
68996
+ "row.poolBenefitClaim": "Получить",
68997
+ "row.poolBenefitClaimable": "{title}: кредитов {count}",
68998
+ "row.poolBenefitClaimAria": "Получить «{title}» (кредитов: {count}) для этой учётной записи",
68999
+ "row.poolBenefitClaiming": "Получение…",
69000
+ "row.poolBenefitDueToday": "{title} — кредитов: {count} · последний день",
69001
+ "row.poolBenefitHint": "Получите на странице тарифов: {url}",
69002
+ "row.poolBenefitUrgent": "{title} — кредитов: {count} · осталось дней: {days}",
69003
+ "row.poolBusyHint": "По одному аккаунту за раз…",
69004
+ "row.poolCheckedIn": "Отмечено",
69005
+ "row.poolCheckinAll": "Отметить выбранные",
69006
+ "row.poolCheckinEnterprise": "Нет (корпоративный)",
69007
+ "row.poolCheckingIn": "Отметка…",
69008
+ "row.poolCheckinUnknown": "—",
69009
+ "row.poolColumnAccount": "Аккаунт",
69010
+ "row.poolColumnCheckin": "Отметка",
69011
+ "row.poolColumnCredits": "Кредиты",
69012
+ "row.poolColumnProbe": "Статус",
69013
+ "row.poolCreditNearest": "Ближайший пакет истекает {at}",
69014
+ "row.poolCreditSoon": "Истекают в течение 3 дней: {count}",
69015
+ "row.poolCurrentBadge": "Используется",
69016
+ "row.poolCurrentHeader": "Используется: {account}",
69017
+ "row.poolDirty": "● Несохранённые изменения",
69018
+ "row.poolDiscard": "Отменить изменения",
69019
+ "row.poolEnabled": "Включить пул аккаунтов",
69020
+ "row.poolEnabledHint": "Вкл.: пул выбирает аккаунт для каждого запроса, и только сбой, достойный переключения, передаёт запрос следующему аккаунту — некорректный запрос, занятая модель, очередь на платформе или отказ шлюза этого не делают (смена аккаунта лишь сожжёт квоту на тот же отказ). Выкл.: выбранный вами аккаунт обслуживает каждый запрос, а сбой сообщается как есть.",
69021
+ "row.poolErrFailed": "Пакет не выполнен на стороне хоста: {message}",
69022
+ "row.poolErrHttp": "Пакет отклонён (HTTP {status}). Проверьте, что плагин обновлён, и повторите попытку.",
69023
+ "row.poolErrNoCheckin": "В этом регионе нет ежедневной отметки — действие здесь не предлагается.",
69024
+ "row.poolErrNoFreeModel": "В этом регионе нет модели с нулевым множителем для проверки. Обновите каталог моделей или выберите целевую модель сами.",
69025
+ "row.poolErrNoLiveMembers": "У всех аккаунтов, отмеченных в этом пуле, пропал локальный вход, поэтому пакету нечего было выполнять. Войдите снова в настольном приложении WorkBuddy или сохраните, чтобы убрать их.",
69026
+ "row.poolErrNoMembers": "В этом пуле не отмечен ни один аккаунт — пакету нечего было выполнять. Отметьте хотя бы один аккаунт и сохраните.",
69027
+ "row.poolErrRouteMissing": "Точка пакетной обработки не ответила (HTTP {status}, пустой ответ) — вероятно, хост DSH всё ещё работает со старым кодом плагина, поэтому этот маршрут не зарегистрирован. Полностью закройте DSH и запустите его снова, затем повторите.",
69028
+ "row.poolErrStaleModel": "Этот регион больше не предлагает целевую модель. Выберите другую или вернитесь к автоматическому выбору.",
69029
+ "row.poolErrUnavailable": "В этой сборке пул аккаунтов недоступен (или отсутствует его пакетный маршрут). Перезапустите приложение; если это повторяется, плагин нужно переустановить.",
69030
+ "row.poolExcludedAccountRestricted": "Аккаунт ограничен на стороне сервиса",
69031
+ "row.poolExcludedModelBusy": "Модель занята",
69032
+ "row.poolExcludedOutOfCredit": "Кредиты закончились",
69033
+ "row.poolExcludedRateLimited": "Ограничение частоты",
69034
+ "row.poolExcludedRejected": "Отклонён",
69035
+ "row.poolExcludedUnusable": "Непригоден",
69036
+ "row.poolGhostMembers": "Участников пула без входа на этом компьютере: {count} — они не учитываются и не используются: {names}. Уберите ниже те, которые больше не нужны.",
69037
+ "row.poolGhostRemove": "Убрать {account} из этого пула",
69038
+ "row.poolGhostRemoveNamed": "Убрать {account} из этого пула. На этом компьютере аккаунт больше не авторизован.",
69039
+ "row.poolGhostRemoveUnnamed": "Убрать {account} из этого пула. Имя этого аккаунта никогда не записывалось, поэтому вы видите начало его идентификатора.",
69040
+ "row.poolLogBatchFailed": "Пакет не выполнен — ничего не запускалось: {message}",
69041
+ "row.poolLogBenefitClaimed": "{accountName} получил {title} — кредитов: {count}",
69042
+ "row.poolLogBenefitFailed": "{accountName}: получение не удалось — {message}",
69043
+ "row.poolLogCheckinAlready": "{accountName}: сегодня уже отмечено — пропущено",
69044
+ "row.poolLogCheckinClaimed": "{accountName}: отмечено (+{credit})",
69045
+ "row.poolLogCheckinDone": "Отметка завершена",
69046
+ "row.poolLogCheckinFailed": "{accountName}: отметка не удалась — {message}",
69047
+ "row.poolLogCheckinSkipped": "{accountName}: корпоративный аккаунт, ежедневной отметки нет",
69048
+ "row.poolLogCheckinStart": "Отметка аккаунтов по одному, всего: {count}",
69049
+ "row.poolLogClear": "Очистить",
69050
+ "row.poolLogEmpty": "Пока пусто. Здесь записываются отметки, проверки и переключения аккаунтов.",
69051
+ "row.poolLogTestDone": "Проверка завершена; пул переупорядочен",
69052
+ "row.poolLogTestRow": "{accountName}: {outcome}",
69053
+ "row.poolLogTestRowMalformed": "{accountName}: хост не вернул результат для этого аккаунта",
69054
+ "row.poolLogTestStart": "Проверка аккаунтов на {model}, всего: {count}",
69055
+ "row.poolLogTitle": "Активность",
69056
+ "row.poolManualAccountLabel": "Аккаунт в работе",
69057
+ "row.poolManualAccountNone": "Аккаунт не действует",
69058
+ "row.poolManualUnlock": "Выключить ротацию",
69059
+ "row.poolMembersHint": "В ротации, отметке и проверке участвуют только отмеченные аккаунты.",
69060
+ "row.poolMembersTitle": "Аккаунты в этом пуле",
69061
+ "row.poolModeAuto": "выбирается автоматически",
69062
+ "row.poolModelWideBusy": "Все участники заблокированы на одной и той же модели — дело в модели, а не в ваших аккаунтах.",
69063
+ "row.poolModelWideBusyHint": "Смена аккаунта не поможет: лимит привязан к модели, и другой аккаунт упрётся в ту же стену. Подождите около минуты или переключитесь на менее занятую модель в этой сессии.",
69064
+ "row.poolModeManual": "выбираете вы",
69065
+ "row.poolMoveDownAria": "Переместить {accountName} ниже в порядке этого пула",
69066
+ "row.poolMoveDownTitle": "Переместить аккаунт ниже в порядке этого пула",
69067
+ "row.poolMoveUpAria": "Переместить {accountName} выше в порядке этого пула",
69068
+ "row.poolMoveUpTitle": "Переместить аккаунт выше в порядке этого пула",
69069
+ "row.poolNeverTested": "Не проверялся",
69070
+ "row.poolNoCandidate": "Сейчас ни один аккаунт в этом пуле нельзя использовать.",
69071
+ "row.poolNoCandidateHint": "Участники ограничены по частоте, без кредитов, отклонены или недоступны. Ограничения частоты, исчерпанные квоты и временные сбои возвращаются в пул сами — в срок, указанный сервисом, или через 30 минут по умолчанию. Только отклонённые учётные данные требуют нового входа.",
69072
+ "row.poolNoneSelected": "В этом пуле не отмечен ни один аккаунт.",
69073
+ "row.poolNoneSelectedHint": "Отметьте хотя бы один аккаунт, чтобы включить отметку и проверку.",
69074
+ "row.poolNotCheckedIn": "Не отмечено",
69075
+ "row.poolNotMember": "Не в пуле",
69076
+ "row.poolNotMemberHint": "Не в пуле: ротация его пропускает, а пакетная отметка и проверка его не трогают.",
69077
+ "row.poolOrderBadgeNote": "Значок показывает позицию, которую вы сохранили, а не текущий рейтинг. Аккаунт может значиться как «№ 2», хотя он отстранён из-за ограничения частоты — число отражает ваше сохранённое предпочтение, а пул пропускает аккаунты, которые сейчас не может оплатить.",
69078
+ "row.poolOrderRuleExpiring": "2. Есть ли кредиты, истекающие в течение 3 дней? Если да, аккаунт идёт первым. Это важнее и вашего ручного порядка — см. примечание ниже.",
69079
+ "row.poolOrderRuleExpiringAmount": "5. Сколько их истекает? Среди этих аккаунтов первым идёт тот, у кого больше на кону. Если истекающих кредитов нет, это равносильно сравнению итогов.",
69080
+ "row.poolOrderRuleFreshness": "7. Свежесть входа. При равенстве побеждают более свежие учётные данные.",
69081
+ "row.poolOrderRuleId": "8. Идентификатор аккаунта. Окончательное разрешение равенства, чтобы один и тот же пул всегда давал одинаковый порядок.",
69082
+ "row.poolOrderRuleManual": "3. Ручной порядок. Позиция, которую вы задали стрелками ↑ / ↓. Аккаунты без заданного порядка ставятся после всех упорядоченных.",
69083
+ "row.poolOrderRuleNearestExpiry": "4. Чей срок истечения ближе? Среди аккаунтов, у которых есть истекающие кредиты, первым идёт тот, кто теряет их раньше.",
69084
+ "row.poolOrderRulesIntro": "Пул всегда выбирает первый аккаунт, который действительно можно оплатить прямо сейчас. Правила ниже проверяются по порядку — решает первое, которое различает два аккаунта; остальные лишь разрешают равенство.",
69085
+ "row.poolOrderRulesTitle": "Как этот пул выбирает аккаунт",
69086
+ "row.poolOrderRulesToggle": "Показать все правила порядка",
69087
+ "row.poolOrderRuleTotal": "6. Всего кредитов. Первым идёт аккаунт, у которого их больше, чтобы почти исчерпанный оставался в запасе.",
69088
+ "row.poolOrderRuleUsable": "1. Можно ли оплатить его прямо сейчас? Аккаунты с ограничением частоты, без кредитов, с отклонёнными учётными данными или со сбоями уходят в конец до конца паузы. Это важнее всего, включая ваш собственный порядок ниже.",
69089
+ "row.poolOrderWhy": "Почему истекающие кредиты важнее ручного порядка: истекающие кредиты — это деньги, которые вот-вот пропадут, а ручной порядок может быть устаревшим или случайным. Если бы побеждал ручной порядок, одно неверное перетаскивание могло бы дать кредитам сгореть без пользы. Поэтому аккаунт с кредитами, истекающими в течение 3 дней, всегда идёт впереди аккаунта без них, даже если вы перетащили его в самый низ.",
69090
+ "row.poolProbeDaysAgo": "{count} д назад",
69091
+ "row.poolProbeHoursAgo": "{count} ч назад",
69092
+ "row.poolProbeJustNow": "только что",
69093
+ "row.poolProbeMinutesAgo": "{count} мин назад",
69094
+ "row.poolProbeModel": "модель {model}",
69095
+ "row.poolProbeModelUnknown": "модель не записана",
69096
+ "row.poolProbeSizeDefault": "По умолчанию (25 тыс.)",
69097
+ "row.poolProbeSizeHint": "Сколько текста отправляет проверка. Сервис отклоняет запрос, когда тот превышает примерно 20–30 тыс. токенов, поэтому проверка меньше ваших реальных диалогов отвечает «пригоден» для аккаунта, который их отклонил бы. Крупные проверки правдивее, но каждая стоит больше кредитов.",
69098
+ "row.poolProbeSizeLabel": "Размер запроса проверки",
69099
+ "row.poolProbeSizeOption": "{tokens} тыс. токенов",
69100
+ "row.poolProbeSourceLive": "по живому запросу",
69101
+ "row.poolProbeSourceTest": "проверено",
69102
+ "row.poolProbeSourceUnknown": "источник неизвестен",
69103
+ "row.poolRankAuto": "Авто",
69104
+ "row.poolRankAutoTitle": "Ручной порядок ещё не задан: пул сначала тратит истекающие кредиты, затем выбирает аккаунты по остатку. Задайте свой порядок стрелками ↑/↓.",
69105
+ "row.poolRankLabel": "Номер: {rank}",
69106
+ "row.poolRankManualTitle": "Этот аккаунт поставлен вами вручную на позицию {rank} в пуле.",
69107
+ "row.poolRegionNote": "Внутренний и международный пулы полностью независимы: аккаунты, переключения, интервалы и целевые модели никогда не влияют друг на друга.",
69108
+ "row.poolRetryAt": "Вернётся после {at}",
69109
+ "row.poolRetryUnknown": "Сервис не указал, когда это освободится",
69110
+ "row.poolRowRemove": "Убрать",
69111
+ "row.poolRowRemoveAria": "Убрать сохранённые учётные данные {accountName}",
69112
+ "row.poolRowRemoved": "{accountName}: скрыт из списка. «Найти аккаунты снова» вернёт его; настольное приложение остаётся в системе.",
69113
+ "row.poolRowRemoveDesktopOnly": "{accountName}: скрыт из списка — этот аккаунт взят из входа самого настольного приложения, который не затрагивается. «Найти аккаунты снова» вернёт его.",
69114
+ "row.poolRowRemoveHint": "Убрать этот аккаунт из списка. Настольное приложение WorkBuddy при этом не выходит из системы — у него остаётся собственный вход. Удаление лишь скрывает аккаунт здесь; «Найти аккаунты снова» вернёт его.",
69115
+ "row.poolRowRemoving": "Удаление аккаунта…",
69116
+ "row.poolRowTest": "Проверить",
69117
+ "row.poolSaved": "Сохранить",
69118
+ "row.poolSavedStaleRefresh": "Сохранено, но панель не смогла перечитать значение. Оно записано; следующее обновление его покажет.",
69119
+ "row.poolSaveFailed": "Не удалось сохранить: {message}",
69120
+ "row.poolSaving": "Сохранение…",
69121
+ "row.poolSelectAll": "Выбрать все",
69122
+ "row.poolSelectAria": "Включить {accountName} в пул аккаунтов этого региона",
69123
+ "row.poolSelectedCount": "Выбрано: {count} из {total}",
69124
+ "row.poolSelectNone": "Снять выбор",
69125
+ "row.poolServingOutside": "«{account}» сейчас обслуживает запросы, но его нет в этом пуле: ротация его не выберет, а пакетная отметка и проверка его не тронут.",
69126
+ "row.poolSettingsHint": "Это предпочтения: они вступают в силу при сохранении (как и список моделей). Результаты проверок записываются автоматически, и эта кнопка на них не влияет.",
69127
+ "row.poolSettingsTitle": "Дополнительные настройки",
69128
+ "row.poolTargetAuto": "Авто",
69129
+ "row.poolTargetAutoOption": "Авто — выбрать бесплатную модель",
69130
+ "row.poolTargetCurrentFree": "Текущая: {model} (бесплатная модель выбрана автоматически).",
69131
+ "row.poolTargetCurrentPreferred": "Текущая: {model} (ваш выбор).",
69132
+ "row.poolTargetFree": "Бесплатная модель, выбранная автоматически: {model}",
69133
+ "row.poolTargetHint": "Одна модель для всех аккаунтов здесь — проверка измеряет каждую строку ею. «Авто» выбирает модель с нулевым множителем из каталога этого региона, предпочитая самое большое контекстное окно; ручной выбор важнее.",
69134
+ "row.poolTargetLabel": "Модель проверки (весь пул)",
69135
+ "row.poolTargetNone": "В этом регионе пока нет модели с нулевым множителем.",
69136
+ "row.poolTargetNoneHint": "Внутренний каталог раскрывает множители только после обновления моделей. Чтобы не тратить кредиты на платную модель молча, проверка выключена, пока такая модель не появится — обновите модели или выберите целевую модель сами.",
69137
+ "row.poolTargetNoneShort": "нет бесплатной модели",
69138
+ "row.poolTargetPreferred": "Выбранная вами модель: {model}",
69139
+ "row.poolTargetStale": "Сохранённая целевая модель больше не предлагается: {model}",
69140
+ "row.poolTargetStaleClear": "Вернуться к автоматическому выбору",
69141
+ "row.poolTargetStaleHint": "Каталог региона изменился и больше не содержит эту модель, поэтому проверка выключена, а не выполняется на модели, которую сервис может не принять. Выберите другую цель или вернитесь к автоматическому выбору.",
69142
+ "row.poolTargetStaleOption": "{model} (больше не предлагается)",
69143
+ "row.poolTargetStaleShort": "целевая модель недоступна",
69144
+ "row.poolTestAll": "Проверить выбранные",
69145
+ "row.poolTestedAt": "Проверено {at}",
69146
+ "row.poolTesting": "Проверка…",
69147
+ "row.poolTitle": "Пул аккаунтов",
69148
+ "row.poolUnsavedMembers": "Выбор изменён — сохраните, чтобы применить",
69149
+ "row.probe": "Проверить",
69150
+ "row.probeAccountRestricted": "Аккаунт ограничен на стороне сервиса",
69151
+ "row.probeChannelRejected": "✗ Шлюз отклонил сам запрос, а не этот аккаунт — начало системного сообщения совпало с его фильтром сторонних агентов, поэтому другой аккаунт или регион ответят так же",
69152
+ "row.probeChannelRejectedShort": "✗ Шлюз отклонил запрос",
69153
+ "row.probeCredentialRejected": "✗ WorkBuddy отклонил токен этого аккаунта — войдите снова или выберите другой аккаунт",
69154
+ "row.probeError": "Не удалось выполнить проверку: {message}",
69155
+ "row.probeFailed": "✗ Проверка не удалась",
69156
+ "row.probeFailedStatus": "✗ Проверка не удалась (HTTP {status})",
69157
+ "row.probeHint": "Отправляет этой модели запрос реального объёма (~25 тыс. входных токенов) и сообщает, отвечает ли она прямо сейчас. Ограничение частоты у сервиса срабатывает на РАЗМЕР запроса — замерено: около 20 тыс. токенов проходят, около 30 тыс. отклоняются — поэтому маленький запрос может выглядеть нормально, тогда как все запросы из долгих диалогов отклоняются. Именно поэтому каждая проверка стоит реальных кредитов (около 0,7) и выполняется по одной модели за раз.",
69158
+ "row.probeModelBusyAt": "✗ Эта модель сейчас загружена · дело не в вашем аккаунте; повторите после {at} или смените модель",
69159
+ "row.probeModelBusyUnknown": "✗ Эта модель сейчас загружена · дело не в вашем аккаунте — другой аккаунт не поможет; подождите около минуты или смените модель",
69160
+ "row.probeNotFound": "✗ Сервис не знает эту модель",
69161
+ "row.probeOk": "✓ Пригодна",
69162
+ "row.probeOkMs": "✓ Пригодна ({ms})",
69163
+ "row.probeOutOfCreditAt": "✗ Кредитов не хватает · квота обновится {at}",
69164
+ "row.probeOutOfCreditUnknown": "✗ Кредитов не хватает · сервис не указал, когда это освободится",
69165
+ "row.probePolicyRejected": "✗ Сервер WorkBuddy отклонил запрос по своей политике содержимого — повторный вход не поможет; попробуйте настольное приложение, другой регион или другой аккаунт",
69166
+ "row.probeRateLimitedAt": "✗ Ограничение частоты · снова пригодна после {at}",
69167
+ "row.probeRateLimitedUnknown": "✗ Ограничение частоты · сервис не указал, когда это освободится",
69168
+ "row.probeUnavailable": "✗ Не удалось связаться с сервисом — пригодного ответа не пришло",
69169
+ "row.probing": "Проверка…",
69170
+ "row.reasonEncrypted": "зашифровано — нужно настольное приложение",
69171
+ "row.reasonInvalid": "нет пригодного токена",
69172
+ "row.reasonMissing": "не найдено",
69173
+ "row.reasonUnreadable": "не читается",
69174
+ "row.reasonWrongRegion": "относится к другому региону",
69175
+ "row.recoversDays": "восстановится примерно через {count} д",
69176
+ "row.recoversHours": "восстановится примерно через {count} ч",
69177
+ "row.recoversImminent": "восстановится с минуты на минуту",
69178
+ "row.recoversMinutes": "восстановится примерно через {count} мин",
69179
+ "row.refresh": "Обновить",
69180
+ "row.refreshing": "Обновление…",
69181
+ "row.reloginHint": "При ошибках войдите заново в приложении WorkBuddy.",
69182
+ "row.remainingDays": "примерно через {count} д",
69183
+ "row.remainingHours": "примерно через {count} ч",
69184
+ "row.remainingImminent": "с минуты на минуту",
69185
+ "row.remainingMinutes": "примерно через {count} мин",
69186
+ "row.requestFailed": "Запрос не выполнен",
69187
+ "row.requestFailedHint": "Не удалось обновить — показаны последние загруженные данные: {message}",
69188
+ "row.rescanHidesKept": "Удалённые вами аккаунты всё ещё скрыты: плагин не смог обновить свой файл списка. В Windows это обычно блокировка файла — закройте антивирус или программы синхронизации, которые могут держать файлы в профиле DSH, и повторите.",
69189
+ "row.save": "Сохранить",
69190
+ "row.saveContentionHint": " (Файл заблокирован, поэтому запись отклонена — в Windows это обычно антивирус, клиент синхронизации вроде OneDrive или редактор с открытым файлом. Закройте то, что его держит, и сохраните снова; ваши правки на месте.)",
69191
+ "row.saveError": "Не удалось сохранить: {message}",
69192
+ "row.saving": "Сохранение…",
69193
+ "row.searchedHint": "Если WorkBuddy хранит вход в другом месте, укажите его плагину через переменную окружения WORKBUDDY_AUTH_FILE.",
69194
+ "row.searchedMore": "Показать ненайденные пути: {count}",
69195
+ "row.searchedTitle": "Проверенные пути",
69196
+ "row.selectionLostHint": "Сохранённого аккаунта больше нет на этом компьютере.",
69197
+ "row.selectionLostMessage": "Сохранённый для этого региона аккаунт больше не среди локальных входов (WorkBuddy заменил свой вход или убрал резервные копии). Остальные ваши входы в порядке — выберите актуальный из списка выше. Повторный вход в настольном приложении это не исправит.",
69198
+ "row.sessionTitleHint": "Хост отправляет один запрос заголовка на каждую новую сессию и тарифицирует его по ставке основной модели. Эта настройка перенаправляет этот единственный запрос на скрытую лёгкую модель. Сам запрос выполняется в любом случае. По умолчанию выключено.",
69199
+ "row.sessionTitleLabel": "Отправлять заголовки сессии лёгкой модели",
69200
+ "row.sessionTitleModel": "Целевая модель:",
69201
+ "row.showCreditsCn": "Показывать кредиты на панели поля ввода",
69202
+ "row.showCreditsCnHint": "Показывать остаток кредитов отечественного региона (WB CN) на панели поля ввода, но только пока эта сессия использует модель WB CN. Щёлкните по нему, чтобы увидеть остатки по аккаунтам и проверить отмеченные аккаунты одним щелчком (проверка тратит настоящие кредиты). Показание обновляется само каждые 5 минут, таблица по аккаунтам — каждые 60 секунд, пока она открыта.",
69203
+ "row.showCreditsGlobal": "Показывать кредиты на панели поля ввода",
69204
+ "row.showCreditsGlobalHint": "Показывать остаток кредитов международного региона (WB AI) на панели поля ввода, но только пока эта сессия использует модель WB AI. Щёлкните по нему, чтобы увидеть остатки по аккаунтам и проверить отмеченные аккаунты одним щелчком (проверка тратит настоящие кредиты). Показание обновляется само каждые 5 минут, таблица по аккаунтам — каждые 60 секунд, пока она открыта.",
69205
+ "row.showCreditsHintInline": "Остаток на аккаунте, который сейчас обслуживает эту вкладку. Щёлкните, чтобы увидеть остатки по аккаунтам; он также обновляется каждые 5 минут.",
69206
+ "row.signedOutEncrypted": "Вход WorkBuddy на месте, но его поля токенов зашифрованы, и плагин не смог прочитать ключ. Установите настольное приложение WorkBuddy или укажите в WORKBUDDY_APP_EXECUTABLE путь к его исполняемому файлу — повторный вход этого не изменит.",
69207
+ "row.signedOutHint": "Войдите один раз в настольном приложении WorkBuddy; плагин подхватит этот вход автоматически.",
69208
+ "row.signedOutWrongRegion": "Вход WorkBuddy найден, но он относится к вкладке другого региона. Переключитесь на неё выше — входить заново ничего не нужно.",
69209
+ "row.sourceDesktop": "настольное приложение",
69210
+ "row.sourceDsh": "копия плагина",
69211
+ "row.tabCn": "Отечественный",
69212
+ "row.tabFreeQuotaWarn": "У бесплатных моделей есть пределы — сервис ограничивает их по размеру запроса и нагрузке.",
69213
+ "row.tabGlobal": "Международный",
69214
+ "row.tabHint": "Каждая вкладка — отдельный провайдер (workbuddy / workbuddy-global) со своим аккаунтом, кредитами и моделями. Обе стороны работают одновременно: разные сессии могут брать любую из них, а изменения на одной вкладке никогда не затрагивают другую.",
69215
+ "row.tabOffNotice": "Этот провайдер выключен: ни одна его модель не предлагается DSH. Аккаунт, кредиты и настройки моделей сохранены — отметьте флажок над вкладкой, чтобы вернуть его.",
69216
+ "row.tabSwitchAria": "Предлагать провайдер {region} в DSH",
69217
+ "row.tabSwitchHint": "Снимите флажок, чтобы выключить этого провайдера. Его модели исчезнут из списка моделей DSH; аккаунт, кредиты и настройки моделей сохранятся и вернутся, когда вы отметите флажок снова.",
69218
+ "row.title": "Кредиты и модели WorkBuddy (dsh-connect-workbuddy)",
69219
+ "row.tpsAllFailed": "Не удалось измерить скорость",
69220
+ "row.tpsCredit": "Кредитов: {credit}",
69221
+ "row.tpsHint": "Измеряет скорость вывода этой модели: три коротких запроса, берётся медиана. За один прогон расходуется около 256 выходных токенов, и это заметно дешевле проверки доступности (замерено: 0,01–0,15 кредита). Результат показывается вместе со временем замера, потому что скорость зависит от нагрузки, а старое число хуже, чем никакого.",
69222
+ "row.tpsMeasure": "Скорость",
69223
+ "row.tpsMeasuredAt": "замерено {at}",
69224
+ "row.tpsMeasuring": "Измерение…",
69225
+ "row.tpsNoSample": "Не удалось замерить эту модель (слишком мало фрагментов потока)",
69226
+ "row.tpsNoUsage": "Не удалось замерить эту модель (сервис не сообщил число токенов)",
69227
+ "row.tpsPartial": "{tps} ток/с (прогонов: {samples})",
69228
+ "row.tpsSweepAll": "Измерить скорость (все)",
69229
+ "row.tpsSweepEnabled": "Измерить скорость (включённые)",
69230
+ "row.tpsSweepEnabledHint": "Измеряет СКОРОСТЬ ВЫВОДА для каждой ВКЛЮЧЁННОЙ вами модели: по три прогона, берётся медиана. В отличие от проверок доступности выше, здесь отправляется крошечная подсказка и запрашивается 256 выходных токенов, поэтому на модель выходит намного дешевле (замерено: 0,01–0,15 кредита против 0,72), так как этот шлюз считает цену по входу. Скорость важна, потому что DSH запускает модели как параллельных субагентов, и медленная модель стоит времени в масштабе всего прогона.",
69231
+ "row.tpsTesting": "Измерение {done}/{total}…",
69232
+ "row.tpsValue": "{tps} ток/с",
69233
+ "row.tpsValueTtft": "{tps} ток/с · первый токен {ttft} с",
69234
+ "row.transferCancel": "Отмена",
69235
+ "row.transferEntryUnknown": "аккаунт неизвестен",
69236
+ "row.transferError": "Не удалось перенести: {message}",
69237
+ "row.transferExport": "Экспортировать аккаунты",
69238
+ "row.transferExportConfirm": "Экспортировать аккаунты: {count}",
69239
+ "row.transferExported": "Экспортировано аккаунтов: {count} в файл {fileName}.",
69240
+ "row.transferExporting": "Экспорт…",
69241
+ "row.transferExportPick": "Выберите аккаунты для экспорта (доступно: {total}):",
69242
+ "row.transferHint": "Перенос аккаунтов между компьютерами в виде файла JSON. Файл содержит учётные данные — держите его при себе. Формат общий с другими менеджерами учётных данных WorkBuddy.",
69243
+ "row.transferImport": "Импортировать аккаунты",
69244
+ "row.transferImportConfirm": "Импортировать аккаунты: {count}",
69245
+ "row.transferImported": "Импортировано аккаунтов: {imported}; пропущено: {skipped} (нет токена или относится к другому региону).",
69246
+ "row.transferImporting": "Импорт…",
69247
+ "row.transferNoToken": "в этой записи нет токена",
69248
+ "row.transferPreviewing": "Чтение файла…",
69249
+ "row.transferPreviewTotal": "В файле аккаунтов: {total} — снимите отметки с тех, что не нужны. Аккаунты, уже сохранённые здесь, будут перезаписаны импортом.",
69250
+ "row.transferTitle": "Экспорт и импорт аккаунтов",
69251
+ "row.upstreamHint": "Это меняет то, что видит шлюз, а не то, какой провайдер обслуживает вызов. Все они считываются при монтировании плагина, поэтому после изменения перезагрузите плагин (или перезапустите DSH).",
69252
+ "row.usageIdentityHint": "Добавляет заголовки X-IDE-* (они заполняют столбец использования, иначе пустой) и отправляет идентификаторы беседы как 32-символьный UUIDv7 в шестнадцатеричном виде. Только для вида: User-Agent и тело запроса не меняются никогда. По умолчанию выключено, потому что сведения идут от стороннего наблюдателя, а не от этого плагина.",
69253
+ "row.usageIdentityLabel": "Чтобы страница использования записывала эти вызовы как официальный клиент",
69254
+ "row.veilHintList": "Список обновится, как только это завершится.",
69255
+ "sidebar.creditsCn": "Кредиты WB CN",
69256
+ "sidebar.creditsGlobal": "Кредиты WB AI",
69257
+ "sidebar.lastRefresh": "Последнее обновление: {time}",
69258
+ "sidebar.refresh": "Обновить",
69259
+ "sidebar.refreshFailed": "Не удалось обновить",
69260
+ "sidebar.refreshing": "Обновление…",
69261
+ "sidebar.signedOut": "Вход не выполнен"
69262
+ },
69263
+ "web-search-free": {
69264
+ "Aliyun API key (configured)": "Ключ Aliyun DashScope API (DASHSCOPE_API_KEY)",
69265
+ "AnySearch API key (configured)": "Ключ AnySearch API (необязателен: без него бесплатно, с ключом квота выше)",
69266
+ "apiKeys": "Ключи API",
69267
+ "Baidu API key (configured)": "Ключ Baidu Qianfan API (BAIDU_API_KEY)",
69268
+ "billedHint": "Поиск через модель (OpenAI/Gemini/Claude): платный за каждый вызов, работает только при явном выборе и никогда в автоматическом переборе.",
69269
+ "billedLabel": "Оплата за поиск",
69270
+ "bingMarketHint": "За этим следуют mkt и Accept-Language в Bing. Например, ru-RU даёт русские результаты для запросов на кириллице.",
69271
+ "bingMarketLabel": "Рынок Bing (локализованные результаты)",
69272
+ "blockedDomainsHint": "По одному домену в строке. Совпавший сайт и все его поддомены исключаются из результатов (csdn.net покрывает blog.csdn.net). Пустое поле отключает список. Полные адреса принимаются — схема, путь и порт отбрасываются автоматически.",
69273
+ "blockedDomainsLabel": "Список заблокированных доменов (blockedDomains)",
69274
+ "blockedDomainsWarn": "Пропущено дублей: ${dupes}, неузнанных строк: ${dropped}; исправлено до голых доменов: ${corrected}. Правила вступят в силу при следующем поиске, кэш результатов при этом сбрасывается.",
69275
+ "cacheTtl": "Время жизни кэша результатов (мин)",
69276
+ "cacheTtlHint": "0 отключает кэш, максимум 5 минут. Меньше — свежее результаты, больше — меньше упрёков в частоту и меньше кредитов.",
69277
+ "checkingUpdate": "Проверка…",
69278
+ "checkUpdate": "Проверить обновление",
69279
+ "classAuth": "Ошибка авторизации (auth)",
69280
+ "classBotWall": "Защита от ботов (bot-wall)",
69281
+ "classInvalidResponse": "Ошибка разбора или пустой ответ (invalid-response)",
69282
+ "classQuota": "Квота или бюджет исчерпаны (quota)",
69283
+ "classTransient": "Тайм-аут, сеть или ограничение частоты (transient)",
69284
+ "classUnknown": "Прочее неизвестное (unknown)",
69285
+ "Claude key (configured)": "Ключ Anthropic (ANTHROPIC_API_KEY, платный за поиск, только при явном выборе)",
69286
+ "DeepSeek API key (configured)": "Ключ DeepSeek API (sk-…)",
69287
+ "description": "Бесплатный веб-поиск без ключа API (Bing, DuckDuckGo, AnySearch, Exa, Tavily, Keenable, Firecrawl, Parallel, You.com)",
69288
+ "discard": "Отменить",
69289
+ "Doubao search key (configured)": "Ключ поиска Doubao / Volcano (DOUBAO_SEARCH_API_KEY, 500 бесплатных в месяц)",
69290
+ "engineEnable": "Включённые поисковые системы",
69291
+ "engineEnableHint": "Снятые движки исключаются везде: в переборе web_search, в маршрутизации Auto, в advanced_search, multi_search и в проверках движков. Хотя бы один движок должен остаться включённым.",
69292
+ "engineHint": "Multi Search опрашивает все включённые движки языкового пула запроса одновременно и объединяет результаты без повторов (пулы zh и en редактируются ниже, не меньше двух движков в каждом). Auto подбирает один движок по языку запроса и фильтру времени. Движкам с API KEY нужны ключи ниже.",
69293
+ "enPoolLabel": "Пул запросов на английском",
69294
+ "Exa API key (configured)": "Ключ Exa API (необязателен: без него бесплатно)",
69295
+ "fallbackOnHint": "Какие классы ошибок запускают переход к следующему движку. Все отмечены — текущее поведение (поиск не падает никогда); сняли отметку — и такая ошибка остановит поиск и покажет ошибку движка вместо перебора. Отсутствие ключа, выключенный движок и неподдерживаемый фильтр времени ошибкой не считаются и всегда передают ход дальше.",
69296
+ "fallbackOnLabel": "Причины перехода (fallbackOn)",
69297
+ "fallbackPriority": "Общий порядок перебора",
69298
+ "fallbackPriorityHint": "Сверху вниз — порядок перебора. Предпочитаемый движок всё равно пробуется первым. Auto сохраняет маршрутизацию по языку и времени, а заданный порядок упорядочивает движки внутри группы маршрута и остальную цепочку. Выключенные движки сохраняют место, но пропускаются.",
69299
+ "fallbackPriorityReset": "Вернуть порядок по умолчанию",
69300
+ "fetchTakeoverHint": "Включено: если web.fetchProvider не задан или всё ещё равен заводскому http, он подменяется на fs-quality-fetch. Выключите, если http закреплён намеренно (например, нужен только встроенный загрузчик).",
69301
+ "fetchTakeoverLabel": "Перехватывать web_fetch автоматически",
69302
+ "Firecrawl API key (configured)": "Ключ Firecrawl API (необязателен: без него бесплатно)",
69303
+ "Gemini key (configured)": "Ключ Gemini (GEMINI_API_KEY / GOOGLE_API_KEY, платный за поиск, только при явном выборе)",
69304
+ "getKey": "Получить ключ API →",
69305
+ "hasUpdate": "Доступно обновление",
69306
+ "Jina key (configured)": "Ключ Jina (JINA_API_KEY)",
69307
+ "Keenable API key (configured)": "Ключ Keenable API (необязателен: без него бесплатно)",
69308
+ "keysHint": "Где ищется ключ: сначала центр учётных данных .credentials.yaml, затем это поле, затем переменные окружения. Рекомендуем хранить ключи в центре учётных данных — там же, где ключи провайдеров моделей: одно место для всего.",
69309
+ "keyStatusConfigured": "Ключ задан",
69310
+ "keyStatusMissing": "Нужен ключ",
69311
+ "keyStatusOptional": "Ключ необязателен (работает и без него)",
69312
+ "keyStorage": "Хранение ключей",
69313
+ "keyStorageCred": "Центр учётных данных (рекомендуется)",
69314
+ "keyStorageCredHint": "Saved to ~/.dsh/.credentials.yaml (highest priority). Currently configured: ${[\"anysearch\", \"exa\", \"tavily\", \"keenable\", \"firecrawl\", \"parallel\", \"perplexity\", \"serpbase\", \"serply\", \"deepseek\", \"youcom\", \"baidu\", \"kimi\", \"aliyun\", \"doubao\", \"openai\", \"gemini\", \"claude\"].filter((k) => c[k]).map((k) => k.toUpperCase()).join(\", \") || \"none\"}",
69315
+ "keyStorageSettings": "Страница настроек (устаревший способ)",
69316
+ "keyStorageSettingsHint": "Сохраняется в конфигурацию плагина активного профиля (cordis.patch.yml; приоритет ниже, чем у центра учётных данных).",
69317
+ "Kimi API key (configured)": "Ключ Kimi API (MOONSHOT_API_KEY)",
69318
+ "languagePoolHint": "Голова маршрута для Auto и общий пул для Multi: выбираются по языку запроса. Multi опрашивает весь пул (уже не три движка). В каждом пуле не меньше двух движков, верхнего предела нет; выключенные, остывающие и бесключевые движки пропускаются автоматически.",
69319
+ "marketAuto": "Автоматически — mkt не передаётся (рекомендуется вне перечисленных регионов)",
69320
+ "marketDeDE": "de-DE — Германия",
69321
+ "marketEnGB": "en-GB — Великобритания",
69322
+ "marketEnUS": "en-US — США",
69323
+ "marketEsES": "es-ES — Испания",
69324
+ "marketFrFR": "fr-FR — Франция",
69325
+ "marketJaJP": "ja-JP — Япония",
69326
+ "marketKoKR": "ko-KR — Корея",
69327
+ "marketRuRU": "ru-RU — Россия",
69328
+ "marketZhCN": "zh-CN — Китай (по умолчанию)",
69329
+ "marketZhTW": "zh-TW — Тайвань",
69330
+ "multiMaxEngines": "Потолок одновременности Multi (multiMaxEngines)",
69331
+ "multiMaxEnginesHint": "Сколько движков Multi может опросить одновременно. 0 — без ограничения (по умолчанию опрашивается весь языковой пул, как раньше). Это потолок, а не квота: меньше кандидатов — просто меньше запусков.",
69332
+ "multiMinSources": "Цель Multi по удачным источникам (multiMinSources)",
69333
+ "multiMinSourcesHint": "Сколько движков в идеале должны вернуть результаты. Если не хватает, подключаются движки вне пула, пока цель не выполнится. Это цель, а не жёсткий минимум: если её не достичь, возвращаются имеющиеся результаты и добавляется пометка — поиск из-за этого не падает.",
69334
+ "multiPreset": "Набор",
69335
+ "multiPresetCustom": "Свой",
69336
+ "multiPresetHint": "Одно нажатие ставит два числа выше в частую комбинацию (Быстро — 1 движок / 1 источник, Сбалансированно — 3 / 1, Глубоко — 6 / 2); правка чисел переключает обратно на «Свой». Сейчас: ${now}.",
69337
+ "navBehavior": "Поведение поиска",
69338
+ "navEngines": "Движки",
69339
+ "navFallback": "Перебор",
69340
+ "navFetch": "Загрузка",
69341
+ "navLabel": "На странице",
69342
+ "navPerformance": "Производительность",
69343
+ "navPools": "Языковые пулы",
69344
+ "OpenAI key (configured)": "Ключ OpenAI (OPENAI_API_KEY, платный за поиск, только при явном выборе)",
69345
+ "Parallel API key (configured)": "Ключ Parallel API (необязателен: без него бесплатно)",
69346
+ "Perplexity API key (configured)": "Ключ Perplexity API (pplx-…)",
69347
+ "platformHint": "Включите площадки для инструмента platform_search у агента. Выключенные площадки пропускаются.",
69348
+ "platformSearch": "Поиск по площадкам (инструмент platform_search)",
69349
+ "poolAddFirst": "Добавить движок…",
69350
+ "poolRemove": "Убрать",
69351
+ "poolReset": "Вернуть пул по умолчанию",
69352
+ "priorityDisabled": "выключен",
69353
+ "safeSearchHint": "Действует для bing (adlt), ddg и ddg-lite (степень adlt). Если видите собственную фильтрацию движка, настройте здесь.",
69354
+ "safeSearchLabel": "Безопасный поиск (adlt)",
69355
+ "safeSearchModerate": "Умеренно — как в Bing по умолчанию",
69356
+ "safeSearchOff": "Выключено — как в движке по умолчанию (без фильтрации)",
69357
+ "safeSearchStrict": "Строго",
69358
+ "save": "Сохранить",
69359
+ "saveFailed": "не удалось сохранить",
69360
+ "saveFailedDetail": "не удалось сохранить: ${d}",
69361
+ "saving": "Сохранение…",
69362
+ "searchEngine": "Поисковый движок",
69363
+ "SerpBase API key (configured)": "Ключ SerpBase API (с serpbase.dev)",
69364
+ "Serply API key (configured)": "Ключ Serply API (с serply.io)",
69365
+ "starCta": "Поставить звезду",
69366
+ "starPrompt": "Оставьте звезду — автору будет приятно",
69367
+ "Tavily API key (configured)": "Ключ Tavily API (необязателен: без него бесплатно)",
69368
+ "testEngine": "Проверить движок",
69369
+ "testFail": "✗ ${e}",
69370
+ "testing": "Проверка…",
69371
+ "TinyFish key (configured)": "Ключ TinyFish (TINYFISH_API_KEY, 12000 бесплатных в день)",
69372
+ "toggleLang": "中文",
69373
+ "unavailable": "Настройки недоступны — мост бесплатного поиска не подключён.",
69374
+ "unsaved": "не сохранено",
69375
+ "updateAvailable": "Есть новая версия v${l} (текущая v${c})",
69376
+ "updateCheckFailed": "Не удалось проверить обновления (реестр npm недоступен)",
69377
+ "updateLatest": "У вас последняя версия v${c}",
69378
+ "updateView": "Открыть →",
69379
+ "upgrade": "Обновить",
69380
+ "upgradeDone": "Обновлено до v${l} — перезапустите dsh, чтобы применить",
69381
+ "upgradeFailed": "Обновление не удалось: ${m}",
69382
+ "upgradeLinkMode": "(локальная установка для разработки — обновляйте через git pull)",
69383
+ "upgrading": "Обновление…",
69384
+ "useBing": "Как в Bing по умолчанию",
69385
+ "visit": "Открыть сайт →",
69386
+ "You.com API key (configured)": "Ключ You.com API (необязателен: без него 100 поисков в день бесплатно; YDC_API_KEY)",
69387
+ "Zhihu key (configured)": "Ключ Zhihu (ZHIHU_API_KEY, общий для поиска по всему Zhihu и по сайту)",
69388
+ "zhPoolLabel": "Пул запросов на китайском"
68822
69389
  }
68823
69390
  };
68824
69391
  //#endregion
@@ -69237,6 +69804,7 @@ window.__ModuleLoader__.load({
69237
69804
  "Favicon indicator": "Индикатор фавикона",
69238
69805
  "Fetches pages with a real browser (local Playwright or CDP) and returns denoised markdown.": "Загружает страницы настоящим браузером (локальный Playwright или CDP) и возвращает очищенный Markdown.",
69239
69806
  "Fleet Radar": "Радар флота",
69807
+ "Free web search — no API key needed (Bing / DuckDuckGo / AnySearch / Exa / Tavily / Keenable / Firecrawl / Parallel / You.com)": "Бесплатный веб-поиск без ключа API (Bing, DuckDuckGo, AnySearch, Exa, Tavily, Keenable, Firecrawl, Parallel, You.com)",
69240
69808
  "GPT Responses route and search capabilities": "Маршрут GPT Responses и возможности поиска",
69241
69809
  "Git Bash path dialect": "Диалект путей Git Bash",
69242
69810
  "Git Credentials": "Учётные данные Git",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ragnoryok1/dsh-client-locale-ru",
3
- "description": "Russian for the DeepSeek Harness web GUI: the whole interface plus the menus of 520 third-party plugins — 584 sections, 67 666 strings.",
4
- "version": "0.2.17",
3
+ "description": "Russian for the DeepSeek Harness web GUI: the whole interface plus the menus of 520 third-party plugins — 587 sections, 68 227 strings.",
4
+ "version": "0.2.20",
5
5
  "keywords": [
6
6
  "dsh",
7
7
  "deepseek-harness",
@@ -114,7 +114,7 @@
114
114
  },
115
115
  "devDependencies": {
116
116
  "@deepseek-ai/cordis": "4.0.5",
117
- "@deepseek-ai/dsh-client-locale": "0.2.1-rc.2",
117
+ "@deepseek-ai/dsh-client-locale": "0.2.1-rc.3",
118
118
  "jsdom": "^30.1.2",
119
119
  "semver": "^7.8.5",
120
120
  "tsdown": "^0.22.2",
@@ -127,10 +127,10 @@
127
127
  "assets/banner.jpg",
128
128
  "cordis.patch.yml",
129
129
  "README.md",
130
+ "README-en.md",
131
+ "README-zh.md",
130
132
  "CHANGELOG.md",
131
133
  "LICENSE",
132
- "README.en.md",
133
- "README.zh.md",
134
134
  "NAMESPACES.md"
135
135
  ]
136
136
  }