@logictan/dsh-imagegen 1.5.13 → 2.0.1
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 +34 -363
- package/lib/client.js +741 -65659
- package/lib/client.js.map +1 -1
- package/lib/index.js +1669 -8466
- package/lib/locale-tables.js +2269 -1
- package/package.json +8 -10
- package/docs/skill-config.md +0 -172
- package/lib/locale-tables-B2442vjN.js +0 -2387
- package/lib/locale-tables-BLbJfsrX.js +0 -2384
- package/src/templates/canghe-cases.json +0 -11126
- package/src/templates/cases.json +0 -10196
|
@@ -1,2384 +0,0 @@
|
|
|
1
|
-
//#region src/client/locales.ts
|
|
2
|
-
/**
|
|
3
|
-
* dsh-imagegen surface copy: zh is the key source, en mirrors every key.
|
|
4
|
-
*/
|
|
5
|
-
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": "VisioWork",
|
|
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.text": "文生图",
|
|
21
|
-
"mode.edit": "图生图",
|
|
22
|
-
"workspace.label": "创作模式",
|
|
23
|
-
"workspace.normal": "普通生图",
|
|
24
|
-
"workspace.canvas": "无限画布",
|
|
25
|
-
"workspace.ecommerce": "电商模式",
|
|
26
|
-
"canvas.addImage": "添加图片",
|
|
27
|
-
"canvas.addText": "添加文本",
|
|
28
|
-
"canvas.generate": "生成图片",
|
|
29
|
-
"canvas.addToCanvas": "加入画布",
|
|
30
|
-
"canvas.untitled": "未命名画布",
|
|
31
|
-
"canvas.imageNode": "图片节点",
|
|
32
|
-
"canvas.textNode": "文本节点",
|
|
33
|
-
"canvas.fromGallery": "素材库图片",
|
|
34
|
-
"canvas.fromHistory": "历史图片",
|
|
35
|
-
"canvas.project": "画布项目",
|
|
36
|
-
"canvas.newCanvas": "新建画布",
|
|
37
|
-
"canvas.deleteCanvas": "删除画布",
|
|
38
|
-
"canvas.deleteCanvasConfirm": "再点一次确认删除",
|
|
39
|
-
"canvas.rename": "重命名画布",
|
|
40
|
-
"canvas.renameHint": "双击重命名",
|
|
41
|
-
"canvas.background": "画布背景",
|
|
42
|
-
"canvas.backgroundDots": "点阵",
|
|
43
|
-
"canvas.backgroundLines": "网格线",
|
|
44
|
-
"canvas.backgroundWaves": "波浪线",
|
|
45
|
-
"canvas.backgroundShapeGrid": "滚动方格",
|
|
46
|
-
"canvas.backgroundDotField": "点场",
|
|
47
|
-
"canvas.backgroundDotGrid": "互动点阵",
|
|
48
|
-
"canvas.backgroundFloatingLines": "浮动线条",
|
|
49
|
-
"canvas.backgroundFlow": "流体扰动",
|
|
50
|
-
"canvas.backgroundLiquid": "液态以太",
|
|
51
|
-
"canvas.backgroundFaultyTerminal": "故障终端",
|
|
52
|
-
"canvas.backgroundSilk": "丝绸",
|
|
53
|
-
"canvas.backgroundGalaxy": "星系",
|
|
54
|
-
"canvas.backgroundBlank": "空白",
|
|
55
|
-
"canvas.backgroundUpload": "上传自定义背景…",
|
|
56
|
-
"canvas.backgroundRemove": "移除自定义背景",
|
|
57
|
-
"canvas.templateLibrary": "模板库(选择提示词生成文本+配置节点)",
|
|
58
|
-
"canvas.undo": "撤销 (Ctrl+Z)",
|
|
59
|
-
"canvas.redo": "重做 (Ctrl+Shift+Z)",
|
|
60
|
-
"canvas.saving": "保存中…",
|
|
61
|
-
"canvas.saved": "已保存",
|
|
62
|
-
"canvas.saveFailed": "保存失败",
|
|
63
|
-
"canvas.loading": "加载中…",
|
|
64
|
-
"canvas.toolSelect": "选择 / 移动节点",
|
|
65
|
-
"canvas.toolPan": "拖动画布(空格 / Ctrl + 拖动)",
|
|
66
|
-
"canvas.delete": "删除",
|
|
67
|
-
"canvas.duplicate": "创建副本 (Ctrl+D)",
|
|
68
|
-
"canvas.download": "下载图片",
|
|
69
|
-
"canvas.fitView": "适应全部内容",
|
|
70
|
-
"canvas.minimapOpen": "打开缩略图",
|
|
71
|
-
"canvas.minimapClose": "关闭缩略图",
|
|
72
|
-
"canvas.minimap": "画布缩略图",
|
|
73
|
-
"canvas.zoom": "缩放",
|
|
74
|
-
"canvas.textPlaceholder": "输入文本内容…",
|
|
75
|
-
"canvas.generatingNode": "生成中…",
|
|
76
|
-
"canvas.generateFailed": "生成失败",
|
|
77
|
-
"canvas.retry": "重试",
|
|
78
|
-
"canvas.taskLost": "生成任务已丢失(服务重启),请重试",
|
|
79
|
-
"canvas.emptyImageNode": "点击上传图片",
|
|
80
|
-
"canvas.connectHint": "拖到其他节点建立连线",
|
|
81
|
-
"canvas.connectAddHint": "拖到其他节点建立连线;点击直接添加下一节点",
|
|
82
|
-
"canvas.resizeHint": "拖动调整大小(图片锁定比例)",
|
|
83
|
-
"canvas.count": "生成数量",
|
|
84
|
-
"canvas.configNode": "生成配置",
|
|
85
|
-
"canvas.addConfigNode": "添加配置节点",
|
|
86
|
-
"canvas.configHint": "把图片节点连线到左侧作为参考图,文本节点连线过来作为提示词;选中本节点后在下方输入或改写提示词并生成。",
|
|
87
|
-
"canvas.composerLinked": "已连接 {count} 个输入节点",
|
|
88
|
-
"canvas.composerPlaceholder": "描述要生成的图片;也可把文本节点连线过来作为提示词…",
|
|
89
|
-
"canvas.countUnit": "{count} 张",
|
|
90
|
-
"canvas.model": "生图模型",
|
|
91
|
-
"canvas.modelPlaceholder": "选择模型",
|
|
92
|
-
"canvas.size": "尺寸比例",
|
|
93
|
-
"canvas.sizeAuto": "自动比例",
|
|
94
|
-
"canvas.quality": "清晰度",
|
|
95
|
-
"canvas.qualityAuto": "自动清晰度",
|
|
96
|
-
"canvas.needApi": "请先配置生图 API",
|
|
97
|
-
"canvas.needPrompt": "请输入生成描述",
|
|
98
|
-
"canvas.needModel": "尚未配置可用生图模型",
|
|
99
|
-
"canvas.openSettings": "打开设置",
|
|
100
|
-
"canvas.deleteConnection": "删除连线",
|
|
101
|
-
"canvas.paste": "粘贴 (Ctrl+V)",
|
|
102
|
-
"canvas.addImageNode": "添加图片节点",
|
|
103
|
-
"canvas.addTextNode": "添加文本节点",
|
|
104
|
-
"canvas.addSketch": "添加画板(手绘草图生图)",
|
|
105
|
-
"canvas.sketchNode": "画板节点",
|
|
106
|
-
"canvas.addSketchNode": "添加画板节点",
|
|
107
|
-
"canvas.sketchPlaceholder": "在此自由绘制草图,连线到配置节点即可作为参考图生成",
|
|
108
|
-
"canvas.sketchBrush": "画笔",
|
|
109
|
-
"canvas.sketchEraser": "橡皮擦",
|
|
110
|
-
"canvas.sketchUndo": "撤销上一笔",
|
|
111
|
-
"canvas.sketchClear": "清空画板",
|
|
112
|
-
"canvas.sketchWidth": "笔触粗细",
|
|
113
|
-
"canvas.dismiss": "关闭提示",
|
|
114
|
-
"canvas.annotate": "标注:在图片上画框,自动挂上提示词卡片",
|
|
115
|
-
"canvas.annotationNode": "标注提示词",
|
|
116
|
-
"canvas.annotationTag": "标注",
|
|
117
|
-
"canvas.annotationPlaceholder": "描述这个框里要改成什么,例如:把这里换成一只橘猫",
|
|
118
|
-
"canvas.annotationDrawHint": "在图片上拖拽画框;松开后从框上拉出引导线并挂一张提示词卡片(跟随图片移动,无需连线)",
|
|
119
|
-
"canvas.removeBackground": "移除背景(本地抠图,输出透明 PNG)",
|
|
120
|
-
"canvas.removingBackground": "正在移除背景…",
|
|
121
|
-
"canvas.removeBgDone": "已移除背景(透明像素 {percent}%)",
|
|
122
|
-
"canvas.removeBgFailed": "背景太复杂,本地抠图没有找到可移除的背景;可以先用「标注」框选主体再让模型重绘",
|
|
123
|
-
"canvas.alreadyTransparent": "这张图片已经是透明背景了",
|
|
124
|
-
"canvas.noBackgroundNode": "去背景图片",
|
|
125
|
-
"canvas.splitLayers": "图层拆分(AI 拆成可编辑图层)",
|
|
126
|
-
"canvas.splittingLayers": "正在拆分图层…",
|
|
127
|
-
"canvas.layerSplitDone": "已拆分为 {count} 个图层节点",
|
|
128
|
-
"canvas.layerSplitEmpty": "模型没有识别出可拆分的图层",
|
|
129
|
-
"canvas.layerBackground": "背景层 · {label}",
|
|
130
|
-
"canvas.layerObject": "图层 · {label}",
|
|
131
|
-
"canvas.layerText": "文字层 · {label}",
|
|
132
|
-
"canvas.layerKindBackground": "背景",
|
|
133
|
-
"canvas.layerKindObject": "元素",
|
|
134
|
-
"canvas.layerKindText": "文字",
|
|
135
|
-
"canvas.nodeModel": "本节点使用的模型(重试与相连配置节点默认使用)",
|
|
136
|
-
"canvas.modelDefault": "默认模型",
|
|
137
|
-
"canvas.fontSmaller": "缩小字号",
|
|
138
|
-
"canvas.fontLarger": "放大字号",
|
|
139
|
-
"canvas.bold": "加粗",
|
|
140
|
-
"canvas.textColor": "文字颜色",
|
|
141
|
-
"canvas.colorDefault": "跟随主题",
|
|
142
|
-
"canvas.close": "关闭",
|
|
143
|
-
"canvas.tabUpload": "上传",
|
|
144
|
-
"canvas.tabHistory": "历史记录",
|
|
145
|
-
"canvas.tabGallery": "素材库",
|
|
146
|
-
"canvas.imageMenuUpload": "本地图片",
|
|
147
|
-
"canvas.imageMenuAssets": "素材库",
|
|
148
|
-
"canvas.imageMenuHistory": "历史记录",
|
|
149
|
-
"canvas.imageMenuGenerate": "AI生成",
|
|
150
|
-
"canvas.tabGenerate": "AI 生成",
|
|
151
|
-
"canvas.dropHint": "图片拖动到此处即可添加",
|
|
152
|
-
"canvas.dropSub": "支持多选,PNG / JPG / WebP / GIF",
|
|
153
|
-
"canvas.untitledWork": "未命名作品",
|
|
154
|
-
"canvas.picked": "已选 {count} 张",
|
|
155
|
-
"canvas.generateAndAdd": "生成并添加到画布",
|
|
156
|
-
"chat.expand": "展开右侧对话",
|
|
157
|
-
"chat.collapse": "收起右侧对话",
|
|
158
|
-
"chat.toggle": "对话",
|
|
159
|
-
"config.resizeHint": "拖拽调整参数栏宽度",
|
|
160
|
-
"ecommerce.generation": "生成设置",
|
|
161
|
-
"ecommerce.title": "电商模式",
|
|
162
|
-
"ecommerce.badge": "预览",
|
|
163
|
-
"ecommerce.short": "电商",
|
|
164
|
-
"ecommerce.anchorPending": "已生成主图,其余图片正在自动参考主图生成,保证整套同款…",
|
|
165
|
-
"ecommerce.anchorFailed": "主图生成失败,其余图片已暂停。请重试主图(或整组重新生成)后再继续。",
|
|
166
|
-
"ecommerce.anchorNote": "锚定生成:先出主图,其余图片自动参考主图,保证整套同款",
|
|
167
|
-
"ecommerce.noAssetWarn": "未上传商品图:主图将按文字描述生成并作为锚定基准,建议先上传商品主图获得更高一致性",
|
|
168
|
-
"ecommerce.product": "商品信息",
|
|
169
|
-
"ecommerce.productName": "商品名称(必填)",
|
|
170
|
-
"ecommerce.projectName": "项目名称(可选)",
|
|
171
|
-
"ecommerce.constraints": "卖点与约束",
|
|
172
|
-
"ecommerce.sellingPoints": "参考信息:品牌型号、规格(容量/尺寸/克重)、材质工艺、核心卖点、安全认证、配件清单等",
|
|
173
|
-
"ecommerce.protectedFeatures": "必须保留的特征,例如:颜色、Logo、包装文字、结构",
|
|
174
|
-
"ecommerce.styleHint": "风格补充,例如:高级感 / 写实 / 自然光",
|
|
175
|
-
"ecommerce.setStructure": "套图结构",
|
|
176
|
-
"ecommerce.preview": "生成套图预览",
|
|
177
|
-
"ecommerce.planTitle": "预计生成 {count} 张图片",
|
|
178
|
-
"ecommerce.planSlot": "{count} 张 · {description}",
|
|
179
|
-
"ecommerce.confirm": "确认生成整套图片",
|
|
180
|
-
"ecommerce.uploadRef": "上传商品图(必选,最多 4 张:主体 / 包装 / 细节)",
|
|
181
|
-
"ecommerce.uploadShort": "上传素材",
|
|
182
|
-
"ecommerce.sellingTitle": "商品卖点",
|
|
183
|
-
"ecommerce.advanced": "高级选项(平台 / 约束)",
|
|
184
|
-
"ecommerce.params": "参数选择",
|
|
185
|
-
"ecommerce.platformLabel": "平台",
|
|
186
|
-
"ecommerce.languageLabel": "文案语言",
|
|
187
|
-
"ecommerce.customLanguageOption": "自定义…",
|
|
188
|
-
"ecommerce.customLanguageLabel": "自定义语言",
|
|
189
|
-
"ecommerce.customLanguagePlaceholder": "输入语言名称,例如:Русский / 日本語 / Português",
|
|
190
|
-
"ecommerce.ratioLabel": "比例",
|
|
191
|
-
"ecommerce.categoryLabel": "类目",
|
|
192
|
-
"ecommerce.multiSelect": "可多选",
|
|
193
|
-
"ecommerce.countHint": "点击调整数量(1-4)",
|
|
194
|
-
"ecommerce.refSettings": "参考图设置(可选)",
|
|
195
|
-
"ecommerce.styleTitle": "风格 / 补充提示",
|
|
196
|
-
"ecommerce.protectedLabel": "必须保留的特征(可选)",
|
|
197
|
-
"ecommerce.assetsFull": "最多上传 4 张商品图",
|
|
198
|
-
"ecommerce.productRefTitle": "主图参考图",
|
|
199
|
-
"ecommerce.productRefHint": "必选 · 商品主体图,最多 4 张",
|
|
200
|
-
"ecommerce.styleRefTitle": "风格参考图",
|
|
201
|
-
"ecommerce.styleRefBadge": "可选,最多 1 张",
|
|
202
|
-
"ecommerce.styleRefHint": "只传风格、光影、构图、氛围,不能更换商品主体。",
|
|
203
|
-
"ecommerce.styleRefUpload": "上传风格参考图",
|
|
204
|
-
"ecommerce.refInfoTitle": "参数信息",
|
|
205
|
-
"ecommerce.aiWrite": "AI 帮写",
|
|
206
|
-
"ecommerce.aiWriting": "AI 整理中…",
|
|
207
|
-
"ecommerce.aiWriteHint": "根据商品名称与类目自动整理参数信息(提示词)",
|
|
208
|
-
"ecommerce.promptInfoPlaceholder": "选填:品牌型号、规格(容量/尺寸/克重)、材质工艺、核心卖点、安全认证、配件清单、画面要求等,也可以点右上角 AI 帮写",
|
|
209
|
-
"ecommerce.optional": "可选",
|
|
210
|
-
"ecommerce.previewBoardTitle": "生成前预览",
|
|
211
|
-
"ecommerce.previewBoardHint": "每张图的提示词都可以在生成前修改",
|
|
212
|
-
"ecommerce.promptReset": "恢复默认",
|
|
213
|
-
"ecommerce.promptAutoHint": "自动生成 · 可直接修改",
|
|
214
|
-
"ecommerce.refSelect": "该用途使用的参考图",
|
|
215
|
-
"ecommerce.refNone": "不使用参考图",
|
|
216
|
-
"ecommerce.role.product": "商品主体",
|
|
217
|
-
"ecommerce.role.packaging": "包装",
|
|
218
|
-
"ecommerce.role.detail": "细节/角度",
|
|
219
|
-
"ecommerce.role.style": "风格参考",
|
|
220
|
-
"ecommerce.footerReady": "将生成 {count} 张套图",
|
|
221
|
-
"ecommerce.footerEmpty": "请选择套图结构",
|
|
222
|
-
"ecommerce.results.title": "套图结果",
|
|
223
|
-
"ecommerce.results.progress": "{done}/{total} 已完成",
|
|
224
|
-
"ecommerce.results.failed": "{count} 张失败",
|
|
225
|
-
"ecommerce.results.empty": "确认生成后,每张图片的任务状态和结果会按用途显示在这里",
|
|
226
|
-
"ecommerce.results.regenerate": "重新生成",
|
|
227
|
-
"ecommerce.results.export": "导出清单",
|
|
228
|
-
"ecommerce.results.newProduct": "新商品",
|
|
229
|
-
"prompt.placeholder": "描述你想要的画面,例如:一只戴着宇航员头盔的橘猫,在月球上举起望远镜,水彩风格,柔和光线…",
|
|
230
|
-
"prompt.required": "请输入提示词",
|
|
231
|
-
"prompt.count": "{count}",
|
|
232
|
-
"prompt.countLimit": "{count} / {limit}",
|
|
233
|
-
"prompt.overLimit": "超出该模型 {limit} 字符的提示词上限,请精简后再生成",
|
|
234
|
-
"prompt.enhance": "增强",
|
|
235
|
-
"prompt.enhancing": "增强中…",
|
|
236
|
-
"prompt.enhanceHint": "使用已配置的对话模型扩写提示词",
|
|
237
|
-
"prompt.configTitle": "请先配置提示词增强模型",
|
|
238
|
-
"prompt.configHint": "已打开设置。进入「插件 → AI 生图」,填写或复用 API 地址和密钥,选择对话模型并保存。",
|
|
239
|
-
"tasks.title": "生成任务",
|
|
240
|
-
"tasks.queued": "排队中",
|
|
241
|
-
"tasks.running": "生成中",
|
|
242
|
-
"tasks.completed": "已完成",
|
|
243
|
-
"tasks.failed": "失败",
|
|
244
|
-
"tasks.cancelled": "已取消",
|
|
245
|
-
"tasks.cancel": "取消",
|
|
246
|
-
"tasks.retry": "重试",
|
|
247
|
-
"params.size": "尺寸",
|
|
248
|
-
"params.quality": "清晰度",
|
|
249
|
-
"params.count": "生成数量",
|
|
250
|
-
"params.detail": "细节",
|
|
251
|
-
"size.auto": "自动",
|
|
252
|
-
"size.square": "1:1 方图",
|
|
253
|
-
"size.portrait34": "3:4 标准竖图",
|
|
254
|
-
"size.landscape43": "4:3 标准横图",
|
|
255
|
-
"size.portrait916": "9:16 竖屏",
|
|
256
|
-
"size.portrait23": "2:3 竖图",
|
|
257
|
-
"size.landscape32": "3:2 横图",
|
|
258
|
-
"size.wide169": "16:9 宽屏",
|
|
259
|
-
"size.ultrawide21": "21:9 超宽屏",
|
|
260
|
-
"quality.auto": "自动",
|
|
261
|
-
"quality.1k": "1K",
|
|
262
|
-
"quality.2k": "2K",
|
|
263
|
-
"quality.4k": "4K",
|
|
264
|
-
"count.one": "1 张",
|
|
265
|
-
"count.two": "2 张",
|
|
266
|
-
"count.three": "3 张",
|
|
267
|
-
"count.four": "4 张",
|
|
268
|
-
"detail.auto": "自动",
|
|
269
|
-
"detail.standard": "标准",
|
|
270
|
-
"detail.high": "高清",
|
|
271
|
-
"detail.hint": "透传参数,部分 gpt-image-2 网关支持;官方接口请保持「自动」",
|
|
272
|
-
"model.label": "模型",
|
|
273
|
-
"model.noEditModels": "当前模式暂无可用模型",
|
|
274
|
-
"compare.enable": "多模型对比",
|
|
275
|
-
"compare.models": "参与对比的模型",
|
|
276
|
-
"compare.title": "多模型结果对比",
|
|
277
|
-
"compare.fullscreen": "全屏对比",
|
|
278
|
-
"compare.selectRequired": "请至少选择一个对比模型",
|
|
279
|
-
"generate": "开始生成",
|
|
280
|
-
"generating": "生成中…",
|
|
281
|
-
"edit.upload": "点击或拖拽上传参考图片",
|
|
282
|
-
"edit.uploadHint": "PNG / JPG / WEBP,不超过 10MB",
|
|
283
|
-
"edit.change": "更换图片",
|
|
284
|
-
"edit.remove": "移除",
|
|
285
|
-
"edit.required": "请先上传参考图片",
|
|
286
|
-
"canvas.emptyTitle": "开始你的创作",
|
|
287
|
-
"canvas.emptyHint": "双击空白处或用底部工具添加图片/文本节点;把图片和文本节点连线到目标节点,选中后即可在底部生成器中出图",
|
|
288
|
-
"canvas.new": "新建作图",
|
|
289
|
-
"canvas.newHint": "开始新的作图并清空预览",
|
|
290
|
-
"canvas.error": "生成失败:{error}",
|
|
291
|
-
"canvas.submitting": "正在加入生成队列…",
|
|
292
|
-
"canvas.queued": "已加入生成队列",
|
|
293
|
-
"canvas.queueHint": "当前有 {count} 个任务等待处理",
|
|
294
|
-
"canvas.generating": "正在生成图片…",
|
|
295
|
-
"canvas.elapsed": "已用时 {seconds}s",
|
|
296
|
-
"canvas.images": "本次生成 {count} 张",
|
|
297
|
-
"download": "下载",
|
|
298
|
-
"revisedPrompt": "优化提示词:{prompt}",
|
|
299
|
-
"history.title": "历史记录",
|
|
300
|
-
"history.empty": "暂无历史记录,生成图片后会保存在这里",
|
|
301
|
-
"history.clear": "清空",
|
|
302
|
-
"history.clearConfirm": "确定要清空全部历史记录吗?此操作不可撤销。",
|
|
303
|
-
"history.restore": "恢复",
|
|
304
|
-
"history.delete": "删除",
|
|
305
|
-
"history.images": "张",
|
|
306
|
-
"history.viewing": "历史 · {time}",
|
|
307
|
-
"history.search": "搜索提示词或模型…",
|
|
308
|
-
"history.model": "模型筛选",
|
|
309
|
-
"history.ratio": "比例筛选",
|
|
310
|
-
"history.allModels": "全部模型",
|
|
311
|
-
"history.allRatios": "全部比例",
|
|
312
|
-
"gallery.title": "素材库",
|
|
313
|
-
"gallery.categories": "分类",
|
|
314
|
-
"gallery.all": "全部素材",
|
|
315
|
-
"gallery.upload": "上传素材",
|
|
316
|
-
"gallery.uploadModel": "本地上传",
|
|
317
|
-
"gallery.uploaded": "素材已入库",
|
|
318
|
-
"gallery.uploadHint": "把本地图保存进素材库,画布随时可用",
|
|
319
|
-
"gallery.gpt": "gpt-image-2",
|
|
320
|
-
"gallery.grok": "grok-imagine-image",
|
|
321
|
-
"gallery.ratio": "画面比例",
|
|
322
|
-
"gallery.tags": "标签",
|
|
323
|
-
"gallery.filterHint": "按生成模式、模型和比例筛选素材",
|
|
324
|
-
"gallery.count": "· 共 {count} 幅",
|
|
325
|
-
"gallery.viewMode": "视图模式",
|
|
326
|
-
"gallery.masonry": "瀑布流",
|
|
327
|
-
"gallery.grid": "整齐网格",
|
|
328
|
-
"gallery.sort": "排序",
|
|
329
|
-
"gallery.newest": "最新发布",
|
|
330
|
-
"gallery.oldest": "最早发布",
|
|
331
|
-
"gallery.untitled": "未命名作品",
|
|
332
|
-
"gallery.search": "搜索作品或模型…",
|
|
333
|
-
"gallery.tagsPlaceholder": "标签,用逗号分隔",
|
|
334
|
-
"gallery.tagsApply": "添加标签",
|
|
335
|
-
"gallery.editTags": "编辑标签",
|
|
336
|
-
"gallery.tagsEditShort": "编辑",
|
|
337
|
-
"gallery.tagsSave": "保存",
|
|
338
|
-
"gallery.tagsCancel": "取消",
|
|
339
|
-
"gallery.selected": "已选 {count} 项",
|
|
340
|
-
"gallery.selectionDone": "完成选择",
|
|
341
|
-
"gallery.selectionClear": "取消选择",
|
|
342
|
-
"gallery.downloadSelected": "下载所选",
|
|
343
|
-
"gallery.exportJson": "导出 JSON",
|
|
344
|
-
"gallery.select": "选择作品",
|
|
345
|
-
"gallery.add": "加入素材库",
|
|
346
|
-
"gallery.added": "已加入素材库",
|
|
347
|
-
"gallery.already": "已在素材库中",
|
|
348
|
-
"gallery.delete": "移出素材库",
|
|
349
|
-
"gallery.openFolder": "打开文件夹",
|
|
350
|
-
"gallery.clear": "清空素材库",
|
|
351
|
-
"gallery.openFolderHint": "在系统的文件管理器中打开图片保存目录(~/.dsh/dsh-imagegen)",
|
|
352
|
-
"gallery.clearConfirm": "确定要清空整个素材库吗?此操作不可撤销。",
|
|
353
|
-
"gallery.empty": "素材库还是空的,把喜欢的图片加入进来吧",
|
|
354
|
-
"gallery.viewing": "素材库 · {time}",
|
|
355
|
-
"preview.title": "图片预览",
|
|
356
|
-
"preview.open": "点击预览",
|
|
357
|
-
"preview.close": "关闭",
|
|
358
|
-
"preview.prev": "上一张",
|
|
359
|
-
"preview.next": "下一张",
|
|
360
|
-
"preview.index": "{index} / {total}",
|
|
361
|
-
"preview.zoomControls": "图片缩放控制",
|
|
362
|
-
"preview.zoomIn": "放大",
|
|
363
|
-
"preview.zoomOut": "缩小",
|
|
364
|
-
"preview.zoomReset": "重置缩放",
|
|
365
|
-
"preview.zoomLevel": "{percent}%",
|
|
366
|
-
"preview.copyPrompt": "复制提示词",
|
|
367
|
-
"preview.copied": "已复制",
|
|
368
|
-
"preview.addToEdit": "添加到图生图",
|
|
369
|
-
"config.missing": "尚未配置 API:请前往「设置 → 插件 → 可配置」为 AI 生图填写 api_url 与 api_key。",
|
|
370
|
-
"config.generationTitle": "请先配置生图 API",
|
|
371
|
-
"config.generationHint": "已自动打开 DSH「设置 → 插件 → AI 生图」。填写生图 API 地址与 API 密钥,保存后即可开始生成。",
|
|
372
|
-
"config.enhancementTitle": "请先配置提示词增强模型",
|
|
373
|
-
"config.enhancementHint": "已自动打开 DSH「设置 → 插件 → AI 生图」。填写或复用对话 API 地址和密钥,选择对话模型并保存。",
|
|
374
|
-
"config.disabledTitle": "AI 生图插件已停用",
|
|
375
|
-
"config.disabledHint": "已自动打开 DSH「设置 → 插件 → AI 生图」。开启「启用插件」后即可生成图片。",
|
|
376
|
-
"config.configured": "已连接 {url}",
|
|
377
|
-
"config.disabled": "插件已停用,请在设置中重新启用。",
|
|
378
|
-
"connection.connected": "已连接",
|
|
379
|
-
"connection.disconnected": "未连接",
|
|
380
|
-
"panel.collapseConfig": "收起参数栏",
|
|
381
|
-
"panel.expandConfig": "展开参数栏",
|
|
382
|
-
"update.available": "检测到新版本:{version}",
|
|
383
|
-
"update.install": "在线更新",
|
|
384
|
-
"update.installing": "更新中…",
|
|
385
|
-
"update.success": "已更新到 {version},请重启 DSH",
|
|
386
|
-
"update.failed": "更新失败,请重试",
|
|
387
|
-
"update.release": "查看 Release",
|
|
388
|
-
"settings.title": "AI 生图(dsh-imagegen)",
|
|
389
|
-
"settings.description": "配置图像生成 API 地址与密钥",
|
|
390
|
-
"settings.currentVersion": "当前版本",
|
|
391
|
-
"settings.apiUrl": "API 地址(api_url)",
|
|
392
|
-
"settings.apiUrlHint": "OpenAI 兼容接口基址,如 https://api.openai.com/v1;将自动拼接 /images/generations 与 /images/edits",
|
|
393
|
-
"settings.apiKey": "API 密钥(api_key)",
|
|
394
|
-
"settings.apiKeyHint": "Bearer 密钥,明文存于本机设置文档;界面只显示是否已设置",
|
|
395
|
-
"settings.apiKeySet": "已保存密钥;输入新值可更换,点击「清除」可删除",
|
|
396
|
-
"settings.apiKeyClear": "清除",
|
|
397
|
-
"settings.imageModelsTitle": "生图模型",
|
|
398
|
-
"settings.imageModelsHint": "保存 API 地址和密钥后检测候选模型;请只选择实际支持生图的项。",
|
|
399
|
-
"settings.imageModels": "允许使用的生图模型",
|
|
400
|
-
"settings.imageModelsManualHint": "一行一个模型;API 未提供 /models 时可手动填写。面板和 Agent 只能使用此列表。",
|
|
401
|
-
"settings.imageModelsFetch": "检测可用模型",
|
|
402
|
-
"settings.imageModelsLoading": "检测中…",
|
|
403
|
-
"settings.imageModelsCandidates": "检测到的候选模型(勾选后保存)",
|
|
404
|
-
"settings.addModel": "+ 手动添加",
|
|
405
|
-
"settings.cancelAddModel": "收起添加",
|
|
406
|
-
"settings.addModelPlaceholder": "输入模型名称,例如 qwen-image",
|
|
407
|
-
"settings.addModelConfirm": "添加",
|
|
408
|
-
"settings.removeModel": "移除模型",
|
|
409
|
-
"settings.optional": "可选",
|
|
410
|
-
"settings.moreOptions": "更多设置",
|
|
411
|
-
"settings.localStoragePath": "本地图片存储目录",
|
|
412
|
-
"settings.localStoragePathHint": "生成历史、素材库和无限画布图片统一保存到此目录;留空使用默认的 ~/.dsh/dsh-imagegen。",
|
|
413
|
-
"settings.storageTitle": "对象存储同步",
|
|
414
|
-
"settings.storageEnabled": "启用对象存储同步",
|
|
415
|
-
"settings.storageHint": "图片保存到本地后,异步上传一份到 S3 兼容对象存储(腾讯云 COS / 阿里云 OSS / 七牛云 S3 / MinIO / R2 等)",
|
|
416
|
-
"settings.storageEndpoint": "接口地址(含存储桶)",
|
|
417
|
-
"settings.storageEndpointHint": "S3 兼容地址,例如 https://bucket-appid.cos.ap-guangzhou.myqcloud.com 或 https://bucket.oss-cn-hangzhou.aliyuncs.com",
|
|
418
|
-
"settings.storageRegion": "区域",
|
|
419
|
-
"settings.storageRegionHint": "签名用区域 ID,例如 ap-guangzhou / oss-cn-hangzhou / cn-east-1",
|
|
420
|
-
"settings.storagePrefix": "Key 前缀",
|
|
421
|
-
"settings.storagePrefixHint": "上传目录前缀,对象键为 前缀/gallery|images/文件名",
|
|
422
|
-
"settings.storageAccessKey": "Access Key",
|
|
423
|
-
"settings.storageAccessKeyHint": "S3 兼容密钥 ID(COS SecretId / OSS AccessKeyId / 七牛 AK)",
|
|
424
|
-
"settings.storageSecretKey": "Secret Key",
|
|
425
|
-
"settings.storageSecretKeyHint": "S3 兼容密钥,仅保存在本机设置文档",
|
|
426
|
-
"settings.storageSyncGallery": "同步素材库图片",
|
|
427
|
-
"settings.storageSyncGalleryHint": "加入素材库的图片自动上传",
|
|
428
|
-
"settings.storageSyncHistory": "同步历史记录图片",
|
|
429
|
-
"settings.storageSyncHistoryHint": "所有生成结果也一并上传(数量可能较大)",
|
|
430
|
-
"settings.storageTest": "测试连接",
|
|
431
|
-
"settings.storageTesting": "测试中…",
|
|
432
|
-
"settings.storageTestOk": "连接成功({ms} ms),已上传探测文件",
|
|
433
|
-
"settings.storageTestFailed": "连接失败:{error}",
|
|
434
|
-
"settings.storageKeyHint": "提示:同步为尽力而为,失败不影响本地保存;可在对象存储控制台按前缀查看已同步文件。",
|
|
435
|
-
"settings.promptEnhanceTitle": "提示词增强模型",
|
|
436
|
-
"settings.promptEnhanceHint": "用于将简短描述扩写为更完整的生图提示词;留空的地址和密钥会复用生图配置。",
|
|
437
|
-
"settings.promptApiUrl": "对话 API 地址(可选)",
|
|
438
|
-
"settings.promptApiUrlHint": "OpenAI 兼容基址;留空则复用图像 API 地址。",
|
|
439
|
-
"settings.promptApiKey": "对话 API 密钥(可选)",
|
|
440
|
-
"settings.promptApiKeyHint": "留空则复用图像 API 密钥。",
|
|
441
|
-
"settings.promptModel": "对话模型",
|
|
442
|
-
"settings.promptModelHint": "选择或填写支持 /chat/completions 的模型。",
|
|
443
|
-
"settings.promptModelDetectionHint": "默认复用生图 API;检测后点选一个模型即可。",
|
|
444
|
-
"settings.promptModelsFetch": "获取可用模型",
|
|
445
|
-
"settings.promptModelsLoading": "正在获取…",
|
|
446
|
-
"settings.promptModelsSelect": "选择一个模型",
|
|
447
|
-
"settings.promptModelsCandidates": "检测到的候选对话模型",
|
|
448
|
-
"settings.addPromptModelPlaceholder": "输入对话模型名称,例如 gpt-4.1-mini",
|
|
449
|
-
"settings.promptApiAdvanced": "使用独立对话 API(可选)",
|
|
450
|
-
"settings.announceToAgent": "向 Agent 播报本插件",
|
|
451
|
-
"settings.announceToAgentHint": "开启后,本插件的存在与能力会写入每个 Agent 的系统提示词",
|
|
452
|
-
"settings.allowAgentImageGeneration": "允许 Agent 调用生图",
|
|
453
|
-
"settings.allowAgentImageGenerationHint": "默认开启。关闭后,Agent 无法提交、查询或取消生图任务;侧边栏工作台不受影响。",
|
|
454
|
-
"settings.enabled": "启用插件",
|
|
455
|
-
"settings.enabledHint": "关闭后生图面板不可用(设置卡片始终可用)",
|
|
456
|
-
"settings.save": "保存",
|
|
457
|
-
"settings.saving": "保存中…",
|
|
458
|
-
"settings.discard": "放弃修改",
|
|
459
|
-
"settings.unsaved": "有未保存的修改",
|
|
460
|
-
"settings.saveFailed": "保存失败,请重试",
|
|
461
|
-
"settings.readOnly": "当前设置文档为只读,无法保存。",
|
|
462
|
-
"settings.notExposed": "设置命名空间不可用:本部署未提供该插件的设置服务。",
|
|
463
|
-
"settings.expand": "展开",
|
|
464
|
-
"settings.collapse": "收起",
|
|
465
|
-
"settings.inherit": "继承",
|
|
466
|
-
"settings.on": "开",
|
|
467
|
-
"settings.off": "关",
|
|
468
|
-
"settings.overridden": "已覆盖",
|
|
469
|
-
"settings.reset": "重置",
|
|
470
|
-
"settings.invalidNumber": "请输入有效数字",
|
|
471
|
-
"templates.open": "模板库",
|
|
472
|
-
"templates.title": "提示词模板库",
|
|
473
|
-
"templates.sources": "模板库来源",
|
|
474
|
-
"templates.meta": "共 {count} 个模板 · {origin}",
|
|
475
|
-
"templates.origin.bundled": "内置快照",
|
|
476
|
-
"templates.origin.refreshed": "在线刷新",
|
|
477
|
-
"templates.search": "搜索模板标题或提示词…",
|
|
478
|
-
"templates.all": "全部",
|
|
479
|
-
"templates.close": "关闭",
|
|
480
|
-
"templates.back": "返回列表",
|
|
481
|
-
"templates.use": "使用此提示词",
|
|
482
|
-
"templates.copy": "复制提示词",
|
|
483
|
-
"templates.copied": "已复制",
|
|
484
|
-
"templates.refresh": "刷新本库",
|
|
485
|
-
"templates.refreshing": "刷新中…",
|
|
486
|
-
"templates.refreshed": "已刷新,共 {count} 个模板",
|
|
487
|
-
"templates.refreshFailed": "刷新失败:{error}",
|
|
488
|
-
"templates.favorites": "收藏",
|
|
489
|
-
"templates.favoritesHint": "只看已收藏的模板",
|
|
490
|
-
"templates.favoritesEmpty": "还没有收藏,点击模板卡片右上角的星标即可收藏",
|
|
491
|
-
"templates.favoriteAdd": "收藏此模板",
|
|
492
|
-
"templates.favoriteRemove": "取消收藏",
|
|
493
|
-
"templates.favorite": "收藏",
|
|
494
|
-
"templates.unfavorite": "已收藏",
|
|
495
|
-
"templates.cacheAll": "缓存全部图片",
|
|
496
|
-
"templates.cacheAllHint": "通过本机代理把当前模板库的全部参考图缓存到本地磁盘,之后离线也能浏览",
|
|
497
|
-
"templates.caching": "缓存中 {done}/{total}…",
|
|
498
|
-
"templates.cached": "图片已全部缓存",
|
|
499
|
-
"templates.empty": "没有匹配的模板",
|
|
500
|
-
"templates.loading": "正在加载模板库…",
|
|
501
|
-
"templates.loadFailed": "模板库加载失败:{error}",
|
|
502
|
-
"templates.retry": "重试",
|
|
503
|
-
"templates.attribution": "模板与图片来自各来源站点,作者链接见模板详情",
|
|
504
|
-
"templates.source": "来源:{label}",
|
|
505
|
-
"templates.featured": "精选",
|
|
506
|
-
"inspiration.title": "灵感案例",
|
|
507
|
-
"inspiration.shuffle": "随机",
|
|
508
|
-
"inspiration.shuffling": "换一批…",
|
|
509
|
-
"inspiration.useHint": "点击使用该提示词",
|
|
510
|
-
"channels.title": "渠道",
|
|
511
|
-
"channels.hint": "填写各渠道的 API 地址与密钥即可使用对应模型",
|
|
512
|
-
"channels.empty": "尚无渠道,点击下方按钮添加",
|
|
513
|
-
"channels.addProvider": "添加提供方",
|
|
514
|
-
"channels.addCustom": "添加自定义渠道",
|
|
515
|
-
"channels.untitled": "未命名渠道",
|
|
516
|
-
"channels.keySet": "密钥已设置",
|
|
517
|
-
"channels.keyMissing": "未设置密钥",
|
|
518
|
-
"channels.modelCount": "{n} 个模型",
|
|
519
|
-
"channels.noModels": "未配置模型",
|
|
520
|
-
"channels.defaultLabel": "默认",
|
|
521
|
-
"channels.statusReady": "可用",
|
|
522
|
-
"channels.statusIncomplete": "配置未完成",
|
|
523
|
-
"channels.edit": "编辑",
|
|
524
|
-
"channels.delete": "删除",
|
|
525
|
-
"channels.deleteConfirmTitle": "删除渠道「{name}」?该渠道的密钥将被移除;历史与素材库中的记录仍会保留。",
|
|
526
|
-
"channels.confirm": "确认删除",
|
|
527
|
-
"channels.cancel": "取消",
|
|
528
|
-
"channels.editorTitle": "渠道",
|
|
529
|
-
"channels.editorSaveNote": "改动将随卡片底部「保存」一起生效",
|
|
530
|
-
"channels.displayName": "显示名称",
|
|
531
|
-
"channels.apiUrl": "API 地址",
|
|
532
|
-
"channels.apiKey": "API 密钥",
|
|
533
|
-
"channels.keyReplaceHint": "已配置 — 输入新值可替换",
|
|
534
|
-
"channels.keyMissingHint": "填写密钥",
|
|
535
|
-
"channels.keyClear": "清除密钥",
|
|
536
|
-
"channels.modelCatalogTitle": "模型目录",
|
|
537
|
-
"channels.noModelsHint": "暂无模型:点击「检测」拉取候选,或手动添加;别名(显示名)默认等于上游模型 id,可自行修改。",
|
|
538
|
-
"channels.detect": "重新检测",
|
|
539
|
-
"channels.detecting": "检测中…",
|
|
540
|
-
"channels.detectSuccess": "连通 ✓ · {n} 个候选",
|
|
541
|
-
"channels.detectFailed": "检测失败:{error}",
|
|
542
|
-
"channels.detectOk": "已连接该 API",
|
|
543
|
-
"channels.modelAliasLabel": "显示名(别名)",
|
|
544
|
-
"channels.modelIdLabel": "上游模型 id",
|
|
545
|
-
"channels.generated": "已生成 {n} 次",
|
|
546
|
-
"channels.unknownProtocol": "未知协议,按通用 OpenAI 协议尝试",
|
|
547
|
-
"channels.removeModel": "移除模型",
|
|
548
|
-
"channels.manualAddPlaceholder": "输入模型 id,例如 qwen-image",
|
|
549
|
-
"channels.addModelConfirm": "添加",
|
|
550
|
-
"channels.copyFrom": "从其他渠道复制…",
|
|
551
|
-
"channels.copyApply": "复制",
|
|
552
|
-
"channels.candidatesTitle": "图片模型候选(点击加入)",
|
|
553
|
-
"channels.deleteThisChannel": "删除此渠道",
|
|
554
|
-
"channels.setDefault": "设为默认渠道",
|
|
555
|
-
"channels.presetPickerTitle": "添加提供方",
|
|
556
|
-
"channels.presetPickerHint": "选择一个内置提供方,仅需填写 API 密钥",
|
|
557
|
-
"channels.presetCustomHint": "自行填写 API 地址、密钥与模型目录",
|
|
558
|
-
"channels.presetLoadFailed": "加载提供方失败:{error}",
|
|
559
|
-
"canvas.skills.fileNode": "文件节点",
|
|
560
|
-
"canvas.skills.addFileNode": "添加文件节点",
|
|
561
|
-
"canvas.skills.emptyFileNode": "点击上传文件",
|
|
562
|
-
"canvas.skills.fileMenuUpload": "上传文件",
|
|
563
|
-
"canvas.skills.fileDropHint": "文件拖到此处即可上传",
|
|
564
|
-
"canvas.skills.fileDropSub": "支持 PDF / Office / 文本 / 图片等,≤50MB",
|
|
565
|
-
"canvas.skills.fileSizeUnknown": "大小未知",
|
|
566
|
-
"canvas.skills.filePreviewUnavailable": "此格式无法内联预览,请下载或用技能处理",
|
|
567
|
-
"canvas.skills.filePreviewLoading": "正在读取预览…",
|
|
568
|
-
"canvas.skills.fileDownload": "下载文件",
|
|
569
|
-
"canvas.skills.fileOpen": "用系统程序打开",
|
|
570
|
-
"canvas.skills.fileKind.text": "文本",
|
|
571
|
-
"canvas.skills.fileKind.pdf": "PDF",
|
|
572
|
-
"canvas.skills.fileKind.image": "图片",
|
|
573
|
-
"canvas.skills.fileKind.office": "文档",
|
|
574
|
-
"canvas.skills.fileKind.archive": "压缩包",
|
|
575
|
-
"canvas.skills.fileKind.audio": "音频",
|
|
576
|
-
"canvas.skills.fileKind.video": "视频",
|
|
577
|
-
"canvas.skills.fileKind.other": "文件",
|
|
578
|
-
"canvas.skills.fileTooLarge": "文件超过 {size}MB 上限",
|
|
579
|
-
"canvas.skills.fileTypeBlocked": "出于安全考虑,不支持上传 {ext} 文件",
|
|
580
|
-
"canvas.skills.fileUploadFailed": "文件上传失败:{message}",
|
|
581
|
-
"canvas.preview.expand": "放大预览",
|
|
582
|
-
"canvas.preview.close": "关闭预览",
|
|
583
|
-
"canvas.preview.copy": "复制内容",
|
|
584
|
-
"canvas.preview.copied": "已复制",
|
|
585
|
-
"canvas.preview.openTab": "新标签页打开",
|
|
586
|
-
"canvas.preview.retry": "重试",
|
|
587
|
-
"canvas.preview.failed": "读取预览失败:{message}",
|
|
588
|
-
"canvas.preview.empty": "文件是空的",
|
|
589
|
-
"canvas.preview.textTruncated": "文件较大,仅显示前 {chars} 个字符",
|
|
590
|
-
"canvas.preview.tableTruncated": "表格较大,仅显示前 {rows} 行",
|
|
591
|
-
"canvas.preview.archiveTruncated": "压缩包条目较多,仅列出前 {count} 项",
|
|
592
|
-
"canvas.preview.docTruncated": "文档较长,仅显示前 {blocks} 段",
|
|
593
|
-
"canvas.preview.slidesTruncated": "幻灯片较多,仅显示前 {count} 页",
|
|
594
|
-
"canvas.preview.slideOf": "第 {page} 页",
|
|
595
|
-
"canvas.preview.rendered": "渲染",
|
|
596
|
-
"canvas.preview.source": "源码",
|
|
597
|
-
"canvas.preview.pdfFallback": "当前环境无法内联显示 PDF,请下载后查看",
|
|
598
|
-
"canvas.preview.pdfHeuristic": "PDF 文字为启发式提取,复杂排版可能丢失顺序",
|
|
599
|
-
"canvas.preview.reason.unsupported": "这种格式没有可读内容,请下载后查看,或先转成图片 / 文本节点再交给技能处理",
|
|
600
|
-
"canvas.preview.reason.unreadable": "没能从这个文件里读出文字,可能是扫描件或特殊编码;可以转成图片节点交给视觉模型",
|
|
601
|
-
"canvas.preview.doubleClick": "双击放大预览",
|
|
602
|
-
"canvas.skills.button": "技能",
|
|
603
|
-
"canvas.skills.menuTitle": "运行技能",
|
|
604
|
-
"canvas.skills.runOn": "在「{name}」上运行技能",
|
|
605
|
-
"canvas.skills.pickerTitle": "选择技能",
|
|
606
|
-
"canvas.skills.searchPlaceholder": "搜索技能…",
|
|
607
|
-
"canvas.skills.groupBuiltin": "内置动作",
|
|
608
|
-
"canvas.skills.groupExternal": "本机技能",
|
|
609
|
-
"canvas.skills.emptyExternal": "本机没有可用技能,可在 ~/.dsh/skills 安装后重试",
|
|
610
|
-
"canvas.skills.empty": "没有可用技能",
|
|
611
|
-
"canvas.skills.loading": "正在读取技能列表…",
|
|
612
|
-
"canvas.skills.tierLight": "轻量",
|
|
613
|
-
"canvas.skills.tierHeavy": "重任务",
|
|
614
|
-
"canvas.skills.accepts": "可用节点:{types}",
|
|
615
|
-
"canvas.skills.incompatible": "该技能不适用于此节点类型",
|
|
616
|
-
"canvas.skills.disabled": "画布技能已在设置中关闭",
|
|
617
|
-
"canvas.skills.noRegistry": "本宿主未挂载技能注册表(ctx.skills),只能使用内置动作",
|
|
618
|
-
"canvas.skills.registryFailed": "读取技能列表失败:{message}",
|
|
619
|
-
"canvas.skills.needAgent": "需要宿主 Agent 运行层(本机 DSH 未提供),重任务技能不可用",
|
|
620
|
-
"canvas.skills.unknown": "技能不存在或已被移除",
|
|
621
|
-
"canvas.skills.canvasMissing": "画布不存在,请刷新后重试",
|
|
622
|
-
"canvas.skills.noInput": "这个节点没有可处理的输入",
|
|
623
|
-
"canvas.skills.noChat": "轻量技能需要先在「设置 → 插件 → AI 生图 → 提示词增强」配置聊天模型",
|
|
624
|
-
"canvas.skills.noDescription": "(技能未提供描述)",
|
|
625
|
-
"canvas.skills.externalName": "{name}",
|
|
626
|
-
"canvas.skills.externalSystem": "你在执行名为「{name}」的技能。严格按技能说明处理用户提供的输入,只用用户语言回答,直接输出处理结果,不要复述技能说明。",
|
|
627
|
-
"canvas.skills.externalHeader": "请按技能「{name}」的说明处理下面的输入。",
|
|
628
|
-
"canvas.skills.externalHeavyCost": "该技能属于长任务,会启动无头 Agent 执行,可能长时间占用模型额度。",
|
|
629
|
-
"canvas.skills.extraInstruction": "额外要求:",
|
|
630
|
-
"canvas.skills.inputsHeader": "输入内容:",
|
|
631
|
-
"canvas.skills.inputsEmpty": "(没有可读取的文本内容,请依据附带的图片处理)",
|
|
632
|
-
"canvas.skills.needInstruction": "请填写自定义润色指令",
|
|
633
|
-
"canvas.skills.needImage": "该技能需要图片节点作为输入",
|
|
634
|
-
"canvas.skills.needText": "该技能需要带文字的文本节点作为输入",
|
|
635
|
-
"canvas.skills.fileMissing": "文件资产不存在或已被清理",
|
|
636
|
-
"canvas.skills.extractFailed": "无法抽取该文件的内容",
|
|
637
|
-
"canvas.skills.nothingToRead": "没有可读取的文本内容",
|
|
638
|
-
"canvas.skills.truncated": "内容较长,已截断到 {count} 字符",
|
|
639
|
-
"canvas.skills.tooManyImages": "图片数量超过 {count} 张,只处理了前面的图片",
|
|
640
|
-
"canvas.skills.extractNodeTitle": "「{name}」内容",
|
|
641
|
-
"canvas.skills.summaryHead": "已汇总 {count} 个来源节点:",
|
|
642
|
-
"canvas.skills.describeAsk": "请描述这 {count} 张图片。",
|
|
643
|
-
"canvas.skills.polishNodeTitle": "润色结果({style})",
|
|
644
|
-
"canvas.skills.skillMissing": "本机未安装「{name}」技能。请先安装该技能(例如让 DSH Agent 安装 https://github.com/ningzimu/image-to-editable-ppt-skill ),再重试。",
|
|
645
|
-
"canvas.skills.agentFailed": "无法创建无头 Agent(请检查模型与 Agent 预设配置)",
|
|
646
|
-
"canvas.skills.needModel": "宿主没有提供默认模型(agent-default-model),重任务技能无法启动 Agent。请先在「设置 → 通用」选择默认模型,再重试。",
|
|
647
|
-
"canvas.skills.noOutputFile": "技能没有产出文件,已把 Agent 的回复保存为文本节点",
|
|
648
|
-
"canvas.skills.heavyIntro": "你正在为一个可视化画布执行技能「{name}」。严格按技能说明完成整个流程,不要省略步骤。",
|
|
649
|
-
"canvas.skills.heavyBodyHeader": "技能说明:",
|
|
650
|
-
"canvas.skills.heavyInputsHeader": "本任务的输入文件(绝对路径):",
|
|
651
|
-
"canvas.skills.heavyOutputHeader": "把最终产物写入这个目录:{dir}",
|
|
652
|
-
"canvas.skills.heavyRules": "要求:\n1. 全部中间文件放在当前工作目录,最终产物只能放在上面的输出目录。\n2. 完成后用简短中文回复:产物文件名、是否成功、注意事项。",
|
|
653
|
-
"canvas.skills.heavyAsk": "请执行技能「{name}」。",
|
|
654
|
-
"canvas.skills.heavyAskInputs": "输入文件目录:{dir}",
|
|
655
|
-
"canvas.skills.heavyAskOutput": "输出目录:{dir}",
|
|
656
|
-
"canvas.skills.heavyAskLoadSkill": "(如果技能说明不在上下文里,请先用技能名「{name}」加载它)",
|
|
657
|
-
"canvas.skills.stageQueued": "排队中",
|
|
658
|
-
"canvas.skills.stagePreparing": "准备输入文件",
|
|
659
|
-
"canvas.skills.stageReading": "读取节点内容",
|
|
660
|
-
"canvas.skills.stageRunning": "技能执行中",
|
|
661
|
-
"canvas.skills.stageCollecting": "收集产物",
|
|
662
|
-
"canvas.skills.stageDone": "完成",
|
|
663
|
-
"canvas.skills.stageCancelled": "已取消",
|
|
664
|
-
"canvas.skills.stagePrepared": "已备好 {count} 个输入文件",
|
|
665
|
-
"canvas.skills.stageArtifacts": "技能执行中 · 已产出 {count} 个文件",
|
|
666
|
-
"canvas.skills.runElapsed": "已用时",
|
|
667
|
-
"canvas.skills.runRetry": "重试",
|
|
668
|
-
"canvas.skills.runStarted": "技能「{name}」已开始",
|
|
669
|
-
"canvas.skills.runDone": "技能完成,新增 {count} 个节点",
|
|
670
|
-
"canvas.skills.runFailed": "技能运行失败:{message}",
|
|
671
|
-
"canvas.skills.runCancelled": "技能运行已取消",
|
|
672
|
-
"canvas.skills.cancel": "取消运行",
|
|
673
|
-
"canvas.skills.cancelling": "正在取消…",
|
|
674
|
-
"canvas.skills.confirmTitle": "运行重任务技能",
|
|
675
|
-
"canvas.skills.confirmBody": "技能「{name}」会启动一个无头 Agent 在本机执行,可能持续数分钟到数十分钟,并消耗较多模型额度。",
|
|
676
|
-
"canvas.skills.confirmCost": "成本提示:{hint}",
|
|
677
|
-
"canvas.skills.confirmRequires": "前置条件:{list}",
|
|
678
|
-
"canvas.skills.confirmRun": "确认运行",
|
|
679
|
-
"canvas.skills.confirmCancel": "先不运行",
|
|
680
|
-
"canvas.skills.batchTitle": "批量运行",
|
|
681
|
-
"canvas.skills.batchNote": "将依次在 {count} 个节点上运行(串行执行)",
|
|
682
|
-
"canvas.skills.batchTooMany": "一次最多处理 {count} 个节点",
|
|
683
|
-
"canvas.skills.sourceBadge": "技能产出",
|
|
684
|
-
"canvas.skills.sourceTip": "由技能「{name}」产出,来自 {count} 个来源节点",
|
|
685
|
-
"canvas.skills.rerun": "用同一技能再跑一次",
|
|
686
|
-
"canvas.skills.history": "技能运行记录",
|
|
687
|
-
"canvas.skills.historyEmpty": "暂无运行记录",
|
|
688
|
-
"canvas.skills.needConfirm": "该技能需要确认后才能运行",
|
|
689
|
-
"canvas.skills.polish": "文本润色",
|
|
690
|
-
"canvas.skills.polishDesc": "按风格改写文本节点:更正式 / 更口语 / 更短 / 扩写,或自定义指令",
|
|
691
|
-
"canvas.skills.describe": "图片描述",
|
|
692
|
-
"canvas.skills.describeDesc": "用视觉模型读出图片内容,产出文本节点(可用作提示词)",
|
|
693
|
-
"canvas.skills.extract": "内容抽取",
|
|
694
|
-
"canvas.skills.extractDesc": "把文件或图片里的文字抽成文本节点(文本 / 代码 / OOXML 文档 / PDF)",
|
|
695
|
-
"canvas.skills.ppt": "图片转可编辑 PPT",
|
|
696
|
-
"canvas.skills.pptDesc": "调用本机 image-to-editable-ppt 技能,把图片重建为可编辑 .pptx 文件节点",
|
|
697
|
-
"canvas.skills.pptCost": "长任务:10 页 PPT 可能消耗较多额度,单页通常 10 分钟以上",
|
|
698
|
-
"canvas.skills.pptRequires": "需要本机已安装 image-to-editable-ppt 技能,并按其文档配置 OCR Token 与图片后端",
|
|
699
|
-
"canvas.polish.button": "AI 润色",
|
|
700
|
-
"canvas.polish.title": "AI 润色",
|
|
701
|
-
"canvas.polish.formal": "更正式",
|
|
702
|
-
"canvas.polish.casual": "更口语",
|
|
703
|
-
"canvas.polish.shorter": "更短",
|
|
704
|
-
"canvas.polish.expand": "扩写",
|
|
705
|
-
"canvas.polish.custom": "自定义",
|
|
706
|
-
"canvas.polish.customPlaceholder": "例如:改写成小红书文案,带 emoji 和话题标签",
|
|
707
|
-
"canvas.polish.run": "开始润色",
|
|
708
|
-
"canvas.polish.previewTitle": "原 / 新对比",
|
|
709
|
-
"canvas.polish.apply": "应用",
|
|
710
|
-
"canvas.polish.revert": "还原",
|
|
711
|
-
"canvas.polish.applied": "已应用润色结果",
|
|
712
|
-
"canvas.polish.directHint": "当前设置:润色后直接覆盖原文(可在设置中改为先预览)",
|
|
713
|
-
"settings.skillsEnabled": "画布技能",
|
|
714
|
-
"settings.skillsEnabledHint": "在无限画布节点的「技能」菜单里启用技能系统(内置动作 + 本机技能)",
|
|
715
|
-
"settings.allowHeavySkills": "允许重任务技能",
|
|
716
|
-
"settings.allowHeavySkillsHint": "重任务技能会启动无头 DSH Agent 在本机执行,耗时且消耗模型额度;关闭后只能使用轻量技能",
|
|
717
|
-
"settings.skillAllowlist": "技能白名单",
|
|
718
|
-
"settings.skillAllowlistHint": "逗号或换行分隔的技能名;留空表示允许本机所有技能",
|
|
719
|
-
"settings.skillOutputDir": "重任务工作目录",
|
|
720
|
-
"settings.skillOutputDirHint": "无头 Agent 的工作目录(留空使用数据目录下的 canvas/runs)",
|
|
721
|
-
"settings.skillHeavyTimeout": "重任务超时(分钟)",
|
|
722
|
-
"settings.skillHeavyTimeoutHint": "超过该时长会自动取消重任务技能;填 0 表示不超时",
|
|
723
|
-
"settings.skillAgentPreset": "重任务 Agent 预设",
|
|
724
|
-
"settings.skillAgentPresetHint": "运行重任务技能时使用的 Agent 预设名;留空使用宿主默认预设",
|
|
725
|
-
"settings.skillProbe": "检测技能环境",
|
|
726
|
-
"settings.skillProbing": "检测中…",
|
|
727
|
-
"settings.skillProbeOk": "可用技能 {count} 个 · 无头 Agent:{agent}",
|
|
728
|
-
"settings.skillProbeAgentOn": "可用",
|
|
729
|
-
"settings.skillProbeAgentOff": "不可用",
|
|
730
|
-
"settings.skillsHint": "提示:把 image-to-editable-ppt 之类的技能装到 ~/.dsh/skills 后,即可在画布上把图片变成可编辑 PPT。",
|
|
731
|
-
"canvas.skills.libraryButton": "技能库",
|
|
732
|
-
"canvas.skills.libraryTitle": "技能库管理",
|
|
733
|
-
"canvas.skills.libraryInstalled": "已安装技能({count})",
|
|
734
|
-
"canvas.skills.libraryEmpty": "本机还没有安装任何技能。可以从仓库链接安装,或上传技能压缩包。",
|
|
735
|
-
"canvas.skills.libraryRoot": "安装目录:{root}",
|
|
736
|
-
"canvas.skills.libraryInstall": "在线安装",
|
|
737
|
-
"canvas.skills.libraryInstallHint": "支持 GitHub 仓库 / 目录 / 单个 SKILL.md、任意 git 地址、zip 压缩包地址;多个地址用换行分隔。安装后宿主动态加载,无需重启。",
|
|
738
|
-
"canvas.skills.libraryUrlPlaceholder": "https://github.com/owner/repo 或 …/blob/main/SKILL.md",
|
|
739
|
-
"canvas.skills.libraryUpload": "上传压缩包",
|
|
740
|
-
"canvas.skills.libraryUploadHint": "上传一个包含 SKILL.md 的 zip(单文件 ≤50MB),解压后安装到 ~/.dsh/skills。",
|
|
741
|
-
"canvas.skills.libraryDropzone": "点击选择或拖入 .zip 压缩包",
|
|
742
|
-
"canvas.skills.libraryForce": "覆盖已安装的同名技能",
|
|
743
|
-
"canvas.skills.libraryInstallAction": "安装",
|
|
744
|
-
"canvas.skills.libraryInstalling": "安装中…",
|
|
745
|
-
"canvas.skills.libraryRemove": "卸载",
|
|
746
|
-
"canvas.skills.libraryRemoving": "卸载中…",
|
|
747
|
-
"canvas.skills.libraryRemoveConfirm": "确定卸载技能「{name}」?该技能目录会被删除。",
|
|
748
|
-
"canvas.skills.libraryInstalledToast": "已安装技能:{names}",
|
|
749
|
-
"canvas.skills.libraryFailedToast": "安装失败:{message}",
|
|
750
|
-
"canvas.skills.libraryRemovedToast": "已卸载技能:{name}",
|
|
751
|
-
"canvas.skills.libraryUnavailable": "本宿主不支持管理技能库",
|
|
752
|
-
"canvas.skills.libraryReload": "刷新",
|
|
753
|
-
"canvas.skills.libraryOpenFolder": "打开技能目录",
|
|
754
|
-
"canvas.skills.installNow": "去安装",
|
|
755
|
-
"canvas.skills.needsInstall": "未安装",
|
|
756
|
-
"canvas.skills.missingHint": "技能「{name}」还没安装,点击安装即可使用",
|
|
757
|
-
"canvas.skills.installArchiveFailed": "压缩包安装失败:{message}",
|
|
758
|
-
"canvas.skills.libraryIssueFrontmatter": "SKILL.md 缺少 YAML frontmatter(name / description 必填),本机技能注册表不会加载它,节点里也用不了",
|
|
759
|
-
"canvas.skills.libraryIssueName": "frontmatter 的 name「{name}」不是 kebab-case(只能小写字母、数字和连字符),本机技能注册表会忽略它,节点里也用不了",
|
|
760
|
-
"canvas.skills.libraryIssueDescription": "SKILL.md 的 frontmatter 缺少 description(必填),本机技能注册表不会加载它,节点里也用不了",
|
|
761
|
-
"canvas.skills.libraryIssueInvocation": "disable-model-invocation / user-invocable 的写法无法解析,本机技能注册表会忽略它,节点里也用不了",
|
|
762
|
-
"canvas.skills.libraryIssueUserOnly": "该技能声明了 disable-model-invocation,只允许人工调用,画布节点无法运行它",
|
|
763
|
-
"canvas.skills.configOpen": "配置",
|
|
764
|
-
"canvas.skills.configSave": "保存",
|
|
765
|
-
"canvas.skills.configSaveApply": "保存并应用",
|
|
766
|
-
"canvas.skills.configSaving": "保存中…",
|
|
767
|
-
"canvas.skills.configApplying": "应用中…",
|
|
768
|
-
"canvas.skills.configSaved": "已保存",
|
|
769
|
-
"canvas.skills.configSaveFailed": "保存失败",
|
|
770
|
-
"canvas.skills.configApplied": "已保存并应用",
|
|
771
|
-
"canvas.skills.configApplyFailed": "应用失败",
|
|
772
|
-
"canvas.skills.configClear": "清除",
|
|
773
|
-
"canvas.skills.configSecretSet": "已设置(留空表示不改动)",
|
|
774
|
-
"canvas.skills.configSecretUnset": "未设置",
|
|
775
|
-
"canvas.skills.configMissingHint": "需要配置:{fields}",
|
|
776
|
-
"canvas.skills.configGo": "去配置",
|
|
777
|
-
"canvas.skills.configSourceSkill": "配置项由该技能自己的 skill.config.json 声明",
|
|
778
|
-
"canvas.skills.configSourcePlugin": "配置项来自本插件内置的已知技能配方(技能自带声明会优先)",
|
|
779
|
-
"canvas.skills.configHeader": "已配置的值:",
|
|
780
|
-
"canvas.skills.configUnwritable": "本宿主无法写入设置,技能配置暂不可用",
|
|
781
|
-
"canvas.skills.configIssueVersion": "skill.config.json 的 version 不是 1,已忽略这份声明",
|
|
782
|
-
"canvas.skills.configIssueUnreadable": "skill.config.json 无法解析(JSON 语法错误),已忽略这份声明",
|
|
783
|
-
"canvas.skills.configIssueEmpty": "skill.config.json 里没有可用的字段或步骤,已忽略这份声明"
|
|
784
|
-
};
|
|
785
|
-
//#endregion
|
|
786
|
-
//#region src/locale-tables.ts
|
|
787
|
-
/**
|
|
788
|
-
* Locale dictionaries and the pure interpolator.
|
|
789
|
-
*
|
|
790
|
-
* This module is the React-free half of the plugin's copy layer: the host half
|
|
791
|
-
* imports the very same dictionaries to render server-produced text (skill
|
|
792
|
-
* catalog labels, error messages, produced node titles) in the language the
|
|
793
|
-
* user picked in the DSH interface. The browser half layers the live locale
|
|
794
|
-
* binding (and its change subscription) on top in `helpers.ts`.
|
|
795
|
-
*
|
|
796
|
-
* Both halves must agree on key names, so the tables live here — not in a file
|
|
797
|
-
* that also holds React state, which the two bundles would instantiate twice.
|
|
798
|
-
*/
|
|
799
|
-
/** Every shipped dictionary, keyed by language. */
|
|
800
|
-
const IMAGEGEN_DICTIONARIES = {
|
|
801
|
-
zh,
|
|
802
|
-
en: {
|
|
803
|
-
"entry.label": "AI Image",
|
|
804
|
-
"entry.tooltip": "AI image generation studio (gpt-image-2 / glm-image / grok-imagine-image / nanobanana / seedream family)",
|
|
805
|
-
"entry.newSession": "New session",
|
|
806
|
-
"entry.newSessionTooltip": "Create a new DSH session",
|
|
807
|
-
"entry.image": "Image",
|
|
808
|
-
"panel.title": "VisioWork",
|
|
809
|
-
"panel.githubTip": "Like it or have suggestions? Head to GitHub to open issues and star us!",
|
|
810
|
-
"conversation.add": "Add to chat",
|
|
811
|
-
"conversation.adding": "Adding…",
|
|
812
|
-
"conversation.added": "Image added to the current chat",
|
|
813
|
-
"conversation.addHint": "After adding to chat, use /edit_image to modify it; the command uses the plugin image model",
|
|
814
|
-
"conversation.noSession": "Open a session before adding an image",
|
|
815
|
-
"conversation.unavailable": "The current session is unavailable",
|
|
816
|
-
"conversation.busy": "The chat is sending a message; try again shortly",
|
|
817
|
-
"mode.text": "Text to Image",
|
|
818
|
-
"mode.edit": "Image to Image",
|
|
819
|
-
"workspace.label": "Workspace",
|
|
820
|
-
"workspace.normal": "Standard",
|
|
821
|
-
"workspace.canvas": "Infinite canvas",
|
|
822
|
-
"workspace.ecommerce": "E-commerce",
|
|
823
|
-
"canvas.addImage": "Add image",
|
|
824
|
-
"canvas.addText": "Add text",
|
|
825
|
-
"canvas.generate": "Generate image",
|
|
826
|
-
"canvas.addToCanvas": "Add to canvas",
|
|
827
|
-
"canvas.untitled": "Untitled canvas",
|
|
828
|
-
"canvas.imageNode": "Image node",
|
|
829
|
-
"canvas.textNode": "Text node",
|
|
830
|
-
"canvas.fromGallery": "Gallery image",
|
|
831
|
-
"canvas.fromHistory": "History image",
|
|
832
|
-
"canvas.project": "Canvas project",
|
|
833
|
-
"canvas.newCanvas": "New canvas",
|
|
834
|
-
"canvas.deleteCanvas": "Delete canvas",
|
|
835
|
-
"canvas.deleteCanvasConfirm": "Click again to confirm",
|
|
836
|
-
"canvas.rename": "Rename canvas",
|
|
837
|
-
"canvas.renameHint": "Double-click to rename",
|
|
838
|
-
"canvas.background": "Canvas background",
|
|
839
|
-
"canvas.backgroundDots": "Dots",
|
|
840
|
-
"canvas.backgroundLines": "Grid lines",
|
|
841
|
-
"canvas.backgroundWaves": "Waves",
|
|
842
|
-
"canvas.backgroundShapeGrid": "Scrolling grid",
|
|
843
|
-
"canvas.backgroundDotField": "Dot field",
|
|
844
|
-
"canvas.backgroundDotGrid": "Interactive dots",
|
|
845
|
-
"canvas.backgroundFloatingLines": "Floating lines",
|
|
846
|
-
"canvas.backgroundFlow": "Fluid flow",
|
|
847
|
-
"canvas.backgroundLiquid": "Liquid ether",
|
|
848
|
-
"canvas.backgroundFaultyTerminal": "Faulty terminal",
|
|
849
|
-
"canvas.backgroundSilk": "Silk",
|
|
850
|
-
"canvas.backgroundGalaxy": "Galaxy",
|
|
851
|
-
"canvas.backgroundBlank": "Blank",
|
|
852
|
-
"canvas.backgroundUpload": "Upload custom background…",
|
|
853
|
-
"canvas.backgroundRemove": "Remove custom background",
|
|
854
|
-
"canvas.templateLibrary": "Template library (pick a prompt to create text + config nodes)",
|
|
855
|
-
"canvas.undo": "Undo (Ctrl+Z)",
|
|
856
|
-
"canvas.redo": "Redo (Ctrl+Shift+Z)",
|
|
857
|
-
"canvas.saving": "Saving…",
|
|
858
|
-
"canvas.saved": "Saved",
|
|
859
|
-
"canvas.saveFailed": "Save failed",
|
|
860
|
-
"canvas.loading": "Loading…",
|
|
861
|
-
"canvas.toolSelect": "Select / move nodes",
|
|
862
|
-
"canvas.toolPan": "Pan canvas (Space / Ctrl + drag)",
|
|
863
|
-
"canvas.delete": "Delete",
|
|
864
|
-
"canvas.duplicate": "Duplicate (Ctrl+D)",
|
|
865
|
-
"canvas.download": "Download image",
|
|
866
|
-
"canvas.fitView": "Fit all content",
|
|
867
|
-
"canvas.minimapOpen": "Open minimap",
|
|
868
|
-
"canvas.minimapClose": "Close minimap",
|
|
869
|
-
"canvas.minimap": "Canvas minimap",
|
|
870
|
-
"canvas.zoom": "Zoom",
|
|
871
|
-
"canvas.textPlaceholder": "Type text…",
|
|
872
|
-
"canvas.generatingNode": "Generating…",
|
|
873
|
-
"canvas.generateFailed": "Generation failed",
|
|
874
|
-
"canvas.retry": "Retry",
|
|
875
|
-
"canvas.taskLost": "Generation task lost (service restarted); please retry",
|
|
876
|
-
"canvas.emptyImageNode": "Click to upload an image",
|
|
877
|
-
"canvas.connectHint": "Drag onto another node to connect",
|
|
878
|
-
"canvas.connectAddHint": "Drag onto another node to connect, or click to add the next node",
|
|
879
|
-
"canvas.resizeHint": "Drag to resize (image ratio locked)",
|
|
880
|
-
"canvas.count": "Image count",
|
|
881
|
-
"canvas.configNode": "Generation config",
|
|
882
|
-
"canvas.addConfigNode": "Add config node",
|
|
883
|
-
"canvas.configHint": "Connect image nodes on the left as references and text nodes as prompts; select this node to write the prompt in the composer below and generate.",
|
|
884
|
-
"canvas.composerLinked": "{count} input node(s) connected",
|
|
885
|
-
"canvas.composerPlaceholder": "Describe the image to generate; or connect text nodes as the prompt…",
|
|
886
|
-
"canvas.countUnit": "{count}",
|
|
887
|
-
"canvas.model": "Image model",
|
|
888
|
-
"canvas.modelPlaceholder": "Choose a model",
|
|
889
|
-
"canvas.size": "Size ratio",
|
|
890
|
-
"canvas.sizeAuto": "Auto ratio",
|
|
891
|
-
"canvas.quality": "Quality",
|
|
892
|
-
"canvas.qualityAuto": "Auto quality",
|
|
893
|
-
"canvas.needApi": "Configure the image API first",
|
|
894
|
-
"canvas.needPrompt": "Enter a generation prompt first",
|
|
895
|
-
"canvas.needModel": "No image model available",
|
|
896
|
-
"canvas.openSettings": "Open settings",
|
|
897
|
-
"canvas.deleteConnection": "Delete connection",
|
|
898
|
-
"canvas.paste": "Paste (Ctrl+V)",
|
|
899
|
-
"canvas.addImageNode": "Add image node",
|
|
900
|
-
"canvas.addTextNode": "Add text node",
|
|
901
|
-
"canvas.addSketch": "Add sketch board (draw-to-generate)",
|
|
902
|
-
"canvas.sketchNode": "Sketch board",
|
|
903
|
-
"canvas.addSketchNode": "Add sketch board node",
|
|
904
|
-
"canvas.sketchPlaceholder": "Draw a sketch freely, then connect it to a config node as the reference image",
|
|
905
|
-
"canvas.sketchBrush": "Brush",
|
|
906
|
-
"canvas.sketchEraser": "Eraser",
|
|
907
|
-
"canvas.sketchUndo": "Undo last stroke",
|
|
908
|
-
"canvas.sketchClear": "Clear board",
|
|
909
|
-
"canvas.sketchWidth": "Stroke width",
|
|
910
|
-
"canvas.dismiss": "Dismiss",
|
|
911
|
-
"canvas.annotate": "Annotate: draw a box to attach a prompt card",
|
|
912
|
-
"canvas.annotationNode": "Annotation prompt",
|
|
913
|
-
"canvas.annotationTag": "Annotated",
|
|
914
|
-
"canvas.annotationPlaceholder": "Describe what this box should become, e.g. replace it with an orange cat",
|
|
915
|
-
"canvas.annotationDrawHint": "Drag on the image to draw a box; releasing attaches a prompt card that follows the image (no connection needed)",
|
|
916
|
-
"canvas.removeBackground": "Remove background (local matting, transparent PNG)",
|
|
917
|
-
"canvas.removingBackground": "Removing background…",
|
|
918
|
-
"canvas.removeBgDone": "Background removed ({percent}% transparent)",
|
|
919
|
-
"canvas.removeBgFailed": "The background is too complex for local matting; box the subject with 标注 and let the model redraw it",
|
|
920
|
-
"canvas.alreadyTransparent": "This image already has a transparent background",
|
|
921
|
-
"canvas.noBackgroundNode": "Cut-out image",
|
|
922
|
-
"canvas.splitLayers": "Split layers (AI decomposition into editable layers)",
|
|
923
|
-
"canvas.splittingLayers": "Splitting layers…",
|
|
924
|
-
"canvas.layerSplitDone": "Split into {count} layer node(s)",
|
|
925
|
-
"canvas.layerSplitEmpty": "The model found no layers to split",
|
|
926
|
-
"canvas.layerBackground": "Background · {label}",
|
|
927
|
-
"canvas.layerObject": "Layer · {label}",
|
|
928
|
-
"canvas.layerText": "Text · {label}",
|
|
929
|
-
"canvas.layerKindBackground": "Background",
|
|
930
|
-
"canvas.layerKindObject": "Object",
|
|
931
|
-
"canvas.layerKindText": "Text",
|
|
932
|
-
"canvas.nodeModel": "Model used by this node (retry and connected config nodes)",
|
|
933
|
-
"canvas.modelDefault": "Default model",
|
|
934
|
-
"canvas.fontSmaller": "Smaller font",
|
|
935
|
-
"canvas.fontLarger": "Larger font",
|
|
936
|
-
"canvas.bold": "Bold",
|
|
937
|
-
"canvas.textColor": "Text color",
|
|
938
|
-
"canvas.colorDefault": "Theme default",
|
|
939
|
-
"canvas.close": "Close",
|
|
940
|
-
"canvas.tabUpload": "Upload",
|
|
941
|
-
"canvas.tabHistory": "History",
|
|
942
|
-
"canvas.tabGallery": "Assets",
|
|
943
|
-
"canvas.imageMenuUpload": "Local image",
|
|
944
|
-
"canvas.imageMenuAssets": "Assets",
|
|
945
|
-
"canvas.imageMenuHistory": "History",
|
|
946
|
-
"canvas.imageMenuGenerate": "AI generate",
|
|
947
|
-
"canvas.tabGenerate": "AI generate",
|
|
948
|
-
"canvas.dropHint": "Drop images here to add them",
|
|
949
|
-
"canvas.dropSub": "Multiple files, PNG / JPG / WebP / GIF",
|
|
950
|
-
"canvas.untitledWork": "Untitled work",
|
|
951
|
-
"canvas.picked": "{count} selected",
|
|
952
|
-
"canvas.generateAndAdd": "Generate and add to canvas",
|
|
953
|
-
"chat.expand": "Expand the conversation pane",
|
|
954
|
-
"chat.collapse": "Collapse the conversation pane",
|
|
955
|
-
"chat.toggle": "Chat",
|
|
956
|
-
"config.resizeHint": "Drag to resize the parameter panel",
|
|
957
|
-
"ecommerce.generation": "Generation settings",
|
|
958
|
-
"ecommerce.title": "E-commerce Mode",
|
|
959
|
-
"ecommerce.badge": "Beta",
|
|
960
|
-
"ecommerce.short": "Store",
|
|
961
|
-
"ecommerce.anchorPending": "Main image generated — remaining images are being generated with the main image as reference to keep the set consistent…",
|
|
962
|
-
"ecommerce.anchorFailed": "Main image failed; remaining images are paused. Retry the main image or regenerate the set.",
|
|
963
|
-
"ecommerce.anchorNote": "Anchored: main image first, remaining images reference it automatically for a consistent set",
|
|
964
|
-
"ecommerce.noAssetWarn": "No product image uploaded: the main image will be generated from text as the anchor. Upload one for higher consistency.",
|
|
965
|
-
"ecommerce.product": "Product details",
|
|
966
|
-
"ecommerce.productName": "Product name (required)",
|
|
967
|
-
"ecommerce.projectName": "Project name (optional)",
|
|
968
|
-
"ecommerce.constraints": "Selling points & constraints",
|
|
969
|
-
"ecommerce.sellingPoints": "Reference info: brand & model, specs (capacity/size/weight), materials, key selling points, certifications, accessories…",
|
|
970
|
-
"ecommerce.protectedFeatures": "Features to preserve: color, logo, packaging text, structure",
|
|
971
|
-
"ecommerce.styleHint": "Style hint, e.g. premium / realistic / natural light",
|
|
972
|
-
"ecommerce.setStructure": "Image set structure",
|
|
973
|
-
"ecommerce.preview": "Preview product set",
|
|
974
|
-
"ecommerce.planTitle": "Plan to generate {count} images",
|
|
975
|
-
"ecommerce.planSlot": "{count} images · {description}",
|
|
976
|
-
"ecommerce.confirm": "Confirm and generate set",
|
|
977
|
-
"ecommerce.uploadRef": "Upload product images (required, up to 4: product / packaging / detail)",
|
|
978
|
-
"ecommerce.uploadShort": "Upload",
|
|
979
|
-
"ecommerce.sellingTitle": "Selling points",
|
|
980
|
-
"ecommerce.advanced": "Advanced (platform / constraints)",
|
|
981
|
-
"ecommerce.params": "Parameters",
|
|
982
|
-
"ecommerce.platformLabel": "Platform",
|
|
983
|
-
"ecommerce.languageLabel": "Copy language",
|
|
984
|
-
"ecommerce.customLanguageOption": "Custom…",
|
|
985
|
-
"ecommerce.customLanguageLabel": "Custom language",
|
|
986
|
-
"ecommerce.customLanguagePlaceholder": "Enter a language, e.g. Русский / 日本語 / Português",
|
|
987
|
-
"ecommerce.ratioLabel": "Aspect ratio",
|
|
988
|
-
"ecommerce.categoryLabel": "Category",
|
|
989
|
-
"ecommerce.multiSelect": "multi-select",
|
|
990
|
-
"ecommerce.countHint": "Click to adjust count (1-4)",
|
|
991
|
-
"ecommerce.refSettings": "Reference images (optional)",
|
|
992
|
-
"ecommerce.styleTitle": "Style / extra hints",
|
|
993
|
-
"ecommerce.protectedLabel": "Features to preserve (optional)",
|
|
994
|
-
"ecommerce.assetsFull": "Up to 4 product images",
|
|
995
|
-
"ecommerce.productRefTitle": "Product images",
|
|
996
|
-
"ecommerce.productRefHint": "Required · product shots, up to 4",
|
|
997
|
-
"ecommerce.styleRefTitle": "Style reference",
|
|
998
|
-
"ecommerce.styleRefBadge": "optional, 1 max",
|
|
999
|
-
"ecommerce.styleRefHint": "Style, lighting, composition and mood only — the product itself cannot change.",
|
|
1000
|
-
"ecommerce.styleRefUpload": "Upload style reference",
|
|
1001
|
-
"ecommerce.refInfoTitle": "Product info",
|
|
1002
|
-
"ecommerce.aiWrite": "AI write",
|
|
1003
|
-
"ecommerce.aiWriting": "AI drafting…",
|
|
1004
|
-
"ecommerce.aiWriteHint": "Draft the product info prompt from name and category",
|
|
1005
|
-
"ecommerce.promptInfoPlaceholder": "Optional: brand & model, specs, materials, selling points, certifications, accessories, framing… or use AI write",
|
|
1006
|
-
"ecommerce.optional": "optional",
|
|
1007
|
-
"ecommerce.previewBoardTitle": "Pre-generation review",
|
|
1008
|
-
"ecommerce.previewBoardHint": "Tweak each image's prompt before submitting",
|
|
1009
|
-
"ecommerce.promptReset": "Reset",
|
|
1010
|
-
"ecommerce.promptAutoHint": "Auto-generated · edit freely",
|
|
1011
|
-
"ecommerce.refSelect": "Reference image for this slot",
|
|
1012
|
-
"ecommerce.refNone": "No reference",
|
|
1013
|
-
"ecommerce.role.product": "Product",
|
|
1014
|
-
"ecommerce.role.packaging": "Packaging",
|
|
1015
|
-
"ecommerce.role.detail": "Detail / angle",
|
|
1016
|
-
"ecommerce.role.style": "Style",
|
|
1017
|
-
"ecommerce.footerReady": "{count} images in this set",
|
|
1018
|
-
"ecommerce.footerEmpty": "Select the image set structure",
|
|
1019
|
-
"ecommerce.results.title": "Product set results",
|
|
1020
|
-
"ecommerce.results.progress": "{done}/{total} completed",
|
|
1021
|
-
"ecommerce.results.failed": "{count} failed",
|
|
1022
|
-
"ecommerce.results.empty": "After confirming, each image task and result will show here grouped by purpose",
|
|
1023
|
-
"ecommerce.results.regenerate": "Regenerate",
|
|
1024
|
-
"ecommerce.results.export": "Export manifest",
|
|
1025
|
-
"ecommerce.results.newProduct": "New product",
|
|
1026
|
-
"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…",
|
|
1027
|
-
"prompt.required": "Enter a prompt first",
|
|
1028
|
-
"prompt.count": "{count}",
|
|
1029
|
-
"prompt.countLimit": "{count} / {limit}",
|
|
1030
|
-
"prompt.overLimit": "Over this model’s {limit}-character prompt limit; please shorten it",
|
|
1031
|
-
"prompt.enhance": "Enhance",
|
|
1032
|
-
"prompt.enhancing": "Enhancing…",
|
|
1033
|
-
"prompt.enhanceHint": "Expand the prompt with the configured chat model",
|
|
1034
|
-
"prompt.configTitle": "Configure a prompt enhancement model first",
|
|
1035
|
-
"prompt.configHint": "Settings has opened. Go to Plugins → AI Image, configure or reuse an API URL and key, choose a chat model, then save.",
|
|
1036
|
-
"tasks.title": "Generation tasks",
|
|
1037
|
-
"tasks.queued": "Queued",
|
|
1038
|
-
"tasks.running": "Generating",
|
|
1039
|
-
"tasks.completed": "Completed",
|
|
1040
|
-
"tasks.failed": "Failed",
|
|
1041
|
-
"tasks.cancelled": "Cancelled",
|
|
1042
|
-
"tasks.cancel": "Cancel",
|
|
1043
|
-
"tasks.retry": "Retry",
|
|
1044
|
-
"params.size": "Size",
|
|
1045
|
-
"params.quality": "Quality",
|
|
1046
|
-
"params.count": "Count",
|
|
1047
|
-
"params.detail": "Detail",
|
|
1048
|
-
"size.auto": "Auto",
|
|
1049
|
-
"size.square": "1:1 Square",
|
|
1050
|
-
"size.portrait34": "3:4 Portrait",
|
|
1051
|
-
"size.landscape43": "4:3 Landscape",
|
|
1052
|
-
"size.portrait916": "9:16 Vertical",
|
|
1053
|
-
"size.portrait23": "2:3 Portrait",
|
|
1054
|
-
"size.landscape32": "3:2 Landscape",
|
|
1055
|
-
"size.wide169": "16:9 Widescreen",
|
|
1056
|
-
"size.ultrawide21": "21:9 Ultrawide",
|
|
1057
|
-
"quality.auto": "Auto",
|
|
1058
|
-
"quality.1k": "1K",
|
|
1059
|
-
"quality.2k": "2K",
|
|
1060
|
-
"quality.4k": "4K",
|
|
1061
|
-
"count.one": "1",
|
|
1062
|
-
"count.two": "2",
|
|
1063
|
-
"count.three": "3",
|
|
1064
|
-
"count.four": "4",
|
|
1065
|
-
"detail.auto": "Auto",
|
|
1066
|
-
"detail.standard": "Standard",
|
|
1067
|
-
"detail.high": "High",
|
|
1068
|
-
"detail.hint": "Passthrough parameter supported by some gpt-image-2 gateways; keep \"Auto\" for official endpoints",
|
|
1069
|
-
"model.label": "Model",
|
|
1070
|
-
"model.noEditModels": "No model is available for this mode",
|
|
1071
|
-
"compare.enable": "Multi-model comparison",
|
|
1072
|
-
"compare.models": "Models to compare",
|
|
1073
|
-
"compare.title": "Multi-model comparison",
|
|
1074
|
-
"compare.fullscreen": "Fullscreen comparison",
|
|
1075
|
-
"compare.selectRequired": "Select at least one model",
|
|
1076
|
-
"generate": "Generate",
|
|
1077
|
-
"generating": "Generating…",
|
|
1078
|
-
"edit.upload": "Click or drag to upload a reference image",
|
|
1079
|
-
"edit.uploadHint": "PNG / JPG / WEBP, up to 10MB",
|
|
1080
|
-
"edit.change": "Change image",
|
|
1081
|
-
"edit.remove": "Remove",
|
|
1082
|
-
"edit.required": "Upload a reference image first",
|
|
1083
|
-
"canvas.emptyTitle": "Start creating",
|
|
1084
|
-
"canvas.emptyHint": "Double-click the canvas or use the bottom dock to add image/text nodes; wire image and text nodes into a target node, select it and generate from the composer below",
|
|
1085
|
-
"canvas.new": "New creation",
|
|
1086
|
-
"canvas.newHint": "Start a new creation and clear the preview",
|
|
1087
|
-
"canvas.error": "Generation failed: {error}",
|
|
1088
|
-
"canvas.submitting": "Adding to the generation queue…",
|
|
1089
|
-
"canvas.queued": "Added to the generation queue",
|
|
1090
|
-
"canvas.queueHint": "{count} task(s) waiting or generating",
|
|
1091
|
-
"canvas.generating": "Generating images…",
|
|
1092
|
-
"canvas.elapsed": "Elapsed {seconds}s",
|
|
1093
|
-
"canvas.images": "{count} image(s) generated",
|
|
1094
|
-
"download": "Download",
|
|
1095
|
-
"revisedPrompt": "Refined prompt: {prompt}",
|
|
1096
|
-
"history.title": "History",
|
|
1097
|
-
"history.empty": "No history yet — generations will be saved here",
|
|
1098
|
-
"history.clear": "Clear",
|
|
1099
|
-
"history.clearConfirm": "Clear all history? This action cannot be undone.",
|
|
1100
|
-
"history.restore": "Restore",
|
|
1101
|
-
"history.delete": "Delete",
|
|
1102
|
-
"history.images": "images",
|
|
1103
|
-
"history.viewing": "History · {time}",
|
|
1104
|
-
"history.search": "Search prompt or model…",
|
|
1105
|
-
"history.model": "Model filter",
|
|
1106
|
-
"history.ratio": "Ratio filter",
|
|
1107
|
-
"history.allModels": "All models",
|
|
1108
|
-
"history.allRatios": "All ratios",
|
|
1109
|
-
"gallery.title": "Assets",
|
|
1110
|
-
"gallery.categories": "Categories",
|
|
1111
|
-
"gallery.all": "All assets",
|
|
1112
|
-
"gallery.upload": "Upload",
|
|
1113
|
-
"gallery.uploadModel": "Local upload",
|
|
1114
|
-
"gallery.uploaded": "Asset saved",
|
|
1115
|
-
"gallery.uploadHint": "Save local images for reuse on the canvas",
|
|
1116
|
-
"gallery.gpt": "gpt-image-2",
|
|
1117
|
-
"gallery.grok": "grok-imagine-image",
|
|
1118
|
-
"gallery.ratio": "Aspect ratio",
|
|
1119
|
-
"gallery.tags": "Tags",
|
|
1120
|
-
"gallery.filterHint": "Filter by mode, model, and aspect ratio",
|
|
1121
|
-
"gallery.count": "· {count} works",
|
|
1122
|
-
"gallery.viewMode": "View mode",
|
|
1123
|
-
"gallery.masonry": "Masonry",
|
|
1124
|
-
"gallery.grid": "Grid",
|
|
1125
|
-
"gallery.sort": "Sort",
|
|
1126
|
-
"gallery.newest": "Newest",
|
|
1127
|
-
"gallery.oldest": "Oldest",
|
|
1128
|
-
"gallery.untitled": "Untitled work",
|
|
1129
|
-
"gallery.search": "Search works or models…",
|
|
1130
|
-
"gallery.tagsPlaceholder": "Tags, comma separated",
|
|
1131
|
-
"gallery.tagsApply": "Add tags",
|
|
1132
|
-
"gallery.editTags": "Edit tags",
|
|
1133
|
-
"gallery.tagsEditShort": "Edit",
|
|
1134
|
-
"gallery.tagsSave": "Save",
|
|
1135
|
-
"gallery.tagsCancel": "Cancel",
|
|
1136
|
-
"gallery.selected": "{count} selected",
|
|
1137
|
-
"gallery.selectionDone": "Done selecting",
|
|
1138
|
-
"gallery.selectionClear": "Clear selection",
|
|
1139
|
-
"gallery.downloadSelected": "Download selected",
|
|
1140
|
-
"gallery.exportJson": "Export JSON",
|
|
1141
|
-
"gallery.select": "Select work",
|
|
1142
|
-
"gallery.add": "Add to gallery",
|
|
1143
|
-
"gallery.added": "Added to gallery",
|
|
1144
|
-
"gallery.already": "Already in gallery",
|
|
1145
|
-
"gallery.delete": "Remove",
|
|
1146
|
-
"gallery.openFolder": "Open folder",
|
|
1147
|
-
"gallery.clear": "Clear gallery",
|
|
1148
|
-
"gallery.openFolderHint": "Open the image save directory (~/.dsh/dsh-imagegen) in the system file manager",
|
|
1149
|
-
"gallery.clearConfirm": "Clear the entire gallery? This action cannot be undone.",
|
|
1150
|
-
"gallery.empty": "The gallery is empty — add images you like here",
|
|
1151
|
-
"gallery.viewing": "Gallery · {time}",
|
|
1152
|
-
"preview.title": "Image preview",
|
|
1153
|
-
"preview.open": "Click to preview",
|
|
1154
|
-
"preview.close": "Close",
|
|
1155
|
-
"preview.prev": "Previous",
|
|
1156
|
-
"preview.next": "Next",
|
|
1157
|
-
"preview.index": "{index} / {total}",
|
|
1158
|
-
"preview.zoomControls": "Image zoom controls",
|
|
1159
|
-
"preview.zoomIn": "Zoom in",
|
|
1160
|
-
"preview.zoomOut": "Zoom out",
|
|
1161
|
-
"preview.zoomReset": "Reset zoom",
|
|
1162
|
-
"preview.zoomLevel": "{percent}%",
|
|
1163
|
-
"preview.copyPrompt": "Copy prompt",
|
|
1164
|
-
"preview.copied": "Copied",
|
|
1165
|
-
"preview.addToEdit": "Add to image to image",
|
|
1166
|
-
"config.missing": "API not configured: open \"Settings → Plugins → Configurable\" and fill in api_url and api_key for AI Image.",
|
|
1167
|
-
"config.generationTitle": "Configure the image API first",
|
|
1168
|
-
"config.generationHint": "DSH Settings → Plugins → AI Image has opened. Enter the image API URL and API key, then save before generating.",
|
|
1169
|
-
"config.enhancementTitle": "Configure a prompt enhancement model first",
|
|
1170
|
-
"config.enhancementHint": "DSH Settings → Plugins → AI Image has opened. Configure or reuse a chat API URL and key, choose a chat model, then save.",
|
|
1171
|
-
"config.disabledTitle": "The AI Image plugin is disabled",
|
|
1172
|
-
"config.disabledHint": "DSH Settings → Plugins → AI Image has opened. Enable the plugin, then generate images.",
|
|
1173
|
-
"config.configured": "Connected to {url}",
|
|
1174
|
-
"config.disabled": "The plugin is disabled — re-enable it in Settings.",
|
|
1175
|
-
"connection.connected": "Connected",
|
|
1176
|
-
"connection.disconnected": "Disconnected",
|
|
1177
|
-
"panel.collapseConfig": "Collapse settings panel",
|
|
1178
|
-
"panel.expandConfig": "Expand settings panel",
|
|
1179
|
-
"update.available": "A new version is available: {version}",
|
|
1180
|
-
"update.install": "Update online",
|
|
1181
|
-
"update.installing": "Updating…",
|
|
1182
|
-
"update.success": "Updated to {version}; restart DSH to load it",
|
|
1183
|
-
"update.failed": "Update failed; please try again",
|
|
1184
|
-
"update.release": "View Release",
|
|
1185
|
-
"settings.title": "AI Image (dsh-imagegen)",
|
|
1186
|
-
"settings.description": "Configure the image generation API endpoint and key",
|
|
1187
|
-
"settings.currentVersion": "Current version",
|
|
1188
|
-
"settings.apiUrl": "API URL (api_url)",
|
|
1189
|
-
"settings.apiUrlHint": "OpenAI-compatible base URL, e.g. https://api.openai.com/v1; /images/generations and /images/edits are appended",
|
|
1190
|
-
"settings.apiKey": "API Key (api_key)",
|
|
1191
|
-
"settings.apiKeyHint": "Bearer key, stored in plaintext in the local settings document; the UI only shows whether it is set",
|
|
1192
|
-
"settings.apiKeySet": "A key is stored; type a new value to replace it, or click \"Clear\" to remove it",
|
|
1193
|
-
"settings.apiKeyClear": "Clear",
|
|
1194
|
-
"settings.imageModelsTitle": "Image generation models",
|
|
1195
|
-
"settings.imageModelsHint": "Save the API URL and key, then detect candidate models. Select only models that actually support image generation.",
|
|
1196
|
-
"settings.imageModels": "Allowed image models",
|
|
1197
|
-
"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.",
|
|
1198
|
-
"settings.imageModelsFetch": "Detect available models",
|
|
1199
|
-
"settings.imageModelsLoading": "Detecting…",
|
|
1200
|
-
"settings.imageModelsCandidates": "Detected candidate models (select, then save)",
|
|
1201
|
-
"settings.addModel": "+ Add manually",
|
|
1202
|
-
"settings.cancelAddModel": "Hide add",
|
|
1203
|
-
"settings.addModelPlaceholder": "Enter a model name, e.g. qwen-image",
|
|
1204
|
-
"settings.addModelConfirm": "Add",
|
|
1205
|
-
"settings.removeModel": "Remove model",
|
|
1206
|
-
"settings.optional": "Optional",
|
|
1207
|
-
"settings.moreOptions": "More settings",
|
|
1208
|
-
"settings.localStoragePath": "Local image storage directory",
|
|
1209
|
-
"settings.localStoragePathHint": "History, assets and canvas images share this directory; leave empty for the default ~/.dsh/dsh-imagegen.",
|
|
1210
|
-
"settings.storageTitle": "Object storage sync",
|
|
1211
|
-
"settings.storageEnabled": "Enable object storage sync",
|
|
1212
|
-
"settings.storageHint": "After images land locally, mirror them to an S3-compatible store (Tencent COS / Alibaba OSS / Qiniu S3 / MinIO / R2 …)",
|
|
1213
|
-
"settings.storageEndpoint": "Endpoint (with bucket)",
|
|
1214
|
-
"settings.storageEndpointHint": "S3-compatible URL, e.g. https://bucket-appid.cos.ap-guangzhou.myqcloud.com or https://bucket.oss-cn-hangzhou.aliyuncs.com",
|
|
1215
|
-
"settings.storageRegion": "Region",
|
|
1216
|
-
"settings.storageRegionHint": "Region id used for signing, e.g. ap-guangzhou / oss-cn-hangzhou / cn-east-1",
|
|
1217
|
-
"settings.storagePrefix": "Key prefix",
|
|
1218
|
-
"settings.storagePrefixHint": "Object keys look like prefix/gallery|images/<file>",
|
|
1219
|
-
"settings.storageAccessKey": "Access Key",
|
|
1220
|
-
"settings.storageAccessKeyHint": "S3-compatible access key id (COS SecretId / OSS AccessKeyId / Qiniu AK)",
|
|
1221
|
-
"settings.storageSecretKey": "Secret Key",
|
|
1222
|
-
"settings.storageSecretKeyHint": "S3-compatible secret, stored only in the local settings document",
|
|
1223
|
-
"settings.storageSyncGallery": "Sync gallery images",
|
|
1224
|
-
"settings.storageSyncGalleryHint": "Upload images when they are added to the gallery",
|
|
1225
|
-
"settings.storageSyncHistory": "Sync history images",
|
|
1226
|
-
"settings.storageSyncHistoryHint": "Also upload every generation result (can be a lot)",
|
|
1227
|
-
"settings.storageTest": "Test connection",
|
|
1228
|
-
"settings.storageTesting": "Testing…",
|
|
1229
|
-
"settings.storageTestOk": "Connected ({ms} ms), probe file uploaded",
|
|
1230
|
-
"settings.storageTestFailed": "Connection failed: {error}",
|
|
1231
|
-
"settings.storageKeyHint": "Note: syncing is best-effort and never blocks local saving; browse synced files under this prefix in your provider console.",
|
|
1232
|
-
"settings.promptEnhanceTitle": "Prompt enhancement model",
|
|
1233
|
-
"settings.promptEnhanceHint": "Expands short requests into complete image prompts. Blank URL and key reuse the image API configuration.",
|
|
1234
|
-
"settings.promptApiUrl": "Chat API URL (optional)",
|
|
1235
|
-
"settings.promptApiUrlHint": "OpenAI-compatible base URL. Leave blank to reuse the image API URL.",
|
|
1236
|
-
"settings.promptApiKey": "Chat API key (optional)",
|
|
1237
|
-
"settings.promptApiKeyHint": "Leave blank to reuse the image API key.",
|
|
1238
|
-
"settings.promptModel": "Chat model",
|
|
1239
|
-
"settings.promptModelHint": "Select or enter a model supporting /chat/completions.",
|
|
1240
|
-
"settings.promptModelDetectionHint": "Uses the image API by default. Detect and select one model.",
|
|
1241
|
-
"settings.promptModelsFetch": "Fetch available models",
|
|
1242
|
-
"settings.promptModelsLoading": "Fetching…",
|
|
1243
|
-
"settings.promptModelsSelect": "Select a model",
|
|
1244
|
-
"settings.promptModelsCandidates": "Detected chat model candidates",
|
|
1245
|
-
"settings.addPromptModelPlaceholder": "Enter a chat model name, e.g. gpt-4.1-mini",
|
|
1246
|
-
"settings.promptApiAdvanced": "Use a separate chat API (optional)",
|
|
1247
|
-
"settings.announceToAgent": "Announce this plugin to agents",
|
|
1248
|
-
"settings.announceToAgentHint": "When on, the plugin presence and capabilities are written into every agent system prompt",
|
|
1249
|
-
"settings.allowAgentImageGeneration": "Allow agents to generate images",
|
|
1250
|
-
"settings.allowAgentImageGenerationHint": "On by default. When off, agents cannot submit, query, or cancel image tasks; the sidebar studio remains available.",
|
|
1251
|
-
"settings.enabled": "Enable plugin",
|
|
1252
|
-
"settings.enabledHint": "When off, the generation studio is unavailable (this card stays available)",
|
|
1253
|
-
"settings.save": "Save",
|
|
1254
|
-
"settings.saving": "Saving…",
|
|
1255
|
-
"settings.discard": "Discard",
|
|
1256
|
-
"settings.unsaved": "Unsaved changes",
|
|
1257
|
-
"settings.saveFailed": "Save failed, please retry",
|
|
1258
|
-
"settings.readOnly": "The settings document is read-only; saving is disabled.",
|
|
1259
|
-
"settings.notExposed": "Settings namespace unavailable: this deployment does not serve this plugin's settings.",
|
|
1260
|
-
"settings.expand": "Expand",
|
|
1261
|
-
"settings.collapse": "Collapse",
|
|
1262
|
-
"settings.inherit": "Inherit",
|
|
1263
|
-
"settings.on": "On",
|
|
1264
|
-
"settings.off": "Off",
|
|
1265
|
-
"settings.overridden": "Overridden",
|
|
1266
|
-
"settings.reset": "Reset",
|
|
1267
|
-
"settings.invalidNumber": "Enter a valid number",
|
|
1268
|
-
"templates.open": "Templates",
|
|
1269
|
-
"templates.title": "Prompt Template Library",
|
|
1270
|
-
"templates.sources": "Template sources",
|
|
1271
|
-
"templates.meta": "{count} templates · {origin}",
|
|
1272
|
-
"templates.origin.bundled": "bundled snapshot",
|
|
1273
|
-
"templates.origin.refreshed": "refreshed online",
|
|
1274
|
-
"templates.search": "Search template titles or prompts…",
|
|
1275
|
-
"templates.all": "All",
|
|
1276
|
-
"templates.close": "Close",
|
|
1277
|
-
"templates.back": "Back to list",
|
|
1278
|
-
"templates.use": "Use this prompt",
|
|
1279
|
-
"templates.copy": "Copy prompt",
|
|
1280
|
-
"templates.copied": "Copied",
|
|
1281
|
-
"templates.refresh": "Refresh this library",
|
|
1282
|
-
"templates.refreshing": "Refreshing…",
|
|
1283
|
-
"templates.refreshed": "Refreshed — {count} templates",
|
|
1284
|
-
"templates.refreshFailed": "Refresh failed: {error}",
|
|
1285
|
-
"templates.favorites": "Favorites",
|
|
1286
|
-
"templates.favoritesHint": "Show favorited templates only",
|
|
1287
|
-
"templates.favoritesEmpty": "No favorites yet — tap the star in a card's top-right corner to save one",
|
|
1288
|
-
"templates.favoriteAdd": "Favorite this template",
|
|
1289
|
-
"templates.favoriteRemove": "Remove from favorites",
|
|
1290
|
-
"templates.favorite": "Favorite",
|
|
1291
|
-
"templates.unfavorite": "Favorited",
|
|
1292
|
-
"templates.cacheAll": "Cache all images",
|
|
1293
|
-
"templates.cacheAllHint": "Mirror every reference image of the current library to local disk through the host proxy, for offline browsing",
|
|
1294
|
-
"templates.caching": "Caching {done}/{total}…",
|
|
1295
|
-
"templates.cached": "All images cached",
|
|
1296
|
-
"templates.empty": "No matching templates",
|
|
1297
|
-
"templates.loading": "Loading the template library…",
|
|
1298
|
-
"templates.loadFailed": "Failed to load the library: {error}",
|
|
1299
|
-
"templates.retry": "Retry",
|
|
1300
|
-
"templates.attribution": "Templates and images come from each source site; author links are on each template",
|
|
1301
|
-
"templates.source": "Source: {label}",
|
|
1302
|
-
"templates.featured": "Featured",
|
|
1303
|
-
"inspiration.title": "Inspiration",
|
|
1304
|
-
"inspiration.shuffle": "Shuffle",
|
|
1305
|
-
"inspiration.shuffling": "Shuffling…",
|
|
1306
|
-
"inspiration.useHint": "Click to use this prompt",
|
|
1307
|
-
"channels.title": "Channels",
|
|
1308
|
-
"channels.hint": "Fill in each channel's API URL and key to use its models",
|
|
1309
|
-
"channels.empty": "No channels yet — add one below",
|
|
1310
|
-
"channels.addProvider": "Add provider",
|
|
1311
|
-
"channels.addCustom": "Add custom channel",
|
|
1312
|
-
"channels.untitled": "Untitled channel",
|
|
1313
|
-
"channels.keySet": "Key set",
|
|
1314
|
-
"channels.keyMissing": "Key missing",
|
|
1315
|
-
"channels.modelCount": "{n} model(s)",
|
|
1316
|
-
"channels.noModels": "No models",
|
|
1317
|
-
"channels.defaultLabel": "Default",
|
|
1318
|
-
"channels.statusReady": "Ready",
|
|
1319
|
-
"channels.statusIncomplete": "Config incomplete",
|
|
1320
|
-
"channels.edit": "Edit",
|
|
1321
|
-
"channels.delete": "Delete",
|
|
1322
|
-
"channels.deleteConfirmTitle": "Delete channel \"{name}\"? Its key will be removed; history and gallery records are kept.",
|
|
1323
|
-
"channels.confirm": "Delete",
|
|
1324
|
-
"channels.cancel": "Cancel",
|
|
1325
|
-
"channels.editorTitle": "Channel",
|
|
1326
|
-
"channels.editorSaveNote": "Changes take effect with the card's \"Save\" button",
|
|
1327
|
-
"channels.displayName": "Display name",
|
|
1328
|
-
"channels.apiUrl": "API URL",
|
|
1329
|
-
"channels.apiKey": "API key",
|
|
1330
|
-
"channels.keyReplaceHint": "Configured — type a new value to replace it",
|
|
1331
|
-
"channels.keyMissingHint": "Enter a key",
|
|
1332
|
-
"channels.keyClear": "Clear key",
|
|
1333
|
-
"channels.modelCatalogTitle": "Model catalog",
|
|
1334
|
-
"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.",
|
|
1335
|
-
"channels.detect": "Re-detect",
|
|
1336
|
-
"channels.detecting": "Detecting…",
|
|
1337
|
-
"channels.detectSuccess": "Connected ✓ · {n} candidates",
|
|
1338
|
-
"channels.detectFailed": "Detection failed: {error}",
|
|
1339
|
-
"channels.detectOk": "Connected to this API",
|
|
1340
|
-
"channels.modelAliasLabel": "Display name (alias)",
|
|
1341
|
-
"channels.modelIdLabel": "Upstream model id",
|
|
1342
|
-
"channels.generated": "Generated {n} time(s)",
|
|
1343
|
-
"channels.unknownProtocol": "Unknown protocol — best-effort OpenAI",
|
|
1344
|
-
"channels.removeModel": "Remove model",
|
|
1345
|
-
"channels.manualAddPlaceholder": "Enter a model id, e.g. qwen-image",
|
|
1346
|
-
"channels.addModelConfirm": "Add",
|
|
1347
|
-
"channels.copyFrom": "Copy from another channel…",
|
|
1348
|
-
"channels.copyApply": "Copy",
|
|
1349
|
-
"channels.candidatesTitle": "Image model candidates (click to add)",
|
|
1350
|
-
"channels.deleteThisChannel": "Delete this channel",
|
|
1351
|
-
"channels.setDefault": "Set as default channel",
|
|
1352
|
-
"channels.presetPickerTitle": "Add provider",
|
|
1353
|
-
"channels.presetPickerHint": "Pick a built-in provider — only the API key is needed",
|
|
1354
|
-
"channels.presetCustomHint": "Configure the API URL, key, and model catalog yourself",
|
|
1355
|
-
"channels.presetLoadFailed": "Failed to load providers: {error}",
|
|
1356
|
-
"canvas.skills.fileNode": "File node",
|
|
1357
|
-
"canvas.skills.addFileNode": "Add file node",
|
|
1358
|
-
"canvas.skills.emptyFileNode": "Click to upload a file",
|
|
1359
|
-
"canvas.skills.fileMenuUpload": "Upload file",
|
|
1360
|
-
"canvas.skills.fileDropHint": "Drop a file here to upload",
|
|
1361
|
-
"canvas.skills.fileDropSub": "PDF / Office / text / images, up to 50MB",
|
|
1362
|
-
"canvas.skills.fileSizeUnknown": "Unknown size",
|
|
1363
|
-
"canvas.skills.filePreviewUnavailable": "No inline preview for this format — download it or run a skill",
|
|
1364
|
-
"canvas.skills.filePreviewLoading": "Loading preview…",
|
|
1365
|
-
"canvas.skills.fileDownload": "Download file",
|
|
1366
|
-
"canvas.skills.fileOpen": "Open with the system app",
|
|
1367
|
-
"canvas.skills.fileKind.text": "Text",
|
|
1368
|
-
"canvas.skills.fileKind.pdf": "PDF",
|
|
1369
|
-
"canvas.skills.fileKind.image": "Image",
|
|
1370
|
-
"canvas.skills.fileKind.office": "Document",
|
|
1371
|
-
"canvas.skills.fileKind.archive": "Archive",
|
|
1372
|
-
"canvas.skills.fileKind.audio": "Audio",
|
|
1373
|
-
"canvas.skills.fileKind.video": "Video",
|
|
1374
|
-
"canvas.skills.fileKind.other": "File",
|
|
1375
|
-
"canvas.skills.fileTooLarge": "The file exceeds the {size}MB limit",
|
|
1376
|
-
"canvas.skills.fileTypeBlocked": "{ext} files cannot be uploaded for safety reasons",
|
|
1377
|
-
"canvas.skills.fileUploadFailed": "Upload failed: {message}",
|
|
1378
|
-
"canvas.preview.expand": "Open preview",
|
|
1379
|
-
"canvas.preview.close": "Close preview",
|
|
1380
|
-
"canvas.preview.copy": "Copy content",
|
|
1381
|
-
"canvas.preview.copied": "Copied",
|
|
1382
|
-
"canvas.preview.openTab": "Open in a new tab",
|
|
1383
|
-
"canvas.preview.retry": "Retry",
|
|
1384
|
-
"canvas.preview.failed": "Preview failed: {message}",
|
|
1385
|
-
"canvas.preview.empty": "The file is empty",
|
|
1386
|
-
"canvas.preview.textTruncated": "Large file — showing the first {chars} characters",
|
|
1387
|
-
"canvas.preview.tableTruncated": "Large table — showing the first {rows} rows",
|
|
1388
|
-
"canvas.preview.archiveTruncated": "Many entries — listing the first {count}",
|
|
1389
|
-
"canvas.preview.docTruncated": "Long document — showing the first {blocks} blocks",
|
|
1390
|
-
"canvas.preview.slidesTruncated": "Large deck — showing the first {count} slides",
|
|
1391
|
-
"canvas.preview.slideOf": "Slide {page}",
|
|
1392
|
-
"canvas.preview.rendered": "Rendered",
|
|
1393
|
-
"canvas.preview.source": "Source",
|
|
1394
|
-
"canvas.preview.pdfFallback": "This environment cannot display the PDF inline — download it instead",
|
|
1395
|
-
"canvas.preview.pdfHeuristic": "PDF text is extracted heuristically; complex layouts may lose their order",
|
|
1396
|
-
"canvas.preview.reason.unsupported": "No readable content for this format — download it, or turn it into an image or text node for a skill",
|
|
1397
|
-
"canvas.preview.reason.unreadable": "No text could be read from this file (a scan or an unusual encoding); convert it to an image node for a vision model",
|
|
1398
|
-
"canvas.preview.doubleClick": "Double-click to open the preview",
|
|
1399
|
-
"canvas.skills.button": "Skill",
|
|
1400
|
-
"canvas.skills.menuTitle": "Run a skill",
|
|
1401
|
-
"canvas.skills.runOn": "Run a skill on “{name}”",
|
|
1402
|
-
"canvas.skills.pickerTitle": "Pick a skill",
|
|
1403
|
-
"canvas.skills.searchPlaceholder": "Search skills…",
|
|
1404
|
-
"canvas.skills.groupBuiltin": "Built-in actions",
|
|
1405
|
-
"canvas.skills.groupExternal": "Local skills",
|
|
1406
|
-
"canvas.skills.emptyExternal": "No local skills found — install one under ~/.dsh/skills and reload",
|
|
1407
|
-
"canvas.skills.empty": "No skills available",
|
|
1408
|
-
"canvas.skills.loading": "Loading skills…",
|
|
1409
|
-
"canvas.skills.tierLight": "Quick",
|
|
1410
|
-
"canvas.skills.tierHeavy": "Long task",
|
|
1411
|
-
"canvas.skills.accepts": "Works on: {types}",
|
|
1412
|
-
"canvas.skills.incompatible": "This skill does not apply to this node type",
|
|
1413
|
-
"canvas.skills.disabled": "Canvas skills are disabled in the plugin settings",
|
|
1414
|
-
"canvas.skills.noRegistry": "This host mounted no skill registry (ctx.skills), so only built-in actions are available",
|
|
1415
|
-
"canvas.skills.registryFailed": "Could not read the skill list: {message}",
|
|
1416
|
-
"canvas.skills.needAgent": "Needs the host agent runtime, which this DSH build does not provide — long-task skills stay disabled",
|
|
1417
|
-
"canvas.skills.unknown": "That skill no longer exists",
|
|
1418
|
-
"canvas.skills.canvasMissing": "The canvas no longer exists — reload and try again",
|
|
1419
|
-
"canvas.skills.noInput": "This node has no processable input",
|
|
1420
|
-
"canvas.skills.noChat": "Quick skills need a chat model: Settings → Plugins → AI Image → Prompt enhancement",
|
|
1421
|
-
"canvas.skills.noDescription": "(no description provided)",
|
|
1422
|
-
"canvas.skills.externalName": "{name}",
|
|
1423
|
-
"canvas.skills.externalSystem": "You are running the skill “{name}”. Follow its instructions exactly on the input below, answer in the input language, and output only the result — never restate the instructions.",
|
|
1424
|
-
"canvas.skills.externalHeader": "Apply the skill “{name}” to the input below.",
|
|
1425
|
-
"canvas.skills.externalHeavyCost": "This is a long task: it runs a headless agent and may consume a large amount of model quota.",
|
|
1426
|
-
"canvas.skills.extraInstruction": "Additional requirement:",
|
|
1427
|
-
"canvas.skills.inputsHeader": "Input:",
|
|
1428
|
-
"canvas.skills.inputsEmpty": "(no readable text — work from the attached images)",
|
|
1429
|
-
"canvas.skills.needInstruction": "Enter a custom polish instruction",
|
|
1430
|
-
"canvas.skills.needImage": "This skill needs an image node as input",
|
|
1431
|
-
"canvas.skills.needText": "This skill needs a text node with content as input",
|
|
1432
|
-
"canvas.skills.fileMissing": "The file asset is missing or was cleaned up",
|
|
1433
|
-
"canvas.skills.extractFailed": "Could not extract any content from this file",
|
|
1434
|
-
"canvas.skills.nothingToRead": "Nothing readable found",
|
|
1435
|
-
"canvas.skills.truncated": "Content was long and got truncated to {count} characters",
|
|
1436
|
-
"canvas.skills.tooManyImages": "More than {count} images were selected; only the first ones were processed",
|
|
1437
|
-
"canvas.skills.extractNodeTitle": "Content of “{name}”",
|
|
1438
|
-
"canvas.skills.summaryHead": "Collected {count} source nodes:",
|
|
1439
|
-
"canvas.skills.describeAsk": "Describe these {count} image(s).",
|
|
1440
|
-
"canvas.skills.polishNodeTitle": "Polished ({style})",
|
|
1441
|
-
"canvas.skills.skillMissing": "The skill “{name}” is not installed. Install it first (for example, ask your DSH agent to install https://github.com/ningzimu/image-to-editable-ppt-skill) and retry.",
|
|
1442
|
-
"canvas.skills.agentFailed": "Could not create a headless agent — check the model and agent preset configuration",
|
|
1443
|
-
"canvas.skills.needModel": "This host publishes no default model (agent-default-model), so a long-task skill cannot start its agent. Pick a default model in Settings → General and retry.",
|
|
1444
|
-
"canvas.skills.noOutputFile": "The skill produced no file; the agent’s answer was saved as a text node",
|
|
1445
|
-
"canvas.skills.heavyIntro": "You are running the skill “{name}” for a visual canvas. Complete the whole procedure exactly as documented; do not skip steps.",
|
|
1446
|
-
"canvas.skills.heavyBodyHeader": "Skill instructions:",
|
|
1447
|
-
"canvas.skills.heavyInputsHeader": "Input files for this task (absolute paths):",
|
|
1448
|
-
"canvas.skills.heavyOutputHeader": "Write the final artifact(s) into this directory: {dir}",
|
|
1449
|
-
"canvas.skills.heavyRules": "Requirements:\n1. Keep every intermediate file in the working directory; the final artifact may only go into the output directory above.\n2. When done, reply briefly with the artifact file names, whether it succeeded, and any caveats.",
|
|
1450
|
-
"canvas.skills.heavyAsk": "Run the skill “{name}”.",
|
|
1451
|
-
"canvas.skills.heavyAskInputs": "Input directory: {dir}",
|
|
1452
|
-
"canvas.skills.heavyAskOutput": "Output directory: {dir}",
|
|
1453
|
-
"canvas.skills.heavyAskLoadSkill": "(If the skill instructions are not in context, load them by the skill name “{name}” first.)",
|
|
1454
|
-
"canvas.skills.stageQueued": "Queued",
|
|
1455
|
-
"canvas.skills.stagePreparing": "Preparing input files",
|
|
1456
|
-
"canvas.skills.stageReading": "Reading node content",
|
|
1457
|
-
"canvas.skills.stageRunning": "Running the skill",
|
|
1458
|
-
"canvas.skills.stageCollecting": "Collecting artifacts",
|
|
1459
|
-
"canvas.skills.stageDone": "Done",
|
|
1460
|
-
"canvas.skills.stageCancelled": "Cancelled",
|
|
1461
|
-
"canvas.skills.stagePrepared": "Prepared {count} input file(s)",
|
|
1462
|
-
"canvas.skills.stageArtifacts": "Running — {count} file(s) produced",
|
|
1463
|
-
"canvas.skills.runElapsed": "Elapsed",
|
|
1464
|
-
"canvas.skills.runRetry": "Retry",
|
|
1465
|
-
"canvas.skills.runStarted": "Skill “{name}” started",
|
|
1466
|
-
"canvas.skills.runDone": "Skill finished — {count} new node(s)",
|
|
1467
|
-
"canvas.skills.runFailed": "The skill failed: {message}",
|
|
1468
|
-
"canvas.skills.runCancelled": "The skill run was cancelled",
|
|
1469
|
-
"canvas.skills.cancel": "Cancel run",
|
|
1470
|
-
"canvas.skills.cancelling": "Cancelling…",
|
|
1471
|
-
"canvas.skills.confirmTitle": "Run a long-task skill",
|
|
1472
|
-
"canvas.skills.confirmBody": "“{name}” starts a headless agent on this machine. It can run for minutes to tens of minutes and consume a large amount of model quota.",
|
|
1473
|
-
"canvas.skills.confirmCost": "Cost: {hint}",
|
|
1474
|
-
"canvas.skills.confirmRequires": "Requires: {list}",
|
|
1475
|
-
"canvas.skills.confirmRun": "Run it",
|
|
1476
|
-
"canvas.skills.confirmCancel": "Not now",
|
|
1477
|
-
"canvas.skills.batchTitle": "Batch run",
|
|
1478
|
-
"canvas.skills.batchNote": "Runs once per node, one after another ({count} nodes)",
|
|
1479
|
-
"canvas.skills.batchTooMany": "At most {count} nodes per run",
|
|
1480
|
-
"canvas.skills.sourceBadge": "Skill output",
|
|
1481
|
-
"canvas.skills.sourceTip": "Produced by the skill “{name}” from {count} source node(s)",
|
|
1482
|
-
"canvas.skills.rerun": "Run the same skill again",
|
|
1483
|
-
"canvas.skills.history": "Skill run history",
|
|
1484
|
-
"canvas.skills.historyEmpty": "No runs yet",
|
|
1485
|
-
"canvas.skills.needConfirm": "This skill needs confirmation before it runs",
|
|
1486
|
-
"canvas.skills.polish": "Polish text",
|
|
1487
|
-
"canvas.skills.polishDesc": "Rewrite a text node in a chosen style: more formal / casual / shorter / expanded, or a custom instruction",
|
|
1488
|
-
"canvas.skills.describe": "Describe image",
|
|
1489
|
-
"canvas.skills.describeDesc": "Read an image with a vision model and produce a text node (usable as a prompt)",
|
|
1490
|
-
"canvas.skills.extract": "Extract content",
|
|
1491
|
-
"canvas.skills.extractDesc": "Pull the text out of a file or image into a text node (text / code / OOXML / PDF)",
|
|
1492
|
-
"canvas.skills.ppt": "Image → editable PPT",
|
|
1493
|
-
"canvas.skills.pptDesc": "Drive the local image-to-editable-ppt skill to rebuild images into an editable .pptx file node",
|
|
1494
|
-
"canvas.skills.pptCost": "Long task: a 10-page deck can consume a large quota; a single page often takes 10+ minutes",
|
|
1495
|
-
"canvas.skills.pptRequires": "Needs the image-to-editable-ppt skill installed locally, with the OCR token and image backend configured as its docs describe",
|
|
1496
|
-
"canvas.polish.button": "AI polish",
|
|
1497
|
-
"canvas.polish.title": "AI polish",
|
|
1498
|
-
"canvas.polish.formal": "More formal",
|
|
1499
|
-
"canvas.polish.casual": "More casual",
|
|
1500
|
-
"canvas.polish.shorter": "Shorter",
|
|
1501
|
-
"canvas.polish.expand": "Expand",
|
|
1502
|
-
"canvas.polish.custom": "Custom",
|
|
1503
|
-
"canvas.polish.customPlaceholder": "e.g. rewrite as a social post with emoji and hashtags",
|
|
1504
|
-
"canvas.polish.run": "Polish",
|
|
1505
|
-
"canvas.polish.previewTitle": "Before / after",
|
|
1506
|
-
"canvas.polish.apply": "Apply",
|
|
1507
|
-
"canvas.polish.revert": "Revert",
|
|
1508
|
-
"canvas.polish.applied": "Polish applied",
|
|
1509
|
-
"canvas.polish.directHint": "Current setting: polish overwrites the node directly (switch to preview-first in the settings)",
|
|
1510
|
-
"settings.skillsEnabled": "Canvas skills",
|
|
1511
|
-
"settings.skillsEnabledHint": "Enable the skill system on infinite-canvas nodes (built-in actions plus local skills)",
|
|
1512
|
-
"settings.allowHeavySkills": "Allow long-task skills",
|
|
1513
|
-
"settings.allowHeavySkillsHint": "Long-task skills start a headless DSH agent on this machine — slow and quota-hungry. Turn off to keep only quick skills.",
|
|
1514
|
-
"settings.skillAllowlist": "Skill allowlist",
|
|
1515
|
-
"settings.skillAllowlistHint": "Comma or newline separated skill names; leave empty to allow every local skill",
|
|
1516
|
-
"settings.skillOutputDir": "Long-task working directory",
|
|
1517
|
-
"settings.skillOutputDirHint": "Working directory for headless agent runs (empty uses canvas/runs under the data directory)",
|
|
1518
|
-
"settings.skillHeavyTimeout": "Long-task timeout (minutes)",
|
|
1519
|
-
"settings.skillHeavyTimeoutHint": "Long-task skills are cancelled after this long; 0 disables the timeout",
|
|
1520
|
-
"settings.skillAgentPreset": "Long-task agent preset",
|
|
1521
|
-
"settings.skillAgentPresetHint": "Agent preset used for long-task skills; empty uses the host default",
|
|
1522
|
-
"settings.skillProbe": "Detect skill environment",
|
|
1523
|
-
"settings.skillProbing": "Detecting…",
|
|
1524
|
-
"settings.skillProbeOk": "{count} skill(s) available · headless agent: {agent}",
|
|
1525
|
-
"settings.skillProbeAgentOn": "available",
|
|
1526
|
-
"settings.skillProbeAgentOff": "unavailable",
|
|
1527
|
-
"settings.skillsHint": "Tip: install skills such as image-to-editable-ppt under ~/.dsh/skills to turn images into editable decks right on the canvas.",
|
|
1528
|
-
"canvas.skills.libraryButton": "Skill library",
|
|
1529
|
-
"canvas.skills.libraryTitle": "Skill library",
|
|
1530
|
-
"canvas.skills.libraryInstalled": "Installed skills ({count})",
|
|
1531
|
-
"canvas.skills.libraryEmpty": "No skills installed yet. Install one from a repository URL, or upload a skill archive.",
|
|
1532
|
-
"canvas.skills.libraryRoot": "Install root: {root}",
|
|
1533
|
-
"canvas.skills.libraryInstall": "Install from URL",
|
|
1534
|
-
"canvas.skills.libraryInstallHint": "GitHub repo / folder / single SKILL.md, any git URL, or a zip URL; separate several with new lines. The host loads installs live — no restart.",
|
|
1535
|
-
"canvas.skills.libraryUrlPlaceholder": "https://github.com/owner/repo or …/blob/main/SKILL.md",
|
|
1536
|
-
"canvas.skills.libraryUpload": "Upload archive",
|
|
1537
|
-
"canvas.skills.libraryUploadHint": "Upload a zip that contains SKILL.md (≤50MB); it is unpacked into ~/.dsh/skills.",
|
|
1538
|
-
"canvas.skills.libraryDropzone": "Click or drop a .zip archive here",
|
|
1539
|
-
"canvas.skills.libraryForce": "Replace an installed skill of the same name",
|
|
1540
|
-
"canvas.skills.libraryInstallAction": "Install",
|
|
1541
|
-
"canvas.skills.libraryInstalling": "Installing…",
|
|
1542
|
-
"canvas.skills.libraryRemove": "Uninstall",
|
|
1543
|
-
"canvas.skills.libraryRemoving": "Uninstalling…",
|
|
1544
|
-
"canvas.skills.libraryRemoveConfirm": "Uninstall “{name}”? Its folder is deleted from the skill library.",
|
|
1545
|
-
"canvas.skills.libraryInstalledToast": "Installed: {names}",
|
|
1546
|
-
"canvas.skills.libraryFailedToast": "Install failed: {message}",
|
|
1547
|
-
"canvas.skills.libraryRemovedToast": "Uninstalled: {name}",
|
|
1548
|
-
"canvas.skills.libraryUnavailable": "This host cannot manage the skill library",
|
|
1549
|
-
"canvas.skills.libraryReload": "Refresh",
|
|
1550
|
-
"canvas.skills.libraryOpenFolder": "Open skill folder",
|
|
1551
|
-
"canvas.skills.installNow": "Install",
|
|
1552
|
-
"canvas.skills.needsInstall": "Not installed",
|
|
1553
|
-
"canvas.skills.missingHint": "“{name}” is not installed yet — install it to use this action",
|
|
1554
|
-
"canvas.skills.installArchiveFailed": "Archive install failed: {message}",
|
|
1555
|
-
"canvas.skills.libraryIssueFrontmatter": "No YAML frontmatter (name / description are required), so the host skill registry never loads it and no node can run it",
|
|
1556
|
-
"canvas.skills.libraryIssueName": "The frontmatter name “{name}” is not kebab-case (lowercase letters, digits and hyphens), so the host skill registry ignores it and no node can run it",
|
|
1557
|
-
"canvas.skills.libraryIssueDescription": "The SKILL.md frontmatter has no description (required), so the host skill registry never loads it and no node can run it",
|
|
1558
|
-
"canvas.skills.libraryIssueInvocation": "The disable-model-invocation / user-invocable spelling cannot be parsed, so the host skill registry ignores it and no node can run it",
|
|
1559
|
-
"canvas.skills.libraryIssueUserOnly": "This skill declares disable-model-invocation: it is human-invocable only, so canvas nodes cannot run it",
|
|
1560
|
-
"canvas.skills.configOpen": "Configure",
|
|
1561
|
-
"canvas.skills.configSave": "Save",
|
|
1562
|
-
"canvas.skills.configSaveApply": "Save and apply",
|
|
1563
|
-
"canvas.skills.configSaving": "Saving…",
|
|
1564
|
-
"canvas.skills.configApplying": "Applying…",
|
|
1565
|
-
"canvas.skills.configSaved": "Saved",
|
|
1566
|
-
"canvas.skills.configSaveFailed": "Could not save",
|
|
1567
|
-
"canvas.skills.configApplied": "Saved and applied",
|
|
1568
|
-
"canvas.skills.configApplyFailed": "Could not apply",
|
|
1569
|
-
"canvas.skills.configClear": "Clear",
|
|
1570
|
-
"canvas.skills.configSecretSet": "Set (leave empty to keep it)",
|
|
1571
|
-
"canvas.skills.configSecretUnset": "Not set",
|
|
1572
|
-
"canvas.skills.configMissingHint": "Needs configuration: {fields}",
|
|
1573
|
-
"canvas.skills.configGo": "Configure",
|
|
1574
|
-
"canvas.skills.configSourceSkill": "These fields are declared by the skill’s own skill.config.json",
|
|
1575
|
-
"canvas.skills.configSourcePlugin": "These fields come from this plugin’s built-in recipe for a known skill (a skill’s own declaration wins)",
|
|
1576
|
-
"canvas.skills.configHeader": "Already configured:",
|
|
1577
|
-
"canvas.skills.configUnwritable": "This host cannot write settings, so skill configuration is unavailable",
|
|
1578
|
-
"canvas.skills.configIssueVersion": "skill.config.json declares a version other than 1, so the declaration was ignored",
|
|
1579
|
-
"canvas.skills.configIssueUnreadable": "skill.config.json could not be parsed (JSON syntax error), so the declaration was ignored",
|
|
1580
|
-
"canvas.skills.configIssueEmpty": "skill.config.json declares no usable field or step, so it was ignored"
|
|
1581
|
-
},
|
|
1582
|
-
ru: {
|
|
1583
|
-
"entry.label": "ИИ-генерация",
|
|
1584
|
-
"entry.tooltip": "Панель ИИ-генерации изображений (gpt-image-2 / glm-image / grok-imagine-image / nanobanana / seedream)",
|
|
1585
|
-
"entry.newSession": "Новая сессия",
|
|
1586
|
-
"entry.newSessionTooltip": "Создать новую сессию DSH",
|
|
1587
|
-
"entry.image": "Генерация",
|
|
1588
|
-
"panel.title": "VisioWork",
|
|
1589
|
-
"panel.githubTip": "Понравился плагин или есть идеи? Поставьте звезду или откройте issue на GitHub!",
|
|
1590
|
-
"conversation.add": "В диалог",
|
|
1591
|
-
"conversation.adding": "Добавляем…",
|
|
1592
|
-
"conversation.added": "Изображение добавлено в текущий диалог",
|
|
1593
|
-
"conversation.addHint": "После добавления можно править через /edit_image; команда использует модель плагина",
|
|
1594
|
-
"conversation.noSession": "Сначала откройте сессию, затем добавьте изображение",
|
|
1595
|
-
"conversation.unavailable": "Текущая сессия недоступна",
|
|
1596
|
-
"conversation.busy": "Диалог отправляет сообщение, попробуйте позже",
|
|
1597
|
-
"mode.text": "Из текста",
|
|
1598
|
-
"mode.edit": "Из изображения",
|
|
1599
|
-
"workspace.label": "Режим работы",
|
|
1600
|
-
"workspace.normal": "Генерация",
|
|
1601
|
-
"workspace.canvas": "Бесконечный холст",
|
|
1602
|
-
"workspace.ecommerce": "E-commerce",
|
|
1603
|
-
"canvas.addImage": "Добавить изображение",
|
|
1604
|
-
"canvas.addText": "Добавить текст",
|
|
1605
|
-
"canvas.generate": "Создать изображение",
|
|
1606
|
-
"canvas.addToCanvas": "Добавить на холст",
|
|
1607
|
-
"canvas.untitled": "Безымянный холст",
|
|
1608
|
-
"canvas.imageNode": "Узел изображения",
|
|
1609
|
-
"canvas.textNode": "Текстовый узел",
|
|
1610
|
-
"canvas.fromGallery": "Из галереи",
|
|
1611
|
-
"canvas.fromHistory": "Из истории",
|
|
1612
|
-
"canvas.project": "Проект холста",
|
|
1613
|
-
"canvas.newCanvas": "Новый холст",
|
|
1614
|
-
"canvas.deleteCanvas": "Удалить холст",
|
|
1615
|
-
"canvas.deleteCanvasConfirm": "Нажмите ещё раз для подтверждения",
|
|
1616
|
-
"canvas.rename": "Переименовать холст",
|
|
1617
|
-
"canvas.renameHint": "Двойной клик — переименовать",
|
|
1618
|
-
"canvas.background": "Фон холста",
|
|
1619
|
-
"canvas.backgroundDots": "Точки",
|
|
1620
|
-
"canvas.backgroundLines": "Сетка",
|
|
1621
|
-
"canvas.backgroundWaves": "Волны",
|
|
1622
|
-
"canvas.backgroundShapeGrid": "Бегущая сетка",
|
|
1623
|
-
"canvas.backgroundDotField": "Поле точек",
|
|
1624
|
-
"canvas.backgroundDotGrid": "Интерактивные точки",
|
|
1625
|
-
"canvas.backgroundFloatingLines": "Плавающие линии",
|
|
1626
|
-
"canvas.backgroundFlow": "Жидкостный поток",
|
|
1627
|
-
"canvas.backgroundLiquid": "Жидкий эфир",
|
|
1628
|
-
"canvas.backgroundFaultyTerminal": "Сбойный терминал",
|
|
1629
|
-
"canvas.backgroundSilk": "Шёлк",
|
|
1630
|
-
"canvas.backgroundGalaxy": "Галактика",
|
|
1631
|
-
"canvas.backgroundBlank": "Пустой",
|
|
1632
|
-
"canvas.backgroundUpload": "Загрузить свой фон…",
|
|
1633
|
-
"canvas.backgroundRemove": "Убрать свой фон",
|
|
1634
|
-
"canvas.templateLibrary": "Библиотека шаблонов (выберите промпт — создадутся текстовый узел и узел конфигурации)",
|
|
1635
|
-
"canvas.undo": "Отменить (Ctrl+Z)",
|
|
1636
|
-
"canvas.redo": "Повторить (Ctrl+Shift+Z)",
|
|
1637
|
-
"canvas.saving": "Сохранение…",
|
|
1638
|
-
"canvas.saved": "Сохранено",
|
|
1639
|
-
"canvas.saveFailed": "Ошибка сохранения",
|
|
1640
|
-
"canvas.loading": "Загрузка…",
|
|
1641
|
-
"canvas.toolSelect": "Выбор / перемещение узлов",
|
|
1642
|
-
"canvas.toolPan": "Перетаскивание холста (Space / Ctrl)",
|
|
1643
|
-
"canvas.delete": "Удалить",
|
|
1644
|
-
"canvas.duplicate": "Дублировать (Ctrl+D)",
|
|
1645
|
-
"canvas.download": "Скачать изображение",
|
|
1646
|
-
"canvas.fitView": "Показать всё содержимое",
|
|
1647
|
-
"canvas.minimapOpen": "Открыть мини-карту",
|
|
1648
|
-
"canvas.minimapClose": "Скрыть мини-карту",
|
|
1649
|
-
"canvas.minimap": "Мини-карта холста",
|
|
1650
|
-
"canvas.zoom": "Масштаб",
|
|
1651
|
-
"canvas.textPlaceholder": "Введите текст…",
|
|
1652
|
-
"canvas.generatingNode": "Генерация…",
|
|
1653
|
-
"canvas.generateFailed": "Не удалось создать изображение",
|
|
1654
|
-
"canvas.retry": "Повторить",
|
|
1655
|
-
"canvas.taskLost": "Задача генерации потеряна (сервис перезапущен); повторите",
|
|
1656
|
-
"canvas.emptyImageNode": "Нажмите, чтобы загрузить изображение",
|
|
1657
|
-
"canvas.connectHint": "Потяните к другому узлу, чтобы соединить",
|
|
1658
|
-
"canvas.connectAddHint": "Потяните к другому узлу, чтобы соединить; клик добавляет следующий узел",
|
|
1659
|
-
"canvas.resizeHint": "Потяните, чтобы изменить размер (пропорции зафиксированы)",
|
|
1660
|
-
"canvas.count": "Кол-во изображений",
|
|
1661
|
-
"canvas.configNode": "Конфигурация генерации",
|
|
1662
|
-
"canvas.addConfigNode": "Добавить узел конфигурации",
|
|
1663
|
-
"canvas.configHint": "Подключите узлы изображений слева как референсы и текстовые узлы как промпт; выберите этот узел и генерируйте через панель ниже.",
|
|
1664
|
-
"canvas.composerLinked": "Подключено узлов ввода: {count}",
|
|
1665
|
-
"canvas.composerPlaceholder": "Опишите изображение; либо подключите текстовые узлы как промпт…",
|
|
1666
|
-
"canvas.countUnit": "{count} шт.",
|
|
1667
|
-
"canvas.model": "Модель изображений",
|
|
1668
|
-
"canvas.modelPlaceholder": "Выберите модель",
|
|
1669
|
-
"canvas.size": "Пропорции",
|
|
1670
|
-
"canvas.sizeAuto": "Авто",
|
|
1671
|
-
"canvas.quality": "Качество",
|
|
1672
|
-
"canvas.qualityAuto": "Авто",
|
|
1673
|
-
"canvas.needApi": "Сначала настройте API генерации",
|
|
1674
|
-
"canvas.needPrompt": "Введите описание генерации",
|
|
1675
|
-
"canvas.needModel": "Нет доступной модели изображений",
|
|
1676
|
-
"canvas.openSettings": "Открыть настройки",
|
|
1677
|
-
"canvas.deleteConnection": "Удалить связь",
|
|
1678
|
-
"canvas.paste": "Вставить (Ctrl+V)",
|
|
1679
|
-
"canvas.addImageNode": "Добавить узел изображения",
|
|
1680
|
-
"canvas.addTextNode": "Добавить текстовый узел",
|
|
1681
|
-
"canvas.addSketch": "Добавить скетчборд (эскиз → изображение)",
|
|
1682
|
-
"canvas.sketchNode": "Скетчборд",
|
|
1683
|
-
"canvas.addSketchNode": "Добавить узел скетчборда",
|
|
1684
|
-
"canvas.sketchPlaceholder": "Нарисуйте эскиз от руки и подключите к узлу конфигурации как референс",
|
|
1685
|
-
"canvas.sketchBrush": "Кисть",
|
|
1686
|
-
"canvas.sketchEraser": "Ластик",
|
|
1687
|
-
"canvas.sketchUndo": "Отменить последний штрих",
|
|
1688
|
-
"canvas.sketchClear": "Очистить доску",
|
|
1689
|
-
"canvas.sketchWidth": "Толщина линии",
|
|
1690
|
-
"canvas.dismiss": "Закрыть",
|
|
1691
|
-
"canvas.annotate": "Разметка: обведите область, чтобы прикрепить карточку промпта",
|
|
1692
|
-
"canvas.annotationNode": "Промпт разметки",
|
|
1693
|
-
"canvas.annotationTag": "Разметка",
|
|
1694
|
-
"canvas.annotationPlaceholder": "Опишите, что должно быть в рамке, например: заменить на рыжего кота",
|
|
1695
|
-
"canvas.annotationDrawHint": "Проведите по изображению, чтобы нарисовать рамку; после отпускания появится карточка промпта, которая следует за изображением (соединять не нужно)",
|
|
1696
|
-
"canvas.removeBackground": "Удалить фон (локальная обработка, прозрачный PNG)",
|
|
1697
|
-
"canvas.removingBackground": "Удаляем фон…",
|
|
1698
|
-
"canvas.removeBgDone": "Фон удалён (прозрачных пикселей {percent}%)",
|
|
1699
|
-
"canvas.removeBgFailed": "Фон слишком сложный для локальной обработки; обведите объект разметкой и попросите модель перерисовать",
|
|
1700
|
-
"canvas.alreadyTransparent": "У этого изображения уже прозрачный фон",
|
|
1701
|
-
"canvas.noBackgroundNode": "Изображение без фона",
|
|
1702
|
-
"canvas.splitLayers": "Разделить слои (ИИ-разбор на редактируемые слои)",
|
|
1703
|
-
"canvas.splittingLayers": "Разделяем слои…",
|
|
1704
|
-
"canvas.layerSplitDone": "Разделено на {count} слоёв",
|
|
1705
|
-
"canvas.layerSplitEmpty": "Модель не нашла слоёв для разделения",
|
|
1706
|
-
"canvas.layerBackground": "Фон · {label}",
|
|
1707
|
-
"canvas.layerObject": "Слой · {label}",
|
|
1708
|
-
"canvas.layerText": "Текст · {label}",
|
|
1709
|
-
"canvas.layerKindBackground": "Фон",
|
|
1710
|
-
"canvas.layerKindObject": "Элемент",
|
|
1711
|
-
"canvas.layerKindText": "Текст",
|
|
1712
|
-
"canvas.nodeModel": "Модель для этого узла (повтор и подключённые узлы конфигурации)",
|
|
1713
|
-
"canvas.modelDefault": "Модель по умолчанию",
|
|
1714
|
-
"canvas.fontSmaller": "Меньше шрифт",
|
|
1715
|
-
"canvas.fontLarger": "Больше шрифт",
|
|
1716
|
-
"canvas.bold": "Жирный",
|
|
1717
|
-
"canvas.textColor": "Цвет текста",
|
|
1718
|
-
"canvas.colorDefault": "Как в теме",
|
|
1719
|
-
"canvas.close": "Закрыть",
|
|
1720
|
-
"canvas.tabUpload": "Загрузка",
|
|
1721
|
-
"canvas.tabHistory": "История",
|
|
1722
|
-
"canvas.tabGallery": "Материалы",
|
|
1723
|
-
"canvas.imageMenuUpload": "Локальное изображение",
|
|
1724
|
-
"canvas.imageMenuAssets": "Материалы",
|
|
1725
|
-
"canvas.imageMenuHistory": "История",
|
|
1726
|
-
"canvas.imageMenuGenerate": "AI-генерация",
|
|
1727
|
-
"canvas.tabGenerate": "AI-генерация",
|
|
1728
|
-
"canvas.dropHint": "Перетащите изображения сюда",
|
|
1729
|
-
"canvas.dropSub": "Несколько файлов, PNG / JPG / WebP / GIF",
|
|
1730
|
-
"canvas.untitledWork": "Без названия",
|
|
1731
|
-
"canvas.picked": "Выбрано: {count}",
|
|
1732
|
-
"canvas.generateAndAdd": "Создать и добавить на холст",
|
|
1733
|
-
"chat.expand": "Показать диалог",
|
|
1734
|
-
"chat.collapse": "Скрыть диалог",
|
|
1735
|
-
"chat.toggle": "Диалог",
|
|
1736
|
-
"config.resizeHint": "Потяните, чтобы изменить ширину панели параметров",
|
|
1737
|
-
"ecommerce.generation": "Параметры генерации",
|
|
1738
|
-
"ecommerce.title": "Режим e-commerce",
|
|
1739
|
-
"ecommerce.badge": "Превью",
|
|
1740
|
-
"ecommerce.short": "E-com",
|
|
1741
|
-
"ecommerce.anchorPending": "Главное изображение готово, остальные генерируются по нему для единого стиля…",
|
|
1742
|
-
"ecommerce.anchorFailed": "Не удалось создать главное изображение, остальные приостановлены. Повторите главное (или всю группу) и продолжите.",
|
|
1743
|
-
"ecommerce.anchorNote": "Якорная генерация: сначала главное изображение, остальные создаются по нему для единого стиля",
|
|
1744
|
-
"ecommerce.noAssetWarn": "Товар не загружен: главное изображение будет создано по описанию и станет якорем; загрузите фото товара для большей точности",
|
|
1745
|
-
"ecommerce.product": "Товар",
|
|
1746
|
-
"ecommerce.productName": "Название товара (обязательно)",
|
|
1747
|
-
"ecommerce.projectName": "Название проекта (необязательно)",
|
|
1748
|
-
"ecommerce.constraints": "Преимущества и ограничения",
|
|
1749
|
-
"ecommerce.sellingPoints": "Доп. информация: бренд и модель, характеристики (объём/размер/вес), материалы, преимущества, сертификация, комплектация…",
|
|
1750
|
-
"ecommerce.protectedFeatures": "Что обязательно сохранить: цвет, логотип, текст упаковки, конструкцию",
|
|
1751
|
-
"ecommerce.styleHint": "Стиль, например: премиальный / реалистичный / естественный свет",
|
|
1752
|
-
"ecommerce.setStructure": "Структура комплекта",
|
|
1753
|
-
"ecommerce.preview": "Создать превью комплекта",
|
|
1754
|
-
"ecommerce.planTitle": "Будет сгенерировано изображений: {count}",
|
|
1755
|
-
"ecommerce.planSlot": "{count} шт. · {description}",
|
|
1756
|
-
"ecommerce.confirm": "Сгенерировать весь комплект",
|
|
1757
|
-
"ecommerce.uploadRef": "Фото товара (обязательно, до 4 шт.: товар / упаковка / детали)",
|
|
1758
|
-
"ecommerce.uploadShort": "Загрузить материалы",
|
|
1759
|
-
"ecommerce.sellingTitle": "Преимущества товара",
|
|
1760
|
-
"ecommerce.advanced": "Дополнительно (площадка / ограничения)",
|
|
1761
|
-
"ecommerce.params": "Параметры",
|
|
1762
|
-
"ecommerce.platformLabel": "Площадка",
|
|
1763
|
-
"ecommerce.languageLabel": "Язык текста",
|
|
1764
|
-
"ecommerce.customLanguageOption": "Свой язык…",
|
|
1765
|
-
"ecommerce.customLanguageLabel": "Свой язык",
|
|
1766
|
-
"ecommerce.customLanguagePlaceholder": "Введите язык, например: Русский / 日本語 / Português",
|
|
1767
|
-
"ecommerce.ratioLabel": "Пропорции",
|
|
1768
|
-
"ecommerce.categoryLabel": "Категория",
|
|
1769
|
-
"ecommerce.multiSelect": "Можно выбрать несколько",
|
|
1770
|
-
"ecommerce.countHint": "Нажмите, чтобы изменить количество (1-4)",
|
|
1771
|
-
"ecommerce.refSettings": "Настройки референсов (необязательно)",
|
|
1772
|
-
"ecommerce.styleTitle": "Стиль / дополнения",
|
|
1773
|
-
"ecommerce.protectedLabel": "Обязательно сохранить (необязательно)",
|
|
1774
|
-
"ecommerce.assetsFull": "Не более 4 фото товара",
|
|
1775
|
-
"ecommerce.productRefTitle": "Референсы товара",
|
|
1776
|
-
"ecommerce.productRefHint": "Обязательно · фото товара, до 4 шт.",
|
|
1777
|
-
"ecommerce.styleRefTitle": "Референс стиля",
|
|
1778
|
-
"ecommerce.styleRefBadge": "опционально, 1 шт.",
|
|
1779
|
-
"ecommerce.styleRefHint": "Только стиль, свет, композиция и настроение — сам товар заменить нельзя.",
|
|
1780
|
-
"ecommerce.styleRefUpload": "Загрузить референс стиля",
|
|
1781
|
-
"ecommerce.refInfoTitle": "Параметры товара",
|
|
1782
|
-
"ecommerce.aiWrite": "ИИ-заполнить",
|
|
1783
|
-
"ecommerce.aiWriting": "ИИ составляет…",
|
|
1784
|
-
"ecommerce.aiWriteHint": "Составить параметры товара из названия и категории",
|
|
1785
|
-
"ecommerce.promptInfoPlaceholder": "Опционально: бренд и модель, характеристики, материалы, преимущества, сертификация, комплектация… или ИИ-заполнить",
|
|
1786
|
-
"ecommerce.optional": "опционально",
|
|
1787
|
-
"ecommerce.previewBoardTitle": "Предпросмотр перед генерацией",
|
|
1788
|
-
"ecommerce.previewBoardHint": "Промпт каждого изображения можно изменить до запуска",
|
|
1789
|
-
"ecommerce.promptReset": "Сбросить",
|
|
1790
|
-
"ecommerce.promptAutoHint": "Автоматически · можно изменить",
|
|
1791
|
-
"ecommerce.refSelect": "Референс для этого назначения",
|
|
1792
|
-
"ecommerce.refNone": "Без референса",
|
|
1793
|
-
"ecommerce.role.product": "Товар",
|
|
1794
|
-
"ecommerce.role.packaging": "Упаковка",
|
|
1795
|
-
"ecommerce.role.detail": "Детали/ракурс",
|
|
1796
|
-
"ecommerce.role.style": "Стиль",
|
|
1797
|
-
"ecommerce.footerReady": "Будет сгенерировано {count} изображений",
|
|
1798
|
-
"ecommerce.footerEmpty": "Выберите структуру комплекта",
|
|
1799
|
-
"ecommerce.results.title": "Результаты комплекта",
|
|
1800
|
-
"ecommerce.results.progress": "{done}/{total} готово",
|
|
1801
|
-
"ecommerce.results.failed": "{count} с ошибкой",
|
|
1802
|
-
"ecommerce.results.empty": "После запуска генерации здесь появятся статус и результат каждого изображения",
|
|
1803
|
-
"ecommerce.results.regenerate": "Сгенерировать заново",
|
|
1804
|
-
"ecommerce.results.export": "Экспорт списка",
|
|
1805
|
-
"ecommerce.results.newProduct": "Новый товар",
|
|
1806
|
-
"prompt.placeholder": "Опишите желаемое изображение, например: рыжий кот в шлеме космонавта смотрит в телескоп на Луне, акварель, мягкий свет…",
|
|
1807
|
-
"prompt.required": "Введите промпт",
|
|
1808
|
-
"prompt.count": "{count}",
|
|
1809
|
-
"prompt.countLimit": "{count} / {limit}",
|
|
1810
|
-
"prompt.overLimit": "Превышен лимит промпта для этой модели ({limit} символов); сократите текст",
|
|
1811
|
-
"prompt.enhance": "Улучш.",
|
|
1812
|
-
"prompt.enhancing": "Улучшаем…",
|
|
1813
|
-
"prompt.enhanceHint": "Развернуть краткий промпт через настроенную диалоговую модель",
|
|
1814
|
-
"prompt.configTitle": "Сначала настройте модель улучшения промптов",
|
|
1815
|
-
"prompt.configHint": "Настройки открыты. Перейдите в «Плагины → ИИ-генерация», укажите или переиспользуйте API-адрес и ключ, выберите диалоговую модель и сохраните.",
|
|
1816
|
-
"tasks.title": "Задачи генерации",
|
|
1817
|
-
"tasks.queued": "В очереди",
|
|
1818
|
-
"tasks.running": "Генерация",
|
|
1819
|
-
"tasks.completed": "Готово",
|
|
1820
|
-
"tasks.failed": "Ошибка",
|
|
1821
|
-
"tasks.cancelled": "Отменено",
|
|
1822
|
-
"tasks.cancel": "Отменить",
|
|
1823
|
-
"tasks.retry": "Повторить",
|
|
1824
|
-
"params.size": "Размер",
|
|
1825
|
-
"params.quality": "Чёткость",
|
|
1826
|
-
"params.count": "Количество",
|
|
1827
|
-
"params.detail": "Детализация",
|
|
1828
|
-
"size.auto": "Авто",
|
|
1829
|
-
"size.square": "1:1 квадрат",
|
|
1830
|
-
"size.portrait34": "3:4 верт.",
|
|
1831
|
-
"size.landscape43": "4:3 гориз.",
|
|
1832
|
-
"size.portrait916": "9:16 верт.",
|
|
1833
|
-
"size.portrait23": "2:3 верт.",
|
|
1834
|
-
"size.landscape32": "3:2 гориз.",
|
|
1835
|
-
"size.wide169": "16:9 шир.",
|
|
1836
|
-
"size.ultrawide21": "21:9 ультрашир.",
|
|
1837
|
-
"quality.auto": "Авто",
|
|
1838
|
-
"quality.1k": "1K",
|
|
1839
|
-
"quality.2k": "2K",
|
|
1840
|
-
"quality.4k": "4K",
|
|
1841
|
-
"count.one": "1 шт.",
|
|
1842
|
-
"count.two": "2 шт.",
|
|
1843
|
-
"count.three": "3 шт.",
|
|
1844
|
-
"count.four": "4 шт.",
|
|
1845
|
-
"detail.auto": "Авто",
|
|
1846
|
-
"detail.standard": "Стандарт",
|
|
1847
|
-
"detail.high": "Высокая",
|
|
1848
|
-
"detail.hint": "Сквозной параметр, поддерживают некоторые шлюзы gpt-image-2; для официального API оставьте «Авто»",
|
|
1849
|
-
"model.label": "Модель",
|
|
1850
|
-
"model.noEditModels": "В текущем режиме нет доступных моделей",
|
|
1851
|
-
"compare.enable": "Сравнение моделей",
|
|
1852
|
-
"compare.models": "Модели для сравнения",
|
|
1853
|
-
"compare.title": "Сравнение результатов моделей",
|
|
1854
|
-
"compare.fullscreen": "Полноэкранное сравнение",
|
|
1855
|
-
"compare.selectRequired": "Выберите хотя бы одну модель для сравнения",
|
|
1856
|
-
"generate": "Сгенерировать",
|
|
1857
|
-
"generating": "Генерация…",
|
|
1858
|
-
"edit.upload": "Нажмите или перетащите референс",
|
|
1859
|
-
"edit.uploadHint": "PNG / JPG / WEBP, до 10 МБ",
|
|
1860
|
-
"edit.change": "Заменить изображение",
|
|
1861
|
-
"edit.remove": "Убрать",
|
|
1862
|
-
"edit.required": "Сначала загрузите референс",
|
|
1863
|
-
"canvas.emptyTitle": "Начните творить",
|
|
1864
|
-
"canvas.emptyHint": "Двойной клик или нижняя панель добавляют узлы; соедините узлы изображений и текста с целевым узлом, выберите его и генерируйте внизу",
|
|
1865
|
-
"canvas.new": "Новая генерация",
|
|
1866
|
-
"canvas.newHint": "Начать новую генерацию и очистить просмотр",
|
|
1867
|
-
"canvas.error": "Ошибка генерации: {error}",
|
|
1868
|
-
"canvas.submitting": "Ставим в очередь…",
|
|
1869
|
-
"canvas.queued": "Задача в очереди",
|
|
1870
|
-
"canvas.queueHint": "Сейчас ожидают {count} задач",
|
|
1871
|
-
"canvas.generating": "Генерируем изображение…",
|
|
1872
|
-
"canvas.elapsed": "Прошло {seconds} с",
|
|
1873
|
-
"canvas.images": "Сгенерировано: {count}",
|
|
1874
|
-
"download": "Скачать",
|
|
1875
|
-
"revisedPrompt": "Улучшенный промпт: {prompt}",
|
|
1876
|
-
"history.title": "История",
|
|
1877
|
-
"history.empty": "Истории пока нет — созданные изображения появятся здесь",
|
|
1878
|
-
"history.clear": "Очистить",
|
|
1879
|
-
"history.clearConfirm": "Очистить всю историю? Действие необратимо.",
|
|
1880
|
-
"history.restore": "Восстановить",
|
|
1881
|
-
"history.delete": "Удалить",
|
|
1882
|
-
"history.images": "шт.",
|
|
1883
|
-
"history.viewing": "История · {time}",
|
|
1884
|
-
"history.search": "Поиск по промптам и моделям…",
|
|
1885
|
-
"history.model": "Фильтр по модели",
|
|
1886
|
-
"history.ratio": "Фильтр по пропорциям",
|
|
1887
|
-
"history.allModels": "Все модели",
|
|
1888
|
-
"history.allRatios": "Все пропорции",
|
|
1889
|
-
"gallery.title": "Материалы",
|
|
1890
|
-
"gallery.categories": "Категории",
|
|
1891
|
-
"gallery.all": "Все материалы",
|
|
1892
|
-
"gallery.upload": "Загрузить",
|
|
1893
|
-
"gallery.uploadModel": "Локальный файл",
|
|
1894
|
-
"gallery.uploaded": "Материал добавлен",
|
|
1895
|
-
"gallery.uploadHint": "Сохраните локальные изображения для холста",
|
|
1896
|
-
"gallery.gpt": "gpt-image-2",
|
|
1897
|
-
"gallery.grok": "grok-imagine-image",
|
|
1898
|
-
"gallery.ratio": "Пропорции",
|
|
1899
|
-
"gallery.tags": "Метки",
|
|
1900
|
-
"gallery.filterHint": "Фильтр галереи по режиму, модели и пропорциям",
|
|
1901
|
-
"gallery.count": "· всего {count}",
|
|
1902
|
-
"gallery.viewMode": "Вид",
|
|
1903
|
-
"gallery.masonry": "Плитка",
|
|
1904
|
-
"gallery.grid": "Сетка",
|
|
1905
|
-
"gallery.sort": "Сортировка",
|
|
1906
|
-
"gallery.newest": "Сначала новые",
|
|
1907
|
-
"gallery.oldest": "Сначала старые",
|
|
1908
|
-
"gallery.untitled": "Без названия",
|
|
1909
|
-
"gallery.search": "Поиск по работам и моделям…",
|
|
1910
|
-
"gallery.tagsPlaceholder": "Метки через запятую",
|
|
1911
|
-
"gallery.tagsApply": "Добавить метки",
|
|
1912
|
-
"gallery.editTags": "Править метки",
|
|
1913
|
-
"gallery.tagsEditShort": "Правка",
|
|
1914
|
-
"gallery.tagsSave": "Сохранить",
|
|
1915
|
-
"gallery.tagsCancel": "Отмена",
|
|
1916
|
-
"gallery.selected": "Выбрано: {count}",
|
|
1917
|
-
"gallery.selectionDone": "Завершить выбор",
|
|
1918
|
-
"gallery.selectionClear": "Снять выбор",
|
|
1919
|
-
"gallery.downloadSelected": "Скачать выбранные",
|
|
1920
|
-
"gallery.exportJson": "Экспорт JSON",
|
|
1921
|
-
"gallery.select": "Выбрать работы",
|
|
1922
|
-
"gallery.add": "В галерею",
|
|
1923
|
-
"gallery.added": "Добавлено в галерею",
|
|
1924
|
-
"gallery.already": "Уже в галерее",
|
|
1925
|
-
"gallery.delete": "Убрать из галереи",
|
|
1926
|
-
"gallery.openFolder": "Открыть папку",
|
|
1927
|
-
"gallery.clear": "Очистить галерею",
|
|
1928
|
-
"gallery.openFolderHint": "Открыть каталог сохранения изображений (~/.dsh/dsh-imagegen) в проводнике",
|
|
1929
|
-
"gallery.clearConfirm": "Очистить всю галерею? Действие необратимо.",
|
|
1930
|
-
"gallery.empty": "Галерея пуста — добавьте понравившиеся изображения",
|
|
1931
|
-
"gallery.viewing": "Галерея · {time}",
|
|
1932
|
-
"preview.title": "Просмотр изображения",
|
|
1933
|
-
"preview.open": "Открыть просмотр",
|
|
1934
|
-
"preview.close": "Закрыть",
|
|
1935
|
-
"preview.prev": "Назад",
|
|
1936
|
-
"preview.next": "Вперёд",
|
|
1937
|
-
"preview.index": "{index} / {total}",
|
|
1938
|
-
"preview.zoomControls": "Управление масштабом",
|
|
1939
|
-
"preview.zoomIn": "Увеличить",
|
|
1940
|
-
"preview.zoomOut": "Уменьшить",
|
|
1941
|
-
"preview.zoomReset": "Сбросить масштаб",
|
|
1942
|
-
"preview.zoomLevel": "{percent}%",
|
|
1943
|
-
"preview.copyPrompt": "Копировать промпт",
|
|
1944
|
-
"preview.copied": "Скопировано",
|
|
1945
|
-
"preview.addToEdit": "В режим img2img",
|
|
1946
|
-
"config.missing": "API не настроен: откройте «Настройки → Плагины → Настраиваемые» и заполните api_url и api_key для ИИ-генерации.",
|
|
1947
|
-
"config.generationTitle": "Сначала настройте API генерации",
|
|
1948
|
-
"config.generationHint": "Открыты «Настройки → Плагины → ИИ-генерация». Укажите адрес и ключ API генерации, сохраните — и можно творить.",
|
|
1949
|
-
"config.enhancementTitle": "Сначала настройте модель улучшения промптов",
|
|
1950
|
-
"config.enhancementHint": "Открыты «Настройки → Плагины → ИИ-генерация». Укажите или переиспользуйте адрес и ключ диалогового API, выберите модель и сохраните.",
|
|
1951
|
-
"config.disabledTitle": "Плагин ИИ-генерации отключён",
|
|
1952
|
-
"config.disabledHint": "Открыты «Настройки → Плагины → ИИ-генерация». Включите плагин — и генерация заработает.",
|
|
1953
|
-
"config.configured": "Подключено: {url}",
|
|
1954
|
-
"config.disabled": "Плагин отключён — включите его в настройках.",
|
|
1955
|
-
"connection.connected": "Подключено",
|
|
1956
|
-
"connection.disconnected": "Нет подключения",
|
|
1957
|
-
"panel.collapseConfig": "Свернуть параметры",
|
|
1958
|
-
"panel.expandConfig": "Развернуть параметры",
|
|
1959
|
-
"update.available": "Доступна новая версия: {version}",
|
|
1960
|
-
"update.install": "Обновить онлайн",
|
|
1961
|
-
"update.installing": "Обновляем…",
|
|
1962
|
-
"update.success": "Обновлено до {version}, перезапустите DSH",
|
|
1963
|
-
"update.failed": "Не удалось обновить, попробуйте ещё раз",
|
|
1964
|
-
"update.release": "Открыть релиз",
|
|
1965
|
-
"settings.title": "ИИ-генерация (dsh-imagegen)",
|
|
1966
|
-
"settings.description": "Адрес и ключ API генерации изображений",
|
|
1967
|
-
"settings.currentVersion": "Текущая версия",
|
|
1968
|
-
"settings.apiUrl": "Адрес API (api_url)",
|
|
1969
|
-
"settings.apiUrlHint": "База OpenAI-совместимого API, например https://api.openai.com/v1; /images/generations и /images/edits дописываются автоматически",
|
|
1970
|
-
"settings.apiKey": "Ключ API (api_key)",
|
|
1971
|
-
"settings.apiKeyHint": "Bearer-ключ хранится открыто в локальном документе настроек; интерфейс показывает лишь факт его наличия",
|
|
1972
|
-
"settings.apiKeySet": "Ключ сохранён; введите новый, чтобы заменить, или нажмите «Очистить»",
|
|
1973
|
-
"settings.apiKeyClear": "Очистить",
|
|
1974
|
-
"settings.imageModelsTitle": "Модели генерации",
|
|
1975
|
-
"settings.imageModelsHint": "После сохранения адреса и ключа будут найдены кандидаты; выбирайте только те, что реально умеют генерировать изображения.",
|
|
1976
|
-
"settings.imageModels": "Разрешённые модели генерации",
|
|
1977
|
-
"settings.imageModelsManualHint": "По одной модели в строке; можно заполнить вручную, если API не отдаёт /models. Панель и агент используют только этот список.",
|
|
1978
|
-
"settings.imageModelsFetch": "Найти модели",
|
|
1979
|
-
"settings.imageModelsLoading": "Ищем…",
|
|
1980
|
-
"settings.imageModelsCandidates": "Найденные кандидаты (отметьте и сохраните)",
|
|
1981
|
-
"settings.addModel": "+ Добавить вручную",
|
|
1982
|
-
"settings.cancelAddModel": "Скрыть добавление",
|
|
1983
|
-
"settings.addModelPlaceholder": "Имя модели, например qwen-image",
|
|
1984
|
-
"settings.addModelConfirm": "Добавить",
|
|
1985
|
-
"settings.removeModel": "Удалить модель",
|
|
1986
|
-
"settings.optional": "необязательно",
|
|
1987
|
-
"settings.moreOptions": "Дополнительно",
|
|
1988
|
-
"settings.localStoragePath": "Локальная папка изображений",
|
|
1989
|
-
"settings.localStoragePathHint": "История, материалы и холст используют эту папку; пусто — ~/.dsh/dsh-imagegen.",
|
|
1990
|
-
"settings.storageTitle": "Синхронизация с объектным хранилищем",
|
|
1991
|
-
"settings.storageEnabled": "Включить синхронизацию",
|
|
1992
|
-
"settings.storageHint": "После сохранения локально изображения выгружаются в S3-совместимое хранилище (Tencent COS / Alibaba OSS / Qiniu S3 / MinIO / R2…)",
|
|
1993
|
-
"settings.storageEndpoint": "Адрес (с бакетом)",
|
|
1994
|
-
"settings.storageEndpointHint": "S3-совместимый URL, например https://bucket-appid.cos.ap-guangzhou.myqcloud.com",
|
|
1995
|
-
"settings.storageRegion": "Регион",
|
|
1996
|
-
"settings.storageRegionHint": "ID региона для подписи, например ap-guangzhou / oss-cn-hangzhou / cn-east-1",
|
|
1997
|
-
"settings.storagePrefix": "Префикс ключей",
|
|
1998
|
-
"settings.storagePrefixHint": "Ключи объекта: префикс/gallery|images/<файл>",
|
|
1999
|
-
"settings.storageAccessKey": "Access Key",
|
|
2000
|
-
"settings.storageAccessKeyHint": "S3-совместимый идентификатор ключа",
|
|
2001
|
-
"settings.storageSecretKey": "Secret Key",
|
|
2002
|
-
"settings.storageSecretKeyHint": "S3-совместимый секрет, хранится только в локальных настройках",
|
|
2003
|
-
"settings.storageSyncGallery": "Синхронизировать галерею",
|
|
2004
|
-
"settings.storageSyncGalleryHint": "Выгружать изображения при добавлении в галерею",
|
|
2005
|
-
"settings.storageSyncHistory": "Синхронизировать историю",
|
|
2006
|
-
"settings.storageSyncHistoryHint": "Также выгружать все результаты генерации (их может быть много)",
|
|
2007
|
-
"settings.storageTest": "Проверить соединение",
|
|
2008
|
-
"settings.storageTesting": "Проверяем…",
|
|
2009
|
-
"settings.storageTestOk": "Соединение в порядке ({ms} мс), тестовый файл загружен",
|
|
2010
|
-
"settings.storageTestFailed": "Ошибка соединения: {error}",
|
|
2011
|
-
"settings.storageKeyHint": "Синхронизация выполняется по возможности и никогда не блокирует локальное сохранение.",
|
|
2012
|
-
"settings.promptEnhanceTitle": "Модель улучшения промптов",
|
|
2013
|
-
"settings.promptEnhanceHint": "Разворачивает краткое описание в полноценный промпт; пустые адрес и ключ наследуют настройки генерации.",
|
|
2014
|
-
"settings.promptApiUrl": "Адрес диалогового API (необязательно)",
|
|
2015
|
-
"settings.promptApiUrlHint": "OpenAI-совместимая база; если пусто — используется адрес API генерации.",
|
|
2016
|
-
"settings.promptApiKey": "Ключ диалогового API (необязательно)",
|
|
2017
|
-
"settings.promptApiKeyHint": "Если пусто — используется ключ API генерации.",
|
|
2018
|
-
"settings.promptModel": "Диалоговая модель",
|
|
2019
|
-
"settings.promptModelHint": "Выберите или впишите модель с поддержкой /chat/completions.",
|
|
2020
|
-
"settings.promptModelDetectionHint": "По умолчанию используется API генерации; после поиска просто выберите модель.",
|
|
2021
|
-
"settings.promptModelsFetch": "Получить модели",
|
|
2022
|
-
"settings.promptModelsLoading": "Получаем…",
|
|
2023
|
-
"settings.promptModelsSelect": "Выберите модель",
|
|
2024
|
-
"settings.promptModelsCandidates": "Найденные диалоговые модели",
|
|
2025
|
-
"settings.addPromptModelPlaceholder": "Имя диалоговой модели, например gpt-4.1-mini",
|
|
2026
|
-
"settings.promptApiAdvanced": "Отдельный диалоговый API (необязательно)",
|
|
2027
|
-
"settings.announceToAgent": "Оповещать агентов о плагине",
|
|
2028
|
-
"settings.announceToAgentHint": "Включено — возможности плагина добавляются в системный промпт каждого агента",
|
|
2029
|
-
"settings.allowAgentImageGeneration": "Разрешить агентам генерацию",
|
|
2030
|
-
"settings.allowAgentImageGenerationHint": "Включено по умолчанию. Выключено — агенты не могут создавать, смотреть или отменять задачи; боковая панель работает.",
|
|
2031
|
-
"settings.enabled": "Включить плагин",
|
|
2032
|
-
"settings.enabledHint": "Выключено — панель генерации недоступна (карточка настроек работает всегда)",
|
|
2033
|
-
"settings.save": "Сохранить",
|
|
2034
|
-
"settings.saving": "Сохраняем…",
|
|
2035
|
-
"settings.discard": "Отменить правки",
|
|
2036
|
-
"settings.unsaved": "Есть несохранённые правки",
|
|
2037
|
-
"settings.saveFailed": "Не удалось сохранить, попробуйте ещё раз",
|
|
2038
|
-
"settings.readOnly": "Документ настроек сейчас только для чтения, сохранить нельзя.",
|
|
2039
|
-
"settings.notExposed": "Пространство настроек недоступно: этот деплой не предоставляет сервис настроек плагина.",
|
|
2040
|
-
"settings.expand": "Развернуть",
|
|
2041
|
-
"settings.collapse": "Свернуть",
|
|
2042
|
-
"settings.inherit": "Наследовать",
|
|
2043
|
-
"settings.on": "Вкл",
|
|
2044
|
-
"settings.off": "Выкл",
|
|
2045
|
-
"settings.overridden": "Переопределено",
|
|
2046
|
-
"settings.reset": "Сбросить",
|
|
2047
|
-
"settings.invalidNumber": "Введите корректное число",
|
|
2048
|
-
"templates.open": "Шаблоны",
|
|
2049
|
-
"templates.title": "Библиотека промпт-шаблонов",
|
|
2050
|
-
"templates.sources": "Источники шаблонов",
|
|
2051
|
-
"templates.meta": "Всего шаблонов: {count} · {origin}",
|
|
2052
|
-
"templates.origin.bundled": "встроенный снимок",
|
|
2053
|
-
"templates.origin.refreshed": "обновлено онлайн",
|
|
2054
|
-
"templates.search": "Поиск по названиям и промптам…",
|
|
2055
|
-
"templates.all": "Все",
|
|
2056
|
-
"templates.close": "Закрыть",
|
|
2057
|
-
"templates.back": "К списку",
|
|
2058
|
-
"templates.use": "Использовать промпт",
|
|
2059
|
-
"templates.copy": "Копировать промпт",
|
|
2060
|
-
"templates.copied": "Скопировано",
|
|
2061
|
-
"templates.refresh": "Обновить библиотеку",
|
|
2062
|
-
"templates.refreshing": "Обновляем…",
|
|
2063
|
-
"templates.refreshed": "Обновлено, шаблонов: {count}",
|
|
2064
|
-
"templates.refreshFailed": "Ошибка обновления: {error}",
|
|
2065
|
-
"templates.favorites": "Избранное",
|
|
2066
|
-
"templates.favoritesHint": "Показать только избранные шаблоны",
|
|
2067
|
-
"templates.favoritesEmpty": "Пока пусто — нажмите звёздочку в углу карточки, чтобы сохранить шаблон",
|
|
2068
|
-
"templates.favoriteAdd": "Добавить в избранное",
|
|
2069
|
-
"templates.favoriteRemove": "Убрать из избранного",
|
|
2070
|
-
"templates.favorite": "В избранное",
|
|
2071
|
-
"templates.unfavorite": "В избранном",
|
|
2072
|
-
"templates.cacheAll": "Кэшировать все картинки",
|
|
2073
|
-
"templates.cacheAllHint": "Через локальный прокси сохранит все референсы этой библиотеки на диск — дальше доступно офлайн",
|
|
2074
|
-
"templates.caching": "Кэшируем {done}/{total}…",
|
|
2075
|
-
"templates.cached": "Все картинки закэшированы",
|
|
2076
|
-
"templates.empty": "Нет подходящих шаблонов",
|
|
2077
|
-
"templates.loading": "Загружаем библиотеку…",
|
|
2078
|
-
"templates.loadFailed": "Не удалось загрузить библиотеку: {error}",
|
|
2079
|
-
"templates.retry": "Повторить",
|
|
2080
|
-
"templates.attribution": "Шаблоны и изображения принадлежат сайтам-источникам; ссылки на авторов — в карточках",
|
|
2081
|
-
"templates.source": "Источник: {label}",
|
|
2082
|
-
"templates.featured": "Выбор редакции",
|
|
2083
|
-
"inspiration.title": "Вдохновение",
|
|
2084
|
-
"inspiration.shuffle": "Другие",
|
|
2085
|
-
"inspiration.shuffling": "Подбираем…",
|
|
2086
|
-
"inspiration.useHint": "Нажмите, чтобы использовать промпт",
|
|
2087
|
-
"channels.title": "Каналы",
|
|
2088
|
-
"channels.hint": "Укажите адрес и ключ API каждого канала — и модели станут доступны",
|
|
2089
|
-
"channels.empty": "Каналов пока нет — добавьте кнопкой ниже",
|
|
2090
|
-
"channels.addProvider": "Добавить провайдера",
|
|
2091
|
-
"channels.addCustom": "Добавить свой канал",
|
|
2092
|
-
"channels.untitled": "Канал без названия",
|
|
2093
|
-
"channels.keySet": "Ключ задан",
|
|
2094
|
-
"channels.keyMissing": "Ключ не задан",
|
|
2095
|
-
"channels.modelCount": "Моделей: {n}",
|
|
2096
|
-
"channels.noModels": "Модели не настроены",
|
|
2097
|
-
"channels.defaultLabel": "По умолчанию",
|
|
2098
|
-
"channels.statusReady": "Готов",
|
|
2099
|
-
"channels.statusIncomplete": "Настройка не завершена",
|
|
2100
|
-
"channels.edit": "Править",
|
|
2101
|
-
"channels.delete": "Удалить",
|
|
2102
|
-
"channels.deleteConfirmTitle": "Удалить канал «{name}»? Ключ канала будет удалён; история и галерея сохранятся.",
|
|
2103
|
-
"channels.confirm": "Удалить",
|
|
2104
|
-
"channels.cancel": "Отмена",
|
|
2105
|
-
"channels.editorTitle": "Канал",
|
|
2106
|
-
"channels.editorSaveNote": "Изменения вступят в силу после «Сохранить» внизу карточки",
|
|
2107
|
-
"channels.displayName": "Название",
|
|
2108
|
-
"channels.apiUrl": "Адрес API",
|
|
2109
|
-
"channels.apiKey": "Ключ API",
|
|
2110
|
-
"channels.keyReplaceHint": "Задан — введите новый, чтобы заменить",
|
|
2111
|
-
"channels.keyMissingHint": "Введите ключ",
|
|
2112
|
-
"channels.keyClear": "Очистить ключ",
|
|
2113
|
-
"channels.modelCatalogTitle": "Каталог моделей",
|
|
2114
|
-
"channels.noModelsHint": "Моделей пока нет: нажмите «Найти» для списка кандидатов или добавьте вручную; псевдоним по умолчанию равен id модели и его можно менять.",
|
|
2115
|
-
"channels.detect": "Найти снова",
|
|
2116
|
-
"channels.detecting": "Ищем…",
|
|
2117
|
-
"channels.detectSuccess": "Связь есть ✓ · кандидатов: {n}",
|
|
2118
|
-
"channels.detectFailed": "Ошибка поиска: {error}",
|
|
2119
|
-
"channels.detectOk": "API отвечает",
|
|
2120
|
-
"channels.modelAliasLabel": "Псевдоним (отображается)",
|
|
2121
|
-
"channels.modelIdLabel": "id модели у провайдера",
|
|
2122
|
-
"channels.generated": "Сгенерировано: {n}",
|
|
2123
|
-
"channels.unknownProtocol": "Протокол неизвестен — пробуем универсальный OpenAI",
|
|
2124
|
-
"channels.removeModel": "Удалить модель",
|
|
2125
|
-
"channels.manualAddPlaceholder": "id модели, например qwen-image",
|
|
2126
|
-
"channels.addModelConfirm": "Добавить",
|
|
2127
|
-
"channels.copyFrom": "Скопировать из канала…",
|
|
2128
|
-
"channels.copyApply": "Копировать",
|
|
2129
|
-
"channels.candidatesTitle": "Кандидаты (нажмите, чтобы добавить)",
|
|
2130
|
-
"channels.deleteThisChannel": "Удалить этот канал",
|
|
2131
|
-
"channels.setDefault": "Сделать каналом по умолчанию",
|
|
2132
|
-
"channels.presetPickerTitle": "Добавить провайдера",
|
|
2133
|
-
"channels.presetPickerHint": "Выберите встроенного провайдера — останется ввести только ключ API",
|
|
2134
|
-
"channels.presetCustomHint": "Свой адрес, ключ и каталог моделей",
|
|
2135
|
-
"channels.presetLoadFailed": "Не удалось загрузить провайдеров: {error}",
|
|
2136
|
-
"canvas.skills.fileNode": "Узел файла",
|
|
2137
|
-
"canvas.skills.addFileNode": "Добавить узел файла",
|
|
2138
|
-
"canvas.skills.emptyFileNode": "Нажмите, чтобы загрузить файл",
|
|
2139
|
-
"canvas.skills.fileMenuUpload": "Загрузить файл",
|
|
2140
|
-
"canvas.skills.fileDropHint": "Перетащите файл сюда для загрузки",
|
|
2141
|
-
"canvas.skills.fileDropSub": "PDF / Office / текст / изображения, до 50 МБ",
|
|
2142
|
-
"canvas.skills.fileSizeUnknown": "Размер неизвестен",
|
|
2143
|
-
"canvas.skills.filePreviewUnavailable": "Для этого формата нет предпросмотра — скачайте файл или запустите навык",
|
|
2144
|
-
"canvas.skills.filePreviewLoading": "Загружаем предпросмотр…",
|
|
2145
|
-
"canvas.skills.fileDownload": "Скачать файл",
|
|
2146
|
-
"canvas.skills.fileOpen": "Открыть системным приложением",
|
|
2147
|
-
"canvas.skills.fileKind.text": "Текст",
|
|
2148
|
-
"canvas.skills.fileKind.pdf": "PDF",
|
|
2149
|
-
"canvas.skills.fileKind.image": "Изображение",
|
|
2150
|
-
"canvas.skills.fileKind.office": "Документ",
|
|
2151
|
-
"canvas.skills.fileKind.archive": "Архив",
|
|
2152
|
-
"canvas.skills.fileKind.audio": "Аудио",
|
|
2153
|
-
"canvas.skills.fileKind.video": "Видео",
|
|
2154
|
-
"canvas.skills.fileKind.other": "Файл",
|
|
2155
|
-
"canvas.skills.fileTooLarge": "Файл превышает лимит {size} МБ",
|
|
2156
|
-
"canvas.skills.fileTypeBlocked": "Файлы {ext} не загружаются из соображений безопасности",
|
|
2157
|
-
"canvas.skills.fileUploadFailed": "Не удалось загрузить: {message}",
|
|
2158
|
-
"canvas.preview.expand": "Открыть предпросмотр",
|
|
2159
|
-
"canvas.preview.close": "Закрыть предпросмотр",
|
|
2160
|
-
"canvas.preview.copy": "Скопировать содержимое",
|
|
2161
|
-
"canvas.preview.copied": "Скопировано",
|
|
2162
|
-
"canvas.preview.openTab": "Открыть в новой вкладке",
|
|
2163
|
-
"canvas.preview.retry": "Повторить",
|
|
2164
|
-
"canvas.preview.failed": "Не удалось прочитать предпросмотр: {message}",
|
|
2165
|
-
"canvas.preview.empty": "Файл пуст",
|
|
2166
|
-
"canvas.preview.textTruncated": "Большой файл — показаны первые {chars} символов",
|
|
2167
|
-
"canvas.preview.tableTruncated": "Большая таблица — показаны первые {rows} строк",
|
|
2168
|
-
"canvas.preview.archiveTruncated": "Много записей — показаны первые {count}",
|
|
2169
|
-
"canvas.preview.docTruncated": "Длинный документ — показаны первые {blocks} блоков",
|
|
2170
|
-
"canvas.preview.slidesTruncated": "Большая презентация — показаны первые {count} слайдов",
|
|
2171
|
-
"canvas.preview.slideOf": "Слайд {page}",
|
|
2172
|
-
"canvas.preview.rendered": "Рендер",
|
|
2173
|
-
"canvas.preview.source": "Исходник",
|
|
2174
|
-
"canvas.preview.pdfFallback": "В этой среде PDF не отображается встроенно — скачайте файл",
|
|
2175
|
-
"canvas.preview.pdfHeuristic": "Текст PDF извлекается эвристически; сложная вёрстка может потерять порядок",
|
|
2176
|
-
"canvas.preview.reason.unsupported": "В этом формате нет читаемого содержимого — скачайте файл или превратите его в узел изображения или текста для навыка",
|
|
2177
|
-
"canvas.preview.reason.unreadable": "Из файла не удалось извлечь текст (скан или необычная кодировка); преобразуйте его в узел изображения для визуальной модели",
|
|
2178
|
-
"canvas.preview.doubleClick": "Двойной щелчок открывает предпросмотр",
|
|
2179
|
-
"canvas.skills.button": "Навык",
|
|
2180
|
-
"canvas.skills.menuTitle": "Запустить навык",
|
|
2181
|
-
"canvas.skills.runOn": "Запустить навык на «{name}»",
|
|
2182
|
-
"canvas.skills.pickerTitle": "Выберите навык",
|
|
2183
|
-
"canvas.skills.searchPlaceholder": "Поиск навыков…",
|
|
2184
|
-
"canvas.skills.groupBuiltin": "Встроенные действия",
|
|
2185
|
-
"canvas.skills.groupExternal": "Локальные навыки",
|
|
2186
|
-
"canvas.skills.emptyExternal": "Локальных навыков нет — установите их в ~/.dsh/skills и обновите",
|
|
2187
|
-
"canvas.skills.empty": "Навыки недоступны",
|
|
2188
|
-
"canvas.skills.loading": "Загружаем список навыков…",
|
|
2189
|
-
"canvas.skills.tierLight": "Быстро",
|
|
2190
|
-
"canvas.skills.tierHeavy": "Долгая задача",
|
|
2191
|
-
"canvas.skills.accepts": "Работает с: {types}",
|
|
2192
|
-
"canvas.skills.incompatible": "Навык не применим к этому типу узла",
|
|
2193
|
-
"canvas.skills.disabled": "Навыки холста отключены в настройках плагина",
|
|
2194
|
-
"canvas.skills.noRegistry": "В этом хосте нет реестра навыков (ctx.skills) — доступны только встроенные действия",
|
|
2195
|
-
"canvas.skills.registryFailed": "Не удалось получить список навыков: {message}",
|
|
2196
|
-
"canvas.skills.needAgent": "Нужен агентный рантайм хоста, которого нет в этой сборке DSH — долгие задачи недоступны",
|
|
2197
|
-
"canvas.skills.unknown": "Такого навыка больше нет",
|
|
2198
|
-
"canvas.skills.canvasMissing": "Холст не найден — обновите страницу и повторите",
|
|
2199
|
-
"canvas.skills.noInput": "У этого узла нет данных для обработки",
|
|
2200
|
-
"canvas.skills.noChat": "Быстрым навыкам нужна чат-модель: Настройки → Плагины → ИИ-генерация → Улучшение промпта",
|
|
2201
|
-
"canvas.skills.noDescription": "(описание не указано)",
|
|
2202
|
-
"canvas.skills.externalName": "{name}",
|
|
2203
|
-
"canvas.skills.externalSystem": "Вы выполняете навык «{name}». Строго следуйте его инструкциям для входа ниже, отвечайте на языке входа и выводите только результат — не пересказывайте инструкции.",
|
|
2204
|
-
"canvas.skills.externalHeader": "Примените навык «{name}» к данным ниже.",
|
|
2205
|
-
"canvas.skills.externalHeavyCost": "Это долгая задача: запускается безголовый агент и может израсходовать много квоты модели.",
|
|
2206
|
-
"canvas.skills.extraInstruction": "Дополнительное требование:",
|
|
2207
|
-
"canvas.skills.inputsHeader": "Входные данные:",
|
|
2208
|
-
"canvas.skills.inputsEmpty": "(читаемого текста нет — работайте по приложенным изображениям)",
|
|
2209
|
-
"canvas.skills.needInstruction": "Введите своё указание для обработки",
|
|
2210
|
-
"canvas.skills.needImage": "Этому навыку нужен узел изображения",
|
|
2211
|
-
"canvas.skills.needText": "Этому навыку нужен текстовый узел с содержимым",
|
|
2212
|
-
"canvas.skills.fileMissing": "Файловый ресурс отсутствует или удалён",
|
|
2213
|
-
"canvas.skills.extractFailed": "Из этого файла не удалось извлечь содержимое",
|
|
2214
|
-
"canvas.skills.nothingToRead": "Читаемого содержимого не найдено",
|
|
2215
|
-
"canvas.skills.truncated": "Содержимое обрезано до {count} символов",
|
|
2216
|
-
"canvas.skills.tooManyImages": "Изображений больше {count} — обработаны только первые",
|
|
2217
|
-
"canvas.skills.extractNodeTitle": "Содержимое «{name}»",
|
|
2218
|
-
"canvas.skills.summaryHead": "Собрано узлов-источников: {count}",
|
|
2219
|
-
"canvas.skills.describeAsk": "Опишите эти изображения ({count}).",
|
|
2220
|
-
"canvas.skills.polishNodeTitle": "Результат обработки ({style})",
|
|
2221
|
-
"canvas.skills.skillMissing": "Навык «{name}» не установлен. Сначала установите его (например, попросите агента DSH установить https://github.com/ningzimu/image-to-editable-ppt-skill) и повторите.",
|
|
2222
|
-
"canvas.skills.agentFailed": "Не удалось создать безголового агента — проверьте модель и пресет агента",
|
|
2223
|
-
"canvas.skills.needModel": "Хост не публикует модель по умолчанию (agent-default-model), поэтому долгая задача не может запустить агента. Выберите модель по умолчанию в «Настройки → Общие» и повторите.",
|
|
2224
|
-
"canvas.skills.noOutputFile": "Навык не создал файл; ответ агента сохранён текстовым узлом",
|
|
2225
|
-
"canvas.skills.heavyIntro": "Вы выполняете навык «{name}» для визуального холста. Пройдите всю процедуру строго по документации, не пропуская шагов.",
|
|
2226
|
-
"canvas.skills.heavyBodyHeader": "Инструкции навыка:",
|
|
2227
|
-
"canvas.skills.heavyInputsHeader": "Входные файлы задачи (абсолютные пути):",
|
|
2228
|
-
"canvas.skills.heavyOutputHeader": "Запишите итоговый артефакт в этот каталог: {dir}",
|
|
2229
|
-
"canvas.skills.heavyRules": "Требования:\n1. Все промежуточные файлы держите в рабочем каталоге; итоговый артефакт — только в каталоге выше.\n2. По завершении коротко ответьте: имена файлов, успех, замечания.",
|
|
2230
|
-
"canvas.skills.heavyAsk": "Выполните навык «{name}».",
|
|
2231
|
-
"canvas.skills.heavyAskInputs": "Каталог входных файлов: {dir}",
|
|
2232
|
-
"canvas.skills.heavyAskOutput": "Каталог вывода: {dir}",
|
|
2233
|
-
"canvas.skills.heavyAskLoadSkill": "(Если инструкций навыка нет в контексте, сначала загрузите их по имени «{name}».)",
|
|
2234
|
-
"canvas.skills.stageQueued": "В очереди",
|
|
2235
|
-
"canvas.skills.stagePreparing": "Готовим входные файлы",
|
|
2236
|
-
"canvas.skills.stageReading": "Читаем содержимое узлов",
|
|
2237
|
-
"canvas.skills.stageRunning": "Навык выполняется",
|
|
2238
|
-
"canvas.skills.stageCollecting": "Собираем артефакты",
|
|
2239
|
-
"canvas.skills.stageDone": "Готово",
|
|
2240
|
-
"canvas.skills.stageCancelled": "Отменено",
|
|
2241
|
-
"canvas.skills.stagePrepared": "Подготовлено входных файлов: {count}",
|
|
2242
|
-
"canvas.skills.stageArtifacts": "Выполняется — создано файлов: {count}",
|
|
2243
|
-
"canvas.skills.runElapsed": "Прошло",
|
|
2244
|
-
"canvas.skills.runRetry": "Повторить",
|
|
2245
|
-
"canvas.skills.runStarted": "Навык «{name}» запущен",
|
|
2246
|
-
"canvas.skills.runDone": "Навык завершён — новых узлов: {count}",
|
|
2247
|
-
"canvas.skills.runFailed": "Навык завершился ошибкой: {message}",
|
|
2248
|
-
"canvas.skills.runCancelled": "Запуск навыка отменён",
|
|
2249
|
-
"canvas.skills.cancel": "Отменить запуск",
|
|
2250
|
-
"canvas.skills.cancelling": "Отменяем…",
|
|
2251
|
-
"canvas.skills.confirmTitle": "Запустить долгую задачу",
|
|
2252
|
-
"canvas.skills.confirmBody": "«{name}» запускает безголового агента на этой машине. Это может занять от нескольких до десятков минут и израсходовать много квоты модели.",
|
|
2253
|
-
"canvas.skills.confirmCost": "Стоимость: {hint}",
|
|
2254
|
-
"canvas.skills.confirmRequires": "Требуется: {list}",
|
|
2255
|
-
"canvas.skills.confirmRun": "Запустить",
|
|
2256
|
-
"canvas.skills.confirmCancel": "Не сейчас",
|
|
2257
|
-
"canvas.skills.batchTitle": "Пакетный запуск",
|
|
2258
|
-
"canvas.skills.batchNote": "Запуск по одному узлу подряд (узлов: {count})",
|
|
2259
|
-
"canvas.skills.batchTooMany": "Не более {count} узлов за запуск",
|
|
2260
|
-
"canvas.skills.sourceBadge": "Результат навыка",
|
|
2261
|
-
"canvas.skills.sourceTip": "Создано навыком «{name}» из узлов-источников: {count}",
|
|
2262
|
-
"canvas.skills.rerun": "Запустить тот же навык снова",
|
|
2263
|
-
"canvas.skills.history": "История запусков",
|
|
2264
|
-
"canvas.skills.historyEmpty": "Запусков пока нет",
|
|
2265
|
-
"canvas.skills.needConfirm": "Этот навык требует подтверждения",
|
|
2266
|
-
"canvas.skills.polish": "Обработка текста",
|
|
2267
|
-
"canvas.skills.polishDesc": "Переписать текстовый узел в выбранном стиле: формальнее / разговорнее / короче / подробнее или своё указание",
|
|
2268
|
-
"canvas.skills.describe": "Описание изображения",
|
|
2269
|
-
"canvas.skills.describeDesc": "Прочитать изображение визуальной моделью и создать текстовый узел (годится как промпт)",
|
|
2270
|
-
"canvas.skills.extract": "Извлечь содержимое",
|
|
2271
|
-
"canvas.skills.extractDesc": "Извлечь текст из файла или изображения в текстовый узел (текст / код / OOXML / PDF)",
|
|
2272
|
-
"canvas.skills.ppt": "Изображение → редактируемый PPT",
|
|
2273
|
-
"canvas.skills.pptDesc": "Запускает локальный навык image-to-editable-ppt и создаёт редактируемый .pptx как узел файла",
|
|
2274
|
-
"canvas.skills.pptCost": "Долгая задача: презентация на 10 страниц может израсходовать много квоты; одна страница часто занимает 10+ минут",
|
|
2275
|
-
"canvas.skills.pptRequires": "Нужен установленный навык image-to-editable-ppt, а также токен OCR и образный бэкенд по его документации",
|
|
2276
|
-
"canvas.polish.button": "ИИ-обработка",
|
|
2277
|
-
"canvas.polish.title": "ИИ-обработка текста",
|
|
2278
|
-
"canvas.polish.formal": "Формальнее",
|
|
2279
|
-
"canvas.polish.casual": "Разговорнее",
|
|
2280
|
-
"canvas.polish.shorter": "Короче",
|
|
2281
|
-
"canvas.polish.expand": "Подробнее",
|
|
2282
|
-
"canvas.polish.custom": "Своё",
|
|
2283
|
-
"canvas.polish.customPlaceholder": "напр. переписать как пост для соцсети с эмодзи и хэштегами",
|
|
2284
|
-
"canvas.polish.run": "Обработать",
|
|
2285
|
-
"canvas.polish.previewTitle": "Было / стало",
|
|
2286
|
-
"canvas.polish.apply": "Применить",
|
|
2287
|
-
"canvas.polish.revert": "Вернуть",
|
|
2288
|
-
"canvas.polish.applied": "Результат применён",
|
|
2289
|
-
"canvas.polish.directHint": "Текущая настройка: результат сразу заменяет текст (в настройках можно включить предпросмотр)",
|
|
2290
|
-
"settings.skillsEnabled": "Навыки холста",
|
|
2291
|
-
"settings.skillsEnabledHint": "Включить систему навыков на узлах бесконечного холста (встроенные действия и локальные навыки)",
|
|
2292
|
-
"settings.allowHeavySkills": "Разрешить долгие задачи",
|
|
2293
|
-
"settings.allowHeavySkillsHint": "Долгие задачи запускают безголового агента DSH на этой машине — это медленно и расходует квоту. Выключите, чтобы оставить только быстрые навыки.",
|
|
2294
|
-
"settings.skillAllowlist": "Белый список навыков",
|
|
2295
|
-
"settings.skillAllowlistHint": "Имена навыков через запятую или с новой строки; пусто — разрешены все локальные навыки",
|
|
2296
|
-
"settings.skillOutputDir": "Рабочий каталог долгих задач",
|
|
2297
|
-
"settings.skillOutputDirHint": "Рабочий каталог безголовых агентов (пусто — canvas/runs в каталоге данных)",
|
|
2298
|
-
"settings.skillHeavyTimeout": "Таймаут долгой задачи (минуты)",
|
|
2299
|
-
"settings.skillHeavyTimeoutHint": "Через это время долгая задача отменяется; 0 — без таймаута",
|
|
2300
|
-
"settings.skillAgentPreset": "Пресет агента для долгих задач",
|
|
2301
|
-
"settings.skillAgentPresetHint": "Пресет агента для долгих задач; пусто — пресет хоста по умолчанию",
|
|
2302
|
-
"settings.skillProbe": "Проверить окружение навыков",
|
|
2303
|
-
"settings.skillProbing": "Проверяем…",
|
|
2304
|
-
"settings.skillProbeOk": "Доступно навыков: {count} · безголовый агент: {agent}",
|
|
2305
|
-
"settings.skillProbeAgentOn": "доступен",
|
|
2306
|
-
"settings.skillProbeAgentOff": "недоступен",
|
|
2307
|
-
"settings.skillsHint": "Совет: установите навыки вроде image-to-editable-ppt в ~/.dsh/skills, чтобы превращать изображения в редактируемые презентации прямо на холсте.",
|
|
2308
|
-
"canvas.skills.libraryButton": "Библиотека навыков",
|
|
2309
|
-
"canvas.skills.libraryTitle": "Библиотека навыков",
|
|
2310
|
-
"canvas.skills.libraryInstalled": "Установленные навыки ({count})",
|
|
2311
|
-
"canvas.skills.libraryEmpty": "Навыков пока нет. Установите по ссылке на репозиторий или загрузите архив.",
|
|
2312
|
-
"canvas.skills.libraryRoot": "Каталог установки: {root}",
|
|
2313
|
-
"canvas.skills.libraryInstall": "Установка по ссылке",
|
|
2314
|
-
"canvas.skills.libraryInstallHint": "Репозиторий или папка GitHub, отдельный SKILL.md, любой git-адрес или ссылка на zip; несколько ссылок — с новой строки. Хост подхватывает установку без перезапуска.",
|
|
2315
|
-
"canvas.skills.libraryUrlPlaceholder": "https://github.com/owner/repo или …/blob/main/SKILL.md",
|
|
2316
|
-
"canvas.skills.libraryUpload": "Загрузить архив",
|
|
2317
|
-
"canvas.skills.libraryUploadHint": "Загрузите zip с файлом SKILL.md (≤50 МБ): он распакуется в ~/.dsh/skills.",
|
|
2318
|
-
"canvas.skills.libraryDropzone": "Нажмите или перетащите zip-архив сюда",
|
|
2319
|
-
"canvas.skills.libraryForce": "Заменить навык с тем же именем",
|
|
2320
|
-
"canvas.skills.libraryInstallAction": "Установить",
|
|
2321
|
-
"canvas.skills.libraryInstalling": "Установка…",
|
|
2322
|
-
"canvas.skills.libraryRemove": "Удалить",
|
|
2323
|
-
"canvas.skills.libraryRemoving": "Удаление…",
|
|
2324
|
-
"canvas.skills.libraryRemoveConfirm": "Удалить навык «{name}»? Его папка будет стёрта.",
|
|
2325
|
-
"canvas.skills.libraryInstalledToast": "Установлено: {names}",
|
|
2326
|
-
"canvas.skills.libraryFailedToast": "Ошибка установки: {message}",
|
|
2327
|
-
"canvas.skills.libraryRemovedToast": "Удалено: {name}",
|
|
2328
|
-
"canvas.skills.libraryUnavailable": "Этот хост не управляет библиотекой навыков",
|
|
2329
|
-
"canvas.skills.libraryReload": "Обновить",
|
|
2330
|
-
"canvas.skills.libraryOpenFolder": "Открыть каталог",
|
|
2331
|
-
"canvas.skills.installNow": "Установить",
|
|
2332
|
-
"canvas.skills.needsInstall": "Не установлен",
|
|
2333
|
-
"canvas.skills.missingHint": "Навык «{name}» ещё не установлен — установите его, чтобы использовать",
|
|
2334
|
-
"canvas.skills.installArchiveFailed": "Ошибка установки архива: {message}",
|
|
2335
|
-
"canvas.skills.libraryIssueFrontmatter": "Нет YAML frontmatter (нужны name и description), поэтому реестр навыков хоста его не загружает и узлы не могут его запустить",
|
|
2336
|
-
"canvas.skills.libraryIssueName": "Имя в frontmatter «{name}» не в kebab-case (строчные буквы, цифры и дефисы), поэтому реестр навыков хоста его игнорирует и узлы не могут его запустить",
|
|
2337
|
-
"canvas.skills.libraryIssueDescription": "В frontmatter файла SKILL.md нет description (обязательно), поэтому реестр навыков хоста его не загружает и узлы не могут его запустить",
|
|
2338
|
-
"canvas.skills.libraryIssueInvocation": "Запись disable-model-invocation / user-invocable не разбирается, поэтому реестр навыков хоста его игнорирует и узлы не могут его запустить",
|
|
2339
|
-
"canvas.skills.libraryIssueUserOnly": "Навык объявляет disable-model-invocation: он доступен только человеку, поэтому узлы холста не могут его запустить",
|
|
2340
|
-
"canvas.skills.configOpen": "Настроить",
|
|
2341
|
-
"canvas.skills.configSave": "Сохранить",
|
|
2342
|
-
"canvas.skills.configSaveApply": "Сохранить и применить",
|
|
2343
|
-
"canvas.skills.configSaving": "Сохранение…",
|
|
2344
|
-
"canvas.skills.configApplying": "Применение…",
|
|
2345
|
-
"canvas.skills.configSaved": "Сохранено",
|
|
2346
|
-
"canvas.skills.configSaveFailed": "Не удалось сохранить",
|
|
2347
|
-
"canvas.skills.configApplied": "Сохранено и применено",
|
|
2348
|
-
"canvas.skills.configApplyFailed": "Не удалось применить",
|
|
2349
|
-
"canvas.skills.configClear": "Очистить",
|
|
2350
|
-
"canvas.skills.configSecretSet": "Задан (пустое поле оставит как есть)",
|
|
2351
|
-
"canvas.skills.configSecretUnset": "Не задан",
|
|
2352
|
-
"canvas.skills.configMissingHint": "Требуется настройка: {fields}",
|
|
2353
|
-
"canvas.skills.configGo": "Настроить",
|
|
2354
|
-
"canvas.skills.configSourceSkill": "Поля объявлены собственным skill.config.json навыка",
|
|
2355
|
-
"canvas.skills.configSourcePlugin": "Поля взяты из встроенного рецепта плагина для известного навыка (собственное объявление навыка важнее)",
|
|
2356
|
-
"canvas.skills.configHeader": "Уже настроено:",
|
|
2357
|
-
"canvas.skills.configUnwritable": "Этот хост не может записывать настройки, поэтому настройка навыков недоступна",
|
|
2358
|
-
"canvas.skills.configIssueVersion": "В skill.config.json указана версия, отличная от 1, поэтому объявление проигнорировано",
|
|
2359
|
-
"canvas.skills.configIssueUnreadable": "skill.config.json не удалось разобрать (ошибка JSON), поэтому объявление проигнорировано",
|
|
2360
|
-
"canvas.skills.configIssueEmpty": "В skill.config.json нет пригодных полей или шагов, поэтому он проигнорирован"
|
|
2361
|
-
}
|
|
2362
|
-
};
|
|
2363
|
-
/** Normalize any DSH locale id onto a shipped dictionary (unknown → English). */
|
|
2364
|
-
function imageGenLanguageOf(value) {
|
|
2365
|
-
const head = typeof value === "string" ? value.trim().toLowerCase().split(/[-_]/)[0] ?? "" : "";
|
|
2366
|
-
return head === "zh" || head === "ru" ? head : "en";
|
|
2367
|
-
}
|
|
2368
|
-
/**
|
|
2369
|
-
* Translate one key with optional `{name}` template params, falling back to
|
|
2370
|
-
* Chinese (the key source) and finally to the key itself.
|
|
2371
|
-
* @param key - dictionary key.
|
|
2372
|
-
* @param values - optional `{name}` substitutions.
|
|
2373
|
-
* @param language - shipped language to resolve against.
|
|
2374
|
-
* @returns the rendered copy.
|
|
2375
|
-
*/
|
|
2376
|
-
function interpolate(key, values, language) {
|
|
2377
|
-
const text = IMAGEGEN_DICTIONARIES[language][key] ?? zh[key] ?? key;
|
|
2378
|
-
if (values === void 0) return text;
|
|
2379
|
-
let rendered = text;
|
|
2380
|
-
for (const [name, value] of Object.entries(values)) rendered = rendered.replaceAll(`{${name}}`, String(value));
|
|
2381
|
-
return rendered;
|
|
2382
|
-
}
|
|
2383
|
-
//#endregion
|
|
2384
|
-
export { imageGenLanguageOf as n, interpolate as r, IMAGEGEN_DICTIONARIES as t };
|