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/vi.js
CHANGED
|
@@ -1,609 +1,644 @@
|
|
|
1
|
-
// Vietnamese catalog. Same keys, same order, and the same placeholders and
|
|
2
|
-
// padding as `en.js`; Vietnamese has a single plural form, so every plural
|
|
3
|
-
// family repeats one wording.
|
|
4
|
-
export default {
|
|
5
|
-
// ---- shared chrome ------------------------------------------------------
|
|
6
|
-
'common.selectBack': 'Enter chọn · Esc quay lại',
|
|
7
|
-
'common.selectConfirmBack': '↑/↓ chọn · Enter xác nhận · Esc quay lại',
|
|
8
|
-
'common.selectContinueExit': '↑/↓ chọn · Enter tiếp tục · Esc thoát',
|
|
9
|
-
'common.escBack': 'Esc quay lại',
|
|
10
|
-
'common.escClose': 'Esc đóng',
|
|
11
|
-
'common.escCancel': 'Esc hủy',
|
|
12
|
-
'common.working': 'Đang xử lý…',
|
|
13
|
-
'common.pleaseWait': 'vui lòng chờ',
|
|
14
|
-
'common.on': 'bật',
|
|
15
|
-
'common.off': 'tắt',
|
|
16
|
-
'common.unavailable': 'không khả dụng',
|
|
17
|
-
'common.selected': 'đã chọn',
|
|
18
|
-
'common.default': 'mặc định',
|
|
19
|
-
'common.system': 'hệ thống',
|
|
20
|
-
'common.installed': '(đã cài)',
|
|
21
|
-
'common.more': '… thêm {count}',
|
|
22
|
-
'common.moreLines': '… thêm {count} dòng',
|
|
23
|
-
'common.clickExpand': ' · nhấp để mở rộng',
|
|
24
|
-
'common.clickCollapse': ' · nhấp để thu gọn',
|
|
25
|
-
'common.unknown': 'không rõ',
|
|
26
|
-
'common.emptyMessage': '[tin nhắn trống]',
|
|
27
|
-
'value.queue': 'hàng đợi',
|
|
28
|
-
'value.steer': 'điều hướng',
|
|
29
|
-
'value.auto': 'tự động',
|
|
30
|
-
'value.local': 'cục bộ',
|
|
31
|
-
'value.textOnly': 'chỉ văn bản',
|
|
32
|
-
'value.textImage': 'văn bản + hình ảnh',
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
'splash.
|
|
38
|
-
'splash.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
'startup.
|
|
45
|
-
'startup.
|
|
46
|
-
'startup.
|
|
47
|
-
'startup.
|
|
48
|
-
'startup.
|
|
49
|
-
'startup.
|
|
50
|
-
'startup.
|
|
51
|
-
'startup.
|
|
52
|
-
|
|
53
|
-
'
|
|
54
|
-
|
|
55
|
-
'
|
|
56
|
-
'sidebar.
|
|
57
|
-
'
|
|
58
|
-
'
|
|
59
|
-
'status.
|
|
60
|
-
'status.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
'hint.
|
|
66
|
-
'hint.
|
|
67
|
-
'hint.
|
|
68
|
-
'hint.
|
|
69
|
-
'hint.
|
|
70
|
-
'hint.
|
|
71
|
-
'hint.
|
|
72
|
-
'hint.
|
|
73
|
-
'hint.
|
|
74
|
-
'hint.
|
|
75
|
-
'hint.
|
|
76
|
-
'hint.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
'transcript.
|
|
82
|
-
'transcript.
|
|
83
|
-
'transcript.
|
|
84
|
-
'transcript.
|
|
85
|
-
'transcript.
|
|
86
|
-
'transcript.
|
|
87
|
-
'transcript.
|
|
88
|
-
'transcript.
|
|
89
|
-
'transcript.
|
|
90
|
-
'transcript.
|
|
91
|
-
'
|
|
92
|
-
'
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
'
|
|
96
|
-
'
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
'image.
|
|
100
|
-
'image.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
'
|
|
104
|
-
'
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
'composer.
|
|
108
|
-
'composer.
|
|
109
|
-
'
|
|
110
|
-
'
|
|
111
|
-
'
|
|
112
|
-
'composer.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
'
|
|
116
|
-
'
|
|
117
|
-
'
|
|
118
|
-
'
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
'rail.
|
|
122
|
-
'rail.
|
|
123
|
-
'rail.
|
|
124
|
-
'rail.
|
|
125
|
-
'rail.
|
|
126
|
-
'rail.
|
|
127
|
-
'rail.
|
|
128
|
-
'rail.
|
|
129
|
-
'rail.
|
|
130
|
-
'rail.
|
|
131
|
-
'
|
|
132
|
-
'
|
|
133
|
-
'
|
|
134
|
-
'
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
'
|
|
138
|
-
'
|
|
139
|
-
'
|
|
140
|
-
'
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
'stats.
|
|
144
|
-
'stats.
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
'
|
|
162
|
-
'
|
|
163
|
-
'
|
|
164
|
-
'
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
'questions.
|
|
168
|
-
'questions.
|
|
169
|
-
'questions.
|
|
170
|
-
'questions.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
'
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
'
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
'
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
'
|
|
183
|
-
'
|
|
184
|
-
'
|
|
185
|
-
'
|
|
186
|
-
'
|
|
187
|
-
'
|
|
188
|
-
'
|
|
189
|
-
'
|
|
190
|
-
'
|
|
191
|
-
'
|
|
192
|
-
'
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
'settings.
|
|
196
|
-
'settings.
|
|
197
|
-
'settings.
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
'
|
|
201
|
-
'
|
|
202
|
-
'
|
|
203
|
-
'
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
'settings.
|
|
207
|
-
'settings.
|
|
208
|
-
'settings.
|
|
209
|
-
'settings.
|
|
210
|
-
'settings.
|
|
211
|
-
'settings.
|
|
212
|
-
'settings.
|
|
213
|
-
'settings.
|
|
214
|
-
'settings.
|
|
215
|
-
'settings.
|
|
216
|
-
'settings.
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
'
|
|
220
|
-
'
|
|
221
|
-
'
|
|
222
|
-
'
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
'settings.
|
|
226
|
-
|
|
227
|
-
|
|
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
|
-
'model.
|
|
256
|
-
'model.
|
|
257
|
-
'model.
|
|
258
|
-
'model.
|
|
259
|
-
'model.
|
|
260
|
-
|
|
261
|
-
|
|
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
|
-
'mcp.
|
|
341
|
-
'mcp.
|
|
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
|
-
|
|
388
|
-
|
|
389
|
-
'
|
|
390
|
-
'
|
|
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
|
-
'
|
|
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
|
-
'update.
|
|
463
|
-
'update.
|
|
464
|
-
'update.
|
|
465
|
-
'update.
|
|
466
|
-
'update.
|
|
467
|
-
'update.
|
|
468
|
-
'update.
|
|
469
|
-
'update.
|
|
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
|
-
|
|
499
|
-
|
|
500
|
-
'
|
|
501
|
-
'
|
|
502
|
-
'
|
|
503
|
-
'
|
|
504
|
-
'
|
|
505
|
-
'
|
|
506
|
-
'
|
|
507
|
-
'
|
|
508
|
-
'
|
|
509
|
-
'
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
'
|
|
513
|
-
'
|
|
514
|
-
'
|
|
515
|
-
'
|
|
516
|
-
'
|
|
517
|
-
'
|
|
518
|
-
'
|
|
519
|
-
'
|
|
520
|
-
'
|
|
521
|
-
'
|
|
522
|
-
'
|
|
523
|
-
'
|
|
524
|
-
'
|
|
525
|
-
'
|
|
526
|
-
'
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
'
|
|
530
|
-
'help
|
|
531
|
-
'
|
|
532
|
-
'
|
|
533
|
-
'
|
|
534
|
-
'
|
|
535
|
-
'
|
|
536
|
-
'
|
|
537
|
-
'
|
|
538
|
-
'
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
'help.
|
|
542
|
-
'help.
|
|
543
|
-
'help.
|
|
544
|
-
'help.
|
|
545
|
-
'help.
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
'
|
|
549
|
-
'
|
|
550
|
-
'
|
|
551
|
-
'
|
|
552
|
-
'
|
|
553
|
-
'
|
|
554
|
-
'
|
|
555
|
-
'
|
|
556
|
-
'
|
|
557
|
-
'
|
|
558
|
-
'
|
|
559
|
-
'
|
|
560
|
-
'
|
|
561
|
-
'
|
|
562
|
-
'
|
|
563
|
-
'
|
|
564
|
-
'
|
|
565
|
-
'
|
|
566
|
-
'
|
|
567
|
-
'
|
|
568
|
-
'
|
|
569
|
-
'
|
|
570
|
-
'
|
|
571
|
-
'
|
|
572
|
-
'
|
|
573
|
-
'
|
|
574
|
-
'
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
'session.
|
|
578
|
-
'session.
|
|
579
|
-
'session.
|
|
580
|
-
'session.
|
|
581
|
-
'session.
|
|
582
|
-
'session.
|
|
583
|
-
'session.
|
|
584
|
-
'session.
|
|
585
|
-
'session.
|
|
586
|
-
'session.
|
|
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
|
-
|
|
602
|
-
|
|
603
|
-
'
|
|
604
|
-
'
|
|
605
|
-
'
|
|
1
|
+
// Vietnamese catalog. Same keys, same order, and the same placeholders and
|
|
2
|
+
// padding as `en.js`; Vietnamese has a single plural form, so every plural
|
|
3
|
+
// family repeats one wording.
|
|
4
|
+
export default {
|
|
5
|
+
// ---- shared chrome ------------------------------------------------------
|
|
6
|
+
'common.selectBack': 'Enter chọn · Esc quay lại',
|
|
7
|
+
'common.selectConfirmBack': '↑/↓ chọn · Enter xác nhận · Esc quay lại',
|
|
8
|
+
'common.selectContinueExit': '↑/↓ chọn · Enter tiếp tục · Esc thoát',
|
|
9
|
+
'common.escBack': 'Esc quay lại',
|
|
10
|
+
'common.escClose': 'Esc đóng',
|
|
11
|
+
'common.escCancel': 'Esc hủy',
|
|
12
|
+
'common.working': 'Đang xử lý…',
|
|
13
|
+
'common.pleaseWait': 'vui lòng chờ',
|
|
14
|
+
'common.on': 'bật',
|
|
15
|
+
'common.off': 'tắt',
|
|
16
|
+
'common.unavailable': 'không khả dụng',
|
|
17
|
+
'common.selected': 'đã chọn',
|
|
18
|
+
'common.default': 'mặc định',
|
|
19
|
+
'common.system': 'hệ thống',
|
|
20
|
+
'common.installed': '(đã cài)',
|
|
21
|
+
'common.more': '… thêm {count}',
|
|
22
|
+
'common.moreLines': '… thêm {count} dòng',
|
|
23
|
+
'common.clickExpand': ' · nhấp để mở rộng',
|
|
24
|
+
'common.clickCollapse': ' · nhấp để thu gọn',
|
|
25
|
+
'common.unknown': 'không rõ',
|
|
26
|
+
'common.emptyMessage': '[tin nhắn trống]',
|
|
27
|
+
'value.queue': 'hàng đợi',
|
|
28
|
+
'value.steer': 'điều hướng',
|
|
29
|
+
'value.auto': 'tự động',
|
|
30
|
+
'value.local': 'cục bộ',
|
|
31
|
+
'value.textOnly': 'chỉ văn bản',
|
|
32
|
+
'value.textImage': 'văn bản + hình ảnh',
|
|
33
|
+
'value.show': 'hiện',
|
|
34
|
+
'value.hide': 'ẩn',
|
|
35
|
+
|
|
36
|
+
// ---- title screen -------------------------------------------------------
|
|
37
|
+
'splash.hint': 'Hỏi bất cứ điều gì... "Sửa các bài test hỏng"',
|
|
38
|
+
'splash.shortcutSettings': 'cài đặt',
|
|
39
|
+
'splash.shortcutThinking': 'suy luận',
|
|
40
|
+
'splash.shortcutBranches': 'nhánh',
|
|
41
|
+
|
|
42
|
+
// ---- header / sidebar / status row -------------------------------------
|
|
43
|
+
// ---- command-line help (dsh --profile tui --help) -----------------------
|
|
44
|
+
'startup.description': 'Khởi động giao diện terminal của DeepSeek Harness.',
|
|
45
|
+
'startup.helpOption': 'hiển thị trợ giúp này',
|
|
46
|
+
'startup.resume': 'tiếp tục một phiên đã lưu hiện có theo id',
|
|
47
|
+
'startup.model': 'id mô hình mặc định cho phiên mới',
|
|
48
|
+
'startup.provider': 'tuyến nhà cung cấp mặc định cho phiên mới',
|
|
49
|
+
'startup.sidebar': 'hiển thị thanh bên phiên (mặc định)',
|
|
50
|
+
'startup.noSidebar': 'khởi động không có thanh bên',
|
|
51
|
+
'startup.examples': 'Ví dụ:',
|
|
52
|
+
'startup.exampleFresh': 'bắt đầu một phiên mới',
|
|
53
|
+
'startup.exampleResume': 'tiếp tục một phiên đã lưu',
|
|
54
|
+
|
|
55
|
+
'header.workspace': 'KHÔNG GIAN LÀM VIỆC',
|
|
56
|
+
'sidebar.sessions': 'PHIÊN',
|
|
57
|
+
'sidebar.recent': 'GẦN ĐÂY',
|
|
58
|
+
'sidebar.newSession': '+ Phiên mới',
|
|
59
|
+
'status.model': 'mô hình',
|
|
60
|
+
'status.draftTokens': '{count} token nháp',
|
|
61
|
+
'status.ctrlP': 'ctrl+p lệnh',
|
|
62
|
+
'status.interrupt': 'ngắt: ctrl+c',
|
|
63
|
+
|
|
64
|
+
// ---- composer command hints --------------------------------------------
|
|
65
|
+
'hint.help': 'xem trợ giúp',
|
|
66
|
+
'hint.settings': 'mở cài đặt',
|
|
67
|
+
'hint.new': 'phiên mới',
|
|
68
|
+
'hint.resume': 'tiếp tục phiên',
|
|
69
|
+
'hint.model': 'chọn mô hình',
|
|
70
|
+
'hint.provider': 'chọn nhà cung cấp',
|
|
71
|
+
'hint.rewind': 'chọn điểm quay lui',
|
|
72
|
+
'hint.branch': 'chuyển nhánh git',
|
|
73
|
+
'hint.stats': 'thống kê phiên & token',
|
|
74
|
+
'hint.clear': 'xóa màn hình',
|
|
75
|
+
'hint.cancel': 'hủy lượt đang chạy',
|
|
76
|
+
'hint.quit': 'thoát',
|
|
77
|
+
'hint.compact': 'nén ngữ cảnh',
|
|
78
|
+
'hint.goal': 'quản lý mục tiêu',
|
|
79
|
+
|
|
80
|
+
// ---- transcript blocks --------------------------------------------------
|
|
81
|
+
'transcript.turns.one': '{count} lượt',
|
|
82
|
+
'transcript.turns.other': '{count} lượt',
|
|
83
|
+
'transcript.steps.one': '{count} bước',
|
|
84
|
+
'transcript.steps.other': '{count} bước',
|
|
85
|
+
'transcript.modelChanged': 'Đã đổi mô hình từ {from} sang {to}',
|
|
86
|
+
'transcript.thinking': ' đang suy luận',
|
|
87
|
+
'transcript.streaming': ' · đang truyền…',
|
|
88
|
+
'transcript.steeringBadge': ' ⟲ đang điều chỉnh',
|
|
89
|
+
'transcript.tasks': 'tác vụ',
|
|
90
|
+
'transcript.systemPrompt': ' lời nhắc hệ thống',
|
|
91
|
+
'transcript.pendingInput': ' đầu vào đang chờ · ',
|
|
92
|
+
'transcript.steering': ' đang điều chỉnh',
|
|
93
|
+
'transcript.queued': ' trong hàng đợi',
|
|
94
|
+
'note.systemReminder': 'nhắc nhở hệ thống',
|
|
95
|
+
'note.compaction': 'nén ngữ cảnh',
|
|
96
|
+
'note.runtimeContext': 'ngữ cảnh thời gian chạy',
|
|
97
|
+
|
|
98
|
+
// ---- images and mermaid -------------------------------------------------
|
|
99
|
+
'image.attachment': '🖼 ảnh đính kèm',
|
|
100
|
+
'image.rendering': '⏳ đang kết xuất ảnh…',
|
|
101
|
+
'image.renderFailed': '⚠ kết xuất ảnh thất bại · {error}',
|
|
102
|
+
'image.mermaidRendering': '⏳ đang kết xuất sơ đồ mermaid…',
|
|
103
|
+
'image.mermaidTooWide': '↔ sơ đồ mermaid cần {width} cột, khung này có {budget}',
|
|
104
|
+
'image.altFallback': 'ảnh',
|
|
105
|
+
|
|
106
|
+
// ---- composer / approval prompt ----------------------------------------
|
|
107
|
+
'composer.keys': "Enter gửi · Ctrl+Enter xuống dòng · Ctrl+P cài đặt",
|
|
108
|
+
'composer.commandKeys': "↑/↓ chọn · Tab hoàn thành · Esc đóng",
|
|
109
|
+
'composer.imageHint': 'Ảnh đã dán: hãy dùng mô hình/plugin đa phương thức hoặc deepseek-v4-flash-vision-exp, nếu không sẽ không đọc được ảnh',
|
|
110
|
+
'composer.approval': 'Phê duyệt · ',
|
|
111
|
+
'composer.summary': 'Tóm tắt · ',
|
|
112
|
+
'composer.origin': 'Nguồn · ',
|
|
113
|
+
'composer.risk': 'Rủi ro · ',
|
|
114
|
+
'composer.approvalHint': 'y cho phép · n từ chối · Esc hủy',
|
|
115
|
+
'risk.low': 'thấp',
|
|
116
|
+
'risk.medium': 'trung bình',
|
|
117
|
+
'risk.high': 'cao',
|
|
118
|
+
'composer.effortHint': 'Tab / ←/→ điều chỉnh · Esc đóng',
|
|
119
|
+
|
|
120
|
+
// ---- right status rail --------------------------------------------------
|
|
121
|
+
'rail.model': 'MÔ HÌNH',
|
|
122
|
+
'rail.thinking': 'SUY LUẬN',
|
|
123
|
+
'rail.context': 'NGỮ CẢNH',
|
|
124
|
+
'rail.session': 'PHIÊN',
|
|
125
|
+
'rail.goal': 'MỤC TIÊU',
|
|
126
|
+
'rail.subagents': 'AGENT CON',
|
|
127
|
+
'rail.noData': '—',
|
|
128
|
+
'rail.percentUsed': 'đã dùng {percent}%',
|
|
129
|
+
'rail.tokens': '~{used} / {window} token',
|
|
130
|
+
'rail.cacheHit': 'cache trúng {percent}%',
|
|
131
|
+
'rail.breakdown': 'hệ thống {system} · công cụ {tools} · tin nhắn {messages}',
|
|
132
|
+
'rail.contextPending': 'hiện ra khi có báo cáo mức dùng',
|
|
133
|
+
'rail.subagentCounts': '{running} đang chạy · {total} tổng',
|
|
134
|
+
'rail.unreadable': '{label} (không đọc được)',
|
|
135
|
+
'rail.more': '… +{count} nữa',
|
|
136
|
+
'rail.round': ' · vòng {started}/{max}',
|
|
137
|
+
'goal.active': 'đang hoạt động',
|
|
138
|
+
'goal.paused': 'tạm dừng',
|
|
139
|
+
'goal.blocked': 'bị chặn',
|
|
140
|
+
'goal.complete': 'hoàn tất',
|
|
141
|
+
|
|
142
|
+
// ---- session stats window ----------------------------------------------
|
|
143
|
+
'stats.title': 'thống kê phiên',
|
|
144
|
+
'stats.hint': 'nhấp vào dải hoặc /stats',
|
|
145
|
+
'stats.usage': 'mức dùng',
|
|
146
|
+
'stats.duration': 'thời lượng',
|
|
147
|
+
'stats.speed': 'tốc độ',
|
|
148
|
+
'stats.tokens': 'token',
|
|
149
|
+
'stats.cache': 'cache',
|
|
150
|
+
'stats.context': 'ngữ cảnh',
|
|
151
|
+
'stats.noSteps': 'chưa có bước nào hoàn tất',
|
|
152
|
+
'stats.llmTime': 'LLM {value}',
|
|
153
|
+
'stats.toolTime': 'công cụ {value}',
|
|
154
|
+
'stats.ttft': 'TTFT trung bình {value}',
|
|
155
|
+
'stats.tokensPerSecond': '{value} tok/s',
|
|
156
|
+
'stats.cacheRate': 'cache {percent}%',
|
|
157
|
+
'stats.inOut': 'vào {input} · ra {output}',
|
|
158
|
+
'stats.cacheDetail': '{percent}% trúng · đọc {read} · ghi {write} · trượt {miss}',
|
|
159
|
+
'stats.contextUsed': 'đã dùng {percent}% ~{used} / {window}',
|
|
160
|
+
'stats.systemPrompt': 'lời nhắc hệ thống',
|
|
161
|
+
'stats.tools': 'công cụ',
|
|
162
|
+
'stats.messages': 'tin nhắn',
|
|
163
|
+
'stats.compositionUnavailable': 'không có dữ liệu thành phần',
|
|
164
|
+
'stats.contextPending': 'mức chiếm ngữ cảnh hiện ra khi một yêu cầu báo cáo mức dùng',
|
|
165
|
+
|
|
166
|
+
// ---- questions modal ----------------------------------------------------
|
|
167
|
+
'questions.title': 'Câu hỏi',
|
|
168
|
+
'questions.titleOf': 'Câu hỏi {index}/{total}',
|
|
169
|
+
'questions.defer': 'Esc để sau',
|
|
170
|
+
'questions.range': '{from}-{to} trên {total} PgUp/PgDn',
|
|
171
|
+
'questions.other': 'Khác: ',
|
|
172
|
+
'questions.answer': 'Trả lời: ',
|
|
173
|
+
'questions.placeholder': 'nhập câu trả lời của bạn',
|
|
174
|
+
'questions.hintCustom': 'Enter xác nhận · Esc quay lại',
|
|
175
|
+
'questions.hintMulti': 'Space bật/tắt · Enter tiếp tục · Lên/Xuống di chuyển',
|
|
176
|
+
'questions.hintSingle': 'Enter chọn · Lên/Xuống di chuyển',
|
|
177
|
+
|
|
178
|
+
// ---- secret prompt ------------------------------------------------------
|
|
179
|
+
'secret.hint': 'Enter để gửi · Esc để hủy',
|
|
180
|
+
|
|
181
|
+
// ---- boot gate: the dsh version this build may run on ----
|
|
182
|
+
'boot.unsupportedTitle': 'Phiên bản dsh không được hỗ trợ',
|
|
183
|
+
'boot.unverifiedTitle': 'Phiên bản dsh chưa được kiểm chứng',
|
|
184
|
+
'boot.runningLabel': 'dsh đang chạy',
|
|
185
|
+
'boot.supportedLabel': 'được hỗ trợ',
|
|
186
|
+
'boot.recommendedLabel': 'khuyến nghị',
|
|
187
|
+
'boot.verifiedLabel': 'đã kiểm chứng',
|
|
188
|
+
'boot.unsupportedBody': 'Bản dsh-oc-tui này chỉ hỗ trợ {range}, còn {version} nằm ngoài phạm vi đó. Phiên làm việc không thể chạy cho đến khi dsh dùng một phiên bản được hỗ trợ.',
|
|
189
|
+
'boot.unverifiedBody': 'Bản dsh-oc-tui này đã được kiểm chứng với {verified}, không phải {version}. Hãy cài {recommended} để chắc chắn hoạt động.',
|
|
190
|
+
'boot.installHint': 'Cài phiên bản dsh được khuyến nghị, rồi khởi động lại profile này:',
|
|
191
|
+
'boot.updatePluginHint': 'Nếu bản dsh-oc-tui mới hơn đã hỗ trợ dsh này, hãy cập nhật plugin:',
|
|
192
|
+
'boot.exitHint': 'Esc hoặc Ctrl+C để thoát',
|
|
193
|
+
|
|
194
|
+
// ---- settings dialog chrome --------------------------------------------
|
|
195
|
+
'settings.title': 'Cài đặt',
|
|
196
|
+
'settings.menu': 'MENU',
|
|
197
|
+
'settings.shared': 'Chia sẻ với DeepSeek Harness WebUI',
|
|
198
|
+
'settings.footerEdit': 'Enter lưu · Esc hủy',
|
|
199
|
+
'settings.footerMenu': '↑/↓ di chuyển · Tab menu · Enter chọn · Esc quay lại',
|
|
200
|
+
'settings.footerPlain': '↑/↓ di chuyển · Enter chọn · Esc quay lại',
|
|
201
|
+
'settings.confirmHint': '{text} · Y / N',
|
|
202
|
+
'settings.confirmDefault': 'Y xác nhận · N hủy',
|
|
203
|
+
'settings.confirmDeleteSession': 'Ctrl+D lần nữa để xóa',
|
|
204
|
+
'settings.confirmChange': 'Xác nhận thay đổi này?',
|
|
205
|
+
'settings.deleteTwice': 'Nhấn Ctrl+D lần nữa để xóa ',
|
|
206
|
+
'settings.deleteMcpTwice': 'Nhấn Delete lần nữa để gỡ ',
|
|
207
|
+
'settings.noSession': 'chưa chọn phiên',
|
|
208
|
+
'settings.noSessions': 'không có phiên nào',
|
|
209
|
+
'settings.noMcp': 'chưa chọn máy chủ MCP',
|
|
210
|
+
'settings.noOptions': 'không có tùy chọn cho {label}',
|
|
211
|
+
'settings.saved': 'đã lưu vào cài đặt DSH',
|
|
212
|
+
'settings.providerRemoved': 'đã gỡ nhà cung cấp',
|
|
213
|
+
'settings.conflict': 'cài đặt đã đổi ở nơi khác; đã tải lại',
|
|
214
|
+
'settings.error': 'cài đặt: {error}',
|
|
215
|
+
'settings.dshSettings': 'cài đặt DSH',
|
|
216
|
+
'settings.optionList': 'Enter chọn · Esc quay lại',
|
|
217
|
+
|
|
218
|
+
// ---- settings left menu -------------------------------------------------
|
|
219
|
+
'menu.main': 'Chính',
|
|
220
|
+
'menu.model': 'Mô hình',
|
|
221
|
+
'menu.update': 'Cập nhật',
|
|
222
|
+
'menu.mcp': 'MCP',
|
|
223
|
+
|
|
224
|
+
// ---- settings rows: main tab -------------------------------------------
|
|
225
|
+
'settings.general': 'Chung',
|
|
226
|
+
'settings.graphics': 'Đồ họa',
|
|
227
|
+
'settings.sessions': 'Phiên',
|
|
228
|
+
'settings.system': 'Hệ thống',
|
|
229
|
+
'settings.developer': 'Nhà phát triển',
|
|
230
|
+
'settings.contextDetails': 'Chi tiết ngữ cảnh',
|
|
231
|
+
'settings.busyEnter': 'Enter khi đang bận',
|
|
232
|
+
'settings.defaultPreset': 'Bộ đặt trước mặc định',
|
|
233
|
+
'settings.permissionPreset': 'Bộ đặt trước quyền',
|
|
234
|
+
'settings.permissionDangerConfirm': 'Bật truy cập không hạn chế vào công cụ và tệp?',
|
|
235
|
+
'settings.graphicsRendering': 'Kết xuất đồ họa',
|
|
236
|
+
'settings.noProtocolFallback': 'Dự phòng không giao thức',
|
|
237
|
+
'settings.imageHeightCap': 'Giới hạn chiều cao ảnh (dòng)',
|
|
238
|
+
'settings.mermaidRendering': 'Kết xuất mermaid',
|
|
239
|
+
'settings.newSession': 'Phiên mới',
|
|
240
|
+
'settings.manageSessions': 'Quản lý phiên',
|
|
241
|
+
'settings.providerConfig': 'Cấu hình API nhà cung cấp',
|
|
242
|
+
'settings.updateManager': 'Trình quản lý cập nhật',
|
|
243
|
+
'settings.settingsFile': 'Tệp cài đặt',
|
|
244
|
+
'settings.language': 'Ngôn ngữ',
|
|
245
|
+
'settings.theme': 'Chủ đề',
|
|
246
|
+
'theme.deepseek': 'DeepSeek Standard',
|
|
247
|
+
'theme.github-dark': 'GitHub Dark',
|
|
248
|
+
'theme.dracula': 'Dracula',
|
|
249
|
+
'theme.vscode-dark': 'VS Code Dark+',
|
|
250
|
+
'theme.nord': 'Nord',
|
|
251
|
+
'settings.languageSystem': 'Hệ thống ({language})',
|
|
252
|
+
'settings.languageSaved': 'ngôn ngữ: {language}',
|
|
253
|
+
|
|
254
|
+
// ---- model tab ----------------------------------------------------------
|
|
255
|
+
'model.title': 'Mô hình',
|
|
256
|
+
'model.subtitle': 'Enter đặt mô hình trong danh sách làm mặc định',
|
|
257
|
+
'model.defaultSection': 'Mặc định',
|
|
258
|
+
'model.defaultProvider': 'Nhà cung cấp mặc định',
|
|
259
|
+
'model.defaultModel': 'Mô hình mặc định',
|
|
260
|
+
'model.reasoning': 'Suy luận',
|
|
261
|
+
'model.providerUrl': 'URL nhà cung cấp',
|
|
262
|
+
'model.providerApiKey': 'Khóa API nhà cung cấp',
|
|
263
|
+
'model.displayName': 'Tên hiển thị',
|
|
264
|
+
'model.wireProtocol': 'Giao thức truyền',
|
|
265
|
+
'model.defaultImageInput': 'Đầu vào ảnh mặc định',
|
|
266
|
+
'model.models': 'Mô hình',
|
|
267
|
+
'model.fetch': 'tải…',
|
|
268
|
+
'model.selectedCount': 'đã chọn {count}',
|
|
269
|
+
'model.removeProvider': 'Gỡ nhà cung cấp',
|
|
270
|
+
'model.removeProviderConfirm': 'Gỡ {name} và thông tin xác thực do nó quản lý?',
|
|
271
|
+
'model.noModels': 'không có mô hình nào',
|
|
272
|
+
'model.noModelsReturned': 'nhà cung cấp không trả về mô hình nào',
|
|
273
|
+
'model.fetchUnavailable': 'không tự tải được — mô hình đã lưu · Enter bật/tắt',
|
|
274
|
+
'model.fetchOk': 'đã tự tải · Enter bật/tắt · Esc quay lại',
|
|
275
|
+
'model.fetching': 'Đang tải mô hình…',
|
|
276
|
+
'model.autoFetching': 'đang tự tải…',
|
|
277
|
+
'model.credentialConfigured': 'đã cấu hình ({source})',
|
|
278
|
+
'model.credentialMissing': 'chưa cấu hình',
|
|
279
|
+
'model.defaultTag': 'mặc định',
|
|
280
|
+
'model.providerUnavailable': 'nhà cung cấp không còn khả dụng',
|
|
281
|
+
'model.namespaceUnavailable': 'không gian tên cài đặt nhà cung cấp không khả dụng',
|
|
282
|
+
'model.apiKeyEmpty': 'khóa API không được để trống',
|
|
283
|
+
'model.credentialsUnavailable': 'dịch vụ thông tin xác thực không khả dụng',
|
|
284
|
+
'model.noProviderModels': 'nhà cung cấp đã chọn không có mô hình nào',
|
|
285
|
+
'model.addCount.one': '{count} khả dụng',
|
|
286
|
+
'model.addCount.other': '{count} khả dụng',
|
|
287
|
+
|
|
288
|
+
// ---- add-provider flow --------------------------------------------------
|
|
289
|
+
'provider.add': 'Thêm nhà cung cấp',
|
|
290
|
+
'provider.empty': 'chưa cấu hình nhà cung cấp nào',
|
|
291
|
+
'provider.pickSubtitle': 'Enter chọn · Esc quay lại',
|
|
292
|
+
'provider.catalog': 'Nhà cung cấp đã cài',
|
|
293
|
+
'provider.catalogEmpty': 'mọi nhà cung cấp đã cài đều đã được cấu hình',
|
|
294
|
+
'provider.custom': 'API tùy chỉnh — tự khai báo điểm cuối',
|
|
295
|
+
'provider.form.catalog': 'Dùng nhà cung cấp đã cài',
|
|
296
|
+
'provider.form.custom': 'Khai báo nhà cung cấp tùy chỉnh',
|
|
297
|
+
'provider.formSubtitle': 'Enter sửa · Esc quay lại',
|
|
298
|
+
'provider.field.route': 'ID tuyến',
|
|
299
|
+
'provider.field.addModel': 'Thêm ID mô hình',
|
|
300
|
+
'provider.field.save': 'Lưu nhà cung cấp',
|
|
301
|
+
'provider.hint.route': 'chữ thường, số và gạch nối · khóa lưu thành {ref}',
|
|
302
|
+
'provider.error.route': 'ID tuyến phải bắt đầu bằng chữ cái và chỉ dùng chữ thường, số, gạch nối',
|
|
303
|
+
'provider.error.routeNeeded': 'hãy chọn một nhà cung cấp',
|
|
304
|
+
'provider.error.taken': 'đã có nhà cung cấp dùng ID tuyến này',
|
|
305
|
+
'provider.error.baseUrl': 'điểm cuối phải là URL http hoặc https',
|
|
306
|
+
'provider.error.baseUrlNeeded': 'nhà cung cấp tùy chỉnh cần một điểm cuối',
|
|
307
|
+
'provider.error.apiNeeded': 'hãy chọn giao thức mà điểm cuối này dùng',
|
|
308
|
+
'provider.error.modelsNeeded': 'nhà cung cấp tùy chỉnh cần ít nhất một mô hình',
|
|
309
|
+
'provider.error.modelId': 'mô hình {index} cần một ID',
|
|
310
|
+
'provider.error.modelDuplicate': 'mô hình "{id}" bị lặp',
|
|
311
|
+
'provider.added': 'đã thêm nhà cung cấp',
|
|
312
|
+
'provider.accountManaged': 'đã đăng nhập bằng tài khoản DeepSeek',
|
|
313
|
+
'provider.search': 'Tìm kiếm',
|
|
314
|
+
'provider.searchPlaceholder': 'nhập để lọc',
|
|
315
|
+
'provider.searchEmpty': 'không có nhà cung cấp nào khớp "{query}"',
|
|
316
|
+
|
|
317
|
+
// ---- một mục mô hình -------------------------------------------------------
|
|
318
|
+
'model.edit': 'Sửa mô hình',
|
|
319
|
+
'model.editHint': 'e sửa · Del xóa',
|
|
320
|
+
'model.refresh': 'Làm mới danh mục',
|
|
321
|
+
'model.selectAll': 'Chọn tất cả',
|
|
322
|
+
'model.fetchRefused': 'điểm cuối không trả về danh sách mô hình nào',
|
|
323
|
+
'model.notSaved': 'mô hình này chưa được lưu',
|
|
324
|
+
'model.removed': 'đã xóa mô hình',
|
|
325
|
+
'model.form.add': 'Thêm mô hình',
|
|
326
|
+
'model.form.edit': 'Mô hình · {id}',
|
|
327
|
+
'model.form.save': 'Lưu mô hình',
|
|
328
|
+
'model.form.remove': 'Bỏ khỏi nhà cung cấp',
|
|
329
|
+
'model.form.removeConfirm': 'Bỏ mô hình này khỏi nhà cung cấp?',
|
|
330
|
+
'model.field.id': 'ID mô hình',
|
|
331
|
+
'model.field.name': 'Tên hiển thị',
|
|
332
|
+
'model.field.contextWindow': 'Cửa sổ ngữ cảnh',
|
|
333
|
+
'model.field.maxTokens': 'Token đầu ra tối đa',
|
|
334
|
+
'model.field.input': 'Đầu vào',
|
|
335
|
+
'model.error.idNeeded': 'mô hình cần một ID',
|
|
336
|
+
'model.error.idDuplicate': 'mô hình "{id}" đã có trong danh sách',
|
|
337
|
+
'model.error.capacity': 'cửa sổ ngữ cảnh và token tối đa phải là số nguyên (256K, 1M)',
|
|
338
|
+
|
|
339
|
+
// ---- MCP tab ------------------------------------------------------------
|
|
340
|
+
'mcp.title': 'MCP',
|
|
341
|
+
'mcp.subtitle': 'Enter sửa · Del gỡ · Esc quay lại',
|
|
342
|
+
'mcp.editSubtitle': 'Enter sửa · Esc quay lại',
|
|
343
|
+
'mcp.servers': 'Máy chủ MCP',
|
|
344
|
+
'mcp.empty': 'Chưa cấu hình máy chủ MCP',
|
|
345
|
+
'mcp.add': 'Thêm máy chủ MCP',
|
|
346
|
+
'mcp.scope': 'phạm vi',
|
|
347
|
+
'mcp.scopeUserPrefix': 'người dùng · {path}',
|
|
348
|
+
'mcp.scopePathPrefix': 'đường dẫn · {path}',
|
|
349
|
+
'mcp.configFiles': 'Tệp cấu hình',
|
|
350
|
+
'mcp.userScope': 'người dùng (mọi phiên)',
|
|
351
|
+
'mcp.secrets': 'Bí mật',
|
|
352
|
+
'mcp.secretsPlain': 'văn bản thuần trong tệp cấu hình',
|
|
353
|
+
'mcp.loaded': 'đã nạp',
|
|
354
|
+
'mcp.notCreated': 'chưa tạo',
|
|
355
|
+
'mcp.type.stdio': 'Lệnh cục bộ',
|
|
356
|
+
'mcp.type.http': 'HTTP',
|
|
357
|
+
'mcp.type.sse': 'SSE',
|
|
358
|
+
'mcp.state.connected': '● đã kết nối',
|
|
359
|
+
'mcp.state.tools.one': '● {count} công cụ',
|
|
360
|
+
'mcp.state.tools.other': '● {count} công cụ',
|
|
361
|
+
'mcp.state.pending': '… đang kết nối',
|
|
362
|
+
'mcp.state.disabled': '○ đã tắt',
|
|
363
|
+
'mcp.state.idle': '○ chưa kết nối',
|
|
364
|
+
'mcp.notice.connected': "MCP {name}: đã kết nối",
|
|
365
|
+
'mcp.notice.failed': "MCP {name}: kết nối thất bại",
|
|
366
|
+
'mcp.form.add': 'Thêm máy chủ MCP',
|
|
367
|
+
'mcp.form.edit': 'Sửa máy chủ MCP · {name}',
|
|
368
|
+
'mcp.titleAdd': 'MCP · thêm',
|
|
369
|
+
'mcp.titleEdit': 'MCP · sửa',
|
|
370
|
+
'mcp.field.name': 'Tên',
|
|
371
|
+
'mcp.field.type': 'Loại',
|
|
372
|
+
'mcp.field.timeout': 'Thời gian chờ (ms)',
|
|
373
|
+
'mcp.field.command': 'Lệnh',
|
|
374
|
+
'mcp.field.args': 'Đối số',
|
|
375
|
+
'mcp.field.env': 'Biến môi trường (JSON)',
|
|
376
|
+
'mcp.field.url': 'URL',
|
|
377
|
+
'mcp.field.headers': 'Header (JSON)',
|
|
378
|
+
'mcp.field.scope': 'Phạm vi',
|
|
379
|
+
'mcp.field.path': 'Đường dẫn',
|
|
380
|
+
'mcp.field.enabled': 'Bật',
|
|
381
|
+
'mcp.field.save': 'Lưu',
|
|
382
|
+
'mcp.field.remove': 'Gỡ',
|
|
383
|
+
'mcp.choice.stdio': 'Lệnh cục bộ (stdio)',
|
|
384
|
+
'mcp.choice.http': 'HTTP (streamable)',
|
|
385
|
+
'mcp.choice.sse': 'SSE (HTTP+SSE cũ)',
|
|
386
|
+
'mcp.choice.scopeUser': 'Người dùng — mọi phiên',
|
|
387
|
+
'mcp.choice.scopePath': 'Đường dẫn — các phiên trong một thư mục',
|
|
388
|
+
'mcp.removeConfirm': 'Gỡ máy chủ MCP này và ngắt kết nối?',
|
|
389
|
+
'mcp.saved': 'Đã lưu máy chủ MCP',
|
|
390
|
+
'mcp.added': 'Đã thêm máy chủ MCP',
|
|
391
|
+
'mcp.removed': 'Đã gỡ máy chủ MCP',
|
|
392
|
+
'mcp.error.name': 'tên phải dài 1-32 ký tự chữ, số, "-" hoặc "_"',
|
|
393
|
+
'mcp.error.duplicate': 'đã có máy chủ MCP tên "{name}" được cấu hình',
|
|
394
|
+
'mcp.error.timeout': 'timeoutMs phải là số nguyên từ 1 đến {max}',
|
|
395
|
+
'mcp.error.pathNeeded': 'máy chủ theo phạm vi đường dẫn cần một thư mục',
|
|
396
|
+
'mcp.error.pathAbsolute': 'phạm vi đường dẫn phải là thư mục tuyệt đối',
|
|
397
|
+
'mcp.error.commandNeeded': 'máy chủ stdio cần một lệnh',
|
|
398
|
+
'mcp.error.urlParse': 'không phân tích được URL',
|
|
399
|
+
'mcp.error.urlScheme': 'URL phải dùng http hoặc https',
|
|
400
|
+
'mcp.error.pathNotDir': 'phạm vi đường dẫn không phải thư mục: {path}',
|
|
401
|
+
'mcp.error.configIsDir': 'đường dẫn tệp cấu hình là một thư mục: {path}',
|
|
402
|
+
'mcp.error.notFound': 'không có máy chủ MCP tên "{name}" được cấu hình',
|
|
403
|
+
'mcp.error.documentGone': 'tài liệu định nghĩa "{name}" đã biến mất: {error}',
|
|
404
|
+
'mcp.error.noClient': 'host không cung cấp MCP client',
|
|
405
|
+
'mcp.error.connectTimeout': 'kết nối tới {name} quá thời gian chờ',
|
|
406
|
+
'mcp.error.json': 'tài liệu không phải JSON hợp lệ: {error}',
|
|
407
|
+
'mcp.error.jsonObject': 'tài liệu phải là một đối tượng JSON',
|
|
408
|
+
'mcp.error.serversObject': '"servers" phải là một đối tượng JSON',
|
|
409
|
+
'mcp.error.argsArray': 'đối số phải là một mảng JSON gồm các chuỗi',
|
|
410
|
+
'mcp.error.argsTypes': 'đối số phải là chuỗi hoặc số',
|
|
411
|
+
'mcp.error.argsUnclosed': 'đối số có dấu ngoặc kép chưa đóng',
|
|
412
|
+
'mcp.error.envObject': '{label} phải là một đối tượng JSON',
|
|
413
|
+
'mcp.error.envValue': 'giá trị "{name}" của {label} phải là chuỗi, số hoặc boolean',
|
|
414
|
+
'mcp.error.header': 'header HTTP không hợp lệ "{name}"',
|
|
415
|
+
'mcp.error.envName': 'tên biến môi trường không hợp lệ "{name}"',
|
|
416
|
+
|
|
417
|
+
// ---- rewind -------------------------------------------------------------
|
|
418
|
+
'rewind.title': 'Quay lui',
|
|
419
|
+
'rewind.restoreTo': 'Khôi phục về trạng thái trước: {label}',
|
|
420
|
+
'rewind.restorePrompt': 'Khôi phục cuộc hội thoại về trạng thái trước…',
|
|
421
|
+
'rewind.empty': 'Chưa có gì để quay lui.',
|
|
422
|
+
'rewind.option.conversation': 'Khôi phục hội thoại',
|
|
423
|
+
'rewind.option.both': 'Khôi phục hội thoại và tệp',
|
|
424
|
+
'rewind.option.code': 'Khôi phục tệp',
|
|
425
|
+
'rewind.option.cancel': 'Hủy',
|
|
426
|
+
'rewind.current': '(hiện tại)',
|
|
427
|
+
'rewind.noPoints': 'không có tin nhắn người dùng để quay lui',
|
|
428
|
+
'rewind.unknownPoint': 'điểm quay lui không rõ "{selector}" — dùng số hoặc last',
|
|
429
|
+
'rewind.noPoint': 'không có điểm quay lui {n} — 1..{count}',
|
|
430
|
+
'rewind.notGit': 'không phải worktree git',
|
|
431
|
+
'rewind.noBackup': 'không có vị trí sao lưu',
|
|
432
|
+
'rewind.filesNotRestored': 'tệp chưa được khôi phục',
|
|
433
|
+
'rewind.filesNotRestoredReason': 'tệp chưa được khôi phục ({reason})',
|
|
434
|
+
'rewind.restored.one': 'đã khôi phục {count} tệp được theo dõi từ HEAD',
|
|
435
|
+
'rewind.restored.other': 'đã khôi phục {count} tệp được theo dõi từ HEAD',
|
|
436
|
+
'rewind.removed.one': 'đã xóa {count} tệp mới',
|
|
437
|
+
'rewind.removed.other': 'đã xóa {count} tệp mới',
|
|
438
|
+
'rewind.skipped': 'đã bỏ qua {count}',
|
|
439
|
+
'rewind.previousSaved': 'nội dung trước đã lưu trong {path}',
|
|
440
|
+
'rewind.noChanges': 'không có thay đổi tệp sau điểm này',
|
|
441
|
+
'rewind.image': '[ảnh]',
|
|
442
|
+
'rewind.images': '[{count} ảnh]',
|
|
443
|
+
'rewind.emptyMessage': '(trống)',
|
|
444
|
+
'git.title': 'Nhánh Git',
|
|
445
|
+
'git.subtitle': 'Hiện tại: {branch} · {path}',
|
|
446
|
+
'git.local': 'Nhánh cục bộ',
|
|
447
|
+
'git.remote': 'Nhánh từ xa',
|
|
448
|
+
'git.empty': 'Không có nhánh nào trong kho này.',
|
|
449
|
+
'git.detached': '(tách rời)',
|
|
450
|
+
'git.switched': 'Đã chuyển sang nhánh {branch}',
|
|
451
|
+
'git.switchFailed': 'Không thể chuyển sang {branch}: {error}',
|
|
452
|
+
'git.pullDone': 'Đã kéo các bản cập nhật',
|
|
453
|
+
'git.pullFailed': 'Không thể kéo các bản cập nhật: {error}',
|
|
454
|
+
'git.listFailed': 'Không thể liệt kê các nhánh: {error}',
|
|
455
|
+
'git.notRepo': 'không phải cây làm việc git',
|
|
456
|
+
'git.gitMissing': 'git không có sẵn trong PATH',
|
|
457
|
+
'git.timedOut': 'git đã hết thời gian chờ',
|
|
458
|
+
'git.onlyTitleScreen': 'Chuyển nhánh chỉ khả dụng trên trang trống — dùng /new để rời phiên',
|
|
459
|
+
'git.footer': '↑/↓ chọn · Enter chuyển · P pull · R làm mới · Esc đóng',
|
|
460
|
+
|
|
461
|
+
// ---- update tab ---------------------------------------------------------
|
|
462
|
+
'update.title': 'Cập nhật',
|
|
463
|
+
'update.checking': 'Đang kiểm tra phiên bản…',
|
|
464
|
+
'update.fetching': 'đang tải từ npm registry…',
|
|
465
|
+
'update.fetchingVersions': 'Đang tải danh sách phiên bản…',
|
|
466
|
+
'update.versionsSubtitle': 'Enter tải · Esc quay lại',
|
|
467
|
+
'update.installed': 'Đã cài',
|
|
468
|
+
'update.latest': 'Mới nhất (tag npm)',
|
|
469
|
+
'update.status': 'Trạng thái',
|
|
470
|
+
'update.versions': 'Phiên bản',
|
|
471
|
+
'update.selectVersion': 'Chọn phiên bản…',
|
|
472
|
+
'update.restartApply': 'Khởi động lại để áp dụng {version}',
|
|
473
|
+
'update.enterRestart': 'Enter khởi động lại',
|
|
474
|
+
'update.discard': 'Hủy bản đã tải {version}',
|
|
475
|
+
'update.actions': 'Hành động',
|
|
476
|
+
'update.checkNow': 'Kiểm tra ngay',
|
|
477
|
+
'update.checkingShort': 'Đang kiểm tra…',
|
|
478
|
+
'update.startupCheck': 'Kiểm tra khi khởi động',
|
|
479
|
+
'update.profile': 'profile',
|
|
480
|
+
'update.dshPackage': 'dsh (@deepseek-ai/dsh)',
|
|
481
|
+
'update.statusCorrupt': 'Bản cài bị hỏng — cài lại bên dưới',
|
|
482
|
+
'update.statusError': 'Kiểm tra registry thất bại: {error}',
|
|
483
|
+
'update.statusAvailable': 'Có bản cập nhật → {version}',
|
|
484
|
+
'update.statusUpToDate': 'Đã là mới nhất',
|
|
485
|
+
'update.statusNoStable': 'Không có bản phát hành ổn định — chọn trong Phiên bản',
|
|
486
|
+
'update.notOnPath': 'không tìm thấy trên PATH',
|
|
487
|
+
'update.subtitleStaged': 'Đã tải {package} {version} — khởi động lại để áp dụng',
|
|
488
|
+
'update.subtitleIdle': 'Enter chọn · tải xuống, rồi khởi động lại để áp dụng',
|
|
489
|
+
'update.download': 'Tải xuống',
|
|
490
|
+
'update.contacting': 'đang liên hệ registry…',
|
|
491
|
+
'update.version': 'Phiên bản',
|
|
492
|
+
'update.savingTo': 'Đang lưu vào',
|
|
493
|
+
'update.escCancels': 'Esc hủy',
|
|
494
|
+
'update.restartApplyQ': 'Khởi động lại để áp dụng {label} {version}? (đã tải xong)',
|
|
495
|
+
'update.downloadQ': 'Tải {label} {version} và khởi động lại để áp dụng?',
|
|
496
|
+
'update.localSwitch': ' — chuyển bản cài cục bộ sang một phiên bản trên registry',
|
|
497
|
+
'update.downloaded': 'đã tải · khởi động lại để áp dụng',
|
|
498
|
+
'update.downloadedToast': 'Đã tải {label} {version} · áp dụng từ tab Cập nhật',
|
|
499
|
+
'update.downloadedConfirm': 'Đã tải khởi động lại để áp dụng {label} {version}? (y/n)',
|
|
500
|
+
'update.alreadyDownloadedConfirm': 'Đã tải rồi · khởi động lại để áp dụng {label} {version}? (y/n)',
|
|
501
|
+
'update.downloadCancelled': 'đã hủy tải xuống',
|
|
502
|
+
'update.downloadFailed': 'tải xuống thất bại: {error}',
|
|
503
|
+
'update.stagedGone': 'bản tải đang chờ không còn — chọn lại phiên bản',
|
|
504
|
+
'update.locks.one': 'không thể áp dụng khi dsh đang chạy trong {count} tiến trình khác — hãy đóng rồi thử lại',
|
|
505
|
+
'update.locks.other': 'không thể áp dụng khi dsh đang chạy trong {count} tiến trình khác — hãy đóng rồi thử lại',
|
|
506
|
+
'update.noNpm': 'không thể áp dụng: không tìm thấy npm',
|
|
507
|
+
'update.noDshCli': 'không thể áp dụng: không tìm thấy dsh CLI',
|
|
508
|
+
'update.installerFailed': 'không khởi chạy được trình cài đặt — khởi động lại dsh để áp dụng {label}',
|
|
509
|
+
'update.applying': 'đang áp dụng {label} · thoát và khởi động lại…',
|
|
510
|
+
'update.stagedDiscarded': 'đã hủy bản tải đang chờ',
|
|
511
|
+
'update.tagCached': 'trong cache',
|
|
512
|
+
'update.tagStaged': 'đã tải',
|
|
513
|
+
'update.installFailed': 'Cài đặt thất bại (mã {code}) — thử lại từ Phiên bản',
|
|
514
|
+
'update.installFailedRetry': 'mở Cập nhật → dsh-oc-tui → Phiên bản, rồi chọn một phiên bản để tải lại',
|
|
515
|
+
'update.installUnreadable': 'cài đặt báo thành công nhưng phiên bản đã cài là {installed} (mong đợi {expected}) — sửa: {repair}',
|
|
516
|
+
'update.registryUnreachable': 'không kết nối được registry: {error}',
|
|
517
|
+
'update.notOnRegistry': '{package} không có trên registry',
|
|
518
|
+
'update.registryHttp': 'registry trả về HTTP {status} cho {package}',
|
|
519
|
+
'update.noTarballUrl': 'phản hồi registry không có URL tarball',
|
|
520
|
+
'update.downloadHttp': 'tải xuống thất bại: HTTP {status} cho {url}',
|
|
521
|
+
'update.downloadEmpty': 'tải xuống thất bại: phản hồi rỗng',
|
|
522
|
+
'update.integrityFailed': 'kiểm tra toàn vẹn thất bại cho {file} — đã hủy bản tải',
|
|
523
|
+
'update.npmMissing': 'không tìm thấy npm trên PATH',
|
|
524
|
+
'update.npmViewFailed': 'npm view {package} thoát với mã {code}',
|
|
525
|
+
'update.timedOut': '\n(quá thời gian sau {ms}ms)',
|
|
526
|
+
'update.noOutput': '(không có đầu ra)',
|
|
527
|
+
|
|
528
|
+
// ---- commands -----------------------------------------------------------
|
|
529
|
+
'command.settings': 'Mở các trang cài đặt TUI',
|
|
530
|
+
'command.help': 'Hiện tham chiếu phím và lệnh của TUI',
|
|
531
|
+
'command.stats': 'Hiện thống kê token và cache của phiên',
|
|
532
|
+
'command.new': 'Bắt đầu phiên mới',
|
|
533
|
+
'command.resume': 'Tiếp tục một phiên đã lưu',
|
|
534
|
+
'command.clear': 'Xóa nội dung hội thoại',
|
|
535
|
+
'command.cancel': 'Hủy lượt đang chạy',
|
|
536
|
+
'command.rewind': 'Quay lui phiên về một điểm trước đó',
|
|
537
|
+
'command.branch': 'Chuyển nhánh git trên trang trống',
|
|
538
|
+
'command.quit': 'Thoát TUI',
|
|
539
|
+
|
|
540
|
+
// ---- help overlay -------------------------------------------------------
|
|
541
|
+
'help.title': 'DeepSeek Harness TUI — trợ giúp',
|
|
542
|
+
'help.enter': 'Enter',
|
|
543
|
+
'help.enterDesc': 'gửi tin nhắn',
|
|
544
|
+
'help.ctrlEnter': 'Ctrl+Enter',
|
|
545
|
+
'help.ctrlEnterDesc': 'chèn dòng mới',
|
|
546
|
+
'help.ctrlC': 'Ctrl+C',
|
|
547
|
+
'help.ctrlCDesc': 'hủy lượt đang chạy; nhấn lần nữa để thoát',
|
|
548
|
+
'help.ctrlP': 'Ctrl+P',
|
|
549
|
+
'help.ctrlPDesc': 'mở cài đặt',
|
|
550
|
+
'help.ctrlE': 'Ctrl+E',
|
|
551
|
+
'help.ctrlEDesc': 'bật/tắt thanh suy luận',
|
|
552
|
+
'help.tab': 'Tab',
|
|
553
|
+
'help.tabDesc': 'chuyển mức suy luận',
|
|
554
|
+
'help.ctrlN': 'Ctrl+N',
|
|
555
|
+
'help.ctrlNDesc': 'phiên mới',
|
|
556
|
+
'help.ctrlG': 'Ctrl+G',
|
|
557
|
+
'help.ctrlGDesc': 'chuyển nhánh git (trang trống)',
|
|
558
|
+
'help.ctrlD': 'Ctrl+D',
|
|
559
|
+
'help.ctrlDDesc': 'xóa phiên trong Quản lý phiên (nhấn hai lần)',
|
|
560
|
+
'help.pg': 'PgUp / PgDn',
|
|
561
|
+
'help.pgDesc': 'cuộn hội thoại',
|
|
562
|
+
'help.shiftArrows': 'Shift+↑/↓',
|
|
563
|
+
'help.shiftArrowsDesc': 'cuộn thanh trạng thái (cửa sổ rộng)',
|
|
564
|
+
'help.upDown': 'Up / Down',
|
|
565
|
+
'help.upDownDesc': 'con trỏ lên/xuống; lịch sử ở hai đầu',
|
|
566
|
+
'help.mouse': 'Mouse drag',
|
|
567
|
+
'help.mouseDesc': 'chọn văn bản; nhấp chuột phải để sao chép',
|
|
568
|
+
'help.wheel': 'Wheel',
|
|
569
|
+
'help.wheelDesc': 'cuộn hội thoại / cài đặt',
|
|
570
|
+
'help.escEsc': 'Esc Esc',
|
|
571
|
+
'help.escEscDesc': 'chọn điểm quay lui',
|
|
572
|
+
'help.esc': 'Esc',
|
|
573
|
+
'help.escDesc': 'đóng lớp phủ · hủy lượt · xóa lời nhắc',
|
|
574
|
+
'help.commands': 'Lệnh:',
|
|
575
|
+
|
|
576
|
+
// ---- session manager / toasts ------------------------------------------
|
|
577
|
+
'session.newTitle': 'Phiên mới',
|
|
578
|
+
'session.noSaved': 'Không có phiên đã lưu',
|
|
579
|
+
'session.manageTitle': 'Quản lý phiên',
|
|
580
|
+
'session.manageSubtitle': 'Enter mở · Ctrl+D hai lần để xóa · Esc quay lại',
|
|
581
|
+
'session.loading': 'Đang tải phiên...',
|
|
582
|
+
'session.deleted': 'đã xóa phiên {label}',
|
|
583
|
+
'session.deleteFailed': 'xóa phiên: {error}',
|
|
584
|
+
'session.deleteNotFound': 'không tìm thấy thư mục phiên đã lưu',
|
|
585
|
+
'session.deleteCancelled': 'đã hủy xóa',
|
|
586
|
+
'session.resumed': 'đã tiếp tục phiên {id}',
|
|
587
|
+
'session.started': 'đã bắt đầu phiên {id}',
|
|
588
|
+
'session.openFailed': 'không mở được phiên: {error}',
|
|
589
|
+
'session.forkSummary': '{label} từ {parent} · {files}',
|
|
590
|
+
'session.forkDropped': ' · đã bỏ {count} đầu vào đang chờ kế thừa',
|
|
591
|
+
'session.conversationOnly': 'chỉ hội thoại',
|
|
592
|
+
'session.rewindLabel': 'quay lui #{n}',
|
|
593
|
+
'session.files': 'tệp: {summary}',
|
|
594
|
+
'session.error': 'lỗi: {error}',
|
|
595
|
+
'session.interruptFirst': 'hãy ngắt lượt đang chạy trước (/cancel)',
|
|
596
|
+
'session.interruptFirstEsc': 'hãy ngắt lượt đang chạy trước (Esc hoặc /cancel)',
|
|
597
|
+
'session.startFirst': 'hãy bắt đầu một phiên trước',
|
|
598
|
+
'session.noReasoningLevels': 'mô hình hiện tại không có mức suy luận',
|
|
599
|
+
'session.settingsUnavailable': 'cài đặt không khả dụng',
|
|
600
|
+
'session.interruptRequested': 'đã yêu cầu ngắt',
|
|
601
|
+
'session.nothingToInterrupt': 'không có gì để ngắt',
|
|
602
|
+
'session.noSessionRunning': 'không có phiên nào đang chạy',
|
|
603
|
+
'session.promptCleared': 'đã xóa lời nhắc',
|
|
604
|
+
'session.exitAgain': 'nhấn Ctrl+C lần nữa để thoát',
|
|
605
|
+
'session.usageResume': 'cách dùng: /resume <sessionId>',
|
|
606
|
+
'session.currentModel': 'mô hình hiện tại: {model}',
|
|
607
|
+
'session.modelSet': 'đã đặt mô hình thành {model} (áp dụng cho yêu cầu tiếp theo)',
|
|
608
|
+
'session.currentProvider': 'nhà cung cấp hiện tại: {provider}',
|
|
609
|
+
'session.providerSet': 'đã đặt nhà cung cấp thành {provider} (áp dụng cho yêu cầu tiếp theo)',
|
|
610
|
+
'session.unknownCommand': 'lệnh không rõ /{name} — thử /help',
|
|
611
|
+
'session.queryMissing': 'truy vấn phiên không được gắn trong profile này',
|
|
612
|
+
'session.listHeader': 'các phiên:',
|
|
613
|
+
'session.noPersisted': 'không có phiên đã lưu',
|
|
614
|
+
'session.listFailed': 'không liệt kê được phiên: {error}',
|
|
615
|
+
'session.modelNoImages': 'mô hình "{model}" không hỗ trợ đầu vào ảnh',
|
|
616
|
+
'session.imageAttachFailed': 'đính kèm ảnh thất bại: {error}',
|
|
617
|
+
'session.attachmentsUnavailable': 'dịch vụ đính kèm không khả dụng; không đọc được ảnh',
|
|
618
|
+
'session.copied.one': 'đã sao chép {count} dòng vào clipboard',
|
|
619
|
+
'session.copied.other': 'đã sao chép {count} dòng vào clipboard',
|
|
620
|
+
'session.valueRequired': 'cần một giá trị',
|
|
621
|
+
'session.minChars': 'ít nhất {count} ký tự',
|
|
622
|
+
'session.maxChars': 'nhiều nhất {count} ký tự',
|
|
623
|
+
'session.answerRequired': 'chọn một tùy chọn hoặc nhập câu trả lời',
|
|
624
|
+
'session.typeAnswer': 'nhập câu trả lời hoặc nhấn Esc',
|
|
625
|
+
'session.updatesAvailable': 'Cập nhật: {list} — Ctrl+P → Cập nhật',
|
|
626
|
+
'session.versionsError': 'phiên bản: {error}',
|
|
627
|
+
'session.mcpError': 'MCP: {error}',
|
|
628
|
+
'session.noClipboard': 'không có đường dẫn clipboard',
|
|
629
|
+
'session.unsupportedInteraction': 'loại tương tác không được hỗ trợ: {kind}',
|
|
630
|
+
|
|
631
|
+
// ---- tool activity summaries -------------------------------------------
|
|
632
|
+
'tool.run': 'chạy {command}',
|
|
633
|
+
'tool.askUser': 'hỏi người dùng',
|
|
634
|
+
'tool.askQuestions': 'hỏi {count} câu',
|
|
606
635
|
|
|
607
636
|
// ---- host diagnostics ----------------------------------------------------
|
|
608
637
|
'diagnostics.notice': 'Đã ghi chẩn đoán của host vào {path}',
|
|
609
|
-
|
|
638
|
+
|
|
639
|
+
// ---- screenshots --------------------------------------------------------
|
|
640
|
+
"screenshot.shortcut": "Ảnh chụp màn hình",
|
|
641
|
+
"screenshot.directory": "Thư mục ảnh chụp",
|
|
642
|
+
"screenshot.saved": "Đã lưu ảnh chụp",
|
|
643
|
+
"screenshot.failed": "Không thể chụp màn hình",
|
|
644
|
+
}
|