export default { meta: { title: "无限画布", description: "一个无限画布创作工具", }, theme: { toggle: "切换主题" }, common: { cancel: "取消", save: "保存", edit: "编辑", done: "完成", delete: "删除", copy: "复制", copied: "已复制", details: "详情", addToAssets: "加入我的资产", addedToAssets: "已加入我的资产", copyPrompt: "复制提示词", promptCopied: "提示词已复制", created: "创建:{{date}}", updated: "更新:{{date}}", all: "全部", view: "查看", download: "下载", upload: "上传", requestCanceled: "请求已取消", durationMinutes: "{{minutes}}分{{seconds}}秒", durationSeconds: "{{seconds}}秒", imageReadFailed: "读取图片失败", }, settingsPanels: { common: { auto: "自动", low: "低", medium: "中", high: "高", xhigh: "极高" }, image: { title: "图像设置", quality: "质量", size: "尺寸", align16: "16 倍数对齐", align16Hint: "输入完成后自动向上补成 16 的倍数", aspectRatio: "宽高比", transparent: "透明背景", transparentHint: "开启后生成无背景的透明图像(仅部分模型可用)", count: "生成张数", images: "{{count}} 张" }, video: { title: "视频设置", quality: "清晰度", size: "尺寸", seconds: "秒数", resolution: "分辨率", ratio: "比例", duration: "时长", smart: "智能", output: "输出", generateAudio: "生成声音", watermark: "添加水印", adaptive: "自适应", sizes: { landscape: "横屏", portrait: "竖屏", square: "方形", widescreen: "宽屏", tall: "长图", auto: "自动" }, ratios: { landscape: "横屏", portrait: "竖屏", square: "方形", standardLandscape: "标准横屏", standardPortrait: "标准竖屏", cinematic: "宽银幕", adaptive: "自适应" } }, audio: { title: "音频设置", voice: "声音", format: "格式", speed: "语速", instructions: "声音指令", instructionsPlaceholder: "例如:自然、温暖、适合旁白。" }, text: { title: "文本设置", reasoning: "推理强度" }, model: { select: "选择模型", assign: "请先在渠道里为{{capability}}指定模型", noMatch: "暂无匹配的{{capability}}模型", addFirst: "请先到配置里添加渠道和模型", capabilities: { image: "生图", video: "视频", text: "文本", audio: "音频" } }, }, generation: { pending: ["正在创建图片", "马上就好了", "再等等", "正在整理细节"] }, imageReferences: { label: "图片{{index}}", separator: "、", promptPrefix: "参考图片编号:{{labels}}。请按这些编号理解提示词中的图片引用。\n\n{{prompt}}" }, seedance: { autoMatch: "自动匹配", separator: "、", references: { image: "图片{{index}}", video: "视频{{index}}", audio: "音频{{index}}" }, promptPrefix: "参考资产编号:{{labels}}。请按这些编号理解提示词中的图片、视频和音频引用。\n\n{{prompt}}", referenceHint: "参考视频需为 mp4/mov,H.264/H.265,FPS 24-60;含真人人脸资产请使用火山授权 asset:// 资产。", errors: { format: "{{label}} 仅支持 mp4/mov 格式", size: "{{label}} 超过 200MB,请压缩后再上传", duration: "{{label}} 时长需要在 2-15 秒之间", dimensions: "{{label}} 宽高需要在 300-6000px 之间", ratio: "{{label}} 宽高比需要在 0.4-2.5 之间", pixels: "{{label}} 总像素需要在 409600-8295044 之间", totalDuration: "Seedance 参考视频总时长不能超过 15 秒" } }, modelPlugin: { pollTimeout: "插件轮询超时,请检查调用脚本或稍后重试", executionFailed: "模型调用脚本执行失败:{{message}}", noImages: "模型调用脚本没有返回图片", variables: { prompt: "用户输入的提示词(已拼接系统提示词)", images: "参考图,dataURL 数组(改图 / 图生视频时有值)", messages: "对话消息数组,含系统消息", params: "生成参数:生图 {size,quality,count}、视频 {seconds,size,resolution,ratio,generateAudio,watermark}、音频 {voice,format,speed,instructions}", model: "模型名称(不含渠道前缀)", baseUrl: "渠道接口地址(原样,未拼 /v1)", apiKey: "渠道 API Key,请求头里自己带上", systemPrompt: "系统提示词原文", reasoningEffort: "文本推理强度;auto 表示由脚本决定是否传递", http: "便捷请求:http.post(path, body, {headers,params,responseType})、http.get(path, opts)、http.url(path);默认带 Authorization: Bearer apiKey,可用 headers 覆盖;path 相对时按 baseUrl 拼 /v1", request: "原始请求 request({ method, url, headers, params, data, responseType }),不加任何默认头,鉴权头自己写;url 相对时按 baseUrl 拼接(不加 /v1)", poll: "轮询 poll(request, extract, {intervalMs,timeoutMs}),extract 返回真值即结束", sleep: "sleep(ms) 延时", signal: "取消信号,可透传给 http/request", onDelta: "onDelta(text) 推送流式文本(文本模型)" }, returns: { image: "文生图(images 为空)和图生图(images 有参考图)接口不同,脚本需自行区分;返回图片 URL 或 dataURL 字符串,也可返回它们的数组,或 [{ dataUrl }] / [{ url }] / [{ b64_json }]", video: "脚本内部完成轮询,返回 { url } 或 { blob } 或视频 URL 字符串", audio: "返回 Blob,或 base64 / dataURL 字符串,或 { b64_json } / { data } / { url }", text: "用 onDelta(text) 推送流式,最终 return 完整文本字符串" }, templates: { openai: "OpenAI 规范", gemini: "Gemini 规范", imageOpenai: "生图 / 改图:两者接口不同,用 images 是否为空来区分。", availableImage: "可用:prompt、images(dataURL[])、params{size,quality,count}、model、baseUrl、apiKey", textToImage: "文生图:/images/generations(JSON)", imageToImage: "图生图:/images/edits(multipart/form-data,参考图作为文件上传)", formDataHeader: "不要手动设 Content-Type,交给浏览器带 boundary", imageGemini: "Gemini 文生图 / 图生图:都走 generateContent,参考图放进 parts 的 inline_data。", availableImageGemini: "可用:prompt、images(dataURL[])、model、baseUrl、apiKey", videoOpenai: "视频(脚本内部自行轮询)。可用:prompt、images(dataURL[])、params{seconds,size,resolution,ratio}", videoGemini: "Gemini(Veo) 视频:predictLongRunning 提交,轮询 operation 拿视频 URI。", availableVideoGemini: "可用:prompt、images(dataURL[])、params、model、baseUrl、apiKey", geminiNoVideoUri: "Gemini 未返回视频 URI", audioOpenai: "音频 TTS。可用:prompt、params{voice,format,speed,instructions}、model", audioGemini: "Gemini TTS:generateContent + AUDIO 模态,返回 base64 PCM(音频数据在 inlineData.data)。", availableAudioGemini: "可用:prompt、params{voice}、model、baseUrl、apiKey", geminiNoAudio: "Gemini 未返回音频", textOpenai: "文本对话(OpenAI Responses 接口)。可用:messages([{role,content}])、systemPrompt、model、reasoningEffort", textGemini: "Gemini 文本:generateContent,system 消息放 systemInstruction。", availableTextGemini: "可用:messages([{role,content}])、systemPrompt、model、baseUrl、apiKey" }, }, apiErrors: { requestFailed: "请求失败", requestCanceled: "请求已取消", baseUrlRequired: "请先配置 Base URL", apiKeyRequired: "请先配置 API Key", authenticationFailed: "鉴权失败,请检查 API Key、套餐权限或模型权限", rateLimited: "请求被限流或额度不足,请稍后重试", notFound: "接口地址不存在(404),请检查 Base URL 和模型选择", badGateway: "网关错误(502),接口服务暂时不可用,请稍后重试", serviceBusy: "服务繁忙(503),请稍后重试", httpFailed: "请求失败(HTTP {{status}}),请检查 Base URL 和 API Key 是否正确", htmlError: "服务返回了 HTML 错误页面({{preview}})", audioModelRequired: "请先配置音频模型", audioGenerationFailed: "音频生成失败", scriptNoAudio: "模型调用脚本没有返回音频", geminiAudioUnsupported: "Gemini 调用格式暂不支持音频生成,请使用 OpenAI 格式渠道", invalidImageSizeFormat: "图像尺寸格式不支持,请使用 auto、9:16 或 1024x1024", positiveImageRatio: "图像比例必须是正数,例如 9:16", imageRatioLimit: "图像宽高比不能超过 3:1,请调整尺寸", positiveImageDimensions: "图像尺寸必须是正整数,例如 1024x1024", imageDimensionStep: "图像尺寸的宽高必须是 16 的倍数,请调整尺寸", imageEdgeLimit: "图像尺寸最长边不能超过 3840px,请调整尺寸", imagePixelLimit: "图像总像素需在 655360 到 8294400 之间,请调整尺寸", unknownImageResponse: "接口返回了未知格式的数据(字段:{{fields}}),请检查模型或接口兼容性", noImageReturned: "接口没有返回图片,请检查提示词是否触发安全审核或模型是否支持该操作", geminiRejected: "Gemini 拒绝了本次请求:{{reason}}", geminiNoImage: "Gemini 接口没有返回图片", geminiMaskUnsupported: "Gemini 调用格式暂不支持蒙版编辑", maskModelUnsupported: "蒙版编辑暂不支持该模型,请使用其他渠道", noContent: "没有返回内容", modelReadFailed: "读取模型失败", videoTimeout: "{{provider}}视频生成超时,请稍后重试", videoReferencesUnsupported: "当前视频接口不支持参考视频或参考音频,请切换到 Seedance 2.0 / 火山 Agent Plan 模型,或移除参考资产", pluginVideoExpired: "插件视频任务已失效,请重新生成", scriptNoVideo: "模型调用脚本没有返回视频", noPlayableVideo: "视频接口没有返回可播放的视频", noVideoTaskId: "视频接口没有返回任务 ID", videoTaskCreateFailed: "视频任务创建失败", videoGenerationFailed: "视频生成失败", videoTaskQueryFailed: "视频任务查询失败", seedanceAudioRequiresVisual: "Seedance 参考音频不能单独使用,请同时添加参考图或参考视频", videoPromptRequired: "请输入视频提示词,或连接参考图片/视频/音频", seedanceNoTaskId: "Seedance 接口没有返回任务 ID", seedanceTaskCreateFailed: "Seedance 任务创建失败", seedanceNoVideoUrl: "Seedance 任务成功但没有返回视频 URL", seedanceVideoTimeout: "Seedance 视频生成超时", seedanceVideoFailed: "Seedance 视频生成失败", seedanceTaskQueryFailed: "Seedance 任务查询失败", seedanceVideoDuration: "Seedance 参考视频单个时长需要在 2-15 秒之间", seedanceVideoTotalDuration: "Seedance 参考视频总时长不能超过 15 秒", seedanceAudioDuration: "Seedance 参考音频单个时长需要在 2-15 秒之间", seedanceAudioTotalDuration: "Seedance 参考音频总时长不能超过 15 秒", referenceImageReadFailed: "参考图读取失败,请换一张图片或重新上传", invalidReferenceVideo: "参考视频必须是公网 URL、资产 ID,或本地已保存的视频", invalidReferenceAudio: "参考音频必须是公网 URL、资产 ID,或本地已保存的音频", videoModelRequired: "请先配置视频模型", geminiVideoUnsupported: "Gemini 调用格式暂不支持视频生成,请使用 OpenAI 格式渠道", noVideoTask: "接口没有返回视频任务", seedanceNoTask: "Seedance 接口没有返回任务", videoDownloadFailed: "视频下载失败", localAssetReadFailed: "读取本地资产失败" }, prompts: { title: "提示词中心", library: "提示词库", total: "当前共 {{count}} 条提示词", category: "分类", tags: "标签", search: "搜索标题、内容或标签", searchTitle: "按标题查询", loadFailed: "获取提示词失败", sourceMissing: "提示词来源不存在", use: "使用此提示词", empty: "没有找到匹配的提示词", loading: "加载中...", loadMore: "继续向下滚动加载更多", end: "已经到底了", }, assets: { title: "我的资产", description: "收藏常用文本和图片,按类型、标题和标签快速查找。", search: "搜索标题、内容、标签或来源", type: "类型", export: "导出资产", import: "导入资产", add: "新增资产", edit: "编辑资产", empty: "没有找到资产", manual: "手动添加", selectImage: "请选择图片文件", updated: "资产已更新", saved: "资产已保存", textCopied: "文本已复制", noneToExport: "暂无资产可导出", imported: "已导入 {{count}} 个资产", importFailed: "导入失败,请选择有效的资产压缩包", deleted: "资产已删除", packageName: "我的资产.zip", kinds: { text: "文本", image: "图片", video: "视频" }, fields: { title: "标题", titleRequired: "请输入标题", titlePlaceholder: "给资产起一个容易检索的名字", coverUrl: "封面 URL", coverPlaceholder: "可粘贴图片 URL,也可以上传本地封面", tags: "标签", tagsPlaceholder: "输入标签后回车", source: "来源", sourcePlaceholder: "手动添加 / 画布 / 提示词库", note: "备注", optional: "可选", textContent: "文本内容", textRequired: "请输入文本内容", textPlaceholder: "保存提示词、说明文案、参考描述等文本资产", imageContent: "图片内容", }, selectImageFile: "选择图片文件", noImageSelected: "未选择图片", preview: "预览", noCover: "暂无封面", untitled: "未命名资产", noTags: "无标签", untagged: "未打标签", unknownSource: "未标注来源", details: "资产详情", deleteTitle: "删除资产", deleteConfirm: "确定删除「{{name}}」吗?删除后会从我的资产中移除。", copyText: "复制文本", downloadImage: "下载图片", downloadVideo: "下载视频", }, notFound: { title: "页面不存在", description: "这个地址没有对应的页面,可能已经移动或被合并到其他入口。", home: "返回首页", }, workbench: { logs: "生成记录", settings: "参数", prompt: "提示词", viewPrompts: "查看提示词库", viewAssets: "查看我的资产", clipboard: "剪切板", upload: "上传", adjust: "调整", generate: "开始生成", results: "生成结果", waiting: "等待 {{time}}", model: "模型", generating: "生成中", success: "成功", failed: "生成失败", retry: "重试", new: "新建", selectAll: "全选", noLogs: "暂无生成记录", deleteLogs: "删除生成记录", deleteLogsConfirm: "确定删除选中的 {{count}} 条生成记录吗?", successCount: "成功 {{count}}", failCount: "失败 {{count}}", itemCount: "{{count}} 张", untitled: "未命名", configFirst: "请先完成配置", generationFailed: "生成失败", retrySuccess: "重试成功", }, imageWorkbench: { title: "生图工作台", promptPlaceholder: "描述画面主体、风格、构图、光线和用途", references: "参考图", removeReference: "移除参考图", dropReferences: "松开即可添加参考图", noReferences: "暂无参考图,可将图片拖到这里", clipboardEmpty: "剪切板里没有可读取的图片", clipboardAdded: "已读取 {{count}} 张参考图", promptRequired: "请输入生图提示词", configIncomplete: "生图配置不完整", invalidParams: "生图参数无效", busy: "生图工作台已有任务正在运行", generated: "图片已生成", addedReference: "已加入参考图", resultTitle: "生成结果 {{count}}", source: "生图工作台", unsupportedAsset: "生图工作台只能使用文本或图片资产", missingResult: "接口没有返回图片", empty: "还没有生成图片", resultAlt: "生成结果 {{count}}", addReference: "加入参考图", }, videoWorkbench: { title: "视频创作台", promptPlaceholder: "描述镜头运动、主体动作、场景氛围和画面风格", references: "参考图", videoReferences: "参考视频", audioReferences: "参考音频", removeImage: "移除参考图", removeVideo: "移除参考视频", removeAudio: "移除参考音频", dropReferences: "松开即可上传参考资产", noImages: "暂无参考图,可拖入文件,最多 9 张", noVideos: "暂无参考视频,可拖入文件,最多 3 个", noAudio: "暂无参考音频,可拖入文件,最多 3 个,mp3/wav,单个 15MB 内", unsupportedFiles: "已忽略不支持的参考资产,请使用图片、mp4/mov 视频或 mp3/wav 音频", imageTooLarge: "已忽略超过 30MB 的参考图", videoTooLarge: "已忽略超过 200MB 的参考视频", audioTooLarge: "已忽略超过 15MB 的参考音频", audioDurationInvalid: "已忽略不符合时长要求的参考音频:单个 2-15 秒,总时长不超过 15 秒", clipboardEmpty: "剪切板里没有可读取的图片", clipboardAdded: "已读取 {{count}} 张参考图", promptRequired: "请输入视频提示词", referenceError: "{{error}}。{{hint}}", invalidParams: "视频生成参数无效", busy: "视频工作台已有任务正在运行", generated: "视频已生成", timeout: "视频生成超时,请稍后重试", resultTitle: "生成视频", source: "视频创作台", empty: "还没有生成视频", }, canvas: { defaultTitle: "无限画布 {{count}}", library: "画布库", title: "无限画布", imported: "已导入 {{count}} 个画布", importFailed: "导入失败,请选择有效的画布压缩包", opening: "正在打开画布...", loading: "正在加载画布...", exportSelected: "导出选中", deleteSelected: "删除选中", deleteAll: "删除全部", import: "导入画布", create: "新建画布", empty: "还没有画布", emptyDescription: "新建一个画布后,就可以独立保存节点、连线和画布外观。", collapsePanel: "收起面板", expandPanel: "展开面板", home: "主页", docs: "文档", projects: "我的画布", deleteCurrent: "删除当前画布", importAsset: "导入资产", exportCurrent: "导出当前画布", undo: "撤销", redo: "重做", openMenu: "打开画布菜单", renameHint: "双击修改画布名称", shortcuts: "快捷键", miniMapOpen: "打开小地图", miniMapClose: "关闭小地图", resetView: "重置视图", zoom: "放大/缩小画布", agentConnected: "Codex 已连接", agentConnecting: "Codex {{activity}}", agentDisconnected: "Codex 未连接", connecting: "连接中", openAgent: "打开本地 Codex 面板", nodeTypes: { image: "图片", text: "文本", config: "生成配置", video: "视频", audio: "音频", group: "组" }, toolbar: { move: "移动/选择", text: "文本", image: "图片", video: "视频", audio: "音频", config: "生成配置", group: "组", extensions: "扩展节点", upload: "上传资产", appearance: "画布外观", clear: "清空画布", themeMode: "主题模式", light: "浅色", dark: "深色", gridStyle: "网格样式", dots: "点", lines: "线", blank: "空白", imageInfo: "图片信息", }, project: { untitled: "未命名画布", imported: "导入画布", select: "选择 {{name}}", stats: "{{nodes}} 个节点 · {{connections}} 条连线", updated: "更新于 {{date}}", saveName: "保存名称", cancelRename: "取消重命名", export: "导出", rename: "重命名", delete: "删除", deleteTitle: "删除画布?", deleteDescription: "将删除 {{count}} 个画布,里面的节点和连线也会一起移除。", }, export: { defaultProjectName: "无限画布", defaultNodesName: "画布元素", item: "元素" }, createMenu: { fromNode: "引用该节点生成", close: "关闭", text: "文本生成", textDescription: "脚本、广告词、品牌文案", image: "图片生成", video: "视频生成", audio: "音频参考", config: "配置节点", configDescription: "模型、尺寸、数量和输入顺序", select: "选择节点", }, node: { node: "节点", untitled: "未命名节点", renameHint: "双击修改节点名称", group: "组", nodeCount: "{{count}} 个节点", generating: "生成中", failed: "生成失败", retry: "重试", missingPlugin: "缺少插件", missingPluginDescription: "节点类型“{{type}}”的插件未安装或未启用", generateImage: "用文本生图", generate: "生图", editText: "双击编辑文字", emptyImage: "空图片节点", emptyVideo: "空视频节点", emptyAudio: "空音频节点", audio: "音频", batchExpanded: "图片组已展开", batchCollapsed: "图片组已收起", setPrimary: "设为主图", }, sidePanel: { canvas: "画布", assets: "资产", prompts: "提示词库", resize: "调整左侧面板宽度", elements: "画布元素", select: "选择", searchNodes: "搜索节点", focusNode: "定位到节点", preview: "放大预览", noNodes: "画布暂无节点", clearAll: "取消全选", selected: "已选 {{count}}", exporting: "正在导出选中元素…", exportName: "画布元素-{{count}}个", exported: "已导出 {{count}} 个元素", exportFailed: "导出失败,请重试", addingAssets: "正在添加资产…", addedAssets: "已添加 {{count}} 个资产", mediaOnly: "仅支持图片或视频文件", addFailed: "添加失败,请重试", searchAssets: "搜索资产", add: "添加", noAssets: "暂无资产", inserted: "插入画布", removeAssetTitle: "移除该资产?", remove: "移除", removeAsset: "移除资产", assetRemoved: "资产已移除", searchPrompts: "搜索提示词", noPrompts: "暂无提示词", promptCopied: "已复制提示词", copyFailed: "复制失败", loadFailedRetry: "加载失败,点击重试", noMatchingPrompts: "无匹配提示词", sourceEmpty: "该来源暂无提示词", viewDetails: "查看详情", filter: { image: "图片", video: "视频", text: "文本", audio: "音频", config: "配置", group: "分组" }, }, assetPicker: { title: "选择资产", insert: "插入", search: "搜索资产", empty: "没有资产" }, imageTools: { copyPrompt: "复制提示词", copyPromptTitle: "复制生成该图片的提示词", reversePrompt: "反推提示词", reversePromptTitle: "创建反推提示词的文本和配置节点", replace: "替换图片", locked: "锁比例", free: "自由比例", lockTitle: "切换为等比缩放", freeTitle: "切换为自由比例", mask: "局部编辑", maskTitle: "添加蒙版遮罩后局部修改", crop: "裁剪", cropTitle: "裁剪并生成新节点", split: "切图", splitTitle: "按行列切分图片", upscale: "放大", upscaleTitle: "放大图片分辨率", superResolve: "超分", superResolveTitle: "AI 超分", angle: "多角度", angleTitle: "生成角度", view: "查看大图", viewTitle: "查看图片详情", more: "更多", configure: "配置快捷工具", customize: "自定义工具栏", showLabels: "显示按钮文字", description: "选择你想在图片节点编辑栏中使用的快捷工具。", preview: "节点预览", imageNode: "图片节点", quickTools: "快捷工具" }, nodeToolbar: { noPrompt: "暂无可复制的提示词", infoTitle: "查看节点信息", info: "信息", removeTitle: "移除节点", retryTitle: "重新生成", saveAsset: "存资产", downloadAudio: "下载音频", downloadVideo: "下载视频", downloadImage: "下载图片", editTextTitle: "编辑文本", editText: "编辑文字", decreaseFont: "减小字号", increaseFont: "增大字号", zoomOut: "缩小", zoomIn: "放大", uploadImage: "上传图片", replaceVideo: "替换视频", uploadVideo: "上传视频", replaceAudio: "替换音频", uploadAudio: "上传音频", nodeInfo: "节点信息", name: "名称", type: "类型", size: "尺寸", position: "位置", status: "状态", imageGroup: "图片组", imageSize: "图片大小" }, configNode: { title: "生成配置", image: "生图", text: "文本", video: "视频", audio: "音频", prompt: "提示词", references: "参考图", videoReferences: "参考视频", audioReferences: "参考音频", items: "{{count}} 个", images: "{{count}} 张", compose: "组装提示词", stop: "停止", generate: "开始生成" }, projectPage: { stopTitle: "停止生成?", stopDescription: "当前生成请求会被中断,已经生成完成的内容会保留。", stop: "停止", continue: "继续生成", configConnection: "配置节点之间不能连接", notFound: "未找到当前画布", exporting: "正在导出当前画布…", exported: "已导出当前画布", clipboardText: "剪切板文本", clipboardImageAdded: "已从剪切板添加图片", clipboardTextAdded: "已从剪切板添加文本", noTextToSave: "没有可保存的文本", canvasText: "画布文本", noVideoToSave: "没有可保存的视频", canvasVideo: "画布视频", noImageToSave: "没有可保存的图片", canvasImage: "画布图片", emptyReverse: "图片节点为空,无法反推提示词", reverseTitle: "反推提示词", reverseConfigTitle: "反推提示词配置", splitTitle: "{{name}} {{row}}-{{column}}", splitSuccess: "已切分为 {{count}} 个子节点", maskResult: "局部编辑结果", maskFailed: "局部修改失败", generationFailed: "生成失败", partialFailed: "部分图片生成失败", allFailed: "全部图片生成失败", retryPromptMissing: "找不到提示词,无法重试", referenceMissing: "参考图片已丢失,无法继续重试", emptyTextImage: "文本节点为空,无法生图", untitledCanvas: "未命名画布", superResolve: "AI 超分", notImplemented: "暂未实现", imageDetails: "图片详情", clearTitle: "清空画布?", clear: "清空", clearDescription: "这会删除当前画布上的所有节点和连线。", reversePreset: "请根据参考图片反推一段适合用于 AI 生图的提示词。\n\n要求:\n1. 只输出提示词正文,不要解释。\n2. 覆盖主体、构图、风格、光线、色彩、材质、镜头和氛围。\n3. 尽量写成可直接用于生图模型的完整提示词。", maskPrompt: "只修改蒙版透明区域,其他区域保持不变。{{prompt}}", editTextPrompt: "请根据要求修改以下文本。\n\n原文:\n{{source}}\n\n修改要求:\n{{prompt}}" }, reverseComposer: "参考图片:@[node:{{imageId}}]\n任务说明:@[node:{{textId}}]", editors: { reset: "重置", zoomOut: "缩小", zoomIn: "放大", loading: "读取中", unknown: "未知", cancel: "取消", angleTitle: "AI 多角度", angleDescription: "左侧只预览方向,结果会基于原图重新生成", horizontal: "左右角度", pitch: "俯仰角度", distance: "镜头距离", lens: "广角镜头", standard: "标准", wide: "广角", aiGenerate: "AI 生成", upscaleTitle: "图片放大", source: "源图", targetPixels: "目标像素", maxReached: "图片已达到 4K,无需放大", targetReached: "图片已达到当前目标像素,无需放大", algorithm: "放大算法", outputSize: "输出尺寸", upscale: "生成放大图", high: "高清插值", highDescription: "适合照片和细节图", bilinear: "双线性", bilinearDescription: "平滑、速度快", nearest: "最近邻", nearestDescription: "适合像素风格", cropTitle: "裁剪图片", adjustCrop: "调整裁剪框", cropHint: "滚轮缩放 · 中键或空格+左键拖动画面", cropSize: "裁剪尺寸 {{size}}", ratio: "比例 {{ratio}}", original: "原图 {{width}} x {{height}}", confirmCrop: "确认裁剪", free: "自由", fixed: "固定", originalMode: "原图", maskTitle: "局部遮罩编辑", maskHint: "滚轮缩放 · 中键或空格+左键拖动画面 · Alt+左/右键横拖调笔刷 · Ctrl/Cmd+Z 撤回 · Ctrl/Cmd+Shift+Z 重做", brush: "画笔", erase: "擦除", undoMaskTitle: "撤回局部涂抹 (Ctrl/Cmd+Z)", undoMask: "撤回局部涂抹", redoMaskTitle: "重做局部涂抹 (Ctrl/Cmd+Shift+Z)", redoMask: "重做局部涂抹", brushSize: "笔刷大小", editInstructions: "修改要求", maskPlaceholder: "例如:把选中区域改成金属材质,保持原图光影", maskPromptRequired: "请输入修改要求", maskRequired: "请先涂抹局部区域", aiEdit: "AI 修改", splitTitle: "切分图片", splitDescription: "生成 {{count}} 个图片子节点,并按原图网格排列到画布右侧", splitHint: "滚轮缩放 · 中键或空格+左键拖动画面 · Delete 删除选中线 · Ctrl/Cmd+Z 撤回 · Ctrl/Cmd+Shift+Z 重做", undoSplitTitle: "撤回切图调整 (Ctrl/Cmd+Z)", undoSplit: "撤回切图调整", redoSplitTitle: "重做切图调整 (Ctrl/Cmd+Shift+Z)", redoSplit: "重做切图调整", rows: "行数", columns: "列数", horizontalLine: "横向线", verticalLine: "纵向线", deleteLine: "删除线", resetLines: "重置线", pieceCount: "切片数量", pieces: "{{count}} 个", averageSize: "平均约", generateChildren: "生成子节点", }, plugins: { title: "节点插件", installedPlugin: "已安装插件 {{name}}", installed: "已安装 {{name}}", installFailed: "安装失败:{{error}}", enabled: "已启用", disabled: "已禁用", upgradeAvailable: "有新版本,点击升级", updateFromSource: "从来源更新", updated: "已更新", uninstallTitle: "卸载该插件?", uninstall: "卸载", newVersion: "有新版本可升级", officialDescription: "本项目官方插件,来自仓库注册表", refresh: "刷新", loadFailed: "加载失败:{{error}}", loadingOfficial: "正在获取官方插件…", noOfficial: "暂无官方插件", install: "安装", urlPlaceholder: "输入插件 JS 文件 URL,例如 https://.../plugin.js", noThirdParty: "还没有安装第三方插件", official: "官方插件", local: "本地插件", thirdParty: "第三方插件", warning: "插件代码会在当前页面内直接执行,可访问本地数据(包含 AI API Key)。请仅安装你信任来源的插件。", aiConfigRequired: "AI 配置未就绪,请先在设置里配置模型与密钥", interactiveTitle: "当前:交互中。点击切回「移动」——拖动可移动节点", movableTitle: "当前:可移动。点击切到「交互」——可操作节点内容(如转动全景)", move: "移动", interact: "交互" }, promptPanel: { video: "描述要生成的视频内容", audio: "描述要生成的音频内容", image: "描述要生成的图片内容", text: "请输入你想要生成的文本内容", editImage: "请输入你想要把这张图修改成什么", editText: "请输入你想要将本段文本修改成什么", stopGeneration: "停止生成", generate: "生成", stop: "停止" }, composer: { title: "组装提示词", description: "@ 引用已连接资产,发送前按当前连接重新编号", placeholder: "输入提示词,按 @ 引用连接的图片或文本", imagePreview: "引用图片预览", resources: { image: "图片{{index}}", video: "视频{{index}}", audio: "音频{{index}}", text: "文本{{index}}" } }, controls: { ratio: "比例", duplicate: "复制", delete: "删除", images: "{{count}} 张", reasoning: "推理" }, generation: { interrupted: "页面刷新后生成已中断,请重新生成。", front: "正面视角", rotateRight: "向右旋转 {{angle}} 度", rotateLeft: "向左旋转 {{angle}} 度", level: "水平视角", topDown: "俯视 {{angle}} 度", lowAngle: "仰视 {{angle}} 度", angleLabel: "AI 多角度:{{horizontal}},{{pitch}},镜头距离 {{distance}},{{lens}}镜头", anglePrompt: "基于参考图重新生成同一主体的新视角,保持主体、颜色、材质和画面风格一致,不要只做透视变形。{{angle}}。" }, agentOps: { add_node: "新增节点", update_node: "更新节点", delete_node: "删除节点", delete_connections: "删除连线", connect_nodes: "连接", set_viewport: "调整视图", select_nodes: "选择节点", run_generation: "触发生成" }, pluginErrors: { invalidExport: "插件未导出有效对象", missingFields: "插件缺少 id 或 nodes", downloadFailed: "下载失败 (HTTP {{status}})", registryFailed: "获取官方插件列表失败 (HTTP {{status}})" }, shortcut: { dragCanvas: "拖动画布", pan: "平移视图", wheel: "滚轮", zoom: "缩放画布", zoomSlider: "缩放滑杆", preciseZoom: "精确调整缩放", boxSelect: "框选多个节点", addSelection: "追加选择节点", selectAll: "全选节点", copyPaste: "复制 / 粘贴节点,或粘贴剪切板文本/图片", copyPasteNodes: "复制 / 粘贴节点", delete: "删除选中", escape: "取消选择并关闭浮层", dropMedia: "拖入图片/视频/音频", upload: "上传到画布", drag: "拖动", click: "点击", }, }, navigation: { canvas: "我的画布", image: "生图工作台", video: "视频创作台", prompts: "提示词库", assets: "我的资产", config: "配置", }, topNav: { openMenu: "打开导航菜单", menu: "导航菜单", navigation: "导航", openAgent: "打开 Agent", closeAgent: "收起 Agent", plugins: "节点插件", docs: "文档", switchLanguage: "切换到 {{language}}", shortcuts: "快捷键", lightTheme: "切换到浅色主题", darkTheme: "切换到深色主题", }, home: { promptError: "获取提示词失败", description: "在 无限画布 中生成、连接和重组 图片、文字与图形,让创作从单次生成变成连续推演。", start: "开始使用", openCanvas: "打开画布", showcaseTitle: "沉淀每一次好结果", showcaseDescription: "收藏稳定出图的提示词、参考风格和结果图片,让下一次创作从已有经验开始。", viewPrompts: "查看提示词库", }, version: { viewUpdates: "查看版本更新", title: "版本更新", currentVersion: "当前版本", latestVersion: "最新版本", checking: "检查中...", checkUpdates: "检查更新", unreleased: "未发布", latest: "最新", current: "当前", readFailed: "版本读取失败", changelogFailed: "更新日志读取失败", updated: "已获取最新版本信息", updateFailed: "获取最新版本信息失败", types: { added: "新增", fixed: "修复", changed: "调整", optimized: "优化", docs: "文档" }, }, config: { title: "配置与用户偏好", invalidFile: "配置文件格式不正确", description: "渠道聚合、模型选择和同步偏好", modalDescription: "渠道聚合、默认模型和同步偏好", tabs: { channels: "渠道", preferences: "偏好设置", promptSources: "提示词来源", }, promptSources: { add: "新增来源", deleteTitle: "删除「{{name}}」?", deleteDescription: "来源配置会被移除,已经加入我的资产的内容不受影响。", refreshed: "「{{name}}」已更新 {{count}} 条", refreshFailedCached: "更新失败,已保留旧缓存", refreshPartial: "更新完成:{{success}} 个成功,{{failed}} 个失败,失败来源已保留旧缓存", refreshAllSuccess: "已更新 {{sources}} 个来源,共 {{total}} 条", refreshFailed: "更新失败", builtIn: "内置", itemCount: "{{count}} 条", failed: "失败", healthy: "正常", unsynced: "未同步", lastSuccess: "上次成功 {{time}}", neverFetched: "尚未拉取", view: "查看内容", refresh: "立即拉取", edit: "编辑来源", schedule: "定时拉取", interval: "拉取周期", refreshAll: "全部立即拉取", lastFetched: "上次拉取 {{time}}", neverScheduled: "尚未定时拉取", scheduleDescription: "开启周期后,页面打开期间会按周期自动拉取所有启用的来源。", intervals: { disabled: "关闭定时", minutes30: "每 30 分钟", hour1: "每 1 小时", hours6: "每 6 小时", hours24: "每 24 小时", }, editor: { addTitle: "新增提示词来源", editTitle: "编辑提示词来源", nameRequired: "请输入来源名称", invalidUrl: "请输入有效的 JSON URL", invalidHomepage: "请输入有效的主页地址", name: "来源名称", namePlaceholder: "用于分类展示", homepage: "来源主页(可选)", enabled: "启用来源", jsonFormat: "JSON 格式", }, content: { loadFailed: "拉取提示词失败", title: "{{name}} · 提示词内容", count: "共 {{count}} 条", refresh: "立即更新", empty: "暂无提示词", cover: "封面", titleColumn: "标题", tags: "标签", actions: "操作", }, runtime: { requestFailed: "请求失败({{status}})", urlRequired: "JSON URL 不能为空", fetchFailed: "「{{name}}」拉取失败:{{error}}", noPrompts: "「{{name}}」未解析到有效提示词", invalidRoot: "「{{name}}」格式错误:根节点必须是数组" }, }, fileSecurity: "JSON 文件包含 API Key 和 WebDAV 凭据,请妥善保管。", import: "导入配置", export: "导出配置", imported: "配置与用户偏好已导入", importedDirectConfig: "已导入本地直连配置", importFailed: "配置文件读取失败", saved: "配置已保存", savedContinue: "配置已保存,请继续刚才的请求", channels: { description: "每个渠道选择一个协议并拉取模型,为每个模型指定能力(生图/视频/文本/音频),并可自定义调用脚本。", add: "新增渠道", unnamed: "未命名渠道", numberedName: "渠道 {{count}}", modelCount: "{{count}} 个模型", missingUrl: "未填写接口地址", keepOne: "至少保留一个渠道", defaultName: "默认渠道", newName: "新渠道", indexedName: "渠道 {{index}}", }, preferences: { interface: "界面偏好", language: "界面语言", languageDescription: "切换应用界面及组件语言。", defaultModels: "默认模型", defaultImageModel: "默认生图模型", defaultVideoModel: "默认视频模型", defaultTextModel: "默认文本模型", defaultAudioModel: "默认音频模型", generation: "生成偏好", canvasImageCount: "画布默认生图张数", canvasImageCountDescription: "新建画布生图和配置节点默认使用,单个节点仍可单独覆盖。", audioVoice: "默认音频声音", audioFormat: "默认音频格式", audioSpeed: "默认音频语速", audioInstructions: "默认音频指令", audioInstructionsPlaceholder: "例如:自然、温暖、适合旁白。", systemPrompt: "系统提示词", systemPromptPlaceholder: "例如:你是一位擅长电影感写实摄影的视觉导演。", }, channelEditor: { title: "编辑渠道", name: "渠道名称", protocol: "协议", baseUrl: "接口地址", models: "渠道模型", modelDescription: "已选 {{count}} 个;为每个模型指定能力并可自定义调用脚本。", selectModels: "选择模型", scriptReady: "脚本已设", script: "调用脚本", empty: "点击「选择模型」拉取或手动增加模型。", capabilities: { image: "生图", video: "视频", text: "文本", audio: "音频", }, }, modelSelect: { missingConfig: "请先填写接口地址和 API Key", fetched: "已拉取 {{count}} 个模型", fetchFailed: "拉取模型失败", title: "选择渠道模型", selected: "已选择 {{selected}} / {{total}}", confirm: "确定", search: "搜索模型", modelName: "输入模型名称", add: "增加模型", fetch: "拉取模型列表", description: "如果上游不提供 OpenAI /models 模型列表接口,请在这里手动增加模型名称。", fetchedTab: "新获取的模型 ({{count}})", existingTab: "已有的模型 ({{count}})", visibleSelected: "当前列表已选择 {{selected}} / {{total}}", selectVisible: "全选当前列表", clearVisible: "取消当前列表", fetchedEmpty: "点击「拉取模型列表」获取上游模型,或手动增加模型名称。", existingEmpty: "暂无已选择的模型。", }, scriptEditor: { description: "脚本是一段异步函数体,直接使用下方变量,最后 return 结果;留空则使用系统默认调用。", insertTemplate: "插入{{name}}模板", restoreDefault: "恢复默认调用", returnRequirements: "返回要求", variables: "可用变量", insert: "点击插入", placeholder: "// 留空使用系统默认调用;点击右下角「插入模板」查看示例。", }, webdav: { title: "WebDAV 同步", description: "同步画布、我的资产、生成记录和本地媒体文件,不包含 AI API Key;浏览器会直接连接 WebDAV 服务。", lastSynced: "上次同步 {{time}}", neverSynced: "尚未同步", url: "WebDAV 地址", directory: "远程目录", directoryDescription: "会在该目录下分业务目录保存,每个目录包含 {{manifest}} 和 files/", username: "用户名", password: "密码 / 应用密码", test: "测试连接", syncing: "同步中", syncNow: "立即同步", missingUrl: "请先填写 WebDAV 地址", available: "WebDAV 连接可用", testFailed: "WebDAV 连接测试失败", preparing: "准备同步", failed: "WebDAV 同步失败", completed: "同步完成:{{projects}} 个画布,{{assets}} 个资产,{{records}} 条记录,本次上传 {{files}} 个文件 {{bytes}}", domains: { canvas: "画布", assets: "我的资产", imageWorkbench: "生图工作台", videoWorkbench: "视频创作台", }, stages: { waiting: "等待同步", localWaiting: "等待本地数据加载", syncComplete: "同步完成", remoteManifest: "读取远端清单", localData: "读取本地数据", downloadMedia: "下载缺失媒体", writeMerge: "写入本地合并结果", uploadMedia: "上传新增媒体", mediaReady: "媒体已齐全", mediaSkipped: "媒体无需上传", checkMissingMedia: "检查缺失媒体", downloadMediaFile: "下载媒体", checkLocalMedia: "检查本地媒体", uploadMediaFile: "上传媒体 {{size}}", uploadManifest: "上传清单 {{size}}", complete: "完成", }, errors: { testFailed: "WebDAV 连接测试失败", downloadFailed: "读取 WebDAV 同步文件失败", downloadTimeout: "读取 WebDAV 同步文件超时", emptyUpload: "上传文件为空,已取消上传", uploadFailed: "上传 WebDAV 同步文件失败", directoryFailed: "创建 WebDAV 远程目录失败", requestTimeout: "WebDAV 请求超时,请检查网络或远端服务状态", connectionFailed: "无法连接 WebDAV,请检查地址、HTTPS 证书、CORS 或网络状态", urlRequired: "请先填写 WebDAV 地址", authenticationFailed: "WebDAV 认证失败,请检查用户名、密码或应用密码", pathMissing: "WebDAV 路径不存在,请检查地址和远程目录", responseFailed: "{{fallback}}:{{status}}{{detail}}", syncFailed: "同步失败", invalidManifest: "{{domain}} 同步清单不是当前应用的数据" }, }, protocols: { ark: "火山方舟", }, }, agent: { status: { failed: "连接失败", connected: "已连接", connecting: "连接中", disconnected: "未连接" }, state: { ready: "就绪", connectionRequired: "请填写 Local URL 和 Connect token", invalidUrl: "Local URL 格式不正确", offline: "离线", skillReadFailed: "读取 Skill 失败", skillParseFailed: "Skill 解析失败", requestFailed: "本地 Agent 请求失败" }, siteTools: { canvasList: "画布列表", generationStatus: "生成任务状态", imageConfig: "生图配置", imageGenerate: "生图工作台生成", videoConfig: "视频配置", videoGenerate: "视频创作台生成", promptSearch: "搜索提示词", assetList: "资产列表", assetAdd: "添加资产", unknownTool: "未知工具:{{name}}", canvasLoading: "画布还在加载中,请稍后重试", canvasHint: "用 site_navigate 跳转 /canvas/{id} 打开对应画布", assetsLoading: "资产还在加载中,请稍后重试", assetTitleRequired: "请提供资产标题 title", textContentRequired: "kind=text 时需要提供 content 文本内容", imageUrlRequired: "kind=image 时需要提供 imageUrl(图片地址或 dataURL)", imageReadFailed: "无法读取该图片地址,请改用 dataURL 或可跨域访问的图片链接", assetKindUnsupported: "assets_add 仅支持 kind=text 或 kind=image", imageGenerationStarted: "已跳转生图工作台并触发生成,可用 generation_get_status 查询任务", imageConfigApplied: "已跳转生图工作台并填入参数,未触发生成", videoGenerationStarted: "已跳转视频创作台并触发生成,可用 generation_get_status 查询任务", videoConfigApplied: "已跳转视频创作台并填入参数,未触发生成" }, connect: { pluginTitle: "方式一:在 Codex 中使用插件", pluginText: "在 Codex app 安装 Infinite Canvas 插件后,通过插件启动画布,插件会自动启动本地 Agent 并带上连接信息。", directTitle: "方式二:直接运行 Agent", directText: "不使用 Codex 插件时,在终端运行下面命令,再回到网页里连接或手动填入 Local URL 和 Connect token。", commandCopied: "命令已复制", pluginReminder: "Codex 插件提醒", pluginReminderText: "只有安装 Codex 插件或手动添加 MCP 后,工具列表才会进入 Codex 上下文并增加 token 消耗;仅运行 npx -y @basketikun/canvas-agent 启动本地 Agent 不会安装 MCP。", removePlugin: "移除插件", removeMcp: "移除手动 MCP", copyCommand: "复制命令", title: "连接本地 Agent", description: "按使用场景选择一种连接方式。", webConnection: "网页连接", autoDiscover: "默认自动读取 Local URL 和 Connect token,失败时再手动填写。", disconnect: "断开", connect: "连接", localAddress: "本地地址", urlPlaceholder: "例如 http://127.0.0.1:17371", token: "连接 Token", tokenPlaceholder: "自动发现,或手动填入 Connect token" }, history: { workspace: "工作空间", defaultWorkspace: "默认画布目录", selected: "已选 {{count}} 条", count: "{{count}} 条历史", empty: "暂无历史", deleteCount: "删除 {{count}} 条", refresh: "刷新", newThread: "新对话", selectThread: "选择{{name}}", untitled: "未命名对话", current: "当前", noWorkspaceThreads: "当前工作空间还没有对话记录", connectHint: "连接本地 Agent 后显示历史记录" }, skills: { selectLocal: "选择本地 Skill", search: "搜索 Skill", loading: "正在读取 Skill…", noMatch: "没有匹配的已启用 Skill", none: "还没有可用的 Skill", select: "选择 Skill", connectHint: "连接 Agent 后使用 Skill" }, skillManager: { codexBusy: "Codex 正在运行,请完成当前任务后再提炼 Skill", noConversation: "当前对话还没有可提炼的已完成内容", noCanvas: "当前页面没有可提炼的画布", connecting: "当前页面仍在连接 Agent,请稍后再试", syncFailed: "同步当前画布失败,请检查 Agent 连接后重试", noDraft: "未生成 Skill 草稿", draftCreated: "草稿已生成,可在技能页确认后创建", draftFailed: "生成 Skill 草稿失败", contentMissing: "未读取到 Skill 内容", readFailed: "读取 Skill 失败", defaultPromptMention: "默认提示词需要包含 ${{name}}", created: "Skill 已创建", updated: "Skill 已更新", saveFailed: "保存 Skill 失败", deleteTitle: "删除 {{name}}", deleteDescription: "删除后本地文件无法恢复,确定继续吗?", delete: "删除", deleted: "Skill 已删除", deleteFailed: "删除 Skill 失败", statusFailed: "更新 Skill 状态失败", fromConversation: "从当前对话生成草稿", availableAfterRun: "Codex 运行结束后可用", conversationDescription: "整理当前对话中的可复用流程", noCompletedContent: "当前对话还没有已完成内容", startConversation: "请先开始一段对话", fromCanvas: "从当前画布生成草稿", canvasDescription: "整理当前页面的节点与生成流程", canvasUnavailable: "当前页面没有可用画布", blankCreate: "空白创建", blankDescription: "从空白表单开始编写", localSkills: "本地 Skill", localDescription: "安装在本机,由 Codex 直接执行", reload: "重新读取", reloadSkill: "重新读取 Skill", createSkill: "创建 Skill", filterBySource: "按来源筛选 Skill", scopes: { all: "全部来源", repo: "项目", user: "个人", system: "系统", admin: "管理员" }, loadErrors: "{{count}} 个 Skill 未能加载", externalReadonly: "外部 Skill 只能使用或启停", noDescription: "暂无说明", enabled: "已启用", disabled: "已停用", selected: "已选择", use: "使用", editNamed: "编辑 {{name}}", deleteNamed: "删除 {{name}}", connectToView: "连接 Agent 后查看 Skill", noMatch: "没有匹配的 Skill", none: "还没有本地 Skill", connectDescription: "连接成功后会读取本机已安装的 Skill", tryAnotherFilter: "换个关键词或来源试试", createOrInstall: "创建一个,或在本机安装后刷新", saveChanges: "保存更改", saveLocation: "保存到本地 Agent 工作区", basicInfo: "基本信息", identifier: "Skill 标识", identifierExtra: "用于文件夹名和 $skill-name 调用。", identifierRequired: "请输入 Skill 标识", identifierMax: "Skill 标识不能超过 64 个字符", identifierPattern: "仅支持小写字母、数字和连字符,连字符不能连续或位于首尾", identifierPlaceholder: "例如 product-grid", displayName: "显示名称", displayNameMax: "显示名称不能超过 64 个字符", displayNamePlaceholder: "例如 产品九宫格生成", whenToUse: "何时使用", whenToUseExtra: "说明这个 Skill 的能力和适用场景,Codex 会据此判断是否调用。", whenToUseRequired: "请输入使用场景", whenToUseMax: "使用场景不能超过 1024 个字符", noAngleBrackets: "使用场景不能包含尖括号", whenToUsePlaceholder: "例如:当用户需要基于商品信息规划并生成一组产品图时使用", instructions: "执行说明", instructionsExtra: "按实际执行顺序写清步骤、约束和输出要求。", instructionsRequired: "请输入执行说明", instructionsPlaceholder: "写清楚执行步骤、必要检查和最终输出", advanced: "高级设置", shortDescription: "卡片短说明", shortDescriptionExtra: "填写时控制在 25–64 个字符,便于快速浏览。", shortDescriptionMin: "卡片短说明不能少于 25 个字符", shortDescriptionMax: "卡片短说明不能超过 64 个字符", shortDescriptionPlaceholder: "可选,用于列表展示", defaultPrompt: "默认提示词", defaultPromptExtra: "填写时必须准确包含 $skill-name,例如 $product-grid。", defaultPromptMax: "默认提示词不能超过 1024 个字符", defaultPromptPlaceholder: "可选,选择 Skill 时预填到输入框", }, composer: { removeImage: "移除图片", removeSkill: "移除 Skill", uploadImage: "上传图片", stop: "停止", send: "发送", model: "模型:{{model}}", selectModel: "选择 Codex 模型,当前为 {{model}}", reasoning: "思考程度:{{effort}}", selectReasoning: "选择思考程度,当前为 {{effort}}", permissionLabel: "权限:{{mode}}", selectPermission: "选择 Codex 权限模式,当前为 {{mode}}", effort: { minimal: "最低", low: "轻度", medium: "中", high: "高", xhigh: "极高", max: "最高", ultra: "Ultra" }, permission: { request: "请求批准", requestDescription: "编辑工作区外文件或联网时始终询问", automatic: "自动审查", automaticDescription: "由 Codex 审查风险操作,必要时再询问", full: "完全访问权限", fullShort: "完全访问", fullDescription: "不受限制地访问网络和本机文件" }, tools: { label: "工具确认:{{mode}}", manual: "手动确认", manualDescription: "Agent 执行画布写入前会请求确认", automatic: "自动确认", automaticDescription: "Agent 会自动执行画布写入操作", select: "选择工具确认模式,当前为 {{mode}}" } }, panel: { connectionSettings: "连接设置 · {{status}}", connectionSettingsLabel: "连接设置,当前{{status}}", chat: "对话", history: "历史", skills: "技能", logs: "日志", collapse: "收起对话", collapseLabel: "收起 Agent 面板", resize: "调整右侧面板宽度", content: "Agent 内容", mcpInitializing: "MCP 初始化中,完成后即可发送", initFailed: "Codex 对话初始化失败,请新建或恢复对话", placeholder: "询问 Codex,或让它操作网站/画布" }, chat: { latestMessages: "查看最新消息", latestCall: "最新调用", input: "输入", cached: "缓存", output: "输出" }, logs: { copied: "日志已复制", selectedManual: "已选中日志,请手动复制", copyFailed: "复制失败,请切换到原始 JSON 后手动复制", title: "运行日志", diagnostics: "排查日志", rawJson: "原始 JSON", messages: "{{count}} 条消息", tool: "工具:{{tool}}", noPendingTool: "无待处理工具", all: "全部 {{count}}", errors: "错误 {{count}}", warnings: "警告 {{count}}", info: "信息 {{count}}", list: "排查日志列表", noFiltered: "当前筛选下没有日志", empty: "暂无事件日志", new: "{{count}} 条新日志", newLabel: "{{count}} 条新日志,查看最新日志", latest: "查看最新日志", fullData: "完整诊断数据 · {{count}} 条", copyAll: "复制全部日志", copyLastError: "复制最近错误", lastErrorCopied: "最近错误已复制", clear: "清空日志", repeated: "重复 {{count}} 次", details: "详细信息", skillLoading: "技能加载", plugin: "插件", terminal: "终端", conversationStorage: "会话存储" }, message: { close: "关闭", copied: "已复制", copyCode: "复制代码", copyLink: "复制链接", externalWarning: "即将打开以下外部链接,请确认链接可信。", openExternal: "打开外部链接?", continueOpen: "继续打开", revealed: "已在文件管理器中定位", openLocalFailed: "无法打开本地文件", openLocal: "打开本地文件?", localDescription: "将在本机文件管理器中定位该路径,不会通过浏览器打开。", externalDescription: "即将打开以下外部链接,请确认链接可信。", pathCopied: "路径已复制", linkCopied: "链接已复制", copyPath: "复制路径", showInFolder: "在文件管理器中显示", toolCall: "工具调用", awaitingConfirmation: "等待确认", reject: "拒绝执行", approve: "批准执行", networkApproval: "请求网络访问", fileApproval: "请求编辑文件", permissionApproval: "请求扩展权限", commandApproval: "请求执行命令", decline: "拒绝", allowOnce: "允许一次", allowSession: "本会话允许", thinking: "正在思考", commandsRunning: "正在执行 {{count}} 条命令", commandRunning: "正在执行命令", commandsCompleted: "已执行 {{count}} 条命令{{failed}}", commandsFailed: " · {{count}} 条失败", failed: "执行失败", running: "进行中", completed: "已完成", command: "命令", slowResponse: "响应时间较长,但任务仍在运行。可以继续等待,或点击输入框右侧的停止按钮结束本轮。", waitingSeconds: "已等待 {{seconds}} 秒", waitingMinutes: "已等待 {{minutes}} 分 {{seconds}} 秒", files: "涉及文件", errorInfo: "错误信息", output: "运行输出", viewLarge: "点击查看大图", attachmentPreview: "图片附件预览", noEffect: "未生效", canceled: "已取消", recorded: "已记录", stopped: "已停止", finished: "已结束", pending: "待处理" }, events: { analyzing: "正在分析任务…", reasoning: "思考摘要", plan: "执行计划", commandFailed: "命令执行失败", commandCompleted: "命令已完成", executeCommand: "执行命令", editFiles: "修改文件", searchWeb: "搜索资料", viewImage: "查看图片", imageViewed: "已查看图片", viewingImage: "正在查看图片", imageGeneration: "内置生图", imageFailed: "图片生成失败", imageCompleted: "图片生成完成", generatingImage: "正在生成图片…", compactContext: "整理上下文", contextCompacted: "已整理当前对话,继续处理任务", compactingContext: "正在整理当前对话…", collaboration: "协作处理", collaborationFailed: "协作任务失败", collaborationCompleted: "已完成协作任务", collaborating: "正在协作处理任务…", progress: "任务进度", progressCount: "已完成 {{completed}}/{{total}} 项", planning: "正在整理执行步骤…", executingCommand: "正在执行命令…", workingDirectory: "工作目录", exitStatus: "退出状态", duration: "耗时", seconds: "{{value}} 秒", filesCompleted: "已完成文件修改", preparingFiles: "正在准备文件修改…", fileCompleted: "已{{action}} {{path}}", editingFile: "正在{{action}} {{path}}", filesEdited: "已修改 {{count}} 个文件:{{names}}{{more}}", editingFiles: "正在修改 {{count}} 个文件:{{names}}{{more}}", andMore: " 等", openPage: "打开网页:{{url}}", findInPage: "在网页中查找“{{pattern}}”", content: "内容", search: "搜索:{{query}}", relatedInfo: "相关资料", keyword: "关键词", webpage: "网页", add: "新增", delete: "删除", edit: "修改", diagnostics: "Infinite Canvas Agent 诊断", address: "地址:{{endpoint}}", connection: "连接:{{connection}} · 状态:{{status}}", online: "在线", connecting: "连接中", disabled: "未启用", messageTool: "消息:{{messages}} · 工具:{{tool}}", none: "无", noLogs: "暂无事件日志", threadCreated: "创建会话", turnStarted: "开始处理", progressUpdated: "更新任务进度", turnFailed: "处理失败", turnStopped: "处理已停止", turnCompleted: "处理完成", toolCalled: "调用工具", toolFailed: "工具失败", toolCompleted: "工具完成", replyReceived: "收到回复", completed: "完成", modelBusy: "模型暂时繁忙", modelBusyDescription: "当前选择的模型请求量过大,暂时无法处理。请稍后重试,或切换其他模型后再试。", taskFailed: "任务失败", taskFailedDescription: "Codex 未能完成本次任务,请稍后重试。" }, eventExtra: { toolNamed: "调用工具:{{name}}", toolOperation: "工具操作", targetPage: "目标页面", searchContent: "搜索内容", textContent: "文本内容", operationContent: "操作内容", imageCount: "图片数量", tools: { generateImage: "生成图片", viewImage: "查看图片", executeCommand: "执行命令", editFiles: "修改文件", searchWeb: "搜索资料", canvasOps: "画布操作", readCanvas: "读取画布", readSelection: "读取选区", exportSnapshot: "导出快照", createNode: "创建节点", addAttachments: "添加附件图片", createText: "创建文本", createTexts: "批量创建文本", createConfig: "创建生成配置", createImageFlow: "创建生图流程", createGenerationFlow: "创建生成流程", generateText: "生成文本", generateVideo: "生成视频", generateAudio: "生成音频", updateNode: "更新节点", updateText: "更新文本", moveNodes: "移动节点", resizeNode: "调整节点尺寸", deleteNodes: "删除节点", connectNodes: "连接节点", selectNodes: "选择节点", setViewport: "调整视口", runGeneration: "触发生成", openPage: "打开页面" } }, eventMore: { toolRunning: "{{action}}中…", openedRoute: "已打开{{route}}", canvasCount: "共 {{count}} 个画布", promptCount: "找到 {{count}} 条提示词", assetCount: "共 {{count}} 个资产", assetAdded: "已加入我的素材", generationStatus: "共 {{total}} 个任务,排队 {{queued}},运行中 {{running}},成功 {{succeeded}},失败 {{failed}}", workbenchExecuted: "已在工作台执行", workbenchConfigRead: "已读取工作台配置", canvasRead: "已读取当前画布内容", selectionRead: "已读取当前选中内容", textNodes: "{{count}} 个文本", imageNodes: "{{count}} 张图片", configNodes: "{{count}} 个配置", videoNodes: "{{count}} 个视频", audioNodes: "{{count}} 个音频", groupNodes: "{{count}} 个分组", otherNodes: "{{count}} 个其他节点", connections: "{{count}} 条连线", emptyCanvas: "当前画布为空", executeTool: "执行{{tool}}", thinking: "正在思考...", operationRunning: "{{operation}}正在进行...", organizingCanvas: "画布已读取,Codex 正在整理结果...", operationCompleted: "{{operation}}已完成,Codex 正在继续处理...", attachmentPrompt: "请处理上传的图片附件。", routes: { home: "首页", canvas: "画布页面", canvasProject: "指定画布", image: "生图工作台", video: "视频工作台", prompts: "提示词中心", assets: "我的素材", config: "配置页面" } }, runtime: { mcpStarting: "正在启动 MCP:{{name}}", mcpConnecting: "正在建立工具连接并读取可用工具列表", mcpReadyNamed: "MCP 已就绪:{{name}}", toolsReady: "工具列表加载完成,可以开始对话", mcpFailedNamed: "MCP 启动失败:{{name}}", mcpCanceledNamed: "MCP 启动已取消:{{name}}", toolInitFailed: "工具服务未能完成初始化", mcpServicesStarting: "正在启动 MCP 服务", toolServicesPending: "还有 {{count}} 个工具服务正在初始化", checkingToolServices: "正在确认工具服务状态", conversationInitializing: "正在初始化 Codex 对话", conversationCreating: "正在创建会话并启动画布工具服务", someMcpFailed: "部分 MCP 服务初始化失败", remainingToolsReady: "其余工具已就绪,可以开始对话", conversationInitFailed: "Codex 对话初始化失败", conversationCreateFailed: "无法创建 Codex 会话", mcpServicesReady: "{{count}} 个 MCP 服务已完成初始化", toolInitCanceled: "工具服务初始化已取消", mcpStatusComplete: "MCP 状态确认完成", mcpListRead: "已读取 Codex 返回的完整工具服务清单", historyReadFailed: "读取历史失败", conversationSyncFailed: "同步会话失败", agentOutdated: "本地 Agent 版本过旧,请重启 Canvas Agent 后重新连接", restartRequired: "需要重启 Agent", versionMismatch: "Agent 版本不匹配", awaitingApproval: "等待权限确认", codexRunning: "Codex 正在运行", connected: "已连接", localAgentConnected: "本地 Agent 已连接", processingFailed: "处理失败", completed: "完成", approvalGranted: "已批准权限", approvalCanceled: "已取消权限", log: "日志", connectionLostDescription: "本地 Agent 连接失败或已断开", connectionFailedDescription: "连接失败,请检查地址和 token", connectionLost: "连接断开", connectionFailed: "连接失败", modelListFailed: "读取模型列表失败", imageTooLarge: "图片过大", imagePayloadTooLarge: "图片附件超过 30MB,请删减后再发送。", imagesSent: "发送了 {{count}} 张图片", sending: "发送中", defaultModel: "默认模型", defaultEffort: "默认强度", sendTask: "发送任务", attachmentCount: "附件 {{count}}", attachmentsOnly: "仅附件", startConversationFailed: "启动对话失败", attachmentHistoryFailed: "保存附件历史失败", sendFailed: "发送失败", conversationSynced: "会话已同步", taskStillRunning: "任务仍在运行", stopping: "停止中", stopTask: "停止任务", taskStopped: "任务已停止", stopFailed: "停止失败", imageLimit: "图片附件最多约 30MB。", imageReadFailed: "图片读取失败", pendingCanvasTool: "仍有待确认的画布工具调用", awaitingConfirmation: "等待确认", toolCompleted: "{{tool}}完成", toolExecutionFailed: "工具执行失败", openCanvasFirst: "当前不在画布页,请先用 site_navigate 打开画布", canvasOperationFailed: "画布操作失败", canvasToolCanceled: "用户取消了画布工具调用", submittingApproval: "正在提交权限决定", waitingCodexApproval: "等待 Codex 确认权限", approvalFailed: "权限审批失败", enableFullAccess: "启用完全访问权限", fullAccessDescription: "Codex 将不受沙箱限制,可访问互联网及本机任意文件。请仅在信任当前任务时使用。", enableFullAccessAction: "启用完全访问", offline: "离线", addressRequired: "请填写本地 Agent 地址", agentNotFound: "没有发现本地 Agent,请先在 Codex 使用插件或手动启动 Canvas Agent", invalidAddress: "本地 Agent 地址格式不正确", connecting: "连接中", creatingConversation: "正在新建对话", newConversation: "新对话", newConversationFailed: "新建对话失败", conversationResumed: "已恢复会话", resumeConversationFailed: "恢复对话失败", recordsDeleted: "已删除 {{count}} 条记录", deleteConversationFailed: "删除对话失败", deleteConversations: "删除 {{count}} 条对话记录", deleteConversationsDescription: "删除后无法恢复,确定继续吗?", importGeneratedImages: "导入生成图片", addedToSourceCanvas: "已添加到发起任务的画布", imageGenerated: "图片已生成", noImageAttachments: "没有可添加的图片附件", invalidAttachmentNode: "图片附件节点参数无效", attachmentReadFailed: "读取图片附件失败", referenceImage: "参考图", generatedImageReadFailed: "读取 Codex 生成图片失败", generatedImageName: "生成图片 {{index}}", }, }, locale: { zhCN: "简体中文", enUS: "English", }, };