@dickpy/dsh-imagegen 1.5.2 → 1.5.4
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 +23 -2
- package/lib/client.js +5803 -1942
- package/lib/client.js.map +1 -1
- package/lib/index.js +1151 -33
- package/package.json +1 -1
- package/src/canvas-store.ts +376 -0
- package/src/client/CanvasWorkspace.tsx +1569 -0
- package/src/client/ImageGenPanel.tsx +164 -96
- package/src/client/SettingsCard.tsx +182 -4
- package/src/client/api.ts +48 -1
- package/src/client/canvas-workspace.module.css +929 -0
- package/src/client/helpers.ts +71 -33
- package/src/client/index.ts +59 -7
- package/src/client/locales.ts +1452 -772
- package/src/client/panel.module.css +83 -33
- package/src/client/use-language.ts +14 -0
- package/src/engine.ts +302 -12
- package/src/gallery-store.ts +5 -0
- package/src/generation-runtime.ts +1 -0
- package/src/history-store.ts +5 -0
- package/src/index.ts +71 -4
- package/src/model-catalog.ts +10 -1
- package/src/presets.ts +15 -0
- package/src/protocol.ts +121 -1
- package/src/routes.ts +231 -1
- package/src/storage-sync.ts +105 -0
package/src/client/locales.ts
CHANGED
|
@@ -1,772 +1,1452 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* dsh-imagegen surface copy: zh is the key source, en mirrors every key.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export const zh = {
|
|
6
|
-
'entry.label': 'AI 生图',
|
|
7
|
-
'entry.tooltip': 'AI 生图面板(gpt-image-2 / glm-image / grok-imagine-image / nanobanana / seedream 系列)',
|
|
8
|
-
'entry.newSession': '新会话',
|
|
9
|
-
'entry.newSessionTooltip': '创建一个新的 DSH 会话',
|
|
10
|
-
'entry.image': '生图',
|
|
11
|
-
'panel.title': 'AI 生图',
|
|
12
|
-
'panel.githubTip': '觉得好用或有建议?欢迎来 GitHub 提 issues、点个 star 支持一下!',
|
|
13
|
-
'conversation.add': '加入对话',
|
|
14
|
-
'conversation.adding': '加入中…',
|
|
15
|
-
'conversation.added': '图片已加入当前对话',
|
|
16
|
-
'conversation.addHint': '加入对话后可使用 /edit_image 修改;命令使用插件图片模型',
|
|
17
|
-
'conversation.noSession': '请先打开一个会话,再加入图片',
|
|
18
|
-
'conversation.unavailable': '当前会话暂不可用',
|
|
19
|
-
'conversation.busy': '当前对话正在发送,请稍后再试',
|
|
20
|
-
// mode
|
|
21
|
-
'mode.text': '文生图',
|
|
22
|
-
'mode.edit': '图生图',
|
|
23
|
-
'workspace.label': '创作模式',
|
|
24
|
-
'workspace.normal': '普通生图',
|
|
25
|
-
'workspace.
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'
|
|
34
|
-
'
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
'
|
|
43
|
-
'
|
|
44
|
-
'
|
|
45
|
-
'
|
|
46
|
-
'
|
|
47
|
-
'
|
|
48
|
-
'
|
|
49
|
-
'
|
|
50
|
-
'
|
|
51
|
-
'
|
|
52
|
-
'
|
|
53
|
-
'
|
|
54
|
-
'
|
|
55
|
-
'
|
|
56
|
-
'
|
|
57
|
-
'
|
|
58
|
-
'
|
|
59
|
-
'
|
|
60
|
-
'
|
|
61
|
-
'
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
'
|
|
65
|
-
'
|
|
66
|
-
'
|
|
67
|
-
'
|
|
68
|
-
'
|
|
69
|
-
'
|
|
70
|
-
'
|
|
71
|
-
'
|
|
72
|
-
'
|
|
73
|
-
'
|
|
74
|
-
'
|
|
75
|
-
'
|
|
76
|
-
'
|
|
77
|
-
'
|
|
78
|
-
'
|
|
79
|
-
'
|
|
80
|
-
|
|
81
|
-
'
|
|
82
|
-
'
|
|
83
|
-
'
|
|
84
|
-
'
|
|
85
|
-
'
|
|
86
|
-
'
|
|
87
|
-
'
|
|
88
|
-
'
|
|
89
|
-
'
|
|
90
|
-
'
|
|
91
|
-
'
|
|
92
|
-
'
|
|
93
|
-
'
|
|
94
|
-
'
|
|
95
|
-
'
|
|
96
|
-
'
|
|
97
|
-
|
|
98
|
-
'
|
|
99
|
-
'
|
|
100
|
-
'
|
|
101
|
-
'
|
|
102
|
-
'
|
|
103
|
-
'
|
|
104
|
-
'
|
|
105
|
-
'
|
|
106
|
-
'
|
|
107
|
-
'
|
|
108
|
-
'
|
|
109
|
-
'
|
|
110
|
-
'
|
|
111
|
-
'
|
|
112
|
-
'
|
|
113
|
-
'
|
|
114
|
-
'
|
|
115
|
-
'
|
|
116
|
-
'
|
|
117
|
-
'
|
|
118
|
-
'
|
|
119
|
-
'
|
|
120
|
-
'
|
|
121
|
-
'
|
|
122
|
-
'
|
|
123
|
-
|
|
124
|
-
'
|
|
125
|
-
'
|
|
126
|
-
'
|
|
127
|
-
'
|
|
128
|
-
'
|
|
129
|
-
'
|
|
130
|
-
'
|
|
131
|
-
'
|
|
132
|
-
'
|
|
133
|
-
|
|
134
|
-
'
|
|
135
|
-
'
|
|
136
|
-
'
|
|
137
|
-
'
|
|
138
|
-
'
|
|
139
|
-
|
|
140
|
-
'
|
|
141
|
-
'
|
|
142
|
-
'
|
|
143
|
-
'
|
|
144
|
-
'
|
|
145
|
-
'
|
|
146
|
-
'
|
|
147
|
-
'
|
|
148
|
-
'
|
|
149
|
-
'
|
|
150
|
-
'
|
|
151
|
-
'
|
|
152
|
-
'
|
|
153
|
-
|
|
154
|
-
'
|
|
155
|
-
|
|
156
|
-
'
|
|
157
|
-
'
|
|
158
|
-
'
|
|
159
|
-
'
|
|
160
|
-
'
|
|
161
|
-
'
|
|
162
|
-
'
|
|
163
|
-
'
|
|
164
|
-
'
|
|
165
|
-
'
|
|
166
|
-
'
|
|
167
|
-
|
|
168
|
-
'
|
|
169
|
-
'
|
|
170
|
-
'
|
|
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
|
-
'
|
|
196
|
-
'
|
|
197
|
-
'
|
|
198
|
-
|
|
199
|
-
'
|
|
200
|
-
'
|
|
201
|
-
'
|
|
202
|
-
'
|
|
203
|
-
'
|
|
204
|
-
'
|
|
205
|
-
|
|
206
|
-
'
|
|
207
|
-
'
|
|
208
|
-
|
|
209
|
-
'
|
|
210
|
-
'
|
|
211
|
-
'
|
|
212
|
-
'
|
|
213
|
-
'
|
|
214
|
-
|
|
215
|
-
'
|
|
216
|
-
'
|
|
217
|
-
'
|
|
218
|
-
'
|
|
219
|
-
'
|
|
220
|
-
|
|
221
|
-
'
|
|
222
|
-
'
|
|
223
|
-
'
|
|
224
|
-
'
|
|
225
|
-
'
|
|
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
|
-
'
|
|
256
|
-
'
|
|
257
|
-
'
|
|
258
|
-
'
|
|
259
|
-
'
|
|
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
|
-
'
|
|
341
|
-
'
|
|
342
|
-
|
|
343
|
-
'
|
|
344
|
-
'
|
|
345
|
-
'
|
|
346
|
-
'
|
|
347
|
-
'
|
|
348
|
-
'
|
|
349
|
-
'
|
|
350
|
-
'
|
|
351
|
-
'
|
|
352
|
-
'
|
|
353
|
-
'
|
|
354
|
-
'
|
|
355
|
-
'
|
|
356
|
-
'
|
|
357
|
-
'
|
|
358
|
-
'
|
|
359
|
-
'
|
|
360
|
-
'
|
|
361
|
-
'
|
|
362
|
-
'
|
|
363
|
-
'
|
|
364
|
-
'
|
|
365
|
-
'
|
|
366
|
-
'
|
|
367
|
-
'
|
|
368
|
-
'
|
|
369
|
-
'
|
|
370
|
-
'
|
|
371
|
-
'
|
|
372
|
-
'
|
|
373
|
-
'
|
|
374
|
-
'
|
|
375
|
-
'
|
|
376
|
-
'
|
|
377
|
-
'
|
|
378
|
-
'
|
|
379
|
-
'
|
|
380
|
-
'
|
|
381
|
-
'
|
|
382
|
-
'
|
|
383
|
-
'
|
|
384
|
-
'
|
|
385
|
-
'
|
|
386
|
-
'
|
|
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
|
-
'
|
|
463
|
-
'
|
|
464
|
-
'
|
|
465
|
-
'
|
|
466
|
-
'
|
|
467
|
-
'
|
|
468
|
-
'
|
|
469
|
-
'
|
|
470
|
-
'
|
|
471
|
-
'
|
|
472
|
-
'
|
|
473
|
-
'
|
|
474
|
-
'
|
|
475
|
-
'
|
|
476
|
-
'
|
|
477
|
-
'
|
|
478
|
-
'
|
|
479
|
-
'
|
|
480
|
-
'
|
|
481
|
-
'
|
|
482
|
-
'
|
|
483
|
-
'
|
|
484
|
-
'
|
|
485
|
-
'
|
|
486
|
-
'
|
|
487
|
-
'
|
|
488
|
-
'
|
|
489
|
-
'
|
|
490
|
-
'
|
|
491
|
-
'
|
|
492
|
-
'
|
|
493
|
-
'
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
'
|
|
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
|
-
'canvas.
|
|
524
|
-
'canvas.
|
|
525
|
-
'canvas.
|
|
526
|
-
'canvas.
|
|
527
|
-
'canvas.
|
|
528
|
-
'canvas.
|
|
529
|
-
'canvas.
|
|
530
|
-
'canvas.
|
|
531
|
-
'canvas.
|
|
532
|
-
'canvas.
|
|
533
|
-
'canvas.
|
|
534
|
-
'
|
|
535
|
-
'
|
|
536
|
-
'
|
|
537
|
-
'
|
|
538
|
-
'
|
|
539
|
-
'
|
|
540
|
-
'
|
|
541
|
-
'
|
|
542
|
-
'
|
|
543
|
-
'
|
|
544
|
-
'
|
|
545
|
-
'
|
|
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
|
-
'
|
|
578
|
-
'
|
|
579
|
-
'
|
|
580
|
-
'
|
|
581
|
-
'
|
|
582
|
-
'
|
|
583
|
-
'
|
|
584
|
-
'
|
|
585
|
-
'
|
|
586
|
-
'
|
|
587
|
-
'
|
|
588
|
-
'
|
|
589
|
-
'
|
|
590
|
-
'
|
|
591
|
-
'
|
|
592
|
-
'
|
|
593
|
-
'
|
|
594
|
-
'
|
|
595
|
-
'
|
|
596
|
-
'
|
|
597
|
-
'
|
|
598
|
-
'
|
|
599
|
-
'
|
|
600
|
-
'
|
|
601
|
-
'
|
|
602
|
-
'
|
|
603
|
-
'
|
|
604
|
-
'
|
|
605
|
-
'
|
|
606
|
-
'
|
|
607
|
-
'
|
|
608
|
-
'
|
|
609
|
-
'
|
|
610
|
-
'
|
|
611
|
-
'
|
|
612
|
-
'
|
|
613
|
-
'
|
|
614
|
-
'
|
|
615
|
-
'
|
|
616
|
-
'
|
|
617
|
-
'
|
|
618
|
-
'
|
|
619
|
-
'
|
|
620
|
-
'
|
|
621
|
-
'
|
|
622
|
-
'
|
|
623
|
-
'
|
|
624
|
-
'
|
|
625
|
-
'
|
|
626
|
-
'
|
|
627
|
-
'
|
|
628
|
-
'
|
|
629
|
-
'
|
|
630
|
-
'
|
|
631
|
-
'
|
|
632
|
-
'
|
|
633
|
-
'
|
|
634
|
-
'
|
|
635
|
-
'
|
|
636
|
-
'
|
|
637
|
-
'
|
|
638
|
-
'
|
|
639
|
-
'
|
|
640
|
-
'
|
|
641
|
-
'
|
|
642
|
-
'
|
|
643
|
-
'
|
|
644
|
-
'
|
|
645
|
-
'
|
|
646
|
-
'
|
|
647
|
-
'
|
|
648
|
-
'
|
|
649
|
-
'
|
|
650
|
-
'
|
|
651
|
-
'
|
|
652
|
-
'
|
|
653
|
-
'
|
|
654
|
-
'
|
|
655
|
-
'
|
|
656
|
-
'
|
|
657
|
-
'
|
|
658
|
-
'
|
|
659
|
-
'
|
|
660
|
-
'
|
|
661
|
-
'
|
|
662
|
-
'
|
|
663
|
-
'
|
|
664
|
-
'
|
|
665
|
-
'
|
|
666
|
-
'
|
|
667
|
-
'
|
|
668
|
-
'
|
|
669
|
-
'
|
|
670
|
-
'
|
|
671
|
-
'
|
|
672
|
-
'
|
|
673
|
-
'
|
|
674
|
-
'
|
|
675
|
-
'
|
|
676
|
-
'
|
|
677
|
-
'
|
|
678
|
-
|
|
679
|
-
'
|
|
680
|
-
'
|
|
681
|
-
'
|
|
682
|
-
'
|
|
683
|
-
'
|
|
684
|
-
'
|
|
685
|
-
'
|
|
686
|
-
'
|
|
687
|
-
'
|
|
688
|
-
'
|
|
689
|
-
'
|
|
690
|
-
'
|
|
691
|
-
'
|
|
692
|
-
'
|
|
693
|
-
'
|
|
694
|
-
'
|
|
695
|
-
'
|
|
696
|
-
'
|
|
697
|
-
'
|
|
698
|
-
'
|
|
699
|
-
'
|
|
700
|
-
'
|
|
701
|
-
'
|
|
702
|
-
'
|
|
703
|
-
'
|
|
704
|
-
'
|
|
705
|
-
'
|
|
706
|
-
'
|
|
707
|
-
'
|
|
708
|
-
'
|
|
709
|
-
'
|
|
710
|
-
'
|
|
711
|
-
'
|
|
712
|
-
'
|
|
713
|
-
'
|
|
714
|
-
|
|
715
|
-
'
|
|
716
|
-
'
|
|
717
|
-
'
|
|
718
|
-
'
|
|
719
|
-
|
|
720
|
-
'
|
|
721
|
-
'
|
|
722
|
-
'
|
|
723
|
-
'
|
|
724
|
-
'
|
|
725
|
-
'
|
|
726
|
-
'
|
|
727
|
-
'
|
|
728
|
-
'
|
|
729
|
-
'
|
|
730
|
-
'
|
|
731
|
-
'
|
|
732
|
-
'
|
|
733
|
-
'
|
|
734
|
-
'
|
|
735
|
-
'
|
|
736
|
-
'
|
|
737
|
-
'
|
|
738
|
-
'
|
|
739
|
-
'
|
|
740
|
-
'
|
|
741
|
-
'
|
|
742
|
-
'
|
|
743
|
-
'
|
|
744
|
-
'
|
|
745
|
-
'
|
|
746
|
-
'
|
|
747
|
-
'
|
|
748
|
-
'
|
|
749
|
-
'
|
|
750
|
-
'
|
|
751
|
-
'
|
|
752
|
-
'
|
|
753
|
-
'
|
|
754
|
-
'
|
|
755
|
-
'
|
|
756
|
-
'
|
|
757
|
-
'
|
|
758
|
-
'
|
|
759
|
-
'
|
|
760
|
-
'
|
|
761
|
-
'
|
|
762
|
-
'
|
|
763
|
-
'
|
|
764
|
-
'
|
|
765
|
-
'
|
|
766
|
-
'
|
|
767
|
-
'
|
|
768
|
-
'
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
1
|
+
/**
|
|
2
|
+
* dsh-imagegen surface copy: zh is the key source, en mirrors every key.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export const zh = {
|
|
6
|
+
'entry.label': 'AI 生图',
|
|
7
|
+
'entry.tooltip': 'AI 生图面板(gpt-image-2 / glm-image / grok-imagine-image / nanobanana / seedream 系列)',
|
|
8
|
+
'entry.newSession': '新会话',
|
|
9
|
+
'entry.newSessionTooltip': '创建一个新的 DSH 会话',
|
|
10
|
+
'entry.image': '生图',
|
|
11
|
+
'panel.title': 'AI 生图',
|
|
12
|
+
'panel.githubTip': '觉得好用或有建议?欢迎来 GitHub 提 issues、点个 star 支持一下!',
|
|
13
|
+
'conversation.add': '加入对话',
|
|
14
|
+
'conversation.adding': '加入中…',
|
|
15
|
+
'conversation.added': '图片已加入当前对话',
|
|
16
|
+
'conversation.addHint': '加入对话后可使用 /edit_image 修改;命令使用插件图片模型',
|
|
17
|
+
'conversation.noSession': '请先打开一个会话,再加入图片',
|
|
18
|
+
'conversation.unavailable': '当前会话暂不可用',
|
|
19
|
+
'conversation.busy': '当前对话正在发送,请稍后再试',
|
|
20
|
+
// mode
|
|
21
|
+
'mode.text': '文生图',
|
|
22
|
+
'mode.edit': '图生图',
|
|
23
|
+
'workspace.label': '创作模式',
|
|
24
|
+
'workspace.normal': '普通生图',
|
|
25
|
+
'workspace.canvas': '无限画布',
|
|
26
|
+
'workspace.ecommerce': '电商模式',
|
|
27
|
+
'canvas.addImage': '添加图片',
|
|
28
|
+
'canvas.addText': '添加文本',
|
|
29
|
+
'canvas.generate': '生成图片',
|
|
30
|
+
'canvas.addToCanvas': '加入画布',
|
|
31
|
+
'canvas.untitled': '未命名画布',
|
|
32
|
+
'canvas.imageNode': '图片节点',
|
|
33
|
+
'canvas.textNode': '文本节点',
|
|
34
|
+
'canvas.fromGallery': '画廊图片',
|
|
35
|
+
'canvas.fromHistory': '历史图片',
|
|
36
|
+
'canvas.project': '画布项目',
|
|
37
|
+
'canvas.newCanvas': '新建画布',
|
|
38
|
+
'canvas.deleteCanvas': '删除画布',
|
|
39
|
+
'canvas.deleteCanvasConfirm': '再点一次确认删除',
|
|
40
|
+
'canvas.rename': '重命名画布',
|
|
41
|
+
'canvas.renameHint': '双击重命名',
|
|
42
|
+
'canvas.background': '切换画布背景',
|
|
43
|
+
'canvas.undo': '撤销 (Ctrl+Z)',
|
|
44
|
+
'canvas.redo': '重做 (Ctrl+Shift+Z)',
|
|
45
|
+
'canvas.saving': '保存中…',
|
|
46
|
+
'canvas.saved': '已保存',
|
|
47
|
+
'canvas.saveFailed': '保存失败',
|
|
48
|
+
'canvas.loading': '加载中…',
|
|
49
|
+
'canvas.toolSelect': '选择 / 移动节点',
|
|
50
|
+
'canvas.toolPan': '拖动画布(空格 / Ctrl + 拖动)',
|
|
51
|
+
'canvas.delete': '删除',
|
|
52
|
+
'canvas.duplicate': '创建副本 (Ctrl+D)',
|
|
53
|
+
'canvas.download': '下载图片',
|
|
54
|
+
'canvas.fitView': '适应全部内容',
|
|
55
|
+
'canvas.minimapOpen': '打开缩略图',
|
|
56
|
+
'canvas.minimapClose': '关闭缩略图',
|
|
57
|
+
'canvas.minimap': '画布缩略图',
|
|
58
|
+
'canvas.zoom': '缩放',
|
|
59
|
+
'canvas.textPlaceholder': '输入文本内容…',
|
|
60
|
+
'canvas.generatingNode': '生成中…',
|
|
61
|
+
'canvas.generateFailed': '生成失败',
|
|
62
|
+
'canvas.retry': '重试',
|
|
63
|
+
'canvas.emptyImageNode': '点击上传图片',
|
|
64
|
+
'canvas.connectHint': '拖到其他节点建立连线',
|
|
65
|
+
'canvas.resizeHint': '拖动调整大小(图片锁定比例)',
|
|
66
|
+
'canvas.count': '生成数量',
|
|
67
|
+
'canvas.configNode': '生成配置',
|
|
68
|
+
'canvas.addConfigNode': '添加配置节点',
|
|
69
|
+
'canvas.configHint': '把图片节点连线到左侧作为参考图,文本节点连线过来作为提示词;选中本节点后在下方输入或改写提示词并生成。',
|
|
70
|
+
'canvas.composerLinked': '已连接 {count} 个输入节点',
|
|
71
|
+
'canvas.composerPlaceholder': '描述要生成的图片;也可把文本节点连线过来作为提示词…',
|
|
72
|
+
'canvas.countUnit': '{count} 张',
|
|
73
|
+
'canvas.model': '生图模型',
|
|
74
|
+
'canvas.modelPlaceholder': '选择模型',
|
|
75
|
+
'canvas.size': '尺寸比例',
|
|
76
|
+
'canvas.sizeAuto': '自动比例',
|
|
77
|
+
'canvas.quality': '清晰度',
|
|
78
|
+
'canvas.qualityAuto': '自动清晰度',
|
|
79
|
+
'canvas.needApi': '请先配置生图 API',
|
|
80
|
+
'canvas.needPrompt': '请输入生成描述',
|
|
81
|
+
'canvas.needModel': '尚未配置可用生图模型',
|
|
82
|
+
'canvas.openSettings': '打开设置',
|
|
83
|
+
'canvas.deleteConnection': '删除连线',
|
|
84
|
+
'canvas.paste': '粘贴 (Ctrl+V)',
|
|
85
|
+
'canvas.addImageNode': '添加图片节点',
|
|
86
|
+
'canvas.addTextNode': '添加文本节点',
|
|
87
|
+
'canvas.dismiss': '关闭提示',
|
|
88
|
+
'canvas.close': '关闭',
|
|
89
|
+
'canvas.tabUpload': '上传',
|
|
90
|
+
'canvas.tabHistory': '历史记录',
|
|
91
|
+
'canvas.tabGallery': '画廊',
|
|
92
|
+
'canvas.tabGenerate': 'AI 生成',
|
|
93
|
+
'canvas.dropHint': '图片拖动到此处即可添加',
|
|
94
|
+
'canvas.dropSub': '支持多选,PNG / JPG / WebP / GIF',
|
|
95
|
+
'canvas.untitledWork': '未命名作品',
|
|
96
|
+
'canvas.picked': '已选 {count} 张',
|
|
97
|
+
'canvas.generateAndAdd': '生成并添加到画布',
|
|
98
|
+
'chat.expand': '展开右侧对话',
|
|
99
|
+
'chat.collapse': '收起右侧对话',
|
|
100
|
+
'chat.toggle': '对话',
|
|
101
|
+
'config.resizeHint': '拖拽调整参数栏宽度',
|
|
102
|
+
'ecommerce.generation': '生成设置',
|
|
103
|
+
'ecommerce.title': '电商模式',
|
|
104
|
+
'ecommerce.badge': '预览',
|
|
105
|
+
'ecommerce.short': '电商',
|
|
106
|
+
'ecommerce.anchorPending': '已生成主图,其余图片正在自动参考主图生成,保证整套同款…',
|
|
107
|
+
'ecommerce.anchorFailed': '主图生成失败,其余图片已暂停。请重试主图(或整组重新生成)后再继续。',
|
|
108
|
+
'ecommerce.anchorNote': '锚定生成:先出主图,其余图片自动参考主图,保证整套同款',
|
|
109
|
+
'ecommerce.noAssetWarn': '未上传商品图:主图将按文字描述生成并作为锚定基准,建议先上传商品主图获得更高一致性',
|
|
110
|
+
'ecommerce.product': '商品信息',
|
|
111
|
+
'ecommerce.productName': '商品名称(必填)',
|
|
112
|
+
'ecommerce.projectName': '项目名称(可选)',
|
|
113
|
+
'ecommerce.constraints': '卖点与约束',
|
|
114
|
+
'ecommerce.sellingPoints': '商品卖点,例如:防水防污 / 大容量 / 便携',
|
|
115
|
+
'ecommerce.protectedFeatures': '必须保留的特征,例如:颜色、Logo、包装文字、结构',
|
|
116
|
+
'ecommerce.styleHint': '风格补充,例如:高级感 / 写实 / 自然光',
|
|
117
|
+
'ecommerce.setStructure': '套图结构',
|
|
118
|
+
'ecommerce.preview': '生成套图预览',
|
|
119
|
+
'ecommerce.planTitle': '预计生成 {count} 张图片',
|
|
120
|
+
'ecommerce.planSlot': '{count} 张 · {description}',
|
|
121
|
+
'ecommerce.confirm': '确认生成整套图片',
|
|
122
|
+
'ecommerce.uploadRef': '上传商品素材(可选,最多 4 张:主体 / 包装 / 细节 / 风格)',
|
|
123
|
+
'ecommerce.uploadShort': '上传素材',
|
|
124
|
+
'ecommerce.sellingTitle': '商品卖点',
|
|
125
|
+
'ecommerce.advanced': '高级选项(平台 / 约束)',
|
|
126
|
+
'ecommerce.params': '参数选择',
|
|
127
|
+
'ecommerce.platformLabel': '平台',
|
|
128
|
+
'ecommerce.languageLabel': '文案语言',
|
|
129
|
+
'ecommerce.customLanguageOption': '自定义…',
|
|
130
|
+
'ecommerce.customLanguageLabel': '自定义语言',
|
|
131
|
+
'ecommerce.customLanguagePlaceholder': '输入语言名称,例如:Русский / 日本語 / Português',
|
|
132
|
+
'ecommerce.ratioLabel': '比例',
|
|
133
|
+
'ecommerce.categoryLabel': '类目',
|
|
134
|
+
'ecommerce.multiSelect': '可多选',
|
|
135
|
+
'ecommerce.countHint': '点击调整数量(1-4)',
|
|
136
|
+
'ecommerce.refSettings': '参考图设置(可选)',
|
|
137
|
+
'ecommerce.styleTitle': '风格 / 补充提示',
|
|
138
|
+
'ecommerce.protectedLabel': '必须保留的特征(可选)',
|
|
139
|
+
'ecommerce.assetsFull': '最多上传 4 张素材',
|
|
140
|
+
'ecommerce.refSelect': '该用途使用的参考图',
|
|
141
|
+
'ecommerce.refNone': '不使用参考图',
|
|
142
|
+
'ecommerce.role.product': '商品主体',
|
|
143
|
+
'ecommerce.role.packaging': '包装',
|
|
144
|
+
'ecommerce.role.detail': '细节/角度',
|
|
145
|
+
'ecommerce.role.style': '风格参考',
|
|
146
|
+
'ecommerce.footerReady': '将生成 {count} 张套图',
|
|
147
|
+
'ecommerce.footerEmpty': '请选择套图结构',
|
|
148
|
+
'ecommerce.results.title': '套图结果',
|
|
149
|
+
'ecommerce.results.progress': '{done}/{total} 已完成',
|
|
150
|
+
'ecommerce.results.failed': '{count} 张失败',
|
|
151
|
+
'ecommerce.results.empty': '确认生成后,每张图片的任务状态和结果会按用途显示在这里',
|
|
152
|
+
'ecommerce.results.regenerate': '重新生成',
|
|
153
|
+
'ecommerce.results.export': '导出清单',
|
|
154
|
+
'ecommerce.results.newProduct': '新商品',
|
|
155
|
+
// prompt
|
|
156
|
+
'prompt.placeholder': '描述你想要的画面,例如:一只戴着宇航员头盔的橘猫,在月球上举起望远镜,水彩风格,柔和光线…',
|
|
157
|
+
'prompt.required': '请输入提示词',
|
|
158
|
+
'prompt.count': '{count}',
|
|
159
|
+
'prompt.enhance': '增强',
|
|
160
|
+
'prompt.enhancing': '增强中…',
|
|
161
|
+
'prompt.enhanceHint': '使用已配置的对话模型扩写提示词',
|
|
162
|
+
'prompt.configTitle': '请先配置提示词增强模型',
|
|
163
|
+
'prompt.configHint': '已打开设置。进入「插件 → AI 生图」,填写或复用 API 地址和密钥,选择对话模型并保存。',
|
|
164
|
+
'tasks.title': '生成任务',
|
|
165
|
+
'tasks.queued': '排队中',
|
|
166
|
+
'tasks.running': '生成中',
|
|
167
|
+
'tasks.completed': '已完成',
|
|
168
|
+
'tasks.failed': '失败',
|
|
169
|
+
'tasks.cancelled': '已取消',
|
|
170
|
+
'tasks.cancel': '取消',
|
|
171
|
+
'tasks.retry': '重试',
|
|
172
|
+
// parameters
|
|
173
|
+
'params.size': '尺寸',
|
|
174
|
+
'params.quality': '清晰度',
|
|
175
|
+
'params.count': '生成数量',
|
|
176
|
+
'params.detail': '细节',
|
|
177
|
+
'size.auto': '自动',
|
|
178
|
+
'size.square': '1:1 方图',
|
|
179
|
+
'size.portrait34': '3:4 标准竖图',
|
|
180
|
+
'size.landscape43': '4:3 标准横图',
|
|
181
|
+
'size.portrait916': '9:16 竖屏',
|
|
182
|
+
'size.portrait23': '2:3 竖图',
|
|
183
|
+
'size.landscape32': '3:2 横图',
|
|
184
|
+
'size.wide169': '16:9 宽屏',
|
|
185
|
+
'size.ultrawide21': '21:9 超宽屏',
|
|
186
|
+
'quality.auto': '自动',
|
|
187
|
+
'quality.1k': '1K',
|
|
188
|
+
'quality.2k': '2K',
|
|
189
|
+
'quality.4k': '4K',
|
|
190
|
+
'count.one': '1 张',
|
|
191
|
+
'count.two': '2 张',
|
|
192
|
+
'count.three': '3 张',
|
|
193
|
+
'count.four': '4 张',
|
|
194
|
+
'detail.auto': '自动',
|
|
195
|
+
'detail.standard': '标准',
|
|
196
|
+
'detail.high': '高清',
|
|
197
|
+
'detail.hint': '透传参数,部分 gpt-image-2 网关支持;官方接口请保持「自动」',
|
|
198
|
+
// footer
|
|
199
|
+
'model.label': '模型',
|
|
200
|
+
'model.noEditModels': '当前模式暂无可用模型',
|
|
201
|
+
'compare.enable': '多模型对比',
|
|
202
|
+
'compare.models': '参与对比的模型',
|
|
203
|
+
'compare.title': '多模型结果对比',
|
|
204
|
+
'compare.fullscreen': '全屏对比',
|
|
205
|
+
'compare.selectRequired': '请至少选择一个对比模型',
|
|
206
|
+
'generate': '开始生成',
|
|
207
|
+
'generating': '生成中…',
|
|
208
|
+
// edit reference image
|
|
209
|
+
'edit.upload': '点击或拖拽上传参考图片',
|
|
210
|
+
'edit.uploadHint': 'PNG / JPG / WEBP,不超过 10MB',
|
|
211
|
+
'edit.change': '更换图片',
|
|
212
|
+
'edit.remove': '移除',
|
|
213
|
+
'edit.required': '请先上传参考图片',
|
|
214
|
+
// canvas
|
|
215
|
+
'canvas.emptyTitle': '开始你的创作',
|
|
216
|
+
'canvas.emptyHint': '双击空白处或用底部工具添加图片/文本节点;把图片和文本节点连线到目标节点,选中后即可在底部生成器中出图',
|
|
217
|
+
'canvas.new': '新建作图',
|
|
218
|
+
'canvas.newHint': '开始新的作图并清空预览',
|
|
219
|
+
'canvas.error': '生成失败:{error}',
|
|
220
|
+
'canvas.submitting': '正在加入生成队列…',
|
|
221
|
+
'canvas.queued': '已加入生成队列',
|
|
222
|
+
'canvas.queueHint': '当前有 {count} 个任务等待处理',
|
|
223
|
+
'canvas.generating': '正在生成图片…',
|
|
224
|
+
'canvas.elapsed': '已用时 {seconds}s',
|
|
225
|
+
'canvas.images': '本次生成 {count} 张',
|
|
226
|
+
'download': '下载',
|
|
227
|
+
'revisedPrompt': '优化提示词:{prompt}',
|
|
228
|
+
// history
|
|
229
|
+
'history.title': '历史记录',
|
|
230
|
+
'history.empty': '暂无历史记录,生成图片后会保存在这里',
|
|
231
|
+
'history.clear': '清空',
|
|
232
|
+
'history.clearConfirm': '确定要清空全部历史记录吗?此操作不可撤销。',
|
|
233
|
+
'history.restore': '恢复',
|
|
234
|
+
'history.delete': '删除',
|
|
235
|
+
'history.images': '张',
|
|
236
|
+
'history.viewing': '历史 · {time}',
|
|
237
|
+
'history.search': '搜索提示词或模型…',
|
|
238
|
+
'history.model': '模型筛选',
|
|
239
|
+
'history.ratio': '比例筛选',
|
|
240
|
+
'history.allModels': '全部模型',
|
|
241
|
+
'history.allRatios': '全部比例',
|
|
242
|
+
// gallery
|
|
243
|
+
'gallery.title': '画廊',
|
|
244
|
+
'gallery.categories': '分类',
|
|
245
|
+
'gallery.all': '全部作品',
|
|
246
|
+
'gallery.gpt': 'gpt-image-2',
|
|
247
|
+
'gallery.grok': 'grok-imagine-image',
|
|
248
|
+
'gallery.ratio': '画面比例',
|
|
249
|
+
'gallery.tags': '标签',
|
|
250
|
+
'gallery.filterHint': '按生成模式、模型和比例筛选画廊',
|
|
251
|
+
'gallery.count': '· 共 {count} 幅',
|
|
252
|
+
'gallery.viewMode': '视图模式',
|
|
253
|
+
'gallery.masonry': '瀑布流',
|
|
254
|
+
'gallery.grid': '整齐网格',
|
|
255
|
+
'gallery.sort': '排序',
|
|
256
|
+
'gallery.newest': '最新发布',
|
|
257
|
+
'gallery.oldest': '最早发布',
|
|
258
|
+
'gallery.untitled': '未命名作品',
|
|
259
|
+
'gallery.search': '搜索作品或模型…',
|
|
260
|
+
'gallery.tagsPlaceholder': '标签,用逗号分隔',
|
|
261
|
+
'gallery.tagsApply': '添加标签',
|
|
262
|
+
'gallery.editTags': '编辑标签',
|
|
263
|
+
'gallery.tagsEditShort': '编辑',
|
|
264
|
+
'gallery.tagsSave': '保存',
|
|
265
|
+
'gallery.tagsCancel': '取消',
|
|
266
|
+
'gallery.selected': '已选 {count} 项',
|
|
267
|
+
'gallery.selectionDone': '完成选择',
|
|
268
|
+
'gallery.selectionClear': '取消选择',
|
|
269
|
+
'gallery.downloadSelected': '下载所选',
|
|
270
|
+
'gallery.exportJson': '导出 JSON',
|
|
271
|
+
'gallery.select': '选择作品',
|
|
272
|
+
'gallery.add': '加入画廊',
|
|
273
|
+
'gallery.added': '已加入画廊',
|
|
274
|
+
'gallery.already': '已在画廊中',
|
|
275
|
+
'gallery.delete': '移出画廊',
|
|
276
|
+
'gallery.openFolder': '打开文件夹',
|
|
277
|
+
'gallery.clear': '清空画廊',
|
|
278
|
+
'gallery.openFolderHint': '在系统的文件管理器中打开图片保存目录(~/.dsh/dsh-imagegen)',
|
|
279
|
+
'gallery.clearConfirm': '确定要清空整个画廊吗?此操作不可撤销。',
|
|
280
|
+
'gallery.empty': '画廊还是空的,把喜欢的图片加入进来吧',
|
|
281
|
+
'gallery.viewing': '画廊 · {time}',
|
|
282
|
+
// preview
|
|
283
|
+
'preview.title': '图片预览',
|
|
284
|
+
'preview.open': '点击预览',
|
|
285
|
+
'preview.close': '关闭',
|
|
286
|
+
'preview.prev': '上一张',
|
|
287
|
+
'preview.next': '下一张',
|
|
288
|
+
'preview.index': '{index} / {total}',
|
|
289
|
+
'preview.zoomControls': '图片缩放控制',
|
|
290
|
+
'preview.zoomIn': '放大',
|
|
291
|
+
'preview.zoomOut': '缩小',
|
|
292
|
+
'preview.zoomReset': '重置缩放',
|
|
293
|
+
'preview.zoomLevel': '{percent}%',
|
|
294
|
+
'preview.copyPrompt': '复制提示词',
|
|
295
|
+
'preview.copied': '已复制',
|
|
296
|
+
'preview.addToEdit': '添加到图生图',
|
|
297
|
+
// config banner
|
|
298
|
+
'config.missing': '尚未配置 API:请前往「设置 → 插件 → 可配置」为 AI 生图填写 api_url 与 api_key。',
|
|
299
|
+
'config.generationTitle': '请先配置生图 API',
|
|
300
|
+
'config.generationHint': '已自动打开 DSH「设置 → 插件 → AI 生图」。填写生图 API 地址与 API 密钥,保存后即可开始生成。',
|
|
301
|
+
'config.enhancementTitle': '请先配置提示词增强模型',
|
|
302
|
+
'config.enhancementHint': '已自动打开 DSH「设置 → 插件 → AI 生图」。填写或复用对话 API 地址和密钥,选择对话模型并保存。',
|
|
303
|
+
'config.disabledTitle': 'AI 生图插件已停用',
|
|
304
|
+
'config.disabledHint': '已自动打开 DSH「设置 → 插件 → AI 生图」。开启「启用插件」后即可生成图片。',
|
|
305
|
+
'config.configured': '已连接 {url}',
|
|
306
|
+
'config.disabled': '插件已停用,请在设置中重新启用。',
|
|
307
|
+
'connection.connected': '已连接',
|
|
308
|
+
'connection.disconnected': '未连接',
|
|
309
|
+
'panel.collapseConfig': '收起参数栏',
|
|
310
|
+
'panel.expandConfig': '展开参数栏',
|
|
311
|
+
// plugin update
|
|
312
|
+
'update.available': '检测到新版本:{version}',
|
|
313
|
+
'update.install': '在线更新',
|
|
314
|
+
'update.installing': '更新中…',
|
|
315
|
+
'update.success': '已更新到 {version},请重启 DSH',
|
|
316
|
+
'update.failed': '更新失败,请重试',
|
|
317
|
+
'update.release': '查看 Release',
|
|
318
|
+
// settings card
|
|
319
|
+
'settings.title': 'AI 生图(dsh-imagegen)',
|
|
320
|
+
'settings.description': '配置图像生成 API 地址与密钥',
|
|
321
|
+
'settings.currentVersion': '当前版本',
|
|
322
|
+
'settings.apiUrl': 'API 地址(api_url)',
|
|
323
|
+
'settings.apiUrlHint': 'OpenAI 兼容接口基址,如 https://api.openai.com/v1;将自动拼接 /images/generations 与 /images/edits',
|
|
324
|
+
'settings.apiKey': 'API 密钥(api_key)',
|
|
325
|
+
'settings.apiKeyHint': 'Bearer 密钥,明文存于本机设置文档;界面只显示是否已设置',
|
|
326
|
+
'settings.apiKeySet': '已保存密钥;输入新值可更换,点击「清除」可删除',
|
|
327
|
+
'settings.apiKeyClear': '清除',
|
|
328
|
+
'settings.imageModelsTitle': '生图模型',
|
|
329
|
+
'settings.imageModelsHint': '保存 API 地址和密钥后检测候选模型;请只选择实际支持生图的项。',
|
|
330
|
+
'settings.imageModels': '允许使用的生图模型',
|
|
331
|
+
'settings.imageModelsManualHint': '一行一个模型;API 未提供 /models 时可手动填写。面板和 Agent 只能使用此列表。',
|
|
332
|
+
'settings.imageModelsFetch': '检测可用模型',
|
|
333
|
+
'settings.imageModelsLoading': '检测中…',
|
|
334
|
+
'settings.imageModelsCandidates': '检测到的候选模型(勾选后保存)',
|
|
335
|
+
'settings.addModel': '+ 手动添加',
|
|
336
|
+
'settings.cancelAddModel': '收起添加',
|
|
337
|
+
'settings.addModelPlaceholder': '输入模型名称,例如 qwen-image',
|
|
338
|
+
'settings.addModelConfirm': '添加',
|
|
339
|
+
'settings.removeModel': '移除模型',
|
|
340
|
+
'settings.optional': '可选',
|
|
341
|
+
'settings.moreOptions': '更多设置',
|
|
342
|
+
'settings.storageTitle': '对象存储同步',
|
|
343
|
+
'settings.storageEnabled': '启用对象存储同步',
|
|
344
|
+
'settings.storageHint': '图片保存到本地后,异步上传一份到 S3 兼容对象存储(腾讯云 COS / 阿里云 OSS / 七牛云 S3 / MinIO / R2 等)',
|
|
345
|
+
'settings.storageEndpoint': '接口地址(含存储桶)',
|
|
346
|
+
'settings.storageEndpointHint': 'S3 兼容地址,例如 https://bucket-appid.cos.ap-guangzhou.myqcloud.com 或 https://bucket.oss-cn-hangzhou.aliyuncs.com',
|
|
347
|
+
'settings.storageRegion': '区域',
|
|
348
|
+
'settings.storageRegionHint': '签名用区域 ID,例如 ap-guangzhou / oss-cn-hangzhou / cn-east-1',
|
|
349
|
+
'settings.storagePrefix': 'Key 前缀',
|
|
350
|
+
'settings.storagePrefixHint': '上传目录前缀,对象键为 前缀/gallery|images/文件名',
|
|
351
|
+
'settings.storageAccessKey': 'Access Key',
|
|
352
|
+
'settings.storageAccessKeyHint': 'S3 兼容密钥 ID(COS SecretId / OSS AccessKeyId / 七牛 AK)',
|
|
353
|
+
'settings.storageSecretKey': 'Secret Key',
|
|
354
|
+
'settings.storageSecretKeyHint': 'S3 兼容密钥,仅保存在本机设置文档',
|
|
355
|
+
'settings.storageSyncGallery': '同步画廊图片',
|
|
356
|
+
'settings.storageSyncGalleryHint': '加入画廊的图片自动上传',
|
|
357
|
+
'settings.storageSyncHistory': '同步历史记录图片',
|
|
358
|
+
'settings.storageSyncHistoryHint': '所有生成结果也一并上传(数量可能较大)',
|
|
359
|
+
'settings.storageTest': '测试连接',
|
|
360
|
+
'settings.storageTesting': '测试中…',
|
|
361
|
+
'settings.storageTestOk': '连接成功({ms} ms),已上传探测文件',
|
|
362
|
+
'settings.storageTestFailed': '连接失败:{error}',
|
|
363
|
+
'settings.storageKeyHint': '提示:同步为尽力而为,失败不影响本地保存;可在对象存储控制台按前缀查看已同步文件。',
|
|
364
|
+
'settings.promptEnhanceTitle': '提示词增强模型',
|
|
365
|
+
'settings.promptEnhanceHint': '用于将简短描述扩写为更完整的生图提示词;留空的地址和密钥会复用生图配置。',
|
|
366
|
+
'settings.promptApiUrl': '对话 API 地址(可选)',
|
|
367
|
+
'settings.promptApiUrlHint': 'OpenAI 兼容基址;留空则复用图像 API 地址。',
|
|
368
|
+
'settings.promptApiKey': '对话 API 密钥(可选)',
|
|
369
|
+
'settings.promptApiKeyHint': '留空则复用图像 API 密钥。',
|
|
370
|
+
'settings.promptModel': '对话模型',
|
|
371
|
+
'settings.promptModelHint': '选择或填写支持 /chat/completions 的模型。',
|
|
372
|
+
'settings.promptModelDetectionHint': '默认复用生图 API;检测后点选一个模型即可。',
|
|
373
|
+
'settings.promptModelsFetch': '获取可用模型',
|
|
374
|
+
'settings.promptModelsLoading': '正在获取…',
|
|
375
|
+
'settings.promptModelsSelect': '选择一个模型',
|
|
376
|
+
'settings.promptModelsCandidates': '检测到的候选对话模型',
|
|
377
|
+
'settings.addPromptModelPlaceholder': '输入对话模型名称,例如 gpt-4.1-mini',
|
|
378
|
+
'settings.promptApiAdvanced': '使用独立对话 API(可选)',
|
|
379
|
+
'settings.announceToAgent': '向 Agent 播报本插件',
|
|
380
|
+
'settings.announceToAgentHint': '开启后,本插件的存在与能力会写入每个 Agent 的系统提示词',
|
|
381
|
+
'settings.allowAgentImageGeneration': '允许 Agent 调用生图',
|
|
382
|
+
'settings.allowAgentImageGenerationHint': '默认开启。关闭后,Agent 无法提交、查询或取消生图任务;侧边栏工作台不受影响。',
|
|
383
|
+
'settings.enabled': '启用插件',
|
|
384
|
+
'settings.enabledHint': '关闭后生图面板不可用(设置卡片始终可用)',
|
|
385
|
+
'settings.save': '保存',
|
|
386
|
+
'settings.saving': '保存中…',
|
|
387
|
+
'settings.discard': '放弃修改',
|
|
388
|
+
'settings.unsaved': '有未保存的修改',
|
|
389
|
+
'settings.saveFailed': '保存失败,请重试',
|
|
390
|
+
'settings.readOnly': '当前设置文档为只读,无法保存。',
|
|
391
|
+
'settings.notExposed': '设置命名空间不可用:本部署未提供该插件的设置服务。',
|
|
392
|
+
'settings.expand': '展开',
|
|
393
|
+
'settings.collapse': '收起',
|
|
394
|
+
'settings.inherit': '继承',
|
|
395
|
+
'settings.on': '开',
|
|
396
|
+
'settings.off': '关',
|
|
397
|
+
'settings.overridden': '已覆盖',
|
|
398
|
+
'settings.reset': '重置',
|
|
399
|
+
'settings.invalidNumber': '请输入有效数字',
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
// template library
|
|
404
|
+
'templates.open': '模板库',
|
|
405
|
+
'templates.title': '提示词模板库',
|
|
406
|
+
'templates.sources': '模板库来源',
|
|
407
|
+
'templates.meta': '共 {count} 个模板 · {origin}',
|
|
408
|
+
'templates.origin.bundled': '内置快照',
|
|
409
|
+
'templates.origin.refreshed': '在线刷新',
|
|
410
|
+
'templates.search': '搜索模板标题或提示词…',
|
|
411
|
+
'templates.all': '全部',
|
|
412
|
+
'templates.close': '关闭',
|
|
413
|
+
'templates.back': '返回列表',
|
|
414
|
+
'templates.use': '使用此提示词',
|
|
415
|
+
'templates.copy': '复制提示词',
|
|
416
|
+
'templates.copied': '已复制',
|
|
417
|
+
'templates.refresh': '刷新本库',
|
|
418
|
+
'templates.refreshing': '刷新中…',
|
|
419
|
+
'templates.refreshed': '已刷新,共 {count} 个模板',
|
|
420
|
+
'templates.refreshFailed': '刷新失败:{error}',
|
|
421
|
+
'templates.favorites': '收藏',
|
|
422
|
+
'templates.favoritesHint': '只看已收藏的模板',
|
|
423
|
+
'templates.favoritesEmpty': '还没有收藏,点击模板卡片右上角的星标即可收藏',
|
|
424
|
+
'templates.favoriteAdd': '收藏此模板',
|
|
425
|
+
'templates.favoriteRemove': '取消收藏',
|
|
426
|
+
'templates.favorite': '收藏',
|
|
427
|
+
'templates.unfavorite': '已收藏',
|
|
428
|
+
'templates.cacheAll': '缓存全部图片',
|
|
429
|
+
'templates.cacheAllHint': '通过本机代理把当前模板库的全部参考图缓存到本地磁盘,之后离线也能浏览',
|
|
430
|
+
'templates.caching': '缓存中 {done}/{total}…',
|
|
431
|
+
'templates.cached': '图片已全部缓存',
|
|
432
|
+
'templates.empty': '没有匹配的模板',
|
|
433
|
+
'templates.loading': '正在加载模板库…',
|
|
434
|
+
'templates.loadFailed': '模板库加载失败:{error}',
|
|
435
|
+
'templates.retry': '重试',
|
|
436
|
+
'templates.attribution': '模板与图片来自各来源站点,作者链接见模板详情',
|
|
437
|
+
'templates.source': '来源:{label}',
|
|
438
|
+
'templates.featured': '精选',
|
|
439
|
+
// inspiration wall (studio empty state)
|
|
440
|
+
'inspiration.title': '灵感案例',
|
|
441
|
+
'inspiration.shuffle': '随机',
|
|
442
|
+
'inspiration.shuffling': '换一批…',
|
|
443
|
+
'inspiration.useHint': '点击使用该提示词',
|
|
444
|
+
// channel management
|
|
445
|
+
'channels.title': '渠道',
|
|
446
|
+
'channels.hint': '填写各渠道的 API 地址与密钥即可使用对应模型',
|
|
447
|
+
'channels.empty': '尚无渠道,点击下方按钮添加',
|
|
448
|
+
'channels.addProvider': '添加提供方',
|
|
449
|
+
'channels.addCustom': '添加自定义渠道',
|
|
450
|
+
'channels.untitled': '未命名渠道',
|
|
451
|
+
'channels.keySet': '密钥已设置',
|
|
452
|
+
'channels.keyMissing': '未设置密钥',
|
|
453
|
+
'channels.modelCount': '{n} 个模型',
|
|
454
|
+
'channels.noModels': '未配置模型',
|
|
455
|
+
'channels.defaultLabel': '默认',
|
|
456
|
+
'channels.statusReady': '可用',
|
|
457
|
+
'channels.statusIncomplete': '配置未完成',
|
|
458
|
+
'channels.edit': '编辑',
|
|
459
|
+
'channels.delete': '删除',
|
|
460
|
+
'channels.deleteConfirmTitle': '删除渠道「{name}」?该渠道的密钥将被移除;历史与画廊中的记录仍会保留。',
|
|
461
|
+
'channels.confirm': '确认删除',
|
|
462
|
+
'channels.cancel': '取消',
|
|
463
|
+
'channels.editorTitle': '渠道',
|
|
464
|
+
'channels.editorSaveNote': '改动将随卡片底部「保存」一起生效',
|
|
465
|
+
'channels.displayName': '显示名称',
|
|
466
|
+
'channels.apiUrl': 'API 地址',
|
|
467
|
+
'channels.apiKey': 'API 密钥',
|
|
468
|
+
'channels.keyReplaceHint': '已配置 — 输入新值可替换',
|
|
469
|
+
'channels.keyMissingHint': '填写密钥',
|
|
470
|
+
'channels.keyClear': '清除密钥',
|
|
471
|
+
'channels.modelCatalogTitle': '模型目录',
|
|
472
|
+
'channels.noModelsHint': '暂无模型:点击「检测」拉取候选,或手动添加;别名(显示名)默认等于上游模型 id,可自行修改。',
|
|
473
|
+
'channels.detect': '重新检测',
|
|
474
|
+
'channels.detecting': '检测中…',
|
|
475
|
+
'channels.detectSuccess': '连通 ✓ · {n} 个候选',
|
|
476
|
+
'channels.detectFailed': '检测失败:{error}',
|
|
477
|
+
'channels.detectOk': '已连接该 API',
|
|
478
|
+
'channels.modelAliasLabel': '显示名(别名)',
|
|
479
|
+
'channels.modelIdLabel': '上游模型 id',
|
|
480
|
+
'channels.generated': '已生成 {n} 次',
|
|
481
|
+
'channels.unknownProtocol': '未知协议,按通用 OpenAI 协议尝试',
|
|
482
|
+
'channels.removeModel': '移除模型',
|
|
483
|
+
'channels.manualAddPlaceholder': '输入模型 id,例如 qwen-image',
|
|
484
|
+
'channels.addModelConfirm': '添加',
|
|
485
|
+
'channels.copyFrom': '从其他渠道复制…',
|
|
486
|
+
'channels.copyApply': '复制',
|
|
487
|
+
'channels.candidatesTitle': '图片模型候选(点击加入)',
|
|
488
|
+
'channels.deleteThisChannel': '删除此渠道',
|
|
489
|
+
'channels.setDefault': '设为默认渠道',
|
|
490
|
+
'channels.presetPickerTitle': '添加提供方',
|
|
491
|
+
'channels.presetPickerHint': '选择一个内置提供方,仅需填写 API 密钥',
|
|
492
|
+
'channels.presetCustomHint': '自行填写 API 地址、密钥与模型目录',
|
|
493
|
+
'channels.presetLoadFailed': '加载提供方失败:{error}',
|
|
494
|
+
} as const
|
|
495
|
+
|
|
496
|
+
export const en: Record<keyof typeof zh, string> = {
|
|
497
|
+
'entry.label': 'AI Image',
|
|
498
|
+
'entry.tooltip': 'AI image generation studio (gpt-image-2 / glm-image / grok-imagine-image / nanobanana / seedream family)',
|
|
499
|
+
'entry.newSession': 'New session',
|
|
500
|
+
'entry.newSessionTooltip': 'Create a new DSH session',
|
|
501
|
+
'entry.image': 'Image',
|
|
502
|
+
'panel.title': 'AI Image',
|
|
503
|
+
'panel.githubTip': 'Like it or have suggestions? Head to GitHub to open issues and star us!',
|
|
504
|
+
'conversation.add': 'Add to chat',
|
|
505
|
+
'conversation.adding': 'Adding…',
|
|
506
|
+
'conversation.added': 'Image added to the current chat',
|
|
507
|
+
'conversation.addHint': 'After adding to chat, use /edit_image to modify it; the command uses the plugin image model',
|
|
508
|
+
'conversation.noSession': 'Open a session before adding an image',
|
|
509
|
+
'conversation.unavailable': 'The current session is unavailable',
|
|
510
|
+
'conversation.busy': 'The chat is sending a message; try again shortly',
|
|
511
|
+
'mode.text': 'Text to Image',
|
|
512
|
+
'mode.edit': 'Image to Image',
|
|
513
|
+
'workspace.label': 'Workspace',
|
|
514
|
+
'workspace.normal': 'Standard',
|
|
515
|
+
'workspace.canvas': 'Infinite canvas',
|
|
516
|
+
'workspace.ecommerce': 'E-commerce',
|
|
517
|
+
'canvas.addImage': 'Add image',
|
|
518
|
+
'canvas.addText': 'Add text',
|
|
519
|
+
'canvas.generate': 'Generate image',
|
|
520
|
+
'canvas.addToCanvas': 'Add to canvas',
|
|
521
|
+
'canvas.untitled': 'Untitled canvas',
|
|
522
|
+
'canvas.imageNode': 'Image node',
|
|
523
|
+
'canvas.textNode': 'Text node',
|
|
524
|
+
'canvas.fromGallery': 'Gallery image',
|
|
525
|
+
'canvas.fromHistory': 'History image',
|
|
526
|
+
'canvas.project': 'Canvas project',
|
|
527
|
+
'canvas.newCanvas': 'New canvas',
|
|
528
|
+
'canvas.deleteCanvas': 'Delete canvas',
|
|
529
|
+
'canvas.deleteCanvasConfirm': 'Click again to confirm',
|
|
530
|
+
'canvas.rename': 'Rename canvas',
|
|
531
|
+
'canvas.renameHint': 'Double-click to rename',
|
|
532
|
+
'canvas.background': 'Cycle canvas background',
|
|
533
|
+
'canvas.undo': 'Undo (Ctrl+Z)',
|
|
534
|
+
'canvas.redo': 'Redo (Ctrl+Shift+Z)',
|
|
535
|
+
'canvas.saving': 'Saving…',
|
|
536
|
+
'canvas.saved': 'Saved',
|
|
537
|
+
'canvas.saveFailed': 'Save failed',
|
|
538
|
+
'canvas.loading': 'Loading…',
|
|
539
|
+
'canvas.toolSelect': 'Select / move nodes',
|
|
540
|
+
'canvas.toolPan': 'Pan canvas (Space / Ctrl + drag)',
|
|
541
|
+
'canvas.delete': 'Delete',
|
|
542
|
+
'canvas.duplicate': 'Duplicate (Ctrl+D)',
|
|
543
|
+
'canvas.download': 'Download image',
|
|
544
|
+
'canvas.fitView': 'Fit all content',
|
|
545
|
+
'canvas.minimapOpen': 'Open minimap',
|
|
546
|
+
'canvas.minimapClose': 'Close minimap',
|
|
547
|
+
'canvas.minimap': 'Canvas minimap',
|
|
548
|
+
'canvas.zoom': 'Zoom',
|
|
549
|
+
'canvas.textPlaceholder': 'Type text…',
|
|
550
|
+
'canvas.generatingNode': 'Generating…',
|
|
551
|
+
'canvas.generateFailed': 'Generation failed',
|
|
552
|
+
'canvas.retry': 'Retry',
|
|
553
|
+
'canvas.emptyImageNode': 'Click to upload an image',
|
|
554
|
+
'canvas.connectHint': 'Drag onto another node to connect',
|
|
555
|
+
'canvas.resizeHint': 'Drag to resize (image ratio locked)',
|
|
556
|
+
'canvas.count': 'Image count',
|
|
557
|
+
'canvas.configNode': 'Generation config',
|
|
558
|
+
'canvas.addConfigNode': 'Add config node',
|
|
559
|
+
'canvas.configHint': 'Connect image nodes on the left as references and text nodes as prompts; select this node to write the prompt in the composer below and generate.',
|
|
560
|
+
'canvas.composerLinked': '{count} input node(s) connected',
|
|
561
|
+
'canvas.composerPlaceholder': 'Describe the image to generate; or connect text nodes as the prompt…',
|
|
562
|
+
'canvas.countUnit': '{count}',
|
|
563
|
+
'canvas.model': 'Image model',
|
|
564
|
+
'canvas.modelPlaceholder': 'Choose a model',
|
|
565
|
+
'canvas.size': 'Size ratio',
|
|
566
|
+
'canvas.sizeAuto': 'Auto ratio',
|
|
567
|
+
'canvas.quality': 'Quality',
|
|
568
|
+
'canvas.qualityAuto': 'Auto quality',
|
|
569
|
+
'canvas.needApi': 'Configure the image API first',
|
|
570
|
+
'canvas.needPrompt': 'Enter a generation prompt first',
|
|
571
|
+
'canvas.needModel': 'No image model available',
|
|
572
|
+
'canvas.openSettings': 'Open settings',
|
|
573
|
+
'canvas.deleteConnection': 'Delete connection',
|
|
574
|
+
'canvas.paste': 'Paste (Ctrl+V)',
|
|
575
|
+
'canvas.addImageNode': 'Add image node',
|
|
576
|
+
'canvas.addTextNode': 'Add text node',
|
|
577
|
+
'canvas.dismiss': 'Dismiss',
|
|
578
|
+
'canvas.close': 'Close',
|
|
579
|
+
'canvas.tabUpload': 'Upload',
|
|
580
|
+
'canvas.tabHistory': 'History',
|
|
581
|
+
'canvas.tabGallery': 'Gallery',
|
|
582
|
+
'canvas.tabGenerate': 'AI generate',
|
|
583
|
+
'canvas.dropHint': 'Drop images here to add them',
|
|
584
|
+
'canvas.dropSub': 'Multiple files, PNG / JPG / WebP / GIF',
|
|
585
|
+
'canvas.untitledWork': 'Untitled work',
|
|
586
|
+
'canvas.picked': '{count} selected',
|
|
587
|
+
'canvas.generateAndAdd': 'Generate and add to canvas',
|
|
588
|
+
'chat.expand': 'Expand the conversation pane',
|
|
589
|
+
'chat.collapse': 'Collapse the conversation pane',
|
|
590
|
+
'chat.toggle': 'Chat',
|
|
591
|
+
'config.resizeHint': 'Drag to resize the parameter panel',
|
|
592
|
+
'ecommerce.generation': 'Generation settings',
|
|
593
|
+
'ecommerce.title': 'E-commerce Mode',
|
|
594
|
+
'ecommerce.badge': 'Beta',
|
|
595
|
+
'ecommerce.short': 'Store',
|
|
596
|
+
'ecommerce.anchorPending': 'Main image generated — remaining images are being generated with the main image as reference to keep the set consistent…',
|
|
597
|
+
'ecommerce.anchorFailed': 'Main image failed; remaining images are paused. Retry the main image or regenerate the set.',
|
|
598
|
+
'ecommerce.anchorNote': 'Anchored: main image first, remaining images reference it automatically for a consistent set',
|
|
599
|
+
'ecommerce.noAssetWarn': 'No product image uploaded: the main image will be generated from text as the anchor. Upload one for higher consistency.',
|
|
600
|
+
'ecommerce.product': 'Product details',
|
|
601
|
+
'ecommerce.productName': 'Product name (required)',
|
|
602
|
+
'ecommerce.projectName': 'Project name (optional)',
|
|
603
|
+
'ecommerce.constraints': 'Selling points & constraints',
|
|
604
|
+
'ecommerce.sellingPoints': 'Selling points, e.g. waterproof / large capacity / portable',
|
|
605
|
+
'ecommerce.protectedFeatures': 'Features to preserve: color, logo, packaging text, structure',
|
|
606
|
+
'ecommerce.styleHint': 'Style hint, e.g. premium / realistic / natural light',
|
|
607
|
+
'ecommerce.setStructure': 'Image set structure',
|
|
608
|
+
'ecommerce.preview': 'Preview product set',
|
|
609
|
+
'ecommerce.planTitle': 'Plan to generate {count} images',
|
|
610
|
+
'ecommerce.planSlot': '{count} images · {description}',
|
|
611
|
+
'ecommerce.confirm': 'Confirm and generate set',
|
|
612
|
+
'ecommerce.uploadRef': 'Upload product assets (optional, up to 4: product / packaging / detail / style)',
|
|
613
|
+
'ecommerce.uploadShort': 'Upload',
|
|
614
|
+
'ecommerce.sellingTitle': 'Selling points',
|
|
615
|
+
'ecommerce.advanced': 'Advanced (platform / constraints)',
|
|
616
|
+
'ecommerce.params': 'Parameters',
|
|
617
|
+
'ecommerce.platformLabel': 'Platform',
|
|
618
|
+
'ecommerce.languageLabel': 'Copy language',
|
|
619
|
+
'ecommerce.customLanguageOption': 'Custom…',
|
|
620
|
+
'ecommerce.customLanguageLabel': 'Custom language',
|
|
621
|
+
'ecommerce.customLanguagePlaceholder': 'Enter a language, e.g. Русский / 日本語 / Português',
|
|
622
|
+
'ecommerce.ratioLabel': 'Aspect ratio',
|
|
623
|
+
'ecommerce.categoryLabel': 'Category',
|
|
624
|
+
'ecommerce.multiSelect': 'multi-select',
|
|
625
|
+
'ecommerce.countHint': 'Click to adjust count (1-4)',
|
|
626
|
+
'ecommerce.refSettings': 'Reference images (optional)',
|
|
627
|
+
'ecommerce.styleTitle': 'Style / extra hints',
|
|
628
|
+
'ecommerce.protectedLabel': 'Features to preserve (optional)',
|
|
629
|
+
'ecommerce.assetsFull': 'Up to 4 assets',
|
|
630
|
+
'ecommerce.refSelect': 'Reference image for this slot',
|
|
631
|
+
'ecommerce.refNone': 'No reference',
|
|
632
|
+
'ecommerce.role.product': 'Product',
|
|
633
|
+
'ecommerce.role.packaging': 'Packaging',
|
|
634
|
+
'ecommerce.role.detail': 'Detail / angle',
|
|
635
|
+
'ecommerce.role.style': 'Style',
|
|
636
|
+
'ecommerce.footerReady': '{count} images in this set',
|
|
637
|
+
'ecommerce.footerEmpty': 'Select the image set structure',
|
|
638
|
+
'ecommerce.results.title': 'Product set results',
|
|
639
|
+
'ecommerce.results.progress': '{done}/{total} completed',
|
|
640
|
+
'ecommerce.results.failed': '{count} failed',
|
|
641
|
+
'ecommerce.results.empty': 'After confirming, each image task and result will show here grouped by purpose',
|
|
642
|
+
'ecommerce.results.regenerate': 'Regenerate',
|
|
643
|
+
'ecommerce.results.export': 'Export manifest',
|
|
644
|
+
'ecommerce.results.newProduct': 'New product',
|
|
645
|
+
'prompt.placeholder': 'Describe the picture you want, e.g. an orange cat in an astronaut helmet raising a telescope on the moon, watercolor style, soft light…',
|
|
646
|
+
'prompt.required': 'Enter a prompt first',
|
|
647
|
+
'prompt.count': '{count}',
|
|
648
|
+
'prompt.enhance': 'Enhance',
|
|
649
|
+
'prompt.enhancing': 'Enhancing…',
|
|
650
|
+
'prompt.enhanceHint': 'Expand the prompt with the configured chat model',
|
|
651
|
+
'prompt.configTitle': 'Configure a prompt enhancement model first',
|
|
652
|
+
'prompt.configHint': 'Settings has opened. Go to Plugins → AI Image, configure or reuse an API URL and key, choose a chat model, then save.',
|
|
653
|
+
'tasks.title': 'Generation tasks',
|
|
654
|
+
'tasks.queued': 'Queued',
|
|
655
|
+
'tasks.running': 'Generating',
|
|
656
|
+
'tasks.completed': 'Completed',
|
|
657
|
+
'tasks.failed': 'Failed',
|
|
658
|
+
'tasks.cancelled': 'Cancelled',
|
|
659
|
+
'tasks.cancel': 'Cancel',
|
|
660
|
+
'tasks.retry': 'Retry',
|
|
661
|
+
'params.size': 'Size',
|
|
662
|
+
'params.quality': 'Quality',
|
|
663
|
+
'params.count': 'Count',
|
|
664
|
+
'params.detail': 'Detail',
|
|
665
|
+
'size.auto': 'Auto',
|
|
666
|
+
'size.square': '1:1 Square',
|
|
667
|
+
'size.portrait34': '3:4 Portrait',
|
|
668
|
+
'size.landscape43': '4:3 Landscape',
|
|
669
|
+
'size.portrait916': '9:16 Vertical',
|
|
670
|
+
'size.portrait23': '2:3 Portrait',
|
|
671
|
+
'size.landscape32': '3:2 Landscape',
|
|
672
|
+
'size.wide169': '16:9 Widescreen',
|
|
673
|
+
'size.ultrawide21': '21:9 Ultrawide',
|
|
674
|
+
'quality.auto': 'Auto',
|
|
675
|
+
'quality.1k': '1K',
|
|
676
|
+
'quality.2k': '2K',
|
|
677
|
+
'quality.4k': '4K',
|
|
678
|
+
'count.one': '1',
|
|
679
|
+
'count.two': '2',
|
|
680
|
+
'count.three': '3',
|
|
681
|
+
'count.four': '4',
|
|
682
|
+
'detail.auto': 'Auto',
|
|
683
|
+
'detail.standard': 'Standard',
|
|
684
|
+
'detail.high': 'High',
|
|
685
|
+
'detail.hint': 'Passthrough parameter supported by some gpt-image-2 gateways; keep "Auto" for official endpoints',
|
|
686
|
+
'model.label': 'Model',
|
|
687
|
+
'model.noEditModels': 'No model is available for this mode',
|
|
688
|
+
'compare.enable': 'Multi-model comparison',
|
|
689
|
+
'compare.models': 'Models to compare',
|
|
690
|
+
'compare.title': 'Multi-model comparison',
|
|
691
|
+
'compare.fullscreen': 'Fullscreen comparison',
|
|
692
|
+
'compare.selectRequired': 'Select at least one model',
|
|
693
|
+
'generate': 'Generate',
|
|
694
|
+
'generating': 'Generating…',
|
|
695
|
+
'edit.upload': 'Click or drag to upload a reference image',
|
|
696
|
+
'edit.uploadHint': 'PNG / JPG / WEBP, up to 10MB',
|
|
697
|
+
'edit.change': 'Change image',
|
|
698
|
+
'edit.remove': 'Remove',
|
|
699
|
+
'edit.required': 'Upload a reference image first',
|
|
700
|
+
'canvas.emptyTitle': 'Start creating',
|
|
701
|
+
'canvas.emptyHint': "Double-click the canvas or use the bottom dock to add image/text nodes; wire image and text nodes into a target node, select it and generate from the composer below",
|
|
702
|
+
'canvas.new': 'New creation',
|
|
703
|
+
'canvas.newHint': 'Start a new creation and clear the preview',
|
|
704
|
+
'canvas.error': 'Generation failed: {error}',
|
|
705
|
+
'canvas.submitting': 'Adding to the generation queue…',
|
|
706
|
+
'canvas.queued': 'Added to the generation queue',
|
|
707
|
+
'canvas.queueHint': '{count} task(s) waiting or generating',
|
|
708
|
+
'canvas.generating': 'Generating images…',
|
|
709
|
+
'canvas.elapsed': 'Elapsed {seconds}s',
|
|
710
|
+
'canvas.images': '{count} image(s) generated',
|
|
711
|
+
'download': 'Download',
|
|
712
|
+
'revisedPrompt': 'Refined prompt: {prompt}',
|
|
713
|
+
'history.title': 'History',
|
|
714
|
+
'history.empty': 'No history yet — generations will be saved here',
|
|
715
|
+
'history.clear': 'Clear',
|
|
716
|
+
'history.clearConfirm': 'Clear all history? This action cannot be undone.',
|
|
717
|
+
'history.restore': 'Restore',
|
|
718
|
+
'history.delete': 'Delete',
|
|
719
|
+
'history.images': 'images',
|
|
720
|
+
'history.viewing': 'History · {time}',
|
|
721
|
+
'history.search': 'Search prompt or model…',
|
|
722
|
+
'history.model': 'Model filter',
|
|
723
|
+
'history.ratio': 'Ratio filter',
|
|
724
|
+
'history.allModels': 'All models',
|
|
725
|
+
'history.allRatios': 'All ratios',
|
|
726
|
+
'gallery.title': 'Gallery',
|
|
727
|
+
'gallery.categories': 'Categories',
|
|
728
|
+
'gallery.all': 'All works',
|
|
729
|
+
'gallery.gpt': 'gpt-image-2',
|
|
730
|
+
'gallery.grok': 'grok-imagine-image',
|
|
731
|
+
'gallery.ratio': 'Aspect ratio',
|
|
732
|
+
'gallery.tags': 'Tags',
|
|
733
|
+
'gallery.filterHint': 'Filter by mode, model, and aspect ratio',
|
|
734
|
+
'gallery.count': '· {count} works',
|
|
735
|
+
'gallery.viewMode': 'View mode',
|
|
736
|
+
'gallery.masonry': 'Masonry',
|
|
737
|
+
'gallery.grid': 'Grid',
|
|
738
|
+
'gallery.sort': 'Sort',
|
|
739
|
+
'gallery.newest': 'Newest',
|
|
740
|
+
'gallery.oldest': 'Oldest',
|
|
741
|
+
'gallery.untitled': 'Untitled work',
|
|
742
|
+
'gallery.search': 'Search works or models…',
|
|
743
|
+
'gallery.tagsPlaceholder': 'Tags, comma separated',
|
|
744
|
+
'gallery.tagsApply': 'Add tags',
|
|
745
|
+
'gallery.editTags': 'Edit tags',
|
|
746
|
+
'gallery.tagsEditShort': 'Edit',
|
|
747
|
+
'gallery.tagsSave': 'Save',
|
|
748
|
+
'gallery.tagsCancel': 'Cancel',
|
|
749
|
+
'gallery.selected': '{count} selected',
|
|
750
|
+
'gallery.selectionDone': 'Done selecting',
|
|
751
|
+
'gallery.selectionClear': 'Clear selection',
|
|
752
|
+
'gallery.downloadSelected': 'Download selected',
|
|
753
|
+
'gallery.exportJson': 'Export JSON',
|
|
754
|
+
'gallery.select': 'Select work',
|
|
755
|
+
'gallery.add': 'Add to gallery',
|
|
756
|
+
'gallery.added': 'Added to gallery',
|
|
757
|
+
'gallery.already': 'Already in gallery',
|
|
758
|
+
'gallery.delete': 'Remove',
|
|
759
|
+
'gallery.openFolder': 'Open folder',
|
|
760
|
+
'gallery.clear': 'Clear gallery',
|
|
761
|
+
'gallery.openFolderHint': 'Open the image save directory (~/.dsh/dsh-imagegen) in the system file manager',
|
|
762
|
+
'gallery.clearConfirm': 'Clear the entire gallery? This action cannot be undone.',
|
|
763
|
+
'gallery.empty': 'The gallery is empty — add images you like here',
|
|
764
|
+
'gallery.viewing': 'Gallery · {time}',
|
|
765
|
+
'preview.title': 'Image preview',
|
|
766
|
+
'preview.open': 'Click to preview',
|
|
767
|
+
'preview.close': 'Close',
|
|
768
|
+
'preview.prev': 'Previous',
|
|
769
|
+
'preview.next': 'Next',
|
|
770
|
+
'preview.index': '{index} / {total}',
|
|
771
|
+
'preview.zoomControls': 'Image zoom controls',
|
|
772
|
+
'preview.zoomIn': 'Zoom in',
|
|
773
|
+
'preview.zoomOut': 'Zoom out',
|
|
774
|
+
'preview.zoomReset': 'Reset zoom',
|
|
775
|
+
'preview.zoomLevel': '{percent}%',
|
|
776
|
+
'preview.copyPrompt': 'Copy prompt',
|
|
777
|
+
'preview.copied': 'Copied',
|
|
778
|
+
'preview.addToEdit': 'Add to image to image',
|
|
779
|
+
'config.missing': 'API not configured: open "Settings → Plugins → Configurable" and fill in api_url and api_key for AI Image.',
|
|
780
|
+
'config.generationTitle': 'Configure the image API first',
|
|
781
|
+
'config.generationHint': 'DSH Settings → Plugins → AI Image has opened. Enter the image API URL and API key, then save before generating.',
|
|
782
|
+
'config.enhancementTitle': 'Configure a prompt enhancement model first',
|
|
783
|
+
'config.enhancementHint': 'DSH Settings → Plugins → AI Image has opened. Configure or reuse a chat API URL and key, choose a chat model, then save.',
|
|
784
|
+
'config.disabledTitle': 'The AI Image plugin is disabled',
|
|
785
|
+
'config.disabledHint': 'DSH Settings → Plugins → AI Image has opened. Enable the plugin, then generate images.',
|
|
786
|
+
'config.configured': 'Connected to {url}',
|
|
787
|
+
'config.disabled': 'The plugin is disabled — re-enable it in Settings.',
|
|
788
|
+
'connection.connected': 'Connected',
|
|
789
|
+
'connection.disconnected': 'Disconnected',
|
|
790
|
+
'panel.collapseConfig': 'Collapse settings panel',
|
|
791
|
+
'panel.expandConfig': 'Expand settings panel',
|
|
792
|
+
'update.available': 'A new version is available: {version}',
|
|
793
|
+
'update.install': 'Update online',
|
|
794
|
+
'update.installing': 'Updating…',
|
|
795
|
+
'update.success': 'Updated to {version}; restart DSH to load it',
|
|
796
|
+
'update.failed': 'Update failed; please try again',
|
|
797
|
+
'update.release': 'View Release',
|
|
798
|
+
'settings.title': 'AI Image (dsh-imagegen)',
|
|
799
|
+
'settings.description': 'Configure the image generation API endpoint and key',
|
|
800
|
+
'settings.currentVersion': 'Current version',
|
|
801
|
+
'settings.apiUrl': 'API URL (api_url)',
|
|
802
|
+
'settings.apiUrlHint': 'OpenAI-compatible base URL, e.g. https://api.openai.com/v1; /images/generations and /images/edits are appended',
|
|
803
|
+
'settings.apiKey': 'API Key (api_key)',
|
|
804
|
+
'settings.apiKeyHint': 'Bearer key, stored in plaintext in the local settings document; the UI only shows whether it is set',
|
|
805
|
+
'settings.apiKeySet': 'A key is stored; type a new value to replace it, or click "Clear" to remove it',
|
|
806
|
+
'settings.apiKeyClear': 'Clear',
|
|
807
|
+
'settings.imageModelsTitle': 'Image generation models',
|
|
808
|
+
'settings.imageModelsHint': 'Save the API URL and key, then detect candidate models. Select only models that actually support image generation.',
|
|
809
|
+
'settings.imageModels': 'Allowed image models',
|
|
810
|
+
'settings.imageModelsManualHint': 'One model per line. Add models manually when the API does not provide /models. The panel and Agent can use only this list.',
|
|
811
|
+
'settings.imageModelsFetch': 'Detect available models',
|
|
812
|
+
'settings.imageModelsLoading': 'Detecting…',
|
|
813
|
+
'settings.imageModelsCandidates': 'Detected candidate models (select, then save)',
|
|
814
|
+
'settings.addModel': '+ Add manually',
|
|
815
|
+
'settings.cancelAddModel': 'Hide add',
|
|
816
|
+
'settings.addModelPlaceholder': 'Enter a model name, e.g. qwen-image',
|
|
817
|
+
'settings.addModelConfirm': 'Add',
|
|
818
|
+
'settings.removeModel': 'Remove model',
|
|
819
|
+
'settings.optional': 'Optional',
|
|
820
|
+
'settings.moreOptions': 'More settings',
|
|
821
|
+
'settings.storageTitle': 'Object storage sync',
|
|
822
|
+
'settings.storageEnabled': 'Enable object storage sync',
|
|
823
|
+
'settings.storageHint': 'After images land locally, mirror them to an S3-compatible store (Tencent COS / Alibaba OSS / Qiniu S3 / MinIO / R2 …)',
|
|
824
|
+
'settings.storageEndpoint': 'Endpoint (with bucket)',
|
|
825
|
+
'settings.storageEndpointHint': 'S3-compatible URL, e.g. https://bucket-appid.cos.ap-guangzhou.myqcloud.com or https://bucket.oss-cn-hangzhou.aliyuncs.com',
|
|
826
|
+
'settings.storageRegion': 'Region',
|
|
827
|
+
'settings.storageRegionHint': 'Region id used for signing, e.g. ap-guangzhou / oss-cn-hangzhou / cn-east-1',
|
|
828
|
+
'settings.storagePrefix': 'Key prefix',
|
|
829
|
+
'settings.storagePrefixHint': 'Object keys look like prefix/gallery|images/<file>',
|
|
830
|
+
'settings.storageAccessKey': 'Access Key',
|
|
831
|
+
'settings.storageAccessKeyHint': 'S3-compatible access key id (COS SecretId / OSS AccessKeyId / Qiniu AK)',
|
|
832
|
+
'settings.storageSecretKey': 'Secret Key',
|
|
833
|
+
'settings.storageSecretKeyHint': 'S3-compatible secret, stored only in the local settings document',
|
|
834
|
+
'settings.storageSyncGallery': 'Sync gallery images',
|
|
835
|
+
'settings.storageSyncGalleryHint': 'Upload images when they are added to the gallery',
|
|
836
|
+
'settings.storageSyncHistory': 'Sync history images',
|
|
837
|
+
'settings.storageSyncHistoryHint': 'Also upload every generation result (can be a lot)',
|
|
838
|
+
'settings.storageTest': 'Test connection',
|
|
839
|
+
'settings.storageTesting': 'Testing…',
|
|
840
|
+
'settings.storageTestOk': 'Connected ({ms} ms), probe file uploaded',
|
|
841
|
+
'settings.storageTestFailed': 'Connection failed: {error}',
|
|
842
|
+
'settings.storageKeyHint': 'Note: syncing is best-effort and never blocks local saving; browse synced files under this prefix in your provider console.',
|
|
843
|
+
'settings.promptEnhanceTitle': 'Prompt enhancement model',
|
|
844
|
+
'settings.promptEnhanceHint': 'Expands short requests into complete image prompts. Blank URL and key reuse the image API configuration.',
|
|
845
|
+
'settings.promptApiUrl': 'Chat API URL (optional)',
|
|
846
|
+
'settings.promptApiUrlHint': 'OpenAI-compatible base URL. Leave blank to reuse the image API URL.',
|
|
847
|
+
'settings.promptApiKey': 'Chat API key (optional)',
|
|
848
|
+
'settings.promptApiKeyHint': 'Leave blank to reuse the image API key.',
|
|
849
|
+
'settings.promptModel': 'Chat model',
|
|
850
|
+
'settings.promptModelHint': 'Select or enter a model supporting /chat/completions.',
|
|
851
|
+
'settings.promptModelDetectionHint': 'Uses the image API by default. Detect and select one model.',
|
|
852
|
+
'settings.promptModelsFetch': 'Fetch available models',
|
|
853
|
+
'settings.promptModelsLoading': 'Fetching…',
|
|
854
|
+
'settings.promptModelsSelect': 'Select a model',
|
|
855
|
+
'settings.promptModelsCandidates': 'Detected chat model candidates',
|
|
856
|
+
'settings.addPromptModelPlaceholder': 'Enter a chat model name, e.g. gpt-4.1-mini',
|
|
857
|
+
'settings.promptApiAdvanced': 'Use a separate chat API (optional)',
|
|
858
|
+
'settings.announceToAgent': 'Announce this plugin to agents',
|
|
859
|
+
'settings.announceToAgentHint': 'When on, the plugin presence and capabilities are written into every agent system prompt',
|
|
860
|
+
'settings.allowAgentImageGeneration': 'Allow agents to generate images',
|
|
861
|
+
'settings.allowAgentImageGenerationHint': 'On by default. When off, agents cannot submit, query, or cancel image tasks; the sidebar studio remains available.',
|
|
862
|
+
'settings.enabled': 'Enable plugin',
|
|
863
|
+
'settings.enabledHint': 'When off, the generation studio is unavailable (this card stays available)',
|
|
864
|
+
'settings.save': 'Save',
|
|
865
|
+
'settings.saving': 'Saving…',
|
|
866
|
+
'settings.discard': 'Discard',
|
|
867
|
+
'settings.unsaved': 'Unsaved changes',
|
|
868
|
+
'settings.saveFailed': 'Save failed, please retry',
|
|
869
|
+
'settings.readOnly': 'The settings document is read-only; saving is disabled.',
|
|
870
|
+
'settings.notExposed': 'Settings namespace unavailable: this deployment does not serve this plugin\'s settings.',
|
|
871
|
+
'settings.expand': 'Expand',
|
|
872
|
+
'settings.collapse': 'Collapse',
|
|
873
|
+
'settings.inherit': 'Inherit',
|
|
874
|
+
'settings.on': 'On',
|
|
875
|
+
'settings.off': 'Off',
|
|
876
|
+
'settings.overridden': 'Overridden',
|
|
877
|
+
'settings.reset': 'Reset',
|
|
878
|
+
'settings.invalidNumber': 'Enter a valid number',
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
|
|
882
|
+
// template library
|
|
883
|
+
'templates.open': 'Templates',
|
|
884
|
+
'templates.title': 'Prompt Template Library',
|
|
885
|
+
'templates.sources': 'Template sources',
|
|
886
|
+
'templates.meta': '{count} templates · {origin}',
|
|
887
|
+
'templates.origin.bundled': 'bundled snapshot',
|
|
888
|
+
'templates.origin.refreshed': 'refreshed online',
|
|
889
|
+
'templates.search': 'Search template titles or prompts…',
|
|
890
|
+
'templates.all': 'All',
|
|
891
|
+
'templates.close': 'Close',
|
|
892
|
+
'templates.back': 'Back to list',
|
|
893
|
+
'templates.use': 'Use this prompt',
|
|
894
|
+
'templates.copy': 'Copy prompt',
|
|
895
|
+
'templates.copied': 'Copied',
|
|
896
|
+
'templates.refresh': 'Refresh this library',
|
|
897
|
+
'templates.refreshing': 'Refreshing…',
|
|
898
|
+
'templates.refreshed': 'Refreshed — {count} templates',
|
|
899
|
+
'templates.refreshFailed': 'Refresh failed: {error}',
|
|
900
|
+
'templates.favorites': 'Favorites',
|
|
901
|
+
'templates.favoritesHint': 'Show favorited templates only',
|
|
902
|
+
'templates.favoritesEmpty': 'No favorites yet — tap the star in a card\'s top-right corner to save one',
|
|
903
|
+
'templates.favoriteAdd': 'Favorite this template',
|
|
904
|
+
'templates.favoriteRemove': 'Remove from favorites',
|
|
905
|
+
'templates.favorite': 'Favorite',
|
|
906
|
+
'templates.unfavorite': 'Favorited',
|
|
907
|
+
'templates.cacheAll': 'Cache all images',
|
|
908
|
+
'templates.cacheAllHint': 'Mirror every reference image of the current library to local disk through the host proxy, for offline browsing',
|
|
909
|
+
'templates.caching': 'Caching {done}/{total}…',
|
|
910
|
+
'templates.cached': 'All images cached',
|
|
911
|
+
'templates.empty': 'No matching templates',
|
|
912
|
+
'templates.loading': 'Loading the template library…',
|
|
913
|
+
'templates.loadFailed': 'Failed to load the library: {error}',
|
|
914
|
+
'templates.retry': 'Retry',
|
|
915
|
+
'templates.attribution': 'Templates and images come from each source site; author links are on each template',
|
|
916
|
+
'templates.source': 'Source: {label}',
|
|
917
|
+
'templates.featured': 'Featured',
|
|
918
|
+
// inspiration wall (studio empty state)
|
|
919
|
+
'inspiration.title': 'Inspiration', 'inspiration.shuffle': 'Shuffle',
|
|
920
|
+
'inspiration.shuffling': 'Shuffling…',
|
|
921
|
+
'inspiration.useHint': 'Click to use this prompt',
|
|
922
|
+
// channel management
|
|
923
|
+
'channels.title': 'Channels',
|
|
924
|
+
'channels.hint': 'Fill in each channel\'s API URL and key to use its models',
|
|
925
|
+
'channels.empty': 'No channels yet — add one below',
|
|
926
|
+
'channels.addProvider': 'Add provider',
|
|
927
|
+
'channels.addCustom': 'Add custom channel',
|
|
928
|
+
'channels.untitled': 'Untitled channel',
|
|
929
|
+
'channels.keySet': 'Key set',
|
|
930
|
+
'channels.keyMissing': 'Key missing',
|
|
931
|
+
'channels.modelCount': '{n} model(s)',
|
|
932
|
+
'channels.noModels': 'No models',
|
|
933
|
+
'channels.defaultLabel': 'Default',
|
|
934
|
+
'channels.statusReady': 'Ready',
|
|
935
|
+
'channels.statusIncomplete': 'Config incomplete',
|
|
936
|
+
'channels.edit': 'Edit',
|
|
937
|
+
'channels.delete': 'Delete',
|
|
938
|
+
'channels.deleteConfirmTitle': 'Delete channel "{name}"? Its key will be removed; history and gallery records are kept.',
|
|
939
|
+
'channels.confirm': 'Delete',
|
|
940
|
+
'channels.cancel': 'Cancel',
|
|
941
|
+
'channels.editorTitle': 'Channel',
|
|
942
|
+
'channels.editorSaveNote': 'Changes take effect with the card\'s "Save" button',
|
|
943
|
+
'channels.displayName': 'Display name',
|
|
944
|
+
'channels.apiUrl': 'API URL',
|
|
945
|
+
'channels.apiKey': 'API key',
|
|
946
|
+
'channels.keyReplaceHint': 'Configured — type a new value to replace it',
|
|
947
|
+
'channels.keyMissingHint': 'Enter a key',
|
|
948
|
+
'channels.keyClear': 'Clear key',
|
|
949
|
+
'channels.modelCatalogTitle': 'Model catalog',
|
|
950
|
+
'channels.noModelsHint': 'No models yet: run "Detect" to pull candidates, or add one manually; the alias (display name) defaults to the upstream model id and can be renamed.',
|
|
951
|
+
'channels.detect': 'Re-detect',
|
|
952
|
+
'channels.detecting': 'Detecting…',
|
|
953
|
+
'channels.detectSuccess': 'Connected ✓ · {n} candidates',
|
|
954
|
+
'channels.detectFailed': 'Detection failed: {error}',
|
|
955
|
+
'channels.detectOk': 'Connected to this API',
|
|
956
|
+
'channels.modelAliasLabel': 'Display name (alias)',
|
|
957
|
+
'channels.modelIdLabel': 'Upstream model id',
|
|
958
|
+
'channels.generated': 'Generated {n} time(s)',
|
|
959
|
+
'channels.unknownProtocol': 'Unknown protocol — best-effort OpenAI',
|
|
960
|
+
'channels.removeModel': 'Remove model',
|
|
961
|
+
'channels.manualAddPlaceholder': 'Enter a model id, e.g. qwen-image',
|
|
962
|
+
'channels.addModelConfirm': 'Add',
|
|
963
|
+
'channels.copyFrom': 'Copy from another channel…',
|
|
964
|
+
'channels.copyApply': 'Copy',
|
|
965
|
+
'channels.candidatesTitle': 'Image model candidates (click to add)',
|
|
966
|
+
'channels.deleteThisChannel': 'Delete this channel',
|
|
967
|
+
'channels.setDefault': 'Set as default channel',
|
|
968
|
+
'channels.presetPickerTitle': 'Add provider',
|
|
969
|
+
'channels.presetPickerHint': 'Pick a built-in provider — only the API key is needed',
|
|
970
|
+
'channels.presetCustomHint': 'Configure the API URL, key, and model catalog yourself',
|
|
971
|
+
'channels.presetLoadFailed': 'Failed to load providers: {error}',
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
/** Locale key union. */
|
|
975
|
+
export type ImageGenKey = keyof typeof zh
|
|
976
|
+
|
|
977
|
+
/** Russian mirror of every key (полный словарь интерфейса). */
|
|
978
|
+
export const ru: Record<keyof typeof zh, string> = {
|
|
979
|
+
'entry.label': 'ИИ-генерация',
|
|
980
|
+
'entry.tooltip': 'Панель ИИ-генерации изображений (gpt-image-2 / glm-image / grok-imagine-image / nanobanana / seedream)',
|
|
981
|
+
'entry.newSession': 'Новая сессия',
|
|
982
|
+
'entry.newSessionTooltip': 'Создать новую сессию DSH',
|
|
983
|
+
'entry.image': 'Генерация',
|
|
984
|
+
'panel.title': 'ИИ-генерация изображений',
|
|
985
|
+
'panel.githubTip': 'Понравился плагин или есть идеи? Поставьте звезду или откройте issue на GitHub!',
|
|
986
|
+
'conversation.add': 'В диалог',
|
|
987
|
+
'conversation.adding': 'Добавляем…',
|
|
988
|
+
'conversation.added': 'Изображение добавлено в текущий диалог',
|
|
989
|
+
'conversation.addHint': 'После добавления можно править через /edit_image; команда использует модель плагина',
|
|
990
|
+
'conversation.noSession': 'Сначала откройте сессию, затем добавьте изображение',
|
|
991
|
+
'conversation.unavailable': 'Текущая сессия недоступна',
|
|
992
|
+
'conversation.busy': 'Диалог отправляет сообщение, попробуйте позже',
|
|
993
|
+
'mode.text': 'Из текста',
|
|
994
|
+
'mode.edit': 'Из изображения',
|
|
995
|
+
'workspace.label': 'Режим работы',
|
|
996
|
+
'workspace.normal': 'Генерация',
|
|
997
|
+
'workspace.canvas': 'Бесконечный холст',
|
|
998
|
+
'workspace.ecommerce': 'E-commerce',
|
|
999
|
+
'canvas.addImage': 'Добавить изображение',
|
|
1000
|
+
'canvas.addText': 'Добавить текст',
|
|
1001
|
+
'canvas.generate': 'Создать изображение',
|
|
1002
|
+
'canvas.addToCanvas': 'Добавить на холст',
|
|
1003
|
+
'canvas.untitled': 'Безымянный холст',
|
|
1004
|
+
'canvas.imageNode': 'Узел изображения',
|
|
1005
|
+
'canvas.textNode': 'Текстовый узел',
|
|
1006
|
+
'canvas.fromGallery': 'Из галереи',
|
|
1007
|
+
'canvas.fromHistory': 'Из истории',
|
|
1008
|
+
'canvas.project': 'Проект холста',
|
|
1009
|
+
'canvas.newCanvas': 'Новый холст',
|
|
1010
|
+
'canvas.deleteCanvas': 'Удалить холст',
|
|
1011
|
+
'canvas.deleteCanvasConfirm': 'Нажмите ещё раз для подтверждения',
|
|
1012
|
+
'canvas.rename': 'Переименовать холст',
|
|
1013
|
+
'canvas.renameHint': 'Двойной клик — переименовать',
|
|
1014
|
+
'canvas.background': 'Сменить фон холста',
|
|
1015
|
+
'canvas.undo': 'Отменить (Ctrl+Z)',
|
|
1016
|
+
'canvas.redo': 'Повторить (Ctrl+Shift+Z)',
|
|
1017
|
+
'canvas.saving': 'Сохранение…',
|
|
1018
|
+
'canvas.saved': 'Сохранено',
|
|
1019
|
+
'canvas.saveFailed': 'Ошибка сохранения',
|
|
1020
|
+
'canvas.loading': 'Загрузка…',
|
|
1021
|
+
'canvas.toolSelect': 'Выбор / перемещение узлов',
|
|
1022
|
+
'canvas.toolPan': 'Перетаскивание холста (Space / Ctrl)',
|
|
1023
|
+
'canvas.delete': 'Удалить',
|
|
1024
|
+
'canvas.duplicate': 'Дублировать (Ctrl+D)',
|
|
1025
|
+
'canvas.download': 'Скачать изображение',
|
|
1026
|
+
'canvas.fitView': 'Показать всё содержимое',
|
|
1027
|
+
'canvas.minimapOpen': 'Открыть мини-карту',
|
|
1028
|
+
'canvas.minimapClose': 'Скрыть мини-карту',
|
|
1029
|
+
'canvas.minimap': 'Мини-карта холста',
|
|
1030
|
+
'canvas.zoom': 'Масштаб',
|
|
1031
|
+
'canvas.textPlaceholder': 'Введите текст…',
|
|
1032
|
+
'canvas.generatingNode': 'Генерация…',
|
|
1033
|
+
'canvas.generateFailed': 'Не удалось создать изображение',
|
|
1034
|
+
'canvas.retry': 'Повторить',
|
|
1035
|
+
'canvas.emptyImageNode': 'Нажмите, чтобы загрузить изображение',
|
|
1036
|
+
'canvas.connectHint': 'Потяните к другому узлу, чтобы соединить',
|
|
1037
|
+
'canvas.resizeHint': 'Потяните, чтобы изменить размер (пропорции зафиксированы)',
|
|
1038
|
+
'canvas.count': 'Кол-во изображений',
|
|
1039
|
+
'canvas.configNode': 'Конфигурация генерации',
|
|
1040
|
+
'canvas.addConfigNode': 'Добавить узел конфигурации',
|
|
1041
|
+
'canvas.configHint': 'Подключите узлы изображений слева как референсы и текстовые узлы как промпт; выберите этот узел и генерируйте через панель ниже.',
|
|
1042
|
+
'canvas.composerLinked': 'Подключено узлов ввода: {count}',
|
|
1043
|
+
'canvas.composerPlaceholder': 'Опишите изображение; либо подключите текстовые узлы как промпт…',
|
|
1044
|
+
'canvas.countUnit': '{count} шт.',
|
|
1045
|
+
'canvas.model': 'Модель изображений',
|
|
1046
|
+
'canvas.modelPlaceholder': 'Выберите модель',
|
|
1047
|
+
'canvas.size': 'Пропорции',
|
|
1048
|
+
'canvas.sizeAuto': 'Авто',
|
|
1049
|
+
'canvas.quality': 'Качество',
|
|
1050
|
+
'canvas.qualityAuto': 'Авто',
|
|
1051
|
+
'canvas.needApi': 'Сначала настройте API генерации',
|
|
1052
|
+
'canvas.needPrompt': 'Введите описание генерации',
|
|
1053
|
+
'canvas.needModel': 'Нет доступной модели изображений',
|
|
1054
|
+
'canvas.openSettings': 'Открыть настройки',
|
|
1055
|
+
'canvas.deleteConnection': 'Удалить связь',
|
|
1056
|
+
'canvas.paste': 'Вставить (Ctrl+V)',
|
|
1057
|
+
'canvas.addImageNode': 'Добавить узел изображения',
|
|
1058
|
+
'canvas.addTextNode': 'Добавить текстовый узел',
|
|
1059
|
+
'canvas.dismiss': 'Закрыть',
|
|
1060
|
+
'canvas.close': 'Закрыть',
|
|
1061
|
+
'canvas.tabUpload': 'Загрузка',
|
|
1062
|
+
'canvas.tabHistory': 'История',
|
|
1063
|
+
'canvas.tabGallery': 'Галерея',
|
|
1064
|
+
'canvas.tabGenerate': 'AI-генерация',
|
|
1065
|
+
'canvas.dropHint': 'Перетащите изображения сюда',
|
|
1066
|
+
'canvas.dropSub': 'Несколько файлов, PNG / JPG / WebP / GIF',
|
|
1067
|
+
'canvas.untitledWork': 'Без названия',
|
|
1068
|
+
'canvas.picked': 'Выбрано: {count}',
|
|
1069
|
+
'canvas.generateAndAdd': 'Создать и добавить на холст',
|
|
1070
|
+
'chat.expand': 'Показать диалог',
|
|
1071
|
+
'chat.collapse': 'Скрыть диалог',
|
|
1072
|
+
'chat.toggle': 'Диалог',
|
|
1073
|
+
'config.resizeHint': 'Потяните, чтобы изменить ширину панели параметров',
|
|
1074
|
+
'ecommerce.generation': 'Параметры генерации',
|
|
1075
|
+
'ecommerce.title': 'Режим e-commerce',
|
|
1076
|
+
'ecommerce.badge': 'Превью',
|
|
1077
|
+
'ecommerce.short': 'E-com',
|
|
1078
|
+
'ecommerce.anchorPending': 'Главное изображение готово, остальные генерируются по нему для единого стиля…',
|
|
1079
|
+
'ecommerce.anchorFailed': 'Не удалось создать главное изображение, остальные приостановлены. Повторите главное (или всю группу) и продолжите.',
|
|
1080
|
+
'ecommerce.anchorNote': 'Якорная генерация: сначала главное изображение, остальные создаются по нему для единого стиля',
|
|
1081
|
+
'ecommerce.noAssetWarn': 'Товар не загружен: главное изображение будет создано по описанию и станет якорем; загрузите фото товара для большей точности',
|
|
1082
|
+
'ecommerce.product': 'Товар',
|
|
1083
|
+
'ecommerce.productName': 'Название товара (обязательно)',
|
|
1084
|
+
'ecommerce.projectName': 'Название проекта (необязательно)',
|
|
1085
|
+
'ecommerce.constraints': 'Преимущества и ограничения',
|
|
1086
|
+
'ecommerce.sellingPoints': 'Преимущества товара, например: водостойкость / большая вместимость / компактность',
|
|
1087
|
+
'ecommerce.protectedFeatures': 'Что обязательно сохранить: цвет, логотип, текст упаковки, конструкцию',
|
|
1088
|
+
'ecommerce.styleHint': 'Стиль, например: премиальный / реалистичный / естественный свет',
|
|
1089
|
+
'ecommerce.setStructure': 'Структура комплекта',
|
|
1090
|
+
'ecommerce.preview': 'Создать превью комплекта',
|
|
1091
|
+
'ecommerce.planTitle': 'Будет сгенерировано изображений: {count}',
|
|
1092
|
+
'ecommerce.planSlot': '{count} шт. · {description}',
|
|
1093
|
+
'ecommerce.confirm': 'Сгенерировать весь комплект',
|
|
1094
|
+
'ecommerce.uploadRef': 'Материалы товара (необязательно, до 4 шт.: товар / упаковка / детали / стиль)',
|
|
1095
|
+
'ecommerce.uploadShort': 'Загрузить материалы',
|
|
1096
|
+
'ecommerce.sellingTitle': 'Преимущества товара',
|
|
1097
|
+
'ecommerce.advanced': 'Дополнительно (площадка / ограничения)',
|
|
1098
|
+
'ecommerce.params': 'Параметры',
|
|
1099
|
+
'ecommerce.platformLabel': 'Площадка',
|
|
1100
|
+
'ecommerce.languageLabel': 'Язык текста',
|
|
1101
|
+
'ecommerce.customLanguageOption': 'Свой язык…',
|
|
1102
|
+
'ecommerce.customLanguageLabel': 'Свой язык',
|
|
1103
|
+
'ecommerce.customLanguagePlaceholder': 'Введите язык, например: Русский / 日本語 / Português',
|
|
1104
|
+
'ecommerce.ratioLabel': 'Пропорции',
|
|
1105
|
+
'ecommerce.categoryLabel': 'Категория',
|
|
1106
|
+
'ecommerce.multiSelect': 'Можно выбрать несколько',
|
|
1107
|
+
'ecommerce.countHint': 'Нажмите, чтобы изменить количество (1-4)',
|
|
1108
|
+
'ecommerce.refSettings': 'Настройки референсов (необязательно)',
|
|
1109
|
+
'ecommerce.styleTitle': 'Стиль / дополнения',
|
|
1110
|
+
'ecommerce.protectedLabel': 'Обязательно сохранить (необязательно)',
|
|
1111
|
+
'ecommerce.assetsFull': 'Не более 4 материалов',
|
|
1112
|
+
'ecommerce.refSelect': 'Референс для этого назначения',
|
|
1113
|
+
'ecommerce.refNone': 'Без референса',
|
|
1114
|
+
'ecommerce.role.product': 'Товар',
|
|
1115
|
+
'ecommerce.role.packaging': 'Упаковка',
|
|
1116
|
+
'ecommerce.role.detail': 'Детали/ракурс',
|
|
1117
|
+
'ecommerce.role.style': 'Стиль',
|
|
1118
|
+
'ecommerce.footerReady': 'Будет сгенерировано {count} изображений',
|
|
1119
|
+
'ecommerce.footerEmpty': 'Выберите структуру комплекта',
|
|
1120
|
+
'ecommerce.results.title': 'Результаты комплекта',
|
|
1121
|
+
'ecommerce.results.progress': '{done}/{total} готово',
|
|
1122
|
+
'ecommerce.results.failed': '{count} с ошибкой',
|
|
1123
|
+
'ecommerce.results.empty': 'После запуска генерации здесь появятся статус и результат каждого изображения',
|
|
1124
|
+
'ecommerce.results.regenerate': 'Сгенерировать заново',
|
|
1125
|
+
'ecommerce.results.export': 'Экспорт списка',
|
|
1126
|
+
'ecommerce.results.newProduct': 'Новый товар',
|
|
1127
|
+
'prompt.placeholder': 'Опишите желаемое изображение, например: рыжий кот в шлеме космонавта смотрит в телескоп на Луне, акварель, мягкий свет…',
|
|
1128
|
+
'prompt.required': 'Введите промпт',
|
|
1129
|
+
'prompt.count': '{count}',
|
|
1130
|
+
'prompt.enhance': 'Улучш.',
|
|
1131
|
+
'prompt.enhancing': 'Улучшаем…',
|
|
1132
|
+
'prompt.enhanceHint': 'Развернуть краткий промпт через настроенную диалоговую модель',
|
|
1133
|
+
'prompt.configTitle': 'Сначала настройте модель улучшения промптов',
|
|
1134
|
+
'prompt.configHint': 'Настройки открыты. Перейдите в «Плагины → ИИ-генерация», укажите или переиспользуйте API-адрес и ключ, выберите диалоговую модель и сохраните.',
|
|
1135
|
+
'tasks.title': 'Задачи генерации',
|
|
1136
|
+
'tasks.queued': 'В очереди',
|
|
1137
|
+
'tasks.running': 'Генерация',
|
|
1138
|
+
'tasks.completed': 'Готово',
|
|
1139
|
+
'tasks.failed': 'Ошибка',
|
|
1140
|
+
'tasks.cancelled': 'Отменено',
|
|
1141
|
+
'tasks.cancel': 'Отменить',
|
|
1142
|
+
'tasks.retry': 'Повторить',
|
|
1143
|
+
'params.size': 'Размер',
|
|
1144
|
+
'params.quality': 'Чёткость',
|
|
1145
|
+
'params.count': 'Количество',
|
|
1146
|
+
'params.detail': 'Детализация',
|
|
1147
|
+
'size.auto': 'Авто',
|
|
1148
|
+
'size.square': '1:1 квадрат',
|
|
1149
|
+
'size.portrait34': '3:4 верт.',
|
|
1150
|
+
'size.landscape43': '4:3 гориз.',
|
|
1151
|
+
'size.portrait916': '9:16 верт.',
|
|
1152
|
+
'size.portrait23': '2:3 верт.',
|
|
1153
|
+
'size.landscape32': '3:2 гориз.',
|
|
1154
|
+
'size.wide169': '16:9 шир.',
|
|
1155
|
+
'size.ultrawide21': '21:9 ультрашир.',
|
|
1156
|
+
'quality.auto': 'Авто',
|
|
1157
|
+
'quality.1k': '1K',
|
|
1158
|
+
'quality.2k': '2K',
|
|
1159
|
+
'quality.4k': '4K',
|
|
1160
|
+
'count.one': '1 шт.',
|
|
1161
|
+
'count.two': '2 шт.',
|
|
1162
|
+
'count.three': '3 шт.',
|
|
1163
|
+
'count.four': '4 шт.',
|
|
1164
|
+
'detail.auto': 'Авто',
|
|
1165
|
+
'detail.standard': 'Стандарт',
|
|
1166
|
+
'detail.high': 'Высокая',
|
|
1167
|
+
'detail.hint': 'Сквозной параметр, поддерживают некоторые шлюзы gpt-image-2; для официального API оставьте «Авто»',
|
|
1168
|
+
'model.label': 'Модель',
|
|
1169
|
+
'model.noEditModels': 'В текущем режиме нет доступных моделей',
|
|
1170
|
+
'compare.enable': 'Сравнение моделей',
|
|
1171
|
+
'compare.models': 'Модели для сравнения',
|
|
1172
|
+
'compare.title': 'Сравнение результатов моделей',
|
|
1173
|
+
'compare.fullscreen': 'Полноэкранное сравнение',
|
|
1174
|
+
'compare.selectRequired': 'Выберите хотя бы одну модель для сравнения',
|
|
1175
|
+
'generate': 'Сгенерировать',
|
|
1176
|
+
'generating': 'Генерация…',
|
|
1177
|
+
'edit.upload': 'Нажмите или перетащите референс',
|
|
1178
|
+
'edit.uploadHint': 'PNG / JPG / WEBP, до 10 МБ',
|
|
1179
|
+
'edit.change': 'Заменить изображение',
|
|
1180
|
+
'edit.remove': 'Убрать',
|
|
1181
|
+
'edit.required': 'Сначала загрузите референс',
|
|
1182
|
+
'canvas.emptyTitle': 'Начните творить',
|
|
1183
|
+
'canvas.emptyHint': 'Двойной клик или нижняя панель добавляют узлы; соедините узлы изображений и текста с целевым узлом, выберите его и генерируйте внизу',
|
|
1184
|
+
'canvas.new': 'Новая генерация',
|
|
1185
|
+
'canvas.newHint': 'Начать новую генерацию и очистить просмотр',
|
|
1186
|
+
'canvas.error': 'Ошибка генерации: {error}',
|
|
1187
|
+
'canvas.submitting': 'Ставим в очередь…',
|
|
1188
|
+
'canvas.queued': 'Задача в очереди',
|
|
1189
|
+
'canvas.queueHint': 'Сейчас ожидают {count} задач',
|
|
1190
|
+
'canvas.generating': 'Генерируем изображение…',
|
|
1191
|
+
'canvas.elapsed': 'Прошло {seconds} с',
|
|
1192
|
+
'canvas.images': 'Сгенерировано: {count}',
|
|
1193
|
+
'download': 'Скачать',
|
|
1194
|
+
'revisedPrompt': 'Улучшенный промпт: {prompt}',
|
|
1195
|
+
'history.title': 'История',
|
|
1196
|
+
'history.empty': 'Истории пока нет — созданные изображения появятся здесь',
|
|
1197
|
+
'history.clear': 'Очистить',
|
|
1198
|
+
'history.clearConfirm': 'Очистить всю историю? Действие необратимо.',
|
|
1199
|
+
'history.restore': 'Восстановить',
|
|
1200
|
+
'history.delete': 'Удалить',
|
|
1201
|
+
'history.images': 'шт.',
|
|
1202
|
+
'history.viewing': 'История · {time}',
|
|
1203
|
+
'history.search': 'Поиск по промптам и моделям…',
|
|
1204
|
+
'history.model': 'Фильтр по модели',
|
|
1205
|
+
'history.ratio': 'Фильтр по пропорциям',
|
|
1206
|
+
'history.allModels': 'Все модели',
|
|
1207
|
+
'history.allRatios': 'Все пропорции',
|
|
1208
|
+
'gallery.title': 'Галерея',
|
|
1209
|
+
'gallery.categories': 'Категории',
|
|
1210
|
+
'gallery.all': 'Все работы',
|
|
1211
|
+
'gallery.gpt': 'gpt-image-2',
|
|
1212
|
+
'gallery.grok': 'grok-imagine-image',
|
|
1213
|
+
'gallery.ratio': 'Пропорции',
|
|
1214
|
+
'gallery.tags': 'Метки',
|
|
1215
|
+
'gallery.filterHint': 'Фильтр галереи по режиму, модели и пропорциям',
|
|
1216
|
+
'gallery.count': '· всего {count}',
|
|
1217
|
+
'gallery.viewMode': 'Вид',
|
|
1218
|
+
'gallery.masonry': 'Плитка',
|
|
1219
|
+
'gallery.grid': 'Сетка',
|
|
1220
|
+
'gallery.sort': 'Сортировка',
|
|
1221
|
+
'gallery.newest': 'Сначала новые',
|
|
1222
|
+
'gallery.oldest': 'Сначала старые',
|
|
1223
|
+
'gallery.untitled': 'Без названия',
|
|
1224
|
+
'gallery.search': 'Поиск по работам и моделям…',
|
|
1225
|
+
'gallery.tagsPlaceholder': 'Метки через запятую',
|
|
1226
|
+
'gallery.tagsApply': 'Добавить метки',
|
|
1227
|
+
'gallery.editTags': 'Править метки',
|
|
1228
|
+
'gallery.tagsEditShort': 'Правка',
|
|
1229
|
+
'gallery.tagsSave': 'Сохранить',
|
|
1230
|
+
'gallery.tagsCancel': 'Отмена',
|
|
1231
|
+
'gallery.selected': 'Выбрано: {count}',
|
|
1232
|
+
'gallery.selectionDone': 'Завершить выбор',
|
|
1233
|
+
'gallery.selectionClear': 'Снять выбор',
|
|
1234
|
+
'gallery.downloadSelected': 'Скачать выбранные',
|
|
1235
|
+
'gallery.exportJson': 'Экспорт JSON',
|
|
1236
|
+
'gallery.select': 'Выбрать работы',
|
|
1237
|
+
'gallery.add': 'В галерею',
|
|
1238
|
+
'gallery.added': 'Добавлено в галерею',
|
|
1239
|
+
'gallery.already': 'Уже в галерее',
|
|
1240
|
+
'gallery.delete': 'Убрать из галереи',
|
|
1241
|
+
'gallery.openFolder': 'Открыть папку',
|
|
1242
|
+
'gallery.clear': 'Очистить галерею',
|
|
1243
|
+
'gallery.openFolderHint': 'Открыть каталог сохранения изображений (~/.dsh/dsh-imagegen) в проводнике',
|
|
1244
|
+
'gallery.clearConfirm': 'Очистить всю галерею? Действие необратимо.',
|
|
1245
|
+
'gallery.empty': 'Галерея пуста — добавьте понравившиеся изображения',
|
|
1246
|
+
'gallery.viewing': 'Галерея · {time}',
|
|
1247
|
+
'preview.title': 'Просмотр изображения',
|
|
1248
|
+
'preview.open': 'Открыть просмотр',
|
|
1249
|
+
'preview.close': 'Закрыть',
|
|
1250
|
+
'preview.prev': 'Назад',
|
|
1251
|
+
'preview.next': 'Вперёд',
|
|
1252
|
+
'preview.index': '{index} / {total}',
|
|
1253
|
+
'preview.zoomControls': 'Управление масштабом',
|
|
1254
|
+
'preview.zoomIn': 'Увеличить',
|
|
1255
|
+
'preview.zoomOut': 'Уменьшить',
|
|
1256
|
+
'preview.zoomReset': 'Сбросить масштаб',
|
|
1257
|
+
'preview.zoomLevel': '{percent}%',
|
|
1258
|
+
'preview.copyPrompt': 'Копировать промпт',
|
|
1259
|
+
'preview.copied': 'Скопировано',
|
|
1260
|
+
'preview.addToEdit': 'В режим img2img',
|
|
1261
|
+
'config.missing': 'API не настроен: откройте «Настройки → Плагины → Настраиваемые» и заполните api_url и api_key для ИИ-генерации.',
|
|
1262
|
+
'config.generationTitle': 'Сначала настройте API генерации',
|
|
1263
|
+
'config.generationHint': 'Открыты «Настройки → Плагины → ИИ-генерация». Укажите адрес и ключ API генерации, сохраните — и можно творить.',
|
|
1264
|
+
'config.enhancementTitle': 'Сначала настройте модель улучшения промптов',
|
|
1265
|
+
'config.enhancementHint': 'Открыты «Настройки → Плагины → ИИ-генерация». Укажите или переиспользуйте адрес и ключ диалогового API, выберите модель и сохраните.',
|
|
1266
|
+
'config.disabledTitle': 'Плагин ИИ-генерации отключён',
|
|
1267
|
+
'config.disabledHint': 'Открыты «Настройки → Плагины → ИИ-генерация». Включите плагин — и генерация заработает.',
|
|
1268
|
+
'config.configured': 'Подключено: {url}',
|
|
1269
|
+
'config.disabled': 'Плагин отключён — включите его в настройках.',
|
|
1270
|
+
'connection.connected': 'Подключено',
|
|
1271
|
+
'connection.disconnected': 'Нет подключения',
|
|
1272
|
+
'panel.collapseConfig': 'Свернуть параметры',
|
|
1273
|
+
'panel.expandConfig': 'Развернуть параметры',
|
|
1274
|
+
'update.available': 'Доступна новая версия: {version}',
|
|
1275
|
+
'update.install': 'Обновить онлайн',
|
|
1276
|
+
'update.installing': 'Обновляем…',
|
|
1277
|
+
'update.success': 'Обновлено до {version}, перезапустите DSH',
|
|
1278
|
+
'update.failed': 'Не удалось обновить, попробуйте ещё раз',
|
|
1279
|
+
'update.release': 'Открыть релиз',
|
|
1280
|
+
'settings.title': 'ИИ-генерация (dsh-imagegen)',
|
|
1281
|
+
'settings.description': 'Адрес и ключ API генерации изображений',
|
|
1282
|
+
'settings.currentVersion': 'Текущая версия',
|
|
1283
|
+
'settings.apiUrl': 'Адрес API (api_url)',
|
|
1284
|
+
'settings.apiUrlHint': 'База OpenAI-совместимого API, например https://api.openai.com/v1; /images/generations и /images/edits дописываются автоматически',
|
|
1285
|
+
'settings.apiKey': 'Ключ API (api_key)',
|
|
1286
|
+
'settings.apiKeyHint': 'Bearer-ключ хранится открыто в локальном документе настроек; интерфейс показывает лишь факт его наличия',
|
|
1287
|
+
'settings.apiKeySet': 'Ключ сохранён; введите новый, чтобы заменить, или нажмите «Очистить»',
|
|
1288
|
+
'settings.apiKeyClear': 'Очистить',
|
|
1289
|
+
'settings.imageModelsTitle': 'Модели генерации',
|
|
1290
|
+
'settings.imageModelsHint': 'После сохранения адреса и ключа будут найдены кандидаты; выбирайте только те, что реально умеют генерировать изображения.',
|
|
1291
|
+
'settings.imageModels': 'Разрешённые модели генерации',
|
|
1292
|
+
'settings.imageModelsManualHint': 'По одной модели в строке; можно заполнить вручную, если API не отдаёт /models. Панель и агент используют только этот список.',
|
|
1293
|
+
'settings.imageModelsFetch': 'Найти модели',
|
|
1294
|
+
'settings.imageModelsLoading': 'Ищем…',
|
|
1295
|
+
'settings.imageModelsCandidates': 'Найденные кандидаты (отметьте и сохраните)',
|
|
1296
|
+
'settings.addModel': '+ Добавить вручную',
|
|
1297
|
+
'settings.cancelAddModel': 'Скрыть добавление',
|
|
1298
|
+
'settings.addModelPlaceholder': 'Имя модели, например qwen-image',
|
|
1299
|
+
'settings.addModelConfirm': 'Добавить',
|
|
1300
|
+
'settings.removeModel': 'Удалить модель',
|
|
1301
|
+
'settings.optional': 'необязательно',
|
|
1302
|
+
'settings.moreOptions': 'Дополнительно',
|
|
1303
|
+
'settings.storageTitle': 'Синхронизация с объектным хранилищем',
|
|
1304
|
+
'settings.storageEnabled': 'Включить синхронизацию',
|
|
1305
|
+
'settings.storageHint': 'После сохранения локально изображения выгружаются в S3-совместимое хранилище (Tencent COS / Alibaba OSS / Qiniu S3 / MinIO / R2…)',
|
|
1306
|
+
'settings.storageEndpoint': 'Адрес (с бакетом)',
|
|
1307
|
+
'settings.storageEndpointHint': 'S3-совместимый URL, например https://bucket-appid.cos.ap-guangzhou.myqcloud.com',
|
|
1308
|
+
'settings.storageRegion': 'Регион',
|
|
1309
|
+
'settings.storageRegionHint': 'ID региона для подписи, например ap-guangzhou / oss-cn-hangzhou / cn-east-1',
|
|
1310
|
+
'settings.storagePrefix': 'Префикс ключей',
|
|
1311
|
+
'settings.storagePrefixHint': 'Ключи объекта: префикс/gallery|images/<файл>',
|
|
1312
|
+
'settings.storageAccessKey': 'Access Key',
|
|
1313
|
+
'settings.storageAccessKeyHint': 'S3-совместимый идентификатор ключа',
|
|
1314
|
+
'settings.storageSecretKey': 'Secret Key',
|
|
1315
|
+
'settings.storageSecretKeyHint': 'S3-совместимый секрет, хранится только в локальных настройках',
|
|
1316
|
+
'settings.storageSyncGallery': 'Синхронизировать галерею',
|
|
1317
|
+
'settings.storageSyncGalleryHint': 'Выгружать изображения при добавлении в галерею',
|
|
1318
|
+
'settings.storageSyncHistory': 'Синхронизировать историю',
|
|
1319
|
+
'settings.storageSyncHistoryHint': 'Также выгружать все результаты генерации (их может быть много)',
|
|
1320
|
+
'settings.storageTest': 'Проверить соединение',
|
|
1321
|
+
'settings.storageTesting': 'Проверяем…',
|
|
1322
|
+
'settings.storageTestOk': 'Соединение в порядке ({ms} мс), тестовый файл загружен',
|
|
1323
|
+
'settings.storageTestFailed': 'Ошибка соединения: {error}',
|
|
1324
|
+
'settings.storageKeyHint': 'Синхронизация выполняется по возможности и никогда не блокирует локальное сохранение.',
|
|
1325
|
+
'settings.promptEnhanceTitle': 'Модель улучшения промптов',
|
|
1326
|
+
'settings.promptEnhanceHint': 'Разворачивает краткое описание в полноценный промпт; пустые адрес и ключ наследуют настройки генерации.',
|
|
1327
|
+
'settings.promptApiUrl': 'Адрес диалогового API (необязательно)',
|
|
1328
|
+
'settings.promptApiUrlHint': 'OpenAI-совместимая база; если пусто — используется адрес API генерации.',
|
|
1329
|
+
'settings.promptApiKey': 'Ключ диалогового API (необязательно)',
|
|
1330
|
+
'settings.promptApiKeyHint': 'Если пусто — используется ключ API генерации.',
|
|
1331
|
+
'settings.promptModel': 'Диалоговая модель',
|
|
1332
|
+
'settings.promptModelHint': 'Выберите или впишите модель с поддержкой /chat/completions.',
|
|
1333
|
+
'settings.promptModelDetectionHint': 'По умолчанию используется API генерации; после поиска просто выберите модель.',
|
|
1334
|
+
'settings.promptModelsFetch': 'Получить модели',
|
|
1335
|
+
'settings.promptModelsLoading': 'Получаем…',
|
|
1336
|
+
'settings.promptModelsSelect': 'Выберите модель',
|
|
1337
|
+
'settings.promptModelsCandidates': 'Найденные диалоговые модели',
|
|
1338
|
+
'settings.addPromptModelPlaceholder': 'Имя диалоговой модели, например gpt-4.1-mini',
|
|
1339
|
+
'settings.promptApiAdvanced': 'Отдельный диалоговый API (необязательно)',
|
|
1340
|
+
'settings.announceToAgent': 'Оповещать агентов о плагине',
|
|
1341
|
+
'settings.announceToAgentHint': 'Включено — возможности плагина добавляются в системный промпт каждого агента',
|
|
1342
|
+
'settings.allowAgentImageGeneration': 'Разрешить агентам генерацию',
|
|
1343
|
+
'settings.allowAgentImageGenerationHint': 'Включено по умолчанию. Выключено — агенты не могут создавать, смотреть или отменять задачи; боковая панель работает.',
|
|
1344
|
+
'settings.enabled': 'Включить плагин',
|
|
1345
|
+
'settings.enabledHint': 'Выключено — панель генерации недоступна (карточка настроек работает всегда)',
|
|
1346
|
+
'settings.save': 'Сохранить',
|
|
1347
|
+
'settings.saving': 'Сохраняем…',
|
|
1348
|
+
'settings.discard': 'Отменить правки',
|
|
1349
|
+
'settings.unsaved': 'Есть несохранённые правки',
|
|
1350
|
+
'settings.saveFailed': 'Не удалось сохранить, попробуйте ещё раз',
|
|
1351
|
+
'settings.readOnly': 'Документ настроек сейчас только для чтения, сохранить нельзя.',
|
|
1352
|
+
'settings.notExposed': 'Пространство настроек недоступно: этот деплой не предоставляет сервис настроек плагина.',
|
|
1353
|
+
'settings.expand': 'Развернуть',
|
|
1354
|
+
'settings.collapse': 'Свернуть',
|
|
1355
|
+
'settings.inherit': 'Наследовать',
|
|
1356
|
+
'settings.on': 'Вкл',
|
|
1357
|
+
'settings.off': 'Выкл',
|
|
1358
|
+
'settings.overridden': 'Переопределено',
|
|
1359
|
+
'settings.reset': 'Сбросить',
|
|
1360
|
+
'settings.invalidNumber': 'Введите корректное число',
|
|
1361
|
+
|
|
1362
|
+
|
|
1363
|
+
|
|
1364
|
+
'templates.open': 'Шаблоны',
|
|
1365
|
+
'templates.title': 'Библиотека промпт-шаблонов',
|
|
1366
|
+
'templates.sources': 'Источники шаблонов',
|
|
1367
|
+
'templates.meta': 'Всего шаблонов: {count} · {origin}',
|
|
1368
|
+
'templates.origin.bundled': 'встроенный снимок',
|
|
1369
|
+
'templates.origin.refreshed': 'обновлено онлайн',
|
|
1370
|
+
'templates.search': 'Поиск по названиям и промптам…',
|
|
1371
|
+
'templates.all': 'Все',
|
|
1372
|
+
'templates.close': 'Закрыть',
|
|
1373
|
+
'templates.back': 'К списку',
|
|
1374
|
+
'templates.use': 'Использовать промпт',
|
|
1375
|
+
'templates.copy': 'Копировать промпт',
|
|
1376
|
+
'templates.copied': 'Скопировано',
|
|
1377
|
+
'templates.refresh': 'Обновить библиотеку',
|
|
1378
|
+
'templates.refreshing': 'Обновляем…',
|
|
1379
|
+
'templates.refreshed': 'Обновлено, шаблонов: {count}',
|
|
1380
|
+
'templates.refreshFailed': 'Ошибка обновления: {error}',
|
|
1381
|
+
'templates.favorites': 'Избранное',
|
|
1382
|
+
'templates.favoritesHint': 'Показать только избранные шаблоны',
|
|
1383
|
+
'templates.favoritesEmpty': 'Пока пусто — нажмите звёздочку в углу карточки, чтобы сохранить шаблон',
|
|
1384
|
+
'templates.favoriteAdd': 'Добавить в избранное',
|
|
1385
|
+
'templates.favoriteRemove': 'Убрать из избранного',
|
|
1386
|
+
'templates.favorite': 'В избранное',
|
|
1387
|
+
'templates.unfavorite': 'В избранном',
|
|
1388
|
+
'templates.cacheAll': 'Кэшировать все картинки',
|
|
1389
|
+
'templates.cacheAllHint': 'Через локальный прокси сохранит все референсы этой библиотеки на диск — дальше доступно офлайн',
|
|
1390
|
+
'templates.caching': 'Кэшируем {done}/{total}…',
|
|
1391
|
+
'templates.cached': 'Все картинки закэшированы',
|
|
1392
|
+
'templates.empty': 'Нет подходящих шаблонов',
|
|
1393
|
+
'templates.loading': 'Загружаем библиотеку…',
|
|
1394
|
+
'templates.loadFailed': 'Не удалось загрузить библиотеку: {error}',
|
|
1395
|
+
'templates.retry': 'Повторить',
|
|
1396
|
+
'templates.attribution': 'Шаблоны и изображения принадлежат сайтам-источникам; ссылки на авторов — в карточках',
|
|
1397
|
+
'templates.source': 'Источник: {label}',
|
|
1398
|
+
'templates.featured': 'Выбор редакции',
|
|
1399
|
+
'inspiration.title': 'Вдохновение',
|
|
1400
|
+
'inspiration.shuffle': 'Другие',
|
|
1401
|
+
'inspiration.shuffling': 'Подбираем…',
|
|
1402
|
+
'inspiration.useHint': 'Нажмите, чтобы использовать промпт',
|
|
1403
|
+
'channels.title': 'Каналы',
|
|
1404
|
+
'channels.hint': 'Укажите адрес и ключ API каждого канала — и модели станут доступны',
|
|
1405
|
+
'channels.empty': 'Каналов пока нет — добавьте кнопкой ниже',
|
|
1406
|
+
'channels.addProvider': 'Добавить провайдера',
|
|
1407
|
+
'channels.addCustom': 'Добавить свой канал',
|
|
1408
|
+
'channels.untitled': 'Канал без названия',
|
|
1409
|
+
'channels.keySet': 'Ключ задан',
|
|
1410
|
+
'channels.keyMissing': 'Ключ не задан',
|
|
1411
|
+
'channels.modelCount': 'Моделей: {n}',
|
|
1412
|
+
'channels.noModels': 'Модели не настроены',
|
|
1413
|
+
'channels.defaultLabel': 'По умолчанию',
|
|
1414
|
+
'channels.statusReady': 'Готов',
|
|
1415
|
+
'channels.statusIncomplete': 'Настройка не завершена',
|
|
1416
|
+
'channels.edit': 'Править',
|
|
1417
|
+
'channels.delete': 'Удалить',
|
|
1418
|
+
'channels.deleteConfirmTitle': 'Удалить канал «{name}»? Ключ канала будет удалён; история и галерея сохранятся.',
|
|
1419
|
+
'channels.confirm': 'Удалить',
|
|
1420
|
+
'channels.cancel': 'Отмена',
|
|
1421
|
+
'channels.editorTitle': 'Канал',
|
|
1422
|
+
'channels.editorSaveNote': 'Изменения вступят в силу после «Сохранить» внизу карточки',
|
|
1423
|
+
'channels.displayName': 'Название',
|
|
1424
|
+
'channels.apiUrl': 'Адрес API',
|
|
1425
|
+
'channels.apiKey': 'Ключ API',
|
|
1426
|
+
'channels.keyReplaceHint': 'Задан — введите новый, чтобы заменить',
|
|
1427
|
+
'channels.keyMissingHint': 'Введите ключ',
|
|
1428
|
+
'channels.keyClear': 'Очистить ключ',
|
|
1429
|
+
'channels.modelCatalogTitle': 'Каталог моделей',
|
|
1430
|
+
'channels.noModelsHint': 'Моделей пока нет: нажмите «Найти» для списка кандидатов или добавьте вручную; псевдоним по умолчанию равен id модели и его можно менять.',
|
|
1431
|
+
'channels.detect': 'Найти снова',
|
|
1432
|
+
'channels.detecting': 'Ищем…',
|
|
1433
|
+
'channels.detectSuccess': 'Связь есть ✓ · кандидатов: {n}',
|
|
1434
|
+
'channels.detectFailed': 'Ошибка поиска: {error}',
|
|
1435
|
+
'channels.detectOk': 'API отвечает',
|
|
1436
|
+
'channels.modelAliasLabel': 'Псевдоним (отображается)',
|
|
1437
|
+
'channels.modelIdLabel': 'id модели у провайдера',
|
|
1438
|
+
'channels.generated': 'Сгенерировано: {n}',
|
|
1439
|
+
'channels.unknownProtocol': 'Протокол неизвестен — пробуем универсальный OpenAI',
|
|
1440
|
+
'channels.removeModel': 'Удалить модель',
|
|
1441
|
+
'channels.manualAddPlaceholder': 'id модели, например qwen-image',
|
|
1442
|
+
'channels.addModelConfirm': 'Добавить',
|
|
1443
|
+
'channels.copyFrom': 'Скопировать из канала…',
|
|
1444
|
+
'channels.copyApply': 'Копировать',
|
|
1445
|
+
'channels.candidatesTitle': 'Кандидаты (нажмите, чтобы добавить)',
|
|
1446
|
+
'channels.deleteThisChannel': 'Удалить этот канал',
|
|
1447
|
+
'channels.setDefault': 'Сделать каналом по умолчанию',
|
|
1448
|
+
'channels.presetPickerTitle': 'Добавить провайдера',
|
|
1449
|
+
'channels.presetPickerHint': 'Выберите встроенного провайдера — останется ввести только ключ API',
|
|
1450
|
+
'channels.presetCustomHint': 'Свой адрес, ключ и каталог моделей',
|
|
1451
|
+
'channels.presetLoadFailed': 'Не удалось загрузить провайдеров: {error}',
|
|
1452
|
+
}
|