mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-25 15:15:44 -03:00
feat(import): add import-only option for recipes without downloading missing LoRAs
Add dual-button design in recipe import flow: - Details step: [Import Recipe Only] [Import & Download] - Location step: [Back] [Import & Download] (removed redundant Import Only) Changes: - templates/components/import_modal.html: Add secondary button for import-only - static/js/managers/ImportManager.js: Add saveRecipeOnlyFromDetails() method - static/js/managers/import/RecipeDataManager.js: Update button state management - static/js/managers/import/DownloadManager.js: Support skipDownload flag - locales/*.json: Complete all translation TODOs Closes #868
This commit is contained in:
125
locales/de.json
125
locales/de.json
@@ -645,6 +645,8 @@
|
|||||||
"root": "Stammverzeichnis",
|
"root": "Stammverzeichnis",
|
||||||
"browseFolders": "Ordner durchsuchen:",
|
"browseFolders": "Ordner durchsuchen:",
|
||||||
"downloadAndSaveRecipe": "Herunterladen & Rezept speichern",
|
"downloadAndSaveRecipe": "Herunterladen & Rezept speichern",
|
||||||
|
"importRecipeOnly": "Nur Rezept importieren",
|
||||||
|
"importAndDownload": "Importieren & Herunterladen",
|
||||||
"downloadMissingLoras": "Fehlende LoRAs herunterladen",
|
"downloadMissingLoras": "Fehlende LoRAs herunterladen",
|
||||||
"saveRecipe": "Rezept speichern",
|
"saveRecipe": "Rezept speichern",
|
||||||
"loraCountInfo": "({existing}/{total} in Bibliothek)",
|
"loraCountInfo": "({existing}/{total} in Bibliothek)",
|
||||||
@@ -732,61 +734,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "[TODO: Translate] Batch Import Recipes",
|
"title": "Batch Import Recipes",
|
||||||
"action": "[TODO: Translate] Batch Import",
|
"action": "Batch Import",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL List",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "Directory",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
||||||
"directoryDescription": "[TODO: Translate] Enter a directory path to import all images from that folder.",
|
"directoryDescription": "Enter a directory path to import all images from that folder.",
|
||||||
"urlsLabel": "[TODO: Translate] Image URLs or Local Paths",
|
"urlsLabel": "Image URLs or Local Paths",
|
||||||
"urlsPlaceholder": "[TODO: Translate] https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "Enter one URL or path per line",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "Directory Path",
|
||||||
"directoryPlaceholder": "[TODO: Translate] /path/to/images/folder",
|
"directoryPlaceholder": "/path/to/images/folder",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "Browse",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "Include subdirectories",
|
||||||
"tagsOptional": "[TODO: Translate] Tags (optional, applied to all recipes)",
|
"tagsOptional": "Tags (optional, applied to all recipes)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "Enter tags separated by commas",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "Tags will be added to all imported recipes",
|
||||||
"skipNoMetadata": "[TODO: Translate] Skip images without metadata",
|
"skipNoMetadata": "Skip images without metadata",
|
||||||
"skipNoMetadataHelp": "[TODO: Translate] Images without LoRA metadata will be skipped automatically.",
|
"skipNoMetadataHelp": "Images without LoRA metadata will be skipped automatically.",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "Start Import",
|
||||||
"startImport": "[TODO: Translate] Start Import",
|
"startImport": "Start Import",
|
||||||
"importing": "[TODO: Translate] Importing...",
|
"importing": "Importing...",
|
||||||
"progress": "[TODO: Translate] Progress",
|
"progress": "Progress",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "Total",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "Success",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "Failed",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "Skipped",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "Current",
|
||||||
"currentItem": "[TODO: Translate] Current",
|
"currentItem": "Current",
|
||||||
"preparing": "[TODO: Translate] Preparing...",
|
"preparing": "Preparing...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "Cancel",
|
||||||
"cancelImport": "[TODO: Translate] Cancel",
|
"cancelImport": "Cancel",
|
||||||
"cancelled": "[TODO: Translate] Import cancelled",
|
"cancelled": "Import cancelled",
|
||||||
"completed": "[TODO: Translate] Import completed",
|
"completed": "Import completed",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "Completed with errors",
|
||||||
"completedSuccess": "[TODO: Translate] Successfully imported {count} recipe(s)",
|
"completedSuccess": "Successfully imported {count} recipe(s)",
|
||||||
"successCount": "[TODO: Translate] Successful",
|
"successCount": "Successful",
|
||||||
"failedCount": "[TODO: Translate] Failed",
|
"failedCount": "Failed",
|
||||||
"skippedCount": "[TODO: Translate] Skipped",
|
"skippedCount": "Skipped",
|
||||||
"totalProcessed": "[TODO: Translate] Total processed",
|
"totalProcessed": "Total processed",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "View Details",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "New Import",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "Please enter the directory path manually. File browser is not available in this browser.",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "Directory selected: {path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "File browser not available. Please enter the directory path manually.",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "Back to parent directory",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "Folders",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} folders",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "Image Files",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "images",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} images",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "Select This Folder",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "[TODO: Translate] Please enter at least one URL or path",
|
"enterUrls": "Please enter at least one URL or path",
|
||||||
"enterDirectory": "[TODO: Translate] Please enter a directory path",
|
"enterDirectory": "Please enter a directory path",
|
||||||
"startFailed": "[TODO: Translate] Failed to start import: {message}"
|
"startFailed": "Failed to start import: {message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "Verarbeitungsfehler: {message}",
|
"processingError": "Verarbeitungsfehler: {message}",
|
||||||
"folderBrowserError": "Fehler beim Laden des Ordner-Browsers: {message}",
|
"folderBrowserError": "Fehler beim Laden des Ordner-Browsers: {message}",
|
||||||
"recipeSaveFailed": "Fehler beim Speichern des Rezepts: {error}",
|
"recipeSaveFailed": "Fehler beim Speichern des Rezepts: {error}",
|
||||||
|
"recipeSaved": "Recipe saved successfully",
|
||||||
"importFailed": "Import fehlgeschlagen: {message}",
|
"importFailed": "Import fehlgeschlagen: {message}",
|
||||||
"folderTreeFailed": "Fehler beim Laden des Ordnerbaums",
|
"folderTreeFailed": "Fehler beim Laden des Ordnerbaums",
|
||||||
"folderTreeError": "Fehler beim Laden des Ordnerbaums",
|
"folderTreeError": "Fehler beim Laden des Ordnerbaums",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "Failed to start batch import: {message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "Cancelling batch import...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "Failed to cancel batch import: {message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "Please enter at least one URL or file path",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "Please enter a directory path",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "Failed to browse directory: {message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "Directory selected: {path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "Keine Modelle ausgewählt",
|
"noModelsSelected": "Keine Modelle ausgewählt",
|
||||||
|
|||||||
@@ -645,6 +645,8 @@
|
|||||||
"root": "Root",
|
"root": "Root",
|
||||||
"browseFolders": "Browse Folders:",
|
"browseFolders": "Browse Folders:",
|
||||||
"downloadAndSaveRecipe": "Download & Save Recipe",
|
"downloadAndSaveRecipe": "Download & Save Recipe",
|
||||||
|
"importRecipeOnly": "Import Recipe Only",
|
||||||
|
"importAndDownload": "Import & Download",
|
||||||
"downloadMissingLoras": "Download Missing LoRAs",
|
"downloadMissingLoras": "Download Missing LoRAs",
|
||||||
"saveRecipe": "Save Recipe",
|
"saveRecipe": "Save Recipe",
|
||||||
"loraCountInfo": "({existing}/{total} in library)",
|
"loraCountInfo": "({existing}/{total} in library)",
|
||||||
@@ -1495,6 +1497,7 @@
|
|||||||
"processingError": "Processing error: {message}",
|
"processingError": "Processing error: {message}",
|
||||||
"folderBrowserError": "Error loading folder browser: {message}",
|
"folderBrowserError": "Error loading folder browser: {message}",
|
||||||
"recipeSaveFailed": "Failed to save recipe: {error}",
|
"recipeSaveFailed": "Failed to save recipe: {error}",
|
||||||
|
"recipeSaved": "Recipe saved successfully",
|
||||||
"importFailed": "Import failed: {message}",
|
"importFailed": "Import failed: {message}",
|
||||||
"folderTreeFailed": "Failed to load folder tree",
|
"folderTreeFailed": "Failed to load folder tree",
|
||||||
"folderTreeError": "Error loading folder tree",
|
"folderTreeError": "Error loading folder tree",
|
||||||
|
|||||||
125
locales/es.json
125
locales/es.json
@@ -645,6 +645,8 @@
|
|||||||
"root": "Raíz",
|
"root": "Raíz",
|
||||||
"browseFolders": "Explorar carpetas:",
|
"browseFolders": "Explorar carpetas:",
|
||||||
"downloadAndSaveRecipe": "Descargar y guardar receta",
|
"downloadAndSaveRecipe": "Descargar y guardar receta",
|
||||||
|
"importRecipeOnly": "Importar solo la receta",
|
||||||
|
"importAndDownload": "Importar y descargar",
|
||||||
"downloadMissingLoras": "Descargar LoRAs faltantes",
|
"downloadMissingLoras": "Descargar LoRAs faltantes",
|
||||||
"saveRecipe": "Guardar receta",
|
"saveRecipe": "Guardar receta",
|
||||||
"loraCountInfo": "({existing}/{total} en la biblioteca)",
|
"loraCountInfo": "({existing}/{total} en la biblioteca)",
|
||||||
@@ -732,61 +734,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "[TODO: Translate] Batch Import Recipes",
|
"title": "Batch Import Recipes",
|
||||||
"action": "[TODO: Translate] Batch Import",
|
"action": "Batch Import",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL List",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "Directory",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
||||||
"directoryDescription": "[TODO: Translate] Enter a directory path to import all images from that folder.",
|
"directoryDescription": "Enter a directory path to import all images from that folder.",
|
||||||
"urlsLabel": "[TODO: Translate] Image URLs or Local Paths",
|
"urlsLabel": "Image URLs or Local Paths",
|
||||||
"urlsPlaceholder": "[TODO: Translate] https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "Enter one URL or path per line",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "Directory Path",
|
||||||
"directoryPlaceholder": "[TODO: Translate] /path/to/images/folder",
|
"directoryPlaceholder": "/path/to/images/folder",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "Browse",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "Include subdirectories",
|
||||||
"tagsOptional": "[TODO: Translate] Tags (optional, applied to all recipes)",
|
"tagsOptional": "Tags (optional, applied to all recipes)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "Enter tags separated by commas",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "Tags will be added to all imported recipes",
|
||||||
"skipNoMetadata": "[TODO: Translate] Skip images without metadata",
|
"skipNoMetadata": "Skip images without metadata",
|
||||||
"skipNoMetadataHelp": "[TODO: Translate] Images without LoRA metadata will be skipped automatically.",
|
"skipNoMetadataHelp": "Images without LoRA metadata will be skipped automatically.",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "Start Import",
|
||||||
"startImport": "[TODO: Translate] Start Import",
|
"startImport": "Start Import",
|
||||||
"importing": "[TODO: Translate] Importing...",
|
"importing": "Importing...",
|
||||||
"progress": "[TODO: Translate] Progress",
|
"progress": "Progress",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "Total",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "Success",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "Failed",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "Skipped",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "Current",
|
||||||
"currentItem": "[TODO: Translate] Current",
|
"currentItem": "Current",
|
||||||
"preparing": "[TODO: Translate] Preparing...",
|
"preparing": "Preparing...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "Cancel",
|
||||||
"cancelImport": "[TODO: Translate] Cancel",
|
"cancelImport": "Cancel",
|
||||||
"cancelled": "[TODO: Translate] Import cancelled",
|
"cancelled": "Import cancelled",
|
||||||
"completed": "[TODO: Translate] Import completed",
|
"completed": "Import completed",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "Completed with errors",
|
||||||
"completedSuccess": "[TODO: Translate] Successfully imported {count} recipe(s)",
|
"completedSuccess": "Successfully imported {count} recipe(s)",
|
||||||
"successCount": "[TODO: Translate] Successful",
|
"successCount": "Successful",
|
||||||
"failedCount": "[TODO: Translate] Failed",
|
"failedCount": "Failed",
|
||||||
"skippedCount": "[TODO: Translate] Skipped",
|
"skippedCount": "Skipped",
|
||||||
"totalProcessed": "[TODO: Translate] Total processed",
|
"totalProcessed": "Total processed",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "View Details",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "New Import",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "Please enter the directory path manually. File browser is not available in this browser.",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "Directory selected: {path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "File browser not available. Please enter the directory path manually.",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "Back to parent directory",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "Folders",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} folders",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "Image Files",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "images",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} images",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "Select This Folder",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "[TODO: Translate] Please enter at least one URL or path",
|
"enterUrls": "Please enter at least one URL or path",
|
||||||
"enterDirectory": "[TODO: Translate] Please enter a directory path",
|
"enterDirectory": "Please enter a directory path",
|
||||||
"startFailed": "[TODO: Translate] Failed to start import: {message}"
|
"startFailed": "Failed to start import: {message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "Error de procesamiento: {message}",
|
"processingError": "Error de procesamiento: {message}",
|
||||||
"folderBrowserError": "Error cargando explorador de carpetas: {message}",
|
"folderBrowserError": "Error cargando explorador de carpetas: {message}",
|
||||||
"recipeSaveFailed": "Error al guardar receta: {error}",
|
"recipeSaveFailed": "Error al guardar receta: {error}",
|
||||||
|
"recipeSaved": "Recipe saved successfully",
|
||||||
"importFailed": "Importación falló: {message}",
|
"importFailed": "Importación falló: {message}",
|
||||||
"folderTreeFailed": "Error al cargar árbol de carpetas",
|
"folderTreeFailed": "Error al cargar árbol de carpetas",
|
||||||
"folderTreeError": "Error cargando árbol de carpetas",
|
"folderTreeError": "Error cargando árbol de carpetas",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "Failed to start batch import: {message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "Cancelling batch import...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "Failed to cancel batch import: {message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "Please enter at least one URL or file path",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "Please enter a directory path",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "Failed to browse directory: {message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "Directory selected: {path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "No hay modelos seleccionados",
|
"noModelsSelected": "No hay modelos seleccionados",
|
||||||
|
|||||||
125
locales/fr.json
125
locales/fr.json
@@ -645,6 +645,8 @@
|
|||||||
"root": "Racine",
|
"root": "Racine",
|
||||||
"browseFolders": "Parcourir les dossiers :",
|
"browseFolders": "Parcourir les dossiers :",
|
||||||
"downloadAndSaveRecipe": "Télécharger et sauvegarder la recipe",
|
"downloadAndSaveRecipe": "Télécharger et sauvegarder la recipe",
|
||||||
|
"importRecipeOnly": "Importer uniquement la recette",
|
||||||
|
"importAndDownload": "Importer et télécharger",
|
||||||
"downloadMissingLoras": "Télécharger les LoRAs manquants",
|
"downloadMissingLoras": "Télécharger les LoRAs manquants",
|
||||||
"saveRecipe": "Sauvegarder la recipe",
|
"saveRecipe": "Sauvegarder la recipe",
|
||||||
"loraCountInfo": "({existing}/{total} dans la bibliothèque)",
|
"loraCountInfo": "({existing}/{total} dans la bibliothèque)",
|
||||||
@@ -732,61 +734,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "[TODO: Translate] Batch Import Recipes",
|
"title": "Batch Import Recipes",
|
||||||
"action": "[TODO: Translate] Batch Import",
|
"action": "Batch Import",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL List",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "Directory",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
||||||
"directoryDescription": "[TODO: Translate] Enter a directory path to import all images from that folder.",
|
"directoryDescription": "Enter a directory path to import all images from that folder.",
|
||||||
"urlsLabel": "[TODO: Translate] Image URLs or Local Paths",
|
"urlsLabel": "Image URLs or Local Paths",
|
||||||
"urlsPlaceholder": "[TODO: Translate] https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "Enter one URL or path per line",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "Directory Path",
|
||||||
"directoryPlaceholder": "[TODO: Translate] /path/to/images/folder",
|
"directoryPlaceholder": "/path/to/images/folder",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "Browse",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "Include subdirectories",
|
||||||
"tagsOptional": "[TODO: Translate] Tags (optional, applied to all recipes)",
|
"tagsOptional": "Tags (optional, applied to all recipes)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "Enter tags separated by commas",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "Tags will be added to all imported recipes",
|
||||||
"skipNoMetadata": "[TODO: Translate] Skip images without metadata",
|
"skipNoMetadata": "Skip images without metadata",
|
||||||
"skipNoMetadataHelp": "[TODO: Translate] Images without LoRA metadata will be skipped automatically.",
|
"skipNoMetadataHelp": "Images without LoRA metadata will be skipped automatically.",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "Start Import",
|
||||||
"startImport": "[TODO: Translate] Start Import",
|
"startImport": "Start Import",
|
||||||
"importing": "[TODO: Translate] Importing...",
|
"importing": "Importing...",
|
||||||
"progress": "[TODO: Translate] Progress",
|
"progress": "Progress",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "Total",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "Success",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "Failed",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "Skipped",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "Current",
|
||||||
"currentItem": "[TODO: Translate] Current",
|
"currentItem": "Current",
|
||||||
"preparing": "[TODO: Translate] Preparing...",
|
"preparing": "Preparing...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "Cancel",
|
||||||
"cancelImport": "[TODO: Translate] Cancel",
|
"cancelImport": "Cancel",
|
||||||
"cancelled": "[TODO: Translate] Import cancelled",
|
"cancelled": "Import cancelled",
|
||||||
"completed": "[TODO: Translate] Import completed",
|
"completed": "Import completed",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "Completed with errors",
|
||||||
"completedSuccess": "[TODO: Translate] Successfully imported {count} recipe(s)",
|
"completedSuccess": "Successfully imported {count} recipe(s)",
|
||||||
"successCount": "[TODO: Translate] Successful",
|
"successCount": "Successful",
|
||||||
"failedCount": "[TODO: Translate] Failed",
|
"failedCount": "Failed",
|
||||||
"skippedCount": "[TODO: Translate] Skipped",
|
"skippedCount": "Skipped",
|
||||||
"totalProcessed": "[TODO: Translate] Total processed",
|
"totalProcessed": "Total processed",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "View Details",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "New Import",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "Please enter the directory path manually. File browser is not available in this browser.",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "Directory selected: {path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "File browser not available. Please enter the directory path manually.",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "Back to parent directory",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "Folders",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} folders",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "Image Files",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "images",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} images",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "Select This Folder",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "[TODO: Translate] Please enter at least one URL or path",
|
"enterUrls": "Please enter at least one URL or path",
|
||||||
"enterDirectory": "[TODO: Translate] Please enter a directory path",
|
"enterDirectory": "Please enter a directory path",
|
||||||
"startFailed": "[TODO: Translate] Failed to start import: {message}"
|
"startFailed": "Failed to start import: {message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "Erreur de traitement : {message}",
|
"processingError": "Erreur de traitement : {message}",
|
||||||
"folderBrowserError": "Erreur lors du chargement du navigateur de dossiers : {message}",
|
"folderBrowserError": "Erreur lors du chargement du navigateur de dossiers : {message}",
|
||||||
"recipeSaveFailed": "Échec de la sauvegarde de la recipe : {error}",
|
"recipeSaveFailed": "Échec de la sauvegarde de la recipe : {error}",
|
||||||
|
"recipeSaved": "Recipe saved successfully",
|
||||||
"importFailed": "Échec de l'importation : {message}",
|
"importFailed": "Échec de l'importation : {message}",
|
||||||
"folderTreeFailed": "Échec du chargement de l'arborescence des dossiers",
|
"folderTreeFailed": "Échec du chargement de l'arborescence des dossiers",
|
||||||
"folderTreeError": "Erreur lors du chargement de l'arborescence des dossiers",
|
"folderTreeError": "Erreur lors du chargement de l'arborescence des dossiers",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "Failed to start batch import: {message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "Cancelling batch import...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "Failed to cancel batch import: {message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "Please enter at least one URL or file path",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "Please enter a directory path",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "Failed to browse directory: {message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "Directory selected: {path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "Aucun modèle sélectionné",
|
"noModelsSelected": "Aucun modèle sélectionné",
|
||||||
|
|||||||
125
locales/he.json
125
locales/he.json
@@ -645,6 +645,8 @@
|
|||||||
"root": "שורש",
|
"root": "שורש",
|
||||||
"browseFolders": "דפדף בתיקיות:",
|
"browseFolders": "דפדף בתיקיות:",
|
||||||
"downloadAndSaveRecipe": "הורד ושמור מתכון",
|
"downloadAndSaveRecipe": "הורד ושמור מתכון",
|
||||||
|
"importRecipeOnly": "יבא רק מתכון",
|
||||||
|
"importAndDownload": "יבא והורד",
|
||||||
"downloadMissingLoras": "הורד LoRAs חסרים",
|
"downloadMissingLoras": "הורד LoRAs חסרים",
|
||||||
"saveRecipe": "שמור מתכון",
|
"saveRecipe": "שמור מתכון",
|
||||||
"loraCountInfo": "({existing}/{total} בספרייה)",
|
"loraCountInfo": "({existing}/{total} בספרייה)",
|
||||||
@@ -732,61 +734,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "[TODO: Translate] Batch Import Recipes",
|
"title": "Batch Import Recipes",
|
||||||
"action": "[TODO: Translate] Batch Import",
|
"action": "Batch Import",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL List",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "Directory",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
||||||
"directoryDescription": "[TODO: Translate] Enter a directory path to import all images from that folder.",
|
"directoryDescription": "Enter a directory path to import all images from that folder.",
|
||||||
"urlsLabel": "[TODO: Translate] Image URLs or Local Paths",
|
"urlsLabel": "Image URLs or Local Paths",
|
||||||
"urlsPlaceholder": "[TODO: Translate] https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "Enter one URL or path per line",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "Directory Path",
|
||||||
"directoryPlaceholder": "[TODO: Translate] /path/to/images/folder",
|
"directoryPlaceholder": "/path/to/images/folder",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "Browse",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "Include subdirectories",
|
||||||
"tagsOptional": "[TODO: Translate] Tags (optional, applied to all recipes)",
|
"tagsOptional": "Tags (optional, applied to all recipes)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "Enter tags separated by commas",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "Tags will be added to all imported recipes",
|
||||||
"skipNoMetadata": "[TODO: Translate] Skip images without metadata",
|
"skipNoMetadata": "Skip images without metadata",
|
||||||
"skipNoMetadataHelp": "[TODO: Translate] Images without LoRA metadata will be skipped automatically.",
|
"skipNoMetadataHelp": "Images without LoRA metadata will be skipped automatically.",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "Start Import",
|
||||||
"startImport": "[TODO: Translate] Start Import",
|
"startImport": "Start Import",
|
||||||
"importing": "[TODO: Translate] Importing...",
|
"importing": "Importing...",
|
||||||
"progress": "[TODO: Translate] Progress",
|
"progress": "Progress",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "Total",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "Success",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "Failed",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "Skipped",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "Current",
|
||||||
"currentItem": "[TODO: Translate] Current",
|
"currentItem": "Current",
|
||||||
"preparing": "[TODO: Translate] Preparing...",
|
"preparing": "Preparing...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "Cancel",
|
||||||
"cancelImport": "[TODO: Translate] Cancel",
|
"cancelImport": "Cancel",
|
||||||
"cancelled": "[TODO: Translate] Import cancelled",
|
"cancelled": "Import cancelled",
|
||||||
"completed": "[TODO: Translate] Import completed",
|
"completed": "Import completed",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "Completed with errors",
|
||||||
"completedSuccess": "[TODO: Translate] Successfully imported {count} recipe(s)",
|
"completedSuccess": "Successfully imported {count} recipe(s)",
|
||||||
"successCount": "[TODO: Translate] Successful",
|
"successCount": "Successful",
|
||||||
"failedCount": "[TODO: Translate] Failed",
|
"failedCount": "Failed",
|
||||||
"skippedCount": "[TODO: Translate] Skipped",
|
"skippedCount": "Skipped",
|
||||||
"totalProcessed": "[TODO: Translate] Total processed",
|
"totalProcessed": "Total processed",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "View Details",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "New Import",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "Please enter the directory path manually. File browser is not available in this browser.",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "Directory selected: {path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "File browser not available. Please enter the directory path manually.",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "Back to parent directory",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "Folders",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} folders",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "Image Files",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "images",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} images",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "Select This Folder",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "[TODO: Translate] Please enter at least one URL or path",
|
"enterUrls": "Please enter at least one URL or path",
|
||||||
"enterDirectory": "[TODO: Translate] Please enter a directory path",
|
"enterDirectory": "Please enter a directory path",
|
||||||
"startFailed": "[TODO: Translate] Failed to start import: {message}"
|
"startFailed": "Failed to start import: {message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "שגיאת עיבוד: {message}",
|
"processingError": "שגיאת עיבוד: {message}",
|
||||||
"folderBrowserError": "שגיאה בטעינת דפדפן התיקיות: {message}",
|
"folderBrowserError": "שגיאה בטעינת דפדפן התיקיות: {message}",
|
||||||
"recipeSaveFailed": "שמירת המתכון נכשלה: {error}",
|
"recipeSaveFailed": "שמירת המתכון נכשלה: {error}",
|
||||||
|
"recipeSaved": "Recipe saved successfully",
|
||||||
"importFailed": "הייבוא נכשל: {message}",
|
"importFailed": "הייבוא נכשל: {message}",
|
||||||
"folderTreeFailed": "טעינת עץ התיקיות נכשלה",
|
"folderTreeFailed": "טעינת עץ התיקיות נכשלה",
|
||||||
"folderTreeError": "שגיאה בטעינת עץ התיקיות",
|
"folderTreeError": "שגיאה בטעינת עץ התיקיות",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "Failed to start batch import: {message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "Cancelling batch import...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "Failed to cancel batch import: {message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "Please enter at least one URL or file path",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "Please enter a directory path",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "Failed to browse directory: {message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "Directory selected: {path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "לא נבחרו מודלים",
|
"noModelsSelected": "לא נבחרו מודלים",
|
||||||
|
|||||||
125
locales/ja.json
125
locales/ja.json
@@ -645,6 +645,8 @@
|
|||||||
"root": "ルート",
|
"root": "ルート",
|
||||||
"browseFolders": "フォルダを参照:",
|
"browseFolders": "フォルダを参照:",
|
||||||
"downloadAndSaveRecipe": "ダウンロード & レシピ保存",
|
"downloadAndSaveRecipe": "ダウンロード & レシピ保存",
|
||||||
|
"importRecipeOnly": "レシピのみインポート",
|
||||||
|
"importAndDownload": "インポートとダウンロード",
|
||||||
"downloadMissingLoras": "不足しているLoRAをダウンロード",
|
"downloadMissingLoras": "不足しているLoRAをダウンロード",
|
||||||
"saveRecipe": "レシピを保存",
|
"saveRecipe": "レシピを保存",
|
||||||
"loraCountInfo": "({existing}/{total} ライブラリ内)",
|
"loraCountInfo": "({existing}/{total} ライブラリ内)",
|
||||||
@@ -732,61 +734,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "[TODO: Translate] Batch Import Recipes",
|
"title": "Batch Import Recipes",
|
||||||
"action": "[TODO: Translate] Batch Import",
|
"action": "Batch Import",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL List",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "Directory",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
||||||
"directoryDescription": "[TODO: Translate] Enter a directory path to import all images from that folder.",
|
"directoryDescription": "Enter a directory path to import all images from that folder.",
|
||||||
"urlsLabel": "[TODO: Translate] Image URLs or Local Paths",
|
"urlsLabel": "Image URLs or Local Paths",
|
||||||
"urlsPlaceholder": "[TODO: Translate] https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "Enter one URL or path per line",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "Directory Path",
|
||||||
"directoryPlaceholder": "[TODO: Translate] /path/to/images/folder",
|
"directoryPlaceholder": "/path/to/images/folder",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "Browse",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "Include subdirectories",
|
||||||
"tagsOptional": "[TODO: Translate] Tags (optional, applied to all recipes)",
|
"tagsOptional": "Tags (optional, applied to all recipes)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "Enter tags separated by commas",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "Tags will be added to all imported recipes",
|
||||||
"skipNoMetadata": "[TODO: Translate] Skip images without metadata",
|
"skipNoMetadata": "Skip images without metadata",
|
||||||
"skipNoMetadataHelp": "[TODO: Translate] Images without LoRA metadata will be skipped automatically.",
|
"skipNoMetadataHelp": "Images without LoRA metadata will be skipped automatically.",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "Start Import",
|
||||||
"startImport": "[TODO: Translate] Start Import",
|
"startImport": "Start Import",
|
||||||
"importing": "[TODO: Translate] Importing...",
|
"importing": "Importing...",
|
||||||
"progress": "[TODO: Translate] Progress",
|
"progress": "Progress",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "Total",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "Success",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "Failed",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "Skipped",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "Current",
|
||||||
"currentItem": "[TODO: Translate] Current",
|
"currentItem": "Current",
|
||||||
"preparing": "[TODO: Translate] Preparing...",
|
"preparing": "Preparing...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "Cancel",
|
||||||
"cancelImport": "[TODO: Translate] Cancel",
|
"cancelImport": "Cancel",
|
||||||
"cancelled": "[TODO: Translate] Import cancelled",
|
"cancelled": "Import cancelled",
|
||||||
"completed": "[TODO: Translate] Import completed",
|
"completed": "Import completed",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "Completed with errors",
|
||||||
"completedSuccess": "[TODO: Translate] Successfully imported {count} recipe(s)",
|
"completedSuccess": "Successfully imported {count} recipe(s)",
|
||||||
"successCount": "[TODO: Translate] Successful",
|
"successCount": "Successful",
|
||||||
"failedCount": "[TODO: Translate] Failed",
|
"failedCount": "Failed",
|
||||||
"skippedCount": "[TODO: Translate] Skipped",
|
"skippedCount": "Skipped",
|
||||||
"totalProcessed": "[TODO: Translate] Total processed",
|
"totalProcessed": "Total processed",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "View Details",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "New Import",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "Please enter the directory path manually. File browser is not available in this browser.",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "Directory selected: {path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "File browser not available. Please enter the directory path manually.",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "Back to parent directory",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "Folders",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} folders",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "Image Files",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "images",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} images",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "Select This Folder",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "[TODO: Translate] Please enter at least one URL or path",
|
"enterUrls": "Please enter at least one URL or path",
|
||||||
"enterDirectory": "[TODO: Translate] Please enter a directory path",
|
"enterDirectory": "Please enter a directory path",
|
||||||
"startFailed": "[TODO: Translate] Failed to start import: {message}"
|
"startFailed": "Failed to start import: {message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "処理エラー:{message}",
|
"processingError": "処理エラー:{message}",
|
||||||
"folderBrowserError": "フォルダブラウザの読み込みエラー:{message}",
|
"folderBrowserError": "フォルダブラウザの読み込みエラー:{message}",
|
||||||
"recipeSaveFailed": "レシピの保存に失敗しました:{error}",
|
"recipeSaveFailed": "レシピの保存に失敗しました:{error}",
|
||||||
|
"recipeSaved": "Recipe saved successfully",
|
||||||
"importFailed": "インポートに失敗しました:{message}",
|
"importFailed": "インポートに失敗しました:{message}",
|
||||||
"folderTreeFailed": "フォルダツリーの読み込みに失敗しました",
|
"folderTreeFailed": "フォルダツリーの読み込みに失敗しました",
|
||||||
"folderTreeError": "フォルダツリー読み込みエラー",
|
"folderTreeError": "フォルダツリー読み込みエラー",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "Failed to start batch import: {message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "Cancelling batch import...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "Failed to cancel batch import: {message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "Please enter at least one URL or file path",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "Please enter a directory path",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "Failed to browse directory: {message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "Directory selected: {path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "モデルが選択されていません",
|
"noModelsSelected": "モデルが選択されていません",
|
||||||
|
|||||||
125
locales/ko.json
125
locales/ko.json
@@ -645,6 +645,8 @@
|
|||||||
"root": "루트",
|
"root": "루트",
|
||||||
"browseFolders": "폴더 탐색:",
|
"browseFolders": "폴더 탐색:",
|
||||||
"downloadAndSaveRecipe": "다운로드 및 레시피 저장",
|
"downloadAndSaveRecipe": "다운로드 및 레시피 저장",
|
||||||
|
"importRecipeOnly": "레시피만 가져오기",
|
||||||
|
"importAndDownload": "가져오기 및 다운로드",
|
||||||
"downloadMissingLoras": "누락된 LoRA 다운로드",
|
"downloadMissingLoras": "누락된 LoRA 다운로드",
|
||||||
"saveRecipe": "레시피 저장",
|
"saveRecipe": "레시피 저장",
|
||||||
"loraCountInfo": "({existing}/{total} 라이브러리에 있음)",
|
"loraCountInfo": "({existing}/{total} 라이브러리에 있음)",
|
||||||
@@ -732,61 +734,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "[TODO: Translate] Batch Import Recipes",
|
"title": "Batch Import Recipes",
|
||||||
"action": "[TODO: Translate] Batch Import",
|
"action": "Batch Import",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL List",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "Directory",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
||||||
"directoryDescription": "[TODO: Translate] Enter a directory path to import all images from that folder.",
|
"directoryDescription": "Enter a directory path to import all images from that folder.",
|
||||||
"urlsLabel": "[TODO: Translate] Image URLs or Local Paths",
|
"urlsLabel": "Image URLs or Local Paths",
|
||||||
"urlsPlaceholder": "[TODO: Translate] https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "Enter one URL or path per line",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "Directory Path",
|
||||||
"directoryPlaceholder": "[TODO: Translate] /path/to/images/folder",
|
"directoryPlaceholder": "/path/to/images/folder",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "Browse",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "Include subdirectories",
|
||||||
"tagsOptional": "[TODO: Translate] Tags (optional, applied to all recipes)",
|
"tagsOptional": "Tags (optional, applied to all recipes)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "Enter tags separated by commas",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "Tags will be added to all imported recipes",
|
||||||
"skipNoMetadata": "[TODO: Translate] Skip images without metadata",
|
"skipNoMetadata": "Skip images without metadata",
|
||||||
"skipNoMetadataHelp": "[TODO: Translate] Images without LoRA metadata will be skipped automatically.",
|
"skipNoMetadataHelp": "Images without LoRA metadata will be skipped automatically.",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "Start Import",
|
||||||
"startImport": "[TODO: Translate] Start Import",
|
"startImport": "Start Import",
|
||||||
"importing": "[TODO: Translate] Importing...",
|
"importing": "Importing...",
|
||||||
"progress": "[TODO: Translate] Progress",
|
"progress": "Progress",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "Total",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "Success",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "Failed",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "Skipped",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "Current",
|
||||||
"currentItem": "[TODO: Translate] Current",
|
"currentItem": "Current",
|
||||||
"preparing": "[TODO: Translate] Preparing...",
|
"preparing": "Preparing...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "Cancel",
|
||||||
"cancelImport": "[TODO: Translate] Cancel",
|
"cancelImport": "Cancel",
|
||||||
"cancelled": "[TODO: Translate] Import cancelled",
|
"cancelled": "Import cancelled",
|
||||||
"completed": "[TODO: Translate] Import completed",
|
"completed": "Import completed",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "Completed with errors",
|
||||||
"completedSuccess": "[TODO: Translate] Successfully imported {count} recipe(s)",
|
"completedSuccess": "Successfully imported {count} recipe(s)",
|
||||||
"successCount": "[TODO: Translate] Successful",
|
"successCount": "Successful",
|
||||||
"failedCount": "[TODO: Translate] Failed",
|
"failedCount": "Failed",
|
||||||
"skippedCount": "[TODO: Translate] Skipped",
|
"skippedCount": "Skipped",
|
||||||
"totalProcessed": "[TODO: Translate] Total processed",
|
"totalProcessed": "Total processed",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "View Details",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "New Import",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "Please enter the directory path manually. File browser is not available in this browser.",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "Directory selected: {path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "File browser not available. Please enter the directory path manually.",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "Back to parent directory",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "Folders",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} folders",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "Image Files",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "images",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} images",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "Select This Folder",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "[TODO: Translate] Please enter at least one URL or path",
|
"enterUrls": "Please enter at least one URL or path",
|
||||||
"enterDirectory": "[TODO: Translate] Please enter a directory path",
|
"enterDirectory": "Please enter a directory path",
|
||||||
"startFailed": "[TODO: Translate] Failed to start import: {message}"
|
"startFailed": "Failed to start import: {message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "처리 오류: {message}",
|
"processingError": "처리 오류: {message}",
|
||||||
"folderBrowserError": "폴더 브라우저 로딩 오류: {message}",
|
"folderBrowserError": "폴더 브라우저 로딩 오류: {message}",
|
||||||
"recipeSaveFailed": "레시피 저장 실패: {error}",
|
"recipeSaveFailed": "레시피 저장 실패: {error}",
|
||||||
|
"recipeSaved": "Recipe saved successfully",
|
||||||
"importFailed": "가져오기 실패: {message}",
|
"importFailed": "가져오기 실패: {message}",
|
||||||
"folderTreeFailed": "폴더 트리 로딩 실패",
|
"folderTreeFailed": "폴더 트리 로딩 실패",
|
||||||
"folderTreeError": "폴더 트리 로딩 오류",
|
"folderTreeError": "폴더 트리 로딩 오류",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "Failed to start batch import: {message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "Cancelling batch import...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "Failed to cancel batch import: {message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "Please enter at least one URL or file path",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "Please enter a directory path",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "Failed to browse directory: {message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "Directory selected: {path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "선택된 모델이 없습니다",
|
"noModelsSelected": "선택된 모델이 없습니다",
|
||||||
|
|||||||
125
locales/ru.json
125
locales/ru.json
@@ -645,6 +645,8 @@
|
|||||||
"root": "Корень",
|
"root": "Корень",
|
||||||
"browseFolders": "Обзор папок:",
|
"browseFolders": "Обзор папок:",
|
||||||
"downloadAndSaveRecipe": "Скачать и сохранить рецепт",
|
"downloadAndSaveRecipe": "Скачать и сохранить рецепт",
|
||||||
|
"importRecipeOnly": "Импортировать только рецепт",
|
||||||
|
"importAndDownload": "Импорт и скачивание",
|
||||||
"downloadMissingLoras": "Скачать отсутствующие LoRAs",
|
"downloadMissingLoras": "Скачать отсутствующие LoRAs",
|
||||||
"saveRecipe": "Сохранить рецепт",
|
"saveRecipe": "Сохранить рецепт",
|
||||||
"loraCountInfo": "({existing}/{total} в библиотеке)",
|
"loraCountInfo": "({existing}/{total} в библиотеке)",
|
||||||
@@ -732,61 +734,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "[TODO: Translate] Batch Import Recipes",
|
"title": "Batch Import Recipes",
|
||||||
"action": "[TODO: Translate] Batch Import",
|
"action": "Batch Import",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL List",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "Directory",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
||||||
"directoryDescription": "[TODO: Translate] Enter a directory path to import all images from that folder.",
|
"directoryDescription": "Enter a directory path to import all images from that folder.",
|
||||||
"urlsLabel": "[TODO: Translate] Image URLs or Local Paths",
|
"urlsLabel": "Image URLs or Local Paths",
|
||||||
"urlsPlaceholder": "[TODO: Translate] https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "Enter one URL or path per line",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "Directory Path",
|
||||||
"directoryPlaceholder": "[TODO: Translate] /path/to/images/folder",
|
"directoryPlaceholder": "/path/to/images/folder",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "Browse",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "Include subdirectories",
|
||||||
"tagsOptional": "[TODO: Translate] Tags (optional, applied to all recipes)",
|
"tagsOptional": "Tags (optional, applied to all recipes)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "Enter tags separated by commas",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "Tags will be added to all imported recipes",
|
||||||
"skipNoMetadata": "[TODO: Translate] Skip images without metadata",
|
"skipNoMetadata": "Skip images without metadata",
|
||||||
"skipNoMetadataHelp": "[TODO: Translate] Images without LoRA metadata will be skipped automatically.",
|
"skipNoMetadataHelp": "Images without LoRA metadata will be skipped automatically.",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "Start Import",
|
||||||
"startImport": "[TODO: Translate] Start Import",
|
"startImport": "Start Import",
|
||||||
"importing": "[TODO: Translate] Importing...",
|
"importing": "Importing...",
|
||||||
"progress": "[TODO: Translate] Progress",
|
"progress": "Progress",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "Total",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "Success",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "Failed",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "Skipped",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "Current",
|
||||||
"currentItem": "[TODO: Translate] Current",
|
"currentItem": "Current",
|
||||||
"preparing": "[TODO: Translate] Preparing...",
|
"preparing": "Preparing...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "Cancel",
|
||||||
"cancelImport": "[TODO: Translate] Cancel",
|
"cancelImport": "Cancel",
|
||||||
"cancelled": "[TODO: Translate] Import cancelled",
|
"cancelled": "Import cancelled",
|
||||||
"completed": "[TODO: Translate] Import completed",
|
"completed": "Import completed",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "Completed with errors",
|
||||||
"completedSuccess": "[TODO: Translate] Successfully imported {count} recipe(s)",
|
"completedSuccess": "Successfully imported {count} recipe(s)",
|
||||||
"successCount": "[TODO: Translate] Successful",
|
"successCount": "Successful",
|
||||||
"failedCount": "[TODO: Translate] Failed",
|
"failedCount": "Failed",
|
||||||
"skippedCount": "[TODO: Translate] Skipped",
|
"skippedCount": "Skipped",
|
||||||
"totalProcessed": "[TODO: Translate] Total processed",
|
"totalProcessed": "Total processed",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "View Details",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "New Import",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "Please enter the directory path manually. File browser is not available in this browser.",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "Directory selected: {path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "File browser not available. Please enter the directory path manually.",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "Back to parent directory",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "Folders",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} folders",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "Image Files",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "images",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} images",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "Select This Folder",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "[TODO: Translate] Please enter at least one URL or path",
|
"enterUrls": "Please enter at least one URL or path",
|
||||||
"enterDirectory": "[TODO: Translate] Please enter a directory path",
|
"enterDirectory": "Please enter a directory path",
|
||||||
"startFailed": "[TODO: Translate] Failed to start import: {message}"
|
"startFailed": "Failed to start import: {message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "Ошибка обработки: {message}",
|
"processingError": "Ошибка обработки: {message}",
|
||||||
"folderBrowserError": "Ошибка загрузки браузера папок: {message}",
|
"folderBrowserError": "Ошибка загрузки браузера папок: {message}",
|
||||||
"recipeSaveFailed": "Не удалось сохранить рецепт: {error}",
|
"recipeSaveFailed": "Не удалось сохранить рецепт: {error}",
|
||||||
|
"recipeSaved": "Recipe saved successfully",
|
||||||
"importFailed": "Импорт не удался: {message}",
|
"importFailed": "Импорт не удался: {message}",
|
||||||
"folderTreeFailed": "Не удалось загрузить дерево папок",
|
"folderTreeFailed": "Не удалось загрузить дерево папок",
|
||||||
"folderTreeError": "Ошибка загрузки дерева папок",
|
"folderTreeError": "Ошибка загрузки дерева папок",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "Failed to start batch import: {message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "Cancelling batch import...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "Failed to cancel batch import: {message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "Please enter at least one URL or file path",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "Please enter a directory path",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "Failed to browse directory: {message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "Directory selected: {path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "Модели не выбраны",
|
"noModelsSelected": "Модели не выбраны",
|
||||||
|
|||||||
@@ -645,6 +645,8 @@
|
|||||||
"root": "根目录",
|
"root": "根目录",
|
||||||
"browseFolders": "浏览文件夹:",
|
"browseFolders": "浏览文件夹:",
|
||||||
"downloadAndSaveRecipe": "下载并保存配方",
|
"downloadAndSaveRecipe": "下载并保存配方",
|
||||||
|
"importRecipeOnly": "仅导入配方",
|
||||||
|
"importAndDownload": "导入并下载",
|
||||||
"downloadMissingLoras": "下载缺失的 LoRA",
|
"downloadMissingLoras": "下载缺失的 LoRA",
|
||||||
"saveRecipe": "保存配方",
|
"saveRecipe": "保存配方",
|
||||||
"loraCountInfo": "({existing}/{total} in library)",
|
"loraCountInfo": "({existing}/{total} in library)",
|
||||||
@@ -734,55 +736,55 @@
|
|||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "批量导入配方",
|
"title": "批量导入配方",
|
||||||
"action": "批量导入",
|
"action": "批量导入",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL 列表",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "目录",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "输入图像 URL 或本地文件路径(每行一个)。每个都将作为配方导入。",
|
||||||
"directoryDescription": "输入目录路径以导入该文件夹中的所有图片。",
|
"directoryDescription": "输入目录路径以导入该文件夹中的所有图片。",
|
||||||
"urlsLabel": "图片 URL 或本地路径",
|
"urlsLabel": "图片 URL 或本地路径",
|
||||||
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "每行输入一个 URL 或路径",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "目录路径",
|
||||||
"directoryPlaceholder": "/图片/文件夹/路径",
|
"directoryPlaceholder": "/图片/文件夹/路径",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "浏览",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "包含子目录",
|
||||||
"tagsOptional": "标签(可选,应用于所有配方)",
|
"tagsOptional": "标签(可选,应用于所有配方)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "输入以逗号分隔的标签",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "标签将被添加到所有导入的配方中",
|
||||||
"skipNoMetadata": "跳过无元数据的图片",
|
"skipNoMetadata": "跳过无元数据的图片",
|
||||||
"skipNoMetadataHelp": "没有 LoRA 元数据的图片将自动跳过。",
|
"skipNoMetadataHelp": "没有 LoRA 元数据的图片将自动跳过。",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "开始导入",
|
||||||
"startImport": "开始导入",
|
"startImport": "开始导入",
|
||||||
"importing": "正在导入配方...",
|
"importing": "正在导入配方...",
|
||||||
"progress": "进度",
|
"progress": "进度",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "总计",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "成功",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "失败",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "跳过",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "当前",
|
||||||
"currentItem": "当前",
|
"currentItem": "当前",
|
||||||
"preparing": "准备中...",
|
"preparing": "准备中...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "取消",
|
||||||
"cancelImport": "取消",
|
"cancelImport": "取消",
|
||||||
"cancelled": "批量导入已取消",
|
"cancelled": "批量导入已取消",
|
||||||
"completed": "导入完成",
|
"completed": "导入完成",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "导入完成但有错误",
|
||||||
"completedSuccess": "成功导入 {count} 个配方",
|
"completedSuccess": "成功导入 {count} 个配方",
|
||||||
"successCount": "成功",
|
"successCount": "成功",
|
||||||
"failedCount": "失败",
|
"failedCount": "失败",
|
||||||
"skippedCount": "跳过",
|
"skippedCount": "跳过",
|
||||||
"totalProcessed": "总计处理",
|
"totalProcessed": "总计处理",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "查看详情",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "新建导入",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "请手动输入目录路径。此浏览器中文件浏览器不可用。",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "已选择目录:{path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "文件浏览器不可用。请手动输入目录路径。",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "返回上级目录",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "文件夹",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} 个文件夹",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "图像文件",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "图像",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} 个图像",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "选择此文件夹",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "请至少输入一个 URL 或路径",
|
"enterUrls": "请至少输入一个 URL 或路径",
|
||||||
"enterDirectory": "请输入目录路径",
|
"enterDirectory": "请输入目录路径",
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "处理出错:{message}",
|
"processingError": "处理出错:{message}",
|
||||||
"folderBrowserError": "加载文件夹浏览器出错:{message}",
|
"folderBrowserError": "加载文件夹浏览器出错:{message}",
|
||||||
"recipeSaveFailed": "保存配方失败:{error}",
|
"recipeSaveFailed": "保存配方失败:{error}",
|
||||||
|
"recipeSaved": "配方保存成功",
|
||||||
"importFailed": "导入失败:{message}",
|
"importFailed": "导入失败:{message}",
|
||||||
"folderTreeFailed": "加载文件夹树失败",
|
"folderTreeFailed": "加载文件夹树失败",
|
||||||
"folderTreeError": "加载文件夹树出错",
|
"folderTreeError": "加载文件夹树出错",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "启动批量导入失败:{message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "正在取消批量导入...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "取消批量导入失败:{message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "请输入至少一个 URL 或文件路径",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "请输入目录路径",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "浏览目录失败:{message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "已选择目录:{path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "未选中模型",
|
"noModelsSelected": "未选中模型",
|
||||||
|
|||||||
@@ -645,6 +645,8 @@
|
|||||||
"root": "根目錄",
|
"root": "根目錄",
|
||||||
"browseFolders": "瀏覽資料夾:",
|
"browseFolders": "瀏覽資料夾:",
|
||||||
"downloadAndSaveRecipe": "下載並儲存配方",
|
"downloadAndSaveRecipe": "下載並儲存配方",
|
||||||
|
"importRecipeOnly": "僅匯入配方",
|
||||||
|
"importAndDownload": "匯入並下載",
|
||||||
"downloadMissingLoras": "下載缺少的 LoRA",
|
"downloadMissingLoras": "下載缺少的 LoRA",
|
||||||
"saveRecipe": "儲存配方",
|
"saveRecipe": "儲存配方",
|
||||||
"loraCountInfo": "(庫存 {existing}/{total})",
|
"loraCountInfo": "(庫存 {existing}/{total})",
|
||||||
@@ -732,61 +734,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batchImport": {
|
"batchImport": {
|
||||||
"title": "[TODO: Translate] Batch Import Recipes",
|
"title": "批量匯入配方",
|
||||||
"action": "[TODO: Translate] Batch Import",
|
"action": "批量匯入",
|
||||||
"urlList": "[TODO: Translate] URL List",
|
"urlList": "URL 列表",
|
||||||
"directory": "[TODO: Translate] Directory",
|
"directory": "目錄",
|
||||||
"urlDescription": "[TODO: Translate] Enter image URLs or local file paths (one per line). Each will be imported as a recipe.",
|
"urlDescription": "輸入圖像 URL 或本地檔案路徑(每行一個)。每個都將作為配方匯入。",
|
||||||
"directoryDescription": "[TODO: Translate] Enter a directory path to import all images from that folder.",
|
"directoryDescription": "輸入目錄路徑以匯入該資料夾中的所有圖像。",
|
||||||
"urlsLabel": "[TODO: Translate] Image URLs or Local Paths",
|
"urlsLabel": "圖像 URL 或本地路徑",
|
||||||
"urlsPlaceholder": "[TODO: Translate] https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
"urlsPlaceholder": "https://civitai.com/images/...\nhttps://civitai.com/images/...\nC:/path/to/image.png\n...",
|
||||||
"urlsHint": "[TODO: Translate] Enter one URL or path per line",
|
"urlsHint": "每行輸入一個 URL 或路徑",
|
||||||
"directoryPath": "[TODO: Translate] Directory Path",
|
"directoryPath": "目錄路徑",
|
||||||
"directoryPlaceholder": "[TODO: Translate] /path/to/images/folder",
|
"directoryPlaceholder": "/path/to/images/folder",
|
||||||
"browse": "[TODO: Translate] Browse",
|
"browse": "瀏覽",
|
||||||
"recursive": "[TODO: Translate] Include subdirectories",
|
"recursive": "包含子目錄",
|
||||||
"tagsOptional": "[TODO: Translate] Tags (optional, applied to all recipes)",
|
"tagsOptional": "標籤(可選,應用於所有配方)",
|
||||||
"tagsPlaceholder": "[TODO: Translate] Enter tags separated by commas",
|
"tagsPlaceholder": "輸入以逗號分隔的標籤",
|
||||||
"tagsHint": "[TODO: Translate] Tags will be added to all imported recipes",
|
"tagsHint": "標籤將被添加到所有匯入的配方中",
|
||||||
"skipNoMetadata": "[TODO: Translate] Skip images without metadata",
|
"skipNoMetadata": "跳過無元資料的圖像",
|
||||||
"skipNoMetadataHelp": "[TODO: Translate] Images without LoRA metadata will be skipped automatically.",
|
"skipNoMetadataHelp": "沒有 LoRA 元資料的圖像將被自動跳過。",
|
||||||
"start": "[TODO: Translate] Start Import",
|
"start": "開始匯入",
|
||||||
"startImport": "[TODO: Translate] Start Import",
|
"startImport": "開始匯入",
|
||||||
"importing": "[TODO: Translate] Importing...",
|
"importing": "匯入中...",
|
||||||
"progress": "[TODO: Translate] Progress",
|
"progress": "進度",
|
||||||
"total": "[TODO: Translate] Total",
|
"total": "總計",
|
||||||
"success": "[TODO: Translate] Success",
|
"success": "成功",
|
||||||
"failed": "[TODO: Translate] Failed",
|
"failed": "失敗",
|
||||||
"skipped": "[TODO: Translate] Skipped",
|
"skipped": "跳過",
|
||||||
"current": "[TODO: Translate] Current",
|
"current": "當前",
|
||||||
"currentItem": "[TODO: Translate] Current",
|
"currentItem": "當前項目",
|
||||||
"preparing": "[TODO: Translate] Preparing...",
|
"preparing": "準備中...",
|
||||||
"cancel": "[TODO: Translate] Cancel",
|
"cancel": "取消",
|
||||||
"cancelImport": "[TODO: Translate] Cancel",
|
"cancelImport": "取消匯入",
|
||||||
"cancelled": "[TODO: Translate] Import cancelled",
|
"cancelled": "匯入已取消",
|
||||||
"completed": "[TODO: Translate] Import completed",
|
"completed": "匯入完成",
|
||||||
"completedWithErrors": "[TODO: Translate] Completed with errors",
|
"completedWithErrors": "匯入完成但有錯誤",
|
||||||
"completedSuccess": "[TODO: Translate] Successfully imported {count} recipe(s)",
|
"completedSuccess": "成功匯入 {count} 個配方",
|
||||||
"successCount": "[TODO: Translate] Successful",
|
"successCount": "成功",
|
||||||
"failedCount": "[TODO: Translate] Failed",
|
"failedCount": "失敗",
|
||||||
"skippedCount": "[TODO: Translate] Skipped",
|
"skippedCount": "跳過",
|
||||||
"totalProcessed": "[TODO: Translate] Total processed",
|
"totalProcessed": "總計處理",
|
||||||
"viewDetails": "[TODO: Translate] View Details",
|
"viewDetails": "查看詳情",
|
||||||
"newImport": "[TODO: Translate] New Import",
|
"newImport": "新建匯入",
|
||||||
"manualPathEntry": "[TODO: Translate] Please enter the directory path manually. File browser is not available in this browser.",
|
"manualPathEntry": "請手動輸入目錄路徑。此瀏覽器中檔案瀏覽器不可用。",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {name}. You may need to enter the full path manually.",
|
"batchImportDirectorySelected": "已選擇目錄:{path}",
|
||||||
"batchImportManualEntryRequired": "[TODO: Translate] File browser not available. Please enter the directory path manually.",
|
"batchImportManualEntryRequired": "檔案瀏覽器不可用。請手動輸入目錄路徑。",
|
||||||
"backToParent": "[TODO: Translate] Back to parent directory",
|
"backToParent": "返回上級目錄",
|
||||||
"folders": "[TODO: Translate] Folders",
|
"folders": "資料夾",
|
||||||
"folderCount": "[TODO: Translate] {count} folders",
|
"folderCount": "{count} 個資料夾",
|
||||||
"imageFiles": "[TODO: Translate] Image Files",
|
"imageFiles": "圖像檔案",
|
||||||
"images": "[TODO: Translate] images",
|
"images": "圖像",
|
||||||
"imageCount": "[TODO: Translate] {count} images",
|
"imageCount": "{count} 個圖像",
|
||||||
"selectFolder": "[TODO: Translate] Select This Folder",
|
"selectFolder": "選擇此資料夾",
|
||||||
"errors": {
|
"errors": {
|
||||||
"enterUrls": "[TODO: Translate] Please enter at least one URL or path",
|
"enterUrls": "請輸入至少一個 URL 或路徑",
|
||||||
"enterDirectory": "[TODO: Translate] Please enter a directory path",
|
"enterDirectory": "請輸入目錄路徑",
|
||||||
"startFailed": "[TODO: Translate] Failed to start import: {message}"
|
"startFailed": "啟動匯入失敗:{message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1495,16 +1497,17 @@
|
|||||||
"processingError": "處理錯誤:{message}",
|
"processingError": "處理錯誤:{message}",
|
||||||
"folderBrowserError": "載入資料夾瀏覽器錯誤:{message}",
|
"folderBrowserError": "載入資料夾瀏覽器錯誤:{message}",
|
||||||
"recipeSaveFailed": "儲存配方失敗:{error}",
|
"recipeSaveFailed": "儲存配方失敗:{error}",
|
||||||
|
"recipeSaved": "配方儲存成功",
|
||||||
"importFailed": "匯入失敗:{message}",
|
"importFailed": "匯入失敗:{message}",
|
||||||
"folderTreeFailed": "載入資料夾樹狀結構失敗",
|
"folderTreeFailed": "載入資料夾樹狀結構失敗",
|
||||||
"folderTreeError": "載入資料夾樹狀結構錯誤",
|
"folderTreeError": "載入資料夾樹狀結構錯誤",
|
||||||
"batchImportFailed": "[TODO: Translate] Failed to start batch import: {message}",
|
"batchImportFailed": "啟動批量匯入失敗:{message}",
|
||||||
"batchImportCancelling": "[TODO: Translate] Cancelling batch import...",
|
"batchImportCancelling": "正在取消批量匯入...",
|
||||||
"batchImportCancelFailed": "[TODO: Translate] Failed to cancel batch import: {message}",
|
"batchImportCancelFailed": "取消批量匯入失敗:{message}",
|
||||||
"batchImportNoUrls": "[TODO: Translate] Please enter at least one URL or file path",
|
"batchImportNoUrls": "請輸入至少一個 URL 或檔案路徑",
|
||||||
"batchImportNoDirectory": "[TODO: Translate] Please enter a directory path",
|
"batchImportNoDirectory": "請輸入目錄路徑",
|
||||||
"batchImportBrowseFailed": "[TODO: Translate] Failed to browse directory: {message}",
|
"batchImportBrowseFailed": "瀏覽目錄失敗:{message}",
|
||||||
"batchImportDirectorySelected": "[TODO: Translate] Directory selected: {path}"
|
"batchImportDirectorySelected": "已選擇目錄:{path}"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"noModelsSelected": "未選擇模型",
|
"noModelsSelected": "未選擇模型",
|
||||||
|
|||||||
@@ -142,6 +142,28 @@ export class ImportManager {
|
|||||||
|
|
||||||
// Reset duplicate related properties
|
// Reset duplicate related properties
|
||||||
this.duplicateRecipes = [];
|
this.duplicateRecipes = [];
|
||||||
|
|
||||||
|
// Reset button visibility in location step
|
||||||
|
this.resetLocationStepButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
resetLocationStepButtons() {
|
||||||
|
// Reset buttons to default state
|
||||||
|
const locationStep = document.getElementById('locationStep');
|
||||||
|
if (!locationStep) return;
|
||||||
|
|
||||||
|
const backBtn = locationStep.querySelector('.secondary-btn');
|
||||||
|
const primaryBtn = locationStep.querySelector('.primary-btn');
|
||||||
|
|
||||||
|
// Back button - show
|
||||||
|
if (backBtn) {
|
||||||
|
backBtn.style.display = 'inline-block';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Primary button - reset text
|
||||||
|
if (primaryBtn) {
|
||||||
|
primaryBtn.textContent = translate('recipes.controls.import.downloadAndSaveRecipe', {}, 'Download & Save Recipe');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleImportMode(mode) {
|
toggleImportMode(mode) {
|
||||||
@@ -261,11 +283,57 @@ export class ImportManager {
|
|||||||
this.loadDefaultPathSetting();
|
this.loadDefaultPathSetting();
|
||||||
|
|
||||||
this.updateTargetPath();
|
this.updateTargetPath();
|
||||||
|
|
||||||
|
// Update download button with missing LoRA count (if any)
|
||||||
|
if (this.missingLoras && this.missingLoras.length > 0) {
|
||||||
|
this.updateDownloadButtonCount();
|
||||||
|
this.updateImportButtonsVisibility(true);
|
||||||
|
} else {
|
||||||
|
this.updateImportButtonsVisibility(false);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
showToast('toast.recipes.importFailed', { message: error.message }, 'error');
|
showToast('toast.recipes.importFailed', { message: error.message }, 'error');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateImportButtonsVisibility(hasMissingLoras) {
|
||||||
|
// Update primary button text based on whether there are missing LoRAs
|
||||||
|
const locationStep = document.getElementById('locationStep');
|
||||||
|
if (!locationStep) return;
|
||||||
|
|
||||||
|
const backBtn = locationStep.querySelector('.secondary-btn');
|
||||||
|
const primaryBtn = locationStep.querySelector('.primary-btn');
|
||||||
|
|
||||||
|
// Back button - always show
|
||||||
|
if (backBtn) {
|
||||||
|
backBtn.style.display = 'inline-block';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update primary button text
|
||||||
|
if (primaryBtn) {
|
||||||
|
const downloadCountSpan = locationStep.querySelector('#downloadLoraCount');
|
||||||
|
if (hasMissingLoras) {
|
||||||
|
// Rebuild button content to ensure proper structure
|
||||||
|
const buttonText = translate('recipes.controls.import.importAndDownload', {}, 'Import & Download');
|
||||||
|
primaryBtn.innerHTML = `${buttonText} <span id="downloadLoraCount"></span>`;
|
||||||
|
} else {
|
||||||
|
primaryBtn.textContent = translate('recipes.controls.import.downloadAndSaveRecipe', {}, 'Download & Save Recipe');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateDownloadButtonCount() {
|
||||||
|
// Update the download count badge on the primary button
|
||||||
|
const locationStep = document.getElementById('locationStep');
|
||||||
|
if (!locationStep) return;
|
||||||
|
|
||||||
|
const downloadCountSpan = locationStep.querySelector('#downloadLoraCount');
|
||||||
|
if (downloadCountSpan) {
|
||||||
|
const missingCount = this.missingLoras?.length || 0;
|
||||||
|
downloadCountSpan.textContent = missingCount > 0 ? `(${missingCount})` : '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
backToUpload() {
|
backToUpload() {
|
||||||
this.stepManager.showStep('uploadStep');
|
this.stepManager.showStep('uploadStep');
|
||||||
|
|
||||||
@@ -426,12 +494,54 @@ export class ImportManager {
|
|||||||
const modalTitle = document.querySelector('#importModal h2');
|
const modalTitle = document.querySelector('#importModal h2');
|
||||||
if (modalTitle) modalTitle.textContent = translate('recipes.controls.import.downloadMissingLoras', {}, 'Download Missing LoRAs');
|
if (modalTitle) modalTitle.textContent = translate('recipes.controls.import.downloadMissingLoras', {}, 'Download Missing LoRAs');
|
||||||
|
|
||||||
// Update the save button text
|
// Update button texts and show download count
|
||||||
const saveButton = document.querySelector('#locationStep .primary-btn');
|
const locationStep = document.getElementById('locationStep');
|
||||||
if (saveButton) saveButton.textContent = translate('recipes.controls.import.downloadMissingLoras', {}, 'Download Missing LoRAs');
|
if (!locationStep) return;
|
||||||
|
|
||||||
// Hide the back button
|
const primaryBtn = locationStep.querySelector('.primary-btn');
|
||||||
const backButton = document.querySelector('#locationStep .secondary-btn');
|
const backBtn = locationStep.querySelector('.secondary-btn');
|
||||||
if (backButton) backButton.style.display = 'none';
|
|
||||||
|
// primaryBtn should be the "Import & Download" button
|
||||||
|
if (primaryBtn) {
|
||||||
|
const buttonText = translate('recipes.controls.import.importAndDownload', {}, 'Import & Download');
|
||||||
|
primaryBtn.innerHTML = `${buttonText} <span id="downloadLoraCount">(${recipeData.loras?.length || 0})</span>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide the "Back" button in download-only mode
|
||||||
|
if (backBtn) {
|
||||||
|
backBtn.style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
saveRecipeWithoutDownload() {
|
||||||
|
// Call save recipe with skip download flag
|
||||||
|
return this.downloadManager.saveRecipe(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
async saveRecipeOnlyFromDetails() {
|
||||||
|
// Validate recipe name first
|
||||||
|
if (!this.recipeName) {
|
||||||
|
showToast('toast.recipes.enterRecipeName', {}, 'error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mark deleted LoRAs as excluded
|
||||||
|
if (this.recipeData && this.recipeData.loras) {
|
||||||
|
this.recipeData.loras.forEach(lora => {
|
||||||
|
if (lora.isDeleted) {
|
||||||
|
lora.exclude = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update missing LoRAs list
|
||||||
|
this.missingLoras = this.recipeData.loras.filter(lora =>
|
||||||
|
!lora.existsLocally && !lora.isDeleted);
|
||||||
|
|
||||||
|
// For import only, we don't need downloadableLoRAs
|
||||||
|
this.downloadableLoRAs = [];
|
||||||
|
|
||||||
|
// Save recipe without downloading
|
||||||
|
await this.downloadManager.saveRecipe(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export class DownloadManager {
|
|||||||
this.importManager = importManager;
|
this.importManager = importManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
async saveRecipe() {
|
async saveRecipe(skipDownload = false) {
|
||||||
// Check if we're in download-only mode (for existing recipe)
|
// Check if we're in download-only mode (for existing recipe)
|
||||||
const isDownloadOnly = !!this.importManager.recipeId;
|
const isDownloadOnly = !!this.importManager.recipeId;
|
||||||
|
|
||||||
@@ -20,7 +20,10 @@ export class DownloadManager {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Show progress indicator
|
// Show progress indicator
|
||||||
this.importManager.loadingManager.showSimpleLoading(isDownloadOnly ? translate('recipes.controls.import.downloadingLoras', {}, 'Downloading LoRAs...') : translate('recipes.controls.import.savingRecipe', {}, 'Saving recipe...'));
|
const loadingMessage = skipDownload
|
||||||
|
? translate('recipes.controls.import.savingRecipe', {}, 'Saving recipe...')
|
||||||
|
: (isDownloadOnly ? translate('recipes.controls.import.downloadingLoras', {}, 'Downloading LoRAs...') : translate('recipes.controls.import.savingRecipe', {}, 'Saving recipe...'));
|
||||||
|
this.importManager.loadingManager.showSimpleLoading(loadingMessage);
|
||||||
|
|
||||||
// Only send the complete recipe to save if not in download-only mode
|
// Only send the complete recipe to save if not in download-only mode
|
||||||
if (!isDownloadOnly) {
|
if (!isDownloadOnly) {
|
||||||
@@ -98,15 +101,17 @@ export class DownloadManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if we need to download LoRAs
|
// Check if we need to download LoRAs (skip if skipDownload is true)
|
||||||
let failedDownloads = 0;
|
let failedDownloads = 0;
|
||||||
if (this.importManager.downloadableLoRAs && this.importManager.downloadableLoRAs.length > 0) {
|
if (!skipDownload && this.importManager.downloadableLoRAs && this.importManager.downloadableLoRAs.length > 0) {
|
||||||
await this.downloadMissingLoras();
|
await this.downloadMissingLoras();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show success message
|
// Show success message
|
||||||
if (isDownloadOnly) {
|
if (isDownloadOnly) {
|
||||||
if (failedDownloads === 0) {
|
if (skipDownload) {
|
||||||
|
showToast('toast.recipes.recipeSaved', {}, 'success');
|
||||||
|
} else if (failedDownloads === 0) {
|
||||||
showToast('toast.loras.downloadSuccessful', {}, 'success');
|
showToast('toast.loras.downloadSuccessful', {}, 'success');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -325,7 +325,8 @@ export class RecipeDataManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateNextButtonState() {
|
updateNextButtonState() {
|
||||||
const nextButton = document.querySelector('#detailsStep .primary-btn');
|
const nextButton = document.getElementById('nextBtn');
|
||||||
|
const importOnlyBtn = document.getElementById('importOnlyBtn');
|
||||||
const actionsContainer = document.querySelector('#detailsStep .modal-actions');
|
const actionsContainer = document.querySelector('#detailsStep .modal-actions');
|
||||||
if (!nextButton || !actionsContainer) return;
|
if (!nextButton || !actionsContainer) return;
|
||||||
|
|
||||||
@@ -365,7 +366,7 @@ export class RecipeDataManager {
|
|||||||
buttonsContainer.parentNode.insertBefore(warningContainer, buttonsContainer);
|
buttonsContainer.parentNode.insertBefore(warningContainer, buttonsContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for duplicates but don't change button actions
|
// Check for downloadable missing LoRAs
|
||||||
const missingNotDeleted = this.importManager.recipeData.loras.filter(
|
const missingNotDeleted = this.importManager.recipeData.loras.filter(
|
||||||
lora => !lora.existsLocally && !lora.isDeleted
|
lora => !lora.existsLocally && !lora.isDeleted
|
||||||
).length;
|
).length;
|
||||||
@@ -374,8 +375,16 @@ export class RecipeDataManager {
|
|||||||
nextButton.classList.remove('warning-btn');
|
nextButton.classList.remove('warning-btn');
|
||||||
|
|
||||||
if (missingNotDeleted > 0) {
|
if (missingNotDeleted > 0) {
|
||||||
nextButton.textContent = translate('recipes.controls.import.downloadMissingLoras', {}, 'Download Missing LoRAs');
|
// Show import only button and update primary button
|
||||||
|
if (importOnlyBtn) {
|
||||||
|
importOnlyBtn.style.display = 'inline-block';
|
||||||
|
}
|
||||||
|
nextButton.textContent = translate('recipes.controls.import.importAndDownload', {}, 'Import & Download') + ` (${missingNotDeleted})`;
|
||||||
} else {
|
} else {
|
||||||
|
// Hide import only button and show save recipe
|
||||||
|
if (importOnlyBtn) {
|
||||||
|
importOnlyBtn.style.display = 'none';
|
||||||
|
}
|
||||||
nextButton.textContent = translate('recipes.controls.import.saveRecipe', {}, 'Save Recipe');
|
nextButton.textContent = translate('recipes.controls.import.saveRecipe', {}, 'Save Recipe');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -440,8 +449,11 @@ export class RecipeDataManager {
|
|||||||
// Store only downloadable LoRAs for the download step
|
// Store only downloadable LoRAs for the download step
|
||||||
this.importManager.downloadableLoRAs = this.importManager.missingLoras;
|
this.importManager.downloadableLoRAs = this.importManager.missingLoras;
|
||||||
this.importManager.proceedToLocation();
|
this.importManager.proceedToLocation();
|
||||||
|
} else if (this.importManager.missingLoras.length === 0 && this.importManager.recipeData.loras.some(l => !l.existsLocally)) {
|
||||||
|
// All missing LoRAs are deleted, save recipe without download
|
||||||
|
this.importManager.saveRecipe();
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, save the recipe directly
|
// No missing LoRAs at all, save the recipe directly
|
||||||
this.importManager.saveRecipe();
|
this.importManager.saveRecipe();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,9 +92,10 @@
|
|||||||
<!-- Duplicate recipes will be populated here -->
|
<!-- Duplicate recipes will be populated here -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-actions">
|
<div class="modal-actions" id="detailsStepActions">
|
||||||
<button class="secondary-btn" onclick="importManager.backToUpload()">{{ t('common.actions.back') }}</button>
|
<button class="secondary-btn" onclick="importManager.backToUpload()">{{ t('common.actions.back') }}</button>
|
||||||
<button class="primary-btn" onclick="importManager.proceedFromDetails()">{{ t('common.actions.next') }}</button>
|
<button class="secondary-btn" id="importOnlyBtn" onclick="importManager.saveRecipeOnlyFromDetails()" style="display: none;">{{ t('recipes.controls.import.importRecipeOnly') }}</button>
|
||||||
|
<button class="primary-btn" id="nextBtn" onclick="importManager.proceedFromDetails()">{{ t('common.actions.next') }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -159,7 +160,7 @@
|
|||||||
|
|
||||||
<div class="modal-actions">
|
<div class="modal-actions">
|
||||||
<button class="secondary-btn" onclick="importManager.backToDetails()">{{ t('common.actions.back') }}</button>
|
<button class="secondary-btn" onclick="importManager.backToDetails()">{{ t('common.actions.back') }}</button>
|
||||||
<button class="primary-btn" onclick="importManager.saveRecipe()">{{ t('recipes.controls.import.downloadAndSaveRecipe') }}</button>
|
<button class="primary-btn" onclick="importManager.saveRecipe()">{{ t('recipes.controls.import.importAndDownload') }} <span id="downloadLoraCount"></span></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user