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