Remove the 32 screen words no code uses any more
Old toolbar, scan-wizard and workspace labels and a few hints, in both languages; each
checked against the web files, tests and the backend (no t() use, no key built in a
template, no error message used as a key). The UI map's scanner read a quoted string with
an escape ('\n') wrong and missed the key after it on the same line (delNote is used).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b220fc8a31
commit
ce35145e67
@@ -111,4 +111,4 @@ node tools/ui_map.mjs build 写出 docs/ui-map.md:按页面列
|
||||
|
||||
## 还没统一的
|
||||
|
||||
- `node tools/ui_map.mjs build` 的最后一节列出没有文件用到的文字(目前 33 条),清理前先确认不是拼出来的 key。
|
||||
- `node tools/ui_map.mjs build` 的最后一节列出没有文件用到的文字(2026-10-25 清理过一次,当时为 0),清理前先确认不是拼出来的 key、也不是后端错误信息当 key 用的(`t(error.message)`)。
|
||||
|
||||
@@ -96,7 +96,7 @@ function cssIndex() {
|
||||
}
|
||||
|
||||
const KEY_LIKE = /^[a-zA-Z][A-Za-z0-9_]{2,}$/;
|
||||
const STRING = /'([^'\\\n]*)'|"([^"\\\n]*)"/g;
|
||||
const STRING = /'((?:[^'\\\n]|\\.)*)'|"((?:[^"\\\n]|\\.)*)"/g; // a '\n' inside is part of the string
|
||||
const TEMPLATE = /`([^`]*)`/g;
|
||||
|
||||
/** What one web file uses: words (key -> lines), addresses, classes (class -> lines), imports. */
|
||||
|
||||
@@ -87,7 +87,6 @@ export const i18n = {
|
||||
versionError_no_previous: "没有可以撤销的切换。",
|
||||
versionError_no_default_branch: "无法确定默认分支。",
|
||||
updateGuideTourBanner: "💡 想在主界面实地体验?点击开启按键遮罩导览 ›",
|
||||
materialCardDragHint: "按住可拖拽至画布节点注入参数,或拖至空白处载入工作流",
|
||||
updateGuideImportTitle: "模型拖进来,自动放对地方",
|
||||
updateGuideImportBody: "在模型页点“+ 导入”,或者直接把模型文件拖到模型页上:每个文件会说明它是什么(Checkpoint、LoRA、VAE、文本编码器…)、什么底模、要放到哪个文件夹,放的位置可以改。本机已经有的同一个文件会指出来,什么都不会被覆盖,放好后自动扫描。",
|
||||
updateGuideTidyTitle: "整理:放错文件夹的、重复的模型",
|
||||
@@ -109,9 +108,7 @@ export const i18n = {
|
||||
materialTargetChanged: "请重新选中一个节点后再应用。",
|
||||
materialNoCompatibleValues: "这些值不能安全地写进这个节点。",
|
||||
materialValueUnavailable: "有个选项在这个节点里没有(本机缺模型,或节点版本不同)。",
|
||||
promptCompositionHint: "填写提示词,选择放在前面或后面,再拖到提示词节点。保留节点原有文字,不自动运行。",
|
||||
nodeValuesSaved: "已存下这些节点的参数。以后选中同类节点,在“当前节点”里就能套用。",
|
||||
promptDragNoteHint: "按住卡头或便签,直接拖拽至画布节点",
|
||||
recipeMoveKept: "以前从出图收下的完整工作流还有 {count} 个没移过来。它们现在都放在这里,以后在图库点 ☆ 也能直接存成工作流。",
|
||||
recipeMoveKeptButton: "移到这里",
|
||||
recipeMovedKept: "移过来了 {count} 个。原来的文件还在,只是不再单独列出。",
|
||||
@@ -132,7 +129,6 @@ export const i18n = {
|
||||
materialCopyFailed: "复制失败",
|
||||
materialClickToCopy: "点击复制数值",
|
||||
promptAdjustRole: "调整用途",
|
||||
notebookCompanionModels: "配套模型",
|
||||
notebookMore: "更多",
|
||||
notebookDoneEditing: "📑 查看双语分词",
|
||||
loras: "LoRA 模型",
|
||||
@@ -143,18 +139,6 @@ export const i18n = {
|
||||
materialChars: "{count} 字符",
|
||||
materialCopyPromptText: "复制提示词",
|
||||
notebookSaveError: '保存失败,修改仍留在编辑器中,请重试。',
|
||||
title: 'Anomalous 模型浏览器',
|
||||
scan: '🔄 扫描目录并同步 C 站数据',
|
||||
scanTitle: '扫描目录',
|
||||
scanConfirm: '注意:\n扫描过程将会自动比对 Civitai 并重命名本地模型,同时清理损坏文件。\n确定要开始扫描吗?',
|
||||
scanning: '扫描中...',
|
||||
scanBg: '扫描后台启动!',
|
||||
scanDone: '完成',
|
||||
scanCompleteMsg: '✅ 扫描完成!\n\n⚠️ 提示:由于部分模型已被重命名或去重,请点击 ComfyUI 的 [Refresh] 按钮以同步最新的模型列表。',
|
||||
togglePlayTitle: '切换播放模式',
|
||||
clean: '🧹 清理无效的 .info 残留文件',
|
||||
cleanTitle: '清理重复 Info',
|
||||
files: '个文件。',
|
||||
folderOpen: '打开',
|
||||
folderOpenHint: '在资源管理器里打开这个文件夹',
|
||||
folderAll: '全部',
|
||||
@@ -388,15 +372,12 @@ export const i18n = {
|
||||
loading: '加载中…',
|
||||
loadingCompatible: '加载中...',
|
||||
applyToCanvas: '插入节点',
|
||||
workspace: '创作工作台',
|
||||
workspaceTitle: '创作工作台',
|
||||
materialLoadError: "存过的提示词读取失败。",
|
||||
materialOpenWorkflow: '打开完整工作流',
|
||||
materialOpenError: "无法打开这张图里的工作流。",
|
||||
materialViewDetails: '查看详情',
|
||||
materialViewParameters: '查看参数',
|
||||
materialDetailLoadError: "无法读取这条提示词。",
|
||||
materialSourceImage: '来源图片',
|
||||
workbenchLoadSuccess: '工作流已成功加载到 ComfyUI 画布!',
|
||||
workbenchLoadFailed: '无法加载工作流到画布:',
|
||||
workbenchNext: '下一张 (→)',
|
||||
@@ -416,7 +397,6 @@ export const i18n = {
|
||||
workbenchLocateModel: '🔎 定位模型',
|
||||
materialInspecting: '正在读取图片中的工作流与参数…',
|
||||
materialInspectError: "这张图片没有可复用的完整 UI 工作流。",
|
||||
materialSaveHint: '完整工作流保留精确种子;作为单节点参数应用时会跳过种子。',
|
||||
materialPromptRoleHelp: "已按工作流连线自动识别提示词角色;识别不准时可手动改为正面、负面、共用或忽略。每条提示词都能直接存进提示词库。",
|
||||
materialNoPromptData: '(无嵌入提示词数据)',
|
||||
materialSaveError: "没存上,请再试一次。",
|
||||
@@ -635,11 +615,9 @@ export const i18n = {
|
||||
comboLoadError: "搭配读取失败,请重试。",
|
||||
comboBack: "← 全部搭配",
|
||||
noteNeedsClip: "UNet 模型不带文本编码器:画布上没有唯一的 CLIP 加载节点,提示词节点的 clip 要你自己接。",
|
||||
translate: '翻译',
|
||||
dialogOk: '确定',
|
||||
dialogCopySelected: '已选中,按 Ctrl+C',
|
||||
dialogCancel: '取消',
|
||||
scanModelPrecisely: '精准扫描此模型',
|
||||
galleryLoading: '加载中...',
|
||||
galleryErrorPrefix: '错误: ',
|
||||
galleryDelete: '删除',
|
||||
@@ -1110,7 +1088,6 @@ export const i18n = {
|
||||
notebookPromptPlaceholder: "在此输入提示词内容(英文词条用逗号分隔,支持自动双语切词翻译)...",
|
||||
notebookUnlabeledBase: '未标注基础模型',
|
||||
notebookUnetNeedsTextEncoder: 'UNet 模型不含文本编码器:发送到画布后,把你的 CLIP 加载器接到两个提示词节点上。LoRA 会用“仅模型”加载。',
|
||||
mainPreflightTitle: '导入工作流 (预检海关)',
|
||||
mainOpenTitle: '打开 Anomalous 模型浏览器',
|
||||
mainInterfaceCategory: '界面',
|
||||
mainLanguageSetting: '插件语言',
|
||||
@@ -1692,7 +1669,6 @@ export const i18n = {
|
||||
aiGistPictures: "{count} 张图",
|
||||
aiGistModels: "{count} 个模型",
|
||||
aiGistMap: "节点结构",
|
||||
aiStageEmpty: "AI 画的面板会出现在这里。",
|
||||
aiTasksToggle: "收起 / 展开任务列表(收起时鼠标移上来就能看)",
|
||||
aiSideResize: "拖动调整宽度,双击恢复默认;点一下后也可以按 ← → 调",
|
||||
aiKind_user: "你",
|
||||
@@ -2398,7 +2374,6 @@ export const i18n = {
|
||||
settingsReportHelp: "先在这里写一两句话,再去 GitHub 提交;版本、显卡这些信息会自动附上。",
|
||||
settingsSuggestHelp: "想要的功能、哪里不顺手,都可以写。",
|
||||
sidebarScan: '扫描模型',
|
||||
sidebarGlobalWizardTitle: '全局扫描向导',
|
||||
sidebarProvenance: '在工作流里记下模型指纹',
|
||||
sidebarProvenanceDesc: "生成图片或保存工作流时,把模型的指纹和下载链接一起存进去。以后模型改名、换电脑,模型检查也能找回来;别人拿到工作流,也知道模型去哪下。",
|
||||
sidebarScanning: '⏳ 扫描中...',
|
||||
@@ -2518,7 +2493,6 @@ export const i18n = {
|
||||
promptNodePositive: "CLIP 文本编码器 (正向)",
|
||||
promptNodeNegative: "CLIP 文本编码器 (负向)",
|
||||
toolWorkflowTransferTitle: "分享与导入",
|
||||
toolModelSourcesTitle: "每个模型去哪下载,链接可以改成任何网站",
|
||||
toolModelSourcesShort: '模型来源',
|
||||
modelSourcesTitle: "模型来源",
|
||||
modelSourcesLead: "每个模型从哪下载。链接存在模型自己的信息里(编辑窗口里的“下载地址”就是它),哪个网站都行;“当前工作流”里的链接还会存进工作流,分享时一起带走。",
|
||||
@@ -2578,10 +2552,6 @@ export const i18n = {
|
||||
editRaw: '编辑全文',
|
||||
findPlaceholder: '查找...',
|
||||
replacePlaceholder: '替换为...',
|
||||
models: '模型',
|
||||
gallery: '图库',
|
||||
settingsBtn: '设置',
|
||||
importBtn: '导入工作流 (分享码)',
|
||||
recipeTitle: '工作流',
|
||||
recipeSaveCurrent: '保存当前工作流',
|
||||
recipeSaveTitle: "保存为工作流",
|
||||
@@ -2680,7 +2650,6 @@ export const i18n = {
|
||||
recipeGalleryLoadError: "无法读取这个工作流的图库。",
|
||||
recipeGalleryScanHint: '已检查最近 {count} 张含工作流数据的 PNG。',
|
||||
recipeGalleryOpenImage: '查看原图',
|
||||
recipeGalleryDifferenceHint: '以下是节点参数的差异;图库匹配本身只关注节点类型。',
|
||||
recipeParameterSnapshots: '已存参数方案',
|
||||
recipeParameterLoading: '正在读取预设…',
|
||||
recipeParameterLoadError: '无法读取预设列表。',
|
||||
@@ -2897,7 +2866,6 @@ export const i18n = {
|
||||
ttsSetupCharacters: "{count} 个角色",
|
||||
ttsSetupDownloading: "基础文件下载中…",
|
||||
ttsSetupPackagesMissing: "缺 {count} 个 Python 包",
|
||||
ttsSetupPretrained: "基础文件",
|
||||
ttsSetupPackages: "Python 包",
|
||||
ttsSetupRemote: "这些操作只能在运行 ComfyUI 的那台电脑上进行(当前是从别的设备打开的)。",
|
||||
ttsSetupFailed: "操作失败:{error}",
|
||||
@@ -3507,7 +3475,6 @@ export const i18n = {
|
||||
versionError_no_previous: "There is no switch to undo.",
|
||||
versionError_no_default_branch: "Couldn't determine the default branch.",
|
||||
updateGuideTourBanner: "💡 Prefer to see them in action? Start Spotlight Tour ›",
|
||||
materialCardDragHint: "Hold and drag onto canvas nodes to inject values, or drop on empty canvas to load workflow",
|
||||
updateGuideImportTitle: "Drop a model in, it goes to the right folder",
|
||||
updateGuideImportBody: "Models page → + Import, or drop model files on the models page: each file says what it is (Checkpoint, LoRA, VAE, text encoder…), its base model and the folder it will go to, which you can change. A file you already have is pointed out, nothing is ever replaced, and the new files are scanned right after.",
|
||||
updateGuideTidyTitle: "Tidy: models in the wrong folder, files you have twice",
|
||||
@@ -3529,9 +3496,7 @@ export const i18n = {
|
||||
materialTargetChanged: "Select one node again before applying.",
|
||||
materialNoCompatibleValues: "These values cannot be put into this node safely.",
|
||||
materialValueUnavailable: "One of the choices is not available on this node (a model this computer lacks, or another node version).",
|
||||
promptCompositionHint: "Enter prompt text, choose beginning or end, then drag onto a prompt node. Existing text is preserved. This does not start generation.",
|
||||
nodeValuesSaved: "Saved these nodes' values. Select a node of the same kind and they are in Current node.",
|
||||
promptDragNoteHint: "Hold card or header to drag onto canvas node",
|
||||
recipeMoveKept: "{count} whole workflows kept from your images earlier are not here yet. They belong here now; the gallery's star keeps new ones as workflows.",
|
||||
recipeMoveKeptButton: "Move them here",
|
||||
recipeMovedKept: "Moved {count}. The original files stay; they are just not listed on their own.",
|
||||
@@ -3552,7 +3517,6 @@ export const i18n = {
|
||||
materialCopyFailed: "Copy failed",
|
||||
materialClickToCopy: "Click to copy",
|
||||
promptAdjustRole: "Adjust role",
|
||||
notebookCompanionModels: "Companion models",
|
||||
notebookMore: "More",
|
||||
notebookDoneEditing: "📑 View Bilingual Tags",
|
||||
loras: "LoRA Models",
|
||||
@@ -3563,18 +3527,6 @@ export const i18n = {
|
||||
materialChars: "{count} {count|character|characters}",
|
||||
materialCopyPromptText: "Copy prompt",
|
||||
notebookSaveError: 'Save failed. Your edits remain in the editor; please retry.',
|
||||
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.',
|
||||
togglePlayTitle: 'Toggle Play Mode',
|
||||
clean: '🧹 Clean orphaned .info files',
|
||||
cleanTitle: 'Clean Duplicate Info',
|
||||
files: 'files.',
|
||||
folderOpen: 'Open',
|
||||
folderOpenHint: 'Open this folder in the file manager',
|
||||
folderAll: 'All',
|
||||
@@ -3808,15 +3760,12 @@ export const i18n = {
|
||||
loading: 'Loading…',
|
||||
loadingCompatible: 'Loading...',
|
||||
applyToCanvas: 'Add Node',
|
||||
workspace: 'Workspace',
|
||||
workspaceTitle: 'Creative Workspace',
|
||||
materialLoadError: "Could not read your saved prompts.",
|
||||
materialOpenWorkflow: 'Open Full Workflow',
|
||||
materialOpenError: "Could not open this image's workflow.",
|
||||
materialViewDetails: 'View Details',
|
||||
materialViewParameters: 'View Parameters',
|
||||
materialDetailLoadError: "Could not read this prompt.",
|
||||
materialSourceImage: 'Source Image',
|
||||
workbenchLoadSuccess: 'Workflow loaded to ComfyUI canvas successfully!',
|
||||
workbenchLoadFailed: 'Could not load workflow into canvas: ',
|
||||
workbenchNext: 'Next (→)',
|
||||
@@ -3836,7 +3785,6 @@ export const i18n = {
|
||||
workbenchLocateModel: '🔎 Show model',
|
||||
materialInspecting: 'Reading the embedded workflow and parameters…',
|
||||
materialInspectError: "This image has no complete UI workflow to reuse.",
|
||||
materialSaveHint: 'The full workflow keeps the exact seed; single-node application skips seed widgets.',
|
||||
materialPromptRoleHelp: "Prompt roles are detected from workflow links. Correct them as positive, negative, shared, or ignored when needed. Each prompt can be saved to your prompts.",
|
||||
materialNoPromptData: '(No embedded prompt data)',
|
||||
materialSaveError: "It was not saved; try again.",
|
||||
@@ -4055,11 +4003,9 @@ export const i18n = {
|
||||
comboLoadError: "Could not load the combos; try again.",
|
||||
comboBack: "← All combos",
|
||||
noteNeedsClip: "A UNet model has no text encoder and the canvas has no single CLIP loader, so connect the prompt nodes' clip yourself.",
|
||||
translate: 'Translate',
|
||||
dialogOk: 'OK',
|
||||
dialogCopySelected: 'Selected: press Ctrl+C',
|
||||
dialogCancel: 'Cancel',
|
||||
scanModelPrecisely: 'Scan This Model',
|
||||
galleryLoading: 'Loading...',
|
||||
galleryErrorPrefix: 'Error: ',
|
||||
galleryDelete: 'Delete',
|
||||
@@ -4530,7 +4476,6 @@ export const i18n = {
|
||||
notebookPromptPlaceholder: "Enter prompt here (comma-separated for tags, bilingual translation supported)...",
|
||||
notebookUnlabeledBase: 'No base model listed',
|
||||
notebookUnetNeedsTextEncoder: 'UNet models have no text encoder: after sending to the canvas, connect your CLIP loader to the two prompt nodes. LoRAs are loaded model-only.',
|
||||
mainPreflightTitle: 'Pre-flight Import Workflow',
|
||||
mainOpenTitle: 'Open Anomalous Model Browser',
|
||||
mainInterfaceCategory: 'Interface',
|
||||
mainLanguageSetting: 'Plugin language',
|
||||
@@ -5112,7 +5057,6 @@ export const i18n = {
|
||||
aiGistPictures: "{count} {count|picture|pictures}",
|
||||
aiGistModels: "{count} {count|model|models}",
|
||||
aiGistMap: "Node map",
|
||||
aiStageEmpty: "The AI's panels show here.",
|
||||
aiTasksToggle: "Fold or show the task list (folded, point here to peek)",
|
||||
aiSideResize: "Drag to resize; double-click for the usual width; once clicked, ← → resize too",
|
||||
aiKind_user: "You",
|
||||
@@ -5818,7 +5762,6 @@ export const i18n = {
|
||||
settingsReportHelp: "Write a sentence or two here, then submit it on GitHub; versions and hardware are attached for you.",
|
||||
settingsSuggestHelp: "A feature you want, or something that feels awkward.",
|
||||
sidebarScan: 'Scan models',
|
||||
sidebarGlobalWizardTitle: 'Global Scan Wizard',
|
||||
sidebarProvenance: 'Record model fingerprints in workflows',
|
||||
sidebarProvenanceDesc: "Generated images and saved workflows also store each model's fingerprint and download link, so Model Check can find the model after a rename or on another computer, and whoever gets the workflow knows where to download it.",
|
||||
sidebarScanning: '⏳ Scanning...',
|
||||
@@ -5938,7 +5881,6 @@ export const i18n = {
|
||||
promptNodePositive: "CLIP Text Encode (Positive)",
|
||||
promptNodeNegative: "CLIP Text Encode (Negative)",
|
||||
toolWorkflowTransferTitle: "Share and import",
|
||||
toolModelSourcesTitle: "Where each model is downloaded; any site's link can go here",
|
||||
toolModelSourcesShort: 'Sources',
|
||||
modelSourcesTitle: "Model sources",
|
||||
modelSourcesLead: "Where each model is downloaded. A link is kept in the model's own information (the editor's download link is the same), from any site; links of this workflow's models are kept in the workflow too, so they travel with it.",
|
||||
@@ -5998,10 +5940,6 @@ export const i18n = {
|
||||
editRaw: 'Edit full text',
|
||||
findPlaceholder: 'Find...',
|
||||
replacePlaceholder: 'Replace with...',
|
||||
models: 'Models',
|
||||
gallery: 'Gallery',
|
||||
settingsBtn: 'Settings',
|
||||
importBtn: 'Import Workflow (Share Code)',
|
||||
recipeTitle: 'Workflows',
|
||||
recipeSaveCurrent: 'Save Current Workflow',
|
||||
recipeSaveTitle: "Save workflow",
|
||||
@@ -6100,7 +6038,6 @@ export const i18n = {
|
||||
recipeGalleryLoadError: "Could not load this workflow's gallery.",
|
||||
recipeGalleryScanHint: 'Checked the latest {count} {count|PNG|PNGs} with workflow metadata.',
|
||||
recipeGalleryOpenImage: 'View full image',
|
||||
recipeGalleryDifferenceHint: 'These are node-parameter differences; gallery matching only uses node types.',
|
||||
recipeParameterSnapshots: 'Parameter snapshots',
|
||||
recipeParameterLoading: 'Loading parameter snapshots…',
|
||||
recipeParameterLoadError: 'Could not load parameter snapshots.',
|
||||
@@ -6317,7 +6254,6 @@ export const i18n = {
|
||||
ttsSetupCharacters: "{count} {count|character|characters}",
|
||||
ttsSetupDownloading: "downloading pretrained files…",
|
||||
ttsSetupPackagesMissing: "{count} Python packages missing",
|
||||
ttsSetupPretrained: "Pretrained files",
|
||||
ttsSetupPackages: "Python packages",
|
||||
ttsSetupRemote: "These actions only work on the computer running ComfyUI (this page was opened from another device).",
|
||||
ttsSetupFailed: "Could not do that: {error}",
|
||||
|
||||
Reference in New Issue
Block a user