dsh-oc-tui 0.2.0 → 0.3.0
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/README.md +21 -563
- package/bin/mcp-sse-bridge.mjs +499 -499
- package/docs/assets/conversation.png +0 -0
- package/docs/assets/cover.png +0 -0
- package/docs/assets/home.png +0 -0
- package/docs/assets/settings.png +0 -0
- package/docs/dsh-std-/346/216/245/345/205/245/350/257/264/346/230/216.md +566 -0
- package/docs/user-guide.md +616 -0
- package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +607 -593
- package/dsh-plugin.json +69 -69
- package/lib/boot-block.js +129 -0
- package/lib/diagnostics.js +162 -120
- package/lib/dsh-version.js +161 -0
- package/lib/git-branch.js +157 -157
- package/lib/i18n.js +283 -283
- package/lib/image.js +2 -1
- package/lib/index.js +5183 -4812
- package/lib/locales/ar.js +670 -635
- package/lib/locales/de.js +639 -604
- package/lib/locales/en.js +35 -0
- package/lib/locales/es.js +639 -604
- package/lib/locales/fr.js +639 -604
- package/lib/locales/id.js +641 -606
- package/lib/locales/it.js +639 -604
- package/lib/locales/ja.js +639 -604
- package/lib/locales/ko.js +639 -604
- package/lib/locales/nl.js +639 -604
- package/lib/locales/pl.js +653 -618
- package/lib/locales/pt-BR.js +639 -604
- package/lib/locales/ru.js +653 -618
- package/lib/locales/tr.js +639 -604
- package/lib/locales/vi.js +641 -606
- package/lib/locales/zh-CN.js +640 -605
- package/lib/locales/zh-TW.js +640 -605
- package/lib/markdown.js +101 -27
- package/lib/mcp-monitor.js +189 -0
- package/lib/mcp-skill.js +93 -93
- package/lib/mcp.js +865 -838
- package/lib/model-route.js +66 -0
- package/lib/providers.js +712 -712
- package/lib/screenshot.js +140 -0
- package/lib/splash-opencode.js +29 -26
- package/lib/startup.js +66 -48
- package/lib/term.js +53 -11
- package/lib/themes.js +101 -0
- package/lib/ui.js +685 -443
- package/lib/updates.js +5 -2
- package/lib/web-settings.js +52 -21
- package/package.json +160 -146
- package/skills/mcp-import/SKILL.md +216 -216
package/lib/locales/ru.js
CHANGED
|
@@ -1,621 +1,656 @@
|
|
|
1
|
-
// Russian catalog. Keys, order and placeholders mirror `en.js`, the source.
|
|
2
|
-
export default {
|
|
3
|
-
// ---- shared chrome ------------------------------------------------------
|
|
4
|
-
'common.selectBack': 'Enter — выбрать · Esc — назад',
|
|
5
|
-
'common.selectConfirmBack': '↑/↓ — выбор · Enter — подтвердить · Esc — назад',
|
|
6
|
-
'common.selectContinueExit': '↑/↓ — выбор · Enter — дальше · Esc — выход',
|
|
7
|
-
'common.escBack': 'Esc — назад',
|
|
8
|
-
'common.escClose': 'Esc — закрыть',
|
|
9
|
-
'common.escCancel': 'Esc — отмена',
|
|
10
|
-
'common.working': 'Работаю…',
|
|
11
|
-
'common.pleaseWait': 'подождите',
|
|
12
|
-
'common.on': 'вкл',
|
|
13
|
-
'common.off': 'выкл',
|
|
14
|
-
'common.unavailable': 'недоступно',
|
|
15
|
-
'common.selected': 'выбрано',
|
|
16
|
-
'common.default': 'по умолчанию',
|
|
17
|
-
'common.system': 'система',
|
|
18
|
-
'common.installed': '(установлено)',
|
|
19
|
-
'common.more': '… ещё {count}',
|
|
20
|
-
'common.moreLines': '… ещё {count} строк',
|
|
21
|
-
'common.clickExpand': ' · нажмите, чтобы развернуть',
|
|
22
|
-
'common.clickCollapse': ' · нажмите, чтобы свернуть',
|
|
23
|
-
'common.unknown': 'неизвестно',
|
|
24
|
-
'common.emptyMessage': '[пустое сообщение]',
|
|
25
|
-
'value.queue': 'очередь',
|
|
26
|
-
'value.steer': 'направлять',
|
|
27
|
-
'value.auto': 'авто',
|
|
28
|
-
'value.local': 'локально',
|
|
29
|
-
'value.textOnly': 'только текст',
|
|
30
|
-
'value.textImage': 'текст + изображение',
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
'splash.
|
|
36
|
-
'splash.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
'startup.
|
|
43
|
-
'startup.
|
|
44
|
-
'startup.
|
|
45
|
-
'startup.
|
|
46
|
-
'startup.
|
|
47
|
-
'startup.
|
|
48
|
-
'startup.
|
|
49
|
-
'startup.
|
|
50
|
-
|
|
51
|
-
'
|
|
52
|
-
|
|
53
|
-
'
|
|
54
|
-
'sidebar.
|
|
55
|
-
'
|
|
56
|
-
'
|
|
57
|
-
'status.
|
|
58
|
-
'status.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
'hint.
|
|
64
|
-
'hint.
|
|
65
|
-
'hint.
|
|
66
|
-
'hint.
|
|
67
|
-
'hint.
|
|
68
|
-
'hint.
|
|
69
|
-
'hint.
|
|
70
|
-
'hint.
|
|
71
|
-
'hint.
|
|
72
|
-
'hint.
|
|
73
|
-
'hint.
|
|
74
|
-
'hint.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
'transcript.turns.
|
|
80
|
-
'transcript.turns.
|
|
81
|
-
'transcript.
|
|
82
|
-
'transcript.
|
|
83
|
-
'transcript.steps.
|
|
84
|
-
'transcript.steps.
|
|
85
|
-
'transcript.
|
|
86
|
-
'transcript.
|
|
87
|
-
'transcript.
|
|
88
|
-
'transcript.
|
|
89
|
-
'transcript.
|
|
90
|
-
'transcript.
|
|
91
|
-
'transcript.
|
|
92
|
-
'transcript.
|
|
93
|
-
'
|
|
94
|
-
'
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
'
|
|
98
|
-
'
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
'image.
|
|
102
|
-
'image.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
'
|
|
106
|
-
'
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
'composer.
|
|
110
|
-
'composer.
|
|
111
|
-
'
|
|
112
|
-
'
|
|
113
|
-
'
|
|
114
|
-
'composer.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
'
|
|
118
|
-
'
|
|
119
|
-
'
|
|
120
|
-
'
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
'rail.
|
|
124
|
-
'rail.
|
|
125
|
-
'rail.
|
|
126
|
-
'rail.
|
|
127
|
-
'rail.
|
|
128
|
-
'rail.
|
|
129
|
-
'rail.
|
|
130
|
-
'rail.
|
|
131
|
-
'rail.
|
|
132
|
-
'rail.
|
|
133
|
-
'
|
|
134
|
-
'
|
|
135
|
-
'
|
|
136
|
-
'
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
'
|
|
140
|
-
'
|
|
141
|
-
'
|
|
142
|
-
'
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
'stats.
|
|
146
|
-
'stats.
|
|
147
|
-
'stats.
|
|
148
|
-
'stats.
|
|
149
|
-
'stats.
|
|
150
|
-
'stats.
|
|
151
|
-
'stats.
|
|
152
|
-
'stats.
|
|
153
|
-
'stats.
|
|
154
|
-
'stats.
|
|
155
|
-
'stats.
|
|
156
|
-
'stats.
|
|
157
|
-
'stats.
|
|
158
|
-
'stats.
|
|
159
|
-
'stats.
|
|
160
|
-
'stats.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
'
|
|
164
|
-
'
|
|
165
|
-
'
|
|
166
|
-
'
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
'questions.
|
|
170
|
-
'questions.
|
|
171
|
-
'questions.
|
|
172
|
-
'questions.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
'
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
'
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
'
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
'
|
|
185
|
-
'
|
|
186
|
-
'
|
|
187
|
-
'
|
|
188
|
-
'
|
|
189
|
-
'
|
|
190
|
-
'
|
|
191
|
-
'
|
|
192
|
-
'
|
|
193
|
-
'
|
|
194
|
-
'
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
'settings.
|
|
198
|
-
'settings.
|
|
199
|
-
'settings.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
'
|
|
203
|
-
'
|
|
204
|
-
'
|
|
205
|
-
'
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
'settings.
|
|
209
|
-
'settings.
|
|
210
|
-
'settings.
|
|
211
|
-
'settings.
|
|
212
|
-
'settings.
|
|
213
|
-
'settings.
|
|
214
|
-
'settings.
|
|
215
|
-
'settings.
|
|
216
|
-
'settings.
|
|
217
|
-
'settings.
|
|
218
|
-
'settings.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
'
|
|
222
|
-
'
|
|
223
|
-
'
|
|
224
|
-
'
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
'settings.
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
'
|
|
231
|
-
'
|
|
232
|
-
'
|
|
233
|
-
'
|
|
234
|
-
'
|
|
235
|
-
'
|
|
236
|
-
'
|
|
237
|
-
'
|
|
238
|
-
'
|
|
239
|
-
'
|
|
240
|
-
'
|
|
241
|
-
'
|
|
242
|
-
'
|
|
243
|
-
'
|
|
244
|
-
'
|
|
245
|
-
'
|
|
246
|
-
'
|
|
247
|
-
'
|
|
248
|
-
'
|
|
249
|
-
'
|
|
250
|
-
'
|
|
251
|
-
'
|
|
252
|
-
'
|
|
253
|
-
'
|
|
254
|
-
'
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
'model.
|
|
258
|
-
'model.
|
|
259
|
-
'model.
|
|
260
|
-
'model.
|
|
261
|
-
'model.
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
'
|
|
265
|
-
'
|
|
266
|
-
'
|
|
267
|
-
'
|
|
268
|
-
'
|
|
269
|
-
'
|
|
270
|
-
'
|
|
271
|
-
'
|
|
272
|
-
'
|
|
273
|
-
'
|
|
274
|
-
'
|
|
275
|
-
'
|
|
276
|
-
'
|
|
277
|
-
'
|
|
278
|
-
'
|
|
279
|
-
'
|
|
280
|
-
'
|
|
281
|
-
'
|
|
282
|
-
'
|
|
283
|
-
'
|
|
284
|
-
'
|
|
285
|
-
'
|
|
286
|
-
'
|
|
287
|
-
'
|
|
288
|
-
'
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
'
|
|
294
|
-
'
|
|
295
|
-
'
|
|
296
|
-
'
|
|
297
|
-
'
|
|
298
|
-
'
|
|
299
|
-
'
|
|
300
|
-
'
|
|
301
|
-
'
|
|
302
|
-
'
|
|
303
|
-
'
|
|
304
|
-
'
|
|
305
|
-
'
|
|
306
|
-
'
|
|
307
|
-
'
|
|
308
|
-
'
|
|
309
|
-
'
|
|
310
|
-
'
|
|
311
|
-
'
|
|
312
|
-
'
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
'
|
|
316
|
-
'
|
|
317
|
-
'
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
'
|
|
321
|
-
'
|
|
322
|
-
'
|
|
323
|
-
'
|
|
324
|
-
'
|
|
325
|
-
'
|
|
326
|
-
'
|
|
327
|
-
'
|
|
328
|
-
'
|
|
329
|
-
'
|
|
330
|
-
'
|
|
331
|
-
'
|
|
332
|
-
'
|
|
333
|
-
'
|
|
334
|
-
'
|
|
335
|
-
'
|
|
336
|
-
'
|
|
337
|
-
'
|
|
338
|
-
'
|
|
339
|
-
'
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
'mcp.
|
|
343
|
-
'mcp.
|
|
344
|
-
'mcp.
|
|
345
|
-
'mcp.
|
|
346
|
-
'mcp.
|
|
347
|
-
'mcp.
|
|
348
|
-
'mcp.
|
|
349
|
-
'mcp.
|
|
350
|
-
'mcp.
|
|
351
|
-
'mcp.
|
|
352
|
-
'mcp.
|
|
353
|
-
'mcp.
|
|
354
|
-
'mcp.
|
|
355
|
-
'mcp.
|
|
356
|
-
'mcp.
|
|
357
|
-
'mcp.
|
|
358
|
-
'mcp.
|
|
359
|
-
'mcp.
|
|
360
|
-
'mcp.
|
|
361
|
-
'mcp.
|
|
362
|
-
'mcp.
|
|
363
|
-
'mcp.
|
|
364
|
-
'mcp.
|
|
365
|
-
'mcp.
|
|
366
|
-
'mcp.
|
|
367
|
-
'mcp.
|
|
368
|
-
'mcp.
|
|
369
|
-
'mcp.
|
|
370
|
-
'mcp.
|
|
371
|
-
'mcp.
|
|
372
|
-
'mcp.
|
|
373
|
-
'mcp.
|
|
374
|
-
'mcp.
|
|
375
|
-
'mcp.
|
|
376
|
-
'mcp.
|
|
377
|
-
'mcp.
|
|
378
|
-
'mcp.
|
|
379
|
-
'mcp.
|
|
380
|
-
'mcp.
|
|
381
|
-
'mcp.
|
|
382
|
-
'mcp.
|
|
383
|
-
'mcp.
|
|
384
|
-
'mcp.
|
|
385
|
-
'mcp.
|
|
386
|
-
'mcp.
|
|
387
|
-
'mcp.
|
|
388
|
-
'mcp.
|
|
389
|
-
'mcp.
|
|
390
|
-
'mcp.
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
'
|
|
394
|
-
'
|
|
395
|
-
'
|
|
396
|
-
'
|
|
397
|
-
'
|
|
398
|
-
'
|
|
399
|
-
'
|
|
400
|
-
'
|
|
401
|
-
'
|
|
402
|
-
'
|
|
403
|
-
'
|
|
404
|
-
'
|
|
405
|
-
'
|
|
406
|
-
'
|
|
407
|
-
'
|
|
408
|
-
'
|
|
409
|
-
'
|
|
410
|
-
'
|
|
411
|
-
'
|
|
412
|
-
'
|
|
413
|
-
'
|
|
414
|
-
'
|
|
415
|
-
'
|
|
416
|
-
'
|
|
417
|
-
'
|
|
418
|
-
'
|
|
419
|
-
'
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
'rewind.
|
|
423
|
-
'
|
|
424
|
-
'
|
|
425
|
-
'
|
|
426
|
-
'
|
|
427
|
-
'
|
|
428
|
-
'
|
|
429
|
-
'
|
|
430
|
-
'
|
|
431
|
-
'
|
|
432
|
-
'
|
|
433
|
-
'
|
|
434
|
-
'
|
|
435
|
-
'
|
|
436
|
-
'
|
|
437
|
-
'
|
|
438
|
-
'
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
'
|
|
442
|
-
'
|
|
443
|
-
'
|
|
444
|
-
'
|
|
445
|
-
'
|
|
446
|
-
'
|
|
447
|
-
'
|
|
448
|
-
'
|
|
449
|
-
'
|
|
450
|
-
'
|
|
451
|
-
'
|
|
452
|
-
'
|
|
453
|
-
'
|
|
454
|
-
'
|
|
455
|
-
'
|
|
456
|
-
'
|
|
457
|
-
'
|
|
458
|
-
'
|
|
459
|
-
'
|
|
460
|
-
'
|
|
461
|
-
'
|
|
462
|
-
'
|
|
463
|
-
'
|
|
464
|
-
'
|
|
465
|
-
'
|
|
466
|
-
'
|
|
467
|
-
'
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
'update.
|
|
471
|
-
'update.
|
|
472
|
-
'update.
|
|
473
|
-
'update.
|
|
474
|
-
'update.
|
|
475
|
-
'update.
|
|
476
|
-
'update.
|
|
477
|
-
'update.
|
|
478
|
-
'update.
|
|
479
|
-
'update.
|
|
480
|
-
'update.
|
|
481
|
-
'update.
|
|
482
|
-
'update.
|
|
483
|
-
'update.
|
|
484
|
-
'update.
|
|
485
|
-
'update.
|
|
486
|
-
'update.
|
|
487
|
-
'update.
|
|
488
|
-
'update.
|
|
489
|
-
'update.
|
|
490
|
-
'update.
|
|
491
|
-
'update.
|
|
492
|
-
'update.
|
|
493
|
-
'update.
|
|
494
|
-
'update.
|
|
495
|
-
'update.
|
|
496
|
-
'update.
|
|
497
|
-
'update.
|
|
498
|
-
'update.
|
|
499
|
-
'update.
|
|
500
|
-
'update.
|
|
501
|
-
'update.
|
|
502
|
-
'update.
|
|
503
|
-
'update.
|
|
504
|
-
'update.
|
|
505
|
-
'update.
|
|
506
|
-
'update.
|
|
507
|
-
'update.
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
'
|
|
511
|
-
'
|
|
512
|
-
'
|
|
513
|
-
'
|
|
514
|
-
'
|
|
515
|
-
'
|
|
516
|
-
'
|
|
517
|
-
'
|
|
518
|
-
'
|
|
519
|
-
'
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
'
|
|
523
|
-
'
|
|
524
|
-
'
|
|
525
|
-
'
|
|
526
|
-
'
|
|
527
|
-
'
|
|
528
|
-
'
|
|
529
|
-
'
|
|
530
|
-
'
|
|
531
|
-
'
|
|
532
|
-
'
|
|
533
|
-
'
|
|
534
|
-
'
|
|
535
|
-
'
|
|
536
|
-
'
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
'
|
|
540
|
-
'help
|
|
541
|
-
'
|
|
542
|
-
'
|
|
543
|
-
'
|
|
544
|
-
'
|
|
545
|
-
'
|
|
546
|
-
'
|
|
547
|
-
'
|
|
548
|
-
'
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
'help.
|
|
552
|
-
'help.
|
|
553
|
-
'help.
|
|
554
|
-
'help.
|
|
555
|
-
'help.
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
'
|
|
559
|
-
'
|
|
560
|
-
'
|
|
561
|
-
'
|
|
562
|
-
'
|
|
563
|
-
'
|
|
564
|
-
'
|
|
565
|
-
'
|
|
566
|
-
'
|
|
567
|
-
'
|
|
568
|
-
'
|
|
569
|
-
'
|
|
570
|
-
'
|
|
571
|
-
'
|
|
572
|
-
'
|
|
573
|
-
'
|
|
574
|
-
'
|
|
575
|
-
'
|
|
576
|
-
'
|
|
577
|
-
'
|
|
578
|
-
'
|
|
579
|
-
'
|
|
580
|
-
'
|
|
581
|
-
'
|
|
582
|
-
'
|
|
583
|
-
'
|
|
584
|
-
'
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
'session.
|
|
588
|
-
'session.
|
|
589
|
-
'session.
|
|
590
|
-
'session.
|
|
591
|
-
'session.
|
|
592
|
-
'session.
|
|
593
|
-
'session.
|
|
594
|
-
'session.
|
|
595
|
-
'session.
|
|
596
|
-
'session.
|
|
597
|
-
'session.
|
|
598
|
-
'session.
|
|
599
|
-
'session.
|
|
600
|
-
'session.
|
|
601
|
-
'session.
|
|
602
|
-
'session.
|
|
603
|
-
'session.
|
|
604
|
-
'session.
|
|
605
|
-
'session.
|
|
606
|
-
'session.
|
|
607
|
-
'session.
|
|
608
|
-
'session.
|
|
609
|
-
'session.
|
|
610
|
-
'session.
|
|
611
|
-
'session.
|
|
612
|
-
'session.
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
'
|
|
616
|
-
'
|
|
617
|
-
'
|
|
1
|
+
// Russian catalog. Keys, order and placeholders mirror `en.js`, the source.
|
|
2
|
+
export default {
|
|
3
|
+
// ---- shared chrome ------------------------------------------------------
|
|
4
|
+
'common.selectBack': 'Enter — выбрать · Esc — назад',
|
|
5
|
+
'common.selectConfirmBack': '↑/↓ — выбор · Enter — подтвердить · Esc — назад',
|
|
6
|
+
'common.selectContinueExit': '↑/↓ — выбор · Enter — дальше · Esc — выход',
|
|
7
|
+
'common.escBack': 'Esc — назад',
|
|
8
|
+
'common.escClose': 'Esc — закрыть',
|
|
9
|
+
'common.escCancel': 'Esc — отмена',
|
|
10
|
+
'common.working': 'Работаю…',
|
|
11
|
+
'common.pleaseWait': 'подождите',
|
|
12
|
+
'common.on': 'вкл',
|
|
13
|
+
'common.off': 'выкл',
|
|
14
|
+
'common.unavailable': 'недоступно',
|
|
15
|
+
'common.selected': 'выбрано',
|
|
16
|
+
'common.default': 'по умолчанию',
|
|
17
|
+
'common.system': 'система',
|
|
18
|
+
'common.installed': '(установлено)',
|
|
19
|
+
'common.more': '… ещё {count}',
|
|
20
|
+
'common.moreLines': '… ещё {count} строк',
|
|
21
|
+
'common.clickExpand': ' · нажмите, чтобы развернуть',
|
|
22
|
+
'common.clickCollapse': ' · нажмите, чтобы свернуть',
|
|
23
|
+
'common.unknown': 'неизвестно',
|
|
24
|
+
'common.emptyMessage': '[пустое сообщение]',
|
|
25
|
+
'value.queue': 'очередь',
|
|
26
|
+
'value.steer': 'направлять',
|
|
27
|
+
'value.auto': 'авто',
|
|
28
|
+
'value.local': 'локально',
|
|
29
|
+
'value.textOnly': 'только текст',
|
|
30
|
+
'value.textImage': 'текст + изображение',
|
|
31
|
+
'value.show': 'показать',
|
|
32
|
+
'value.hide': 'скрыть',
|
|
33
|
+
|
|
34
|
+
// ---- title screen -------------------------------------------------------
|
|
35
|
+
'splash.hint': 'Спросите что угодно... «Исправь сломанные тесты»',
|
|
36
|
+
'splash.shortcutSettings': 'настройки',
|
|
37
|
+
'splash.shortcutThinking': 'мышление',
|
|
38
|
+
'splash.shortcutBranches': 'ветки',
|
|
39
|
+
|
|
40
|
+
// ---- header / sidebar / status row -------------------------------------
|
|
41
|
+
// ---- command-line help (dsh --profile tui --help) -----------------------
|
|
42
|
+
'startup.description': 'Запускает терминальный интерфейс DeepSeek Harness.',
|
|
43
|
+
'startup.helpOption': 'показать эту справку',
|
|
44
|
+
'startup.resume': 'продолжить существующий сохранённый сеанс по id',
|
|
45
|
+
'startup.model': 'id модели по умолчанию для новых сеансов',
|
|
46
|
+
'startup.provider': 'маршрут провайдера по умолчанию для новых сеансов',
|
|
47
|
+
'startup.sidebar': 'показать боковую панель сеансов (по умолчанию)',
|
|
48
|
+
'startup.noSidebar': 'запустить без боковой панели',
|
|
49
|
+
'startup.examples': 'Примеры:',
|
|
50
|
+
'startup.exampleFresh': 'запустить новый сеанс',
|
|
51
|
+
'startup.exampleResume': 'продолжить сохранённый сеанс',
|
|
52
|
+
|
|
53
|
+
'header.workspace': 'РАБОЧАЯ ОБЛАСТЬ',
|
|
54
|
+
'sidebar.sessions': 'СЕССИИ',
|
|
55
|
+
'sidebar.recent': 'НЕДАВНИЕ',
|
|
56
|
+
'sidebar.newSession': '+ Новая сессия',
|
|
57
|
+
'status.model': 'модель',
|
|
58
|
+
'status.draftTokens': '{count} ток. черновика',
|
|
59
|
+
'status.ctrlP': 'ctrl+p команды',
|
|
60
|
+
'status.interrupt': 'прервать: ctrl+c',
|
|
61
|
+
|
|
62
|
+
// ---- composer command hints --------------------------------------------
|
|
63
|
+
'hint.help': 'показать справку',
|
|
64
|
+
'hint.settings': 'открыть настройки',
|
|
65
|
+
'hint.new': 'новая сессия',
|
|
66
|
+
'hint.resume': 'продолжить сессию',
|
|
67
|
+
'hint.model': 'выбрать модель',
|
|
68
|
+
'hint.provider': 'выбрать провайдера',
|
|
69
|
+
'hint.rewind': 'перемотка назад',
|
|
70
|
+
'hint.branch': 'переключить ветку git',
|
|
71
|
+
'hint.stats': 'статистика сессии и токены',
|
|
72
|
+
'hint.clear': 'очистить экран',
|
|
73
|
+
'hint.cancel': 'отменить текущий ход',
|
|
74
|
+
'hint.quit': 'выход',
|
|
75
|
+
'hint.compact': 'сжать контекст',
|
|
76
|
+
'hint.goal': 'управление целью',
|
|
77
|
+
|
|
78
|
+
// ---- transcript blocks --------------------------------------------------
|
|
79
|
+
'transcript.turns.one': '{count} ход',
|
|
80
|
+
'transcript.turns.few': '{count} хода',
|
|
81
|
+
'transcript.turns.many': '{count} ходов',
|
|
82
|
+
'transcript.turns.other': '{count} хода',
|
|
83
|
+
'transcript.steps.one': '{count} шаг',
|
|
84
|
+
'transcript.steps.few': '{count} шага',
|
|
85
|
+
'transcript.steps.many': '{count} шагов',
|
|
86
|
+
'transcript.steps.other': '{count} шага',
|
|
87
|
+
'transcript.modelChanged': 'Модель изменена с {from} на {to}',
|
|
88
|
+
'transcript.thinking': ' мышление',
|
|
89
|
+
'transcript.streaming': ' · поток…',
|
|
90
|
+
'transcript.steeringBadge': ' ⟲ корректировка',
|
|
91
|
+
'transcript.tasks': 'задачи',
|
|
92
|
+
'transcript.systemPrompt': ' системный промпт',
|
|
93
|
+
'transcript.pendingInput': ' ожидает ввода · ',
|
|
94
|
+
'transcript.steering': ' корректировка',
|
|
95
|
+
'transcript.queued': ' в очереди',
|
|
96
|
+
'note.systemReminder': 'system-reminder',
|
|
97
|
+
'note.compaction': 'сжатие',
|
|
98
|
+
'note.runtimeContext': 'контекст выполнения',
|
|
99
|
+
|
|
100
|
+
// ---- images and mermaid -------------------------------------------------
|
|
101
|
+
'image.attachment': '🖼 вложение-изображение',
|
|
102
|
+
'image.rendering': '⏳ отрисовка изображения…',
|
|
103
|
+
'image.renderFailed': '⚠ не удалось отрисовать изображение · {error}',
|
|
104
|
+
'image.mermaidRendering': '⏳ отрисовка диаграммы mermaid…',
|
|
105
|
+
'image.mermaidTooWide': '↔ диаграмме mermaid нужно {width} столбцов, в этой панели {budget}',
|
|
106
|
+
'image.altFallback': 'изображение',
|
|
107
|
+
|
|
108
|
+
// ---- composer / approval prompt ----------------------------------------
|
|
109
|
+
'composer.keys': "Enter отправить · Ctrl+Enter новая строка · Ctrl+P настройки",
|
|
110
|
+
'composer.commandKeys': "↑/↓ выбор · Tab дополнить · Esc закрыть",
|
|
111
|
+
'composer.imageHint': 'Вставлено изображение: используйте мультимодальную модель/плагин или deepseek-v4-flash-vision-exp, иначе изображение не прочитать',
|
|
112
|
+
'composer.approval': 'Подтверждение · ',
|
|
113
|
+
'composer.summary': 'Сводка · ',
|
|
114
|
+
'composer.origin': 'Источник · ',
|
|
115
|
+
'composer.risk': 'Риск · ',
|
|
116
|
+
'composer.approvalHint': 'y — разрешить · n — отклонить · Esc — отмена',
|
|
117
|
+
'risk.low': 'низкий',
|
|
118
|
+
'risk.medium': 'средний',
|
|
119
|
+
'risk.high': 'высокий',
|
|
120
|
+
'composer.effortHint': 'Tab / ←/→ — изменить · Esc — закрыть',
|
|
121
|
+
|
|
122
|
+
// ---- right status rail --------------------------------------------------
|
|
123
|
+
'rail.model': 'МОДЕЛЬ',
|
|
124
|
+
'rail.thinking': 'МЫШЛЕНИЕ',
|
|
125
|
+
'rail.context': 'КОНТЕКСТ',
|
|
126
|
+
'rail.session': 'СЕССИЯ',
|
|
127
|
+
'rail.goal': 'ЦЕЛЬ',
|
|
128
|
+
'rail.subagents': 'СУБАГЕНТЫ',
|
|
129
|
+
'rail.noData': '—',
|
|
130
|
+
'rail.percentUsed': '{percent}% использовано',
|
|
131
|
+
'rail.tokens': '~{used} / {window} токенов',
|
|
132
|
+
'rail.cacheHit': 'кэш: попаданий {percent}%',
|
|
133
|
+
'rail.breakdown': 'система {system} · инструменты {tools} · сообщения {messages}',
|
|
134
|
+
'rail.contextPending': 'появится после отчёта об использовании',
|
|
135
|
+
'rail.subagentCounts': '{running} активно · {total} всего',
|
|
136
|
+
'rail.unreadable': '{label} (не читается)',
|
|
137
|
+
'rail.more': '… +{count} ещё',
|
|
138
|
+
'rail.round': ' · раунд {started}/{max}',
|
|
139
|
+
'goal.active': 'активна',
|
|
140
|
+
'goal.paused': 'приостановлена',
|
|
141
|
+
'goal.blocked': 'заблокирована',
|
|
142
|
+
'goal.complete': 'завершена',
|
|
143
|
+
|
|
144
|
+
// ---- session stats window ----------------------------------------------
|
|
145
|
+
'stats.title': 'статистика сессии',
|
|
146
|
+
'stats.hint': 'нажмите на полосу или /stats',
|
|
147
|
+
'stats.usage': 'использование',
|
|
148
|
+
'stats.duration': 'длительность',
|
|
149
|
+
'stats.speed': 'скорость',
|
|
150
|
+
'stats.tokens': 'токены',
|
|
151
|
+
'stats.cache': 'кэш',
|
|
152
|
+
'stats.context': 'контекст',
|
|
153
|
+
'stats.noSteps': 'пока нет завершённых шагов',
|
|
154
|
+
'stats.llmTime': 'LLM {value}',
|
|
155
|
+
'stats.toolTime': 'инструменты {value}',
|
|
156
|
+
'stats.ttft': 'TTFT в среднем {value}',
|
|
157
|
+
'stats.tokensPerSecond': '{value} ток/с',
|
|
158
|
+
'stats.cacheRate': 'кэш {percent}%',
|
|
159
|
+
'stats.inOut': 'вход {input} · выход {output}',
|
|
160
|
+
'stats.cacheDetail': '{percent}% попаданий · чтение {read} · запись {write} · промах {miss}',
|
|
161
|
+
'stats.contextUsed': 'занято {percent}% ~{used} / {window}',
|
|
162
|
+
'stats.systemPrompt': 'системный промпт',
|
|
163
|
+
'stats.tools': 'инструменты',
|
|
164
|
+
'stats.messages': 'сообщения',
|
|
165
|
+
'stats.compositionUnavailable': 'состав контекста недоступен',
|
|
166
|
+
'stats.contextPending': 'занятость контекста появится, когда запрос сообщит об использовании',
|
|
167
|
+
|
|
168
|
+
// ---- questions modal ----------------------------------------------------
|
|
169
|
+
'questions.title': 'Вопрос',
|
|
170
|
+
'questions.titleOf': 'Вопрос {index} из {total}',
|
|
171
|
+
'questions.defer': 'Esc — отложить',
|
|
172
|
+
'questions.range': '{from}-{to} из {total} PgUp/PgDn',
|
|
173
|
+
'questions.other': 'Другое: ',
|
|
174
|
+
'questions.answer': 'Ответ: ',
|
|
175
|
+
'questions.placeholder': 'введите свой ответ',
|
|
176
|
+
'questions.hintCustom': 'Enter — подтвердить · Esc — назад',
|
|
177
|
+
'questions.hintMulti': 'Space — переключить · Enter — дальше · Up/Down — выбор',
|
|
178
|
+
'questions.hintSingle': 'Enter — выбрать · Up/Down — выбор',
|
|
179
|
+
|
|
180
|
+
// ---- secret prompt ------------------------------------------------------
|
|
181
|
+
'secret.hint': 'Enter — отправить · Esc — отмена',
|
|
182
|
+
|
|
183
|
+
// ---- boot gate: the dsh version this build may run on ----
|
|
184
|
+
'boot.unsupportedTitle': 'Неподдерживаемая версия dsh',
|
|
185
|
+
'boot.unverifiedTitle': 'Непроверенная версия dsh',
|
|
186
|
+
'boot.runningLabel': 'запущенный dsh',
|
|
187
|
+
'boot.supportedLabel': 'поддерживается',
|
|
188
|
+
'boot.recommendedLabel': 'рекомендуется',
|
|
189
|
+
'boot.verifiedLabel': 'проверено',
|
|
190
|
+
'boot.unsupportedBody': 'Эта сборка dsh-oc-tui поддерживает только {range}, а {version} выходит за эти рамки. Сеансы не запустятся, пока dsh не будет соответствовать поддерживаемой версии.',
|
|
191
|
+
'boot.unverifiedBody': 'Эта сборка dsh-oc-tui проверялась на {verified}, но не на {version}. Установите {recommended}, чтобы быть уверенным в работе.',
|
|
192
|
+
'boot.installHint': 'Установите рекомендуемую версию dsh и снова запустите этот профиль:',
|
|
193
|
+
'boot.updatePluginHint': 'Если более новая dsh-oc-tui уже поддерживает этот dsh, обновите плагин:',
|
|
194
|
+
'boot.exitHint': 'Esc или Ctrl+C — выход',
|
|
195
|
+
|
|
196
|
+
// ---- settings dialog chrome --------------------------------------------
|
|
197
|
+
'settings.title': 'Настройки',
|
|
198
|
+
'settings.menu': 'МЕНЮ',
|
|
199
|
+
'settings.shared': 'Общие с DeepSeek Harness WebUI',
|
|
200
|
+
'settings.footerEdit': 'Enter — сохранить · Esc — отмена',
|
|
201
|
+
'settings.footerMenu': '↑/↓ — выбор · Tab — меню · Enter — открыть · Esc — назад',
|
|
202
|
+
'settings.footerPlain': '↑/↓ — выбор · Enter — открыть · Esc — назад',
|
|
203
|
+
'settings.confirmHint': '{text} · Y / N',
|
|
204
|
+
'settings.confirmDefault': 'Y — подтвердить · N — отмена',
|
|
205
|
+
'settings.confirmDeleteSession': 'Ctrl+D ещё раз — удалить',
|
|
206
|
+
'settings.confirmChange': 'Подтвердить изменение?',
|
|
207
|
+
'settings.deleteTwice': 'Нажмите Ctrl+D ещё раз, чтобы удалить ',
|
|
208
|
+
'settings.deleteMcpTwice': 'Нажмите Delete ещё раз, чтобы удалить ',
|
|
209
|
+
'settings.noSession': 'сессия не выбрана',
|
|
210
|
+
'settings.noSessions': 'нет доступных сессий',
|
|
211
|
+
'settings.noMcp': 'MCP-сервер не выбран',
|
|
212
|
+
'settings.noOptions': 'нет доступных вариантов для {label}',
|
|
213
|
+
'settings.saved': 'сохранено в настройках DSH',
|
|
214
|
+
'settings.providerRemoved': 'провайдер удалён',
|
|
215
|
+
'settings.conflict': 'настройки изменены извне; перезагружено',
|
|
216
|
+
'settings.error': 'настройки: {error}',
|
|
217
|
+
'settings.dshSettings': 'Настройки DSH',
|
|
218
|
+
'settings.optionList': 'Enter — выбрать · Esc — назад',
|
|
219
|
+
|
|
220
|
+
// ---- settings left menu -------------------------------------------------
|
|
221
|
+
'menu.main': 'Главное',
|
|
222
|
+
'menu.model': 'Модель',
|
|
223
|
+
'menu.update': 'Обновление',
|
|
224
|
+
'menu.mcp': 'MCP',
|
|
225
|
+
|
|
226
|
+
// ---- settings rows: main tab -------------------------------------------
|
|
227
|
+
'settings.general': 'Общие',
|
|
228
|
+
'settings.graphics': 'Графика',
|
|
229
|
+
'settings.sessions': 'Сессии',
|
|
230
|
+
'settings.system': 'Система',
|
|
231
|
+
'settings.developer': 'Разработчик',
|
|
232
|
+
'settings.contextDetails': 'Детали контекста',
|
|
233
|
+
'settings.busyEnter': 'Enter во время работы',
|
|
234
|
+
'settings.defaultPreset': 'Пресет по умолчанию',
|
|
235
|
+
'settings.permissionPreset': 'Пресет разрешений',
|
|
236
|
+
'settings.permissionDangerConfirm': 'Включить неограниченный доступ к инструментам и файлам?',
|
|
237
|
+
'settings.graphicsRendering': 'Отрисовка графики',
|
|
238
|
+
'settings.noProtocolFallback': 'Запасной режим без протокола',
|
|
239
|
+
'settings.imageHeightCap': 'Лимит высоты изображения (строки)',
|
|
240
|
+
'settings.mermaidRendering': 'Отрисовка Mermaid',
|
|
241
|
+
'settings.newSession': 'Новая сессия',
|
|
242
|
+
'settings.manageSessions': 'Управление сессиями',
|
|
243
|
+
'settings.providerConfig': 'API-конфиг провайдера',
|
|
244
|
+
'settings.updateManager': 'Менеджер обновлений',
|
|
245
|
+
'settings.settingsFile': 'Файл настроек',
|
|
246
|
+
'settings.language': 'Язык',
|
|
247
|
+
'settings.theme': 'Тема',
|
|
248
|
+
'theme.deepseek': 'DeepSeek Standard',
|
|
249
|
+
'theme.github-dark': 'GitHub Dark',
|
|
250
|
+
'theme.dracula': 'Dracula',
|
|
251
|
+
'theme.vscode-dark': 'VS Code Dark+',
|
|
252
|
+
'theme.nord': 'Nord',
|
|
253
|
+
'settings.languageSystem': 'Системный ({language})',
|
|
254
|
+
'settings.languageSaved': 'язык: {language}',
|
|
255
|
+
|
|
256
|
+
// ---- model tab ----------------------------------------------------------
|
|
257
|
+
'model.title': 'Модель',
|
|
258
|
+
'model.subtitle': 'Enter делает выбранную модель моделью по умолчанию',
|
|
259
|
+
'model.defaultSection': 'По умолчанию',
|
|
260
|
+
'model.defaultProvider': 'Провайдер по умолчанию',
|
|
261
|
+
'model.defaultModel': 'Модель по умолчанию',
|
|
262
|
+
'model.reasoning': 'Рассуждения',
|
|
263
|
+
'model.providerUrl': 'URL провайдера',
|
|
264
|
+
'model.providerApiKey': 'API-ключ провайдера',
|
|
265
|
+
'model.displayName': 'Отображаемое имя',
|
|
266
|
+
'model.wireProtocol': 'Протокол связи',
|
|
267
|
+
'model.defaultImageInput': 'Ввод изображений по умолчанию',
|
|
268
|
+
'model.models': 'Модели',
|
|
269
|
+
'model.fetch': 'загрузить…',
|
|
270
|
+
'model.selectedCount': 'выбрано: {count}',
|
|
271
|
+
'model.removeProvider': 'Удалить провайдера',
|
|
272
|
+
'model.removeProviderConfirm': 'Удалить {name} и управляемые учётные данные?',
|
|
273
|
+
'model.noModels': 'нет доступных моделей',
|
|
274
|
+
'model.noModelsReturned': 'провайдер не вернул моделей',
|
|
275
|
+
'model.fetchUnavailable': 'автозагрузка недоступна — сохранённые модели · Enter — переключить',
|
|
276
|
+
'model.fetchOk': 'загружено автоматически · Enter — переключить · Esc — назад',
|
|
277
|
+
'model.fetching': 'Загрузка моделей…',
|
|
278
|
+
'model.autoFetching': 'автозагрузка…',
|
|
279
|
+
'model.credentialConfigured': 'настроено ({source})',
|
|
280
|
+
'model.credentialMissing': 'не настроено',
|
|
281
|
+
'model.defaultTag': 'по умолчанию',
|
|
282
|
+
'model.providerUnavailable': 'провайдер больше недоступен',
|
|
283
|
+
'model.namespaceUnavailable': 'пространство настроек провайдера недоступно',
|
|
284
|
+
'model.apiKeyEmpty': 'API-ключ не может быть пустым',
|
|
285
|
+
'model.credentialsUnavailable': 'сервис учётных данных недоступен',
|
|
286
|
+
'model.noProviderModels': 'у выбранного провайдера нет доступных моделей',
|
|
287
|
+
'model.addCount.one': '{count} доступен',
|
|
288
|
+
'model.addCount.other': '{count} доступно',
|
|
289
|
+
|
|
290
|
+
// ---- add-provider flow --------------------------------------------------
|
|
291
|
+
'provider.add': 'Добавить провайдера',
|
|
292
|
+
'provider.empty': 'провайдеры ещё не настроены',
|
|
293
|
+
'provider.pickSubtitle': 'Enter выбрать · Esc назад',
|
|
294
|
+
'provider.catalog': 'Установленные провайдеры',
|
|
295
|
+
'provider.catalogEmpty': 'все установленные провайдеры уже настроены',
|
|
296
|
+
'provider.custom': 'Свой API — указать эндпоинт',
|
|
297
|
+
'provider.form.catalog': 'Взять установленного провайдера',
|
|
298
|
+
'provider.form.custom': 'Объявить своего провайдера',
|
|
299
|
+
'provider.formSubtitle': 'Enter изменить · Esc назад',
|
|
300
|
+
'provider.field.route': 'ID маршрута',
|
|
301
|
+
'provider.field.addModel': 'Добавить ID модели',
|
|
302
|
+
'provider.field.save': 'Сохранить провайдера',
|
|
303
|
+
'provider.hint.route': 'строчные буквы, цифры и дефисы · ключ хранится как {ref}',
|
|
304
|
+
'provider.error.route': 'ID маршрута должен начинаться с буквы и содержать только строчные буквы, цифры и дефисы',
|
|
305
|
+
'provider.error.routeNeeded': 'выберите провайдера',
|
|
306
|
+
'provider.error.taken': 'этот ID маршрута уже занят',
|
|
307
|
+
'provider.error.baseUrl': 'эндпоинт должен быть URL с http или https',
|
|
308
|
+
'provider.error.baseUrlNeeded': 'своему провайдеру нужен эндпоинт',
|
|
309
|
+
'provider.error.apiNeeded': 'выберите протокол, который использует этот эндпоинт',
|
|
310
|
+
'provider.error.modelsNeeded': 'своему провайдеру нужна хотя бы одна модель',
|
|
311
|
+
'provider.error.modelId': 'модели {index} нужен ID',
|
|
312
|
+
'provider.error.modelDuplicate': 'модель "{id}" указана дважды',
|
|
313
|
+
'provider.added': 'провайдер добавлен',
|
|
314
|
+
'provider.accountManaged': 'вы вошли в аккаунт DeepSeek',
|
|
315
|
+
'provider.search': 'Поиск',
|
|
316
|
+
'provider.searchPlaceholder': 'введите для фильтра',
|
|
317
|
+
'provider.searchEmpty': 'нет провайдера, подходящего под "{query}"',
|
|
318
|
+
|
|
319
|
+
// ---- одна запись модели --------------------------------------------------
|
|
320
|
+
'model.edit': 'Изменить модель',
|
|
321
|
+
'model.editHint': 'e изменить · Del удалить',
|
|
322
|
+
'model.refresh': 'Обновить каталог',
|
|
323
|
+
'model.selectAll': 'Выбрать все',
|
|
324
|
+
'model.fetchRefused': 'эндпоинт не вернул список моделей',
|
|
325
|
+
'model.notSaved': 'эта модель ещё не сохранена',
|
|
326
|
+
'model.removed': 'модель удалена',
|
|
327
|
+
'model.form.add': 'Добавить модель',
|
|
328
|
+
'model.form.edit': 'Модель · {id}',
|
|
329
|
+
'model.form.save': 'Сохранить модель',
|
|
330
|
+
'model.form.remove': 'Убрать у провайдера',
|
|
331
|
+
'model.form.removeConfirm': 'Убрать эту модель у провайдера?',
|
|
332
|
+
'model.field.id': 'ID модели',
|
|
333
|
+
'model.field.name': 'Отображаемое имя',
|
|
334
|
+
'model.field.contextWindow': 'Окно контекста',
|
|
335
|
+
'model.field.maxTokens': 'Макс. выходных токенов',
|
|
336
|
+
'model.field.input': 'Ввод',
|
|
337
|
+
'model.error.idNeeded': 'модели нужен ID',
|
|
338
|
+
'model.error.idDuplicate': 'модель "{id}" уже в списке',
|
|
339
|
+
'model.error.capacity': 'окно контекста и максимум токенов должны быть целыми (256K, 1M)',
|
|
340
|
+
|
|
341
|
+
// ---- MCP tab ------------------------------------------------------------
|
|
342
|
+
'mcp.title': 'MCP',
|
|
343
|
+
'mcp.subtitle': 'Enter — изменить · Del — удалить · Esc — назад',
|
|
344
|
+
'mcp.editSubtitle': 'Enter — изменить · Esc — назад',
|
|
345
|
+
'mcp.servers': 'MCP-серверы',
|
|
346
|
+
'mcp.empty': 'MCP-сервер не настроен',
|
|
347
|
+
'mcp.add': 'Добавить MCP-сервер',
|
|
348
|
+
'mcp.scope': 'область',
|
|
349
|
+
'mcp.scopeUserPrefix': 'пользователь · {path}',
|
|
350
|
+
'mcp.scopePathPrefix': 'путь · {path}',
|
|
351
|
+
'mcp.configFiles': 'Файлы конфигурации',
|
|
352
|
+
'mcp.userScope': 'пользователь (все сеансы)',
|
|
353
|
+
'mcp.secrets': 'Секреты',
|
|
354
|
+
'mcp.secretsPlain': 'открытым текстом в файлах конфигурации',
|
|
355
|
+
'mcp.loaded': 'загружен',
|
|
356
|
+
'mcp.notCreated': 'ещё не создан',
|
|
357
|
+
'mcp.type.stdio': 'Локальная команда',
|
|
358
|
+
'mcp.type.http': 'HTTP',
|
|
359
|
+
'mcp.type.sse': 'SSE',
|
|
360
|
+
'mcp.state.connected': '● подключено',
|
|
361
|
+
'mcp.state.tools.one': '● {count} инструмент',
|
|
362
|
+
'mcp.state.tools.few': '● {count} инструмента',
|
|
363
|
+
'mcp.state.tools.many': '● {count} инструментов',
|
|
364
|
+
'mcp.state.tools.other': '● {count} инструмента',
|
|
365
|
+
'mcp.state.pending': '… подключение',
|
|
366
|
+
'mcp.state.disabled': '○ отключено',
|
|
367
|
+
'mcp.state.idle': '○ не подключено',
|
|
368
|
+
'mcp.notice.connected': "MCP {name}: подключено",
|
|
369
|
+
'mcp.notice.failed': "MCP {name}: не удалось подключиться",
|
|
370
|
+
'mcp.form.add': 'Добавить MCP-сервер',
|
|
371
|
+
'mcp.form.edit': 'Изменить MCP-сервер · {name}',
|
|
372
|
+
'mcp.titleAdd': 'MCP · добавить',
|
|
373
|
+
'mcp.titleEdit': 'MCP · изменить',
|
|
374
|
+
'mcp.field.name': 'Имя',
|
|
375
|
+
'mcp.field.type': 'Тип',
|
|
376
|
+
'mcp.field.timeout': 'Таймаут (мс)',
|
|
377
|
+
'mcp.field.command': 'Команда',
|
|
378
|
+
'mcp.field.args': 'Аргументы',
|
|
379
|
+
'mcp.field.env': 'Окружение (JSON)',
|
|
380
|
+
'mcp.field.url': 'URL',
|
|
381
|
+
'mcp.field.headers': 'Заголовки (JSON)',
|
|
382
|
+
'mcp.field.scope': 'Область',
|
|
383
|
+
'mcp.field.path': 'Путь',
|
|
384
|
+
'mcp.field.enabled': 'Включён',
|
|
385
|
+
'mcp.field.save': 'Сохранить',
|
|
386
|
+
'mcp.field.remove': 'Удалить',
|
|
387
|
+
'mcp.choice.stdio': 'Локальная команда (stdio)',
|
|
388
|
+
'mcp.choice.http': 'HTTP (streamable)',
|
|
389
|
+
'mcp.choice.sse': 'SSE (устаревший HTTP+SSE)',
|
|
390
|
+
'mcp.choice.scopeUser': 'Пользователь — все сессии',
|
|
391
|
+
'mcp.choice.scopePath': 'Путь — сессии в каталоге',
|
|
392
|
+
'mcp.removeConfirm': 'Удалить этот MCP-сервер и отключиться от него?',
|
|
393
|
+
'mcp.saved': 'MCP-сервер сохранён',
|
|
394
|
+
'mcp.added': 'MCP-сервер добавлен',
|
|
395
|
+
'mcp.removed': 'MCP-сервер удалён',
|
|
396
|
+
'mcp.error.name': 'имя должно быть от 1 до 32 символов: буквы, цифры, "-" или "_"',
|
|
397
|
+
'mcp.error.duplicate': 'MCP-сервер с именем "{name}" уже настроен',
|
|
398
|
+
'mcp.error.timeout': 'timeoutMs должен быть целым числом от 1 до {max}',
|
|
399
|
+
'mcp.error.pathNeeded': 'серверу с областью «путь» нужен каталог',
|
|
400
|
+
'mcp.error.pathAbsolute': 'область «путь» должна быть абсолютным каталогом',
|
|
401
|
+
'mcp.error.commandNeeded': 'stdio-серверу нужна команда',
|
|
402
|
+
'mcp.error.urlParse': 'не удалось разобрать URL',
|
|
403
|
+
'mcp.error.urlScheme': 'URL должен использовать http или https',
|
|
404
|
+
'mcp.error.pathNotDir': 'область «путь» не является каталогом: {path}',
|
|
405
|
+
'mcp.error.configIsDir': 'путь к файлу конфигурации — это каталог: {path}',
|
|
406
|
+
'mcp.error.notFound': 'MCP-сервер с именем "{name}" не настроен',
|
|
407
|
+
'mcp.error.documentGone': 'документ, определяющий "{name}", исчез: {error}',
|
|
408
|
+
'mcp.error.noClient': 'хост не предоставляет MCP-клиент',
|
|
409
|
+
'mcp.error.connectTimeout': 'истекло время подключения к {name}',
|
|
410
|
+
'mcp.error.json': 'документ не является корректным JSON: {error}',
|
|
411
|
+
'mcp.error.jsonObject': 'документ должен быть JSON-объектом',
|
|
412
|
+
'mcp.error.serversObject': '"servers" должен быть JSON-объектом',
|
|
413
|
+
'mcp.error.argsArray': 'аргументы должны быть JSON-массивом строк',
|
|
414
|
+
'mcp.error.argsTypes': 'аргументы должны быть строками или числами',
|
|
415
|
+
'mcp.error.argsUnclosed': 'в аргументах есть незакрытая кавычка',
|
|
416
|
+
'mcp.error.envObject': '{label} должен быть JSON-объектом',
|
|
417
|
+
'mcp.error.envValue': 'значение {label} "{name}" должно быть строкой, числом или логическим значением',
|
|
418
|
+
'mcp.error.header': 'некорректный HTTP-заголовок "{name}"',
|
|
419
|
+
'mcp.error.envName': 'некорректное имя переменной окружения "{name}"',
|
|
420
|
+
|
|
421
|
+
// ---- rewind -------------------------------------------------------------
|
|
422
|
+
'rewind.title': 'Перемотка',
|
|
423
|
+
'rewind.restoreTo': 'Восстановить состояние до: {label}',
|
|
424
|
+
'rewind.restorePrompt': 'Восстановить беседу до состояния перед…',
|
|
425
|
+
'rewind.empty': 'Пока некуда перематывать.',
|
|
426
|
+
'rewind.option.conversation': 'Восстановить беседу',
|
|
427
|
+
'rewind.option.both': 'Восстановить беседу и файлы',
|
|
428
|
+
'rewind.option.code': 'Восстановить файлы',
|
|
429
|
+
'rewind.option.cancel': 'Отмена',
|
|
430
|
+
'rewind.current': '(текущая)',
|
|
431
|
+
'rewind.noPoints': 'нет сообщений пользователя для перемотки',
|
|
432
|
+
'rewind.unknownPoint': 'неизвестная точка перемотки "{selector}" — укажите число или last',
|
|
433
|
+
'rewind.noPoint': 'нет точки перемотки {n} — 1..{count}',
|
|
434
|
+
'rewind.notGit': 'это не рабочее дерево git',
|
|
435
|
+
'rewind.noBackup': 'нет места для резервной копии',
|
|
436
|
+
'rewind.filesNotRestored': 'файлы не восстановлены',
|
|
437
|
+
'rewind.filesNotRestoredReason': 'файлы не восстановлены ({reason})',
|
|
438
|
+
'rewind.restored.one': 'восстановлен {count} отслеживаемый файл из HEAD',
|
|
439
|
+
'rewind.restored.few': 'восстановлено {count} отслеживаемых файла из HEAD',
|
|
440
|
+
'rewind.restored.many': 'восстановлено {count} отслеживаемых файлов из HEAD',
|
|
441
|
+
'rewind.restored.other': 'восстановлено {count} отслеживаемых файла из HEAD',
|
|
442
|
+
'rewind.removed.one': 'удалён {count} новый файл',
|
|
443
|
+
'rewind.removed.few': 'удалено {count} новых файла',
|
|
444
|
+
'rewind.removed.many': 'удалено {count} новых файлов',
|
|
445
|
+
'rewind.removed.other': 'удалено {count} новых файла',
|
|
446
|
+
'rewind.skipped': 'пропущено {count}',
|
|
447
|
+
'rewind.previousSaved': 'прежнее содержимое сохранено в {path}',
|
|
448
|
+
'rewind.noChanges': 'после этой точки файлы не менялись',
|
|
449
|
+
'rewind.image': '[изображение]',
|
|
450
|
+
'rewind.images': '[изображений: {count}]',
|
|
451
|
+
'rewind.emptyMessage': '(пусто)',
|
|
452
|
+
'git.title': 'Ветки Git',
|
|
453
|
+
'git.subtitle': 'Текущая: {branch} · {path}',
|
|
454
|
+
'git.local': 'Локальные ветки',
|
|
455
|
+
'git.remote': 'Удалённые ветки',
|
|
456
|
+
'git.empty': 'В этом репозитории нет веток.',
|
|
457
|
+
'git.detached': '(отсоединённая)',
|
|
458
|
+
'git.switched': 'Переключено на ветку {branch}',
|
|
459
|
+
'git.switchFailed': 'Не удалось переключиться на {branch}: {error}',
|
|
460
|
+
'git.pullDone': 'Обновления загружены',
|
|
461
|
+
'git.pullFailed': 'Не удалось загрузить обновления: {error}',
|
|
462
|
+
'git.listFailed': 'Не удалось получить список веток: {error}',
|
|
463
|
+
'git.notRepo': 'не рабочее дерево git',
|
|
464
|
+
'git.gitMissing': 'git недоступен в PATH',
|
|
465
|
+
'git.timedOut': 'git превысил время ожидания',
|
|
466
|
+
'git.onlyTitleScreen': 'Переключение веток доступно только на пустой странице — покиньте сеанс командой /new',
|
|
467
|
+
'git.footer': '↑/↓ выбор · Enter переключить · P pull · R обновить · Esc закрыть',
|
|
468
|
+
|
|
469
|
+
// ---- update tab ---------------------------------------------------------
|
|
470
|
+
'update.title': 'Обновление',
|
|
471
|
+
'update.checking': 'Проверка версий…',
|
|
472
|
+
'update.fetching': 'загрузка из реестра npm…',
|
|
473
|
+
'update.fetchingVersions': 'Загрузка версий…',
|
|
474
|
+
'update.versionsSubtitle': 'Enter — скачать · Esc — назад',
|
|
475
|
+
'update.installed': 'Установлено',
|
|
476
|
+
'update.latest': 'Последняя (тег npm)',
|
|
477
|
+
'update.status': 'Статус',
|
|
478
|
+
'update.versions': 'Версии',
|
|
479
|
+
'update.selectVersion': 'Выбрать версию…',
|
|
480
|
+
'update.restartApply': 'Перезапустите, чтобы применить {version}',
|
|
481
|
+
'update.enterRestart': 'Enter — перезапуск',
|
|
482
|
+
'update.discard': 'Отменить загруженную {version}',
|
|
483
|
+
'update.actions': 'Действия',
|
|
484
|
+
'update.checkNow': 'Проверить сейчас',
|
|
485
|
+
'update.checkingShort': 'Проверка…',
|
|
486
|
+
'update.startupCheck': 'Проверка при запуске',
|
|
487
|
+
'update.profile': 'профиль',
|
|
488
|
+
'update.dshPackage': 'dsh (@deepseek-ai/dsh)',
|
|
489
|
+
'update.statusCorrupt': 'Установка повреждена — переустановите ниже',
|
|
490
|
+
'update.statusError': 'Проверка реестра не удалась: {error}',
|
|
491
|
+
'update.statusAvailable': 'Доступно обновление → {version}',
|
|
492
|
+
'update.statusUpToDate': 'Актуальная версия',
|
|
493
|
+
'update.statusNoStable': 'Нет стабильного релиза — выберите в «Версиях»',
|
|
494
|
+
'update.notOnPath': 'не найден в PATH',
|
|
495
|
+
'update.subtitleStaged': '{package} {version} загружен — перезапустите, чтобы применить',
|
|
496
|
+
'update.subtitleIdle': 'Enter — выбрать · скачать, затем перезапустить, чтобы применить',
|
|
497
|
+
'update.download': 'Скачать',
|
|
498
|
+
'update.contacting': 'связь с реестром…',
|
|
499
|
+
'update.version': 'Версия',
|
|
500
|
+
'update.savingTo': 'Сохранение в',
|
|
501
|
+
'update.escCancels': 'Esc отменяет',
|
|
502
|
+
'update.restartApplyQ': 'Перезапустить, чтобы применить {label} {version}? (уже загружено)',
|
|
503
|
+
'update.downloadQ': 'Скачать {label} {version} и перезапустить, чтобы применить?',
|
|
504
|
+
'update.localSwitch': ' — переключает локальную установку на версию из реестра',
|
|
505
|
+
'update.downloaded': 'загружено · перезапустите, чтобы применить',
|
|
506
|
+
'update.downloadedToast': '{label} {version} загружен · примените на вкладке «Обновление»',
|
|
507
|
+
'update.downloadedConfirm': 'Загружено: перезапустить, чтобы применить {label} {version}? (y/n)',
|
|
508
|
+
'update.alreadyDownloadedConfirm': 'Уже загружено · перезапустить, чтобы применить {label} {version}? (y/n)',
|
|
509
|
+
'update.downloadCancelled': 'загрузка отменена',
|
|
510
|
+
'update.downloadFailed': 'загрузка не удалась: {error}',
|
|
511
|
+
'update.stagedGone': 'подготовленная загрузка исчезла — выберите версию снова',
|
|
512
|
+
'update.locks.one': 'нельзя применить: dsh запущен ещё в {count} процессе — закройте его и повторите',
|
|
513
|
+
'update.locks.few': 'нельзя применить: dsh запущен ещё в {count} процессах — закройте их и повторите',
|
|
514
|
+
'update.locks.many': 'нельзя применить: dsh запущен ещё в {count} процессах — закройте их и повторите',
|
|
515
|
+
'update.locks.other': 'нельзя применить: dsh запущен ещё в {count} процессах — закройте их и повторите',
|
|
516
|
+
'update.noNpm': 'нельзя применить: npm не найден',
|
|
517
|
+
'update.noDshCli': 'нельзя применить: CLI dsh не найден',
|
|
518
|
+
'update.installerFailed': 'не удалось запустить установщик — перезапустите dsh, чтобы применить {label}',
|
|
519
|
+
'update.applying': 'применение {label} · выход и перезапуск…',
|
|
520
|
+
'update.stagedDiscarded': 'подготовленная загрузка отменена',
|
|
521
|
+
'update.tagCached': 'в кэше',
|
|
522
|
+
'update.tagStaged': 'подготовлено',
|
|
523
|
+
'update.installFailed': 'Установка не удалась (код {code}) — повторите из «Версий»',
|
|
524
|
+
'update.installFailedRetry': 'откройте «Обновление → dsh-oc-tui → Версии» и выберите версию для повторной загрузки',
|
|
525
|
+
'update.installUnreadable': 'установка сообщила об успехе, но установлена версия {installed} (ожидалась {expected}) — исправление: {repair}',
|
|
526
|
+
'update.registryUnreachable': 'реестр недоступен: {error}',
|
|
527
|
+
'update.notOnRegistry': '{package} отсутствует в реестре',
|
|
528
|
+
'update.registryHttp': 'реестр вернул HTTP {status} для {package}',
|
|
529
|
+
'update.noTarballUrl': 'ответ реестра не содержит URL архива',
|
|
530
|
+
'update.downloadHttp': 'загрузка не удалась: HTTP {status} для {url}',
|
|
531
|
+
'update.downloadEmpty': 'загрузка не удалась: пустой ответ',
|
|
532
|
+
'update.integrityFailed': 'проверка целостности не удалась для {file} — загрузка отменена',
|
|
533
|
+
'update.npmMissing': 'npm не найден в PATH',
|
|
534
|
+
'update.npmViewFailed': 'npm view {package} завершился с кодом {code}',
|
|
535
|
+
'update.timedOut': '\n(истекло время после {ms} мс)',
|
|
536
|
+
'update.noOutput': '(нет вывода)',
|
|
537
|
+
|
|
538
|
+
// ---- commands -----------------------------------------------------------
|
|
539
|
+
'command.settings': 'Открыть страницы настроек TUI',
|
|
540
|
+
'command.help': 'Показать справку по клавишам и командам TUI',
|
|
541
|
+
'command.stats': 'Показать статистику токенов и кэша сессии',
|
|
542
|
+
'command.new': 'Начать новую сессию',
|
|
543
|
+
'command.resume': 'Продолжить сохранённую сессию',
|
|
544
|
+
'command.clear': 'Очистить расшифровку',
|
|
545
|
+
'command.cancel': 'Отменить текущий ход',
|
|
546
|
+
'command.rewind': 'Перемотать сессию к более ранней точке',
|
|
547
|
+
'command.branch': 'Переключить ветку git на пустой странице',
|
|
548
|
+
'command.quit': 'Выйти из TUI',
|
|
549
|
+
|
|
550
|
+
// ---- help overlay -------------------------------------------------------
|
|
551
|
+
'help.title': 'DeepSeek Harness TUI — справка',
|
|
552
|
+
'help.enter': 'Enter',
|
|
553
|
+
'help.enterDesc': 'отправить сообщение',
|
|
554
|
+
'help.ctrlEnter': 'Ctrl+Enter',
|
|
555
|
+
'help.ctrlEnterDesc': 'вставить перевод строки',
|
|
556
|
+
'help.ctrlC': 'Ctrl+C',
|
|
557
|
+
'help.ctrlCDesc': 'отменить текущий ход; нажмите ещё раз для выхода',
|
|
558
|
+
'help.ctrlP': 'Ctrl+P',
|
|
559
|
+
'help.ctrlPDesc': 'открыть настройки',
|
|
560
|
+
'help.ctrlE': 'Ctrl+E',
|
|
561
|
+
'help.ctrlEDesc': 'показать/скрыть ползунок мышления',
|
|
562
|
+
'help.tab': 'Tab',
|
|
563
|
+
'help.tabDesc': 'переключить интенсивность мышления',
|
|
564
|
+
'help.ctrlN': 'Ctrl+N',
|
|
565
|
+
'help.ctrlNDesc': 'новая сессия',
|
|
566
|
+
'help.ctrlG': 'Ctrl+G',
|
|
567
|
+
'help.ctrlGDesc': 'переключить ветку git (пустая страница)',
|
|
568
|
+
'help.ctrlD': 'Ctrl+D',
|
|
569
|
+
'help.ctrlDDesc': 'удалить сессию в «Управлении сессиями» (нажать дважды)',
|
|
570
|
+
'help.pg': 'PgUp / PgDn',
|
|
571
|
+
'help.pgDesc': 'прокрутка расшифровки',
|
|
572
|
+
'help.shiftArrows': 'Shift+↑/↓',
|
|
573
|
+
'help.shiftArrowsDesc': 'прокрутка панели статуса (широкие окна)',
|
|
574
|
+
'help.upDown': 'Up / Down',
|
|
575
|
+
'help.upDownDesc': 'курсор вверх/вниз; история на краях',
|
|
576
|
+
'help.mouse': 'Перетаскивание мышью',
|
|
577
|
+
'help.mouseDesc': 'выделить текст; правый клик копирует',
|
|
578
|
+
'help.wheel': 'Колесо',
|
|
579
|
+
'help.wheelDesc': 'прокрутка расшифровки / настроек',
|
|
580
|
+
'help.escEsc': 'Esc Esc',
|
|
581
|
+
'help.escEscDesc': 'выбор точки перемотки',
|
|
582
|
+
'help.esc': 'Esc',
|
|
583
|
+
'help.escDesc': 'закрыть окно · отменить ход · очистить ввод',
|
|
584
|
+
'help.commands': 'Команды:',
|
|
585
|
+
|
|
586
|
+
// ---- session manager / toasts ------------------------------------------
|
|
587
|
+
'session.newTitle': 'Новый сеанс',
|
|
588
|
+
'session.noSaved': 'Нет сохранённых сессий',
|
|
589
|
+
'session.manageTitle': 'Управление сессиями',
|
|
590
|
+
'session.manageSubtitle': 'Enter — открыть · Ctrl+D дважды — удалить · Esc — назад',
|
|
591
|
+
'session.loading': 'Загрузка сессий...',
|
|
592
|
+
'session.deleted': 'сессия {label} удалена',
|
|
593
|
+
'session.deleteFailed': 'удаление сессии: {error}',
|
|
594
|
+
'session.deleteNotFound': 'каталог сохранённой сессии не найден',
|
|
595
|
+
'session.deleteCancelled': 'удаление отменено',
|
|
596
|
+
'session.resumed': 'сессия {id} продолжена',
|
|
597
|
+
'session.started': 'сессия {id} запущена',
|
|
598
|
+
'session.openFailed': 'не удалось открыть сессию: {error}',
|
|
599
|
+
'session.forkSummary': '{label} из {parent} · {files}',
|
|
600
|
+
'session.forkDropped': ' · отброшено ожидающих вводов: {count}',
|
|
601
|
+
'session.conversationOnly': 'только беседа',
|
|
602
|
+
'session.rewindLabel': 'перемотка #{n}',
|
|
603
|
+
'session.files': 'файлы: {summary}',
|
|
604
|
+
'session.error': 'ошибка: {error}',
|
|
605
|
+
'session.interruptFirst': 'сначала прервите текущий ход (/cancel)',
|
|
606
|
+
'session.interruptFirstEsc': 'сначала прервите текущий ход (Esc или /cancel)',
|
|
607
|
+
'session.startFirst': 'сначала начните сессию',
|
|
608
|
+
'session.noReasoningLevels': 'текущая модель не имеет уровней рассуждения',
|
|
609
|
+
'session.settingsUnavailable': 'настройки недоступны',
|
|
610
|
+
'session.interruptRequested': 'запрошено прерывание',
|
|
611
|
+
'session.nothingToInterrupt': 'нечего прерывать',
|
|
612
|
+
'session.noSessionRunning': 'нет запущенной сессии',
|
|
613
|
+
'session.promptCleared': 'ввод очищен',
|
|
614
|
+
'session.exitAgain': 'нажмите Ctrl+C ещё раз для выхода',
|
|
615
|
+
'session.usageResume': 'использование: /resume <sessionId>',
|
|
616
|
+
'session.currentModel': 'текущая модель: {model}',
|
|
617
|
+
'session.modelSet': 'модель: {model} (применится к следующему запросу)',
|
|
618
|
+
'session.currentProvider': 'текущий провайдер: {provider}',
|
|
619
|
+
'session.providerSet': 'провайдер: {provider} (применится к следующему запросу)',
|
|
620
|
+
'session.unknownCommand': 'неизвестная команда /{name} — попробуйте /help',
|
|
621
|
+
'session.queryMissing': 'запрос сессий не смонтирован в этом профиле',
|
|
622
|
+
'session.listHeader': 'сессии:',
|
|
623
|
+
'session.noPersisted': 'нет сохранённых сессий',
|
|
624
|
+
'session.listFailed': 'не удалось получить список сессий: {error}',
|
|
625
|
+
'session.modelNoImages': 'модель "{model}" не поддерживает ввод изображений',
|
|
626
|
+
'session.imageAttachFailed': 'не удалось прикрепить изображение: {error}',
|
|
627
|
+
'session.attachmentsUnavailable': 'сервис вложений недоступен; изображение не прочитать',
|
|
628
|
+
'session.copied.one': 'в буфер обмена скопирована {count} строка',
|
|
629
|
+
'session.copied.few': 'в буфер обмена скопировано {count} строки',
|
|
630
|
+
'session.copied.many': 'в буфер обмена скопировано {count} строк',
|
|
631
|
+
'session.copied.other': 'в буфер обмена скопировано {count} строки',
|
|
632
|
+
'session.valueRequired': 'требуется значение',
|
|
633
|
+
'session.minChars': 'не менее {count} символов',
|
|
634
|
+
'session.maxChars': 'не более {count} символов',
|
|
635
|
+
'session.answerRequired': 'выберите вариант или введите ответ',
|
|
636
|
+
'session.typeAnswer': 'введите ответ или нажмите Esc',
|
|
637
|
+
'session.updatesAvailable': 'Обновления: {list} — Ctrl+P → Обновление',
|
|
638
|
+
'session.versionsError': 'версии: {error}',
|
|
639
|
+
'session.mcpError': 'MCP: {error}',
|
|
640
|
+
'session.noClipboard': 'нет доступного способа работы с буфером обмена',
|
|
641
|
+
'session.unsupportedInteraction': 'неподдерживаемый тип взаимодействия: {kind}',
|
|
642
|
+
|
|
643
|
+
// ---- tool activity summaries -------------------------------------------
|
|
644
|
+
'tool.run': 'запуск {command}',
|
|
645
|
+
'tool.askUser': 'вопрос пользователю',
|
|
646
|
+
'tool.askQuestions': 'вопросов: {count}',
|
|
618
647
|
|
|
619
648
|
// ---- host diagnostics ----------------------------------------------------
|
|
620
649
|
'diagnostics.notice': 'Диагностика хоста записана в {path}',
|
|
621
|
-
|
|
650
|
+
|
|
651
|
+
// ---- screenshots --------------------------------------------------------
|
|
652
|
+
"screenshot.shortcut": "Снимок экрана",
|
|
653
|
+
"screenshot.directory": "Папка снимков экрана",
|
|
654
|
+
"screenshot.saved": "Снимок сохранён",
|
|
655
|
+
"screenshot.failed": "Не удалось сделать снимок",
|
|
656
|
+
}
|