502 lines
32 KiB
JavaScript
502 lines
32 KiB
JavaScript
export const i18n = {
|
||
zh: {
|
||
title: '📦 Anomalous 模型浏览器',
|
||
scan: '🔄 扫描目录并同步 C 站数据',
|
||
scanTitle: '扫描目录',
|
||
scanConfirm: '注意:\n扫描过程将会自动比对 Civitai 并重命名本地模型,同时清理损坏文件。\n确定要开始扫描吗?',
|
||
scanning: '扫描中...',
|
||
scanBg: '🚀 扫描后台启动!',
|
||
scanDone: '完成',
|
||
scanCompleteMsg: '✅ 扫描完成!\n\n⚠️ 提示:由于部分模型已被重命名或去重,请点击 ComfyUI 的 [Refresh] 按钮以同步最新的模型列表。',
|
||
eco: '🔋 视频悬浮播放 (节能模式)',
|
||
autoPlay: '🎬 自动播放视频封面 (高能耗)',
|
||
togglePlayTitle: '切换播放模式',
|
||
clean: '🧹 清理无效的 .info 残留文件',
|
||
cleanTitle: '清理重复 Info',
|
||
cleanConfirm: '将扫描并删除所有无用的 .civitai.info 残留文件。是否继续?',
|
||
cleaning: '清理中',
|
||
cleanDone: '✅ 清理完毕!删除了',
|
||
files: '个文件。',
|
||
cleanFail: '❌ 清理失败: ',
|
||
cleanErr: '❌ 清理出错: ',
|
||
folders: '📂 文件夹',
|
||
collapseAll: '➖ 收起全部',
|
||
expandAll: '➕ 展开全部',
|
||
noModels: '此文件夹中没有找到模型。',
|
||
noPreview: '暂无预览图',
|
||
clickScan: '点击扫描',
|
||
back: '⬅️ 返回网格',
|
||
delModel: '🗑️ 删除',
|
||
delConfirm: '确定彻底删除',
|
||
delConfirm2: '及其所有关联配置、预览图和缓存文件吗?此操作不可逆!',
|
||
delSuccess: '✅ 删除成功!\n',
|
||
delNote: '\n\n⚠️ 提示:请重启 ComfyUI,否则由于缓存继续使用会报错',
|
||
delFail: '❌ 删除失败: ',
|
||
copyAll: '📋 复制全部',
|
||
copied: '✅ 已复制!',
|
||
clickToCopy: '点击复制: ',
|
||
compatibleModels: '🔗 兼容模型',
|
||
loadingCompatible: '加载中...',
|
||
backToPrev: '🔙 返回上一层',
|
||
applyToCanvas: '➕ 插入节点',
|
||
applySuccess: '✅ 已添加至工作流',
|
||
help: '帮助',
|
||
helpTitle: '📖 使用手册',
|
||
helpContent: `
|
||
<div style="line-height: 1.6; font-size: 0.95em; color: #eee; padding: 10px;">
|
||
<h3 style="color:#00ffcc; margin-top:0;">📖 标准操作说明</h3>
|
||
<p><strong>1. 🔄 前置准备 (扫描向导)</strong><br>具体位置:界面左侧底部的 <strong>扫描向导 (🔄)</strong>。<br>这是最重要的前置操作!请先打开扫描向导执行扫描。切记保持网络畅通。部分 C站限制级模型信息需要在设置中填入 API-KEY。扫描完成后,插件的各项功能基本激活。</p>
|
||
<p><strong>2. 🩺 拯救爆红 (模型医生)</strong><br>具体位置:左侧底部第二个 <strong>听诊器 (🩺)</strong> 按钮。<br>当导入别人使用该插件输出的工作流或者图片时,若模型路径爆红,点击模型医生就能智能识别当前所有节点实现正确路径的替换。</p>
|
||
<p><strong>3. 🤖 选中交互 (节点助手)</strong><br>具体位置:左侧第三个 <strong>机器人 (🤖)</strong> 按钮。<br>打开后在画布上选择模型节点。新版操作卡可以替换当前模型,也可在兼容的 MODEL + CLIP 链前方或后方插入 LoRA。模型卡会标注类别与基础模型类型;选择 LoRA 时会优先按已连接主模型的类型自动筛选,也可切回全部 LoRA。文件夹、完整路径搜索、排序和多分支安全保护仍然保留。</p>
|
||
<p><strong>4. ⚙️ 个性化配置 (设置面板)</strong><br>具体位置:左侧底部的 <strong>齿轮 (⚙️)</strong> 按钮。<br>可以调节语言、主页面字体大小;进入“模型设置”可选择视频封面始终播放或悬停播放,以及卡片使用流畅缩略图或原始封面。详情页始终保留原图画质。</p>
|
||
<p><strong>5. 📑 顶部导航与笔记本功能</strong><br>具体位置:右侧顶部的按钮分别为 <strong>模型 (📦)</strong>、<strong>图库 (🖼️)</strong>、<strong>笔记本 (📑)</strong>、<strong>停靠侧边栏 (◧)</strong>。<br>点击笔记本,点击新建 <strong>➕</strong> 号。确认后选择基础模型(如SD1.5),接着选择主模型和对应的 lora。点击下方的 <strong>📝纯文本/粘贴</strong> 填入提示词,选择左上角的语言即可实现双语对照。确认后自动分块标签,支持查找替换和直接修改单个标签。最后点击 <strong>🚀 发送到画布</strong> 即可一键连线!</p>
|
||
<p><strong>6. 📁 文件夹管理 (Folder Manager)</strong><br>具体位置:设置 (⚙️) 面板内的 <strong>📁 文件夹管理</strong>。<br>可以用来隐藏不需要的内置文件夹。隐藏后的文件夹不仅从侧边栏消失,后端的静默扫描和本地读取也会完全跳过,实现真正的“零性能损耗”。并且可以在这里拖拽调整文件夹在侧边栏显示的顺序。</p>
|
||
<p><strong>7. 📥 工作流导出与导入 (分享码)</strong><br>具体位置:设置 (⚙️) 按钮左侧的 <strong>导入/导出 (📥)</strong> 按钮。<br>该功能可以将当前的工作流一键编码导出为一段专属分享码,方便发到社交平台。别人只需复制这串分享码,在此界面粘贴即可直接还原导入完整的工作流,并且在导入前系统会自动校验模型是否在本地存在。</p>
|
||
<p><strong>8. 💬 提交反馈 / 报告问题</strong><br>具体位置:设置 (⚙️) 面板内的 <strong>💬 提交反馈 / 报告问题</strong>。<br>当你遇到插件报错或有新功能建议时,点击该按钮可一键直达 GitHub Issues 页面提交反馈。</p>
|
||
</div>`,
|
||
notebooks: '笔记本',
|
||
notebookTitle: '笔记本管理',
|
||
workspace: '创作工作台',
|
||
workspaceTitle: '创作工作台',
|
||
promptNotes: '提示词笔记',
|
||
createNotebook: '新建',
|
||
saveNotebook: '💾 保存',
|
||
deleteNotebook: '🗑️ 删除',
|
||
renameNotebook: '✏️ 重命名',
|
||
baseModel: 'Base Model (基础模型)',
|
||
mainModel: 'Main Model (主模型)',
|
||
sendToCanvas: '🚀 发送到画布',
|
||
translate: '翻译',
|
||
newNotebookName: '新笔记本名称',
|
||
noBaseModel: '请先选择 Base Model',
|
||
closeHelp: '关闭说明',
|
||
delSure: '⚠️ 确定吗?',
|
||
dockTitle: '侧边停靠',
|
||
replaceAll: '全部替换',
|
||
editRaw: '📝 纯文本/粘贴',
|
||
findPlaceholder: '查找...',
|
||
replacePlaceholder: '替换为...',
|
||
models: '模型',
|
||
gallery: '图库',
|
||
apiKeyConfig: '🔑 Civitai API 密钥配置 (用于下载封面)',
|
||
apiKeyPrompt: '请输入你的 Civitai API Key:',
|
||
settingsBtn: '设置',
|
||
closeSettings: '✖ 关闭设置面板',
|
||
doctorBtn: '节点助手',
|
||
importBtn: '📥 导入 / 导出工作流 (分享码)',
|
||
recipeTitle: '工作流配方',
|
||
recipeClose: '关闭工作流配方',
|
||
recipeSaveCurrent: '保存当前工作流',
|
||
recipeSaveTitle: '保存为工作流配方',
|
||
recipeName: '名称',
|
||
recipeDefaultName: '新工作流配方',
|
||
recipeNameRequired: '请填写配方名称。',
|
||
recipeTags: '标签',
|
||
recipeTagsHint: '例如:人像, SDXL, 放大',
|
||
recipeNotes: '备注',
|
||
recipeNotesHint: '记录这个版本为什么好用……',
|
||
recipeThumbnail: '工作流缩略图',
|
||
recipeCancel: '取消',
|
||
recipeSave: '保存',
|
||
recipeSaving: '正在保存…',
|
||
recipeSaveReceipt: '已保存:{nodes} 个节点,{links} 条连线,{groups} 个分组。',
|
||
recipeSaveReceiptMismatch: '已保存,但完整性回执与当前画布不一致;请重新打开配方核对。',
|
||
recipeEmpty: '还没有工作流配方。保存一个已经跑通的工作流吧。',
|
||
recipeLoadError: '无法加载工作流配方。',
|
||
recipeUntitled: '未命名配方',
|
||
recipeSearchPlaceholder: '搜索名称、笔记或标签…',
|
||
recipeClearFilters: '清除筛选',
|
||
recipeNoTags: '暂无标签',
|
||
recipeNoMatches: '没有匹配的配方。请清除搜索或标签筛选。',
|
||
recipeFilterByTag: '按此标签筛选',
|
||
recipeImport: '导入配方包',
|
||
recipeExport: '导出配方包',
|
||
recipeExportError: '导出工作流配方包失败。',
|
||
recipeImportError: '导入工作流配方包失败。',
|
||
recipeExportSnapshotsConfirm: '导出时包含模型预览快照吗?\n\n快照是展示数据,不包含模型文件;视频封面只保留轻量静态快照,不会打包原视频。',
|
||
recipeExportHistoryConfirm: '导出时包含历史版本吗?\n\n历史可能包含旧提示词和备注。',
|
||
recipeExportRedactIdentityConfirm: '是否移除模型 SHA-256、大小和来源信息?\n\n点击“确定”将移除这些身份信息。',
|
||
recipeImportSummary: '配方包检查完成。确认导入以下内容吗?',
|
||
recipeImportAssets: '预览资产',
|
||
recipeImportHistory: '历史版本',
|
||
recipeImportRenamePrompt: '配方名称已存在,请输入导入后的名称:',
|
||
recipeModel: '模型',
|
||
recipeLoras: 'LoRA',
|
||
recipePrompt: '正向提示词',
|
||
recipeSteps: '步数',
|
||
recipeRestore: '恢复版本',
|
||
recipeOpenCanvas: '打开到画布',
|
||
recipeAppendCanvas: '追加到画布',
|
||
recipeOpenCanvasConfirm: '打开配方会替换当前画布。确定继续吗?',
|
||
recipeAppendError: '无法追加此配方到当前画布。',
|
||
recipeRestoreError: '恢复工作流配方失败。',
|
||
recipeDelete: '删除',
|
||
recipeDeleteConfirm: '确定删除这个工作流配方吗?',
|
||
recipeDeleteError: '删除工作流配方失败。',
|
||
recipeSaveError: '保存工作流配方失败。',
|
||
recipeNodeParams: '节点参数',
|
||
recipeUnknownNode: '未知节点',
|
||
recipeCopyParameter: '复制参数值',
|
||
recipeCopied: '已复制',
|
||
recipeCopyFailed: '复制失败',
|
||
recipeAdvancedInfo: '高级信息',
|
||
recipeInlineEditName: '点击修改名称',
|
||
recipeInlineEditNotes: '点击修改备注',
|
||
recipeInlineEditTags: '编辑标签',
|
||
recipeInlineSave: '保存',
|
||
recipeInlineCancel: '取消',
|
||
recipeInlineSaving: '保存中…',
|
||
recipeInlineError: '保存失败,请重试。',
|
||
recipeInlineNameRequired: '名称不能为空。',
|
||
recipeSomeParamsInWorkflow: '其余复杂或敏感参数仍保存在完整工作流中。',
|
||
recipeMoreNodesInWorkflow: '其余节点仍保存在完整工作流中。',
|
||
recipeMissingNodes: '当前缺少以下节点类型,恢复后可能无法运行',
|
||
recipeBindImage: '绑定封面图片',
|
||
recipeNoImage: '不绑定图片',
|
||
recipeCanvasPreview: '当前画布',
|
||
recipeLoadingRecentImages: '正在读取最近生成结果…',
|
||
recipeRecentImages: '最近生成结果',
|
||
recipeRecentImagesUnavailable: '暂时无法读取最近生成结果。',
|
||
recipeChoosePinnedParams: '选择关键参数',
|
||
recipePinnedParamsUnavailable: '{count} 个原有关键参数已不再对应当前画布,保存后不会保留。',
|
||
recipePinnedParams: '关键参数',
|
||
recipeKeepImage: '保留当前封面',
|
||
recipeEdit: '编辑',
|
||
recipeEditTitle: '编辑工作流配方',
|
||
recipeEditNodeParams: '编辑节点参数',
|
||
recipeComplexParam: '复杂值仅展示;完整值仍安全保存在工作流中。',
|
||
recipeHistory: '版本历史',
|
||
recipeHistoryEmpty: '还没有历史版本。更新配方后会自动保留旧版本。',
|
||
recipeUnknownVersion: '未知时间',
|
||
recipeRestoreVersion: '恢复此版本',
|
||
recipeRestoreVersionConfirm: '恢复此版本会覆盖当前配方,但当前内容会先自动存入历史。继续吗?',
|
||
recipeEditCanvas: '载入画布编辑',
|
||
recipeEditCanvasConfirm: '载入会替换当前画布。完成结构编辑后,点击“更新当前配方”即可保存为新版本。继续吗?',
|
||
recipeUpdate: '保存更新',
|
||
recipeUpdateCurrent: '更新当前配方',
|
||
recipeUpdateError: '更新工作流配方失败。',
|
||
recipeViewDetails: '查看详情',
|
||
recipeDetailBack: '返回配方列表',
|
||
recipeDetailOverview: '概览',
|
||
recipeDetailModels: '模型与复现',
|
||
recipeDetailParameters: '参数',
|
||
recipeDetailVersions: '版本',
|
||
recipeDetailSummary: '摘要',
|
||
recipeDetailModelComposition: '模型组成',
|
||
recipeDetailBaseModel: '主模型',
|
||
recipeDetailIdentity: '已验证身份',
|
||
recipeDetailUnverified: '未验证模型',
|
||
recipeDetailMissingNodes: '缺失节点类型',
|
||
recipeDetailFingerprint: '工作流指纹',
|
||
recipeDetailNotIndexed: '尚未索引',
|
||
recipeDetailLoraSummary: 'LoRA',
|
||
recipeDetailSampler: '采样器',
|
||
recipeDetailResolution: '分辨率',
|
||
recipeDetailUnavailable: '不可用',
|
||
recipeDetailNoNotes: '没有备注。',
|
||
recipeDetailUpdated: '更新时间',
|
||
recipeDetailCopyPrompt: '复制提示词',
|
||
recipeDetailCopyFingerprint: '复制工作流指纹',
|
||
recipeDetailCopyHash: '复制完整哈希',
|
||
recipeDetailPrompts: '提示词',
|
||
recipeDetailPositivePrompt: '正向提示词',
|
||
recipeDetailNegativePrompt: '负面提示词',
|
||
recipeDetailNoPrompts: '此配方没有可安全展示的提示词摘要。',
|
||
recipeDetailExpandValue: '展开完整内容',
|
||
recipeDetailCollapseValue: '收起内容',
|
||
recipeIdentityVerified: '身份已验证',
|
||
recipeIdentityUnverified: '已知本地文件,身份未验证',
|
||
recipeIdentityUnavailable: '不可用',
|
||
recipeDetailRefreshAvailability: '检查本机可用性',
|
||
recipeDetailRefreshing: '检查中…',
|
||
recipeDetailRefreshError: '检查本机可用性失败',
|
||
recipeDetailAvailable: '本机可用',
|
||
recipeDetailMissing: '本机缺失',
|
||
recipeDetailAvailabilityNotChecked: '尚未检查本机',
|
||
recipeDetailNoModelReferences: '没有识别到受支持的模型加载器。其他自定义控件保留在参数和完整工作流中。',
|
||
recipeDetailModel: '模型',
|
||
recipeModelPath: '模型路径',
|
||
recipeOpenLocalModel: '打开本地模型详情',
|
||
recipeMatchLocalModel: '匹配本地模型',
|
||
recipeMatchingLocalModel: '正在匹配本地模型…',
|
||
recipeLocalModelNotFound: '暂未找到匹配的本地模型。',
|
||
recipeLocalModelAmbiguous: '找到多个候选,请先补充模型身份信息。',
|
||
recipeLocalModelMatchError: '匹配失败,请稍后重试。',
|
||
recipeDetailSearchParameters: '按节点、类型或控件名称搜索…',
|
||
recipeDetailWidget: '控件',
|
||
recipeDetailNoParameters: '没有匹配的安全参数。',
|
||
recipeDetailCurrentVersion: '当前版本',
|
||
recipeCompareVersion: '对比此版本',
|
||
recipeDiffLoading: '正在比较…',
|
||
recipeDiffSummary: '变更摘要',
|
||
recipeDiffBefore: '之前',
|
||
recipeDiffAfter: '之后',
|
||
recipeDiffNoChanges: '两个版本没有检测到有意义的变更。',
|
||
recipeDiffError: '无法读取此历史版本。',
|
||
recipeDiffPinned: '钉选参数',
|
||
recipeDiffPrompts: '提示词',
|
||
recipeDiffModels: '模型引用',
|
||
recipeDiffParameters: '参数摘要',
|
||
recipeDiffWorkflow: '工作流结构',
|
||
recipeDiffPresentation: '展示信息',
|
||
recipeDiffOther: '其他',
|
||
recipeDetailUnknownTime: '未知时间',
|
||
recipeDetailLoadingPreviews: '正在加载本机模型预览…',
|
||
recipeDetailCurrentPreview: '当前本机预览',
|
||
recipeDetailNoPreview: '暂无预览',
|
||
recipeSaveModelPreviewSnapshots: '保存模型预览快照',
|
||
recipeSaveModelPreviewSnapshotsHint: '为当前版本保存小尺寸静态缩略图;不会复制视频,也不会写入工作流图。',
|
||
recipeDetailSavedSnapshot: '已保存快照',
|
||
|
||
},
|
||
en: {
|
||
title: '📦 Anomalous Model Browser',
|
||
scan: '🔄 Scan folder and sync Civitai data',
|
||
scanTitle: 'Scan Folder',
|
||
scanConfirm: 'Notice:\nThe scan process will automatically compare with Civitai and rename your local files.\nStart scan?',
|
||
scanning: 'Scanning...',
|
||
scanBg: '🚀 Scan started in background!',
|
||
scanDone: 'Done',
|
||
scanCompleteMsg: '✅ Scan Complete!\n\n⚠️ Note: Please click [Refresh] to sync the model list since files were renamed.',
|
||
eco: '🔋 Eco Mode (Play video on hover)',
|
||
autoPlay: '🎬 AutoPlay Videos (High perf cost)',
|
||
togglePlayTitle: 'Toggle Play Mode',
|
||
clean: '🧹 Clean orphaned .info files',
|
||
cleanTitle: 'Clean Duplicate Info',
|
||
cleanConfirm: 'This will globally scan and delete all redundant .civitai.info files. Continue?',
|
||
cleaning: 'Cleaning',
|
||
cleanDone: '✅ Clean Complete! Deleted',
|
||
files: 'files.',
|
||
cleanFail: '❌ Failed: ',
|
||
cleanErr: '❌ Error: ',
|
||
folders: '📂 Folders',
|
||
collapseAll: '➖ Collapse All',
|
||
expandAll: '➕ Expand All',
|
||
noModels: 'No models found in this folder.',
|
||
noPreview: 'No preview available',
|
||
clickScan: 'Click Scan',
|
||
back: '⬅️ Back to grid',
|
||
delModel: '🗑️ Delete',
|
||
delConfirm: 'Are you sure you want to permanently delete',
|
||
delConfirm2: ' and all its associated configs, previews, and cache files? This action is irreversible!',
|
||
delSuccess: '✅ Delete Complete!\n',
|
||
delNote: '\n\n⚠️ Note: Please restart ComfyUI, otherwise continuing to use it due to cache will cause errors.',
|
||
delFail: '❌ Delete Failed: ',
|
||
copyAll: '📋 Copy All',
|
||
copied: '✅ Copied!',
|
||
clickToCopy: 'Click to copy: ',
|
||
compatibleModels: '🔗 Compatible Models',
|
||
loadingCompatible: 'Loading...',
|
||
backToPrev: '🔙 Back to prev',
|
||
applyToCanvas: '➕ Add Node',
|
||
applySuccess: '✅ Added to workflow',
|
||
help: 'Help',
|
||
helpTitle: '📖 User Manual',
|
||
helpContent: `
|
||
<div style="line-height: 1.6; font-size: 0.95em; color: #eee; padding: 10px;">
|
||
<h3 style="color:#00ffcc; margin-top:0;">📖 Step-by-Step Guide</h3>
|
||
<p><strong>1. 🔄 Prerequisites (Scan Wizard)</strong><br>Location: The <strong>Scan (🔄)</strong> icon at the bottom left.<br>This is the most crucial step! Open the Scan Wizard and execute a scan. Keep your network connected. (API-KEY may be needed in Settings for NSFW Civitai models). Scanning activates all core features.</p>
|
||
<p><strong>2. 🩺 Fix Broken Nodes (Model Doctor)</strong><br>Location: The 2nd icon <strong>(Stethoscope 🩺)</strong> from the bottom left.<br>When importing a workflow/image exported by this plugin and nodes turn red, open the Model Doctor to intelligently identify and replace them with correct local paths.</p>
|
||
<p><strong>3. 🤖 Visual Info (Node Assistant)</strong><br>Location: The 3rd icon <strong>(Robot 🤖)</strong> from the bottom left.<br>The redesigned action card can replace the current model or insert a LoRA before/after a compatible MODEL + CLIP chain. Picker cards show category and base-model badges. LoRA choices default to the connected main model's type when metadata is available, with an option to show all LoRAs. Folder browsing, full-path search, sorting, and ambiguous-branch protection remain available.</p>
|
||
<p><strong>4. ⚙️ Settings Panel</strong><br>Location: The <strong>Gear (⚙️)</strong> icon at the bottom left.<br>Adjust language and UI scale. Open “Model Settings” to choose always-play or hover-play video covers and optimized thumbnails or original covers. Detail pages always retain original image quality.</p>
|
||
<p><strong>5. 📑 Top Navigation & Notebook</strong><br>Location: Top right tabs <strong>Models (📦)</strong>, <strong>Gallery (🖼️)</strong>, <strong>Notebook (📑)</strong>, <strong>Dock (◧)</strong>.<br>Click Notebook -> click <strong>➕</strong> -> select Base Model (e.g. SD1.5) -> pick Main Model & LoRA. Click <strong>📝 Edit Raw/Paste</strong> to input prompts, select language on top-left for bilingual translation. Confirm to auto-chunk tags (supports find/replace & direct edit). Finally, click <strong>🚀 Send to Canvas</strong>!</p>
|
||
<p><strong>6. 📁 Folder Manager</strong><br>Location: Inside the Settings (⚙️) panel, click <strong>📁 Manage Folders</strong>.<br>Use this to hide unneeded built-in folders. Hidden folders will be completely skipped by background scans and I/O reads, achieving true "zero performance cost". You can also drag and drop to reorder how folders appear in the sidebar.</p>
|
||
<p><strong>7. 📥 Workflow Export & Import (Share Code)</strong><br>Location: The <strong>Import/Export (📥)</strong> icon to the left of the Settings gear.<br>You can encode your current workflow into a single share code for easy sharing on social platforms. Others can simply copy this code and paste it here to instantly import the workflow. The system will also automatically pre-check if the required models exist locally.</p>
|
||
<p><strong>8. 💬 Submit Feedback / Report Bug</strong><br>Location: Inside the Settings (⚙️) panel, click <strong>💬 Submit Feedback / Report Bug</strong>.<br>If you encounter bugs or have feature requests, click this to go directly to our GitHub Issues page.</p>
|
||
</div>`,
|
||
notebooks: 'Notebooks',
|
||
notebookTitle: 'Notebook Manager',
|
||
workspace: 'Workspace',
|
||
workspaceTitle: 'Creative Workspace',
|
||
promptNotes: 'Prompt Notes',
|
||
createNotebook: 'New',
|
||
saveNotebook: '💾 Save',
|
||
deleteNotebook: '🗑️ Delete',
|
||
renameNotebook: '✏️ Rename',
|
||
baseModel: 'Base Model',
|
||
mainModel: 'Main Model',
|
||
sendToCanvas: '🚀 Send to Canvas',
|
||
translate: 'Translate',
|
||
newNotebookName: 'New Notebook Name',
|
||
noBaseModel: 'Select a Base Model first',
|
||
closeHelp: 'Close Manual',
|
||
delSure: '⚠️ Sure?',
|
||
dockTitle: 'Dock to Left',
|
||
replaceAll: 'Replace All',
|
||
editRaw: '📝 Edit Raw / Paste',
|
||
findPlaceholder: 'Find...',
|
||
replacePlaceholder: 'Replace with...',
|
||
models: 'Models',
|
||
gallery: 'Gallery',
|
||
apiKeyConfig: '🔑 Civitai API Key Config (For downloading previews)',
|
||
apiKeyPrompt: 'Enter your Civitai API Key:',
|
||
settingsBtn: 'Settings',
|
||
closeSettings: '✖ Close Settings',
|
||
doctorBtn: 'Node Assistant',
|
||
importBtn: '📥 Import / Export Workflow (Share Code)',
|
||
recipeTitle: 'Workflow Recipes',
|
||
recipeClose: 'Close Workflow Recipes',
|
||
recipeSaveCurrent: 'Save Current Workflow',
|
||
recipeSaveTitle: 'Save Workflow Recipe',
|
||
recipeName: 'Name',
|
||
recipeDefaultName: 'New Workflow Recipe',
|
||
recipeNameRequired: 'Enter a recipe name.',
|
||
recipeTags: 'Tags',
|
||
recipeTagsHint: 'For example: portrait, SDXL, upscale',
|
||
recipeNotes: 'Notes',
|
||
recipeNotesHint: 'Why this version works well…',
|
||
recipeThumbnail: 'Workflow thumbnail',
|
||
recipeCancel: 'Cancel',
|
||
recipeSave: 'Save',
|
||
recipeSaving: 'Saving…',
|
||
recipeSaveReceipt: 'Saved: {nodes} nodes, {links} links, {groups} groups.',
|
||
recipeSaveReceiptMismatch: 'Saved, but the integrity receipt differs from the current canvas. Reopen the recipe to verify it.',
|
||
recipeEmpty: 'No Workflow Recipes yet. Save a workflow that is working well.',
|
||
recipeLoadError: 'Could not load Workflow Recipes.',
|
||
recipeUntitled: 'Untitled Recipe',
|
||
recipeSearchPlaceholder: 'Search names, notes, or tags…',
|
||
recipeClearFilters: 'Clear filters',
|
||
recipeNoTags: 'No tags yet',
|
||
recipeNoMatches: 'No recipes match. Clear the search or tag filters.',
|
||
recipeFilterByTag: 'Filter by this tag',
|
||
recipeImport: 'Import package',
|
||
recipeExport: 'Export package',
|
||
recipeExportError: 'Could not export the Workflow Recipe package.',
|
||
recipeImportError: 'Could not import the Workflow Recipe package.',
|
||
recipeExportSnapshotsConfirm: 'Include model preview snapshots in the export?\n\nSnapshots are presentation data; video covers are reduced to lightweight stills and original videos are never packed.',
|
||
recipeExportHistoryConfirm: 'Include historical versions in the export?\n\nHistory may contain older prompts and notes.',
|
||
recipeExportRedactIdentityConfirm: 'Remove model SHA-256, size, and provenance information?\n\nChoose OK to remove those identity fields.',
|
||
recipeImportSummary: 'The recipe package passed inspection. Import these contents?',
|
||
recipeImportAssets: 'Preview assets',
|
||
recipeImportHistory: 'Historical versions',
|
||
recipeImportRenamePrompt: 'This recipe name already exists. Enter the imported name:',
|
||
recipeModel: 'Model',
|
||
recipeLoras: 'LoRAs',
|
||
recipePrompt: 'Positive prompt',
|
||
recipeSteps: 'Steps',
|
||
recipeRestore: 'Restore version',
|
||
recipeOpenCanvas: 'Open in Canvas',
|
||
recipeAppendCanvas: 'Append to Canvas',
|
||
recipeOpenCanvasConfirm: 'Opening this recipe replaces the current canvas. Continue?',
|
||
recipeAppendError: 'Could not append this recipe to the current canvas.',
|
||
recipeRestoreError: 'Could not restore this Workflow Recipe.',
|
||
recipeDelete: 'Delete',
|
||
recipeDeleteConfirm: 'Delete this Workflow Recipe?',
|
||
recipeDeleteError: 'Could not delete this Workflow Recipe.',
|
||
recipeSaveError: 'Could not save this Workflow Recipe.',
|
||
recipeNodeParams: 'Node parameters',
|
||
recipeUnknownNode: 'Unknown node',
|
||
recipeCopyParameter: 'Copy parameter value',
|
||
recipeCopied: 'Copied',
|
||
recipeCopyFailed: 'Copy failed',
|
||
recipeAdvancedInfo: 'Advanced information',
|
||
recipeInlineEditName: 'Click to edit the name',
|
||
recipeInlineEditNotes: 'Click to edit notes',
|
||
recipeInlineEditTags: 'Edit tags',
|
||
recipeInlineSave: 'Save',
|
||
recipeInlineCancel: 'Cancel',
|
||
recipeInlineSaving: 'Saving…',
|
||
recipeInlineError: 'Could not save. Try again.',
|
||
recipeInlineNameRequired: 'Name cannot be empty.',
|
||
recipeSomeParamsInWorkflow: 'Other complex or sensitive parameters remain in the full workflow.',
|
||
recipeMoreNodesInWorkflow: 'Other nodes remain in the full workflow.',
|
||
recipeMissingNodes: 'These node types are currently missing; the restored workflow may not run',
|
||
recipeBindImage: 'Bind cover image',
|
||
recipeNoImage: 'No image',
|
||
recipeCanvasPreview: 'Current canvas',
|
||
recipeLoadingRecentImages: 'Loading recent outputs…',
|
||
recipeRecentImages: 'Recent outputs',
|
||
recipeRecentImagesUnavailable: 'Recent outputs are currently unavailable.',
|
||
recipeChoosePinnedParams: 'Choose key parameters',
|
||
recipePinnedParamsUnavailable: '{count} previous key parameter(s) no longer match the canvas and will not be retained.',
|
||
recipePinnedParams: 'Key parameters',
|
||
recipeKeepImage: 'Keep current cover',
|
||
recipeEdit: 'Edit',
|
||
recipeEditTitle: 'Edit Workflow Recipe',
|
||
recipeEditNodeParams: 'Edit node parameters',
|
||
recipeComplexParam: 'Complex values are shown only; the full value remains safely stored in the workflow.',
|
||
recipeHistory: 'Version history',
|
||
recipeHistoryEmpty: 'No prior version yet. The previous version is retained automatically on update.',
|
||
recipeUnknownVersion: 'Unknown time',
|
||
recipeRestoreVersion: 'Restore this version',
|
||
recipeRestoreVersionConfirm: 'Restore this version? The current recipe will first be retained in history.',
|
||
recipeEditCanvas: 'Edit on canvas',
|
||
recipeEditCanvasConfirm: 'Loading replaces the current canvas. After structural edits, use Update Current Recipe to save a new version. Continue?',
|
||
recipeUpdate: 'Save updates',
|
||
recipeUpdateCurrent: 'Update Current Recipe',
|
||
recipeUpdateError: 'Could not update this Workflow Recipe.',
|
||
recipeViewDetails: 'View details',
|
||
recipeDetailBack: 'Back to recipes',
|
||
recipeDetailOverview: 'Overview',
|
||
recipeDetailModels: 'Models & reproducibility',
|
||
recipeDetailParameters: 'Parameters',
|
||
recipeDetailVersions: 'Versions',
|
||
recipeDetailSummary: 'Summary',
|
||
recipeDetailModelComposition: 'Model composition',
|
||
recipeDetailBaseModel: 'Base model',
|
||
recipeDetailIdentity: 'Verified identities',
|
||
recipeDetailUnverified: 'Unverified models',
|
||
recipeDetailMissingNodes: 'Missing node types',
|
||
recipeDetailFingerprint: 'Workflow fingerprint',
|
||
recipeDetailNotIndexed: 'Not indexed yet',
|
||
recipeDetailLoraSummary: 'LoRA',
|
||
recipeDetailSampler: 'Sampler',
|
||
recipeDetailResolution: 'Resolution',
|
||
recipeDetailUnavailable: 'Unavailable',
|
||
recipeDetailNoNotes: 'No notes.',
|
||
recipeDetailUpdated: 'Updated',
|
||
recipeDetailCopyPrompt: 'Copy prompt',
|
||
recipeDetailCopyFingerprint: 'Copy workflow fingerprint',
|
||
recipeDetailCopyHash: 'Copy full hash',
|
||
recipeDetailPrompts: 'Prompts',
|
||
recipeDetailPositivePrompt: 'Positive prompt',
|
||
recipeDetailNegativePrompt: 'Negative prompt',
|
||
recipeDetailNoPrompts: 'This recipe has no safe prompt summary to show.',
|
||
recipeDetailExpandValue: 'Show full value',
|
||
recipeDetailCollapseValue: 'Collapse value',
|
||
recipeIdentityVerified: 'Verified identity',
|
||
recipeIdentityUnverified: 'Known locally, identity unverified',
|
||
recipeIdentityUnavailable: 'Unavailable',
|
||
recipeDetailRefreshAvailability: 'Check local availability',
|
||
recipeDetailRefreshing: 'Checking…',
|
||
recipeDetailRefreshError: 'Could not check local availability.',
|
||
recipeDetailAvailable: 'Available locally',
|
||
recipeDetailMissing: 'Missing locally',
|
||
recipeDetailAvailabilityNotChecked: 'Not checked locally',
|
||
recipeDetailNoModelReferences: 'No supported model loaders were detected. Other custom widgets remain in Parameters and the full workflow.',
|
||
recipeDetailModel: 'Model',
|
||
recipeModelPath: 'Model path',
|
||
recipeOpenLocalModel: 'Open local model details',
|
||
recipeMatchLocalModel: 'Match local model',
|
||
recipeMatchingLocalModel: 'Matching local model…',
|
||
recipeLocalModelNotFound: 'No matching local model was found.',
|
||
recipeLocalModelAmbiguous: 'Multiple candidates found; add model identity information first.',
|
||
recipeLocalModelMatchError: 'Matching failed. Try again later.',
|
||
recipeDetailSearchParameters: 'Search node, type, or widget name…',
|
||
recipeDetailWidget: 'Widget',
|
||
recipeDetailNoParameters: 'No safe parameters match the search.',
|
||
recipeDetailCurrentVersion: 'Current version',
|
||
recipeCompareVersion: 'Compare version',
|
||
recipeDiffLoading: 'Comparing…',
|
||
recipeDiffSummary: 'Change summary',
|
||
recipeDiffBefore: 'Before',
|
||
recipeDiffAfter: 'After',
|
||
recipeDiffNoChanges: 'No meaningful changes were detected between these versions.',
|
||
recipeDiffError: 'Could not read this historical version.',
|
||
recipeDiffPinned: 'Pinned parameters',
|
||
recipeDiffPrompts: 'Prompts',
|
||
recipeDiffModels: 'Model references',
|
||
recipeDiffParameters: 'Parameter summary',
|
||
recipeDiffWorkflow: 'Workflow structure',
|
||
recipeDiffPresentation: 'Presentation',
|
||
recipeDiffOther: 'Other',
|
||
recipeDetailUnknownTime: 'Unknown time',
|
||
recipeDetailLoadingPreviews: 'Loading local model previews…',
|
||
recipeDetailCurrentPreview: 'Current local preview',
|
||
recipeDetailNoPreview: 'No preview available',
|
||
recipeSaveModelPreviewSnapshots: 'Save model preview snapshots',
|
||
recipeSaveModelPreviewSnapshotsHint: 'Keeps small static thumbnails with this version. Videos and the workflow graph are not copied.',
|
||
recipeDetailSavedSnapshot: 'Saved snapshot',
|
||
}
|
||
};
|