@dickpy/dsh-imagegen 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +363 -196
- package/docs/images/ecommerce-mode.png +0 -0
- package/docs/images/image-generation-studio-three-column.png +0 -0
- package/docs/images/imagegen-overview.png +0 -0
- package/docs/images/multi-model-comparison.png +0 -0
- package/docs/videos/agent-chat-edit.gif +0 -0
- package/docs/videos/agent-chat-edit.mp4 +0 -0
- package/lib/client.js +2589 -884
- package/lib/client.js.map +1 -1
- package/lib/index.js +585 -240
- package/package.json +5 -2
- package/src/agent-image-tools.ts +131 -102
- package/src/client/ImageGenPanel.tsx +2679 -1594
- package/src/client/SettingsCard.tsx +6 -27
- package/src/client/api.ts +11 -1
- package/src/client/conversation-sync.ts +14 -0
- package/src/client/image-toolview.tsx +176 -165
- package/src/client/index.ts +25 -15
- package/src/client/locales.ts +746 -602
- package/src/client/mount.tsx +213 -124
- package/src/client/panel.module.css +2619 -1563
- package/src/client/sidebar-entry.ts +190 -144
- package/src/edit-image-command.ts +110 -0
- package/src/engine.ts +47 -5
- package/src/gallery-store.ts +20 -0
- package/src/generation-runtime.ts +11 -2
- package/src/history-store.ts +26 -0
- package/src/image-models.ts +1 -1
- package/src/index.ts +31 -12
- package/src/model-catalog.ts +19 -2
- package/src/presets.ts +11 -3
- package/src/prompt-enhancer.ts +63 -5
- package/src/protocol.ts +59 -5
- package/src/routes.ts +62 -4
- package/src/task-queue.ts +42 -32
- package/docs/images/agent-chat-edit.png +0 -0
- package/docs/images/agent-chat-generate.png +0 -0
- package/docs/images/agent-chat-poster-workflow.png +0 -0
package/src/client/locales.ts
CHANGED
|
@@ -1,602 +1,746 @@
|
|
|
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 / grok-imagine-image / nanobanana / seedream 系列)',
|
|
8
|
-
'
|
|
9
|
-
'
|
|
10
|
-
|
|
11
|
-
'
|
|
12
|
-
'
|
|
13
|
-
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
'
|
|
24
|
-
'
|
|
25
|
-
'
|
|
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
|
-
'
|
|
524
|
-
'
|
|
525
|
-
'
|
|
526
|
-
'
|
|
527
|
-
'
|
|
528
|
-
'
|
|
529
|
-
'
|
|
530
|
-
'
|
|
531
|
-
'
|
|
532
|
-
'
|
|
533
|
-
'
|
|
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
|
-
|
|
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.ecommerce': '电商模式',
|
|
26
|
+
'chat.expand': '展开右侧对话',
|
|
27
|
+
'chat.collapse': '收起右侧对话',
|
|
28
|
+
'chat.toggle': '对话',
|
|
29
|
+
'config.resizeHint': '拖拽调整参数栏宽度',
|
|
30
|
+
'ecommerce.generation': '生成设置',
|
|
31
|
+
'ecommerce.title': '电商模式',
|
|
32
|
+
'ecommerce.badge': '预览',
|
|
33
|
+
'ecommerce.short': '电商',
|
|
34
|
+
'ecommerce.anchorPending': '已生成主图,其余图片正在自动参考主图生成,保证整套同款…',
|
|
35
|
+
'ecommerce.anchorFailed': '主图生成失败,其余图片已暂停。请重试主图(或整组重新生成)后再继续。',
|
|
36
|
+
'ecommerce.anchorNote': '锚定生成:先出主图,其余图片自动参考主图,保证整套同款',
|
|
37
|
+
'ecommerce.noAssetWarn': '未上传商品图:主图将按文字描述生成并作为锚定基准,建议先上传商品主图获得更高一致性',
|
|
38
|
+
'ecommerce.product': '商品信息',
|
|
39
|
+
'ecommerce.productName': '商品名称(必填)',
|
|
40
|
+
'ecommerce.projectName': '项目名称(可选)',
|
|
41
|
+
'ecommerce.constraints': '卖点与约束',
|
|
42
|
+
'ecommerce.sellingPoints': '商品卖点,例如:防水防污 / 大容量 / 便携',
|
|
43
|
+
'ecommerce.protectedFeatures': '必须保留的特征,例如:颜色、Logo、包装文字、结构',
|
|
44
|
+
'ecommerce.styleHint': '风格补充,例如:高级感 / 写实 / 自然光',
|
|
45
|
+
'ecommerce.setStructure': '套图结构',
|
|
46
|
+
'ecommerce.preview': '生成套图预览',
|
|
47
|
+
'ecommerce.planTitle': '预计生成 {count} 张图片',
|
|
48
|
+
'ecommerce.planSlot': '{count} 张 · {description}',
|
|
49
|
+
'ecommerce.confirm': '确认生成整套图片',
|
|
50
|
+
'ecommerce.uploadRef': '上传商品素材(可选,最多 4 张:主体 / 包装 / 细节 / 风格)',
|
|
51
|
+
'ecommerce.uploadShort': '上传素材',
|
|
52
|
+
'ecommerce.sellingTitle': '商品卖点',
|
|
53
|
+
'ecommerce.advanced': '高级选项(项目 / 平台 / 约束)',
|
|
54
|
+
'ecommerce.params': '参数选择',
|
|
55
|
+
'ecommerce.platformLabel': '平台',
|
|
56
|
+
'ecommerce.languageLabel': '文案语言',
|
|
57
|
+
'ecommerce.ratioLabel': '比例',
|
|
58
|
+
'ecommerce.categoryLabel': '类目',
|
|
59
|
+
'ecommerce.multiSelect': '可多选',
|
|
60
|
+
'ecommerce.countHint': '点击调整数量(1-4)',
|
|
61
|
+
'ecommerce.refSettings': '参考图设置(可选)',
|
|
62
|
+
'ecommerce.styleTitle': '风格 / 补充提示',
|
|
63
|
+
'ecommerce.protectedLabel': '必须保留的特征(可选)',
|
|
64
|
+
'ecommerce.assetsFull': '最多上传 4 张素材',
|
|
65
|
+
'ecommerce.refSelect': '该用途使用的参考图',
|
|
66
|
+
'ecommerce.refNone': '不使用参考图',
|
|
67
|
+
'ecommerce.role.product': '商品主体',
|
|
68
|
+
'ecommerce.role.packaging': '包装',
|
|
69
|
+
'ecommerce.role.detail': '细节/角度',
|
|
70
|
+
'ecommerce.role.style': '风格参考',
|
|
71
|
+
'ecommerce.footerReady': '将生成 {count} 张套图',
|
|
72
|
+
'ecommerce.footerEmpty': '请选择套图结构',
|
|
73
|
+
'ecommerce.results.title': '套图结果',
|
|
74
|
+
'ecommerce.results.progress': '{done}/{total} 已完成',
|
|
75
|
+
'ecommerce.results.failed': '{count} 张失败',
|
|
76
|
+
'ecommerce.results.empty': '确认生成后,每张图片的任务状态和结果会按用途显示在这里',
|
|
77
|
+
'ecommerce.results.regenerate': '重新生成',
|
|
78
|
+
'ecommerce.results.export': '导出清单',
|
|
79
|
+
'ecommerce.results.newProduct': '新商品',
|
|
80
|
+
// prompt
|
|
81
|
+
'prompt.placeholder': '描述你想要的画面,例如:一只戴着宇航员头盔的橘猫,在月球上举起望远镜,水彩风格,柔和光线…',
|
|
82
|
+
'prompt.required': '请输入提示词',
|
|
83
|
+
'prompt.count': '{count}',
|
|
84
|
+
'prompt.enhance': '增强',
|
|
85
|
+
'prompt.enhancing': '增强中…',
|
|
86
|
+
'prompt.enhanceHint': '使用已配置的对话模型扩写提示词',
|
|
87
|
+
'prompt.configTitle': '请先配置提示词增强模型',
|
|
88
|
+
'prompt.configHint': '已打开设置。进入「插件 → AI 生图」,填写或复用 API 地址和密钥,选择对话模型并保存。',
|
|
89
|
+
'tasks.title': '生成任务',
|
|
90
|
+
'tasks.queued': '排队中',
|
|
91
|
+
'tasks.running': '生成中',
|
|
92
|
+
'tasks.completed': '已完成',
|
|
93
|
+
'tasks.failed': '失败',
|
|
94
|
+
'tasks.cancelled': '已取消',
|
|
95
|
+
'tasks.cancel': '取消',
|
|
96
|
+
'tasks.retry': '重试',
|
|
97
|
+
// parameters
|
|
98
|
+
'params.size': '尺寸',
|
|
99
|
+
'params.quality': '清晰度',
|
|
100
|
+
'params.count': '生成数量',
|
|
101
|
+
'params.detail': '细节',
|
|
102
|
+
'size.auto': '自动',
|
|
103
|
+
'size.square': '1:1 方图',
|
|
104
|
+
'size.portrait34': '3:4 标准竖图',
|
|
105
|
+
'size.landscape43': '4:3 标准横图',
|
|
106
|
+
'size.portrait916': '9:16 竖屏',
|
|
107
|
+
'size.portrait23': '2:3 竖图',
|
|
108
|
+
'size.landscape32': '3:2 横图',
|
|
109
|
+
'size.wide169': '16:9 宽屏',
|
|
110
|
+
'size.ultrawide21': '21:9 超宽屏',
|
|
111
|
+
'quality.auto': '自动',
|
|
112
|
+
'quality.1k': '1K',
|
|
113
|
+
'quality.2k': '2K',
|
|
114
|
+
'quality.4k': '4K',
|
|
115
|
+
'count.one': '1 张',
|
|
116
|
+
'count.two': '2 张',
|
|
117
|
+
'count.three': '3 张',
|
|
118
|
+
'count.four': '4 张',
|
|
119
|
+
'detail.auto': '自动',
|
|
120
|
+
'detail.standard': '标准',
|
|
121
|
+
'detail.high': '高清',
|
|
122
|
+
'detail.hint': '透传参数,部分 gpt-image-2 网关支持;官方接口请保持「自动」',
|
|
123
|
+
// footer
|
|
124
|
+
'model.label': '模型',
|
|
125
|
+
'model.noEditModels': '当前模式暂无可用模型',
|
|
126
|
+
'compare.enable': '多模型对比',
|
|
127
|
+
'compare.models': '参与对比的模型',
|
|
128
|
+
'compare.title': '多模型结果对比',
|
|
129
|
+
'compare.fullscreen': '全屏对比',
|
|
130
|
+
'compare.selectRequired': '请至少选择一个对比模型',
|
|
131
|
+
'generate': '开始生成',
|
|
132
|
+
'generating': '生成中…',
|
|
133
|
+
// edit reference image
|
|
134
|
+
'edit.upload': '点击或拖拽上传参考图片',
|
|
135
|
+
'edit.uploadHint': 'PNG / JPG / WEBP,不超过 10MB',
|
|
136
|
+
'edit.change': '更换图片',
|
|
137
|
+
'edit.remove': '移除',
|
|
138
|
+
'edit.required': '请先上传参考图片',
|
|
139
|
+
// canvas
|
|
140
|
+
'canvas.emptyTitle': '开始你的创作',
|
|
141
|
+
'canvas.emptyHint': '在左侧输入提示词并点击「开始生成」,结果将显示在这里',
|
|
142
|
+
'canvas.new': '新建作图',
|
|
143
|
+
'canvas.newHint': '开始新的作图并清空预览',
|
|
144
|
+
'canvas.error': '生成失败:{error}',
|
|
145
|
+
'canvas.submitting': '正在加入生成队列…',
|
|
146
|
+
'canvas.queued': '已加入生成队列',
|
|
147
|
+
'canvas.queueHint': '当前有 {count} 个任务等待处理',
|
|
148
|
+
'canvas.generating': '正在生成图片…',
|
|
149
|
+
'canvas.elapsed': '已用时 {seconds}s',
|
|
150
|
+
'canvas.images': '本次生成 {count} 张',
|
|
151
|
+
'download': '下载',
|
|
152
|
+
'revisedPrompt': '优化提示词:{prompt}',
|
|
153
|
+
// history
|
|
154
|
+
'history.title': '历史记录',
|
|
155
|
+
'history.empty': '暂无历史记录,生成图片后会保存在这里',
|
|
156
|
+
'history.clear': '清空',
|
|
157
|
+
'history.clearConfirm': '确定要清空全部历史记录吗?此操作不可撤销。',
|
|
158
|
+
'history.restore': '恢复',
|
|
159
|
+
'history.delete': '删除',
|
|
160
|
+
'history.images': '张',
|
|
161
|
+
'history.viewing': '历史 · {time}',
|
|
162
|
+
'history.search': '搜索提示词或模型…',
|
|
163
|
+
'history.model': '模型筛选',
|
|
164
|
+
'history.ratio': '比例筛选',
|
|
165
|
+
'history.allModels': '全部模型',
|
|
166
|
+
'history.allRatios': '全部比例',
|
|
167
|
+
// gallery
|
|
168
|
+
'gallery.title': '画廊',
|
|
169
|
+
'gallery.categories': '分类',
|
|
170
|
+
'gallery.all': '全部作品',
|
|
171
|
+
'gallery.gpt': 'gpt-image-2',
|
|
172
|
+
'gallery.grok': 'grok-imagine-image',
|
|
173
|
+
'gallery.ratio': '画面比例',
|
|
174
|
+
'gallery.tags': '标签',
|
|
175
|
+
'gallery.filterHint': '按生成模式、模型和比例筛选画廊',
|
|
176
|
+
'gallery.count': '· 共 {count} 幅',
|
|
177
|
+
'gallery.viewMode': '视图模式',
|
|
178
|
+
'gallery.masonry': '瀑布流',
|
|
179
|
+
'gallery.grid': '整齐网格',
|
|
180
|
+
'gallery.sort': '排序',
|
|
181
|
+
'gallery.newest': '最新发布',
|
|
182
|
+
'gallery.oldest': '最早发布',
|
|
183
|
+
'gallery.untitled': '未命名作品',
|
|
184
|
+
'gallery.search': '搜索作品或模型…',
|
|
185
|
+
'gallery.tagsPlaceholder': '标签,用逗号分隔',
|
|
186
|
+
'gallery.tagsApply': '添加标签',
|
|
187
|
+
'gallery.editTags': '编辑标签',
|
|
188
|
+
'gallery.tagsEditShort': '编辑',
|
|
189
|
+
'gallery.tagsSave': '保存',
|
|
190
|
+
'gallery.tagsCancel': '取消',
|
|
191
|
+
'gallery.selected': '已选 {count} 项',
|
|
192
|
+
'gallery.selectionDone': '完成选择',
|
|
193
|
+
'gallery.selectionClear': '取消选择',
|
|
194
|
+
'gallery.downloadSelected': '下载所选',
|
|
195
|
+
'gallery.exportJson': '导出 JSON',
|
|
196
|
+
'gallery.select': '选择作品',
|
|
197
|
+
'gallery.add': '加入画廊',
|
|
198
|
+
'gallery.added': '已加入画廊',
|
|
199
|
+
'gallery.already': '已在画廊中',
|
|
200
|
+
'gallery.delete': '移出画廊',
|
|
201
|
+
'gallery.clear': '清空画廊',
|
|
202
|
+
'gallery.clearConfirm': '确定要清空整个画廊吗?此操作不可撤销。',
|
|
203
|
+
'gallery.empty': '画廊还是空的,把喜欢的图片加入进来吧',
|
|
204
|
+
'gallery.viewing': '画廊 · {time}',
|
|
205
|
+
// preview
|
|
206
|
+
'preview.title': '图片预览',
|
|
207
|
+
'preview.open': '点击预览',
|
|
208
|
+
'preview.close': '关闭',
|
|
209
|
+
'preview.prev': '上一张',
|
|
210
|
+
'preview.next': '下一张',
|
|
211
|
+
'preview.index': '{index} / {total}',
|
|
212
|
+
'preview.zoomControls': '图片缩放控制',
|
|
213
|
+
'preview.zoomIn': '放大',
|
|
214
|
+
'preview.zoomOut': '缩小',
|
|
215
|
+
'preview.zoomReset': '重置缩放',
|
|
216
|
+
'preview.zoomLevel': '{percent}%',
|
|
217
|
+
'preview.copyPrompt': '复制提示词',
|
|
218
|
+
'preview.copied': '已复制',
|
|
219
|
+
'preview.addToEdit': '添加到图生图',
|
|
220
|
+
// config banner
|
|
221
|
+
'config.missing': '尚未配置 API:请前往「设置 → 插件 → 可配置」为 AI 生图填写 api_url 与 api_key。',
|
|
222
|
+
'config.generationTitle': '请先配置生图 API',
|
|
223
|
+
'config.generationHint': '已自动打开 DSH「设置 → 插件 → AI 生图」。填写生图 API 地址与 API 密钥,保存后即可开始生成。',
|
|
224
|
+
'config.enhancementTitle': '请先配置提示词增强模型',
|
|
225
|
+
'config.enhancementHint': '已自动打开 DSH「设置 → 插件 → AI 生图」。填写或复用对话 API 地址和密钥,选择对话模型并保存。',
|
|
226
|
+
'config.disabledTitle': 'AI 生图插件已停用',
|
|
227
|
+
'config.disabledHint': '已自动打开 DSH「设置 → 插件 → AI 生图」。开启「启用插件」后即可生成图片。',
|
|
228
|
+
'config.configured': '已连接 {url}',
|
|
229
|
+
'config.disabled': '插件已停用,请在设置中重新启用。',
|
|
230
|
+
'connection.connected': '已连接',
|
|
231
|
+
'connection.disconnected': '未连接',
|
|
232
|
+
'panel.collapseConfig': '收起参数栏',
|
|
233
|
+
'panel.expandConfig': '展开参数栏',
|
|
234
|
+
// plugin update
|
|
235
|
+
'update.available': '检测到新版本:{version}',
|
|
236
|
+
'update.install': '在线更新',
|
|
237
|
+
'update.installing': '更新中…',
|
|
238
|
+
'update.success': '已更新到 {version},请重启 DSH',
|
|
239
|
+
'update.failed': '更新失败,请重试',
|
|
240
|
+
'update.release': '查看 Release',
|
|
241
|
+
// settings card
|
|
242
|
+
'settings.title': 'AI 生图(dsh-imagegen)',
|
|
243
|
+
'settings.description': '配置图像生成 API 地址与密钥',
|
|
244
|
+
'settings.currentVersion': '当前版本',
|
|
245
|
+
'settings.apiUrl': 'API 地址(api_url)',
|
|
246
|
+
'settings.apiUrlHint': 'OpenAI 兼容接口基址,如 https://api.openai.com/v1;将自动拼接 /images/generations 与 /images/edits',
|
|
247
|
+
'settings.apiKey': 'API 密钥(api_key)',
|
|
248
|
+
'settings.apiKeyHint': 'Bearer 密钥,明文存于本机设置文档;界面只显示是否已设置',
|
|
249
|
+
'settings.apiKeySet': '已保存密钥;输入新值可更换,点击「清除」可删除',
|
|
250
|
+
'settings.apiKeyClear': '清除',
|
|
251
|
+
'settings.imageModelsTitle': '生图模型',
|
|
252
|
+
'settings.imageModelsHint': '保存 API 地址和密钥后检测候选模型;请只选择实际支持生图的项。',
|
|
253
|
+
'settings.imageModels': '允许使用的生图模型',
|
|
254
|
+
'settings.imageModelsManualHint': '一行一个模型;API 未提供 /models 时可手动填写。面板和 Agent 只能使用此列表。',
|
|
255
|
+
'settings.imageModelsFetch': '检测可用模型',
|
|
256
|
+
'settings.imageModelsLoading': '检测中…',
|
|
257
|
+
'settings.imageModelsCandidates': '检测到的候选模型(勾选后保存)',
|
|
258
|
+
'settings.addModel': '+ 手动添加',
|
|
259
|
+
'settings.cancelAddModel': '收起添加',
|
|
260
|
+
'settings.addModelPlaceholder': '输入模型名称,例如 qwen-image',
|
|
261
|
+
'settings.addModelConfirm': '添加',
|
|
262
|
+
'settings.removeModel': '移除模型',
|
|
263
|
+
'settings.optional': '可选',
|
|
264
|
+
'settings.moreOptions': '更多设置',
|
|
265
|
+
'settings.promptEnhanceTitle': '提示词增强模型',
|
|
266
|
+
'settings.promptEnhanceHint': '用于将简短描述扩写为更完整的生图提示词;留空的地址和密钥会复用生图配置。',
|
|
267
|
+
'settings.promptApiUrl': '对话 API 地址(可选)',
|
|
268
|
+
'settings.promptApiUrlHint': 'OpenAI 兼容基址;留空则复用图像 API 地址。',
|
|
269
|
+
'settings.promptApiKey': '对话 API 密钥(可选)',
|
|
270
|
+
'settings.promptApiKeyHint': '留空则复用图像 API 密钥。',
|
|
271
|
+
'settings.promptModel': '对话模型',
|
|
272
|
+
'settings.promptModelHint': '选择或填写支持 /chat/completions 的模型。',
|
|
273
|
+
'settings.promptModelDetectionHint': '默认复用生图 API;检测后点选一个模型即可。',
|
|
274
|
+
'settings.promptModelsFetch': '获取可用模型',
|
|
275
|
+
'settings.promptModelsLoading': '正在获取…',
|
|
276
|
+
'settings.promptModelsSelect': '选择一个模型',
|
|
277
|
+
'settings.promptModelsCandidates': '检测到的候选对话模型',
|
|
278
|
+
'settings.addPromptModelPlaceholder': '输入对话模型名称,例如 gpt-4.1-mini',
|
|
279
|
+
'settings.promptApiAdvanced': '使用独立对话 API(可选)',
|
|
280
|
+
'settings.announceToAgent': '向 Agent 播报本插件',
|
|
281
|
+
'settings.announceToAgentHint': '开启后,本插件的存在与能力会写入每个 Agent 的系统提示词',
|
|
282
|
+
'settings.allowAgentImageGeneration': '允许 Agent 调用生图',
|
|
283
|
+
'settings.allowAgentImageGenerationHint': '默认开启。关闭后,Agent 无法提交、查询或取消生图任务;侧边栏工作台不受影响。',
|
|
284
|
+
'settings.enabled': '启用插件',
|
|
285
|
+
'settings.enabledHint': '关闭后生图面板不可用(设置卡片始终可用)',
|
|
286
|
+
'settings.save': '保存',
|
|
287
|
+
'settings.saving': '保存中…',
|
|
288
|
+
'settings.discard': '放弃修改',
|
|
289
|
+
'settings.unsaved': '有未保存的修改',
|
|
290
|
+
'settings.saveFailed': '保存失败,请重试',
|
|
291
|
+
'settings.readOnly': '当前设置文档为只读,无法保存。',
|
|
292
|
+
'settings.notExposed': '设置命名空间不可用:本部署未提供该插件的设置服务。',
|
|
293
|
+
'settings.expand': '展开',
|
|
294
|
+
'settings.collapse': '收起',
|
|
295
|
+
'settings.inherit': '继承',
|
|
296
|
+
'settings.on': '开',
|
|
297
|
+
'settings.off': '关',
|
|
298
|
+
'settings.overridden': '已覆盖',
|
|
299
|
+
'settings.reset': '重置',
|
|
300
|
+
'settings.invalidNumber': '请输入有效数字',
|
|
301
|
+
// template library
|
|
302
|
+
'templates.open': '模板库',
|
|
303
|
+
'templates.title': '提示词模板库',
|
|
304
|
+
'templates.meta': '共 {count} 个模板 · {origin}',
|
|
305
|
+
'templates.origin.bundled': '内置快照',
|
|
306
|
+
'templates.origin.refreshed': '在线刷新',
|
|
307
|
+
'templates.search': '搜索模板标题或提示词…',
|
|
308
|
+
'templates.all': '全部',
|
|
309
|
+
'templates.close': '关闭',
|
|
310
|
+
'templates.back': '返回列表',
|
|
311
|
+
'templates.use': '使用此提示词',
|
|
312
|
+
'templates.copy': '复制提示词',
|
|
313
|
+
'templates.copied': '已复制',
|
|
314
|
+
'templates.refresh': '刷新模板库',
|
|
315
|
+
'templates.refreshing': '刷新中…',
|
|
316
|
+
'templates.refreshed': '已刷新,共 {count} 个模板',
|
|
317
|
+
'templates.refreshFailed': '刷新失败:{error}',
|
|
318
|
+
'templates.cacheAll': '缓存全部图片',
|
|
319
|
+
'templates.cacheAllHint': '通过本机代理把全部参考图缓存到本地磁盘,之后离线也能浏览',
|
|
320
|
+
'templates.caching': '缓存中 {done}/{total}…',
|
|
321
|
+
'templates.cached': '图片已全部缓存',
|
|
322
|
+
'templates.empty': '没有匹配的模板',
|
|
323
|
+
'templates.loading': '正在加载模板库…',
|
|
324
|
+
'templates.loadFailed': '模板库加载失败:{error}',
|
|
325
|
+
'templates.retry': '重试',
|
|
326
|
+
'templates.attribution': '模板与图片来自 awesome-gpt-image-2 项目,作者链接见各模板详情',
|
|
327
|
+
'templates.source': '来源:vibeui.top',
|
|
328
|
+
'templates.featured': '精选',
|
|
329
|
+
// channel management
|
|
330
|
+
'channels.title': '渠道',
|
|
331
|
+
'channels.hint': '填写各渠道的 API 地址与密钥即可使用对应模型',
|
|
332
|
+
'channels.empty': '尚无渠道,点击下方按钮添加',
|
|
333
|
+
'channels.addProvider': '添加提供方',
|
|
334
|
+
'channels.addCustom': '添加自定义渠道',
|
|
335
|
+
'channels.untitled': '未命名渠道',
|
|
336
|
+
'channels.keySet': '密钥已设置',
|
|
337
|
+
'channels.keyMissing': '未设置密钥',
|
|
338
|
+
'channels.modelCount': '{n} 个模型',
|
|
339
|
+
'channels.noModels': '未配置模型',
|
|
340
|
+
'channels.defaultLabel': '默认',
|
|
341
|
+
'channels.statusReady': '可用',
|
|
342
|
+
'channels.statusIncomplete': '配置未完成',
|
|
343
|
+
'channels.edit': '编辑',
|
|
344
|
+
'channels.delete': '删除',
|
|
345
|
+
'channels.deleteConfirmTitle': '删除渠道「{name}」?该渠道的密钥将被移除;历史与画廊中的记录仍会保留。',
|
|
346
|
+
'channels.confirm': '确认删除',
|
|
347
|
+
'channels.cancel': '取消',
|
|
348
|
+
'channels.editorTitle': '渠道',
|
|
349
|
+
'channels.editorSaveNote': '改动将随卡片底部「保存」一起生效',
|
|
350
|
+
'channels.displayName': '显示名称',
|
|
351
|
+
'channels.apiUrl': 'API 地址',
|
|
352
|
+
'channels.apiKey': 'API 密钥',
|
|
353
|
+
'channels.keyReplaceHint': '已配置 — 输入新值可替换',
|
|
354
|
+
'channels.keyMissingHint': '填写密钥',
|
|
355
|
+
'channels.keyClear': '清除密钥',
|
|
356
|
+
'channels.modelCatalogTitle': '模型目录',
|
|
357
|
+
'channels.noModelsHint': '暂无模型:点击「检测」拉取候选,或手动添加;别名(显示名)默认等于上游模型 id,可自行修改。',
|
|
358
|
+
'channels.detect': '重新检测',
|
|
359
|
+
'channels.detecting': '检测中…',
|
|
360
|
+
'channels.detectSuccess': '连通 ✓ · {n} 个候选',
|
|
361
|
+
'channels.detectFailed': '检测失败:{error}',
|
|
362
|
+
'channels.detectOk': '已连接该 API',
|
|
363
|
+
'channels.modelAliasLabel': '显示名(别名)',
|
|
364
|
+
'channels.modelIdLabel': '上游模型 id',
|
|
365
|
+
'channels.generated': '已生成 {n} 次',
|
|
366
|
+
'channels.unknownProtocol': '未知协议,按通用 OpenAI 协议尝试',
|
|
367
|
+
'channels.removeModel': '移除模型',
|
|
368
|
+
'channels.manualAddPlaceholder': '输入模型 id,例如 qwen-image',
|
|
369
|
+
'channels.addModelConfirm': '添加',
|
|
370
|
+
'channels.copyFrom': '从其他渠道复制…',
|
|
371
|
+
'channels.copyApply': '复制',
|
|
372
|
+
'channels.candidatesTitle': '图片模型候选(点击加入)',
|
|
373
|
+
'channels.deleteThisChannel': '删除此渠道',
|
|
374
|
+
'channels.setDefault': '设为默认渠道',
|
|
375
|
+
'channels.presetPickerTitle': '添加提供方',
|
|
376
|
+
'channels.presetPickerHint': '选择一个内置提供方,仅需填写 API 密钥',
|
|
377
|
+
'channels.presetCustomHint': '自行填写 API 地址、密钥与模型目录',
|
|
378
|
+
'channels.presetLoadFailed': '加载提供方失败:{error}',
|
|
379
|
+
} as const
|
|
380
|
+
|
|
381
|
+
export const en: Record<keyof typeof zh, string> = {
|
|
382
|
+
'entry.label': 'AI Image',
|
|
383
|
+
'entry.tooltip': 'AI image generation studio (gpt-image-2 / glm-image / grok-imagine-image / nanobanana / seedream family)',
|
|
384
|
+
'entry.newSession': 'New session',
|
|
385
|
+
'entry.newSessionTooltip': 'Create a new DSH session',
|
|
386
|
+
'entry.image': 'Image',
|
|
387
|
+
'panel.title': 'AI Image',
|
|
388
|
+
'panel.githubTip': 'Like it or have suggestions? Head to GitHub to open issues and star us!',
|
|
389
|
+
'conversation.add': 'Add to chat',
|
|
390
|
+
'conversation.adding': 'Adding…',
|
|
391
|
+
'conversation.added': 'Image added to the current chat',
|
|
392
|
+
'conversation.addHint': 'After adding to chat, use /edit_image to modify it; the command uses the plugin image model',
|
|
393
|
+
'conversation.noSession': 'Open a session before adding an image',
|
|
394
|
+
'conversation.unavailable': 'The current session is unavailable',
|
|
395
|
+
'conversation.busy': 'The chat is sending a message; try again shortly',
|
|
396
|
+
'mode.text': 'Text to Image',
|
|
397
|
+
'mode.edit': 'Image to Image',
|
|
398
|
+
'workspace.label': 'Workspace',
|
|
399
|
+
'workspace.normal': 'Standard',
|
|
400
|
+
'workspace.ecommerce': 'E-commerce',
|
|
401
|
+
'chat.expand': 'Expand the conversation pane',
|
|
402
|
+
'chat.collapse': 'Collapse the conversation pane',
|
|
403
|
+
'chat.toggle': 'Chat',
|
|
404
|
+
'config.resizeHint': 'Drag to resize the parameter panel',
|
|
405
|
+
'ecommerce.generation': 'Generation settings',
|
|
406
|
+
'ecommerce.title': 'E-commerce Mode',
|
|
407
|
+
'ecommerce.badge': 'Beta',
|
|
408
|
+
'ecommerce.short': 'Store',
|
|
409
|
+
'ecommerce.anchorPending': 'Main image generated — remaining images are being generated with the main image as reference to keep the set consistent…',
|
|
410
|
+
'ecommerce.anchorFailed': 'Main image failed; remaining images are paused. Retry the main image or regenerate the set.',
|
|
411
|
+
'ecommerce.anchorNote': 'Anchored: main image first, remaining images reference it automatically for a consistent set',
|
|
412
|
+
'ecommerce.noAssetWarn': 'No product image uploaded: the main image will be generated from text as the anchor. Upload one for higher consistency.',
|
|
413
|
+
'ecommerce.product': 'Product details',
|
|
414
|
+
'ecommerce.productName': 'Product name (required)',
|
|
415
|
+
'ecommerce.projectName': 'Project name (optional)',
|
|
416
|
+
'ecommerce.constraints': 'Selling points & constraints',
|
|
417
|
+
'ecommerce.sellingPoints': 'Selling points, e.g. waterproof / large capacity / portable',
|
|
418
|
+
'ecommerce.protectedFeatures': 'Features to preserve: color, logo, packaging text, structure',
|
|
419
|
+
'ecommerce.styleHint': 'Style hint, e.g. premium / realistic / natural light',
|
|
420
|
+
'ecommerce.setStructure': 'Image set structure',
|
|
421
|
+
'ecommerce.preview': 'Preview product set',
|
|
422
|
+
'ecommerce.planTitle': 'Plan to generate {count} images',
|
|
423
|
+
'ecommerce.planSlot': '{count} images · {description}',
|
|
424
|
+
'ecommerce.confirm': 'Confirm and generate set',
|
|
425
|
+
'ecommerce.uploadRef': 'Upload product assets (optional, up to 4: product / packaging / detail / style)',
|
|
426
|
+
'ecommerce.uploadShort': 'Upload',
|
|
427
|
+
'ecommerce.sellingTitle': 'Selling points',
|
|
428
|
+
'ecommerce.advanced': 'Advanced (project / platform / constraints)',
|
|
429
|
+
'ecommerce.params': 'Parameters',
|
|
430
|
+
'ecommerce.platformLabel': 'Platform',
|
|
431
|
+
'ecommerce.languageLabel': 'Copy language',
|
|
432
|
+
'ecommerce.ratioLabel': 'Aspect ratio',
|
|
433
|
+
'ecommerce.categoryLabel': 'Category',
|
|
434
|
+
'ecommerce.multiSelect': 'multi-select',
|
|
435
|
+
'ecommerce.countHint': 'Click to adjust count (1-4)',
|
|
436
|
+
'ecommerce.refSettings': 'Reference images (optional)',
|
|
437
|
+
'ecommerce.styleTitle': 'Style / extra hints',
|
|
438
|
+
'ecommerce.protectedLabel': 'Features to preserve (optional)',
|
|
439
|
+
'ecommerce.assetsFull': 'Up to 4 assets',
|
|
440
|
+
'ecommerce.refSelect': 'Reference image for this slot',
|
|
441
|
+
'ecommerce.refNone': 'No reference',
|
|
442
|
+
'ecommerce.role.product': 'Product',
|
|
443
|
+
'ecommerce.role.packaging': 'Packaging',
|
|
444
|
+
'ecommerce.role.detail': 'Detail / angle',
|
|
445
|
+
'ecommerce.role.style': 'Style',
|
|
446
|
+
'ecommerce.footerReady': '{count} images in this set',
|
|
447
|
+
'ecommerce.footerEmpty': 'Select the image set structure',
|
|
448
|
+
'ecommerce.results.title': 'Product set results',
|
|
449
|
+
'ecommerce.results.progress': '{done}/{total} completed',
|
|
450
|
+
'ecommerce.results.failed': '{count} failed',
|
|
451
|
+
'ecommerce.results.empty': 'After confirming, each image task and result will show here grouped by purpose',
|
|
452
|
+
'ecommerce.results.regenerate': 'Regenerate',
|
|
453
|
+
'ecommerce.results.export': 'Export manifest',
|
|
454
|
+
'ecommerce.results.newProduct': 'New product',
|
|
455
|
+
'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…',
|
|
456
|
+
'prompt.required': 'Enter a prompt first',
|
|
457
|
+
'prompt.count': '{count}',
|
|
458
|
+
'prompt.enhance': 'Enhance',
|
|
459
|
+
'prompt.enhancing': 'Enhancing…',
|
|
460
|
+
'prompt.enhanceHint': 'Expand the prompt with the configured chat model',
|
|
461
|
+
'prompt.configTitle': 'Configure a prompt enhancement model first',
|
|
462
|
+
'prompt.configHint': 'Settings has opened. Go to Plugins → AI Image, configure or reuse an API URL and key, choose a chat model, then save.',
|
|
463
|
+
'tasks.title': 'Generation tasks',
|
|
464
|
+
'tasks.queued': 'Queued',
|
|
465
|
+
'tasks.running': 'Generating',
|
|
466
|
+
'tasks.completed': 'Completed',
|
|
467
|
+
'tasks.failed': 'Failed',
|
|
468
|
+
'tasks.cancelled': 'Cancelled',
|
|
469
|
+
'tasks.cancel': 'Cancel',
|
|
470
|
+
'tasks.retry': 'Retry',
|
|
471
|
+
'params.size': 'Size',
|
|
472
|
+
'params.quality': 'Quality',
|
|
473
|
+
'params.count': 'Count',
|
|
474
|
+
'params.detail': 'Detail',
|
|
475
|
+
'size.auto': 'Auto',
|
|
476
|
+
'size.square': '1:1 Square',
|
|
477
|
+
'size.portrait34': '3:4 Portrait',
|
|
478
|
+
'size.landscape43': '4:3 Landscape',
|
|
479
|
+
'size.portrait916': '9:16 Vertical',
|
|
480
|
+
'size.portrait23': '2:3 Portrait',
|
|
481
|
+
'size.landscape32': '3:2 Landscape',
|
|
482
|
+
'size.wide169': '16:9 Widescreen',
|
|
483
|
+
'size.ultrawide21': '21:9 Ultrawide',
|
|
484
|
+
'quality.auto': 'Auto',
|
|
485
|
+
'quality.1k': '1K',
|
|
486
|
+
'quality.2k': '2K',
|
|
487
|
+
'quality.4k': '4K',
|
|
488
|
+
'count.one': '1',
|
|
489
|
+
'count.two': '2',
|
|
490
|
+
'count.three': '3',
|
|
491
|
+
'count.four': '4',
|
|
492
|
+
'detail.auto': 'Auto',
|
|
493
|
+
'detail.standard': 'Standard',
|
|
494
|
+
'detail.high': 'High',
|
|
495
|
+
'detail.hint': 'Passthrough parameter supported by some gpt-image-2 gateways; keep "Auto" for official endpoints',
|
|
496
|
+
'model.label': 'Model',
|
|
497
|
+
'model.noEditModels': 'No model is available for this mode',
|
|
498
|
+
'compare.enable': 'Multi-model comparison',
|
|
499
|
+
'compare.models': 'Models to compare',
|
|
500
|
+
'compare.title': 'Multi-model comparison',
|
|
501
|
+
'compare.fullscreen': 'Fullscreen comparison',
|
|
502
|
+
'compare.selectRequired': 'Select at least one model',
|
|
503
|
+
'generate': 'Generate',
|
|
504
|
+
'generating': 'Generating…',
|
|
505
|
+
'edit.upload': 'Click or drag to upload a reference image',
|
|
506
|
+
'edit.uploadHint': 'PNG / JPG / WEBP, up to 10MB',
|
|
507
|
+
'edit.change': 'Change image',
|
|
508
|
+
'edit.remove': 'Remove',
|
|
509
|
+
'edit.required': 'Upload a reference image first',
|
|
510
|
+
'canvas.emptyTitle': 'Start creating',
|
|
511
|
+
'canvas.emptyHint': 'Enter a prompt on the left and click "Generate"; results appear here',
|
|
512
|
+
'canvas.new': 'New creation',
|
|
513
|
+
'canvas.newHint': 'Start a new creation and clear the preview',
|
|
514
|
+
'canvas.error': 'Generation failed: {error}',
|
|
515
|
+
'canvas.submitting': 'Adding to the generation queue…',
|
|
516
|
+
'canvas.queued': 'Added to the generation queue',
|
|
517
|
+
'canvas.queueHint': '{count} task(s) waiting or generating',
|
|
518
|
+
'canvas.generating': 'Generating images…',
|
|
519
|
+
'canvas.elapsed': 'Elapsed {seconds}s',
|
|
520
|
+
'canvas.images': '{count} image(s) generated',
|
|
521
|
+
'download': 'Download',
|
|
522
|
+
'revisedPrompt': 'Refined prompt: {prompt}',
|
|
523
|
+
'history.title': 'History',
|
|
524
|
+
'history.empty': 'No history yet — generations will be saved here',
|
|
525
|
+
'history.clear': 'Clear',
|
|
526
|
+
'history.clearConfirm': 'Clear all history? This action cannot be undone.',
|
|
527
|
+
'history.restore': 'Restore',
|
|
528
|
+
'history.delete': 'Delete',
|
|
529
|
+
'history.images': 'images',
|
|
530
|
+
'history.viewing': 'History · {time}',
|
|
531
|
+
'history.search': 'Search prompt or model…',
|
|
532
|
+
'history.model': 'Model filter',
|
|
533
|
+
'history.ratio': 'Ratio filter',
|
|
534
|
+
'history.allModels': 'All models',
|
|
535
|
+
'history.allRatios': 'All ratios',
|
|
536
|
+
'gallery.title': 'Gallery',
|
|
537
|
+
'gallery.categories': 'Categories',
|
|
538
|
+
'gallery.all': 'All works',
|
|
539
|
+
'gallery.gpt': 'gpt-image-2',
|
|
540
|
+
'gallery.grok': 'grok-imagine-image',
|
|
541
|
+
'gallery.ratio': 'Aspect ratio',
|
|
542
|
+
'gallery.tags': 'Tags',
|
|
543
|
+
'gallery.filterHint': 'Filter by mode, model, and aspect ratio',
|
|
544
|
+
'gallery.count': '· {count} works',
|
|
545
|
+
'gallery.viewMode': 'View mode',
|
|
546
|
+
'gallery.masonry': 'Masonry',
|
|
547
|
+
'gallery.grid': 'Grid',
|
|
548
|
+
'gallery.sort': 'Sort',
|
|
549
|
+
'gallery.newest': 'Newest',
|
|
550
|
+
'gallery.oldest': 'Oldest',
|
|
551
|
+
'gallery.untitled': 'Untitled work',
|
|
552
|
+
'gallery.search': 'Search works or models…',
|
|
553
|
+
'gallery.tagsPlaceholder': 'Tags, comma separated',
|
|
554
|
+
'gallery.tagsApply': 'Add tags',
|
|
555
|
+
'gallery.editTags': 'Edit tags',
|
|
556
|
+
'gallery.tagsEditShort': 'Edit',
|
|
557
|
+
'gallery.tagsSave': 'Save',
|
|
558
|
+
'gallery.tagsCancel': 'Cancel',
|
|
559
|
+
'gallery.selected': '{count} selected',
|
|
560
|
+
'gallery.selectionDone': 'Done selecting',
|
|
561
|
+
'gallery.selectionClear': 'Clear selection',
|
|
562
|
+
'gallery.downloadSelected': 'Download selected',
|
|
563
|
+
'gallery.exportJson': 'Export JSON',
|
|
564
|
+
'gallery.select': 'Select work',
|
|
565
|
+
'gallery.add': 'Add to gallery',
|
|
566
|
+
'gallery.added': 'Added to gallery',
|
|
567
|
+
'gallery.already': 'Already in gallery',
|
|
568
|
+
'gallery.delete': 'Remove',
|
|
569
|
+
'gallery.clear': 'Clear gallery',
|
|
570
|
+
'gallery.clearConfirm': 'Clear the entire gallery? This action cannot be undone.',
|
|
571
|
+
'gallery.empty': 'The gallery is empty — add images you like here',
|
|
572
|
+
'gallery.viewing': 'Gallery · {time}',
|
|
573
|
+
'preview.title': 'Image preview',
|
|
574
|
+
'preview.open': 'Click to preview',
|
|
575
|
+
'preview.close': 'Close',
|
|
576
|
+
'preview.prev': 'Previous',
|
|
577
|
+
'preview.next': 'Next',
|
|
578
|
+
'preview.index': '{index} / {total}',
|
|
579
|
+
'preview.zoomControls': 'Image zoom controls',
|
|
580
|
+
'preview.zoomIn': 'Zoom in',
|
|
581
|
+
'preview.zoomOut': 'Zoom out',
|
|
582
|
+
'preview.zoomReset': 'Reset zoom',
|
|
583
|
+
'preview.zoomLevel': '{percent}%',
|
|
584
|
+
'preview.copyPrompt': 'Copy prompt',
|
|
585
|
+
'preview.copied': 'Copied',
|
|
586
|
+
'preview.addToEdit': 'Add to image to image',
|
|
587
|
+
'config.missing': 'API not configured: open "Settings → Plugins → Configurable" and fill in api_url and api_key for AI Image.',
|
|
588
|
+
'config.generationTitle': 'Configure the image API first',
|
|
589
|
+
'config.generationHint': 'DSH Settings → Plugins → AI Image has opened. Enter the image API URL and API key, then save before generating.',
|
|
590
|
+
'config.enhancementTitle': 'Configure a prompt enhancement model first',
|
|
591
|
+
'config.enhancementHint': 'DSH Settings → Plugins → AI Image has opened. Configure or reuse a chat API URL and key, choose a chat model, then save.',
|
|
592
|
+
'config.disabledTitle': 'The AI Image plugin is disabled',
|
|
593
|
+
'config.disabledHint': 'DSH Settings → Plugins → AI Image has opened. Enable the plugin, then generate images.',
|
|
594
|
+
'config.configured': 'Connected to {url}',
|
|
595
|
+
'config.disabled': 'The plugin is disabled — re-enable it in Settings.',
|
|
596
|
+
'connection.connected': 'Connected',
|
|
597
|
+
'connection.disconnected': 'Disconnected',
|
|
598
|
+
'panel.collapseConfig': 'Collapse settings panel',
|
|
599
|
+
'panel.expandConfig': 'Expand settings panel',
|
|
600
|
+
'update.available': 'A new version is available: {version}',
|
|
601
|
+
'update.install': 'Update online',
|
|
602
|
+
'update.installing': 'Updating…',
|
|
603
|
+
'update.success': 'Updated to {version}; restart DSH to load it',
|
|
604
|
+
'update.failed': 'Update failed; please try again',
|
|
605
|
+
'update.release': 'View Release',
|
|
606
|
+
'settings.title': 'AI Image (dsh-imagegen)',
|
|
607
|
+
'settings.description': 'Configure the image generation API endpoint and key',
|
|
608
|
+
'settings.currentVersion': 'Current version',
|
|
609
|
+
'settings.apiUrl': 'API URL (api_url)',
|
|
610
|
+
'settings.apiUrlHint': 'OpenAI-compatible base URL, e.g. https://api.openai.com/v1; /images/generations and /images/edits are appended',
|
|
611
|
+
'settings.apiKey': 'API Key (api_key)',
|
|
612
|
+
'settings.apiKeyHint': 'Bearer key, stored in plaintext in the local settings document; the UI only shows whether it is set',
|
|
613
|
+
'settings.apiKeySet': 'A key is stored; type a new value to replace it, or click "Clear" to remove it',
|
|
614
|
+
'settings.apiKeyClear': 'Clear',
|
|
615
|
+
'settings.imageModelsTitle': 'Image generation models',
|
|
616
|
+
'settings.imageModelsHint': 'Save the API URL and key, then detect candidate models. Select only models that actually support image generation.',
|
|
617
|
+
'settings.imageModels': 'Allowed image models',
|
|
618
|
+
'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.',
|
|
619
|
+
'settings.imageModelsFetch': 'Detect available models',
|
|
620
|
+
'settings.imageModelsLoading': 'Detecting…',
|
|
621
|
+
'settings.imageModelsCandidates': 'Detected candidate models (select, then save)',
|
|
622
|
+
'settings.addModel': '+ Add manually',
|
|
623
|
+
'settings.cancelAddModel': 'Hide add',
|
|
624
|
+
'settings.addModelPlaceholder': 'Enter a model name, e.g. qwen-image',
|
|
625
|
+
'settings.addModelConfirm': 'Add',
|
|
626
|
+
'settings.removeModel': 'Remove model',
|
|
627
|
+
'settings.optional': 'Optional',
|
|
628
|
+
'settings.moreOptions': 'More settings',
|
|
629
|
+
'settings.promptEnhanceTitle': 'Prompt enhancement model',
|
|
630
|
+
'settings.promptEnhanceHint': 'Expands short requests into complete image prompts. Blank URL and key reuse the image API configuration.',
|
|
631
|
+
'settings.promptApiUrl': 'Chat API URL (optional)',
|
|
632
|
+
'settings.promptApiUrlHint': 'OpenAI-compatible base URL. Leave blank to reuse the image API URL.',
|
|
633
|
+
'settings.promptApiKey': 'Chat API key (optional)',
|
|
634
|
+
'settings.promptApiKeyHint': 'Leave blank to reuse the image API key.',
|
|
635
|
+
'settings.promptModel': 'Chat model',
|
|
636
|
+
'settings.promptModelHint': 'Select or enter a model supporting /chat/completions.',
|
|
637
|
+
'settings.promptModelDetectionHint': 'Uses the image API by default. Detect and select one model.',
|
|
638
|
+
'settings.promptModelsFetch': 'Fetch available models',
|
|
639
|
+
'settings.promptModelsLoading': 'Fetching…',
|
|
640
|
+
'settings.promptModelsSelect': 'Select a model',
|
|
641
|
+
'settings.promptModelsCandidates': 'Detected chat model candidates',
|
|
642
|
+
'settings.addPromptModelPlaceholder': 'Enter a chat model name, e.g. gpt-4.1-mini',
|
|
643
|
+
'settings.promptApiAdvanced': 'Use a separate chat API (optional)',
|
|
644
|
+
'settings.announceToAgent': 'Announce this plugin to agents',
|
|
645
|
+
'settings.announceToAgentHint': 'When on, the plugin presence and capabilities are written into every agent system prompt',
|
|
646
|
+
'settings.allowAgentImageGeneration': 'Allow agents to generate images',
|
|
647
|
+
'settings.allowAgentImageGenerationHint': 'On by default. When off, agents cannot submit, query, or cancel image tasks; the sidebar studio remains available.',
|
|
648
|
+
'settings.enabled': 'Enable plugin',
|
|
649
|
+
'settings.enabledHint': 'When off, the generation studio is unavailable (this card stays available)',
|
|
650
|
+
'settings.save': 'Save',
|
|
651
|
+
'settings.saving': 'Saving…',
|
|
652
|
+
'settings.discard': 'Discard',
|
|
653
|
+
'settings.unsaved': 'Unsaved changes',
|
|
654
|
+
'settings.saveFailed': 'Save failed, please retry',
|
|
655
|
+
'settings.readOnly': 'The settings document is read-only; saving is disabled.',
|
|
656
|
+
'settings.notExposed': 'Settings namespace unavailable: this deployment does not serve this plugin\'s settings.',
|
|
657
|
+
'settings.expand': 'Expand',
|
|
658
|
+
'settings.collapse': 'Collapse',
|
|
659
|
+
'settings.inherit': 'Inherit',
|
|
660
|
+
'settings.on': 'On',
|
|
661
|
+
'settings.off': 'Off',
|
|
662
|
+
'settings.overridden': 'Overridden',
|
|
663
|
+
'settings.reset': 'Reset',
|
|
664
|
+
'settings.invalidNumber': 'Enter a valid number',
|
|
665
|
+
// template library
|
|
666
|
+
'templates.open': 'Templates',
|
|
667
|
+
'templates.title': 'Prompt Template Library',
|
|
668
|
+
'templates.meta': '{count} templates · {origin}',
|
|
669
|
+
'templates.origin.bundled': 'bundled snapshot',
|
|
670
|
+
'templates.origin.refreshed': 'refreshed online',
|
|
671
|
+
'templates.search': 'Search template titles or prompts…',
|
|
672
|
+
'templates.all': 'All',
|
|
673
|
+
'templates.close': 'Close',
|
|
674
|
+
'templates.back': 'Back to list',
|
|
675
|
+
'templates.use': 'Use this prompt',
|
|
676
|
+
'templates.copy': 'Copy prompt',
|
|
677
|
+
'templates.copied': 'Copied',
|
|
678
|
+
'templates.refresh': 'Refresh library',
|
|
679
|
+
'templates.refreshing': 'Refreshing…',
|
|
680
|
+
'templates.refreshed': 'Refreshed — {count} templates',
|
|
681
|
+
'templates.refreshFailed': 'Refresh failed: {error}',
|
|
682
|
+
'templates.cacheAll': 'Cache all images',
|
|
683
|
+
'templates.cacheAllHint': 'Mirror every reference image to local disk through the host proxy, for offline browsing',
|
|
684
|
+
'templates.caching': 'Caching {done}/{total}…',
|
|
685
|
+
'templates.cached': 'All images cached',
|
|
686
|
+
'templates.empty': 'No matching templates',
|
|
687
|
+
'templates.loading': 'Loading the template library…',
|
|
688
|
+
'templates.loadFailed': 'Failed to load the library: {error}',
|
|
689
|
+
'templates.retry': 'Retry',
|
|
690
|
+
'templates.attribution': 'Templates and images come from the awesome-gpt-image-2 project; author links are on each template',
|
|
691
|
+
'templates.source': 'Source: vibeui.top',
|
|
692
|
+
'templates.featured': 'Featured',
|
|
693
|
+
// channel management
|
|
694
|
+
'channels.title': 'Channels',
|
|
695
|
+
'channels.hint': 'Fill in each channel\'s API URL and key to use its models',
|
|
696
|
+
'channels.empty': 'No channels yet — add one below',
|
|
697
|
+
'channels.addProvider': 'Add provider',
|
|
698
|
+
'channels.addCustom': 'Add custom channel',
|
|
699
|
+
'channels.untitled': 'Untitled channel',
|
|
700
|
+
'channels.keySet': 'Key set',
|
|
701
|
+
'channels.keyMissing': 'Key missing',
|
|
702
|
+
'channels.modelCount': '{n} model(s)',
|
|
703
|
+
'channels.noModels': 'No models',
|
|
704
|
+
'channels.defaultLabel': 'Default',
|
|
705
|
+
'channels.statusReady': 'Ready',
|
|
706
|
+
'channels.statusIncomplete': 'Config incomplete',
|
|
707
|
+
'channels.edit': 'Edit',
|
|
708
|
+
'channels.delete': 'Delete',
|
|
709
|
+
'channels.deleteConfirmTitle': 'Delete channel "{name}"? Its key will be removed; history and gallery records are kept.',
|
|
710
|
+
'channels.confirm': 'Delete',
|
|
711
|
+
'channels.cancel': 'Cancel',
|
|
712
|
+
'channels.editorTitle': 'Channel',
|
|
713
|
+
'channels.editorSaveNote': 'Changes take effect with the card\'s "Save" button',
|
|
714
|
+
'channels.displayName': 'Display name',
|
|
715
|
+
'channels.apiUrl': 'API URL',
|
|
716
|
+
'channels.apiKey': 'API key',
|
|
717
|
+
'channels.keyReplaceHint': 'Configured — type a new value to replace it',
|
|
718
|
+
'channels.keyMissingHint': 'Enter a key',
|
|
719
|
+
'channels.keyClear': 'Clear key',
|
|
720
|
+
'channels.modelCatalogTitle': 'Model catalog',
|
|
721
|
+
'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.',
|
|
722
|
+
'channels.detect': 'Re-detect',
|
|
723
|
+
'channels.detecting': 'Detecting…',
|
|
724
|
+
'channels.detectSuccess': 'Connected ✓ · {n} candidates',
|
|
725
|
+
'channels.detectFailed': 'Detection failed: {error}',
|
|
726
|
+
'channels.detectOk': 'Connected to this API',
|
|
727
|
+
'channels.modelAliasLabel': 'Display name (alias)',
|
|
728
|
+
'channels.modelIdLabel': 'Upstream model id',
|
|
729
|
+
'channels.generated': 'Generated {n} time(s)',
|
|
730
|
+
'channels.unknownProtocol': 'Unknown protocol — best-effort OpenAI',
|
|
731
|
+
'channels.removeModel': 'Remove model',
|
|
732
|
+
'channels.manualAddPlaceholder': 'Enter a model id, e.g. qwen-image',
|
|
733
|
+
'channels.addModelConfirm': 'Add',
|
|
734
|
+
'channels.copyFrom': 'Copy from another channel…',
|
|
735
|
+
'channels.copyApply': 'Copy',
|
|
736
|
+
'channels.candidatesTitle': 'Image model candidates (click to add)',
|
|
737
|
+
'channels.deleteThisChannel': 'Delete this channel',
|
|
738
|
+
'channels.setDefault': 'Set as default channel',
|
|
739
|
+
'channels.presetPickerTitle': 'Add provider',
|
|
740
|
+
'channels.presetPickerHint': 'Pick a built-in provider — only the API key is needed',
|
|
741
|
+
'channels.presetCustomHint': 'Configure the API URL, key, and model catalog yourself',
|
|
742
|
+
'channels.presetLoadFailed': 'Failed to load providers: {error}',
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/** Locale key union. */
|
|
746
|
+
export type ImageGenKey = keyof typeof zh
|