filename_v1.2 → filename_v1.2-ab3c",
- "impact": "Benennt {count} Datei(en) in {groups} Duplikatgruppe(n) um",
- "confirm": "Dateien umbenennen",
- "cancel": "Abbrechen"
+ "metadataFetchSummary": {
+ "title": "Metadaten abrufen — Zusammenfassung",
+ "statSuccess": "Erfolgreich",
+ "statFailed": "Fehlgeschlagen",
+ "statSkipped": "Übersprungen",
+ "statTotal": "Gesamt geprüft",
+ "statDuration": "Dauer",
+ "successMessage": "Alle {count} {type}s erfolgreich aktualisiert!",
+ "failedItems": "Fehlgeschlagene Elemente ({count})",
+ "close": "Schließen",
+ "copyReport": "Bericht kopieren",
+ "downloadCsv": "CSV herunterladen",
+ "columnModelName": "Modellname",
+ "columnError": "Fehler"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "Tags erfolgreich aktualisiert",
+ "updateFailed": "Fehler beim Aktualisieren der Tags"
+ },
+ "validation": {
+ "maxLength": "Tag sollte 30 Zeichen nicht überschreiten",
+ "maxCount": "Maximal 30 Tags erlaubt",
+ "duplicate": "Dieser Tag existiert bereits"
+ }
+ },
+ "initialization": {
+ "title": "Initialisierung",
+ "message": "Ihr Arbeitsbereich wird vorbereitet...",
+ "status": "Initialisierung läuft...",
+ "estimatingTime": "Zeit wird geschätzt...",
+ "loras": {
+ "title": "LoRA Manager wird initialisiert",
+ "message": "LoRA-Cache wird gescannt und aufgebaut. Dies kann einige Minuten dauern..."
+ },
+ "checkpoints": {
+ "title": "Checkpoint Manager wird initialisiert",
+ "message": "Checkpoint-Cache wird gescannt und aufgebaut. Dies kann einige Minuten dauern..."
+ },
+ "embeddings": {
+ "title": "Embedding Manager wird initialisiert",
+ "message": "Embedding-Cache wird gescannt und aufgebaut. Dies kann einige Minuten dauern..."
+ },
+ "recipes": {
+ "title": "Rezept Manager wird initialisiert",
+ "message": "Rezepte werden geladen und verarbeitet. Dies kann einige Minuten dauern..."
+ },
+ "statistics": {
+ "title": "Statistiken werden initialisiert",
+ "message": "Modelldaten für Statistiken werden verarbeitet. Dies kann einige Minuten dauern..."
+ },
+ "tips": {
+ "title": "Tipps & Tricks",
+ "civitai": {
+ "title": "Civitai-Integration",
+ "description": "Verbinden Sie Ihr Civitai-Konto: Besuchen Sie Profil-Avatar → Einstellungen → API-Schlüssel → API-Schlüssel hinzufügen, dann fügen Sie ihn in die LoRA Manager-Einstellungen ein.",
+ "alt": "Civitai API-Setup"
+ },
+ "download": {
+ "title": "Einfacher Download",
+ "description": "Verwenden Sie Civitai-URLs, um schnell neue Modelle herunterzuladen und zu installieren.",
+ "alt": "Civitai-Download"
+ },
+ "recipes": {
+ "title": "Rezepte speichern",
+ "description": "Erstellen Sie Rezepte, um Ihre Lieblings-Modellkombinationen für zukünftige Nutzung zu speichern.",
+ "alt": "Rezepte"
+ },
+ "filter": {
+ "title": "Schnelle Filterung",
+ "description": "Filtern Sie Modelle nach Tags oder Basis-Modelltyp mit der Filter-Schaltfläche in der Kopfzeile.",
+ "alt": "Modelle filtern"
+ },
+ "search": {
+ "title": "Schnellsuche",
+ "description": "Drücken Sie Strg+F (Cmd+F auf Mac), um schnell in Ihrer aktuellen Ansicht zu suchen.",
+ "alt": "Schnellsuche"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "{count} Duplikat-Gruppen gefunden",
+ "showNotification": "Duplikat-Benachrichtigung anzeigen",
+ "deleteSelected": "Ausgewählte löschen",
+ "exitMode": "Modus verlassen",
+ "help": {
+ "identicalHashes": "Identische Hashes bedeuten identische Modelldateien, auch wenn sie unterschiedliche Namen oder Vorschauen haben.",
+ "keepOne": "Behalten Sie nur eine Version (vorzugsweise mit besseren Metadaten/Vorschauen) und löschen Sie die anderen sicher."
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "In Zwischenablage kopiert",
+ "copyFailed": "Kopieren fehlgeschlagen"
+ },
+ "lora": {
+ "syntaxCopied": "LoRA-Syntax in Zwischenablage kopiert",
+ "syntaxCopiedNoTriggerWords": "LoRA-Syntax in Zwischenablage kopiert (keine Trigger Words gefunden)",
+ "syntaxCopiedWithTriggerWords": "LoRA-Syntax mit Trigger Words in Zwischenablage kopiert",
+ "syntaxCopiedWithTriggerWordGroups": "LoRA-Syntax mit Trigger Word-Gruppen in Zwischenablage kopiert"
+ },
+ "workflow": {
+ "noSupportedNodes": "Keine unterstützten Zielknoten im Workflow gefunden",
+ "communicationFailed": "Fehler bei der Kommunikation mit ComfyUI",
+ "loraAdded": "LoRA zum Workflow hinzugefügt",
+ "loraReplaced": "LoRA im Workflow ersetzt",
+ "loraFailedToSend": "Fehler beim Senden der LoRA an den Workflow",
+ "recipeAdded": "Rezept zum Workflow hinzugefügt",
+ "recipeReplaced": "Rezept im Workflow ersetzt",
+ "recipeFailedToSend": "Fehler beim Senden des Rezepts an den Workflow",
+ "noMatchingNodes": "Keine kompatiblen Knoten im aktuellen Workflow verfügbar",
+ "noTargetNodeSelected": "Kein Zielknoten ausgewählt",
+ "modelUpdated": "Modell im Workflow aktualisiert",
+ "modelFailed": "Fehler beim Aktualisieren des Modellknotens",
+ "embeddingAdded": "Embedding zum Workflow hinzugefügt",
+ "embeddingFailed": "Fehler beim Hinzufügen des Embeddings",
+ "promptSent": "Prompt an Workflow gesendet",
+ "promptFailed": "Fehler beim Senden des Prompts"
+ },
+ "nodeSelector": {
+ "recipe": "Rezept",
+ "lora": "LoRA",
+ "embedding": "Embedding",
+ "prompt": "Prompt",
+ "replace": "Ersetzen",
+ "append": "Anhängen",
+ "selectTargetNode": "Zielknoten auswählen",
+ "sendToAll": "An alle senden"
+ },
+ "exampleImages": {
+ "opened": "Beispielbilder-Ordner geöffnet",
+ "openingFolder": "Beispielbilder-Ordner wird geöffnet",
+ "failedToOpen": "Fehler beim Öffnen des Beispielbilder-Ordners",
+ "copiedPath": "Pfad in Zwischenablage kopiert: {{path}}",
+ "clipboardFallback": "Pfad: {{path}}",
+ "copiedUri": "Link in Zwischenablage kopiert: {{uri}}",
+ "uriClipboardFallback": "Link: {{uri}}",
+ "setupRequired": "Beispielbilder-Speicher",
+ "setupDescription": "Um benutzerdefinierte Beispielbilder hinzuzufügen, müssen Sie zuerst einen Download-Speicherort festlegen.",
+ "setupUsage": "Dieser Pfad wird sowohl für heruntergeladene als auch für benutzerdefinierte Beispielbilder verwendet.",
+ "openSettings": "Einstellungen öffnen"
+ }
+ },
+ "help": {
+ "title": "Hilfe & Tutorials",
+ "tabs": {
+ "gettingStarted": "Erste Schritte",
+ "updateVlogs": "Update-Vlogs",
+ "documentation": "Dokumentation"
+ },
+ "gettingStarted": {
+ "title": "Erste Schritte mit LoRA Manager"
+ },
+ "updateVlogs": {
+ "title": "Neueste Updates",
+ "watchOnYouTube": "Auf YouTube ansehen",
+ "playlistTitle": "LoRA Manager Updates Playlist",
+ "playlistDescription": "Sehen Sie alle Update-Videos mit den neuesten Funktionen und Verbesserungen."
+ },
+ "documentation": {
+ "title": "Dokumentation",
+ "general": "Allgemein",
+ "troubleshooting": "Fehlerbehebung",
+ "modelManagement": "Modellverwaltung",
+ "recipes": "Rezepte",
+ "settings": "Einstellungen & Konfiguration",
+ "extensions": "Erweiterungen",
+ "newBadge": "NEU"
+ }
+ },
+ "update": {
+ "title": "Nach Updates suchen",
+ "notificationsTitle": "Benachrichtigungszentrum",
+ "tabs": {
+ "updates": "Aktualisierungen",
+ "messages": "Mitteilungen"
+ },
+ "updateAvailable": "Update verfügbar",
+ "noChangelogAvailable": "Kein detailliertes Changelog verfügbar. Weitere Informationen auf GitHub.",
+ "currentVersion": "Aktuelle Version",
+ "newVersion": "Neue Version",
+ "commit": "Commit",
+ "viewOnGitHub": "Auf GitHub anzeigen",
+ "updateNow": "Jetzt aktualisieren",
+ "preparingUpdate": "Update wird vorbereitet...",
+ "changelog": "Changelog",
+ "checkingUpdates": "Nach Updates wird gesucht...",
+ "checkingMessage": "Bitte warten Sie, während wir nach der neuesten Version suchen.",
+ "showNotifications": "Update-Benachrichtigungen anzeigen",
+ "latestBadge": "Neueste",
+ "updateProgress": {
+ "preparing": "Update wird vorbereitet...",
+ "installing": "Update wird installiert...",
+ "completed": "Update erfolgreich abgeschlossen!",
+ "failed": "Update fehlgeschlagen: {error}"
+ },
+ "status": {
+ "updating": "Wird aktualisiert...",
+ "updated": "Aktualisiert!",
+ "updateFailed": "Update fehlgeschlagen"
+ },
+ "completion": {
+ "successMessage": "Erfolgreich auf {version} aktualisiert!",
+ "restartMessage": "Bitte starten Sie ComfyUI oder LoRA Manager neu, um das Update anzuwenden.",
+ "reloadMessage": "Stellen Sie sicher, dass Sie Ihren Browser sowohl für LoRA Manager als auch für ComfyUI neu laden."
+ },
+ "nightly": {
+ "warning": "Warnung: Nightly Builds können experimentelle Funktionen enthalten und könnten instabil sein.",
+ "enable": "Nightly Updates aktivieren"
},
"banners": {
- "versionMismatch": {
- "title": "Anwendungs-Update erkannt",
- "content": "Ihr Browser verwendet eine veraltete Version des LoRA Managers ({storedVersion}). Der Server wurde auf Version {currentVersion} aktualisiert. Bitte aktualisieren Sie die Seite, um eine ordnungsgemäße Funktionalität sicherzustellen.",
- "refreshNow": "Jetzt aktualisieren",
- "refreshingIn": "Aktualisierung in",
- "seconds": "Sekunden"
- },
- "communitySupport": {
- "title": "Keep LoRA Manager Thriving with Your Support ❤️",
- "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
- "supportCta": "Support on Ko-fi",
- "learnMore": "LM Civitai Extension Tutorial"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "Cache-Korruption erkannt"
- },
- "degraded": {
- "title": "Cache-Probleme erkannt"
- },
- "content": "{invalid} von {total} Cache-Einträgen sind ungültig ({rate}). Dies kann zu fehlenden Modellen oder Fehlern führen. Ein Neuaufbau des Caches wird empfohlen.",
- "rebuildCache": "Cache neu aufbauen",
- "dismiss": "Verwerfen",
- "rebuilding": "Cache wird neu aufgebaut...",
- "rebuildFailed": "Fehler beim Neuaufbau des Caches: {error}",
- "retry": "Wiederholen"
- }
+ "recent": "Neueste Mitteilungen",
+ "empty": "Keine aktuellen Banner verfügbar.",
+ "shown": "{time} angezeigt",
+ "dismissed": "{time} geschlossen",
+ "active": "Aktiv"
}
+ },
+ "support": {
+ "title": "Das Projekt unterstützen",
+ "message": "Wenn Sie LoRA Manager nützlich finden, würde ich mich sehr über Ihre Unterstützung freuen! 🙌",
+ "feedback": {
+ "title": "Feedback geben",
+ "description": "Ihr Feedback hilft dabei, zukünftige Updates zu gestalten! Teilen Sie Ihre Gedanken:"
+ },
+ "links": {
+ "submitGithubIssue": "GitHub Issue einreichen",
+ "joinDiscord": "Discord beitreten",
+ "youtubeChannel": "YouTube-Kanal",
+ "civitaiProfile": "Civitai-Profil",
+ "supportKofi": "Auf Ko-fi unterstützen",
+ "supportPatreon": "Auf Patreon unterstützen"
+ },
+ "sections": {
+ "followUpdates": "Für Updates folgen",
+ "buyMeCoffee": "Spendieren Sie mir einen Kaffee",
+ "coffeeDescription": "Wenn Sie meine Arbeit direkt unterstützen möchten:",
+ "becomePatron": "Werden Sie Patron",
+ "patronDescription": "Unterstützen Sie die fortlaufende Entwicklung mit monatlichen Beiträgen:",
+ "wechatSupport": "WeChat-Unterstützung",
+ "wechatDescription": "Für Nutzer in China können Sie über WeChat unterstützen:",
+ "showWechatQR": "WeChat QR-Code anzeigen",
+ "hideWechatQR": "WeChat QR-Code ausblenden"
+ },
+ "footer": "Vielen Dank, dass Sie LoRA Manager verwenden! ❤️",
+ "supporters": {
+ "title": "Danke an alle Unterstützer",
+ "subtitle": "Danke an {count} Unterstützer, die dieses Projekt möglich gemacht haben",
+ "specialThanks": "Besonderer Dank",
+ "allSupporters": "Alle Unterstützer",
+ "totalCount": "{count} Unterstützer insgesamt"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "Kann nicht mit ComfyUI im Standalone-Modus interagieren",
+ "failedWorkflowInfo": "Fehler beim Abrufen der Workflow-Informationen",
+ "pageInitFailed": "Fehler beim Initialisieren der {pageType}-Seite. Bitte neu laden.",
+ "statisticsLoadFailed": "Fehler beim Laden der Statistikdaten"
+ },
+ "loras": {
+ "copyOnlyForLoras": "Syntax kopieren ist nur für LoRAs verfügbar",
+ "noLorasSelected": "Keine LoRAs ausgewählt",
+ "missingDataForLoras": "Fehlende Daten für {count} LoRAs",
+ "noValidLorasToCopy": "Keine gültigen LoRAs zum Kopieren",
+ "sendOnlyForLoras": "An Workflow senden ist nur für LoRAs verfügbar",
+ "noValidLorasToSend": "Keine gültigen LoRAs zum Senden",
+ "downloadSuccessful": "LoRAs erfolgreich heruntergeladen",
+ "allDownloadSuccessful": "Alle {count} LoRAs erfolgreich heruntergeladen",
+ "downloadPartialSuccess": "{completed} von {total} LoRAs heruntergeladen",
+ "downloadPartialWithAccess": "{completed} von {total} LoRAs heruntergeladen. {accessFailures} fehlgeschlagen aufgrund von Zugriffsbeschränkungen. Überprüfen Sie Ihren API-Schlüssel in den Einstellungen oder den Early Access-Status.",
+ "pleaseSelectVersion": "Bitte wählen Sie eine Version aus",
+ "versionExists": "Diese Version existiert bereits in Ihrer Bibliothek",
+ "downloadCompleted": "Download erfolgreich abgeschlossen",
+ "downloadSkippedByBaseModel": "Download übersprungen, weil das Basismodell {baseModel} ausgeschlossen ist",
+ "autoOrganizeSuccess": "Automatische Organisation für {count} {type} erfolgreich abgeschlossen",
+ "autoOrganizePartialSuccess": "Automatische Organisation abgeschlossen: {success} verschoben, {failures} fehlgeschlagen von insgesamt {total} Modellen",
+ "autoOrganizeFailed": "Automatische Organisation fehlgeschlagen: {error}",
+ "noModelsSelected": "Keine Modelle ausgewählt"
+ },
+ "recipes": {
+ "fetchFailed": "Fehler beim Abrufen der Rezepte: {message}",
+ "reloadFailed": "Fehler beim Neuladen der {modelType}s: {message}",
+ "loadFailed": "Fehler beim Laden der {modelType}s: {message}",
+ "refreshComplete": "Aktualisierung abgeschlossen",
+ "refreshFailed": "Fehler beim Aktualisieren der Rezepte: {message}",
+ "syncComplete": "Synchronisation abgeschlossen",
+ "syncFailed": "Fehler beim Synchronisieren der Rezepte: {message}",
+ "updateFailed": "Fehler beim Aktualisieren des Rezepts: {error}",
+ "updateError": "Fehler beim Aktualisieren des Rezepts: {message}",
+ "nameSaved": "Rezept \"{name}\" erfolgreich gespeichert",
+ "nameUpdated": "Rezeptname erfolgreich aktualisiert",
+ "tagsUpdated": "Rezept-Tags erfolgreich aktualisiert",
+ "sourceUrlUpdated": "Quell-URL erfolgreich aktualisiert",
+ "promptUpdated": "Prompt erfolgreich aktualisiert",
+ "negativePromptUpdated": "Negativer Prompt erfolgreich aktualisiert",
+ "promptEditorHint": "Drücken Sie Enter zum Speichern, Shift+Enter für neue Zeile",
+ "noRecipeId": "Keine Rezept-ID verfügbar",
+ "sendToWorkflowFailed": "Fehler beim Senden des Rezepts an den Workflow: {message}",
+ "copyFailed": "Fehler beim Kopieren der Rezept-Syntax: {message}",
+ "createError": "Fehler beim Erstellen des Rezepts:{message}",
+ "createFailed": "Fehler beim Erstellen des Rezepts:{error}",
+ "createMissingData": "Erforderliche Daten zum Erstellen des Rezepts fehlen",
+ "created": "Rezept erfolgreich erstellt",
+ "noMissingLoras": "Keine fehlenden LoRAs zum Herunterladen",
+ "missingLorasInfoFailed": "Fehler beim Abrufen der Informationen für fehlende LoRAs",
+ "preparingForDownloadFailed": "Fehler beim Vorbereiten der LoRAs für den Download",
+ "enterLoraName": "Bitte geben Sie einen LoRA-Namen oder Syntax ein",
+ "reconnectedSuccessfully": "LoRA erfolgreich neu verbunden",
+ "reconnectFailed": "Fehler beim Neuverbinden des LoRA: {message}",
+ "noPromptToSend": "Kein zu sendender Prompt",
+ "cannotSend": "Kann Rezept nicht senden: Fehlende Rezept-ID",
+ "sendFailed": "Fehler beim Senden des Rezepts an Workflow",
+ "sendError": "Fehler beim Senden des Rezepts an Workflow",
+ "missingCheckpointPath": "Checkpoint-Pfad nicht verfügbar",
+ "missingCheckpointInfo": "Checkpoint-Informationen fehlen",
+ "downloadCheckpointFailed": "Checkpoint-Download fehlgeschlagen: {message}",
+ "cannotDelete": "Kann Rezept nicht löschen: Fehlende Rezept-ID",
+ "deleteConfirmationError": "Fehler beim Anzeigen der Löschbestätigung",
+ "deletedSuccessfully": "Rezept erfolgreich gelöscht",
+ "deleteFailed": "Fehler beim Löschen des Rezepts: {message}",
+ "cannotShare": "Kann Rezept nicht teilen: Fehlende Rezept-ID",
+ "preparingForSharing": "Rezept für das Teilen wird vorbereitet...",
+ "downloadStarted": "Rezept-Download gestartet",
+ "shareError": "Fehler beim Teilen des Rezepts: {message}",
+ "sharePreparationError": "Fehler beim Vorbereiten des Rezepts für das Teilen",
+ "selectImageFirst": "Bitte wählen Sie zuerst ein Bild aus",
+ "enterRecipeName": "Bitte geben Sie einen Rezeptnamen ein",
+ "processingError": "Verarbeitungsfehler: {message}",
+ "folderBrowserError": "Fehler beim Laden des Ordner-Browsers: {message}",
+ "recipeSaveFailed": "Fehler beim Speichern des Rezepts: {error}",
+ "recipeSaved": "Recipe saved successfully",
+ "importFailed": "Import fehlgeschlagen: {message}",
+ "folderTreeFailed": "Fehler beim Laden des Ordnerbaums",
+ "folderTreeError": "Fehler beim Laden des Ordnerbaums",
+ "batchImportFailed": "Failed to start batch import: {message}",
+ "batchImportCancelling": "Cancelling batch import...",
+ "batchImportCancelFailed": "Failed to cancel batch import: {message}",
+ "batchImportNoUrls": "Please enter at least one URL or file path",
+ "batchImportNoDirectory": "Please enter a directory path",
+ "batchImportBrowseFailed": "Failed to browse directory: {message}",
+ "batchImportDirectorySelected": "Directory selected: {path}",
+ "noRecipesSelected": "Keine Rezepte ausgewählt",
+ "repairBulkComplete": "Reparatur abgeschlossen: {repaired} repariert, {skipped} übersprungen (von {total})",
+ "repairBulkSkipped": "Keine Reparatur für die {total} ausgewählten Rezepte erforderlich",
+ "repairBulkFailed": "Reparatur der ausgewählten Rezepte fehlgeschlagen: {message}",
+ "reimporting": "Rezept wird aus Quelle neu importiert...",
+ "reimportSuccess": "Rezept erfolgreich neu importiert",
+ "reimportBulkComplete": "Neuimport abgeschlossen: {completed} importiert, {failed} fehlgeschlagen (von {total})",
+ "reimportBulkFailed": "Neuimport einiger Rezepte fehlgeschlagen",
+ "noMissingLorasInSelection": "Keine fehlenden LoRAs in ausgewählten Rezepten gefunden",
+ "noLoraRootConfigured": "Kein LoRA-Stammverzeichnis konfiguriert. Bitte legen Sie ein Standard-LoRA-Stammverzeichnis in den Einstellungen fest."
+ },
+ "models": {
+ "noModelsSelected": "Keine Modelle ausgewählt",
+ "deletedSuccessfully": "{count} {type}(s) erfolgreich gelöscht",
+ "deleteFailed": "Fehler: {error}",
+ "deleteFailedGeneral": "Fehler beim Löschen der Modelle",
+ "selectedAdditional": "{count} zusätzliche {type}(s) ausgewählt",
+ "marqueeSelectionComplete": "{count} {type}(s) mit Rahmenauswahl ausgewählt",
+ "refreshMetadataFailed": "Fehler beim Aktualisieren der Metadaten",
+ "nameCannotBeEmpty": "Modellname darf nicht leer sein",
+ "nameUpdatedSuccessfully": "Modellname erfolgreich aktualisiert",
+ "nameUpdateFailed": "Fehler beim Aktualisieren des Modellnamens",
+ "baseModelUpdated": "Basis-Modell erfolgreich aktualisiert",
+ "baseModelUpdateFailed": "Fehler beim Aktualisieren des Basis-Modells",
+ "baseModelNotSelected": "Bitte ein Basis-Modell auswählen",
+ "bulkBaseModelUpdating": "Basis-Modell wird für {count} Modell(e) aktualisiert...",
+ "bulkBaseModelUpdateSuccess": "Basis-Modell erfolgreich für {count} Modell(e) aktualisiert",
+ "bulkBaseModelUpdatePartial": "{success} Modelle aktualisiert, {failed} fehlgeschlagen",
+ "bulkBaseModelUpdateFailed": "Aktualisierung des Basis-Modells für ausgewählte Modelle fehlgeschlagen",
+ "skipMetadataRefreshUpdating": "Aktualisiere Metadaten-Aktualisierungs-Flag für {count} Modell(e)...",
+ "skipMetadataRefreshSet": "Metadaten-Aktualisierung für {count} Modell(e) übersprungen",
+ "skipMetadataRefreshCleared": "Metadaten-Aktualisierung für {count} Modell(e) fortgesetzt",
+ "skipMetadataRefreshPartial": "{success} Modell(e) aktualisiert, {failed} fehlgeschlagen",
+ "skipMetadataRefreshFailed": "Fehler beim Aktualisieren des Metadaten-Aktualisierungs-Flags für ausgewählte Modelle",
+ "bulkContentRatingUpdating": "Inhaltsbewertung wird für {count} Modell(e) aktualisiert...",
+ "bulkContentRatingSet": "Inhaltsbewertung auf {level} für {count} Modell(e) gesetzt",
+ "bulkContentRatingPartial": "Inhaltsbewertung auf {level} für {success} Modell(e) gesetzt, {failed} fehlgeschlagen",
+ "bulkContentRatingFailed": "Inhaltsbewertung für ausgewählte Modelle konnte nicht aktualisiert werden",
+ "bulkFavoriteUpdating": "Füge {count} Modell(e) zu Favoriten hinzu...",
+ "bulkUnfavoriteUpdating": "Entferne {count} Modell(e) aus Favoriten...",
+ "bulkFavoritePartialAdded": "{success} Modell(e) zu Favoriten hinzugefügt, {failed} fehlgeschlagen",
+ "bulkFavoritePartialRemoved": "{success} Modell(e) aus Favoriten entfernt, {failed} fehlgeschlagen",
+ "bulkFavoriteFailed": "Fehler beim Aktualisieren des Favoritenstatus",
+ "bulkUpdatesChecking": "Ausgewählte {type}-Modelle werden auf Updates geprüft...",
+ "bulkUpdatesSuccess": "Updates für {count} ausgewählte {type}-Modelle verfügbar",
+ "bulkUpdatesNone": "Keine Updates für ausgewählte {type}-Modelle gefunden",
+ "bulkUpdatesMissing": "Ausgewählte {type}-Modelle sind nicht mit Civitai-Updates verknüpft",
+ "bulkUpdatesPartialMissing": "{missing} ausgewählte {type}-Modelle ohne Civitai-Verknüpfung übersprungen",
+ "bulkUpdatesFailed": "Updates für ausgewählte {type}-Modelle konnten nicht geprüft werden: {message}",
+ "invalidCharactersRemoved": "Ungültige Zeichen aus Dateiname entfernt",
+ "filenameCannotBeEmpty": "Dateiname darf nicht leer sein",
+ "renameFailed": "Fehler beim Umbenennen der Datei: {message}",
+ "moveFailed": "Fehler beim Verschieben der Modell(e): {message}",
+ "pleaseSelectRoot": "Bitte wählen Sie ein {type}-Stammverzeichnis aus",
+ "nameTooLong": "Modellname ist auf 100 Zeichen begrenzt",
+ "verificationAlreadyDone": "Diese Gruppe wurde bereits verifiziert",
+ "verificationCompleteMismatch": "Verifikation abgeschlossen. {count} Datei(en) haben unterschiedliche tatsächliche Hashes.",
+ "verificationCompleteSuccess": "Verifikation abgeschlossen. Alle Dateien sind bestätigte Duplikate.",
+ "verificationFailed": "Fehler beim Verifizieren der Hashes: {message}",
+ "noTagsToAdd": "Keine Tags zum Hinzufügen",
+ "bulkTagsUpdating": "Tags für {count} Modell(e) werden aktualisiert...",
+ "tagsAddedSuccessfully": "Erfolgreich {tagCount} Tag(s) zu {count} {type}(s) hinzugefügt",
+ "tagsReplacedSuccessfully": "Tags für {count} {type}(s) erfolgreich durch {tagCount} Tag(s) ersetzt",
+ "tagsAddFailed": "Fehler beim Hinzufügen von Tags zu {count} Modell(en)",
+ "tagsReplaceFailed": "Fehler beim Ersetzen von Tags für {count} Modell(e)",
+ "bulkTagsAddFailed": "Fehler beim Hinzufügen von Tags zu Modellen",
+ "bulkTagsReplaceFailed": "Fehler beim Ersetzen von Tags für Modelle"
+ },
+ "search": {
+ "atLeastOneOption": "Mindestens eine Suchoption muss ausgewählt werden"
+ },
+ "settings": {
+ "loraRootsFailed": "Fehler beim Laden der LoRA-Stammverzeichnisse: {message}",
+ "checkpointRootsFailed": "Fehler beim Laden der Checkpoint-Stammverzeichnisse: {message}",
+ "unetRootsFailed": "Fehler beim Laden der Diffusion-Modell-Stammverzeichnisse: {message}",
+ "embeddingRootsFailed": "Fehler beim Laden der Embedding-Stammverzeichnisse: {message}",
+ "mappingsUpdated": "Basis-Modell-Pfad-Zuordnungen aktualisiert ({count} Zuordnung{plural})",
+ "mappingsCleared": "Basis-Modell-Pfad-Zuordnungen gelöscht",
+ "mappingSaveFailed": "Fehler beim Speichern der Basis-Modell-Zuordnungen: {message}",
+ "downloadTemplatesUpdated": "Download-Pfad-Vorlagen aktualisiert",
+ "downloadTemplatesFailed": "Fehler beim Speichern der Download-Pfad-Vorlagen: {message}",
+ "recipesPathUpdated": "Rezepte-Speicherpfad aktualisiert",
+ "recipesPathSaveFailed": "Fehler beim Aktualisieren des Rezepte-Speicherpfads: {message}",
+ "settingsUpdated": "Einstellungen aktualisiert: {setting}",
+ "compactModeToggled": "Kompakt-Modus {state}",
+ "settingSaveFailed": "Fehler beim Speichern der Einstellung: {message}",
+ "displayDensitySet": "Anzeige-Dichte auf {density} gesetzt",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "Fehler beim Ändern der Sprache: {message}",
+ "cacheCleared": "Cache-Dateien wurden erfolgreich gelöscht. Cache wird bei der nächsten Aktion neu aufgebaut.",
+ "cacheClearFailed": "Fehler beim Löschen des Caches: {error}",
+ "cacheClearError": "Fehler beim Löschen des Caches: {message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "Filter gelöscht",
+ "noCustomFilterToClear": "Kein benutzerdefinierter Filter zum Löschen",
+ "noActiveFilters": "Keine aktiven Filter zum Speichern"
+ },
+ "presets": {
+ "created": "Voreinstellung \"{name}\" erstellt",
+ "deleted": "Voreinstellung \"{name}\" gelöscht",
+ "applied": "Voreinstellung \"{name}\" angewendet",
+ "overwritten": "Voreinstellung \"{name}\" überschrieben",
+ "restored": "Standard-Voreinstellungen wiederhergestellt"
+ },
+ "error": {
+ "presetNameEmpty": "Voreinstellungsname darf nicht leer sein",
+ "presetNameTooLong": "Voreinstellungsname darf maximal {max} Zeichen haben",
+ "presetNameInvalidChars": "Voreinstellungsname enthält ungültige Zeichen",
+ "presetNameExists": "Eine Voreinstellung mit diesem Namen existiert bereits",
+ "maxPresetsReached": "Maximal {max} Voreinstellungen erlaubt. Löschen Sie eine, um weitere hinzuzufügen.",
+ "presetNotFound": "Voreinstellung nicht gefunden",
+ "invalidPreset": "Ungültige Voreinstellungsdaten",
+ "deletePresetFailed": "Fehler beim Löschen der Voreinstellung",
+ "applyPresetFailed": "Fehler beim Anwenden der Voreinstellung"
+ },
+ "downloads": {
+ "imagesCompleted": "Beispielbilder {action} abgeschlossen",
+ "imagesFailed": "Beispielbilder {action} fehlgeschlagen",
+ "loadError": "Fehler beim Laden der Downloads: {message}",
+ "downloadError": "Download-Fehler: {message}"
+ },
+ "import": {
+ "folderTreeFailed": "Fehler beim Laden des Ordnerbaums",
+ "folderTreeError": "Fehler beim Laden des Ordnerbaums",
+ "imagesImported": "Beispielbilder erfolgreich importiert",
+ "imagesPartial": "{success} Bild(er) importiert, {failed} fehlgeschlagen",
+ "importFailed": "Fehler beim Importieren der Beispielbilder: {message}"
+ },
+ "triggerWords": {
+ "loadFailed": "Konnte trainierte Wörter nicht laden",
+ "tooLong": "Trigger Word sollte 500 Wörter nicht überschreiten",
+ "tooMany": "Maximal 100 Trigger Words erlaubt",
+ "alreadyExists": "Dieses Trigger Word existiert bereits",
+ "updateSuccess": "Trigger Words erfolgreich aktualisiert",
+ "updateFailed": "Fehler beim Aktualisieren der Trigger Words",
+ "copyFailed": "Kopieren fehlgeschlagen"
+ },
+ "virtual": {
+ "loadFailed": "Fehler beim Laden der Elemente",
+ "loadMoreFailed": "Fehler beim Laden weiterer Elemente",
+ "loadPositionFailed": "Fehler beim Laden der Elemente an dieser Position"
+ },
+ "bulk": {
+ "unableToSelectAll": "Kann nicht alle Elemente auswählen"
+ },
+ "duplicates": {
+ "findFailed": "Fehler beim Suchen nach Duplikaten: {message}",
+ "noDuplicatesFound": "Keine doppelten {type} gefunden",
+ "noItemsSelected": "Keine {type} zum Löschen ausgewählt",
+ "deleteError": "Fehler: {message}",
+ "deleteSuccess": "{count} {type} erfolgreich gelöscht",
+ "deleteFailed": "Fehler beim Löschen von {type}: {message}"
+ },
+ "controls": {
+ "reloadFailed": "Fehler beim Neuladen von {pageType}: {message}",
+ "refreshFailed": "Fehler beim {action} von {pageType}: {message}",
+ "fetchMetadataFailed": "Fehler beim Abrufen der Metadaten: {message}",
+ "clearFilterFailed": "Fehler beim Löschen des benutzerdefinierten Filters: {message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "Inhaltsbewertung auf {level} gesetzt",
+ "contentRatingFailed": "Fehler beim Setzen der Inhaltsbewertung: {message}",
+ "relinkSuccess": "Modell erfolgreich mit Civitai neu verknüpft",
+ "relinkFailed": "Fehler: {message}",
+ "fetchMetadataFirst": "Bitte rufen Sie zuerst Metadaten von CivitAI ab",
+ "noCivitaiInfo": "Keine CivitAI-Informationen verfügbar",
+ "missingHash": "Modell-Hash nicht verfügbar"
+ },
+ "exampleImages": {
+ "pathUpdated": "Beispielbilder-Pfad erfolgreich aktualisiert",
+ "pathUpdateFailed": "Fehler beim Aktualisieren des Beispielbilder-Pfads: {message}",
+ "downloadInProgress": "Download bereits in Bearbeitung",
+ "enterLocationFirst": "Bitte geben Sie zuerst einen Download-Speicherort ein",
+ "downloadStarted": "Beispielbilder-Download gestartet",
+ "downloadStartFailed": "Fehler beim Starten des Downloads: {error}",
+ "downloadPaused": "Download pausiert",
+ "pauseFailed": "Fehler beim Pausieren des Downloads: {error}",
+ "downloadResumed": "Download fortgesetzt",
+ "resumeFailed": "Fehler beim Fortsetzen des Downloads: {error}",
+ "downloadStopped": "Download abgebrochen",
+ "stopFailed": "Download konnte nicht abgebrochen werden: {error}",
+ "deleted": "Beispielbild gelöscht",
+ "deleteFailed": "Fehler beim Löschen des Beispielbilds",
+ "setPreviewFailed": "Fehler beim Setzen des Vorschaubilds"
+ },
+ "api": {
+ "fetchFailed": "Fehler beim Abrufen der {type}s: {message}",
+ "reloadFailed": "Fehler beim Neuladen der {type}s: {message}",
+ "deleteSuccess": "{type} erfolgreich gelöscht",
+ "deleteFailed": "Fehler beim Löschen von {type}: {message}",
+ "excludeSuccess": "{type} erfolgreich ausgeschlossen",
+ "excludeFailed": "Fehler beim Ausschließen von {type}: {message}",
+ "restoreSuccess": "{type} erfolgreich wiederhergestellt",
+ "restoreFailed": "{type} konnte nicht wiederhergestellt werden: {message}",
+ "fileNameUpdated": "Dateiname erfolgreich aktualisiert",
+ "fileRenameFailed": "Fehler beim Umbenennen der Datei: {error}",
+ "previewUpdated": "Vorschau erfolgreich aktualisiert",
+ "previewUploadFailed": "Fehler beim Hochladen des Vorschaubilds",
+ "refreshComplete": "{action} abgeschlossen",
+ "refreshFailed": "Fehler beim {action} der {type}s",
+ "metadataRefreshed": "Metadaten erfolgreich aktualisiert",
+ "metadataRefreshFailed": "Fehler beim Aktualisieren der Metadaten: {message}",
+ "metadataUpdateComplete": "Metadaten-Update abgeschlossen",
+ "operationCancelled": "Vorgang vom Benutzer abgebrochen",
+ "operationCancelledPartial": "Vorgang abgebrochen. {success} Elemente verarbeitet.",
+ "metadataFetchFailed": "Fehler beim Abrufen der Metadaten: {message}",
+ "bulkMetadataCompleteAll": "Alle {count} {type}s erfolgreich aktualisiert",
+ "bulkMetadataCompletePartial": "{success} von {total} {type}s aktualisiert",
+ "bulkMetadataCompleteNone": "Fehler beim Aktualisieren der Metadaten für alle {type}s",
+ "bulkMetadataFailureDetails": "Fehlgeschlagene Aktualisierungen:\n{failures}",
+ "bulkMetadataFailed": "Fehler beim Aktualisieren der Metadaten: {message}",
+ "moveNotSupported": "Verschieben von {type}s wird nicht unterstützt",
+ "alreadyInFolder": "{type} ist bereits im ausgewählten Ordner",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type} erfolgreich verschoben",
+ "bulkMoveNotSupported": "Verschieben von {type}s wird nicht unterstützt",
+ "allAlreadyInFolder": "Alle ausgewählten {type}s sind bereits im Zielordner",
+ "bulkMovePartial": "{successCount} {type}s verschoben, {failureCount} fehlgeschlagen",
+ "bulkMoveFailures": "Fehlgeschlagene Verschiebungen:\n{failures}",
+ "bulkMoveSuccess": "{successCount} {type}s erfolgreich verschoben",
+ "exampleImagesDownloadSuccess": "Beispielbilder erfolgreich heruntergeladen!",
+ "exampleImagesDownloadFailed": "Fehler beim Herunterladen der Beispielbilder: {message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "In die Zwischenablage kopiert",
+ "downloadStarted": "Download gestartet"
+ }
+ },
+ "doctor": {
+ "kicker": "Systemdiagnose",
+ "title": "Doktor",
+ "buttonTitle": "Diagnose und häufige Fehlerbehebungen ausführen",
+ "loading": "Umgebung wird geprüft...",
+ "footer": "Exportiere ein Diagnosepaket, falls das Problem nach der Reparatur weiterhin besteht.",
+ "summary": {
+ "idle": "Führe eine Überprüfung von Einstellungen, Cache-Integrität und UI-Konsistenz durch.",
+ "ok": "Keine aktiven Probleme wurden in der aktuellen Umgebung gefunden.",
+ "warning": "{count} Problem(e) wurden gefunden. Die meisten lassen sich direkt über dieses Panel beheben.",
+ "error": "Bevor die App vollständig fehlerfrei ist, müssen {count} Problem(e) behoben werden."
+ },
+ "status": {
+ "ok": "Gesund",
+ "warning": "Handlungsbedarf",
+ "error": "Aktion erforderlich"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API Key"
+ },
+ "cache_health": {
+ "title": "Model Cache Health"
+ },
+ "filename_conflicts": {
+ "title": "Duplicate Filename Conflicts"
+ },
+ "ui_version": {
+ "title": "UI Version"
+ }
+ },
+ "actions": {
+ "runAgain": "Erneut ausführen",
+ "exportBundle": "Paket exportieren",
+ "open-settings": "Open Settings",
+ "open-settings-syntax-format": "Switch to Full Path Syntax",
+ "repair-cache": "Rebuild Cache",
+ "resolve-filename-conflicts": "Resolve Conflicts",
+ "reload-page": "Reload UI"
+ },
+ "labels": {
+ "conflicts": "Conflicts",
+ "version": "Version"
+ },
+ "toast": {
+ "loadFailed": "Diagnose konnte nicht geladen werden: {message}",
+ "repairSuccess": "Cache-Neuaufbau abgeschlossen.",
+ "repairFailed": "Cache-Neuaufbau fehlgeschlagen: {message}",
+ "exportSuccess": "Diagnosepaket exportiert.",
+ "exportFailed": "Export des Diagnosepakets fehlgeschlagen: {message}",
+ "conflictsResolved": "{count} Dateinamenskonflikt(e) gelöst.",
+ "conflictsResolveFailed": "Auflösung der Dateinamenskonflikte fehlgeschlagen: {message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "Dateinamenskonflikte auflösen",
+ "message": "Umbenennen durch Anhängen eines 4-stelligen Hashs an jeden doppelten Dateinamen.",
+ "note": "Dieser Vorgang benennt Dateien auf der Festplatte um. Modellreferenzen in vorhandenen Workflows müssen möglicherweise aktualisiert werden, wenn Sie das A1111-Syntaxformat verwenden.",
+ "detail": "Beispiel: filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "Benennt {count} Datei(en) in {groups} Duplikatgruppe(n) um",
+ "confirm": "Dateien umbenennen",
+ "cancel": "Abbrechen"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "Anwendungs-Update erkannt",
+ "content": "Ihr Browser verwendet eine veraltete Version des LoRA Managers ({storedVersion}). Der Server wurde auf Version {currentVersion} aktualisiert. Bitte aktualisieren Sie die Seite, um eine ordnungsgemäße Funktionalität sicherzustellen.",
+ "refreshNow": "Jetzt aktualisieren",
+ "refreshingIn": "Aktualisierung in",
+ "seconds": "Sekunden"
+ },
+ "communitySupport": {
+ "title": "Keep LoRA Manager Thriving with Your Support ❤️",
+ "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
+ "supportCta": "Support on Ko-fi",
+ "learnMore": "LM Civitai Extension Tutorial"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "Cache-Korruption erkannt"
+ },
+ "degraded": {
+ "title": "Cache-Probleme erkannt"
+ },
+ "content": "{invalid} von {total} Cache-Einträgen sind ungültig ({rate}). Dies kann zu fehlenden Modellen oder Fehlern führen. Ein Neuaufbau des Caches wird empfohlen.",
+ "rebuildCache": "Cache neu aufbauen",
+ "dismiss": "Verwerfen",
+ "rebuilding": "Cache wird neu aufgebaut...",
+ "rebuildFailed": "Fehler beim Neuaufbau des Caches: {error}",
+ "retry": "Wiederholen"
+ }
+ }
}
diff --git a/locales/en.json b/locales/en.json
index d53f41e6..7fdf1811 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -1134,7 +1134,9 @@
"titleWithType": "Download {type} from URL",
"civitaiUrl": "Civitai URL(s):",
"placeholder": "https://civitai.com/models/...",
- "urlHint": "Enter one CivitAI or CivArchive URL per line. Supports multiple URLs for batch download.",
+ "urlHint": "Enter one CivitAI, CivArchive, or Hugging Face URL per line. Supports multiple URLs for batch download.",
+ "selectHfFiles": "Select file(s) to download from this repository:",
+ "fetchingRepoFiles": "Fetching repository files...",
"locationPreview": "Download Location Preview",
"useDefaultPath": "Use Default Path",
"useDefaultPathTooltip": "When enabled, files are automatically organized using configured path templates",
@@ -1163,7 +1165,9 @@
},
"errors": {
"invalidUrl": "Invalid Civitai URL format",
- "noVersions": "No versions available for this model"
+ "noVersions": "No versions available for this model",
+ "mixedSources": "Cannot mix CivitAI and Hugging Face URLs in the same batch.",
+ "noModelFiles": "No model files found in this repository."
},
"status": {
"preparing": "Preparing download...",
diff --git a/locales/es.json b/locales/es.json
index 9f3f0d6e..41ad3a21 100644
--- a/locales/es.json
+++ b/locales/es.json
@@ -1,2167 +1,2171 @@
{
- "common": {
- "cancel": "Cancelar",
- "confirm": "Confirmar",
- "actions": {
- "save": "Guardar",
- "cancel": "Cancelar",
- "confirm": "Confirmar",
- "delete": "Eliminar",
- "move": "Mover",
- "refresh": "Actualizar",
- "back": "Atrás",
- "next": "Siguiente",
- "backToTop": "Volver arriba",
- "settings": "Configuración",
- "help": "Ayuda",
- "add": "Añadir",
- "close": "Cerrar",
- "menu": "Menú",
- "remove": "Eliminar",
- "change": "Cambiar"
- },
- "status": {
- "loading": "Cargando...",
- "cancelling": "Cancelando...",
- "unknown": "Desconocido",
- "date": "Fecha",
- "version": "Versión",
- "enabled": "Habilitado",
- "disabled": "Deshabilitado"
- },
- "language": {
- "select": "Idioma",
- "select_help": "Elige tu idioma preferido para la interfaz",
- "english": "English",
- "chinese_simplified": "中文(简体)",
- "chinese_traditional": "中文(繁体)",
- "russian": "Русский",
- "german": "Deutsch",
- "japanese": "日本語",
- "korean": "한국어",
- "french": "Français",
- "spanish": "Español",
- "Hebrew": "עברית"
- },
- "fileSize": {
- "zero": "0 Bytes",
- "bytes": "Bytes",
- "kb": "KB",
- "mb": "MB",
- "gb": "GB",
- "tb": "TB"
- }
+ "common": {
+ "cancel": "Cancelar",
+ "confirm": "Confirmar",
+ "actions": {
+ "save": "Guardar",
+ "cancel": "Cancelar",
+ "confirm": "Confirmar",
+ "delete": "Eliminar",
+ "move": "Mover",
+ "refresh": "Actualizar",
+ "back": "Atrás",
+ "next": "Siguiente",
+ "backToTop": "Volver arriba",
+ "settings": "Configuración",
+ "help": "Ayuda",
+ "add": "Añadir",
+ "close": "Cerrar",
+ "menu": "Menú",
+ "remove": "Eliminar",
+ "change": "Cambiar"
},
- "onboarding": {
- "languageSelection": {
- "title": "Bienvenido a LoRA Manager",
- "continue": "Continuar",
- "changeFailed": "Error al cambiar el idioma: {message}"
- },
- "tutorial": {
- "skipTutorial": "Saltar tutorial",
- "back": "Atrás",
- "next": "Siguiente",
- "finish": "Finalizar"
- },
- "steps": {
- "fetch": {
- "title": "Obtener metadatos de modelos",
- "content": "Haz clic en el botón Obtener para descargar metadatos y vistas previas de modelos desde Civitai."
- },
- "download": {
- "title": "Descargar nuevos modelos",
- "content": "Usa el botón Descargar para descargar modelos directamente desde URLs de Civitai."
- },
- "bulk": {
- "title": "Operaciones masivas",
- "content": "Entra en modo masivo haciendo clic en este botón o presionando B. Selecciona varios modelos y realiza operaciones por lotes. Usa Ctrl+A para seleccionar todos los modelos visibles."
- },
- "searchOptions": {
- "title": "Opciones de búsqueda",
- "content": "Haz clic en este botón para configurar en qué campos buscar: nombre de archivo, nombre del modelo, etiquetas o nombre del creador. Personaliza el alcance de tu búsqueda."
- },
- "filter": {
- "title": "Filtrar modelos",
- "content": "Utiliza los filtros para reducir los modelos por tipo de modelo base (SD1.5, SDXL, Flux, etc.) o por etiquetas específicas."
- },
- "breadcrumb": {
- "title": "Navegación por rutas",
- "content": "La navegación por rutas muestra tu ruta actual y permite una navegación rápida entre carpetas. Haz clic en cualquier nombre de carpeta para ir directamente allí."
- },
- "modelCards": {
- "title": "Tarjetas de modelo",
- "content": "Clic único en una tarjeta de modelo para ver información detallada y editar metadatos. Busca el icono de lápiz al pasar el ratón sobre campos editables."
- },
- "contextMenu": {
- "title": "Menú contextual",
- "content": "Clic derecho en cualquier tarjeta de modelo para ver un menú contextual con acciones adicionales."
- }
- }
+ "status": {
+ "loading": "Cargando...",
+ "cancelling": "Cancelando...",
+ "unknown": "Desconocido",
+ "date": "Fecha",
+ "version": "Versión",
+ "enabled": "Habilitado",
+ "disabled": "Deshabilitado"
},
- "modelCard": {
- "actions": {
- "addToFavorites": "Añadir a favoritos",
- "removeFromFavorites": "Eliminar de favoritos",
- "viewOnCivitai": "Ver en Civitai",
- "notAvailableFromCivitai": "No disponible en Civitai",
- "sendToWorkflow": "Enviar a ComfyUI (Clic: Añadir, Shift+Clic: Reemplazar)",
- "copyLoRASyntax": "Copiar sintaxis de LoRA",
- "checkpointNameCopied": "Nombre del checkpoint copiado",
- "toggleBlur": "Alternar difuminado",
- "show": "Mostrar",
- "openExampleImages": "Abrir carpeta de imágenes de ejemplo",
- "replacePreview": "Reemplazar vista previa",
- "copyCheckpointName": "Copiar nombre del checkpoint",
- "copyEmbeddingName": "Copiar nombre del embedding",
- "embeddingNameCopied": "Sintaxis de embedding copiada",
- "sendCheckpointToWorkflow": "Enviar a ComfyUI",
- "sendEmbeddingToWorkflow": "Enviar a ComfyUI"
- },
- "nsfw": {
- "matureContent": "Contenido para adultos",
- "xxxRated": "Contenido XXX",
- "xRated": "Contenido X",
- "rRated": "Contenido R"
- },
- "favorites": {
- "added": "Añadido a favoritos",
- "removed": "Eliminado de favoritos",
- "updateFailed": "Error al actualizar estado de favoritos"
- },
- "sendToWorkflow": {
- "checkpointNotImplemented": "Enviar checkpoint al flujo de trabajo - función por implementar",
- "missingPath": "No se puede determinar la ruta del modelo para esta tarjeta"
- },
- "exampleImages": {
- "checkError": "Error al verificar imágenes de ejemplo",
- "missingHash": "Falta información del hash del modelo.",
- "noRemoteImagesAvailable": "No hay imágenes de ejemplo remotas disponibles para este modelo en Civitai"
- },
- "badges": {
- "update": "Actualización",
- "updateAvailable": "Actualización disponible",
- "skipRefresh": "Actualización de metadatos omitida"
- },
- "usage": {
- "timesUsed": "Veces usado"
- },
- "footer": {
- "versionCount": "{count} versiones",
- "viewAllVersions": "Ver todas las versiones locales"
- }
+ "language": {
+ "select": "Idioma",
+ "select_help": "Elige tu idioma preferido para la interfaz",
+ "english": "English",
+ "chinese_simplified": "中文(简体)",
+ "chinese_traditional": "中文(繁体)",
+ "russian": "Русский",
+ "german": "Deutsch",
+ "japanese": "日本語",
+ "korean": "한국어",
+ "french": "Français",
+ "spanish": "Español",
+ "Hebrew": "עברית"
},
- "globalContextMenu": {
- "downloadExampleImages": {
- "label": "Descargar imágenes de ejemplo",
- "missingPath": "Establece una ubicación de descarga antes de descargar imágenes de ejemplo.",
- "unavailable": "Las descargas de imágenes de ejemplo aún no están disponibles. Intenta de nuevo después de que la página termine de cargar."
- },
- "checkModelUpdates": {
- "label": "Buscar actualizaciones",
- "loading": "Buscando actualizaciones de {type}...",
- "success": "Se encontraron {count} actualización(es) para {type}",
- "none": "Todos los {type} están actualizados",
- "error": "Error al buscar actualizaciones de {type}: {message}"
- },
- "cleanupExampleImages": {
- "label": "Limpiar carpetas de imágenes de ejemplo",
- "success": "Se movieron {count} carpeta(s) a la carpeta de eliminados",
- "none": "No hay carpetas de imágenes de ejemplo que necesiten limpieza",
- "partial": "Limpieza completada con {failures} carpeta(s) omitidas",
- "error": "No se pudieron limpiar las carpetas de imágenes de ejemplo: {message}"
- },
- "fetchMissingLicenses": {
- "label": "Refresh license metadata",
- "loading": "Refreshing license metadata for {typePlural}...",
- "success": "Updated license metadata for {count} {typePlural}",
- "none": "All {typePlural} already have license metadata",
- "error": "Failed to refresh license metadata for {typePlural}: {message}"
- },
- "repairRecipes": {
- "label": "Reparar datos de recetas",
- "loading": "Reparando datos de recetas...",
- "success": "Se repararon con éxito {count} recetas.",
- "cancelled": "Reparación cancelada. {count} recetas fueron reparadas.",
- "error": "Error al reparar recetas: {message}"
- },
- "manageExcludedModels": {
- "label": "Gestionar modelos excluidos"
- },
- "groupByModel": {
- "label": "Agrupar por modelo"
- }
+ "fileSize": {
+ "zero": "0 Bytes",
+ "bytes": "Bytes",
+ "kb": "KB",
+ "mb": "MB",
+ "gb": "GB",
+ "tb": "TB"
+ }
+ },
+ "onboarding": {
+ "languageSelection": {
+ "title": "Bienvenido a LoRA Manager",
+ "continue": "Continuar",
+ "changeFailed": "Error al cambiar el idioma: {message}"
},
- "header": {
- "appTitle": "LoRA Manager",
- "navigation": {
- "loras": "LoRAs",
- "recipes": "Recetas",
- "checkpoints": "Checkpoints",
- "embeddings": "Embeddings",
- "statistics": "Estadísticas"
- },
- "search": {
- "placeholder": "Buscar",
- "options": "Opciones de búsqueda",
- "searchIn": "Buscar en:",
- "notAvailable": "Búsqueda no disponible en la página de estadísticas",
- "filters": {
- "filename": "Nombre de archivo",
- "modelname": "Nombre del modelo",
- "tags": "Etiquetas",
- "creator": "Creador",
- "title": "Título de la receta",
- "loraName": "Nombre de archivo LoRA",
- "loraModel": "Nombre del modelo LoRA",
- "prompt": "Prompt"
- }
- },
- "filter": {
- "title": "Filtrar modelos",
- "presets": "Preajustes",
- "savePreset": "Guardar filtros activos como nuevo preajuste.",
- "savePresetDisabledActive": "No se puede guardar: Ya hay un preajuste activo. Modifique los filtros para guardar un nuevo preajuste",
- "savePresetDisabledNoFilters": "Seleccione filtros primero para guardar como preajuste",
- "savePresetPrompt": "Ingrese el nombre del preajuste:",
- "presetClickTooltip": "Hacer clic para aplicar preajuste \"{name}\"",
- "presetDeleteTooltip": "Eliminar preajuste",
- "presetDeleteConfirm": "¿Eliminar preajuste \"{name}\"?",
- "presetDeleteConfirmClick": "Haga clic de nuevo para confirmar",
- "presetOverwriteConfirm": "El preset \"{name}\" ya existe. ¿Sobrescribir?",
- "presetNamePlaceholder": "Nombre del preajuste...",
- "baseModel": "Modelo base",
- "baseModelSearchPlaceholder": "Buscar modelos base...",
- "modelTags": "Etiquetas (Top 20)",
- "modelTypes": "Tipos de modelos",
- "license": "Licencia",
- "noCreditRequired": "Sin crédito requerido",
- "allowSellingGeneratedContent": "Venta permitida",
- "allowSellingGeneratedContentTooltip": "Permitir la venta de imágenes generadas",
- "noCreditRequiredTooltip": "Usar el modelo sin atribuir al creador",
- "noTags": "Sin etiquetas",
- "autoTags": "Etiquetas automáticas",
- "noBaseModelMatches": "Ningún modelo base coincide con la búsqueda actual.",
- "clearAll": "Limpiar todos los filtros",
- "any": "Cualquiera",
- "all": "Todos",
- "tagLogicAny": "Coincidir con cualquier etiqueta (O)",
- "tagLogicAll": "Coincidir con todas las etiquetas (Y)"
- },
- "theme": {
- "toggle": "Cambiar tema",
- "switchToLight": "Cambiar a tema claro",
- "switchToDark": "Cambiar a tema oscuro",
- "switchToAuto": "Cambiar a tema automático",
- "presets": "Preajustes de tema",
- "default": "Predeterminado",
- "nord": "Nord",
- "midnight": "Midnight",
- "monokai": "Monokai",
- "dracula": "Dracula",
- "solarized": "Solarized",
- "mode": "Modo",
- "light": "Claro",
- "dark": "Oscuro",
- "auto": "Auto"
- },
- "actions": {
- "checkUpdates": "Comprobar actualizaciones",
- "notifications": "Notificaciones",
- "support": "Soporte"
- }
+ "tutorial": {
+ "skipTutorial": "Saltar tutorial",
+ "back": "Atrás",
+ "next": "Siguiente",
+ "finish": "Finalizar"
},
- "settings": {
- "civitaiApiKey": "Clave API de Civitai",
- "civitaiApiKeyPlaceholder": "Introduce tu clave API de Civitai",
- "civitaiApiKeyHelp": "Utilizada para autenticación al descargar modelos de Civitai",
- "civitaiApiKeyConfigured": "Configurado",
- "civitaiApiKeyNotConfigured": "No configurado",
- "civitaiApiKeySet": "Configurar",
- "civitaiHost": {
- "label": "Host de Civitai",
- "help": "Elige qué sitio de Civitai se abre al usar los enlaces de \"View on Civitai\".",
- "options": {
- "com": "civitai.com (solo SFW)",
- "red": "civitai.red (sin restricciones)"
- }
- },
- "downloadBackend": {
- "label": "Backend de descarga",
- "help": "Elige cómo se descargan los archivos del modelo. Python usa el descargador integrado. aria2 usa el proceso externo recomendado de descarga.",
- "options": {
- "python": "Python (integrado)",
- "aria2": "aria2 (recomendado)"
- }
- },
- "aria2cPath": {
- "label": "Ruta de aria2c",
- "help": "Ruta opcional al ejecutable aria2c. Déjalo vacío para usar aria2c desde el PATH del sistema.",
- "placeholder": "Déjalo vacío para usar aria2c desde el PATH"
- },
- "aria2HelpLink": "Aprende a configurar el backend de descarga aria2",
- "civitaiHostBanner": {
- "title": "Preferencia de host de Civitai disponible",
- "content": "Civitai ahora usa civitai.com para contenido SFW y civitai.red para contenido sin restricciones. Puedes cambiar en Ajustes qué sitio se abre por defecto.",
- "openSettings": "Abrir ajustes"
- },
- "openSettingsFileLocation": {
- "label": "Abrir carpeta de ajustes",
- "tooltip": "Abrir la carpeta que contiene settings.json",
- "success": "Carpeta de settings.json abierta",
- "failed": "No se pudo abrir la carpeta de settings.json",
- "copied": "Ruta de configuración copiada al portapapeles: {{path}}",
- "clipboardFallback": "Ruta de configuración: {{path}}"
- },
- "sections": {
- "contentFiltering": "Filtrado de contenido",
- "downloads": "Descargas",
- "videoSettings": "Configuración de video",
- "layoutSettings": "Configuración de diseño",
- "licenseIcons": "Iconos de licencia",
- "misc": "Varios",
- "backup": "Copias de seguridad",
- "folderSettings": "Raíces predeterminadas",
- "recipeSettings": "Recetas",
- "extraFolderPaths": "Rutas de carpetas adicionales",
- "downloadPathTemplates": "Plantillas de rutas de descarga",
- "priorityTags": "Etiquetas prioritarias",
- "versionScope": "Indicadores de actualización",
- "exampleImages": "Imágenes de ejemplo",
- "autoOrganize": "Organización automática",
- "metadata": "Metadatos",
- "proxySettings": "Configuración de proxy"
- },
- "nav": {
- "general": "General",
- "interface": "Interfaz",
- "library": "Biblioteca"
- },
- "search": {
- "placeholder": "Buscar ajustes...",
- "clear": "Limpiar búsqueda",
- "noResults": "No se encontraron ajustes que coincidan con \"{query}\""
- },
- "storage": {
- "locationLabel": "Modo portátil",
- "locationHelp": "Activa para mantener settings.json dentro del repositorio; desactívalo para guardarlo en tu directorio de configuración de usuario."
- },
- "contentFiltering": {
- "blurNsfwContent": "Difuminar contenido NSFW",
- "blurNsfwContentHelp": "Difuminar imágenes de vista previa de contenido para adultos (NSFW)",
- "showOnlySfw": "Mostrar solo resultados SFW",
- "showOnlySfwHelp": "Filtrar todo el contenido NSFW al navegar y buscar",
- "matureBlurThreshold": "Umbral de difuminado para contenido adulto",
- "matureBlurThresholdHelp": "Establecer a partir de qué nivel de clasificación comienza el filtrado por difuminado cuando el difuminado NSFW está habilitado.",
- "matureBlurThresholdOptions": {
- "pg13": "PG13 y superior",
- "r": "R y superior (predeterminado)",
- "x": "X y superior",
- "xxx": "Solo XXX"
- }
- },
- "videoSettings": {
- "autoplayOnHover": "Reproducir videos automáticamente al pasar el ratón",
- "autoplayOnHoverHelp": "Solo reproducir vistas previas de video al pasar el ratón sobre ellas"
- },
- "autoOrganizeExclusions": {
- "label": "Exclusiones de auto-organización",
- "placeholder": "Ejemplo: curated/*, */backups/*; *_temp.safetensors",
- "help": "Omitir archivos que coincidan con estos patrones comodín. Separe múltiples patrones con comas o puntos y comas.",
- "validation": {
- "noPatterns": "Ingrese al menos un patrón separado por comas o puntos y comas.",
- "saveFailed": "No se pudieron guardar las exclusiones: {message}"
- }
- },
- "metadataRefreshSkipPaths": {
- "label": "Rutas a omitir en la actualización de metadatos",
- "placeholder": "Ejemplo: temp, archived/old, test_models",
- "help": "Omitir modelos en estas rutas de directorio durante la actualización masiva de metadatos (\"Obtener todos los metadatos\"). Ingrese rutas de carpetas relativas al directorio raíz de modelos, separadas por comas.",
- "validation": {
- "noPaths": "Ingrese al menos una ruta separada por comas.",
- "saveFailed": "No se pudieron guardar las rutas a omitir: {message}"
- }
- },
- "backup": {
- "autoEnabled": "Copias de seguridad automáticas",
- "autoEnabledHelp": "Crea una instantánea local una vez al día y conserva las más recientes según la política de retención.",
- "retention": "Cantidad de retención",
- "retentionHelp": "Cuántas instantáneas automáticas conservar antes de eliminar las antiguas.",
- "management": "Gestión de copias",
- "managementHelp": "Exporta tu estado de usuario actual o restáuralo desde un archivo de copia de seguridad.",
- "scopeHelp": "Incluye tu configuración, el historial de descargas y el estado de actualización de los modelos. No incluye los archivos de modelo ni las cachés que se pueden regenerar.",
- "locationSummary": "Ubicación actual de la copia",
- "openFolderButton": "Abrir carpeta de copias",
- "openFolderSuccess": "Carpeta de copias abierta",
- "openFolderFailed": "No se pudo abrir la carpeta de copias",
- "locationCopied": "Ruta de la copia copiada al portapapeles: {{path}}",
- "locationClipboardFallback": "Ruta de la copia: {{path}}",
- "exportButton": "Exportar copia",
- "exportSuccess": "Copia exportada correctamente.",
- "exportFailed": "No se pudo exportar la copia: {message}",
- "importButton": "Importar copia",
- "importConfirm": "¿Importar esta copia y sobrescribir el estado local del usuario?",
- "importSuccess": "Copia importada correctamente.",
- "importFailed": "No se pudo importar la copia: {message}",
- "latestSnapshot": "Última instantánea",
- "latestAutoSnapshot": "Última instantánea automática",
- "snapshotCount": "Instantáneas guardadas",
- "noneAvailable": "Aún no hay instantáneas"
- },
- "downloadSkipBaseModels": {
- "label": "Omitir descargas para modelos base",
- "help": "Se aplica a todos los flujos de descarga. Aquí solo se pueden seleccionar modelos base compatibles.",
- "searchPlaceholder": "Filtrar modelos base...",
- "empty": "Ningún modelo base coincide con la búsqueda actual.",
- "summary": {
- "none": "Ninguno seleccionado",
- "count": "{count} seleccionados"
- },
- "actions": {
- "edit": "Editar",
- "collapse": "Contraer",
- "clear": "Limpiar"
- },
- "validation": {
- "saveFailed": "No se pudieron guardar los modelos base excluidos: {message}"
- }
- },
- "skipPreviouslyDownloadedModelVersions": {
- "label": "Omitir versiones de modelos previamente descargadas",
- "help": "Cuando está habilitado, LoRA Manager omitirá la descarga de una versión de modelo si el servicio de historial de descargas registra esa versión exacta como ya descargada. Aplica a todos los flujos de descarga."
- },
- "layoutSettings": {
- "groupByModel": "Agrupar por modelo",
- "groupByModelHelp": "Cuando está activado, solo se muestra la versión más reciente de cada modelo de Civitai como una tarjeta única. Las versiones anteriores están ocultas.",
- "displayDensity": "Densidad de visualización",
- "displayDensityOptions": {
- "default": "Predeterminado",
- "medium": "Medio",
- "compact": "Compacto"
- },
- "displayDensityHelp": "Elige cuántas tarjetas mostrar por fila:",
- "displayDensityDetails": {
- "default": "5 (1080p), 6 (2K), 8 (4K)",
- "medium": "6 (1080p), 7 (2K), 9 (4K)",
- "compact": "7 (1080p), 8 (2K), 10 (4K)"
- },
- "displayDensityWarning": "Advertencia: Densidades más altas pueden causar problemas de rendimiento en sistemas con recursos limitados.",
- "showFolderSidebar": "Mostrar barra lateral de carpetas",
- "showFolderSidebarHelp": "Activa o desactiva la barra lateral de navegación de carpetas en las páginas de modelos. Cuando está desactivada, la barra lateral y el área de desplazamiento permanecen ocultas.",
- "cardInfoDisplay": "Visualización de información de tarjeta",
- "cardInfoDisplayOptions": {
- "always": "Siempre visible",
- "hover": "Mostrar al pasar el ratón"
- },
- "cardInfoDisplayHelp": "Elige cuándo mostrar información del modelo y botones de acción",
- "showVersionOnCard": "Mostrar versión en la tarjeta",
- "showVersionOnCardHelp": "Mostrar u ocultar el nombre de versión en las tarjetas de modelo",
- "modelCardFooterAction": "Acción del botón de tarjeta de modelo",
- "modelCardFooterActionOptions": {
- "exampleImages": "Abrir imágenes de ejemplo",
- "replacePreview": "Reemplazar vista previa"
- },
- "modelCardFooterActionHelp": "Elige qué hace el botón en la esquina inferior derecha de la tarjeta",
- "modelNameDisplay": "Visualización del nombre del modelo",
- "modelNameDisplayOptions": {
- "modelName": "Nombre del modelo",
- "fileName": "Nombre del archivo"
- },
- "modelNameDisplayHelp": "Elige qué mostrar en el pie de la tarjeta del modelo",
- "cardBlurAmount": "Desenfoque de superposición de tarjetas",
- "cardBlurAmountHelp": "Ajuste la intensidad de desenfoque de las superposiciones del encabezado y pie de página en las tarjetas de modelos y recetas (0 = sin desenfoque, 20 = desenfoque máximo)."
- },
- "folderSettings": {
- "activeLibrary": "Biblioteca activa",
- "activeLibraryHelp": "Alterna entre las bibliotecas configuradas para actualizar las carpetas predeterminadas. Cambiar la selección recarga la página.",
- "loadingLibraries": "Cargando bibliotecas...",
- "noLibraries": "No hay bibliotecas configuradas",
- "defaultLoraRoot": "Raíz de LoRA",
- "defaultLoraRootHelp": "Establecer el directorio raíz predeterminado de LoRA para descargas, importaciones y movimientos",
- "defaultCheckpointRoot": "Raíz de checkpoint",
- "defaultCheckpointRootHelp": "Establecer el directorio raíz predeterminado de checkpoint para descargas, importaciones y movimientos",
- "defaultUnetRoot": "Raíz de Diffusion Model",
- "defaultUnetRootHelp": "Establecer el directorio raíz predeterminado de Diffusion Model (UNET) para descargas, importaciones y movimientos",
- "defaultEmbeddingRoot": "Raíz de embedding",
- "defaultEmbeddingRootHelp": "Establecer el directorio raíz predeterminado de embedding para descargas, importaciones y movimientos",
- "recipesPath": "Ruta de almacenamiento de recetas",
- "recipesPathHelp": "Directorio personalizado opcional para las recetas guardadas. Déjalo vacío para usar la carpeta recipes del primer directorio raíz de LoRA.",
- "recipesPathPlaceholder": "/path/to/recipes",
- "recipesPathMigrating": "Migrando el almacenamiento de recetas...",
- "noDefault": "Sin predeterminado"
- },
- "extraFolderPaths": {
- "title": "Rutas de carpetas adicionales",
- "description": "Rutas raíz de modelos adicionales exclusivas para LoRA Manager. Cargue modelos desde ubicaciones fuera de las carpetas estándar de ComfyUI, ideal para bibliotecas grandes que de otro modo ralentizarían ComfyUI.",
- "restartRequired": "Requires restart to take effect",
- "modelTypes": {
- "lora": "Rutas de LoRA",
- "checkpoint": "Rutas de Checkpoint",
- "unet": "Rutas de modelo de difusión",
- "embedding": "Rutas de Embedding"
- },
- "pathPlaceholder": "/ruta/a/modelos/extra",
- "saveSuccess": "Rutas de carpetas adicionales actualizadas. Se requiere reinicio para aplicar los cambios.",
- "saveError": "Error al actualizar las rutas de carpetas adicionales: {message}",
- "validation": {
- "duplicatePath": "Esta ruta ya está configurada"
- }
- },
- "priorityTags": {
- "title": "Etiquetas prioritarias",
- "description": "Personaliza el orden de prioridad de etiquetas para cada tipo de modelo (p. ej., character, concept, style(toon|toon_style))",
- "placeholder": "character, concept, style(toon|toon_style)",
- "helpLinkLabel": "Abrir ayuda de etiquetas prioritarias",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "saveSuccess": "Etiquetas prioritarias actualizadas.",
- "saveError": "Error al actualizar las etiquetas prioritarias.",
- "loadingSuggestions": "Cargando sugerencias...",
- "validation": {
- "missingClosingParen": "A la entrada {index} le falta un paréntesis de cierre.",
- "missingCanonical": "La entrada {index} debe incluir un nombre de etiqueta canónica.",
- "duplicateCanonical": "La etiqueta canónica \"{tag}\" aparece más de una vez.",
- "unknown": "Configuración de etiquetas prioritarias no válida."
- }
- },
- "downloadPathTemplates": {
- "title": "Plantillas de rutas de descarga",
- "help": "Configurar estructuras de carpetas para diferentes tipos de modelos al descargar de Civitai.",
- "availablePlaceholders": "Marcadores de posición disponibles:",
- "templateOptions": {
- "flatStructure": "Estructura plana",
- "byBaseModel": "Por modelo base",
- "byAuthor": "Por autor",
- "byFirstTag": "Por primera etiqueta",
- "baseModelFirstTag": "Modelo base + primera etiqueta",
- "baseModelAuthor": "Modelo base + autor",
- "authorFirstTag": "Autor + primera etiqueta",
- "baseModelAuthorFirstTag": "Modelo base + autor + primera etiqueta",
- "customTemplate": "Plantilla personalizada"
- },
- "customTemplatePlaceholder": "Introduce plantilla personalizada (ej., {base_model}/{author}/{first_tag})",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "baseModelPathMappings": "Mapeos de rutas de modelo base",
- "baseModelPathMappingsHelp": "Personalizar nombres de carpetas para modelos base específicos (ej., \"Flux.1 D\" → \"flux\")",
- "addMapping": "Añadir mapeo",
- "selectBaseModel": "Seleccionar modelo base",
- "customPathPlaceholder": "Ruta personalizada (ej., flux)",
- "removeMapping": "Eliminar mapeo",
- "validation": {
- "validFlat": "Válido (estructura plana)",
- "invalidChars": "Caracteres inválidos detectados",
- "doubleSlashes": "Barras dobles no permitidas",
- "leadingTrailingSlash": "No puede empezar o terminar con barra",
- "invalidPlaceholder": "Marcador de posición inválido: {placeholder}",
- "validTemplate": "Plantilla válida"
- }
- },
- "exampleImages": {
- "downloadLocation": "Ubicación de descarga",
- "downloadLocationPlaceholder": "Introduce la ruta de la carpeta para imágenes de ejemplo",
- "downloadLocationHelp": "Introduce la ruta de la carpeta donde se guardarán las imágenes de ejemplo de Civitai",
- "autoDownload": "Descargar automáticamente imágenes de ejemplo",
- "autoDownloadHelp": "Descargar automáticamente imágenes de ejemplo para modelos que no las tengan (requiere que se establezca la ubicación de descarga)",
- "openMode": "Acción al abrir imágenes de ejemplo",
- "openModeHelp": "Elige si la acción se abre en el servidor, copia una ruta local asignada o lanza una URI personalizada.",
- "openModeOptions": {
- "system": "Abrir en el servidor",
- "clipboard": "Copiar ruta local",
- "uriTemplate": "Abrir URI personalizada"
- },
- "localRoot": "Raíz local de imágenes de ejemplo",
- "localRootHelp": "Raíz local u montada opcional que refleja el directorio de imágenes de ejemplo del servidor. Si se deja en blanco, se reutiliza la ruta del servidor.",
- "localRootPlaceholder": "Ejemplo: /Volumes/ComfyUI/example_images",
- "uriTemplate": "Abrir plantilla de URI",
- "uriTemplateHelp": "Usa un enlace profundo personalizado, como un URI de archivo o un enlace de Shortcuts.",
- "uriTemplatePlaceholder": "Ejemplo: shortcuts://run-shortcut?name=Open%20Finder&input=text&text={{encoded_local_path}}",
- "uriTemplatePlaceholders": "Marcadores disponibles: {{local_path}}, {{encoded_local_path}}, {{relative_path}}, {{encoded_relative_path}}, {{file_uri}}, {{encoded_file_uri}}",
- "openModeWikiLink": "Más información sobre los modos de apertura remota",
- "optimizeImages": "Optimizar imágenes descargadas",
- "optimizeImagesHelp": "Optimizar imágenes de ejemplo para reducir el tamaño del archivo y mejorar la velocidad de carga (se preservarán los metadatos)",
- "download": "Descargar",
- "restartRequired": "Requiere reinicio"
- },
- "versionGrouping": {
- "label": "Estrategia de indicadores de actualización",
- "help": "Decide si las insignias de actualización deben mostrarse solo cuando una nueva versión comparte el mismo modelo base que tus archivos locales o siempre que exista cualquier versión más reciente de ese modelo.",
- "options": {
- "sameBase": "Coincidir actualizaciones por modelo base",
- "any": "Marcar cualquier actualización disponible"
- }
- },
- "hideEarlyAccessUpdates": {
- "label": "Ocultar actualizaciones de acceso temprano",
- "help": "Solo actualizaciones de acceso temprano"
- },
- "licenseIcons": {
- "useNewStyle": "Usar iconos de licencia actualizados",
- "useNewStyleHelp": "Mostrar permisos de licencia con indicadores de color (nuevo estilo) o solo iconos de restricción (estilo clásico). Refleja el diseño actual de CivitAI."
- },
- "misc": {
- "includeTriggerWords": "Incluir palabras clave en la sintaxis de LoRA",
- "includeTriggerWordsHelp": "Incluir palabras clave entrenadas al copiar la sintaxis de LoRA al portapapeles",
- "loraSyntaxFormat": "Formato de sintaxis LoRA",
- "loraSyntaxFormatHelp": "Formato de sintaxis LoRA. El formato completo incluye la ruta de la subcarpeta (filename_v1.2 → filename_v1.2-ab3c",
- "impact": "Renombrará {count} archivo(s) en {groups} grupo(s) de duplicados",
- "confirm": "Renombrar archivos",
- "cancel": "Cancelar"
+ "metadataFetchSummary": {
+ "title": "Resumen de obtención de metadatos",
+ "statSuccess": "Éxito",
+ "statFailed": "Fallido",
+ "statSkipped": "Omitido",
+ "statTotal": "Total escaneado",
+ "statDuration": "Duración",
+ "successMessage": "¡Todos los {count} {type}s actualizados correctamente!",
+ "failedItems": "Elementos fallidos ({count})",
+ "close": "Cerrar",
+ "copyReport": "Copiar informe",
+ "downloadCsv": "Descargar CSV",
+ "columnModelName": "Nombre del modelo",
+ "columnError": "Error"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "Etiquetas actualizadas exitosamente",
+ "updateFailed": "Error al actualizar etiquetas"
+ },
+ "validation": {
+ "maxLength": "La etiqueta no debe exceder los 30 caracteres",
+ "maxCount": "Máximo 30 etiquetas permitidas",
+ "duplicate": "Esta etiqueta ya existe"
+ }
+ },
+ "initialization": {
+ "title": "Inicializando",
+ "message": "Preparando tu espacio de trabajo...",
+ "status": "Inicializando...",
+ "estimatingTime": "Estimando tiempo...",
+ "loras": {
+ "title": "Inicializando gestor de LoRA",
+ "message": "Escaneando y construyendo caché de LoRA. Esto puede tomar unos minutos..."
+ },
+ "checkpoints": {
+ "title": "Inicializando gestor de checkpoint",
+ "message": "Escaneando y construyendo caché de checkpoint. Esto puede tomar unos minutos..."
+ },
+ "embeddings": {
+ "title": "Inicializando gestor de embedding",
+ "message": "Escaneando y construyendo caché de embedding. Esto puede tomar unos minutos..."
+ },
+ "recipes": {
+ "title": "Inicializando gestor de recetas",
+ "message": "Cargando y procesando recetas. Esto puede tomar unos minutos..."
+ },
+ "statistics": {
+ "title": "Inicializando estadísticas",
+ "message": "Procesando datos del modelo para estadísticas. Esto puede tomar unos minutos..."
+ },
+ "tips": {
+ "title": "Consejos y trucos",
+ "civitai": {
+ "title": "Integración con Civitai",
+ "description": "Conecta tu cuenta de Civitai: Visita Avatar de perfil → Configuración → Claves API → Añadir clave API, luego pégala en la configuración del gestor de LoRA.",
+ "alt": "Configuración de API de Civitai"
+ },
+ "download": {
+ "title": "Descarga fácil",
+ "description": "Usa URLs de Civitai para descargar e instalar rápidamente nuevos modelos.",
+ "alt": "Descarga de Civitai"
+ },
+ "recipes": {
+ "title": "Guardar recetas",
+ "description": "Crea recetas para guardar tus combinaciones de modelos favoritas para uso futuro.",
+ "alt": "Recetas"
+ },
+ "filter": {
+ "title": "Filtrado rápido",
+ "description": "Filtra modelos por etiquetas o tipo de modelo base usando el botón de filtro en el encabezado.",
+ "alt": "Filtrar modelos"
+ },
+ "search": {
+ "title": "Búsqueda rápida",
+ "description": "Presiona Ctrl+F (Cmd+F en Mac) para buscar rápidamente dentro de tu vista actual.",
+ "alt": "Búsqueda rápida"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "Se encontraron {count} grupos de duplicados",
+ "showNotification": "Mostrar notificación de duplicados",
+ "deleteSelected": "Eliminar seleccionados",
+ "exitMode": "Salir del modo",
+ "help": {
+ "identicalHashes": "Hashes idénticos significan archivos de modelo idénticos, incluso si tienen nombres o vistas previas diferentes.",
+ "keepOne": "Mantén solo una versión (preferiblemente con mejores metadatos/vistas previas) y elimina de forma segura las otras."
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "Copiado al portapapeles",
+ "copyFailed": "Error al copiar"
+ },
+ "lora": {
+ "syntaxCopied": "Sintaxis de LoRA copiada al portapapeles",
+ "syntaxCopiedNoTriggerWords": "Sintaxis de LoRA copiada al portapapeles (no se encontraron palabras clave)",
+ "syntaxCopiedWithTriggerWords": "Sintaxis de LoRA con palabras clave copiada al portapapeles",
+ "syntaxCopiedWithTriggerWordGroups": "Sintaxis de LoRA con grupos de palabras clave copiada al portapapeles"
+ },
+ "workflow": {
+ "noSupportedNodes": "No se encontraron nodos de destino compatibles en el flujo de trabajo",
+ "communicationFailed": "Error al comunicarse con ComfyUI",
+ "loraAdded": "LoRA añadido al flujo de trabajo",
+ "loraReplaced": "LoRA reemplazado en el flujo de trabajo",
+ "loraFailedToSend": "Error al enviar LoRA al flujo de trabajo",
+ "recipeAdded": "Receta añadida al flujo de trabajo",
+ "recipeReplaced": "Receta reemplazada en el flujo de trabajo",
+ "recipeFailedToSend": "Error al enviar receta al flujo de trabajo",
+ "noMatchingNodes": "No hay nodos compatibles disponibles en el flujo de trabajo actual",
+ "noTargetNodeSelected": "No se ha seleccionado ningún nodo de destino",
+ "modelUpdated": "Modelo actualizado en el flujo de trabajo",
+ "modelFailed": "Error al actualizar nodo de modelo",
+ "embeddingAdded": "Embedding añadido al flujo de trabajo",
+ "embeddingFailed": "Error al añadir el embedding",
+ "promptSent": "Prompt enviado al flujo de trabajo",
+ "promptFailed": "Error al enviar el prompt"
+ },
+ "nodeSelector": {
+ "recipe": "Receta",
+ "lora": "LoRA",
+ "embedding": "Embedding",
+ "prompt": "Prompt",
+ "replace": "Reemplazar",
+ "append": "Añadir",
+ "selectTargetNode": "Seleccionar nodo de destino",
+ "sendToAll": "Enviar a todos"
+ },
+ "exampleImages": {
+ "opened": "Carpeta de imágenes de ejemplo abierta",
+ "openingFolder": "Abriendo carpeta de imágenes de ejemplo",
+ "failedToOpen": "Error al abrir carpeta de imágenes de ejemplo",
+ "copiedPath": "Ruta copiada al portapapeles: {{path}}",
+ "clipboardFallback": "Ruta: {{path}}",
+ "copiedUri": "Enlace copiado al portapapeles: {{uri}}",
+ "uriClipboardFallback": "Enlace: {{uri}}",
+ "setupRequired": "Almacenamiento de imágenes de ejemplo",
+ "setupDescription": "Para agregar imágenes de ejemplo personalizadas, primero necesita establecer una ubicación de descarga.",
+ "setupUsage": "Esta ruta se utiliza tanto para imágenes de ejemplo descargadas como personalizadas.",
+ "openSettings": "Abrir configuración"
+ }
+ },
+ "help": {
+ "title": "Ayuda y tutoriales",
+ "tabs": {
+ "gettingStarted": "Comenzando",
+ "updateVlogs": "Vlogs de actualización",
+ "documentation": "Documentación"
+ },
+ "gettingStarted": {
+ "title": "Comenzando con el gestor de LoRA"
+ },
+ "updateVlogs": {
+ "title": "Últimas actualizaciones",
+ "watchOnYouTube": "Ver en YouTube",
+ "playlistTitle": "Lista de reproducción de actualizaciones del gestor de LoRA",
+ "playlistDescription": "Ve todos los videos de actualización mostrando las últimas características y mejoras."
+ },
+ "documentation": {
+ "title": "Documentación",
+ "general": "General",
+ "troubleshooting": "Solución de problemas",
+ "modelManagement": "Gestión de modelos",
+ "recipes": "Recetas",
+ "settings": "Configuración",
+ "extensions": "Extensiones",
+ "newBadge": "NUEVO"
+ }
+ },
+ "update": {
+ "title": "Comprobar actualizaciones",
+ "notificationsTitle": "Centro de notificaciones",
+ "tabs": {
+ "updates": "Actualizaciones",
+ "messages": "Mensajes"
+ },
+ "updateAvailable": "Actualización disponible",
+ "noChangelogAvailable": "No hay registro de cambios detallado disponible. Revisa GitHub para más información.",
+ "currentVersion": "Versión actual",
+ "newVersion": "Nueva versión",
+ "commit": "Commit",
+ "viewOnGitHub": "Ver en GitHub",
+ "updateNow": "Actualizar ahora",
+ "preparingUpdate": "Preparando actualización...",
+ "changelog": "Registro de cambios",
+ "checkingUpdates": "Comprobando actualizaciones...",
+ "checkingMessage": "Por favor espera mientras comprobamos la última versión.",
+ "showNotifications": "Mostrar notificaciones de actualización",
+ "latestBadge": "Último",
+ "updateProgress": {
+ "preparing": "Preparando actualización...",
+ "installing": "Instalando actualización...",
+ "completed": "¡Actualización completada exitosamente!",
+ "failed": "Actualización falló: {error}"
+ },
+ "status": {
+ "updating": "Actualizando...",
+ "updated": "¡Actualizado!",
+ "updateFailed": "Actualización falló"
+ },
+ "completion": {
+ "successMessage": "¡Actualizado exitosamente a {version}!",
+ "restartMessage": "Por favor reinicia ComfyUI o el gestor de LoRA para aplicar la actualización.",
+ "reloadMessage": "Asegúrate de recargar tu navegador tanto para el gestor de LoRA como para ComfyUI."
+ },
+ "nightly": {
+ "warning": "Advertencia: Las compilaciones nocturnas pueden contener características experimentales y podrían ser inestables.",
+ "enable": "Habilitar actualizaciones nocturnas"
},
"banners": {
- "versionMismatch": {
- "title": "Actualización de la aplicación detectada",
- "content": "Tu navegador está ejecutando una versión desactualizada del Gestor de LoRA ({storedVersion}). El servidor se ha actualizado a la versión {currentVersion}. Por favor, actualiza la página para asegurar el funcionamiento correcto.",
- "refreshNow": "Actualizar ahora",
- "refreshingIn": "Actualizando en",
- "seconds": "segundos"
- },
- "communitySupport": {
- "title": "Keep LoRA Manager Thriving with Your Support ❤️",
- "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
- "supportCta": "Support on Ko-fi",
- "learnMore": "LM Civitai Extension Tutorial"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "Corrupción de caché detectada"
- },
- "degraded": {
- "title": "Problemas de caché detectados"
- },
- "content": "{invalid} de {total} entradas de caché son inválidas ({rate}). Esto puede causar modelos faltantes o errores. Se recomienda reconstruir la caché.",
- "rebuildCache": "Reconstruir caché",
- "dismiss": "Descartar",
- "rebuilding": "Reconstruyendo caché...",
- "rebuildFailed": "Error al reconstruir la caché: {error}",
- "retry": "Reintentar"
- }
+ "recent": "Notificaciones recientes",
+ "empty": "No hay banners recientes.",
+ "shown": "Mostrado {time}",
+ "dismissed": "Descartado {time}",
+ "active": "Activo"
}
+ },
+ "support": {
+ "title": "Apoyar el proyecto",
+ "message": "Si encuentras útil el gestor de LoRA, ¡realmente apreciaría tu apoyo! 🙌",
+ "feedback": {
+ "title": "Proporcionar comentarios",
+ "description": "¡Tus comentarios ayudan a dar forma a futuras actualizaciones! Comparte tus pensamientos:"
+ },
+ "links": {
+ "submitGithubIssue": "Enviar issue en GitHub",
+ "joinDiscord": "Unirse a Discord",
+ "youtubeChannel": "Canal de YouTube",
+ "civitaiProfile": "Perfil de Civitai",
+ "supportKofi": "Apoyar en Ko-fi",
+ "supportPatreon": "Apoyar en Patreon"
+ },
+ "sections": {
+ "followUpdates": "Seguir para actualizaciones",
+ "buyMeCoffee": "Cómprame un café",
+ "coffeeDescription": "Si te gustaría apoyar mi trabajo directamente:",
+ "becomePatron": "Conviértete en patrocinador",
+ "patronDescription": "Apoya el desarrollo continuo con contribuciones mensuales:",
+ "wechatSupport": "Soporte WeChat",
+ "wechatDescription": "Para usuarios en China, puedes apoyar a través de WeChat:",
+ "showWechatQR": "Mostrar código QR de WeChat",
+ "hideWechatQR": "Ocultar código QR de WeChat"
+ },
+ "footer": "¡Gracias por usar el gestor de LoRA! ❤️",
+ "supporters": {
+ "title": "Gracias a todos los seguidores",
+ "subtitle": "Gracias a {count} seguidores que hicieron este proyecto posible",
+ "specialThanks": "Agradecimientos especiales",
+ "allSupporters": "Todos los seguidores",
+ "totalCount": "{count} seguidores en total"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "No se puede interactuar con ComfyUI en modo independiente",
+ "failedWorkflowInfo": "Error al obtener información del flujo de trabajo",
+ "pageInitFailed": "Error al inicializar la página de {pageType}. Por favor recarga.",
+ "statisticsLoadFailed": "Error al cargar datos de estadísticas"
+ },
+ "loras": {
+ "copyOnlyForLoras": "Copiar sintaxis solo está disponible para LoRAs",
+ "noLorasSelected": "No hay LoRAs seleccionados",
+ "missingDataForLoras": "Faltan datos para {count} LoRAs",
+ "noValidLorasToCopy": "No hay LoRAs válidos para copiar",
+ "sendOnlyForLoras": "Enviar al flujo de trabajo solo está disponible para LoRAs",
+ "noValidLorasToSend": "No hay LoRAs válidos para enviar",
+ "downloadSuccessful": "LoRAs descargados exitosamente",
+ "allDownloadSuccessful": "Todos los {count} LoRAs descargados exitosamente",
+ "downloadPartialSuccess": "Descargados {completed} de {total} LoRAs",
+ "downloadPartialWithAccess": "Descargados {completed} de {total} LoRAs. {accessFailures} fallaron debido a restricciones de acceso. Revisa tu clave API en configuración o estado de acceso temprano.",
+ "pleaseSelectVersion": "Por favor selecciona una versión",
+ "versionExists": "Esta versión ya existe en tu biblioteca",
+ "downloadCompleted": "Descarga completada exitosamente",
+ "downloadSkippedByBaseModel": "Descarga omitida porque el modelo base {baseModel} está excluido",
+ "autoOrganizeSuccess": "Auto-organización completada exitosamente para {count} {type}",
+ "autoOrganizePartialSuccess": "Auto-organización completada con {success} movidos, {failures} fallidos de un total de {total} modelos",
+ "autoOrganizeFailed": "Auto-organización fallida: {error}",
+ "noModelsSelected": "No hay modelos seleccionados"
+ },
+ "recipes": {
+ "fetchFailed": "Error al obtener recetas: {message}",
+ "reloadFailed": "Error al recargar {modelType}s: {message}",
+ "loadFailed": "Error al cargar {modelType}s: {message}",
+ "refreshComplete": "Actualización completa",
+ "refreshFailed": "Error al actualizar recetas: {message}",
+ "syncComplete": "Sincronización completa",
+ "syncFailed": "Error al sincronizar recetas: {message}",
+ "updateFailed": "Error al actualizar receta: {error}",
+ "updateError": "Error actualizando receta: {message}",
+ "nameSaved": "Receta \"{name}\" guardada exitosamente",
+ "nameUpdated": "Nombre de receta actualizado exitosamente",
+ "tagsUpdated": "Etiquetas de receta actualizadas exitosamente",
+ "sourceUrlUpdated": "URL de origen actualizada exitosamente",
+ "promptUpdated": "Prompt actualizado exitosamente",
+ "negativePromptUpdated": "Prompt negativo actualizado exitosamente",
+ "promptEditorHint": "Presiona Enter para guardar, Shift+Enter para nueva línea",
+ "noRecipeId": "No hay ID de receta disponible",
+ "sendToWorkflowFailed": "Error al enviar la receta al flujo de trabajo: {message}",
+ "copyFailed": "Error copiando sintaxis de receta: {message}",
+ "createError": "Error al crear la receta:{message}",
+ "createFailed": "Error al crear la receta:{error}",
+ "createMissingData": "Faltan datos necesarios para crear la receta",
+ "created": "Receta creada exitosamente",
+ "noMissingLoras": "No hay LoRAs faltantes para descargar",
+ "missingLorasInfoFailed": "Error al obtener información de LoRAs faltantes",
+ "preparingForDownloadFailed": "Error preparando LoRAs para descarga",
+ "enterLoraName": "Por favor introduce un nombre de LoRA o sintaxis",
+ "reconnectedSuccessfully": "LoRA reconectado exitosamente",
+ "reconnectFailed": "Error reconectando LoRA: {message}",
+ "noPromptToSend": "No hay prompt para enviar",
+ "cannotSend": "No se puede enviar receta: Falta ID de receta",
+ "sendFailed": "Error al enviar receta al flujo de trabajo",
+ "sendError": "Error enviando receta al flujo de trabajo",
+ "missingCheckpointPath": "Ruta del checkpoint no disponible",
+ "missingCheckpointInfo": "Falta información del checkpoint",
+ "downloadCheckpointFailed": "Error al descargar el checkpoint: {message}",
+ "cannotDelete": "No se puede eliminar receta: Falta ID de receta",
+ "deleteConfirmationError": "Error mostrando confirmación de eliminación",
+ "deletedSuccessfully": "Receta eliminada exitosamente",
+ "deleteFailed": "Error eliminando receta: {message}",
+ "cannotShare": "No se puede compartir receta: Falta ID de receta",
+ "preparingForSharing": "Preparando receta para compartir...",
+ "downloadStarted": "Descarga de receta iniciada",
+ "shareError": "Error compartiendo receta: {message}",
+ "sharePreparationError": "Error preparando receta para compartir",
+ "selectImageFirst": "Por favor selecciona una imagen primero",
+ "enterRecipeName": "Por favor introduce un nombre de receta",
+ "processingError": "Error de procesamiento: {message}",
+ "folderBrowserError": "Error cargando explorador de carpetas: {message}",
+ "recipeSaveFailed": "Error al guardar receta: {error}",
+ "recipeSaved": "Recipe saved successfully",
+ "importFailed": "Importación falló: {message}",
+ "folderTreeFailed": "Error al cargar árbol de carpetas",
+ "folderTreeError": "Error cargando árbol de carpetas",
+ "batchImportFailed": "Failed to start batch import: {message}",
+ "batchImportCancelling": "Cancelling batch import...",
+ "batchImportCancelFailed": "Failed to cancel batch import: {message}",
+ "batchImportNoUrls": "Please enter at least one URL or file path",
+ "batchImportNoDirectory": "Please enter a directory path",
+ "batchImportBrowseFailed": "Failed to browse directory: {message}",
+ "batchImportDirectorySelected": "Directory selected: {path}",
+ "noRecipesSelected": "No se han seleccionado recetas",
+ "repairBulkComplete": "Reparación completa: {repaired} reparadas, {skipped} omitidas (de {total})",
+ "repairBulkSkipped": "No se necesita reparación para ninguna de las {total} recetas seleccionadas",
+ "repairBulkFailed": "Error al reparar las recetas seleccionadas: {message}",
+ "reimporting": "Reimportando receta desde origen...",
+ "reimportSuccess": "Receta reimportada exitosamente",
+ "reimportBulkComplete": "Reimportación completa: {completed} reimportadas, {failed} fallidas (de {total})",
+ "reimportBulkFailed": "Error al reimportar algunas recetas",
+ "noMissingLorasInSelection": "No se encontraron LoRAs faltantes en las recetas seleccionadas",
+ "noLoraRootConfigured": "No se ha configurado el directorio raíz de LoRA. Por favor, establezca un directorio raíz de LoRA predeterminado en la configuración."
+ },
+ "models": {
+ "noModelsSelected": "No hay modelos seleccionados",
+ "deletedSuccessfully": "Eliminados exitosamente {count} {type}(s)",
+ "deleteFailed": "Error: {error}",
+ "deleteFailedGeneral": "Error al eliminar modelos",
+ "selectedAdditional": "Seleccionados {count} {type}(s) adicionales",
+ "marqueeSelectionComplete": "Seleccionados {count} {type}(s) con selección de marco",
+ "refreshMetadataFailed": "Error al actualizar metadatos",
+ "nameCannotBeEmpty": "El nombre del modelo no puede estar vacío",
+ "nameUpdatedSuccessfully": "Nombre del modelo actualizado exitosamente",
+ "nameUpdateFailed": "Error al actualizar nombre del modelo",
+ "baseModelUpdated": "Modelo base actualizado exitosamente",
+ "baseModelUpdateFailed": "Error al actualizar modelo base",
+ "baseModelNotSelected": "Por favor selecciona un modelo base",
+ "bulkBaseModelUpdating": "Actualizando modelo base para {count} modelo(s)...",
+ "bulkBaseModelUpdateSuccess": "Modelo base actualizado exitosamente para {count} modelo(s)",
+ "bulkBaseModelUpdatePartial": "Actualizados {success} modelo(s), fallaron {failed} modelo(s)",
+ "bulkBaseModelUpdateFailed": "Error al actualizar el modelo base para los modelos seleccionados",
+ "skipMetadataRefreshUpdating": "Actualizando flag de actualización de metadatos para {count} modelo(s)...",
+ "skipMetadataRefreshSet": "Actualización de metadatos omitida para {count} modelo(s)",
+ "skipMetadataRefreshCleared": "Actualización de metadatos reanudada para {count} modelo(s)",
+ "skipMetadataRefreshPartial": "{success} modelo(s) actualizados, {failed} fallaron",
+ "skipMetadataRefreshFailed": "Error al actualizar flag de actualización de metadatos para los modelos seleccionados",
+ "bulkContentRatingUpdating": "Actualizando la clasificación de contenido para {count} modelo(s)...",
+ "bulkContentRatingSet": "Clasificación de contenido establecida en {level} para {count} modelo(s)",
+ "bulkContentRatingPartial": "Clasificación de contenido establecida en {level} para {success} modelo(s), {failed} fallaron",
+ "bulkContentRatingFailed": "No se pudo actualizar la clasificación de contenido para los modelos seleccionados",
+ "bulkFavoriteUpdating": "Añadiendo {count} modelo(s) a favoritos...",
+ "bulkUnfavoriteUpdating": "Eliminando {count} modelo(s) de favoritos...",
+ "bulkFavoritePartialAdded": "{success} modelo(s) añadido(s) a favoritos, {failed} fallido(s)",
+ "bulkFavoritePartialRemoved": "{success} modelo(s) eliminado(s) de favoritos, {failed} fallido(s)",
+ "bulkFavoriteFailed": "Error al actualizar el estado de favorito",
+ "bulkUpdatesChecking": "Comprobando actualizaciones para {type} seleccionados...",
+ "bulkUpdatesSuccess": "Actualizaciones disponibles para {count} {type} seleccionados",
+ "bulkUpdatesNone": "No se encontraron actualizaciones para los {type} seleccionados",
+ "bulkUpdatesMissing": "Los {type} seleccionados no están vinculados a actualizaciones de Civitai",
+ "bulkUpdatesPartialMissing": "Se omitieron {missing} {type} seleccionados sin enlace de Civitai",
+ "bulkUpdatesFailed": "Error al comprobar actualizaciones para los {type} seleccionados: {message}",
+ "invalidCharactersRemoved": "Caracteres inválidos eliminados del nombre de archivo",
+ "filenameCannotBeEmpty": "El nombre de archivo no puede estar vacío",
+ "renameFailed": "Error al renombrar archivo: {message}",
+ "moveFailed": "Error al mover modelo(s): {message}",
+ "pleaseSelectRoot": "Por favor selecciona un directorio raíz de {type}",
+ "nameTooLong": "El nombre del modelo está limitado a 100 caracteres",
+ "verificationAlreadyDone": "Este grupo ya ha sido verificado",
+ "verificationCompleteMismatch": "Verificación completa. {count} archivo(s) tienen hashes reales diferentes.",
+ "verificationCompleteSuccess": "Verificación completa. Todos los archivos son confirmados duplicados.",
+ "verificationFailed": "Error al verificar hashes: {message}",
+ "noTagsToAdd": "No hay etiquetas para añadir",
+ "bulkTagsUpdating": "Actualizando etiquetas para {count} modelo(s)...",
+ "tagsAddedSuccessfully": "Se añadieron exitosamente {tagCount} etiqueta(s) a {count} {type}(s)",
+ "tagsReplacedSuccessfully": "Se reemplazaron exitosamente las etiquetas de {count} {type}(s) con {tagCount} etiqueta(s)",
+ "tagsAddFailed": "Error al añadir etiquetas a {count} modelo(s)",
+ "tagsReplaceFailed": "Error al reemplazar etiquetas para {count} modelo(s)",
+ "bulkTagsAddFailed": "Error al añadir etiquetas a los modelos",
+ "bulkTagsReplaceFailed": "Error al reemplazar etiquetas para los modelos"
+ },
+ "search": {
+ "atLeastOneOption": "Al menos una opción de búsqueda debe estar seleccionada"
+ },
+ "settings": {
+ "loraRootsFailed": "Error al cargar raíces de LoRA: {message}",
+ "checkpointRootsFailed": "Error al cargar raíces de checkpoint: {message}",
+ "unetRootsFailed": "Error al cargar raíces de Diffusion Model: {message}",
+ "embeddingRootsFailed": "Error al cargar raíces de embedding: {message}",
+ "mappingsUpdated": "Mapeos de rutas de modelo base actualizados ({count} mapeo{plural})",
+ "mappingsCleared": "Mapeos de rutas de modelo base limpiados",
+ "mappingSaveFailed": "Error al guardar mapeos de modelo base: {message}",
+ "downloadTemplatesUpdated": "Plantillas de rutas de descarga actualizadas",
+ "downloadTemplatesFailed": "Error al guardar plantillas de rutas de descarga: {message}",
+ "recipesPathUpdated": "Ruta de almacenamiento de recetas actualizada",
+ "recipesPathSaveFailed": "Error al actualizar la ruta de almacenamiento de recetas: {message}",
+ "settingsUpdated": "Configuración actualizada: {setting}",
+ "compactModeToggled": "Modo compacto {state}",
+ "settingSaveFailed": "Error al guardar configuración: {message}",
+ "displayDensitySet": "Densidad de visualización establecida a {density}",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "Error al cambiar idioma: {message}",
+ "cacheCleared": "Archivos de caché limpiados exitosamente. La caché se reconstruirá en la próxima acción.",
+ "cacheClearFailed": "Error al limpiar caché: {error}",
+ "cacheClearError": "Error limpiando caché: {message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "Filtros limpiados",
+ "noCustomFilterToClear": "No hay filtro personalizado para limpiar",
+ "noActiveFilters": "No hay filtros activos para guardar"
+ },
+ "presets": {
+ "created": "Preajuste \"{name}\" creado",
+ "deleted": "Preajuste \"{name}\" eliminado",
+ "applied": "Preajuste \"{name}\" aplicado",
+ "overwritten": "Preset \"{name}\" sobrescrito",
+ "restored": "Presets predeterminados restaurados"
+ },
+ "error": {
+ "presetNameEmpty": "El nombre del preajuste no puede estar vacío",
+ "presetNameTooLong": "El nombre del preajuste debe tener {max} caracteres o menos",
+ "presetNameInvalidChars": "El nombre del preajuste contiene caracteres inválidos",
+ "presetNameExists": "Ya existe un preajuste con este nombre",
+ "maxPresetsReached": "Máximo {max} preajustes permitidos. Elimine uno para agregar más.",
+ "presetNotFound": "Preajuste no encontrado",
+ "invalidPreset": "Datos de preajuste inválidos",
+ "deletePresetFailed": "Error al eliminar el preajuste",
+ "applyPresetFailed": "Error al aplicar el preajuste"
+ },
+ "downloads": {
+ "imagesCompleted": "Imágenes de ejemplo {action} completadas",
+ "imagesFailed": "Imágenes de ejemplo {action} fallidas",
+ "loadError": "Error al cargar descargas: {message}",
+ "downloadError": "Error de descarga: {message}"
+ },
+ "import": {
+ "folderTreeFailed": "Error al cargar árbol de carpetas",
+ "folderTreeError": "Error al cargar árbol de carpetas",
+ "imagesImported": "Imágenes de ejemplo importadas exitosamente",
+ "imagesPartial": "{success} imagen(es) importada(s), {failed} fallida(s)",
+ "importFailed": "Error al importar imágenes de ejemplo: {message}"
+ },
+ "triggerWords": {
+ "loadFailed": "No se pudieron cargar palabras entrenadas",
+ "tooLong": "La palabra clave no debe exceder 500 palabras",
+ "tooMany": "Máximo 100 palabras clave permitidas",
+ "alreadyExists": "Esta palabra clave ya existe",
+ "updateSuccess": "Palabras clave actualizadas exitosamente",
+ "updateFailed": "Error al actualizar palabras clave",
+ "copyFailed": "Error al copiar"
+ },
+ "virtual": {
+ "loadFailed": "Error al cargar elementos",
+ "loadMoreFailed": "Error al cargar más elementos",
+ "loadPositionFailed": "Error al cargar elementos en esta posición"
+ },
+ "bulk": {
+ "unableToSelectAll": "No se pueden seleccionar todos los elementos"
+ },
+ "duplicates": {
+ "findFailed": "Error al encontrar duplicados: {message}",
+ "noDuplicatesFound": "No se encontraron duplicados de {type}",
+ "noItemsSelected": "No hay {type} seleccionados para eliminar",
+ "deleteError": "Error: {message}",
+ "deleteSuccess": "{count} {type} eliminados exitosamente",
+ "deleteFailed": "Error al eliminar {type}: {message}"
+ },
+ "controls": {
+ "reloadFailed": "Error al recargar {pageType}: {message}",
+ "refreshFailed": "Error al {action} {pageType}: {message}",
+ "fetchMetadataFailed": "Error al obtener metadatos: {message}",
+ "clearFilterFailed": "Error al limpiar filtro personalizado: {message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "Clasificación de contenido establecida a {level}",
+ "contentRatingFailed": "Error al establecer clasificación de contenido: {message}",
+ "relinkSuccess": "Modelo re-vinculado exitosamente a Civitai",
+ "relinkFailed": "Error: {message}",
+ "fetchMetadataFirst": "Por favor obtén metadatos de CivitAI primero",
+ "noCivitaiInfo": "No hay información de CivitAI disponible",
+ "missingHash": "Hash del modelo no disponible"
+ },
+ "exampleImages": {
+ "pathUpdated": "Ruta de imágenes de ejemplo actualizada exitosamente",
+ "pathUpdateFailed": "Error al actualizar la ruta de imágenes de ejemplo: {message}",
+ "downloadInProgress": "Descarga ya en progreso",
+ "enterLocationFirst": "Por favor introduce primero una ubicación de descarga",
+ "downloadStarted": "Descarga de imágenes de ejemplo iniciada",
+ "downloadStartFailed": "Error al iniciar descarga: {error}",
+ "downloadPaused": "Descarga pausada",
+ "pauseFailed": "Error al pausar descarga: {error}",
+ "downloadResumed": "Descarga reanudada",
+ "resumeFailed": "Error al reanudar descarga: {error}",
+ "downloadStopped": "Descarga cancelada",
+ "stopFailed": "Error al cancelar descarga: {error}",
+ "deleted": "Imagen de ejemplo eliminada",
+ "deleteFailed": "Error al eliminar imagen de ejemplo",
+ "setPreviewFailed": "Error al establecer imagen de vista previa"
+ },
+ "api": {
+ "fetchFailed": "Error al obtener {type}s: {message}",
+ "reloadFailed": "Error al recargar {type}s: {message}",
+ "deleteSuccess": "{type} eliminado exitosamente",
+ "deleteFailed": "Error al eliminar {type}: {message}",
+ "excludeSuccess": "{type} excluido exitosamente",
+ "excludeFailed": "Error al excluir {type}: {message}",
+ "restoreSuccess": "{type} restaurado correctamente",
+ "restoreFailed": "No se pudo restaurar {type}: {message}",
+ "fileNameUpdated": "Nombre de archivo actualizado exitosamente",
+ "fileRenameFailed": "Error al renombrar archivo: {error}",
+ "previewUpdated": "Vista previa actualizada exitosamente",
+ "previewUploadFailed": "Error al subir imagen de vista previa",
+ "refreshComplete": "{action} completada",
+ "refreshFailed": "Error al {action} {type}s",
+ "metadataRefreshed": "Metadatos actualizados exitosamente",
+ "metadataRefreshFailed": "Error al actualizar metadatos: {message}",
+ "metadataUpdateComplete": "Actualización de metadatos completada",
+ "operationCancelled": "Operación cancelada por el usuario",
+ "operationCancelledPartial": "Operación cancelada. {success} elementos procesados.",
+ "metadataFetchFailed": "Error al obtener metadatos: {message}",
+ "bulkMetadataCompleteAll": "Actualizados exitosamente todos los {count} {type}s",
+ "bulkMetadataCompletePartial": "Actualizados {success} de {total} {type}s",
+ "bulkMetadataCompleteNone": "No se pudo actualizar metadatos de ningún {type}",
+ "bulkMetadataFailureDetails": "Actualizaciones fallidas:\n{failures}",
+ "bulkMetadataFailed": "Error al actualizar metadatos: {message}",
+ "moveNotSupported": "Mover {type}s no está soportado",
+ "alreadyInFolder": "{type} ya está en la carpeta seleccionada",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type} movido exitosamente",
+ "bulkMoveNotSupported": "Mover {type}s no está soportado",
+ "allAlreadyInFolder": "Todos los {type}s seleccionados ya están en la carpeta de destino",
+ "bulkMovePartial": "Movidos {successCount} {type}s, {failureCount} fallidos",
+ "bulkMoveFailures": "Movimientos fallidos:\n{failures}",
+ "bulkMoveSuccess": "Movidos exitosamente {successCount} {type}s",
+ "exampleImagesDownloadSuccess": "¡Imágenes de ejemplo descargadas exitosamente!",
+ "exampleImagesDownloadFailed": "Error al descargar imágenes de ejemplo: {message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "Copiado al portapapeles",
+ "downloadStarted": "Descarga iniciada"
+ }
+ },
+ "doctor": {
+ "kicker": "Diagnósticos del sistema",
+ "title": "Doctor",
+ "buttonTitle": "Ejecutar diagnósticos y correcciones comunes",
+ "loading": "Comprobando el entorno...",
+ "footer": "Exporta un paquete de diagnóstico si el problema persiste después de la reparación.",
+ "summary": {
+ "idle": "Ejecuta una comprobación del estado de la configuración, la integridad de la caché y la coherencia de la interfaz.",
+ "ok": "No se encontraron problemas activos en el entorno actual.",
+ "warning": "Se encontraron {count} problema(s). La mayoría se puede solucionar directamente desde este panel.",
+ "error": "Se encontraron {count} problema(s). Deben atenderse antes de que la aplicación esté completamente saludable."
+ },
+ "status": {
+ "ok": "Saludable",
+ "warning": "Requiere atención",
+ "error": "Se requiere acción"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API Key"
+ },
+ "cache_health": {
+ "title": "Model Cache Health"
+ },
+ "filename_conflicts": {
+ "title": "Duplicate Filename Conflicts"
+ },
+ "ui_version": {
+ "title": "UI Version"
+ }
+ },
+ "actions": {
+ "runAgain": "Ejecutar de nuevo",
+ "exportBundle": "Exportar paquete",
+ "open-settings": "Open Settings",
+ "open-settings-syntax-format": "Switch to Full Path Syntax",
+ "repair-cache": "Rebuild Cache",
+ "resolve-filename-conflicts": "Resolve Conflicts",
+ "reload-page": "Reload UI"
+ },
+ "labels": {
+ "conflicts": "Conflicts",
+ "version": "Version"
+ },
+ "toast": {
+ "loadFailed": "Error al cargar los diagnósticos: {message}",
+ "repairSuccess": "Reconstrucción de caché completada.",
+ "repairFailed": "Error al reconstruir la caché: {message}",
+ "exportSuccess": "Paquete de diagnósticos exportado.",
+ "exportFailed": "Error al exportar el paquete de diagnósticos: {message}",
+ "conflictsResolved": "{count} conflicto(s) de nombre de archivo resuelto(s).",
+ "conflictsResolveFailed": "Error al resolver conflictos de nombre de archivo: {message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "Resolver conflictos de nombres de archivo",
+ "message": "Renombrar añadiendo un hash de 4 caracteres a cada nombre de archivo duplicado.",
+ "note": "Esta operación renombra archivos en el disco. Es posible que las referencias a modelos en flujos de trabajo existentes deban actualizarse si usas el formato de sintaxis A1111.",
+ "detail": "Ejemplo: filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "Renombrará {count} archivo(s) en {groups} grupo(s) de duplicados",
+ "confirm": "Renombrar archivos",
+ "cancel": "Cancelar"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "Actualización de la aplicación detectada",
+ "content": "Tu navegador está ejecutando una versión desactualizada del Gestor de LoRA ({storedVersion}). El servidor se ha actualizado a la versión {currentVersion}. Por favor, actualiza la página para asegurar el funcionamiento correcto.",
+ "refreshNow": "Actualizar ahora",
+ "refreshingIn": "Actualizando en",
+ "seconds": "segundos"
+ },
+ "communitySupport": {
+ "title": "Keep LoRA Manager Thriving with Your Support ❤️",
+ "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
+ "supportCta": "Support on Ko-fi",
+ "learnMore": "LM Civitai Extension Tutorial"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "Corrupción de caché detectada"
+ },
+ "degraded": {
+ "title": "Problemas de caché detectados"
+ },
+ "content": "{invalid} de {total} entradas de caché son inválidas ({rate}). Esto puede causar modelos faltantes o errores. Se recomienda reconstruir la caché.",
+ "rebuildCache": "Reconstruir caché",
+ "dismiss": "Descartar",
+ "rebuilding": "Reconstruyendo caché...",
+ "rebuildFailed": "Error al reconstruir la caché: {error}",
+ "retry": "Reintentar"
+ }
+ }
}
diff --git a/locales/fr.json b/locales/fr.json
index b90adb3d..09ed3837 100644
--- a/locales/fr.json
+++ b/locales/fr.json
@@ -1,2167 +1,2171 @@
{
- "common": {
- "cancel": "Annuler",
- "confirm": "Confirmer",
- "actions": {
- "save": "Enregistrer",
- "cancel": "Annuler",
- "confirm": "Confirmer",
- "delete": "Supprimer",
- "move": "Déplacer",
- "refresh": "Actualiser",
- "back": "Retour",
- "next": "Suivant",
- "backToTop": "Retour en haut",
- "settings": "Paramètres",
- "help": "Aide",
- "add": "Ajouter",
- "close": "Fermer",
- "menu": "Menu",
- "remove": "Supprimer",
- "change": "Modifier"
- },
- "status": {
- "loading": "Chargement...",
- "cancelling": "Annulation...",
- "unknown": "Inconnu",
- "date": "Date",
- "version": "Version",
- "enabled": "Activé",
- "disabled": "Désactivé"
- },
- "language": {
- "select": "Langue",
- "select_help": "Choisissez votre langue préférée pour l'interface",
- "english": "English",
- "chinese_simplified": "中文(简体)",
- "chinese_traditional": "中文(繁体)",
- "russian": "Русский",
- "german": "Deutsch",
- "japanese": "日本語",
- "korean": "한국어",
- "french": "Français",
- "spanish": "Español",
- "Hebrew": "עברית"
- },
- "fileSize": {
- "zero": "0 Octets",
- "bytes": "Octets",
- "kb": "Ko",
- "mb": "Mo",
- "gb": "Go",
- "tb": "To"
- }
+ "common": {
+ "cancel": "Annuler",
+ "confirm": "Confirmer",
+ "actions": {
+ "save": "Enregistrer",
+ "cancel": "Annuler",
+ "confirm": "Confirmer",
+ "delete": "Supprimer",
+ "move": "Déplacer",
+ "refresh": "Actualiser",
+ "back": "Retour",
+ "next": "Suivant",
+ "backToTop": "Retour en haut",
+ "settings": "Paramètres",
+ "help": "Aide",
+ "add": "Ajouter",
+ "close": "Fermer",
+ "menu": "Menu",
+ "remove": "Supprimer",
+ "change": "Modifier"
},
- "onboarding": {
- "languageSelection": {
- "title": "Bienvenue dans LoRA Manager",
- "continue": "Continuer",
- "changeFailed": "Échec du changement de langue : {message}"
- },
- "tutorial": {
- "skipTutorial": "Passer le tutoriel",
- "back": "Retour",
- "next": "Suivant",
- "finish": "Terminer"
- },
- "steps": {
- "fetch": {
- "title": "Récupérer les métadonnées des modèles",
- "content": "Cliquez sur le bouton Récupérer pour télécharger les métadonnées et les images d'aperçu des modèles depuis Civitai."
- },
- "download": {
- "title": "Télécharger de nouveaux modèles",
- "content": "Utilisez le bouton Télécharger pour télécharger des modèles directement à partir des URLs Civitai."
- },
- "bulk": {
- "title": "Opérations groupées",
- "content": "Activez le mode groupé en cliquant sur ce bouton ou en appuyant sur B. Sélectionnez plusieurs modèles et effectuez des opérations par lot. Utilisez Ctrl+A pour sélectionner tous les modèles visibles."
- },
- "searchOptions": {
- "title": "Options de recherche",
- "content": "Cliquez sur ce bouton pour configurer les champs à rechercher : nom de fichier, nom du modèle, tags ou nom du créateur. Personnalisez la portée de votre recherche."
- },
- "filter": {
- "title": "Filtrer les modèles",
- "content": "Utilisez les filtres pour affiner les modèles par type de modèle de base (SD1.5, SDXL, Flux, etc.) ou par tags spécifiques."
- },
- "breadcrumb": {
- "title": "Navigation par fil d'Ariane",
- "content": "La navigation par fil d'Ariane affiche votre chemin actuel et permet une navigation rapide entre les dossiers. Cliquez sur le nom d'un dossier pour y accéder directement."
- },
- "modelCards": {
- "title": "Cartes de modèles",
- "content": "Cliquez une fois sur une carte de modèle pour afficher les informations détaillées et modifier les métadonnées. Cherchez l'icône crayon lors du survol des champs modifiables."
- },
- "contextMenu": {
- "title": "Menu contextuel",
- "content": "Clic droit sur une carte de modèle pour accéder à un menu contextuel avec des actions supplémentaires."
- }
- }
+ "status": {
+ "loading": "Chargement...",
+ "cancelling": "Annulation...",
+ "unknown": "Inconnu",
+ "date": "Date",
+ "version": "Version",
+ "enabled": "Activé",
+ "disabled": "Désactivé"
},
- "modelCard": {
- "actions": {
- "addToFavorites": "Ajouter aux favoris",
- "removeFromFavorites": "Retirer des favoris",
- "viewOnCivitai": "Voir sur Civitai",
- "notAvailableFromCivitai": "Non disponible sur Civitai",
- "sendToWorkflow": "Envoyer vers ComfyUI (Clic: Ajouter, Maj+Clic: Remplacer)",
- "copyLoRASyntax": "Copier la syntaxe LoRA",
- "checkpointNameCopied": "Nom du checkpoint copié",
- "toggleBlur": "Basculer le flou",
- "show": "Afficher",
- "openExampleImages": "Ouvrir le dossier d'images d'exemple",
- "replacePreview": "Remplacer l'aperçu",
- "copyCheckpointName": "Copier le nom du checkpoint",
- "copyEmbeddingName": "Copier le nom de l'embedding",
- "embeddingNameCopied": "Syntaxe dembedding copiée",
- "sendCheckpointToWorkflow": "Envoyer vers ComfyUI",
- "sendEmbeddingToWorkflow": "Envoyer vers ComfyUI"
- },
- "nsfw": {
- "matureContent": "Contenu pour adultes",
- "xxxRated": "Contenu classé XXX",
- "xRated": "Contenu classé X",
- "rRated": "Contenu classé R"
- },
- "favorites": {
- "added": "Ajouté aux favoris",
- "removed": "Retiré des favoris",
- "updateFailed": "Échec de la mise à jour du statut des favoris"
- },
- "sendToWorkflow": {
- "checkpointNotImplemented": "Envoyer le checkpoint vers le workflow - fonctionnalité à implémenter",
- "missingPath": "Impossible de déterminer le chemin du modèle pour cette carte"
- },
- "exampleImages": {
- "checkError": "Erreur lors de la vérification des images d'exemple",
- "missingHash": "Informations de hachage du modèle manquantes.",
- "noRemoteImagesAvailable": "Aucune image d'exemple distante disponible pour ce modèle sur Civitai"
- },
- "badges": {
- "update": "Mise à jour",
- "updateAvailable": "Mise à jour disponible",
- "skipRefresh": "Actualisation des métadonnées ignorée"
- },
- "usage": {
- "timesUsed": "Nombre d'utilisations"
- },
- "footer": {
- "versionCount": "{count} versions",
- "viewAllVersions": "Voir toutes les versions locales"
- }
+ "language": {
+ "select": "Langue",
+ "select_help": "Choisissez votre langue préférée pour l'interface",
+ "english": "English",
+ "chinese_simplified": "中文(简体)",
+ "chinese_traditional": "中文(繁体)",
+ "russian": "Русский",
+ "german": "Deutsch",
+ "japanese": "日本語",
+ "korean": "한국어",
+ "french": "Français",
+ "spanish": "Español",
+ "Hebrew": "עברית"
},
- "globalContextMenu": {
- "downloadExampleImages": {
- "label": "Télécharger les images d'exemple",
- "missingPath": "Définissez un emplacement de téléchargement avant de télécharger les images d'exemple.",
- "unavailable": "Le téléchargement des images d'exemple n'est pas encore disponible. Réessayez après le chargement complet de la page."
- },
- "checkModelUpdates": {
- "label": "Vérifier les mises à jour",
- "loading": "Recherche de mises à jour pour {type}...",
- "success": "{count} mise(s) à jour trouvée(s) pour {type}",
- "none": "Tous les {type} sont à jour",
- "error": "Échec de la vérification des mises à jour pour {type} : {message}"
- },
- "cleanupExampleImages": {
- "label": "Supprimer les dossiers d'exemples orphelins",
- "success": "{count} dossier(s) déplacé(s) vers le dossier supprimé",
- "none": "Aucun dossier d'images d'exemple à nettoyer",
- "partial": "Nettoyage terminé avec {failures} dossier(s) ignoré(s)",
- "error": "Échec du nettoyage des dossiers d'images d'exemple : {message}"
- },
- "fetchMissingLicenses": {
- "label": "Refresh license metadata",
- "loading": "Refreshing license metadata for {typePlural}...",
- "success": "Updated license metadata for {count} {typePlural}",
- "none": "All {typePlural} already have license metadata",
- "error": "Failed to refresh license metadata for {typePlural}: {message}"
- },
- "repairRecipes": {
- "label": "Réparer les données de recettes",
- "loading": "Réparation des données de recettes...",
- "success": "{count} recettes réparées avec succès.",
- "cancelled": "Réparation annulée. {count} recettes ont été réparées.",
- "error": "Échec de la réparation des recettes : {message}"
- },
- "manageExcludedModels": {
- "label": "Gérer les modèles exclus"
- },
- "groupByModel": {
- "label": "Grouper par modèle"
- }
+ "fileSize": {
+ "zero": "0 Octets",
+ "bytes": "Octets",
+ "kb": "Ko",
+ "mb": "Mo",
+ "gb": "Go",
+ "tb": "To"
+ }
+ },
+ "onboarding": {
+ "languageSelection": {
+ "title": "Bienvenue dans LoRA Manager",
+ "continue": "Continuer",
+ "changeFailed": "Échec du changement de langue : {message}"
},
- "header": {
- "appTitle": "LoRA Manager",
- "navigation": {
- "loras": "LoRAs",
- "recipes": "Recipes",
- "checkpoints": "Checkpoints",
- "embeddings": "Embeddings",
- "statistics": "Statistiques"
- },
- "search": {
- "placeholder": "Rechercher",
- "options": "Options de recherche",
- "searchIn": "Rechercher dans :",
- "notAvailable": "Recherche non disponible sur la page de statistiques",
- "filters": {
- "filename": "Nom de fichier",
- "modelname": "Nom du modèle",
- "tags": "Tags",
- "creator": "Créateur",
- "title": "Titre de la recipe",
- "loraName": "Nom de fichier LoRA",
- "loraModel": "Nom du modèle LoRA",
- "prompt": "Prompt"
- }
- },
- "filter": {
- "title": "Filtrer les modèles",
- "presets": "Préréglages",
- "savePreset": "Enregistrer les filtres actifs comme nouveau préréglage.",
- "savePresetDisabledActive": "Impossible d'enregistrer : Un préréglage est déjà actif. Modifiez les filtres pour enregistrer un nouveau préréglage",
- "savePresetDisabledNoFilters": "Sélectionnez d'abord des filtres à enregistrer comme préréglage",
- "savePresetPrompt": "Entrez le nom du préréglage :",
- "presetClickTooltip": "Cliquer pour appliquer le préréglage \"{name}\"",
- "presetDeleteTooltip": "Supprimer le préréglage",
- "presetDeleteConfirm": "Supprimer le préréglage \"{name}\" ?",
- "presetDeleteConfirmClick": "Cliquez à nouveau pour confirmer",
- "presetOverwriteConfirm": "Le préréglage \"{name}\" existe déjà. Remplacer?",
- "presetNamePlaceholder": "Nom du préréglage...",
- "baseModel": "Modèle de base",
- "baseModelSearchPlaceholder": "Rechercher des modèles de base...",
- "modelTags": "Tags (Top 20)",
- "modelTypes": "Types de modèles",
- "license": "Licence",
- "noCreditRequired": "Crédit non requis",
- "allowSellingGeneratedContent": "Vente autorisée",
- "allowSellingGeneratedContentTooltip": "Autoriser la vente d\"images générées",
- "noCreditRequiredTooltip": "Utiliser le modèle sans créditer le créateur",
- "noTags": "Aucun tag",
- "autoTags": "Auto-Tags",
- "noBaseModelMatches": "Aucun modèle de base ne correspond à la recherche actuelle.",
- "clearAll": "Effacer tous les filtres",
- "any": "N'importe quel",
- "all": "Tous",
- "tagLogicAny": "Correspondre à n'importe quel tag (OU)",
- "tagLogicAll": "Correspondre à tous les tags (ET)"
- },
- "theme": {
- "toggle": "Basculer le thème",
- "switchToLight": "Passer au thème clair",
- "switchToDark": "Passer au thème sombre",
- "switchToAuto": "Passer au thème automatique",
- "presets": "Préréglages de thème",
- "default": "Par défaut",
- "nord": "Nord",
- "midnight": "Midnight",
- "monokai": "Monokai",
- "dracula": "Dracula",
- "solarized": "Solarized",
- "mode": "Mode",
- "light": "Clair",
- "dark": "Sombre",
- "auto": "Auto"
- },
- "actions": {
- "checkUpdates": "Vérifier les mises à jour",
- "notifications": "Notifications",
- "support": "Support"
- }
+ "tutorial": {
+ "skipTutorial": "Passer le tutoriel",
+ "back": "Retour",
+ "next": "Suivant",
+ "finish": "Terminer"
},
- "settings": {
- "civitaiApiKey": "Clé API Civitai",
- "civitaiApiKeyPlaceholder": "Entrez votre clé API Civitai",
- "civitaiApiKeyHelp": "Utilisée pour l'authentification lors du téléchargement de modèles depuis Civitai",
- "civitaiApiKeyConfigured": "Configuré",
- "civitaiApiKeyNotConfigured": "Non configuré",
- "civitaiApiKeySet": "Configurer",
- "civitaiHost": {
- "label": "Hôte Civitai",
- "help": "Choisissez quel site Civitai s'ouvre lorsque vous utilisez les liens « View on Civitai ».",
- "options": {
- "com": "civitai.com (SFW uniquement)",
- "red": "civitai.red (sans restriction)"
- }
- },
- "downloadBackend": {
- "label": "Moteur de téléchargement",
- "help": "Choisissez comment les fichiers de modèles sont téléchargés. Python utilise le téléchargeur intégré. aria2 utilise le processus externe recommandé de téléchargement.",
- "options": {
- "python": "Python (intégré)",
- "aria2": "aria2 (recommandé)"
- }
- },
- "aria2cPath": {
- "label": "Chemin vers aria2c",
- "help": "Chemin facultatif vers l’exécutable aria2c. Laissez vide pour utiliser aria2c depuis le PATH système.",
- "placeholder": "Laisser vide pour utiliser aria2c depuis le PATH"
- },
- "aria2HelpLink": "Apprenez à configurer le backend de téléchargement aria2",
- "civitaiHostBanner": {
- "title": "Préférence d’hôte Civitai disponible",
- "content": "Civitai utilise désormais civitai.com pour le contenu SFW et civitai.red pour le contenu sans restriction. Vous pouvez modifier dans les paramètres le site ouvert par défaut.",
- "openSettings": "Ouvrir les paramètres"
- },
- "openSettingsFileLocation": {
- "label": "Ouvrir le dossier des paramètres",
- "tooltip": "Ouvrir le dossier contenant settings.json",
- "success": "Dossier settings.json ouvert",
- "failed": "Impossible d'ouvrir le dossier settings.json",
- "copied": "Chemin des paramètres copié dans le presse-papiers: {{path}}",
- "clipboardFallback": "Chemin des paramètres: {{path}}"
- },
- "sections": {
- "contentFiltering": "Filtrage du contenu",
- "downloads": "Téléchargements",
- "videoSettings": "Paramètres vidéo",
- "layoutSettings": "Paramètres d'affichage",
- "licenseIcons": "Icônes de licence",
- "misc": "Divers",
- "backup": "Sauvegardes",
- "folderSettings": "Racines par défaut",
- "recipeSettings": "Recipes",
- "extraFolderPaths": "Chemins de dossiers supplémentaires",
- "downloadPathTemplates": "Modèles de chemin de téléchargement",
- "priorityTags": "Étiquettes prioritaires",
- "versionScope": "Indicateurs de mise à jour",
- "exampleImages": "Images d'exemple",
- "autoOrganize": "Organisation automatique",
- "metadata": "Métadonnées",
- "proxySettings": "Paramètres du proxy"
- },
- "nav": {
- "general": "Général",
- "interface": "Interface",
- "library": "Bibliothèque"
- },
- "search": {
- "placeholder": "Rechercher dans les paramètres...",
- "clear": "Effacer la recherche",
- "noResults": "Aucun paramètre trouvé correspondant à \"{query}\""
- },
- "storage": {
- "locationLabel": "Mode portable",
- "locationHelp": "Activez pour garder settings.json dans le dépôt ; désactivez pour le placer dans votre dossier de configuration utilisateur."
- },
- "contentFiltering": {
- "blurNsfwContent": "Flouter le contenu NSFW",
- "blurNsfwContentHelp": "Flouter les images d'aperçu de contenu pour adultes (NSFW)",
- "showOnlySfw": "Afficher uniquement les résultats SFW",
- "showOnlySfwHelp": "Filtrer tout le contenu NSFW lors de la navigation et de la recherche",
- "matureBlurThreshold": "Seuil de floutage pour contenu adulte",
- "matureBlurThresholdHelp": "Définir à partir de quel niveau de classification le floutage s'applique lorsque le floutage NSFW est activé.",
- "matureBlurThresholdOptions": {
- "pg13": "PG13 et plus",
- "r": "R et plus (par défaut)",
- "x": "X et plus",
- "xxx": "XXX uniquement"
- }
- },
- "videoSettings": {
- "autoplayOnHover": "Lecture automatique vidéo au survol",
- "autoplayOnHoverHelp": "Lire les aperçus vidéo uniquement lors du survol"
- },
- "autoOrganizeExclusions": {
- "label": "Exclusions de l'auto-organisation",
- "placeholder": "Exemple : curated/*, */backups/*; *_temp.safetensors",
- "help": "Ignorer les fichiers correspondant à ces motifs génériques. Séparez plusieurs motifs par des virgules ou des points-virgules.",
- "validation": {
- "noPatterns": "Entrez au moins un motif séparé par des virgules ou des points-virgules.",
- "saveFailed": "Impossible d'enregistrer les exclusions : {message}"
- }
- },
- "metadataRefreshSkipPaths": {
- "label": "Chemins à ignorer pour l'actualisation des métadonnées",
- "placeholder": "Exemple : temp, archived/old, test_models",
- "help": "Ignorer les modèles dans ces chemins de répertoires lors de l'actualisation groupée des métadonnées (\"Récupérer toutes les métadonnées\"). Entrez les chemins de dossiers relatifs au répertoire racine des modèles, séparés par des virgules.",
- "validation": {
- "noPaths": "Entrez au moins un chemin séparé par des virgules.",
- "saveFailed": "Impossible d'enregistrer les chemins à ignorer : {message}"
- }
- },
- "backup": {
- "autoEnabled": "Sauvegardes automatiques",
- "autoEnabledHelp": "Crée un instantané local une fois par jour et conserve les plus récents selon la politique de rétention.",
- "retention": "Nombre de rétention",
- "retentionHelp": "Combien d'instantanés automatiques conserver avant de supprimer les plus anciens.",
- "management": "Gestion des sauvegardes",
- "managementHelp": "Exporte l'état actuel de l'utilisateur ou restaure-le depuis une archive de sauvegarde.",
- "scopeHelp": "Inclut vos paramètres, l'historique des téléchargements et l'état des mises à jour des modèles. Les fichiers de modèle et les caches régénérables ne sont pas inclus.",
- "locationSummary": "Emplacement actuel des sauvegardes",
- "openFolderButton": "Ouvrir le dossier de sauvegarde",
- "openFolderSuccess": "Dossier de sauvegarde ouvert",
- "openFolderFailed": "Impossible d'ouvrir le dossier de sauvegarde",
- "locationCopied": "Chemin de sauvegarde copié dans le presse-papiers : {{path}}",
- "locationClipboardFallback": "Chemin de sauvegarde : {{path}}",
- "exportButton": "Exporter la sauvegarde",
- "exportSuccess": "Sauvegarde exportée avec succès.",
- "exportFailed": "Échec de l'export de la sauvegarde : {message}",
- "importButton": "Importer la sauvegarde",
- "importConfirm": "Importer cette sauvegarde et écraser l'état local de l'utilisateur ?",
- "importSuccess": "Sauvegarde importée avec succès.",
- "importFailed": "Échec de l'import de la sauvegarde : {message}",
- "latestSnapshot": "Dernier instantané",
- "latestAutoSnapshot": "Dernier instantané automatique",
- "snapshotCount": "Instantanés enregistrés",
- "noneAvailable": "Aucun instantané pour le moment"
- },
- "downloadSkipBaseModels": {
- "label": "Ignorer les téléchargements pour certains modèles de base",
- "help": "S’applique à tous les flux de téléchargement. Seuls les modèles de base pris en charge peuvent être sélectionnés ici.",
- "searchPlaceholder": "Filtrer les modèles de base...",
- "empty": "Aucun modèle de base ne correspond à la recherche actuelle.",
- "summary": {
- "none": "Aucune sélection",
- "count": "{count} sélectionnés"
- },
- "actions": {
- "edit": "Modifier",
- "collapse": "Réduire",
- "clear": "Effacer"
- },
- "validation": {
- "saveFailed": "Impossible d’enregistrer les modèles de base exclus : {message}"
- }
- },
- "skipPreviouslyDownloadedModelVersions": {
- "label": "Ignorer les versions de modèles précédemment téléchargées",
- "help": "Lorsque activé, LoRA Manager ignorera le téléchargement d'une version de modèle si le service d'historique des téléchargements enregistre cette version exacte comme déjà téléchargée. S'applique à tous les flux de téléchargement."
- },
- "layoutSettings": {
- "groupByModel": "Grouper par modèle",
- "groupByModelHelp": "Lorsque activé, seule la version la plus récente de chaque modèle Civitai s'affiche sous forme de carte unique. Les versions plus anciennes sont masquées.",
- "displayDensity": "Densité d'affichage",
- "displayDensityOptions": {
- "default": "Par défaut",
- "medium": "Moyen",
- "compact": "Compact"
- },
- "displayDensityHelp": "Choisissez combien de cartes afficher par ligne :",
- "displayDensityDetails": {
- "default": "5 (1080p), 6 (2K), 8 (4K)",
- "medium": "6 (1080p), 7 (2K), 9 (4K)",
- "compact": "7 (1080p), 8 (2K), 10 (4K)"
- },
- "displayDensityWarning": "Attention : Des densités plus élevées peuvent causer des problèmes de performance sur les systèmes avec des ressources limitées.",
- "showFolderSidebar": "Afficher la barre latérale des dossiers",
- "showFolderSidebarHelp": "Activez ou désactivez la barre latérale de navigation des dossiers sur les pages de modèles. Lorsqu'elle est désactivée, la barre latérale et la zone de survol restent masquées.",
- "cardInfoDisplay": "Affichage des informations de carte",
- "cardInfoDisplayOptions": {
- "always": "Toujours visible",
- "hover": "Révéler au survol"
- },
- "cardInfoDisplayHelp": "Choisissez quand afficher les informations du modèle et les boutons d'action",
- "showVersionOnCard": "Afficher la version sur la carte",
- "showVersionOnCardHelp": "Afficher ou masquer le nom de version sur les cartes de modèle",
- "modelCardFooterAction": "Action du bouton de carte de modèle",
- "modelCardFooterActionOptions": {
- "exampleImages": "Ouvrir les images d'exemple",
- "replacePreview": "Remplacer l'aperçu"
- },
- "modelCardFooterActionHelp": "Choisissez ce que fait le bouton en bas à droite de la carte",
- "modelNameDisplay": "Affichage du nom du modèle",
- "modelNameDisplayOptions": {
- "modelName": "Nom du modèle",
- "fileName": "Nom du fichier"
- },
- "modelNameDisplayHelp": "Choisissez ce qui doit être affiché dans le pied de page de la carte du modèle",
- "cardBlurAmount": "Flou de superposition des cartes",
- "cardBlurAmountHelp": "Ajustez l'intensité du flou des superpositions d'en-tête et de pied de page sur les cartes de modèles et de recettes (0 = aucun flou, 20 = flou maximal)."
- },
- "folderSettings": {
- "activeLibrary": "Bibliothèque active",
- "activeLibraryHelp": "Basculer entre les bibliothèques configurées pour mettre à jour les dossiers par défaut. Changer la sélection recharge la page.",
- "loadingLibraries": "Chargement des bibliothèques...",
- "noLibraries": "Aucune bibliothèque configurée",
- "defaultLoraRoot": "Racine LoRA",
- "defaultLoraRootHelp": "Définir le répertoire racine LoRA par défaut pour les téléchargements, imports et déplacements",
- "defaultCheckpointRoot": "Racine Checkpoint",
- "defaultCheckpointRootHelp": "Définir le répertoire racine checkpoint par défaut pour les téléchargements, imports et déplacements",
- "defaultUnetRoot": "Racine Diffusion Model",
- "defaultUnetRootHelp": "Définir le répertoire racine Diffusion Model (UNET) par défaut pour les téléchargements, imports et déplacements",
- "defaultEmbeddingRoot": "Racine Embedding",
- "defaultEmbeddingRootHelp": "Définir le répertoire racine embedding par défaut pour les téléchargements, imports et déplacements",
- "recipesPath": "Recipes Storage Path",
- "recipesPathHelp": "Optional custom directory for stored recipes. Leave empty to use the first LoRA root's recipes folder.",
- "recipesPathPlaceholder": "/path/to/recipes",
- "recipesPathMigrating": "Migrating recipes storage...",
- "noDefault": "Aucun par défaut"
- },
- "extraFolderPaths": {
- "title": "Chemins de dossiers supplémentaires",
- "description": "Chemins racine de modèles supplémentaires exclusifs à LoRA Manager. Chargez des modèles depuis des emplacements en dehors des dossiers standard de ComfyUI, idéal pour les grandes bibliothèques qui ralentiraient autrement ComfyUI.",
- "restartRequired": "Requires restart to take effect",
- "modelTypes": {
- "lora": "Chemins LoRA",
- "checkpoint": "Chemins Checkpoint",
- "unet": "Chemins de modèle de diffusion",
- "embedding": "Chemins Embedding"
- },
- "pathPlaceholder": "/chemin/vers/modèles/supplémentaires",
- "saveSuccess": "Chemins de dossiers supplémentaires mis à jour. Redémarrage requis pour appliquer les changements.",
- "saveError": "Échec de la mise à jour des chemins de dossiers supplémentaires: {message}",
- "validation": {
- "duplicatePath": "Ce chemin est déjà configuré"
- }
- },
- "priorityTags": {
- "title": "Étiquettes prioritaires",
- "description": "Personnalisez l'ordre de priorité des étiquettes pour chaque type de modèle (par ex. : character, concept, style(toon|toon_style))",
- "placeholder": "character, concept, style(toon|toon_style)",
- "helpLinkLabel": "Ouvrir l'aide sur les étiquettes prioritaires",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "saveSuccess": "Étiquettes prioritaires mises à jour.",
- "saveError": "Échec de la mise à jour des étiquettes prioritaires.",
- "loadingSuggestions": "Chargement des suggestions...",
- "validation": {
- "missingClosingParen": "L'entrée {index} n'a pas de parenthèse fermante.",
- "missingCanonical": "L'entrée {index} doit inclure un nom d'étiquette canonique.",
- "duplicateCanonical": "L'étiquette canonique \"{tag}\" apparaît plusieurs fois.",
- "unknown": "Configuration d'étiquettes prioritaires invalide."
- }
- },
- "downloadPathTemplates": {
- "title": "Modèles de chemin de téléchargement",
- "help": "Configurer les structures de dossiers pour différents types de modèles lors du téléchargement depuis Civitai.",
- "availablePlaceholders": "Espaces réservés disponibles :",
- "templateOptions": {
- "flatStructure": "Structure plate",
- "byBaseModel": "Par modèle de base",
- "byAuthor": "Par auteur",
- "byFirstTag": "Par premier tag",
- "baseModelFirstTag": "Modèle de base + Premier tag",
- "baseModelAuthor": "Modèle de base + Auteur",
- "authorFirstTag": "Auteur + Premier tag",
- "baseModelAuthorFirstTag": "Modèle de base + Auteur + Premier tag",
- "customTemplate": "Modèle personnalisé"
- },
- "customTemplatePlaceholder": "Entrez un modèle personnalisé (ex: {base_model}/{author}/{first_tag})",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "baseModelPathMappings": "Mappages de chemin de modèle de base",
- "baseModelPathMappingsHelp": "Personnaliser les noms de dossiers pour des modèles de base spécifiques (ex: \"Flux.1 D\" → \"flux\")",
- "addMapping": "Ajouter un mappage",
- "selectBaseModel": "Sélectionner un modèle de base",
- "customPathPlaceholder": "Chemin personnalisé (ex: flux)",
- "removeMapping": "Supprimer le mappage",
- "validation": {
- "validFlat": "Valide (structure plate)",
- "invalidChars": "Caractères invalides détectés",
- "doubleSlashes": "Double barres obliques non autorisées",
- "leadingTrailingSlash": "Ne peut pas commencer ou finir par une barre oblique",
- "invalidPlaceholder": "Espace réservé invalide : {placeholder}",
- "validTemplate": "Modèle valide"
- }
- },
- "exampleImages": {
- "downloadLocation": "Emplacement de téléchargement",
- "downloadLocationPlaceholder": "Entrez le chemin du dossier pour les images d'exemple",
- "downloadLocationHelp": "Entrez le chemin du dossier où les images d'exemple de Civitai seront sauvegardées",
- "autoDownload": "Téléchargement automatique des images d'exemple",
- "autoDownloadHelp": "Télécharger automatiquement les images d'exemple pour les modèles qui n'en ont pas (nécessite que l'emplacement de téléchargement soit défini)",
- "openMode": "Action d’ouverture des images d’exemple",
- "openModeHelp": "Choisissez si l’action s’ouvre sur le serveur, copie un chemin local mappé ou lance une URI personnalisée.",
- "openModeOptions": {
- "system": "Ouvrir sur le serveur",
- "clipboard": "Copier le chemin local",
- "uriTemplate": "Ouvrir une URI personnalisée"
- },
- "localRoot": "Racine locale des images d’exemple",
- "localRootHelp": "Racine locale ou montée facultative qui reflète le répertoire des images d’exemple du serveur. Si vide, le chemin du serveur est réutilisé.",
- "localRootPlaceholder": "Exemple : /Volumes/ComfyUI/example_images",
- "uriTemplate": "Ouvrir le modèle d’URI",
- "uriTemplateHelp": "Utilisez un lien profond personnalisé, tel qu’une URI de fichier ou un lien Shortcuts.",
- "uriTemplatePlaceholder": "Exemple : shortcuts://run-shortcut?name=Open%20Finder&input=text&text={{encoded_local_path}}",
- "uriTemplatePlaceholders": "Paramètres disponibles : {{local_path}}, {{encoded_local_path}}, {{relative_path}}, {{encoded_relative_path}}, {{file_uri}}, {{encoded_file_uri}}",
- "openModeWikiLink": "En savoir plus sur les modes d'ouverture à distance",
- "optimizeImages": "Optimiser les images téléchargées",
- "optimizeImagesHelp": "Optimiser les images d'exemple pour réduire la taille du fichier et améliorer la vitesse de chargement (les métadonnées seront préservées)",
- "download": "Télécharger",
- "restartRequired": "Redémarrage requis"
- },
- "versionGrouping": {
- "label": "Stratégie des indicateurs de mise à jour",
- "help": "Choisissez si les badges de mise à jour doivent apparaître uniquement lorsqu’une nouvelle version partage le même modèle de base que vos fichiers locaux, ou dès qu’il existe une version plus récente pour ce modèle.",
- "options": {
- "sameBase": "Faire correspondre les mises à jour par modèle de base",
- "any": "Signaler n’importe quelle mise à jour disponible"
- }
- },
- "hideEarlyAccessUpdates": {
- "label": "Masquer les mises à jour en accès anticipé",
- "help": "Seulement les mises à jour en accès anticipé"
- },
- "licenseIcons": {
- "useNewStyle": "Utiliser les icônes de licence mises à jour",
- "useNewStyleHelp": "Afficher les permissions de licence avec des indicateurs colorés (nouveau style) ou des icônes de restriction uniquement (style classique). Reprend le design actuel de CivitAI."
- },
- "misc": {
- "includeTriggerWords": "Inclure les mots-clés dans la syntaxe LoRA",
- "includeTriggerWordsHelp": "Inclure les mots-clés d'entraînement lors de la copie de la syntaxe LoRA dans le presse-papiers",
- "loraSyntaxFormat": "Format de syntaxe LoRA",
- "loraSyntaxFormatHelp": "Format de syntaxe LoRA. Le format complet inclut le chemin du sous-dossier (filename_v1.2 → filename_v1.2-ab3c",
- "impact": "Renommera {count} fichier(s) dans {groups} groupe(s) de doublons",
- "confirm": "Renommer les fichiers",
- "cancel": "Annuler"
+ "metadataFetchSummary": {
+ "title": "Récapitulatif de la récupération des métadonnées",
+ "statSuccess": "Réussi",
+ "statFailed": "Échoué",
+ "statSkipped": "Ignoré",
+ "statTotal": "Total scanné",
+ "statDuration": "Durée",
+ "successMessage": "Tous les {count} {type}s mis à jour avec succès !",
+ "failedItems": "Éléments échoués ({count})",
+ "close": "Fermer",
+ "copyReport": "Copier le rapport",
+ "downloadCsv": "Télécharger CSV",
+ "columnModelName": "Nom du modèle",
+ "columnError": "Erreur"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "Tags mis à jour avec succès",
+ "updateFailed": "Échec de la mise à jour des tags"
+ },
+ "validation": {
+ "maxLength": "Le tag ne doit pas dépasser 30 caractères",
+ "maxCount": "Maximum 30 tags autorisés",
+ "duplicate": "Ce tag existe déjà"
+ }
+ },
+ "initialization": {
+ "title": "Initialisation",
+ "message": "Préparation de votre espace de travail...",
+ "status": "Initialisation...",
+ "estimatingTime": "Estimation du temps...",
+ "loras": {
+ "title": "Initialisation du gestionnaire LoRA",
+ "message": "Scan et construction du cache LoRA. Cela peut prendre quelques minutes..."
+ },
+ "checkpoints": {
+ "title": "Initialisation du gestionnaire Checkpoint",
+ "message": "Scan et construction du cache checkpoint. Cela peut prendre quelques minutes..."
+ },
+ "embeddings": {
+ "title": "Initialisation du gestionnaire Embedding",
+ "message": "Scan et construction du cache embedding. Cela peut prendre quelques minutes..."
+ },
+ "recipes": {
+ "title": "Initialisation du gestionnaire de recipes",
+ "message": "Chargement et traitement des recipes. Cela peut prendre quelques minutes..."
+ },
+ "statistics": {
+ "title": "Initialisation des statistiques",
+ "message": "Traitement des données de modèle pour les statistiques. Cela peut prendre quelques minutes..."
+ },
+ "tips": {
+ "title": "Astuces et conseils",
+ "civitai": {
+ "title": "Intégration Civitai",
+ "description": "Connectez votre compte Civitai : Visitez Avatar de profil → Paramètres → Clés API → Ajouter une clé API, puis collez-la dans les paramètres du gestionnaire LoRA.",
+ "alt": "Configuration API Civitai"
+ },
+ "download": {
+ "title": "Téléchargement facile",
+ "description": "Utilisez les URLs Civitai pour télécharger et installer rapidement de nouveaux modèles.",
+ "alt": "Téléchargement Civitai"
+ },
+ "recipes": {
+ "title": "Sauvegarder les recipes",
+ "description": "Créez des recipes pour sauvegarder vos combinaisons de modèles préférées pour une utilisation future.",
+ "alt": "Recipes"
+ },
+ "filter": {
+ "title": "Filtrage rapide",
+ "description": "Filtrez les modèles par tags ou type de modèle de base en utilisant le bouton filtre dans l'en-tête.",
+ "alt": "Filtrer les modèles"
+ },
+ "search": {
+ "title": "Recherche rapide",
+ "description": "Appuyez sur Ctrl+F (Cmd+F sur Mac) pour rechercher rapidement dans votre vue actuelle.",
+ "alt": "Recherche rapide"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "Trouvé {count} groupes de doublons",
+ "showNotification": "Afficher la notification de doublons",
+ "deleteSelected": "Supprimer la sélection",
+ "exitMode": "Quitter le mode",
+ "help": {
+ "identicalHashes": "Des hash identiques signifient des fichiers de modèle identiques, même s'ils ont des noms ou aperçus différents.",
+ "keepOne": "Gardez seulement une version (de préférence avec de meilleures métadonnées/aperçus) et supprimez les autres en toute sécurité."
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "Copié dans le presse-papiers",
+ "copyFailed": "Échec de la copie"
+ },
+ "lora": {
+ "syntaxCopied": "Syntaxe LoRA copiée dans le presse-papiers",
+ "syntaxCopiedNoTriggerWords": "Syntaxe LoRA copiée dans le presse-papiers (aucun mot-clé trouvé)",
+ "syntaxCopiedWithTriggerWords": "Syntaxe LoRA avec mots-clés copiée dans le presse-papiers",
+ "syntaxCopiedWithTriggerWordGroups": "Syntaxe LoRA avec groupes de mots-clés copiée dans le presse-papiers"
+ },
+ "workflow": {
+ "noSupportedNodes": "Aucun nœud cible supporté trouvé dans le workflow",
+ "communicationFailed": "Échec de la communication avec ComfyUI",
+ "loraAdded": "LoRA ajouté au workflow",
+ "loraReplaced": "LoRA remplacé dans le workflow",
+ "loraFailedToSend": "Échec de l'envoi du LoRA au workflow",
+ "recipeAdded": "Recipe ajoutée au workflow",
+ "recipeReplaced": "Recipe remplacée dans le workflow",
+ "recipeFailedToSend": "Échec de l'envoi de la recipe au workflow",
+ "noMatchingNodes": "Aucun nœud compatible disponible dans le workflow actuel",
+ "noTargetNodeSelected": "Aucun nœud cible sélectionné",
+ "modelUpdated": "Modèle mis à jour dans le workflow",
+ "modelFailed": "Échec de la mise à jour du nœud modèle",
+ "embeddingAdded": "Embedding ajouté au workflow",
+ "embeddingFailed": "Échec de l'ajout de l'embedding",
+ "promptSent": "Prompt envoyé au workflow",
+ "promptFailed": "Échec de l'envoi du prompt"
+ },
+ "nodeSelector": {
+ "recipe": "Recipe",
+ "lora": "LoRA",
+ "embedding": "Embedding",
+ "prompt": "Prompt",
+ "replace": "Remplacer",
+ "append": "Ajouter",
+ "selectTargetNode": "Sélectionner le nœud cible",
+ "sendToAll": "Envoyer à tous"
+ },
+ "exampleImages": {
+ "opened": "Dossier d'images d'exemple ouvert",
+ "openingFolder": "Ouverture du dossier d'images d'exemple",
+ "failedToOpen": "Échec de l'ouverture du dossier d'images d'exemple",
+ "copiedPath": "Chemin copié dans le presse-papiers : {{path}}",
+ "clipboardFallback": "Chemin : {{path}}",
+ "copiedUri": "Lien copié dans le presse-papiers : {{uri}}",
+ "uriClipboardFallback": "Lien : {{uri}}",
+ "setupRequired": "Stockage d'images d'exemple",
+ "setupDescription": "Pour ajouter des images d'exemple personnalisées, vous devez d'abord définir un emplacement de téléchargement.",
+ "setupUsage": "Ce chemin est utilisé pour les images d'exemple téléchargées et personnalisées.",
+ "openSettings": "Ouvrir les paramètres"
+ }
+ },
+ "help": {
+ "title": "Aide et tutoriels",
+ "tabs": {
+ "gettingStarted": "Commencer",
+ "updateVlogs": "Vlogs de mise à jour",
+ "documentation": "Documentation"
+ },
+ "gettingStarted": {
+ "title": "Premiers pas avec le Gestionnaire LoRA"
+ },
+ "updateVlogs": {
+ "title": "Dernières mises à jour",
+ "watchOnYouTube": "Regarder sur YouTube",
+ "playlistTitle": "Playlist des mises à jour du Gestionnaire LoRA",
+ "playlistDescription": "Regardez toutes les vidéos de mise à jour présentant les dernières fonctionnalités et améliorations."
+ },
+ "documentation": {
+ "title": "Documentation",
+ "general": "Général",
+ "troubleshooting": "Dépannage",
+ "modelManagement": "Gestion des modèles",
+ "recipes": "Recipes",
+ "settings": "Paramètres & Configuration",
+ "extensions": "Extensions",
+ "newBadge": "NOUVEAU"
+ }
+ },
+ "update": {
+ "title": "Vérifier les mises à jour",
+ "notificationsTitle": "Notifications",
+ "tabs": {
+ "updates": "Mises à jour",
+ "messages": "Messages"
+ },
+ "updateAvailable": "Mise à jour disponible",
+ "noChangelogAvailable": "Aucun journal des modifications détaillé disponible. Consultez GitHub pour plus d'informations.",
+ "currentVersion": "Version actuelle",
+ "newVersion": "Nouvelle version",
+ "commit": "Commit",
+ "viewOnGitHub": "Voir sur GitHub",
+ "updateNow": "Mettre à jour maintenant",
+ "preparingUpdate": "Préparation de la mise à jour...",
+ "changelog": "Journal des modifications",
+ "checkingUpdates": "Vérification des mises à jour...",
+ "checkingMessage": "Veuillez patienter pendant la vérification de la dernière version.",
+ "showNotifications": "Afficher les notifications de mise à jour",
+ "latestBadge": "Dernier",
+ "updateProgress": {
+ "preparing": "Préparation de la mise à jour...",
+ "installing": "Installation de la mise à jour...",
+ "completed": "Mise à jour terminée avec succès !",
+ "failed": "Échec de la mise à jour : {error}"
+ },
+ "status": {
+ "updating": "Mise à jour...",
+ "updated": "Mis à jour !",
+ "updateFailed": "Échec de la mise à jour"
+ },
+ "completion": {
+ "successMessage": "Mise à jour réussie vers {version} !",
+ "restartMessage": "Veuillez redémarrer ComfyUI ou le Gestionnaire LoRA pour appliquer la mise à jour.",
+ "reloadMessage": "Assurez-vous de recharger votre navigateur pour le Gestionnaire LoRA et ComfyUI."
+ },
+ "nightly": {
+ "warning": "Attention : Les versions nightly peuvent contenir des fonctionnalités expérimentales et être instables.",
+ "enable": "Activer les mises à jour nightly"
},
"banners": {
- "versionMismatch": {
- "title": "Mise à jour de l'application détectée",
- "content": "Votre navigateur utilise une version obsolète du Gestionnaire LoRA ({storedVersion}). Le serveur a été mis à jour vers la version {currentVersion}. Veuillez actualiser pour garantir le bon fonctionnement.",
- "refreshNow": "Actualiser maintenant",
- "refreshingIn": "Actualisation dans",
- "seconds": "secondes"
- },
- "communitySupport": {
- "title": "Keep LoRA Manager Thriving with Your Support ❤️",
- "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
- "supportCta": "Support on Ko-fi",
- "learnMore": "LM Civitai Extension Tutorial"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "Corruption du cache détectée"
- },
- "degraded": {
- "title": "Problèmes de cache détectés"
- },
- "content": "{invalid} des {total} entrées de cache sont invalides ({rate}). Cela peut provoquer des modèles manquants ou des erreurs. Il est recommandé de reconstruire le cache.",
- "rebuildCache": "Reconstruire le cache",
- "dismiss": "Ignorer",
- "rebuilding": "Reconstruction du cache...",
- "rebuildFailed": "Échec de la reconstruction du cache : {error}",
- "retry": "Réessayer"
- }
+ "recent": "Messages récents",
+ "empty": "Aucune bannière récente.",
+ "shown": "Affiché {time}",
+ "dismissed": "Ignoré {time}",
+ "active": "Actif"
}
+ },
+ "support": {
+ "title": "Soutenir le projet",
+ "message": "Si vous trouvez le Gestionnaire LoRA utile, votre soutien serait grandement apprécié ! 🙌",
+ "feedback": {
+ "title": "Donner votre avis",
+ "description": "Vos retours aident à façonner les futures mises à jour ! Partagez vos idées :"
+ },
+ "links": {
+ "submitGithubIssue": "Soumettre un problème sur GitHub",
+ "joinDiscord": "Rejoindre Discord",
+ "youtubeChannel": "Chaîne YouTube",
+ "civitaiProfile": "Profil Civitai",
+ "supportKofi": "Soutenir sur Ko-fi",
+ "supportPatreon": "Soutenir sur Patreon"
+ },
+ "sections": {
+ "followUpdates": "Suivre les mises à jour",
+ "buyMeCoffee": "Offrez-moi un café",
+ "coffeeDescription": "Si vous souhaitez soutenir mon travail directement :",
+ "becomePatron": "Devenir un mécène",
+ "patronDescription": "Soutenez le développement continu avec des contributions mensuelles :",
+ "wechatSupport": "Soutien WeChat",
+ "wechatDescription": "Pour les utilisateurs en Chine, vous pouvez soutenir via WeChat :",
+ "showWechatQR": "Afficher le QR Code WeChat",
+ "hideWechatQR": "Masquer le QR Code WeChat"
+ },
+ "footer": "Merci d'utiliser le Gestionnaire LoRA ! ❤️",
+ "supporters": {
+ "title": "Merci à tous les supporters",
+ "subtitle": "Merci aux {count} supporters qui ont rendu ce projet possible",
+ "specialThanks": "Remerciements spéciaux",
+ "allSupporters": "Tous les supporters",
+ "totalCount": "{count} supporters au total"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "Impossible d'interagir avec ComfyUI en mode autonome",
+ "failedWorkflowInfo": "Échec de l'obtention des informations du workflow",
+ "pageInitFailed": "Échec de l'initialisation de la page {pageType}. Veuillez recharger.",
+ "statisticsLoadFailed": "Échec du chargement des données statistiques"
+ },
+ "loras": {
+ "copyOnlyForLoras": "La copie de la syntaxe est disponible uniquement pour les LoRAs",
+ "noLorasSelected": "Aucun LoRA sélectionné",
+ "missingDataForLoras": "Données manquantes pour {count} LoRAs",
+ "noValidLorasToCopy": "Aucun LoRA valide à copier",
+ "sendOnlyForLoras": "L'envoi vers le workflow est disponible uniquement pour les LoRAs",
+ "noValidLorasToSend": "Aucun LoRA valide à envoyer",
+ "downloadSuccessful": "LoRAs téléchargés avec succès",
+ "allDownloadSuccessful": "Tous les {count} LoRAs ont été téléchargés avec succès",
+ "downloadPartialSuccess": "{completed} sur {total} LoRAs téléchargés",
+ "downloadPartialWithAccess": "{completed} sur {total} LoRAs téléchargés. {accessFailures} ont échoué en raison de restrictions d'accès. Vérifiez votre clé API dans les paramètres ou le statut d'accès anticipé.",
+ "pleaseSelectVersion": "Veuillez sélectionner une version",
+ "versionExists": "Cette version existe déjà dans votre bibliothèque",
+ "downloadCompleted": "Téléchargement terminé avec succès",
+ "downloadSkippedByBaseModel": "Téléchargement ignoré, car le modèle de base {baseModel} est exclu",
+ "autoOrganizeSuccess": "Auto-organisation terminée avec succès pour {count} {type}",
+ "autoOrganizePartialSuccess": "Auto-organisation terminée avec {success} déplacés, {failures} échecs sur {total} modèles",
+ "autoOrganizeFailed": "Échec de l'auto-organisation : {error}",
+ "noModelsSelected": "Aucun modèle sélectionné"
+ },
+ "recipes": {
+ "fetchFailed": "Échec de la récupération des recipes : {message}",
+ "reloadFailed": "Échec du rechargement des {modelType}s : {message}",
+ "loadFailed": "Échec du chargement des {modelType}s : {message}",
+ "refreshComplete": "Actualisation terminée",
+ "refreshFailed": "Échec de l'actualisation des recipes : {message}",
+ "syncComplete": "Synchronisation terminée",
+ "syncFailed": "Échec de la synchronisation des recipes : {message}",
+ "updateFailed": "Échec de la mise à jour de la recipe : {error}",
+ "updateError": "Erreur lors de la mise à jour de la recipe : {message}",
+ "nameSaved": "Recipe \"{name}\" sauvegardée avec succès",
+ "nameUpdated": "Nom de la recipe mis à jour avec succès",
+ "tagsUpdated": "Tags de la recipe mis à jour avec succès",
+ "sourceUrlUpdated": "URL source mise à jour avec succès",
+ "promptUpdated": "Prompt mis à jour avec succès",
+ "negativePromptUpdated": "Prompt négatif mis à jour avec succès",
+ "promptEditorHint": "Appuyez sur Entrée pour sauvegarder, Maj+Entrée pour nouvelle ligne",
+ "noRecipeId": "Aucun ID de recipe disponible",
+ "sendToWorkflowFailed": "Échec de l'envoi de la recette vers le workflow : {message}",
+ "copyFailed": "Erreur lors de la copie de la syntaxe de la recipe : {message}",
+ "createError": "Erreur lors de la création du Recipe :{message}",
+ "createFailed": "Échec de la création du Recipe :{error}",
+ "createMissingData": "Données requises manquantes pour créer le Recipe",
+ "created": "Recipe créé avec succès",
+ "noMissingLoras": "Aucun LoRA manquant à télécharger",
+ "missingLorasInfoFailed": "Échec de l'obtention des informations pour les LoRAs manquants",
+ "preparingForDownloadFailed": "Erreur lors de la préparation des LoRAs pour le téléchargement",
+ "enterLoraName": "Veuillez entrer un nom ou une syntaxe LoRA",
+ "reconnectedSuccessfully": "LoRA reconnecté avec succès",
+ "reconnectFailed": "Erreur lors de la reconnexion du LoRA : {message}",
+ "noPromptToSend": "Aucun prompt à envoyer",
+ "cannotSend": "Impossible d'envoyer la recipe : ID de recipe manquant",
+ "sendFailed": "Échec de l'envoi de la recipe vers le workflow",
+ "sendError": "Erreur lors de l'envoi de la recipe vers le workflow",
+ "missingCheckpointPath": "Chemin du checkpoint indisponible",
+ "missingCheckpointInfo": "Informations sur le checkpoint manquantes",
+ "downloadCheckpointFailed": "Échec du téléchargement du checkpoint : {message}",
+ "cannotDelete": "Impossible de supprimer la recipe : ID de recipe manquant",
+ "deleteConfirmationError": "Erreur lors de l'affichage de la confirmation de suppression",
+ "deletedSuccessfully": "Recipe supprimée avec succès",
+ "deleteFailed": "Erreur lors de la suppression de la recipe : {message}",
+ "cannotShare": "Impossible de partager la recipe : ID de recipe manquant",
+ "preparingForSharing": "Préparation de la recipe pour le partage...",
+ "downloadStarted": "Téléchargement de la recipe démarré",
+ "shareError": "Erreur lors du partage de la recipe : {message}",
+ "sharePreparationError": "Erreur lors de la préparation de la recipe pour le partage",
+ "selectImageFirst": "Veuillez d'abord sélectionner une image",
+ "enterRecipeName": "Veuillez entrer un nom de recipe",
+ "processingError": "Erreur de traitement : {message}",
+ "folderBrowserError": "Erreur lors du chargement du navigateur de dossiers : {message}",
+ "recipeSaveFailed": "Échec de la sauvegarde de la recipe : {error}",
+ "recipeSaved": "Recipe saved successfully",
+ "importFailed": "Échec de l'importation : {message}",
+ "folderTreeFailed": "Échec du chargement de l'arborescence des dossiers",
+ "folderTreeError": "Erreur lors du chargement de l'arborescence des dossiers",
+ "batchImportFailed": "Failed to start batch import: {message}",
+ "batchImportCancelling": "Cancelling batch import...",
+ "batchImportCancelFailed": "Failed to cancel batch import: {message}",
+ "batchImportNoUrls": "Please enter at least one URL or file path",
+ "batchImportNoDirectory": "Please enter a directory path",
+ "batchImportBrowseFailed": "Failed to browse directory: {message}",
+ "batchImportDirectorySelected": "Directory selected: {path}",
+ "noRecipesSelected": "Aucune recette sélectionnée",
+ "repairBulkComplete": "Réparation terminée : {repaired} réparée(s), {skipped} ignorée(s) (sur {total})",
+ "repairBulkSkipped": "Aucune réparation nécessaire parmi les {total} recettes sélectionnées",
+ "repairBulkFailed": "Échec de la réparation des recettes sélectionnées : {message}",
+ "reimporting": "Ré-import de la recette depuis la source...",
+ "reimportSuccess": "Recette ré-importée avec succès",
+ "reimportBulkComplete": "Ré-import terminé : {completed} ré-importé(s), {failed} échec(s) (sur {total})",
+ "reimportBulkFailed": "Échec du ré-import de certaines recettes",
+ "noMissingLorasInSelection": "Aucun LoRA manquant trouvé dans les recettes sélectionnées",
+ "noLoraRootConfigured": "Aucun répertoire racine LoRA configuré. Veuillez définir un répertoire racine LoRA par défaut dans les paramètres."
+ },
+ "models": {
+ "noModelsSelected": "Aucun modèle sélectionné",
+ "deletedSuccessfully": "{count} {type}(s) supprimé(s) avec succès",
+ "deleteFailed": "Erreur : {error}",
+ "deleteFailedGeneral": "Échec de la suppression des modèles",
+ "selectedAdditional": "{count} {type}(s) supplémentaire(s) sélectionné(s)",
+ "marqueeSelectionComplete": "{count} {type}(s) sélectionné(s) avec la sélection par glisser-déposer",
+ "refreshMetadataFailed": "Échec de l'actualisation des métadonnées",
+ "nameCannotBeEmpty": "Le nom du modèle ne peut pas être vide",
+ "nameUpdatedSuccessfully": "Nom du modèle mis à jour avec succès",
+ "nameUpdateFailed": "Échec de la mise à jour du nom du modèle",
+ "baseModelUpdated": "Modèle de base mis à jour avec succès",
+ "baseModelUpdateFailed": "Échec de la mise à jour du modèle de base",
+ "baseModelNotSelected": "Veuillez sélectionner un modèle de base",
+ "bulkBaseModelUpdating": "Mise à jour du modèle de base pour {count} modèle(s)...",
+ "bulkBaseModelUpdateSuccess": "Modèle de base mis à jour avec succès pour {count} modèle(s)",
+ "bulkBaseModelUpdatePartial": "{success} modèle(s) mis à jour, {failed} modèle(s) en échec",
+ "bulkBaseModelUpdateFailed": "Échec de la mise à jour du modèle de base pour les modèles sélectionnés",
+ "skipMetadataRefreshUpdating": "Mise à jour du flag d'actualisation des métadonnées pour {count} modèle(s)...",
+ "skipMetadataRefreshSet": "Actualisation des métadonnées ignorée pour {count} modèle(s)",
+ "skipMetadataRefreshCleared": "Actualisation des métadonnées reprise pour {count} modèle(s)",
+ "skipMetadataRefreshPartial": "{success} modèle(s) mis à jour, {failed} échoué(s)",
+ "skipMetadataRefreshFailed": "Échec de la mise à jour du flag d'actualisation des métadonnées pour les modèles sélectionnés",
+ "bulkContentRatingUpdating": "Mise à jour de la classification du contenu pour {count} modèle(s)...",
+ "bulkContentRatingSet": "Classification du contenu définie sur {level} pour {count} modèle(s)",
+ "bulkContentRatingPartial": "Classification du contenu définie sur {level} pour {success} modèle(s), {failed} échec(s)",
+ "bulkContentRatingFailed": "Impossible de mettre à jour la classification du contenu pour les modèles sélectionnés",
+ "bulkFavoriteUpdating": "Ajout de {count} modèle(s) aux favoris...",
+ "bulkUnfavoriteUpdating": "Suppression de {count} modèle(s) des favoris...",
+ "bulkFavoritePartialAdded": "{success} modèle(s) ajouté(s) aux favoris, {failed} échec(s)",
+ "bulkFavoritePartialRemoved": "{success} modèle(s) retiré(s) des favoris, {failed} échec(s)",
+ "bulkFavoriteFailed": "Échec de la mise à jour du statut de favori",
+ "bulkUpdatesChecking": "Vérification des mises à jour pour les {type} sélectionnés...",
+ "bulkUpdatesSuccess": "Mises à jour disponibles pour {count} {type} sélectionnés",
+ "bulkUpdatesNone": "Aucune mise à jour trouvée pour les {type} sélectionnés",
+ "bulkUpdatesMissing": "Les {type} sélectionnés ne sont pas liés aux mises à jour Civitai",
+ "bulkUpdatesPartialMissing": "{missing} {type} sélectionnés sans lien Civitai ignorés",
+ "bulkUpdatesFailed": "Échec de la vérification des mises à jour pour les {type} sélectionnés : {message}",
+ "invalidCharactersRemoved": "Caractères invalides supprimés du nom de fichier",
+ "filenameCannotBeEmpty": "Le nom de fichier ne peut pas être vide",
+ "renameFailed": "Échec du renommage du fichier : {message}",
+ "moveFailed": "Échec du déplacement du/des modèle(s) : {message}",
+ "pleaseSelectRoot": "Veuillez sélectionner un répertoire racine {type}",
+ "nameTooLong": "Le nom du modèle est limité à 100 caractères",
+ "verificationAlreadyDone": "Ce groupe a déjà été vérifié",
+ "verificationCompleteMismatch": "Vérification terminée. {count} fichier(s) ont des hash différents.",
+ "verificationCompleteSuccess": "Vérification terminée. Tous les fichiers sont confirmés comme doublons.",
+ "verificationFailed": "Échec de la vérification des hash : {message}",
+ "noTagsToAdd": "Aucun tag à ajouter",
+ "bulkTagsUpdating": "Mise à jour des tags pour {count} modèle(s)...",
+ "tagsAddedSuccessfully": "{tagCount} tag(s) ajouté(s) avec succès à {count} {type}(s)",
+ "tagsReplacedSuccessfully": "Tags remplacés avec succès pour {count} {type}(s) avec {tagCount} tag(s)",
+ "tagsAddFailed": "Échec de l'ajout des tags à {count} modèle(s)",
+ "tagsReplaceFailed": "Échec du remplacement des tags pour {count} modèle(s)",
+ "bulkTagsAddFailed": "Échec de l'ajout des tags aux modèles",
+ "bulkTagsReplaceFailed": "Échec du remplacement des tags pour les modèles"
+ },
+ "search": {
+ "atLeastOneOption": "Au moins une option de recherche doit être sélectionnée"
+ },
+ "settings": {
+ "loraRootsFailed": "Échec du chargement des racines LoRA : {message}",
+ "checkpointRootsFailed": "Échec du chargement des racines checkpoint : {message}",
+ "unetRootsFailed": "Échec du chargement des racines Diffusion Model : {message}",
+ "embeddingRootsFailed": "Échec du chargement des racines embedding : {message}",
+ "mappingsUpdated": "Mappages de chemin de modèle de base mis à jour ({count} mappage{plural})",
+ "mappingsCleared": "Mappages de chemin de modèle de base effacés",
+ "mappingSaveFailed": "Échec de la sauvegarde des mappages de modèle de base : {message}",
+ "downloadTemplatesUpdated": "Modèles de chemin de téléchargement mis à jour",
+ "downloadTemplatesFailed": "Échec de la sauvegarde des modèles de chemin de téléchargement : {message}",
+ "recipesPathUpdated": "Recipes storage path updated",
+ "recipesPathSaveFailed": "Failed to update recipes storage path: {message}",
+ "settingsUpdated": "Paramètres mis à jour : {setting}",
+ "compactModeToggled": "Mode compact {state}",
+ "settingSaveFailed": "Échec de la sauvegarde du paramètre : {message}",
+ "displayDensitySet": "Densité d'affichage définie sur {density}",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "Échec du changement de langue : {message}",
+ "cacheCleared": "Les fichiers de cache ont été vidés avec succès. Le cache sera reconstruit à la prochaine action.",
+ "cacheClearFailed": "Échec du vidage du cache : {error}",
+ "cacheClearError": "Erreur lors du vidage du cache : {message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "Filtres effacés",
+ "noCustomFilterToClear": "Aucun filtre personnalisé à effacer",
+ "noActiveFilters": "Aucun filtre actif à enregistrer"
+ },
+ "presets": {
+ "created": "Préréglage \"{name}\" créé",
+ "deleted": "Préréglage \"{name}\" supprimé",
+ "applied": "Préréglage \"{name}\" appliqué",
+ "overwritten": "Préréglage \"{name}\" remplacé",
+ "restored": "Paramètres par défaut restaurés"
+ },
+ "error": {
+ "presetNameEmpty": "Le nom du préréglage ne peut pas être vide",
+ "presetNameTooLong": "Le nom du préréglage doit contenir au maximum {max} caractères",
+ "presetNameInvalidChars": "Le nom du préréglage contient des caractères invalides",
+ "presetNameExists": "Un préréglage avec ce nom existe déjà",
+ "maxPresetsReached": "Maximum {max} préréglages autorisés. Supprimez-en un pour en ajouter plus.",
+ "presetNotFound": "Préréglage non trouvé",
+ "invalidPreset": "Données de préréglage invalides",
+ "deletePresetFailed": "Échec de la suppression du préréglage",
+ "applyPresetFailed": "Échec de l'application du préréglage"
+ },
+ "downloads": {
+ "imagesCompleted": "Images d'exemple {action} terminées",
+ "imagesFailed": "Images d'exemple {action} échouées",
+ "loadError": "Erreur lors du chargement des téléchargements : {message}",
+ "downloadError": "Erreur de téléchargement : {message}"
+ },
+ "import": {
+ "folderTreeFailed": "Échec du chargement de l'arborescence des dossiers",
+ "folderTreeError": "Erreur lors du chargement de l'arborescence des dossiers",
+ "imagesImported": "Images d'exemple importées avec succès",
+ "imagesPartial": "{success} image(s) importée(s), {failed} échouée(s)",
+ "importFailed": "Échec de l'importation des images d'exemple : {message}"
+ },
+ "triggerWords": {
+ "loadFailed": "Impossible de charger les mots entraînés",
+ "tooLong": "Le mot-clé ne doit pas dépasser 500 mots",
+ "tooMany": "Maximum 100 mots-clés autorisés",
+ "alreadyExists": "Ce mot-clé existe déjà",
+ "updateSuccess": "Mots-clés mis à jour avec succès",
+ "updateFailed": "Échec de la mise à jour des mots-clés",
+ "copyFailed": "Échec de la copie"
+ },
+ "virtual": {
+ "loadFailed": "Échec du chargement des éléments",
+ "loadMoreFailed": "Échec du chargement de plus d'éléments",
+ "loadPositionFailed": "Échec du chargement des éléments à cette position"
+ },
+ "bulk": {
+ "unableToSelectAll": "Impossible de sélectionner tous les éléments"
+ },
+ "duplicates": {
+ "findFailed": "Échec de la recherche de doublons : {message}",
+ "noDuplicatesFound": "Aucun doublon {type} trouvé",
+ "noItemsSelected": "Aucun {type} sélectionné pour la suppression",
+ "deleteError": "Erreur : {message}",
+ "deleteSuccess": "{count} {type} supprimé(s) avec succès",
+ "deleteFailed": "Échec de la suppression de {type} : {message}"
+ },
+ "controls": {
+ "reloadFailed": "Échec du rechargement de {pageType} : {message}",
+ "refreshFailed": "Échec de {action} {pageType} : {message}",
+ "fetchMetadataFailed": "Échec de la récupération des métadonnées : {message}",
+ "clearFilterFailed": "Échec de l'effacement du filtre personnalisé : {message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "Classification du contenu définie sur {level}",
+ "contentRatingFailed": "Échec de la définition de la classification du contenu : {message}",
+ "relinkSuccess": "Modèle relié à Civitai avec succès",
+ "relinkFailed": "Erreur : {message}",
+ "fetchMetadataFirst": "Veuillez d'abord récupérer les métadonnées depuis CivitAI",
+ "noCivitaiInfo": "Aucune information CivitAI disponible",
+ "missingHash": "Hash du modèle non disponible"
+ },
+ "exampleImages": {
+ "pathUpdated": "Chemin des images d'exemple mis à jour avec succès",
+ "pathUpdateFailed": "Échec de la mise à jour du chemin des images d'exemple : {message}",
+ "downloadInProgress": "Téléchargement déjà en cours",
+ "enterLocationFirst": "Veuillez d'abord entrer un emplacement de téléchargement",
+ "downloadStarted": "Téléchargement des images d'exemple démarré",
+ "downloadStartFailed": "Échec du démarrage du téléchargement : {error}",
+ "downloadPaused": "Téléchargement en pause",
+ "pauseFailed": "Échec de la mise en pause du téléchargement : {error}",
+ "downloadResumed": "Téléchargement repris",
+ "resumeFailed": "Échec de la reprise du téléchargement : {error}",
+ "downloadStopped": "Téléchargement annulé",
+ "stopFailed": "Échec de l'annulation du téléchargement : {error}",
+ "deleted": "Image d'exemple supprimée",
+ "deleteFailed": "Échec de la suppression de l'image d'exemple",
+ "setPreviewFailed": "Échec de la définition de l'image d'aperçu"
+ },
+ "api": {
+ "fetchFailed": "Échec de la récupération des {type}s : {message}",
+ "reloadFailed": "Échec du rechargement des {type}s : {message}",
+ "deleteSuccess": "{type} supprimé avec succès",
+ "deleteFailed": "Échec de la suppression de {type} : {message}",
+ "excludeSuccess": "{type} exclu avec succès",
+ "excludeFailed": "Échec de l'exclusion de {type} : {message}",
+ "restoreSuccess": "{type} restauré avec succès",
+ "restoreFailed": "Échec de la restauration de {type} : {message}",
+ "fileNameUpdated": "Nom de fichier mis à jour avec succès",
+ "fileRenameFailed": "Échec du renommage du fichier : {error}",
+ "previewUpdated": "Aperçu mis à jour avec succès",
+ "previewUploadFailed": "Échec du téléchargement de l'image d'aperçu",
+ "refreshComplete": "{action} terminé",
+ "refreshFailed": "Échec de {action} des {type}s",
+ "metadataRefreshed": "Métadonnées actualisées avec succès",
+ "metadataRefreshFailed": "Échec de l'actualisation des métadonnées : {message}",
+ "metadataUpdateComplete": "Mise à jour des métadonnées terminée",
+ "operationCancelled": "Opération annulée par l'utilisateur",
+ "operationCancelledPartial": "Opération annulée. {success} éléments traités.",
+ "metadataFetchFailed": "Échec de la récupération des métadonnées : {message}",
+ "bulkMetadataCompleteAll": "Actualisation réussie de tous les {count} {type}s",
+ "bulkMetadataCompletePartial": "{success} sur {total} {type}s actualisés",
+ "bulkMetadataCompleteNone": "Échec de l'actualisation des métadonnées pour tous les {type}s",
+ "bulkMetadataFailureDetails": "Échecs d'actualisation :\n{failures}",
+ "bulkMetadataFailed": "Échec de l'actualisation des métadonnées : {message}",
+ "moveNotSupported": "Le déplacement des {type}s n'est pas pris en charge",
+ "alreadyInFolder": "{type} est déjà dans le dossier sélectionné",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type} déplacé avec succès",
+ "bulkMoveNotSupported": "Le déplacement des {type}s n'est pas pris en charge",
+ "allAlreadyInFolder": "Tous les {type}s sélectionnés sont déjà dans le dossier cible",
+ "bulkMovePartial": "{successCount} {type}s déplacés, {failureCount} ont échoué",
+ "bulkMoveFailures": "Échecs de déplacement :\n{failures}",
+ "bulkMoveSuccess": "{successCount} {type}s déplacés avec succès",
+ "exampleImagesDownloadSuccess": "Images d'exemple téléchargées avec succès !",
+ "exampleImagesDownloadFailed": "Échec du téléchargement des images d'exemple : {message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "Copié dans le presse-papiers",
+ "downloadStarted": "Téléchargement démarré"
+ }
+ },
+ "doctor": {
+ "kicker": "Diagnostics système",
+ "title": "Docteur",
+ "buttonTitle": "Lancer les diagnostics et les corrections courantes",
+ "loading": "Vérification de l'environnement...",
+ "footer": "Exportez un lot de diagnostic si le problème persiste après la réparation.",
+ "summary": {
+ "idle": "Lancez une vérification de l'état des paramètres, de l'intégrité du cache et de la cohérence de l'interface.",
+ "ok": "Aucun problème actif n'a été trouvé dans l'environnement actuel.",
+ "warning": "{count} problème(s) ont été trouvés. La plupart peuvent être corrigés directement depuis ce panneau.",
+ "error": "{count} problème(s) nécessitent une attention avant que l'application soit entièrement saine."
+ },
+ "status": {
+ "ok": "Sain",
+ "warning": "Nécessite une attention",
+ "error": "Action requise"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API Key"
+ },
+ "cache_health": {
+ "title": "Model Cache Health"
+ },
+ "filename_conflicts": {
+ "title": "Duplicate Filename Conflicts"
+ },
+ "ui_version": {
+ "title": "UI Version"
+ }
+ },
+ "actions": {
+ "runAgain": "Relancer",
+ "exportBundle": "Exporter le lot",
+ "open-settings": "Open Settings",
+ "open-settings-syntax-format": "Switch to Full Path Syntax",
+ "repair-cache": "Rebuild Cache",
+ "resolve-filename-conflicts": "Resolve Conflicts",
+ "reload-page": "Reload UI"
+ },
+ "labels": {
+ "conflicts": "Conflicts",
+ "version": "Version"
+ },
+ "toast": {
+ "loadFailed": "Échec du chargement des diagnostics : {message}",
+ "repairSuccess": "Reconstruction du cache terminée.",
+ "repairFailed": "Échec de la reconstruction du cache : {message}",
+ "exportSuccess": "Lot de diagnostics exporté.",
+ "exportFailed": "Échec de l'export du lot de diagnostics : {message}",
+ "conflictsResolved": "{count} conflit(s) de nom de fichier résolu(s).",
+ "conflictsResolveFailed": "Échec de la résolution des conflits de nom de fichier : {message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "Résoudre les conflits de noms de fichiers",
+ "message": "Renommer en ajoutant un hachage de 4 caractères à chaque nom de fichier en double.",
+ "note": "Cette opération renomme les fichiers sur le disque. Les références de modèle dans les workflows existants peuvent nécessiter une mise à jour si vous utilisez le format de syntaxe A1111.",
+ "detail": "Exemple : filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "Renommera {count} fichier(s) dans {groups} groupe(s) de doublons",
+ "confirm": "Renommer les fichiers",
+ "cancel": "Annuler"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "Mise à jour de l'application détectée",
+ "content": "Votre navigateur utilise une version obsolète du Gestionnaire LoRA ({storedVersion}). Le serveur a été mis à jour vers la version {currentVersion}. Veuillez actualiser pour garantir le bon fonctionnement.",
+ "refreshNow": "Actualiser maintenant",
+ "refreshingIn": "Actualisation dans",
+ "seconds": "secondes"
+ },
+ "communitySupport": {
+ "title": "Keep LoRA Manager Thriving with Your Support ❤️",
+ "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
+ "supportCta": "Support on Ko-fi",
+ "learnMore": "LM Civitai Extension Tutorial"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "Corruption du cache détectée"
+ },
+ "degraded": {
+ "title": "Problèmes de cache détectés"
+ },
+ "content": "{invalid} des {total} entrées de cache sont invalides ({rate}). Cela peut provoquer des modèles manquants ou des erreurs. Il est recommandé de reconstruire le cache.",
+ "rebuildCache": "Reconstruire le cache",
+ "dismiss": "Ignorer",
+ "rebuilding": "Reconstruction du cache...",
+ "rebuildFailed": "Échec de la reconstruction du cache : {error}",
+ "retry": "Réessayer"
+ }
+ }
}
diff --git a/locales/he.json b/locales/he.json
index 6aa5c16f..ee4c42c3 100644
--- a/locales/he.json
+++ b/locales/he.json
@@ -1,2167 +1,2171 @@
{
- "common": {
- "cancel": "ביטול",
- "confirm": "אישור",
- "actions": {
- "save": "שמירה",
- "cancel": "ביטול",
- "confirm": "אישור",
- "delete": "מחיקה",
- "move": "העברה",
- "refresh": "רענון",
- "back": "חזרה",
- "next": "הבא",
- "backToTop": "חזרה למעלה",
- "settings": "הגדרות",
- "help": "עזרה",
- "add": "הוספה",
- "close": "סגור",
- "menu": "תפריט",
- "remove": "הסר",
- "change": "שנה"
- },
- "status": {
- "loading": "טוען...",
- "cancelling": "מבטל...",
- "unknown": "לא ידוע",
- "date": "תאריך",
- "version": "גרסה",
- "enabled": "מופעל",
- "disabled": "מושבת"
- },
- "language": {
- "select": "שפה",
- "select_help": "בחר את השפה המועדפת עליך לממשק",
- "english": "English",
- "chinese_simplified": "中文(简体)",
- "chinese_traditional": "中文(繁体)",
- "russian": "Русский",
- "german": "Deutsch",
- "japanese": "日本語",
- "korean": "한국어",
- "french": "Français",
- "spanish": "Español",
- "Hebrew": "עברית"
- },
- "fileSize": {
- "zero": "0 בתים",
- "bytes": "בתים",
- "kb": "KB",
- "mb": "MB",
- "gb": "GB",
- "tb": "TB"
- }
+ "common": {
+ "cancel": "ביטול",
+ "confirm": "אישור",
+ "actions": {
+ "save": "שמירה",
+ "cancel": "ביטול",
+ "confirm": "אישור",
+ "delete": "מחיקה",
+ "move": "העברה",
+ "refresh": "רענון",
+ "back": "חזרה",
+ "next": "הבא",
+ "backToTop": "חזרה למעלה",
+ "settings": "הגדרות",
+ "help": "עזרה",
+ "add": "הוספה",
+ "close": "סגור",
+ "menu": "תפריט",
+ "remove": "הסר",
+ "change": "שנה"
},
- "onboarding": {
- "languageSelection": {
- "title": "ברוכים הבאים ל-LoRA Manager",
- "continue": "המשך",
- "changeFailed": "שינוי השפה נכשל: {message}"
- },
- "tutorial": {
- "skipTutorial": "דלג על המדריך",
- "back": "חזור",
- "next": "הבא",
- "finish": "סיים"
- },
- "steps": {
- "fetch": {
- "title": "אחזור מטא-דאטה של מודלים",
- "content": "לחץ על כפתור אחזר כדי להוריד מטא-דאטה של מודלים ותמונות תצוגה מקדימה מ-Civitai."
- },
- "download": {
- "title": "הורדת מודלים חדשים",
- "content": "השתמש בכפתור הורד כדי להוריד מודלים ישירות מכתובות URL של Civitai."
- },
- "bulk": {
- "title": "פעולות בכמות גדולה",
- "content": "היכנס למצב פעולות בכמות גדולה על ידי לחיצה על כפתור זה או על B. בחר מספר מודלים ובצע פעולות אצווה. השתמש ב-Ctrl+A כדי לבחור את כל המודלים הגלויים."
- },
- "searchOptions": {
- "title": "אפשרויות חיפוש",
- "content": "לחץ על כפתור זה כדי להגדיר באילו שדות לחפש: שם קובץ, שם מודל, תגיות, או שם יוצר. התאם אישית את היקף החיפוש שלך."
- },
- "filter": {
- "title": "סינון מודלים",
- "content": "השתמש במסננים כדי לצמצם את המודלים לפי סוג מודל בסיס (SD1.5, SDXL, Flux, וכו') או לפי תגיות ספציפיות."
- },
- "breadcrumb": {
- "title": "ניווט פירורי לחם",
- "content": "ניווט פירורי הלחם מראה את הנתיב הנוכחי שלך ומאפשר ניווט מהיר בין תיקיות. לחץ על שם תיקייה כלשהו כדי לקפוץ ישירות לשם."
- },
- "modelCards": {
- "title": "כרטיסי מודל",
- "content": "לחיצה בודדת על כרטיס מודל כדי להציג מידע מפורט ולערוך מטא-דאטה. חפש את סמל העיפרון בעת ריחוף מעל שדות הניתנים לעריכה."
- },
- "contextMenu": {
- "title": "תפריט הקשר",
- "content": "לחיצה ימנית על כל כרטיס מודל לתפריט הקשר עם פעולות נוספות."
- }
- }
+ "status": {
+ "loading": "טוען...",
+ "cancelling": "מבטל...",
+ "unknown": "לא ידוע",
+ "date": "תאריך",
+ "version": "גרסה",
+ "enabled": "מופעל",
+ "disabled": "מושבת"
},
- "modelCard": {
- "actions": {
- "addToFavorites": "הוסף למועדפים",
- "removeFromFavorites": "הסר מהמועדפים",
- "viewOnCivitai": "הצג ב-Civitai",
- "notAvailableFromCivitai": "לא זמין מ-Civitai",
- "sendToWorkflow": "שלח ל-ComfyUI (לחיצה: הוסף, Shift+לחיצה: החלף)",
- "copyLoRASyntax": "העתק תחביר LoRA",
- "checkpointNameCopied": "שם Checkpoint הועתק",
- "toggleBlur": "הפעל/כבה טשטוש",
- "show": "הצג",
- "openExampleImages": "פתח תיקיית תמונות דוגמה",
- "replacePreview": "החלף תצוגה מקדימה",
- "copyCheckpointName": "העתק שם Checkpoint",
- "copyEmbeddingName": "העתק שם Embedding",
- "embeddingNameCopied": "תחביר Embedding הועתק",
- "sendCheckpointToWorkflow": "שלח ל-ComfyUI",
- "sendEmbeddingToWorkflow": "שלח ל-ComfyUI"
- },
- "nsfw": {
- "matureContent": "תוכן למבוגרים",
- "xxxRated": "תוכן בדירוג XXX",
- "xRated": "תוכן בדירוג X",
- "rRated": "תוכן בדירוג R"
- },
- "favorites": {
- "added": "נוסף למועדפים",
- "removed": "הוסר מהמועדפים",
- "updateFailed": "עדכון סטטוס מועדפים נכשל"
- },
- "sendToWorkflow": {
- "checkpointNotImplemented": "שליחת checkpoint ל-workflow - תכונה שתיושם בעתיד",
- "missingPath": "לא ניתן לקבוע את נתיב המודל לכרטיס זה"
- },
- "exampleImages": {
- "checkError": "שגיאה בבדיקת תמונות דוגמה",
- "missingHash": "חסר מידע hash של המודל.",
- "noRemoteImagesAvailable": "אין תמונות דוגמה מרוחקות זמינות למודל זה ב-Civitai"
- },
- "badges": {
- "update": "עדכון",
- "updateAvailable": "עדכון זמין",
- "skipRefresh": "רענון המטא-נתונים דולג"
- },
- "usage": {
- "timesUsed": "מספר שימושים"
- },
- "footer": {
- "versionCount": "{count} גרסאות",
- "viewAllVersions": "הצג את כל הגרסאות המקומיות"
- }
+ "language": {
+ "select": "שפה",
+ "select_help": "בחר את השפה המועדפת עליך לממשק",
+ "english": "English",
+ "chinese_simplified": "中文(简体)",
+ "chinese_traditional": "中文(繁体)",
+ "russian": "Русский",
+ "german": "Deutsch",
+ "japanese": "日本語",
+ "korean": "한국어",
+ "french": "Français",
+ "spanish": "Español",
+ "Hebrew": "עברית"
},
- "globalContextMenu": {
- "downloadExampleImages": {
- "label": "הורד תמונות דוגמה",
- "missingPath": "הגדר מיקום הורדה לפני הורדת תמונות דוגמה.",
- "unavailable": "הורדות תמונות דוגמה אינן זמינות עדיין. נסה שוב לאחר שהדף מסיים להיטען."
- },
- "checkModelUpdates": {
- "label": "בדוק עדכונים",
- "loading": "בודק עדכונים עבור {type}...",
- "success": "נמצאו {count} עדכונים עבור {type}",
- "none": "כל ה-{type} מעודכנים",
- "error": "נכשל בבדיקת העדכונים עבור {type}: {message}"
- },
- "cleanupExampleImages": {
- "label": "נקה תיקיות תמונות דוגמה",
- "success": "הועברו {count} תיקיות לתיקיית המחוקים",
- "none": "אין תיקיות תמונות דוגמה שזקוקות לניקוי",
- "partial": "הניקוי הושלם עם דילוג על {failures} תיקיות",
- "error": "ניקוי תיקיות תמונות הדוגמה נכשל: {message}"
- },
- "fetchMissingLicenses": {
- "label": "Refresh license metadata",
- "loading": "Refreshing license metadata for {typePlural}...",
- "success": "Updated license metadata for {count} {typePlural}",
- "none": "All {typePlural} already have license metadata",
- "error": "Failed to refresh license metadata for {typePlural}: {message}"
- },
- "repairRecipes": {
- "label": "תיקון נתוני מתכונים",
- "loading": "מתקן נתוני מתכונים...",
- "success": "תוקנו בהצלחה {count} מתכונים.",
- "cancelled": "תיקון בוטל. {count} מתכונים תוקנו.",
- "error": "תיקון המתכונים נכשל: {message}"
- },
- "manageExcludedModels": {
- "label": "ניהול מודלים מוחרגים"
- },
- "groupByModel": {
- "label": "קיבוץ לפי דגם"
- }
+ "fileSize": {
+ "zero": "0 בתים",
+ "bytes": "בתים",
+ "kb": "KB",
+ "mb": "MB",
+ "gb": "GB",
+ "tb": "TB"
+ }
+ },
+ "onboarding": {
+ "languageSelection": {
+ "title": "ברוכים הבאים ל-LoRA Manager",
+ "continue": "המשך",
+ "changeFailed": "שינוי השפה נכשל: {message}"
},
- "header": {
- "appTitle": "מנהל LoRA",
- "navigation": {
- "loras": "LoRAs",
- "recipes": "מתכונים",
- "checkpoints": "Checkpoints",
- "embeddings": "Embeddings",
- "statistics": "סטטיסטיקה"
- },
- "search": {
- "placeholder": "חיפוש",
- "options": "אפשרויות חיפוש",
- "searchIn": "חפש ב:",
- "notAvailable": "חיפוש לא זמין בדף הסטטיסטיקה",
- "filters": {
- "filename": "שם קובץ",
- "modelname": "שם מודל",
- "tags": "תגיות",
- "creator": "יוצר",
- "title": "כותרת מתכון",
- "loraName": "שם קובץ LoRA",
- "loraModel": "שם מודל LoRA",
- "prompt": "הנחיה"
- }
- },
- "filter": {
- "title": "סנן מודלים",
- "presets": "קביעות מראש",
- "savePreset": "שמור מסננים פעילים כקביעה מראש חדשה.",
- "savePresetDisabledActive": "לא ניתן לשמור: קביעה מראש כבר פעילה. שנה מסננים כדי לשמור קביעה מראש חדשה",
- "savePresetDisabledNoFilters": "בחר מסננים תחילה כדי לשמור כקביעה מראש",
- "savePresetPrompt": "הזן שם קביעה מראש:",
- "presetClickTooltip": "לחץ כדי להפעיל קביעה מראש \"{name}\"",
- "presetDeleteTooltip": "מחק קביעה מראש",
- "presetDeleteConfirm": "למחוק קביעה מראש \"{name}\"?",
- "presetDeleteConfirmClick": "לחץ שוב לאישור",
- "presetOverwriteConfirm": "הפריסט \"{name}\" כבר קיים. לדרוס?",
- "presetNamePlaceholder": "שם קביעה מראש...",
- "baseModel": "מודל בסיס",
- "baseModelSearchPlaceholder": "חפש מודלי בסיס...",
- "modelTags": "תגיות (20 המובילות)",
- "modelTypes": "סוגי מודלים",
- "license": "רישיון",
- "noCreditRequired": "ללא קרדיט נדרש",
- "allowSellingGeneratedContent": "אפשר מכירה",
- "allowSellingGeneratedContentTooltip": "אפשר מכירת תמונות שנוצרו",
- "noCreditRequiredTooltip": "שימוש במודל ללא מתן קרדיט ליוצר",
- "noTags": "ללא תגיות",
- "autoTags": "תגיות אוטומטיות",
- "noBaseModelMatches": "אין מודלי בסיס התואמים לחיפוש הנוכחי.",
- "clearAll": "נקה את כל המסננים",
- "any": "כלשהו",
- "all": "כל התגים",
- "tagLogicAny": "התאם כל תג (או)",
- "tagLogicAll": "התאם את כל התגים (וגם)"
- },
- "theme": {
- "toggle": "החלף ערכת נושא",
- "switchToLight": "עבור לערכת נושא בהירה",
- "switchToDark": "עבור לערכת נושא כהה",
- "switchToAuto": "עבור לערכת נושא אוטומטית",
- "presets": "ערכות נושא מוגדרות",
- "default": "ברירת מחדל",
- "nord": "Nord",
- "midnight": "Midnight",
- "monokai": "Monokai",
- "dracula": "Dracula",
- "solarized": "Solarized",
- "mode": "מצב",
- "light": "בהיר",
- "dark": "כהה",
- "auto": "אוטומטי"
- },
- "actions": {
- "checkUpdates": "בדוק עדכונים",
- "notifications": "התראות",
- "support": "תמיכה"
- }
+ "tutorial": {
+ "skipTutorial": "דלג על המדריך",
+ "back": "חזור",
+ "next": "הבא",
+ "finish": "סיים"
},
- "settings": {
- "civitaiApiKey": "מפתח API של Civitai",
- "civitaiApiKeyPlaceholder": "הזן את מפתח ה-API שלך מ-Civitai",
- "civitaiApiKeyHelp": "משמש לאימות בעת הורדת מודלים מ-Civitai",
- "civitaiApiKeyConfigured": "מוגדר",
- "civitaiApiKeyNotConfigured": "לא מוגדר",
- "civitaiApiKeySet": "הגדר",
- "civitaiHost": {
- "label": "מארח Civitai",
- "help": "בחר איזה אתר של Civitai ייפתח בעת שימוש בקישורי \"View on Civitai\".",
- "options": {
- "com": "civitai.com (SFW בלבד)",
- "red": "civitai.red (ללא הגבלות)"
- }
- },
- "downloadBackend": {
- "label": "מנגנון הורדה",
- "help": "בחר כיצד יורדים קבצי המודל. Python משתמש במוריד המובנה. aria2 משתמש בתהליך הורדה חיצוני מומלץ.",
- "options": {
- "python": "Python (מובנה)",
- "aria2": "aria2 (מומלץ)"
- }
- },
- "aria2cPath": {
- "label": "נתיב aria2c",
- "help": "נתיב אופציונלי לקובץ ההפעלה aria2c. השאר ריק כדי להשתמש ב-aria2c מתוך ה-PATH של המערכת.",
- "placeholder": "השאר ריק כדי להשתמש ב-aria2c מתוך ה-PATH"
- },
- "aria2HelpLink": "למד כיצד להגדיר את מנוע ההורדה aria2",
- "civitaiHostBanner": {
- "title": "העדפת מארח Civitai זמינה",
- "content": "Civitai משתמש כעת ב-civitai.com עבור תוכן SFW וב-civitai.red עבור תוכן ללא הגבלות. ניתן לשנות בהגדרות איזה אתר ייפתח כברירת מחדל.",
- "openSettings": "פתח הגדרות"
- },
- "openSettingsFileLocation": {
- "label": "פתח תיקיית הגדרות",
- "tooltip": "פתח את התיקייה שמכילה את settings.json",
- "success": "תיקיית settings.json נפתחה",
- "failed": "לא ניתן לפתוח את תיקיית settings.json",
- "copied": "נתיב ההגדרות הועתק ללוח העריכה: {{path}}",
- "clipboardFallback": "נתיב ההגדרות: {{path}}"
- },
- "sections": {
- "contentFiltering": "סינון תוכן",
- "downloads": "הורדות",
- "videoSettings": "הגדרות וידאו",
- "layoutSettings": "הגדרות פריסה",
- "licenseIcons": "סמלי רישיון",
- "misc": "שונות",
- "backup": "גיבויים",
- "folderSettings": "תיקיות ברירת מחדל",
- "recipeSettings": "מתכונים",
- "extraFolderPaths": "נתיבי תיקיות נוספים",
- "downloadPathTemplates": "תבניות נתיב הורדה",
- "priorityTags": "תגיות עדיפות",
- "versionScope": "תגי עדכון",
- "exampleImages": "תמונות דוגמה",
- "autoOrganize": "ארגון אוטומטי",
- "metadata": "מטא-נתונים",
- "proxySettings": "הגדרות פרוקסי"
- },
- "nav": {
- "general": "כללי",
- "interface": "ממשק",
- "library": "ספרייה"
- },
- "search": {
- "placeholder": "חיפוש בהגדרות...",
- "clear": "נקה חיפוש",
- "noResults": "לא נמצאו הגדרות תואמות ל-\"{query}\""
- },
- "storage": {
- "locationLabel": "מצב נייד",
- "locationHelp": "הפעל כדי לשמור את settings.json בתוך המאגר; בטל כדי לשמור אותו בתיקיית ההגדרות של המשתמש."
- },
- "contentFiltering": {
- "blurNsfwContent": "טשטש תוכן NSFW",
- "blurNsfwContentHelp": "טשטש תמונות תצוגה מקדימה של תוכן למבוגרים (NSFW)",
- "showOnlySfw": "הצג רק תוצאות SFW",
- "showOnlySfwHelp": "סנן את כל התוכן ה-NSFW בעת גלישה וחיפוש",
- "matureBlurThreshold": "סף טשטוש תוכן מבוגרים",
- "matureBlurThresholdHelp": "הגדר מאיזו רמת דירוג מתחיל סינון הטשטוש כאשר טשטוש NSFW מופעל.",
- "matureBlurThresholdOptions": {
- "pg13": "PG13 ומעלה",
- "r": "R ומעלה (ברירת מחדל)",
- "x": "X ומעלה",
- "xxx": "XXX בלבד"
- }
- },
- "videoSettings": {
- "autoplayOnHover": "נגן וידאו אוטומטית בריחוף",
- "autoplayOnHoverHelp": "נגן תצוגות מקדימות של וידאו רק בעת ריחוף מעליהן"
- },
- "autoOrganizeExclusions": {
- "label": "יוצא דופן של ארגון אוטומטי",
- "placeholder": "דוגמה: curated/*, */backups/*; *_temp.safetensors",
- "help": "דלג על העברת קבצים התואמים לתבניות אלו. הפרד תבניות מרובות בפסיקים או בנקודותיים.",
- "validation": {
- "noPatterns": "הזן לפחות תבנית אחת מופרדת בפסיקים או בנקודותיים.",
- "saveFailed": "לא ניתן לשמור את ההוצאות: {message}"
- }
- },
- "metadataRefreshSkipPaths": {
- "label": "נתיבים לדילוג ברענון מטא-נתונים",
- "placeholder": "דוגמה: temp, archived/old, test_models",
- "help": "דלג על מודלים בנתיבי תיקיות אלה בעת רענון מטא-נתונים המוני (\"אחזר את כל המטא-נתונים\"). הזן נתיבי תיקיות יחסית לספריית השורש של המודל, מופרדים בפסיקים.",
- "validation": {
- "noPaths": "הזן לפחות נתיב אחד מופרד בפסיקים.",
- "saveFailed": "לא ניתן לשמור נתיבי דילוג: {message}"
- }
- },
- "backup": {
- "autoEnabled": "גיבויים אוטומטיים",
- "autoEnabledHelp": "יוצר צילום מצב מקומי פעם ביום ושומר את הצילומים האחרונים לפי מדיניות השמירה.",
- "retention": "כמות שמירה",
- "retentionHelp": "כמה צילומי מצב אוטומטיים לשמור לפני שמסירים ישנים.",
- "management": "ניהול גיבויים",
- "managementHelp": "ייצא את מצב המשתמש הנוכחי או שחזר אותו מארכיון גיבוי.",
- "scopeHelp": "כולל את ההגדרות שלך, היסטוריית ההורדות ומצב עדכוני המודלים. אינו כולל קובצי מודל או מטמונים שניתן לשחזר.",
- "locationSummary": "מיקום הגיבוי הנוכחי",
- "openFolderButton": "פתח את תיקיית הגיבויים",
- "openFolderSuccess": "תיקיית הגיבויים נפתחה",
- "openFolderFailed": "לא ניתן היה לפתוח את תיקיית הגיבויים",
- "locationCopied": "נתיב הגיבוי הועתק ללוח: {{path}}",
- "locationClipboardFallback": "נתיב הגיבוי: {{path}}",
- "exportButton": "ייצא גיבוי",
- "exportSuccess": "הגיבוי יוצא בהצלחה.",
- "exportFailed": "נכשל ייצוא הגיבוי: {message}",
- "importButton": "ייבא גיבוי",
- "importConfirm": "לייבא את הגיבוי הזה ולדרוס את מצב המשתמש המקומי?",
- "importSuccess": "הגיבוי יובא בהצלחה.",
- "importFailed": "נכשל ייבוא הגיבוי: {message}",
- "latestSnapshot": "צילום המצב האחרון",
- "latestAutoSnapshot": "צילום המצב האוטומטי האחרון",
- "snapshotCount": "צילומי מצב שמורים",
- "noneAvailable": "עדיין אין צילומי מצב"
- },
- "downloadSkipBaseModels": {
- "label": "דלג על הורדות עבור מודלי בסיס",
- "help": "חל על כל תהליכי ההורדה. ניתן לבחור כאן רק מודלי בסיס נתמכים.",
- "searchPlaceholder": "סנן מודלי בסיס...",
- "empty": "אין מודלי בסיס התואמים לחיפוש הנוכחי.",
- "summary": {
- "none": "לא נבחר דבר",
- "count": "{count} נבחרו"
- },
- "actions": {
- "edit": "עריכה",
- "collapse": "כווץ",
- "clear": "נקה"
- },
- "validation": {
- "saveFailed": "לא ניתן לשמור את מודלי הבסיס המוחרגים: {message}"
- }
- },
- "skipPreviouslyDownloadedModelVersions": {
- "label": "דלג על גרסאות מודלים שהורדו בעבר",
- "help": "כאשר מופעל, LoRA Manager ידלג על הורדת גרסת מודל אם שירות היסטוריית ההורדות רושם את הגרסה המדויקת הזו ככבר שהורדה. חל על כל תהליכי ההורדה."
- },
- "layoutSettings": {
- "groupByModel": "קיבוץ לפי דגם",
- "groupByModelHelp": "כאשר מופעל, רק הגרסה העדכנית ביותר של כל דגם Civitai מוצגת ככרטיס בודד. גרסאות ישנות יותר מוסתרות.",
- "displayDensity": "צפיפות תצוגה",
- "displayDensityOptions": {
- "default": "ברירת מחדל",
- "medium": "בינוני",
- "compact": "קומפקטי"
- },
- "displayDensityHelp": "בחר כמה כרטיסים להציג בכל שורה:",
- "displayDensityDetails": {
- "default": "5 (1080p), 6 (2K), 8 (4K)",
- "medium": "6 (1080p), 7 (2K), 9 (4K)",
- "compact": "7 (1080p), 8 (2K), 10 (4K)"
- },
- "displayDensityWarning": "אזהרה: צפיפויות גבוהות יותר עלולות לגרום לבעיות ביצועים במערכות עם משאבים מוגבלים.",
- "showFolderSidebar": "הצג סרגל צד תיקיות",
- "showFolderSidebarHelp": "הפעל או כבה את סרגל הצד לניווט תיקיות בדפי המודל. כאשר הוא כבוי, סרגל הצד ואזור הריחוף נשארים מוסתרים.",
- "cardInfoDisplay": "תצוגת מידע בכרטיס",
- "cardInfoDisplayOptions": {
- "always": "תמיד גלוי",
- "hover": "חשוף בריחוף"
- },
- "cardInfoDisplayHelp": "בחר מתי להציג מידע על המודל וכפתורי פעולה",
- "showVersionOnCard": "הצג גרסה בכרטיס",
- "showVersionOnCardHelp": "הצג או הסתר את שם הגרסה בכרטיסי המודל",
- "modelCardFooterAction": "פעולת כפתור כרטיס מודל",
- "modelCardFooterActionOptions": {
- "exampleImages": "פתח תמונות דוגמה",
- "replacePreview": "החלף תצוגה מקדימה"
- },
- "modelCardFooterActionHelp": "בחר מה עושה הכפתור בפינה הימנית התחתונה של הכרטיס",
- "modelNameDisplay": "תצוגת שם מודל",
- "modelNameDisplayOptions": {
- "modelName": "שם מודל",
- "fileName": "שם קובץ"
- },
- "modelNameDisplayHelp": "בחר מה להציג בכותרת התחתונה של כרטיס המודל",
- "cardBlurAmount": "עוצמת טשטוש שכבת-על בכרטיס",
- "cardBlurAmountHelp": "כוונן את עוצמת הטשטוש של שכבת-העל בכותרת ובכותרות תחתונה בכרטיסי מודל ומתכונים (0 = ללא טשטוש, 20 = טשטוש מקסימלי)."
- },
- "folderSettings": {
- "activeLibrary": "ספרייה פעילה",
- "activeLibraryHelp": "החלפה בין הספריות המוגדרות לעדכן את תיקיות ברירת המחדל. שינוי הבחירה ירענן את הדף.",
- "loadingLibraries": "טוען ספריות...",
- "noLibraries": "לא הוגדרו ספריות",
- "defaultLoraRoot": "תיקיית שורש LoRA",
- "defaultLoraRootHelp": "הגדר את ספריית השורש המוגדרת כברירת מחדל של LoRA להורדות, ייבוא והעברות",
- "defaultCheckpointRoot": "תיקיית שורש Checkpoint",
- "defaultCheckpointRootHelp": "הגדר את ספריית השורש המוגדרת כברירת מחדל של checkpoint להורדות, ייבוא והעברות",
- "defaultUnetRoot": "תיקיית שורש Diffusion Model",
- "defaultUnetRootHelp": "הגדר את ספריית השורש המוגדרת כברירת מחדל של Diffusion Model (UNET) להורדות, ייבוא והעברות",
- "defaultEmbeddingRoot": "תיקיית שורש Embedding",
- "defaultEmbeddingRootHelp": "הגדר את ספריית השורש המוגדרת כברירת מחדל של embedding להורדות, ייבוא והעברות",
- "recipesPath": "נתיב אחסון מתכונים",
- "recipesPathHelp": "ספרייה מותאמת אישית אופציונלית למתכונים שנשמרו. השאר ריק כדי להשתמש בתיקיית recipes של שורש LoRA הראשון.",
- "recipesPathPlaceholder": "/path/to/recipes",
- "recipesPathMigrating": "מעביר את אחסון המתכונים...",
- "noDefault": "אין ברירת מחדל"
- },
- "extraFolderPaths": {
- "title": "נתיבי תיקיות נוספים",
- "description": "נתיבי שורש מודלים נוספים בלעדיים ל-LoRA Manager. טען מודלים ממיקומים מחוץ לתיקיות הסטנדרטיות של ComfyUI - אידיאלי לספריות גדולות שאחרת יאטו את ComfyUI.",
- "restartRequired": "Requires restart to take effect",
- "modelTypes": {
- "lora": "נתיבי LoRA",
- "checkpoint": "נתיבי Checkpoint",
- "unet": "נתיבי מודל דיפוזיה",
- "embedding": "נתיבי Embedding"
- },
- "pathPlaceholder": "/נתיב/למודלים/נוספים",
- "saveSuccess": "נתיבי תיקיות נוספים עודכנו. נדרשת הפעלה מחדש כדי להחיל את השינויים.",
- "saveError": "נכשל בעדכון נתיבי תיקיות נוספים: {message}",
- "validation": {
- "duplicatePath": "נתיב זה כבר מוגדר"
- }
- },
- "priorityTags": {
- "title": "תגיות עדיפות",
- "description": "התאם את סדר העדיפות של התגיות עבור כל סוג מודל (לדוגמה: character, concept, style(toon|toon_style))",
- "placeholder": "character, concept, style(toon|toon_style)",
- "helpLinkLabel": "פתח עזרה בנושא תגיות עדיפות",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "saveSuccess": "תגיות העדיפות עודכנו.",
- "saveError": "עדכון תגיות העדיפות נכשל.",
- "loadingSuggestions": "טוען הצעות...",
- "validation": {
- "missingClosingParen": "לרשומה {index} חסר סוגר סוגריים.",
- "missingCanonical": "על הרשומה {index} לכלול שם תגית קנונית.",
- "duplicateCanonical": "התגית הקנונית \"{tag}\" מופיעה יותר מפעם אחת.",
- "unknown": "תצורת תגיות העדיפות שגויה."
- }
- },
- "downloadPathTemplates": {
- "title": "תבניות נתיב הורדה",
- "help": "הגדר מבני תיקיות לסוגי מודלים שונים בעת הורדה מ-Civitai.",
- "availablePlaceholders": "מצייני מקום זמינים:",
- "templateOptions": {
- "flatStructure": "מבנה שטוח",
- "byBaseModel": "לפי מודל בסיס",
- "byAuthor": "לפי יוצר",
- "byFirstTag": "לפי תגית ראשונה",
- "baseModelFirstTag": "מודל בסיס + תגית ראשונה",
- "baseModelAuthor": "מודל בסיס + יוצר",
- "authorFirstTag": "יוצר + תגית ראשונה",
- "baseModelAuthorFirstTag": "מודל בסיס + יוצר + תגית ראשונה",
- "customTemplate": "תבנית מותאמת אישית"
- },
- "customTemplatePlaceholder": "הזן תבנית מותאמת אישית (למשל, {base_model}/{author}/{first_tag})",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "baseModelPathMappings": "מיפוי נתיבי מודל בסיס",
- "baseModelPathMappingsHelp": "התאם אישית שמות תיקיות עבור מודלי בסיס ספציפיים (למשל, \"Flux.1 D\" → \"flux\")",
- "addMapping": "הוסף מיפוי",
- "selectBaseModel": "בחר מודל בסיס",
- "customPathPlaceholder": "נתיב מותאם אישית (למשל, flux)",
- "removeMapping": "הסר מיפוי",
- "validation": {
- "validFlat": "תקין (מבנה שטוח)",
- "invalidChars": "זוהו תווים לא חוקיים",
- "doubleSlashes": "קווים נטויים כפולים אינם מותרים",
- "leadingTrailingSlash": "לא ניתן להתחיל או לסיים בקו נטוי",
- "invalidPlaceholder": "מציין מקום לא חוקי: {placeholder}",
- "validTemplate": "תבנית תקינה"
- }
- },
- "exampleImages": {
- "downloadLocation": "מיקום הורדה",
- "downloadLocationPlaceholder": "הזן נתיב תיקייה לתמונות דוגמה",
- "downloadLocationHelp": "הזן את נתיב התיקייה שבו יישמרו תמונות דוגמה מ-Civitai",
- "autoDownload": "הורדה אוטומטית של תמונות דוגמה",
- "autoDownloadHelp": "הורד אוטומטית תמונות דוגמה למודלים שאין להם (דורש הגדרת מיקום הורדה)",
- "openMode": "פעולת פתיחת תמונות דוגמה",
- "openModeHelp": "בחר אם הפעולה תיפתח בשרת, תעתיק נתיב מקומי ממופה או תפעיל URI מותאם אישית.",
- "openModeOptions": {
- "system": "פתח בשרת",
- "clipboard": "העתק נתיב מקומי",
- "uriTemplate": "פתח URI מותאם אישית"
- },
- "localRoot": "שורש מקומי לתמונות דוגמה",
- "localRootHelp": "שורש מקומי או ממופה אופציונלי שמשקף את תיקיית תמונות הדוגמה בשרת. אם השדה ריק, ייעשה שימוש חוזר בנתיב השרת.",
- "localRootPlaceholder": "דוגמה: /Volumes/ComfyUI/example_images",
- "uriTemplate": "תבנית URI לפתיחה",
- "uriTemplateHelp": "השתמש בקישור עומק מותאם אישית כמו URI של קובץ או קישור Shortcuts.",
- "uriTemplatePlaceholder": "דוגמה: shortcuts://run-shortcut?name=Open%20Finder&input=text&text={{encoded_local_path}}",
- "uriTemplatePlaceholders": "מצייני מקום זמינים: {{local_path}}, {{encoded_local_path}}, {{relative_path}}, {{encoded_relative_path}}, {{file_uri}}, {{encoded_file_uri}}",
- "openModeWikiLink": "למידע נוסף על מצבי פתיחה מרחוק",
- "optimizeImages": "מטב תמונות שהורדו",
- "optimizeImagesHelp": "מטב תמונות דוגמה כדי להקטין את גודל הקובץ ולשפר את מהירות הטעינה (מטא-דאטה תישמר)",
- "download": "הורד",
- "restartRequired": "דורש הפעלה מחדש"
- },
- "versionGrouping": {
- "label": "אסטרטגיית תגי עדכון",
- "help": "בחרו אם תוויות העדכון יוצגו רק כאשר גרסה חדשה חולקת את אותו דגם בסיס כמו הקבצים המקומיים שלכם או בכל מקרה שבו קיימת גרסה חדשה עבור אותו דגם.",
- "options": {
- "sameBase": "התאמת עדכונים לפי דגם בסיס",
- "any": "תוויות לכל עדכון זמין"
- }
- },
- "hideEarlyAccessUpdates": {
- "label": "הסתר עדכוני גישה מוקדמת",
- "help": "רק עדכוני גישה מוקדמת"
- },
- "licenseIcons": {
- "useNewStyle": "השתמש בסמלי רישיון מעודכנים",
- "useNewStyleHelp": "הצג הרשאות רישיון עם מחוונים צבעוניים (סגנון חדש) או סמלי הגבלה בלבד (סגנון קלאסי). משקף את העיצוב העדכני של CivitAI."
- },
- "misc": {
- "includeTriggerWords": "כלול מילות טריגר בתחביר LoRA",
- "includeTriggerWordsHelp": "כלול מילות טריגר מאומנות בעת העתקת תחביר LoRA ללוח",
- "loraSyntaxFormat": "פורמט תחביר LoRA",
- "loraSyntaxFormatHelp": "פורמט תחביר LoRA. נתיב מלא כולל תת-תיקייה (filename_v1.2 → filename_v1.2-ab3c",
- "impact": "ישנה שם של {count} קבצים ב-{groups} קבוצות כפולות",
- "confirm": "שנה שמות קבצים",
- "cancel": "ביטול"
+ "metadataFetchSummary": {
+ "title": "סיכום שליפת מטא-דאטה",
+ "statSuccess": "הצלחה",
+ "statFailed": "נכשל",
+ "statSkipped": "דולג",
+ "statTotal": "סה\"כ נסרק",
+ "statDuration": "משך",
+ "successMessage": "כל {count} {type}s עודכנו בהצלחה!",
+ "failedItems": "פריטים נכשלים ({count})",
+ "close": "סגור",
+ "copyReport": "העתק דוח",
+ "downloadCsv": "הורד CSV",
+ "columnModelName": "שם המודל",
+ "columnError": "שגיאה"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "התגיות עודכנו בהצלחה",
+ "updateFailed": "עדכון התגיות נכשל"
+ },
+ "validation": {
+ "maxLength": "תגית לא תעלה על 30 תווים",
+ "maxCount": "מותרות עד 30 תגיות",
+ "duplicate": "תגית זו כבר קיימת"
+ }
+ },
+ "initialization": {
+ "title": "מאתחל",
+ "message": "מכין את סביבת העבודה שלך...",
+ "status": "מאתחל...",
+ "estimatingTime": "מעריך זמן...",
+ "loras": {
+ "title": "מאתחל מנהל LoRA",
+ "message": "סורק ובונה מטמון LoRA. זה עשוי לקחת מספר דקות..."
+ },
+ "checkpoints": {
+ "title": "מאתחל מנהל Checkpoint",
+ "message": "סורק ובונה מטמון checkpoint. זה עשוי לקחת מספר דקות..."
+ },
+ "embeddings": {
+ "title": "מאתחל מנהל Embedding",
+ "message": "סורק ובונה מטמון embedding. זה עשוי לקחת מספר דקות..."
+ },
+ "recipes": {
+ "title": "מאתחל מנהל מתכונים",
+ "message": "טוען ומעבד מתכונים. זה עשוי לקחת מספר דקות..."
+ },
+ "statistics": {
+ "title": "מאתחל סטטיסטיקה",
+ "message": "מעבד נתוני מודלים עבור סטטיסטיקה. זה עשוי לקחת מספר דקות..."
+ },
+ "tips": {
+ "title": "טיפים וטריקים",
+ "civitai": {
+ "title": "שילוב עם Civitai",
+ "description": "חבר את חשבון Civitai שלך: בקר באווטאר הפרופיל ← הגדרות ← מפתחות API ← הוסף מפתח API, ואז הדבק אותו בהגדרות מנהל LoRA.",
+ "alt": "הגדרת API של Civitai"
+ },
+ "download": {
+ "title": "הורדה קלה",
+ "description": "השתמש בכתובות URL של Civitai כדי להוריד ולהתקין במהירות מודלים חדשים.",
+ "alt": "הורדה מ-Civitai"
+ },
+ "recipes": {
+ "title": "שמור מתכונים",
+ "description": "צור מתכונים כדי לשמור את שילובי המודלים המועדפים עליך לשימוש עתידי.",
+ "alt": "מתכונים"
+ },
+ "filter": {
+ "title": "סינון מהיר",
+ "description": "סנן מודלים לפי תגיות או סוג מודל בסיס באמצעות כפתור הסינון בכותרת.",
+ "alt": "סנן מודלים"
+ },
+ "search": {
+ "title": "חיפוש מהיר",
+ "description": "לחץ על Ctrl+F (Cmd+F ב-Mac) כדי לחפש במהירות בתצוגה הנוכחית שלך.",
+ "alt": "חיפוש מהיר"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "נמצאו {count} קבוצות כפולות",
+ "showNotification": "הצג התראת כפילויות",
+ "deleteSelected": "מחק נבחרים",
+ "exitMode": "צא ממצב",
+ "help": {
+ "identicalHashes": "hashes זהים פירושם קבצי מודל זהים, גם אם יש להם שמות או תצוגות מקדימות שונות.",
+ "keepOne": "שמור רק גרסה אחת (רצוי עם מטא-דאטה/תצוגות מקדימות טובות יותר) ומחק בבטחה את האחרות."
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "הועתק ללוח",
+ "copyFailed": "ההעתקה נכשלה"
+ },
+ "lora": {
+ "syntaxCopied": "תחביר LoRA הועתק ללוח",
+ "syntaxCopiedNoTriggerWords": "תחביר LoRA הועתק ללוח (לא נמצאו מילות טריגר)",
+ "syntaxCopiedWithTriggerWords": "תחביר LoRA עם מילות טריגר הועתק ללוח",
+ "syntaxCopiedWithTriggerWordGroups": "תחביר LoRA עם קבוצות מילות טריגר הועתק ללוח"
+ },
+ "workflow": {
+ "noSupportedNodes": "לא נמצאו צמתים נתמכים ב-workflow",
+ "communicationFailed": "התקשורת עם ComfyUI נכשלה",
+ "loraAdded": "LoRA נוסף ל-workflow",
+ "loraReplaced": "LoRA הוחלף ב-workflow",
+ "loraFailedToSend": "שליחת LoRA ל-workflow נכשלה",
+ "recipeAdded": "מתכון נוסף ל-workflow",
+ "recipeReplaced": "מתכון הוחלף ב-workflow",
+ "recipeFailedToSend": "שליחת מתכון ל-workflow נכשלה",
+ "noMatchingNodes": "אין צמתים תואמים זמינים ב-workflow הנוכחי",
+ "noTargetNodeSelected": "לא נבחר צומת יעד",
+ "modelUpdated": "מודל עודכן ב-workflow",
+ "modelFailed": "עדכון צומת המודל נכשל",
+ "embeddingAdded": "Embedding נוסף ל-workflow",
+ "embeddingFailed": "הוספת Embedding נכשלה",
+ "promptSent": "הנחיה נשלחה ל-workflow",
+ "promptFailed": "שליחת ההנחיה נכשלה"
+ },
+ "nodeSelector": {
+ "recipe": "מתכון",
+ "lora": "LoRA",
+ "embedding": "Embedding",
+ "prompt": "הנחיה",
+ "replace": "החלף",
+ "append": "הוסף",
+ "selectTargetNode": "בחר צומת יעד",
+ "sendToAll": "שלח לכל"
+ },
+ "exampleImages": {
+ "opened": "תיקיית תמונות הדוגמה נפתחה",
+ "openingFolder": "פותח תיקיית תמונות דוגמה",
+ "failedToOpen": "פתיחת תיקיית תמונות הדוגמה נכשלה",
+ "copiedPath": "הנתיב הועתק ללוח: {{path}}",
+ "clipboardFallback": "נתיב: {{path}}",
+ "copiedUri": "הקישור הועתק ללוח: {{uri}}",
+ "uriClipboardFallback": "קישור: {{uri}}",
+ "setupRequired": "אחסון תמונות דוגמה",
+ "setupDescription": "כדי להוסיף תמונות דוגמה מותאמות אישית, עליך קודם להגדיר מיקום הורדה.",
+ "setupUsage": "נתיב זה משמש הן עבור תמונות דוגמה שהורדו והן עבור תמונות מותאמות אישית.",
+ "openSettings": "פתח הגדרות"
+ }
+ },
+ "help": {
+ "title": "עזרה ומדריכים",
+ "tabs": {
+ "gettingStarted": "תחילת עבודה",
+ "updateVlogs": "בלוגי וידאו של עדכונים",
+ "documentation": "תיעוד"
+ },
+ "gettingStarted": {
+ "title": "תחילת עבודה עם מנהל LoRA"
+ },
+ "updateVlogs": {
+ "title": "עדכונים אחרונים",
+ "watchOnYouTube": "צפה ביוטיוב",
+ "playlistTitle": "פלייליסט עדכוני מנהל LoRA",
+ "playlistDescription": "צפה בכל סרטוני העדכונים המציגים את התכונות והשיפורים האחרונים."
+ },
+ "documentation": {
+ "title": "תיעוד",
+ "general": "כללי",
+ "troubleshooting": "פתרון בעיות",
+ "modelManagement": "ניהול מודלים",
+ "recipes": "מתכונים",
+ "settings": "הגדרות ותצורה",
+ "extensions": "הרחבות",
+ "newBadge": "חדש"
+ }
+ },
+ "update": {
+ "title": "בדוק עדכונים",
+ "notificationsTitle": "מרכז התראות",
+ "tabs": {
+ "updates": "עדכונים",
+ "messages": "הודעות"
+ },
+ "updateAvailable": "עדכון זמין",
+ "noChangelogAvailable": "אין יומן שינויים מפורט זמין. בדוק ב-GitHub למידע נוסף.",
+ "currentVersion": "גרסה נוכחית",
+ "newVersion": "גרסה חדשה",
+ "commit": "Commit",
+ "viewOnGitHub": "הצג ב-GitHub",
+ "updateNow": "עדכן כעת",
+ "preparingUpdate": "מכין עדכון...",
+ "changelog": "יומן שינויים",
+ "checkingUpdates": "בודק עדכונים...",
+ "checkingMessage": "אנא המתן בזמן שאנו בודקים את הגרסה האחרונה.",
+ "showNotifications": "הצג התראות עדכון",
+ "latestBadge": "עדכן",
+ "updateProgress": {
+ "preparing": "מכין עדכון...",
+ "installing": "מתקין עדכון...",
+ "completed": "העדכון הושלם בהצלחה!",
+ "failed": "העדכון נכשל: {error}"
+ },
+ "status": {
+ "updating": "מעדכן...",
+ "updated": "עודכן!",
+ "updateFailed": "העדכון נכשל"
+ },
+ "completion": {
+ "successMessage": "עודכן בהצלחה לגרסה {version}!",
+ "restartMessage": "אנא הפעל מחדש את ComfyUI או את מנהל LoRA כדי להחיל את העדכון.",
+ "reloadMessage": "ודא שאתה טוען מחדש את הדפדפן שלך הן עבור מנהל LoRA והן עבור ComfyUI."
+ },
+ "nightly": {
+ "warning": "אזהרה: גרסאות ליליות עשויות להכיל תכונות ניסיוניות ועלולות להיות לא יציבות.",
+ "enable": "הפעל עדכונים ליליים"
},
"banners": {
- "versionMismatch": {
- "title": "זוהה עדכון יישום",
- "content": "הדפדפן שלך מריץ גרסה מיושנת של מנהל LoRA ({storedVersion}). השרת עודכן לגרסה {currentVersion}. אנא רענן כדי להבטיח תפקוד תקין.",
- "refreshNow": "רענן כעת",
- "refreshingIn": "מרענן בעוד",
- "seconds": "שניות"
- },
- "communitySupport": {
- "title": "Keep LoRA Manager Thriving with Your Support ❤️",
- "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
- "supportCta": "Support on Ko-fi",
- "learnMore": "LM Civitai Extension Tutorial"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "זוהתה שחיתות במטמון"
- },
- "degraded": {
- "title": "זוהו בעיות במטמון"
- },
- "content": "{invalid} מתוך {total} רשומות מטמון אינן תקינות ({rate}). זה עלול לגרום לדגמים חסרים או לשגיאות. מומלץ לבנות מחדש את המטמון.",
- "rebuildCache": "בניית מטמון מחדש",
- "dismiss": "ביטול",
- "rebuilding": "בונה מחדש את המטמון...",
- "rebuildFailed": "נכשלה בניית המטמון מחדש: {error}",
- "retry": "נסה שוב"
- }
+ "recent": "הודעות אחרונות",
+ "empty": "אין כרגע באנרים אחרונים.",
+ "shown": "הוצג {time}",
+ "dismissed": "הוסר {time}",
+ "active": "פעיל"
}
+ },
+ "support": {
+ "title": "תמכו בפרויקט",
+ "message": "אם מנהל LoRA מועיל לך, אשמח מאוד לתמיכתך! 🙌",
+ "feedback": {
+ "title": "ספק משוב",
+ "description": "המשוב שלך עוזר לעצב עדכונים עתידיים! שתף את מחשבותיך:"
+ },
+ "links": {
+ "submitGithubIssue": "פתח בעיה ב-GitHub",
+ "joinDiscord": "הצטרף לדיסקורד",
+ "youtubeChannel": "ערוץ יוטיוב",
+ "civitaiProfile": "פרופיל Civitai",
+ "supportKofi": "תמכו ב-Ko-fi",
+ "supportPatreon": "תמכו ב-Patreon"
+ },
+ "sections": {
+ "followUpdates": "עקוב אחר עדכונים",
+ "buyMeCoffee": "קנה לי קפה",
+ "coffeeDescription": "אם תרצה לתמוך בעבודתי ישירות:",
+ "becomePatron": "הפוך לפטרון",
+ "patronDescription": "תמוך בפיתוח מתמשך עם תרומות חודשיות:",
+ "wechatSupport": "תמיכה ב-WeChat",
+ "wechatDescription": "למשתמשים בסין, ניתן לתמוך דרך WeChat:",
+ "showWechatQR": "הצג קוד QR של WeChat",
+ "hideWechatQR": "הסתר קוד QR של WeChat"
+ },
+ "footer": "תודה על השימוש במנהל LoRA! ❤️",
+ "supporters": {
+ "title": "תודה לכל התומכים",
+ "subtitle": "תודה ל־{count} תומכים שהפכו את הפרויקט הזה לאפשרי",
+ "specialThanks": "תודה מיוחדת",
+ "allSupporters": "כל התומכים",
+ "totalCount": "{count} תומכים בסך הכל"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "לא ניתן לקיים אינטראקציה עם ComfyUI במצב עצמאי",
+ "failedWorkflowInfo": "קבלת מידע על ה-workflow נכשלה",
+ "pageInitFailed": "אתחול דף {pageType} נכשל. אנא טען מחדש.",
+ "statisticsLoadFailed": "טעינת נתוני הסטטיסטיקה נכשלה"
+ },
+ "loras": {
+ "copyOnlyForLoras": "העתקת תחביר זמינה רק עבור LoRAs",
+ "noLorasSelected": "לא נבחרו LoRAs",
+ "missingDataForLoras": "חסרים נתונים עבור {count} LoRAs",
+ "noValidLorasToCopy": "אין LoRAs חוקיים להעתקה",
+ "sendOnlyForLoras": "שליחה ל-workflow זמינה רק עבור LoRAs",
+ "noValidLorasToSend": "אין LoRAs חוקיים לשליחה",
+ "downloadSuccessful": "LoRAs הורדו בהצלחה",
+ "allDownloadSuccessful": "כל {count} ה-LoRAs הורדו בהצלחה",
+ "downloadPartialSuccess": "הורדו {completed} מתוך {total} LoRAs",
+ "downloadPartialWithAccess": "הורדו {completed} מתוך {total} LoRAs. {accessFailures} נכשלו עקב הגבלות גישה. בדוק את מפתח ה-API שלך בהגדרות או את סטטוס הגישה המוקדמת.",
+ "pleaseSelectVersion": "אנא בחר גרסה",
+ "versionExists": "גרסה זו כבר קיימת בספרייה שלך",
+ "downloadCompleted": "ההורדה הושלמה בהצלחה",
+ "downloadSkippedByBaseModel": "ההורדה דולגה כי מודל הבסיס {baseModel} מוחרג",
+ "autoOrganizeSuccess": "הארגון האוטומטי הושלם בהצלחה עבור {count} {type}",
+ "autoOrganizePartialSuccess": "הארגון האוטומטי הושלם עם {success} שהועברו, {failures} שנכשלו מתוך {total} מודלים",
+ "autoOrganizeFailed": "הארגון האוטומטי נכשל: {error}",
+ "noModelsSelected": "לא נבחרו מודלים"
+ },
+ "recipes": {
+ "fetchFailed": "אחזור מתכונים נכשל: {message}",
+ "reloadFailed": "טעינה מחדש של {modelType}s נכשלה: {message}",
+ "loadFailed": "טעינת {modelType}s נכשלה: {message}",
+ "refreshComplete": "הרענון הושלם",
+ "refreshFailed": "רענון המתכונים נכשל: {message}",
+ "syncComplete": "הסנכרון הושלם",
+ "syncFailed": "סנכרון המתכונים נכשל: {message}",
+ "updateFailed": "עדכון המתכון נכשל: {error}",
+ "updateError": "שגיאה בעדכון המתכון: {message}",
+ "nameSaved": "המתכון \"{name}\" נשמר בהצלחה",
+ "nameUpdated": "שם המתכון עודכן בהצלחה",
+ "tagsUpdated": "תגיות המתכון עודכנו בהצלחה",
+ "sourceUrlUpdated": "כתובת ה-URL המקורית עודכנה בהצלחה",
+ "promptUpdated": "הפרומפט עודכן בהצלחה",
+ "negativePromptUpdated": "הפרומפט השלילי עודכן בהצלחה",
+ "promptEditorHint": "לחץ Enter לשמירה, Shift+Enter לשורה חדשה",
+ "noRecipeId": "אין מזהה מתכון זמין",
+ "sendToWorkflowFailed": "נכשל שליחת המתכון ל-workflow: {message}",
+ "copyFailed": "שגיאה בהעתקת תחביר המתכון: {message}",
+ "createError": "שגיאה ביצירת המתכון:{message}",
+ "createFailed": "יצירת המתכון נכשלה:{error}",
+ "createMissingData": "חסרים נתונים נדרשים ליצירת המתכון",
+ "created": "המתכון נוצר בהצלחה",
+ "noMissingLoras": "אין LoRAs חסרים להורדה",
+ "missingLorasInfoFailed": "קבלת מידע עבור LoRAs חסרים נכשלה",
+ "preparingForDownloadFailed": "שגיאה בהכנת LoRAs להורדה",
+ "enterLoraName": "אנא הזן שם LoRA או תחביר",
+ "reconnectedSuccessfully": "LoRA קושר מחדש בהצלחה",
+ "reconnectFailed": "שגיאה בקישור מחדש של LoRA: {message}",
+ "noPromptToSend": "אין הנחיה לשליחה",
+ "cannotSend": "לא ניתן לשלוח מתכון: חסר מזהה מתכון",
+ "sendFailed": "שליחת המתכון ל-workflow נכשלה",
+ "sendError": "שגיאה בשליחת המתכון ל-workflow",
+ "missingCheckpointPath": "נתיב ה-checkpoint אינו זמין",
+ "missingCheckpointInfo": "חסרים פרטי checkpoint",
+ "downloadCheckpointFailed": "הורדת checkpoint נכשלה: {message}",
+ "cannotDelete": "לא ניתן למחוק מתכון: חסר מזהה מתכון",
+ "deleteConfirmationError": "שגיאה בהצגת אישור המחיקה",
+ "deletedSuccessfully": "המתכון נמחק בהצלחה",
+ "deleteFailed": "שגיאה במחיקת המתכון: {message}",
+ "cannotShare": "לא ניתן לשתף מתכון: חסר מזהה מתכון",
+ "preparingForSharing": "מכין מתכון לשיתוף...",
+ "downloadStarted": "הורדת המתכון החלה",
+ "shareError": "שגיאה בשיתוף המתכון: {message}",
+ "sharePreparationError": "שגיאה בהכנת המתכון לשיתוף",
+ "selectImageFirst": "אנא בחר תמונה תחילה",
+ "enterRecipeName": "אנא הזן שם מתכון",
+ "processingError": "שגיאת עיבוד: {message}",
+ "folderBrowserError": "שגיאה בטעינת דפדפן התיקיות: {message}",
+ "recipeSaveFailed": "שמירת המתכון נכשלה: {error}",
+ "recipeSaved": "Recipe saved successfully",
+ "importFailed": "הייבוא נכשל: {message}",
+ "folderTreeFailed": "טעינת עץ התיקיות נכשלה",
+ "folderTreeError": "שגיאה בטעינת עץ התיקיות",
+ "batchImportFailed": "Failed to start batch import: {message}",
+ "batchImportCancelling": "Cancelling batch import...",
+ "batchImportCancelFailed": "Failed to cancel batch import: {message}",
+ "batchImportNoUrls": "Please enter at least one URL or file path",
+ "batchImportNoDirectory": "Please enter a directory path",
+ "batchImportBrowseFailed": "Failed to browse directory: {message}",
+ "batchImportDirectorySelected": "Directory selected: {path}",
+ "noRecipesSelected": "לא נבחרו מתכונים",
+ "repairBulkComplete": "התיקון הושלם: {repaired} תוקנו, {skipped} דולגו (מתוך {total})",
+ "repairBulkSkipped": "אין צורך בתיקון עבור {total} המתכונים הנבחרים",
+ "repairBulkFailed": "תיקון המתכונים הנבחרים נכשל: {message}",
+ "reimporting": "מייבא מתכון מחדש מהמקור...",
+ "reimportSuccess": "המתכון יובא מחדש בהצלחה",
+ "reimportBulkComplete": "ייבוא מחדש הושלם: {completed} יובאו, {failed} נכשלו (מתוך {total})",
+ "reimportBulkFailed": "ייבוא מחדש של חלק מהמתכונים נכשל",
+ "noMissingLorasInSelection": "לא נמצאו LoRAs חסרים במתכונים שנבחרו",
+ "noLoraRootConfigured": "תיקיית השורש של LoRA לא מוגדרת. אנא הגדר תיקיית שורש LoRA ברירת מחדל בהגדרות."
+ },
+ "models": {
+ "noModelsSelected": "לא נבחרו מודלים",
+ "deletedSuccessfully": "נמחקו בהצלחה {count} {type}(ים)",
+ "deleteFailed": "שגיאה: {error}",
+ "deleteFailedGeneral": "מחיקת המודלים נכשלה",
+ "selectedAdditional": "נבחרו {count} {type}(ים) נוספים",
+ "marqueeSelectionComplete": "נבחרו {count} {type}(ים) בבחירת מלבן",
+ "refreshMetadataFailed": "רענון המטא-דאטה נכשל",
+ "nameCannotBeEmpty": "שם המודל אינו יכול להיות ריק",
+ "nameUpdatedSuccessfully": "שם המודל עודכן בהצלחה",
+ "nameUpdateFailed": "עדכון שם המודל נכשל",
+ "baseModelUpdated": "מודל הבסיס עודכן בהצלחה",
+ "baseModelUpdateFailed": "עדכון מודל הבסיס נכשל",
+ "baseModelNotSelected": "אנא בחר מודל בסיס",
+ "bulkBaseModelUpdating": "מעדכן מודל בסיס עבור {count} מודל(ים)...",
+ "bulkBaseModelUpdateSuccess": "עודכן בהצלחה מודל הבסיס עבור {count} מודל(ים)",
+ "bulkBaseModelUpdatePartial": "עודכנו {success} מודל(ים), נכשלו {failed} מודל(ים)",
+ "bulkBaseModelUpdateFailed": "עדכון מודל הבסיס עבור המודלים שנבחרו נכשל",
+ "skipMetadataRefreshUpdating": "מעדכן דגל רענון מטא-נתונים עבור {count} מודל(ים)...",
+ "skipMetadataRefreshSet": "רענון מטא-נתונים דולג עבור {count} מודל(ים)",
+ "skipMetadataRefreshCleared": "רענון מטא-נתונים התחדש עבור {count} מודל(ים)",
+ "skipMetadataRefreshPartial": "{success} מודל(ים) עודכנו, {failed} נכשלו",
+ "skipMetadataRefreshFailed": "נכשל בעדכון דגל רענון מטא-נתונים עבור המודלים הנבחרים",
+ "bulkContentRatingUpdating": "מעדכן דירוג תוכן עבור {count} מודלים...",
+ "bulkContentRatingSet": "דירוג התוכן הוגדר ל-{level} עבור {count} מודלים",
+ "bulkContentRatingPartial": "דירוג התוכן הוגדר ל-{level} עבור {success} מודלים, {failed} נכשלו",
+ "bulkContentRatingFailed": "עדכון דירוג התוכן עבור המודלים שנבחרו נכשל",
+ "bulkFavoriteUpdating": "מוסיף {count} דגמים למועדפים...",
+ "bulkUnfavoriteUpdating": "מסיר {count} דגמים ממועדפים...",
+ "bulkFavoritePartialAdded": "{success} דגמים נוספו למועדפים, {failed} נכשלו",
+ "bulkFavoritePartialRemoved": "{success} דגמים הוסרו ממועדפים, {failed} נכשלו",
+ "bulkFavoriteFailed": "עדכון סטטוס מועדפים נכשל",
+ "bulkUpdatesChecking": "בודק עדכונים עבור {type} שנבחרו...",
+ "bulkUpdatesSuccess": "יש עדכונים עבור {count} {type} שנבחרו",
+ "bulkUpdatesNone": "לא נמצאו עדכונים עבור {type} שנבחרו",
+ "bulkUpdatesMissing": "ה-{type} שנבחרו אינם מקושרים לעדכוני Civitai",
+ "bulkUpdatesPartialMissing": "דילג על {missing} {type} שנבחרו ללא קישור Civitai",
+ "bulkUpdatesFailed": "בדיקת העדכונים עבור {type} שנבחרו נכשלה: {message}",
+ "invalidCharactersRemoved": "תווים לא חוקיים הוסרו משם הקובץ",
+ "filenameCannotBeEmpty": "שם הקובץ אינו יכול להיות ריק",
+ "renameFailed": "שינוי שם הקובץ נכשל: {message}",
+ "moveFailed": "העברת המודל(ים) נכשלה: {message}",
+ "pleaseSelectRoot": "אנא בחר ספריית שורש של {type}",
+ "nameTooLong": "שם המודל מוגבל ל-100 תווים",
+ "verificationAlreadyDone": "קבוצה זו כבר אומתה",
+ "verificationCompleteMismatch": "האימות הושלם. ל-{count} קובץ(ים) יש hashes שונים בפועל.",
+ "verificationCompleteSuccess": "האימות הושלם. כל הקבצים אושרו ככפולים.",
+ "verificationFailed": "אימות ה-hashes נכשל: {message}",
+ "noTagsToAdd": "אין תגיות להוספה",
+ "bulkTagsUpdating": "מעדכן תגיות עבור {count} מודלים...",
+ "tagsAddedSuccessfully": "נוספו בהצלחה {tagCount} תגית(ות) ל-{count} {type}(ים)",
+ "tagsReplacedSuccessfully": "הוחלפו בהצלחה תגיות עבור {count} {type}(ים) ב-{tagCount} תגית(ות)",
+ "tagsAddFailed": "הוספת תגיות ל-{count} מודל(ים) נכשלה",
+ "tagsReplaceFailed": "החלפת תגיות עבור {count} מודל(ים) נכשלה",
+ "bulkTagsAddFailed": "הוספת תגיות למודלים נכשלה",
+ "bulkTagsReplaceFailed": "החלפת תגיות למודלים נכשלה"
+ },
+ "search": {
+ "atLeastOneOption": "יש לבחור לפחות אפשרות חיפוש אחת"
+ },
+ "settings": {
+ "loraRootsFailed": "טעינת שורשי LoRA נכשלה: {message}",
+ "checkpointRootsFailed": "טעינת שורשי checkpoint נכשלה: {message}",
+ "unetRootsFailed": "טעינת שורשי Diffusion Model נכשלה: {message}",
+ "embeddingRootsFailed": "טעינת שורשי embedding נכשלה: {message}",
+ "mappingsUpdated": "מיפויי נתיבי מודל בסיס עודכנו ({count} מיפוי{plural})",
+ "mappingsCleared": "מיפויי נתיבי מודל בסיס נוקו",
+ "mappingSaveFailed": "שמירת מיפויי מודל בסיס נכשלה: {message}",
+ "downloadTemplatesUpdated": "תבניות נתיב הורדה עודכנו",
+ "downloadTemplatesFailed": "שמירת תבניות נתיב הורדה נכשלה: {message}",
+ "recipesPathUpdated": "נתיב אחסון המתכונים עודכן",
+ "recipesPathSaveFailed": "עדכון נתיב אחסון המתכונים נכשל: {message}",
+ "settingsUpdated": "הגדרות עודכנו: {setting}",
+ "compactModeToggled": "מצב קומפקטי {state}",
+ "settingSaveFailed": "שמירת ההגדרה נכשלה: {message}",
+ "displayDensitySet": "צפיפות התצוגה הוגדרה ל-{density}",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "שינוי השפה נכשל: {message}",
+ "cacheCleared": "קבצי המטמון נוקו בהצלחה. המטמון ייבנה מחדש בפעולה הבאה.",
+ "cacheClearFailed": "ניקוי המטמון נכשל: {error}",
+ "cacheClearError": "שגיאה בניקוי המטמון: {message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "המסננים נוקו",
+ "noCustomFilterToClear": "אין מסנן מותאם אישית לניקוי",
+ "noActiveFilters": "אין מסננים פעילים לשמירה"
+ },
+ "presets": {
+ "created": "קביעה מראש \"{name}\" נוצרה",
+ "deleted": "קביעה מראש \"{name}\" נמחקה",
+ "applied": "קביעה מראש \"{name}\" הופעלה",
+ "overwritten": "קביעה מראש \"{name}\" נדרסה",
+ "restored": "ברירות המחדל שוחזרו"
+ },
+ "error": {
+ "presetNameEmpty": "שם קביעה מראש לא יכול להיות ריק",
+ "presetNameTooLong": "שם קביעה מראש חייב להיות {max} תווים או פחות",
+ "presetNameInvalidChars": "שם קביעה מראש מכיל תווים לא חוקיים",
+ "presetNameExists": "קביעה מראש עם שם זה כבר קיימת",
+ "maxPresetsReached": "מותר מקסימום {max} קביעות מראש. מחק אחת כדי להוסיף עוד.",
+ "presetNotFound": "קביעה מראש לא נמצאה",
+ "invalidPreset": "נתוני קביעה מראש לא חוקיים",
+ "deletePresetFailed": "מחיקת קביעה מראש נכשלה",
+ "applyPresetFailed": "הפעלת קביעה מראש נכשלה"
+ },
+ "downloads": {
+ "imagesCompleted": "{action} תמונות הדוגמה הושלם",
+ "imagesFailed": "{action} תמונות הדוגמה נכשל",
+ "loadError": "שגיאה בטעינת הורדות: {message}",
+ "downloadError": "שגיאת הורדה: {message}"
+ },
+ "import": {
+ "folderTreeFailed": "טעינת עץ התיקיות נכשלה",
+ "folderTreeError": "שגיאה בטעינת עץ התיקיות",
+ "imagesImported": "תמונות הדוגמה יובאו בהצלחה",
+ "imagesPartial": "{success} תמונה/ות יובאו, {failed} נכשלו",
+ "importFailed": "ייבוא תמונות הדוגמה נכשל: {message}"
+ },
+ "triggerWords": {
+ "loadFailed": "לא ניתן היה לטעון מילים מאומנות",
+ "tooLong": "מילת טריגר לא תעלה על 500 מילים",
+ "tooMany": "מותרות עד 100 מילות טריגר",
+ "alreadyExists": "מילת טריגר זו כבר קיימת",
+ "updateSuccess": "מילות הטריגר עודכנו בהצלחה",
+ "updateFailed": "עדכון מילות הטריגר נכשל",
+ "copyFailed": "ההעתקה נכשלה"
+ },
+ "virtual": {
+ "loadFailed": "טעינת הפריטים נכשלה",
+ "loadMoreFailed": "טעינת פריטים נוספים נכשלה",
+ "loadPositionFailed": "טעינת פריטים במיקום זה נכשלה"
+ },
+ "bulk": {
+ "unableToSelectAll": "לא ניתן לבחור את כל הפריטים"
+ },
+ "duplicates": {
+ "findFailed": "מציאת כפילויות נכשלה: {message}",
+ "noDuplicatesFound": "לא נמצאו {type} כפולים",
+ "noItemsSelected": "לא נבחרו {type} למחיקה",
+ "deleteError": "שגיאה: {message}",
+ "deleteSuccess": "נמחקו בהצלחה {count} {type}",
+ "deleteFailed": "מחיקת {type} נכשלה: {message}"
+ },
+ "controls": {
+ "reloadFailed": "טעינה מחדש של {pageType} נכשלה: {message}",
+ "refreshFailed": "{action} של {pageType} נכשל: {message}",
+ "fetchMetadataFailed": "אחזור המטא-דאטה נכשל: {message}",
+ "clearFilterFailed": "ניקוי המסנן המותאם אישית נכשל: {message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "דירוג התוכן הוגדר ל-{level}",
+ "contentRatingFailed": "הגדרת דירוג התוכן נכשלה: {message}",
+ "relinkSuccess": "המודל קושר מחדש ל-Civitai בהצלחה",
+ "relinkFailed": "שגיאה: {message}",
+ "fetchMetadataFirst": "אנא אחזר מטא-דאטה מ-CivitAI תחילה",
+ "noCivitaiInfo": "אין מידע מ-CivitAI זמין",
+ "missingHash": "ה-hash של המודל אינו זמין"
+ },
+ "exampleImages": {
+ "pathUpdated": "נתיב תמונות הדוגמה עודכן בהצלחה",
+ "pathUpdateFailed": "עדכון נתיב תמונות הדוגמה נכשל: {message}",
+ "downloadInProgress": "ההורדה כבר בתהליך",
+ "enterLocationFirst": "אנא הזן מיקום הורדה תחילה",
+ "downloadStarted": "הורדת תמונות הדוגמה החלה",
+ "downloadStartFailed": "התחלת ההורדה נכשלה: {error}",
+ "downloadPaused": "ההורדה הושהתה",
+ "pauseFailed": "השהיית ההורדה נכשלה: {error}",
+ "downloadResumed": "ההורדה חודשה",
+ "resumeFailed": "חידוש ההורדה נכשל: {error}",
+ "downloadStopped": "ההורדה בוטלה",
+ "stopFailed": "נכשל בביטול ההורדה: {error}",
+ "deleted": "תמונת הדוגמה נמחקה",
+ "deleteFailed": "מחיקת תמונת הדוגמה נכשלה",
+ "setPreviewFailed": "הגדרת תמונת התצוגה המקדימה נכשלה"
+ },
+ "api": {
+ "fetchFailed": "אחזור {type}s נכשל: {message}",
+ "reloadFailed": "טעינה מחדש של {type}s נכשלה: {message}",
+ "deleteSuccess": "{type} נמחק בהצלחה",
+ "deleteFailed": "מחיקת {type} נכשלה: {message}",
+ "excludeSuccess": "{type} הוחרג בהצלחה",
+ "excludeFailed": "החרגת {type} נכשלה: {message}",
+ "restoreSuccess": "{type} שוחזר בהצלחה",
+ "restoreFailed": "שחזור {type} נכשל: {message}",
+ "fileNameUpdated": "שם הקובץ עודכן בהצלחה",
+ "fileRenameFailed": "שינוי שם הקובץ נכשל: {error}",
+ "previewUpdated": "התצוגה המקדימה עודכנה בהצלחה",
+ "previewUploadFailed": "העלאת תמונת התצוגה המקדימה נכשלה",
+ "refreshComplete": "{action} הושלם",
+ "refreshFailed": "{action} של {type}s נכשל",
+ "metadataRefreshed": "המטא-דאטה רועננה בהצלחה",
+ "metadataRefreshFailed": "רענון המטא-דאטה נכשל: {message}",
+ "metadataUpdateComplete": "עדכון המטא-דאטה הושלם",
+ "operationCancelled": "הפעולה בוטלה על ידי המשתמש",
+ "operationCancelledPartial": "הפעולה בוטלה. {success} פריטים עובדו.",
+ "metadataFetchFailed": "אחזור המטא-דאטה נכשל: {message}",
+ "bulkMetadataCompleteAll": "רועננו בהצלחה כל {count} ה-{type}s",
+ "bulkMetadataCompletePartial": "רועננו {success} מתוך {total} {type}s",
+ "bulkMetadataCompleteNone": "רענון המטא-דאטה נכשל עבור כל ה-{type}s",
+ "bulkMetadataFailureDetails": "רענונים שנכשלו:\n{failures}",
+ "bulkMetadataFailed": "רענון המטא-דאטה נכשל: {message}",
+ "moveNotSupported": "העברת {type}s אינה נתמכת",
+ "alreadyInFolder": "{type} כבר נמצא בתיקייה שנבחרה",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type} הועבר בהצלחה",
+ "bulkMoveNotSupported": "העברת {type}s אינה נתמכת",
+ "allAlreadyInFolder": "כל ה-{type}s שנבחרו כבר נמצאים בתיקיית היעד",
+ "bulkMovePartial": "הועברו {successCount} {type}s, {failureCount} נכשלו",
+ "bulkMoveFailures": "העברות שנכשלו:\n{failures}",
+ "bulkMoveSuccess": "הועברו בהצלחה {successCount} {type}s",
+ "exampleImagesDownloadSuccess": "תמונות הדוגמה הורדו בהצלחה!",
+ "exampleImagesDownloadFailed": "הורדת תמונות הדוגמה נכשלה: {message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "הועתק ללוח",
+ "downloadStarted": "ההורדה החלה"
+ }
+ },
+ "doctor": {
+ "kicker": "אבחון מערכת",
+ "title": "דוקטור",
+ "buttonTitle": "הפעלת אבחון ותיקונים נפוצים",
+ "loading": "בודק את הסביבה...",
+ "footer": "ייצא חבילת אבחון אם הבעיה עדיין נמשכת לאחר התיקון.",
+ "summary": {
+ "idle": "הרץ בדיקת תקינות עבור הגדרות, שלמות המטמון ועקביות הממשק.",
+ "ok": "לא נמצאו בעיות פעילות בסביבה הנוכחית.",
+ "warning": "נמצאה/נמצאו {count} בעיה/בעיות. את רובן אפשר לתקן ישירות מלוח זה.",
+ "error": "יש לטפל ב-{count} בעיה/בעיות לפני שהאפליקציה תהיה תקינה לחלוטין."
+ },
+ "status": {
+ "ok": "תקין",
+ "warning": "דורש תשומת לב",
+ "error": "נדרשת פעולה"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API Key"
+ },
+ "cache_health": {
+ "title": "Model Cache Health"
+ },
+ "filename_conflicts": {
+ "title": "Duplicate Filename Conflicts"
+ },
+ "ui_version": {
+ "title": "UI Version"
+ }
+ },
+ "actions": {
+ "runAgain": "הפעל שוב",
+ "exportBundle": "ייצוא חבילה",
+ "open-settings": "Open Settings",
+ "open-settings-syntax-format": "Switch to Full Path Syntax",
+ "repair-cache": "Rebuild Cache",
+ "resolve-filename-conflicts": "Resolve Conflicts",
+ "reload-page": "Reload UI"
+ },
+ "labels": {
+ "conflicts": "Conflicts",
+ "version": "Version"
+ },
+ "toast": {
+ "loadFailed": "טעינת האבחון נכשלה: {message}",
+ "repairSuccess": "בניית המטמון מחדש הושלמה.",
+ "repairFailed": "בניית המטמון מחדש נכשלה: {message}",
+ "exportSuccess": "חבילת האבחון יוצאה.",
+ "exportFailed": "ייצוא חבילת האבחון נכשל: {message}",
+ "conflictsResolved": "נפתרו {count} התנגשויות בשמות קבצים.",
+ "conflictsResolveFailed": "פתרון התנגשויות שמות קבצים נכשל: {message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "פתור התנגשויות בשמות קבצים",
+ "message": "שינוי שם על ידי הוספת האש באורך 4 תווים לכל שם קובץ כפול.",
+ "note": "פעולה זו משנה שמות של קבצים בדיסק. ייתכן שיהיה צורך לעדכן הפניות למודלים בזרימות עבודה קיימות אם אתה משתמש בפורמט התחביר A1111.",
+ "detail": "דוגמה: filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "ישנה שם של {count} קבצים ב-{groups} קבוצות כפולות",
+ "confirm": "שנה שמות קבצים",
+ "cancel": "ביטול"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "זוהה עדכון יישום",
+ "content": "הדפדפן שלך מריץ גרסה מיושנת של מנהל LoRA ({storedVersion}). השרת עודכן לגרסה {currentVersion}. אנא רענן כדי להבטיח תפקוד תקין.",
+ "refreshNow": "רענן כעת",
+ "refreshingIn": "מרענן בעוד",
+ "seconds": "שניות"
+ },
+ "communitySupport": {
+ "title": "Keep LoRA Manager Thriving with Your Support ❤️",
+ "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
+ "supportCta": "Support on Ko-fi",
+ "learnMore": "LM Civitai Extension Tutorial"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "זוהתה שחיתות במטמון"
+ },
+ "degraded": {
+ "title": "זוהו בעיות במטמון"
+ },
+ "content": "{invalid} מתוך {total} רשומות מטמון אינן תקינות ({rate}). זה עלול לגרום לדגמים חסרים או לשגיאות. מומלץ לבנות מחדש את המטמון.",
+ "rebuildCache": "בניית מטמון מחדש",
+ "dismiss": "ביטול",
+ "rebuilding": "בונה מחדש את המטמון...",
+ "rebuildFailed": "נכשלה בניית המטמון מחדש: {error}",
+ "retry": "נסה שוב"
+ }
+ }
}
diff --git a/locales/ja.json b/locales/ja.json
index 5d23c720..b57bcd67 100644
--- a/locales/ja.json
+++ b/locales/ja.json
@@ -1,2167 +1,2171 @@
{
- "common": {
- "cancel": "キャンセル",
- "confirm": "確認",
- "actions": {
- "save": "保存",
- "cancel": "キャンセル",
- "confirm": "確認",
- "delete": "削除",
- "move": "移動",
- "refresh": "更新",
- "back": "戻る",
- "next": "次へ",
- "backToTop": "トップへ戻る",
- "settings": "設定",
- "help": "ヘルプ",
- "add": "追加",
- "close": "閉じる",
- "menu": "メニュー",
- "remove": "削除",
- "change": "変更"
- },
- "status": {
- "loading": "読み込み中...",
- "cancelling": "キャンセル中...",
- "unknown": "不明",
- "date": "日付",
- "version": "バージョン",
- "enabled": "有効",
- "disabled": "無効"
- },
- "language": {
- "select": "言語",
- "select_help": "インターフェースの言語を選択してください",
- "english": "English",
- "chinese_simplified": "中文(简体)",
- "chinese_traditional": "中文(繁体)",
- "russian": "Русский",
- "german": "Deutsch",
- "japanese": "日本語",
- "korean": "한국어",
- "french": "Français",
- "spanish": "Español",
- "Hebrew": "עברית"
- },
- "fileSize": {
- "zero": "0バイト",
- "bytes": "バイト",
- "kb": "KB",
- "mb": "MB",
- "gb": "GB",
- "tb": "TB"
- }
+ "common": {
+ "cancel": "キャンセル",
+ "confirm": "確認",
+ "actions": {
+ "save": "保存",
+ "cancel": "キャンセル",
+ "confirm": "確認",
+ "delete": "削除",
+ "move": "移動",
+ "refresh": "更新",
+ "back": "戻る",
+ "next": "次へ",
+ "backToTop": "トップへ戻る",
+ "settings": "設定",
+ "help": "ヘルプ",
+ "add": "追加",
+ "close": "閉じる",
+ "menu": "メニュー",
+ "remove": "削除",
+ "change": "変更"
},
- "onboarding": {
- "languageSelection": {
- "title": "LoRA Managerへようこそ",
- "continue": "続行",
- "changeFailed": "言語の変更に失敗しました:{message}"
- },
- "tutorial": {
- "skipTutorial": "チュートリアルをスキップ",
- "back": "戻る",
- "next": "次へ",
- "finish": "完了"
- },
- "steps": {
- "fetch": {
- "title": "モデルメタデータの取得",
- "content": "取得ボタンをクリックして、Civitaiからモデルのメタデータとプレビュー画像をダウンロードします。"
- },
- "download": {
- "title": "新しいモデルのダウンロード",
- "content": "ダウンロードボタンを使って、CivitaiのURLから直接モデルをダウンロードできます。"
- },
- "bulk": {
- "title": "一括操作",
- "content": "このボタンをクリックするか、Bキーを押して一括モードに入ります。複数のモデルを選択して一括操作が可能です。Ctrl+Aで表示中のモデルをすべて選択できます。"
- },
- "searchOptions": {
- "title": "検索オプション",
- "content": "このボタンをクリックして、検索対象フィールド(ファイル名、モデル名、タグ、作成者名)を設定できます。検索範囲をカスタマイズしましょう。"
- },
- "filter": {
- "title": "モデルのフィルタ",
- "content": "フィルタを使って、ベースモデルタイプ(SD1.5、SDXL、Fluxなど)や特定のタグでモデルを絞り込めます。"
- },
- "breadcrumb": {
- "title": "パンくずナビゲーション",
- "content": "パンくずナビゲーションは現在のパスを表示し、フォルダ間を素早く移動できます。フォルダ名をクリックすると直接ジャンプできます。"
- },
- "modelCards": {
- "title": "モデルカード",
- "content": "モデルカードをクリックすると詳細情報の表示やメタデータの編集ができます。編集可能な項目はホバー時に鉛筆アイコンが表示されます。"
- },
- "contextMenu": {
- "title": "コンテキストメニュー",
- "content": "モデルカードを右クリックすると追加の操作ができるコンテキストメニューが表示されます。"
- }
- }
+ "status": {
+ "loading": "読み込み中...",
+ "cancelling": "キャンセル中...",
+ "unknown": "不明",
+ "date": "日付",
+ "version": "バージョン",
+ "enabled": "有効",
+ "disabled": "無効"
},
- "modelCard": {
- "actions": {
- "addToFavorites": "お気に入りに追加",
- "removeFromFavorites": "お気に入りから削除",
- "viewOnCivitai": "Civitaiで表示",
- "notAvailableFromCivitai": "Civitaiでは利用できません",
- "sendToWorkflow": "ComfyUIに送信(クリック:追加、Shift+クリック:置換)",
- "copyLoRASyntax": "LoRA構文をコピー",
- "checkpointNameCopied": "checkpointの名前をコピーしました",
- "toggleBlur": "ぼかしの切り替え",
- "show": "表示",
- "openExampleImages": "例画像フォルダを開く",
- "replacePreview": "プレビューを置換",
- "copyCheckpointName": "checkpoint名をコピー",
- "copyEmbeddingName": "embedding名をコピー",
- "embeddingNameCopied": "Embedding構文をコピーしました",
- "sendCheckpointToWorkflow": "ComfyUIに送信",
- "sendEmbeddingToWorkflow": "ComfyUIに送信"
- },
- "nsfw": {
- "matureContent": "成人向けコンテンツ",
- "xxxRated": "XXX指定コンテンツ",
- "xRated": "X指定コンテンツ",
- "rRated": "R指定コンテンツ"
- },
- "favorites": {
- "added": "お気に入りに追加されました",
- "removed": "お気に入りから削除されました",
- "updateFailed": "お気に入り状態の更新に失敗しました"
- },
- "sendToWorkflow": {
- "checkpointNotImplemented": "checkpointをワークフローに送信 - 実装予定の機能",
- "missingPath": "このカードのモデルパスを特定できません"
- },
- "exampleImages": {
- "checkError": "例画像の確認中にエラーが発生しました",
- "missingHash": "モデルハッシュ情報がありません。",
- "noRemoteImagesAvailable": "このモデルのCivitaiでのリモート例画像は利用できません"
- },
- "badges": {
- "update": "アップデート",
- "updateAvailable": "アップデートがあります",
- "skipRefresh": "メタデータの更新がスキップされました"
- },
- "usage": {
- "timesUsed": "使用回数"
- },
- "footer": {
- "versionCount": "{count} バージョン",
- "viewAllVersions": "ローカルの全バージョンを表示"
- }
+ "language": {
+ "select": "言語",
+ "select_help": "インターフェースの言語を選択してください",
+ "english": "English",
+ "chinese_simplified": "中文(简体)",
+ "chinese_traditional": "中文(繁体)",
+ "russian": "Русский",
+ "german": "Deutsch",
+ "japanese": "日本語",
+ "korean": "한국어",
+ "french": "Français",
+ "spanish": "Español",
+ "Hebrew": "עברית"
},
- "globalContextMenu": {
- "downloadExampleImages": {
- "label": "例画像をダウンロード",
- "missingPath": "例画像をダウンロードする前にダウンロード場所を設定してください。",
- "unavailable": "例画像のダウンロードはまだ利用できません。ページの読み込みが完了してから再度お試しください。"
- },
- "checkModelUpdates": {
- "label": "アップデートを確認",
- "loading": "{type} のアップデートを確認中…",
- "success": "{type} のアップデートが {count} 件見つかりました",
- "none": "すべての {type} は最新です",
- "error": "{type} のアップデート確認に失敗しました: {message}"
- },
- "cleanupExampleImages": {
- "label": "例画像フォルダをクリーンアップ",
- "success": "{count} 個のフォルダを削除フォルダに移動しました",
- "none": "クリーンアップが必要な例画像フォルダはありません",
- "partial": "クリーンアップが完了しましたが、{failures} 個のフォルダはスキップされました",
- "error": "例画像フォルダのクリーンアップに失敗しました:{message}"
- },
- "fetchMissingLicenses": {
- "label": "Refresh license metadata",
- "loading": "Refreshing license metadata for {typePlural}...",
- "success": "Updated license metadata for {count} {typePlural}",
- "none": "All {typePlural} already have license metadata",
- "error": "Failed to refresh license metadata for {typePlural}: {message}"
- },
- "repairRecipes": {
- "label": "レシピデータの修復",
- "loading": "レシピデータを修復中...",
- "success": "{count} 件のレシピを正常に修復しました。",
- "cancelled": "修復がキャンセルされました。{count}個のレシピが修復されました。",
- "error": "レシピの修復に失敗しました: {message}"
- },
- "manageExcludedModels": {
- "label": "除外モデルを管理"
- },
- "groupByModel": {
- "label": "モデルでグループ化"
- }
+ "fileSize": {
+ "zero": "0バイト",
+ "bytes": "バイト",
+ "kb": "KB",
+ "mb": "MB",
+ "gb": "GB",
+ "tb": "TB"
+ }
+ },
+ "onboarding": {
+ "languageSelection": {
+ "title": "LoRA Managerへようこそ",
+ "continue": "続行",
+ "changeFailed": "言語の変更に失敗しました:{message}"
},
- "header": {
- "appTitle": "LoRA Manager",
- "navigation": {
- "loras": "LoRA",
- "recipes": "レシピ",
- "checkpoints": "Checkpoint",
- "embeddings": "Embedding",
- "statistics": "統計"
- },
- "search": {
- "placeholder": "検索",
- "options": "検索オプション",
- "searchIn": "検索対象:",
- "notAvailable": "統計ページでは検索は利用できません",
- "filters": {
- "filename": "ファイル名",
- "modelname": "モデル名",
- "tags": "タグ",
- "creator": "作成者",
- "title": "レシピタイトル",
- "loraName": "LoRAファイル名",
- "loraModel": "LoRAモデル名",
- "prompt": "プロンプト"
- }
- },
- "filter": {
- "title": "モデルをフィルタ",
- "presets": "プリセット",
- "savePreset": "現在のアクティブフィルタを新しいプリセットとして保存。",
- "savePresetDisabledActive": "保存できません:プリセットがすでにアクティブです。フィルタを変更して新しいプリセットを保存してください",
- "savePresetDisabledNoFilters": "先にフィルタを選択してからプリセットとして保存",
- "savePresetPrompt": "プリセット名を入力:",
- "presetClickTooltip": "プリセット \"{name}\" を適用するにはクリック",
- "presetDeleteTooltip": "プリセットを削除",
- "presetDeleteConfirm": "プリセット \"{name}\" を削除しますか?",
- "presetDeleteConfirmClick": "もう一度クリックして確認",
- "presetOverwriteConfirm": "プリセット「{name}」は既に存在します。上書きしますか?",
- "presetNamePlaceholder": "プリセット名...",
- "baseModel": "ベースモデル",
- "baseModelSearchPlaceholder": "ベースモデルを検索...",
- "modelTags": "タグ(上位20)",
- "modelTypes": "モデルタイプ",
- "license": "ライセンス",
- "noCreditRequired": "クレジット不要",
- "allowSellingGeneratedContent": "販売許可",
- "allowSellingGeneratedContentTooltip": "生成した画像の販売を許可",
- "noCreditRequiredTooltip": "クレジット表記なしでモデルを使用可能",
- "noTags": "タグなし",
- "autoTags": "自動タグ",
- "noBaseModelMatches": "現在の検索に一致するベースモデルはありません。",
- "clearAll": "すべてのフィルタをクリア",
- "any": "いずれか",
- "all": "すべて",
- "tagLogicAny": "いずれかのタグに一致 (OR)",
- "tagLogicAll": "すべてのタグに一致 (AND)"
- },
- "theme": {
- "toggle": "テーマの切り替え",
- "switchToLight": "ライトテーマに切り替え",
- "switchToDark": "ダークテーマに切り替え",
- "switchToAuto": "自動テーマに切り替え",
- "presets": "テーマプリセット",
- "default": "デフォルト",
- "nord": "Nord",
- "midnight": "Midnight",
- "monokai": "Monokai",
- "dracula": "Dracula",
- "solarized": "Solarized",
- "mode": "モード",
- "light": "ライト",
- "dark": "ダーク",
- "auto": "自動"
- },
- "actions": {
- "checkUpdates": "更新確認",
- "notifications": "通知",
- "support": "サポート"
- }
+ "tutorial": {
+ "skipTutorial": "チュートリアルをスキップ",
+ "back": "戻る",
+ "next": "次へ",
+ "finish": "完了"
},
- "settings": {
- "civitaiApiKey": "Civitai APIキー",
- "civitaiApiKeyPlaceholder": "Civitai APIキーを入力してください",
- "civitaiApiKeyHelp": "Civitaiからモデルをダウンロードするときの認証に使用されます",
- "civitaiApiKeyConfigured": "設定済み",
- "civitaiApiKeyNotConfigured": "未設定",
- "civitaiApiKeySet": "設定",
- "civitaiHost": {
- "label": "Civitai ホスト",
- "help": "「View on Civitai」リンクを使うときに開く Civitai サイトを選択します。",
- "options": {
- "com": "civitai.com(SFW のみ)",
- "red": "civitai.red(制限なし)"
- }
- },
- "downloadBackend": {
- "label": "ダウンロードバックエンド",
- "help": "モデルファイルのダウンロード方法を選択します。Python は内蔵ダウンローダーを使用し、aria2 は推奨の外部ダウンローダープロセスを使用します。",
- "options": {
- "python": "Python(内蔵)",
- "aria2": "aria2(推奨)"
- }
- },
- "aria2cPath": {
- "label": "aria2c のパス",
- "help": "aria2c 実行ファイルへの任意のパスです。空欄のままにすると、システム PATH 上の aria2c を使用します。",
- "placeholder": "空欄のままにすると PATH 上の aria2c を使用します"
- },
- "aria2HelpLink": "aria2 ダウンロードバックエンドの設定方法",
- "civitaiHostBanner": {
- "title": "Civitai ホスト設定を利用できます",
- "content": "Civitai は現在、SFW コンテンツには civitai.com、制限なしコンテンツには civitai.red を使用しています。設定で既定で開くサイトを変更できます。",
- "openSettings": "設定を開く"
- },
- "openSettingsFileLocation": {
- "label": "設定フォルダーを開く",
- "tooltip": "settings.json を含むフォルダーを開きます",
- "success": "settings.json フォルダーを開きました",
- "failed": "settings.json フォルダーを開けませんでした",
- "copied": "設定パスをクリップボードにコピーしました: {{path}}",
- "clipboardFallback": "設定パス: {{path}}"
- },
- "sections": {
- "contentFiltering": "コンテンツフィルタリング",
- "downloads": "ダウンロード",
- "videoSettings": "動画設定",
- "layoutSettings": "レイアウト設定",
- "licenseIcons": "ライセンスアイコン",
- "misc": "その他",
- "backup": "バックアップ",
- "folderSettings": "デフォルトルート",
- "recipeSettings": "レシピ",
- "extraFolderPaths": "追加フォルダーパス",
- "downloadPathTemplates": "ダウンロードパステンプレート",
- "priorityTags": "優先タグ",
- "versionScope": "アップデートフラグ",
- "exampleImages": "例画像",
- "autoOrganize": "自動整理",
- "metadata": "メタデータ",
- "proxySettings": "プロキシ設定"
- },
- "nav": {
- "general": "一般",
- "interface": "インターフェース",
- "library": "ライブラリ"
- },
- "search": {
- "placeholder": "設定を検索...",
- "clear": "検索をクリア",
- "noResults": "\"{query}\" に一致する設定が見つかりません"
- },
- "storage": {
- "locationLabel": "ポータブルモード",
- "locationHelp": "有効にすると settings.json をリポジトリ内に保持し、無効にするとユーザー設定ディレクトリに格納します。"
- },
- "contentFiltering": {
- "blurNsfwContent": "NSFWコンテンツをぼかす",
- "blurNsfwContentHelp": "成人向け(NSFW)コンテンツのプレビュー画像をぼかします",
- "showOnlySfw": "SFWコンテンツのみ表示",
- "showOnlySfwHelp": "閲覧と検索時にすべてのNSFWコンテンツを除外します",
- "matureBlurThreshold": "成人コンテンツぼかし閾値",
- "matureBlurThresholdHelp": "NSFWぼかしが有効な場合、どのレーティングレベルからぼかしフィルタリングを開始するかを設定します。",
- "matureBlurThresholdOptions": {
- "pg13": "PG13 以上",
- "r": "R 以上(デフォルト)",
- "x": "X 以上",
- "xxx": "XXX のみ"
- }
- },
- "videoSettings": {
- "autoplayOnHover": "ホバー時に動画を自動再生",
- "autoplayOnHoverHelp": "動画プレビューはホバー時にのみ再生されます"
- },
- "autoOrganizeExclusions": {
- "label": "自動整理除外設定",
- "placeholder": "例: curated/*, */backups/*; *_temp.safetensors",
- "help": "これらのワイルドカードパターンに一致するファイルの移動をスキップします。複数のパターンはカンマまたはセミコロンで区切ってください。",
- "validation": {
- "noPatterns": "カンマまたはセミコロンで区切られた少なくとも1つのパターンを入力してください。",
- "saveFailed": "除外設定を保存できませんでした: {message}"
- }
- },
- "metadataRefreshSkipPaths": {
- "label": "メタデータ更新スキップパス",
- "placeholder": "例:temp, archived/old, test_models",
- "help": "一括メタデータ更新(「すべてのメタデータを取得」)時にこれらのディレクトリパス内のモデルをスキップします。モデルルートディレクトリからの相対フォルダパスをカンマ区切りで入力してください。",
- "validation": {
- "noPaths": "カンマで区切って少なくとも1つのパスを入力してください。",
- "saveFailed": "スキップパスの保存に失敗しました:{message}"
- }
- },
- "backup": {
- "autoEnabled": "自動バックアップ",
- "autoEnabledHelp": "1日1回ローカルのスナップショットを作成し、保持ポリシーに従って最新のものを残します。",
- "retention": "保持数",
- "retentionHelp": "古いものを削除する前に、何件の自動スナップショットを保持するかを指定します。",
- "management": "バックアップ管理",
- "managementHelp": "現在のユーザー状態をエクスポートするか、バックアップアーカイブから復元します。",
- "scopeHelp": "設定、ダウンロード履歴、モデル更新の状態をバックアップします。モデルファイルや再生成できるキャッシュは含まれません。",
- "locationSummary": "現在のバックアップ場所",
- "openFolderButton": "バックアップフォルダを開く",
- "openFolderSuccess": "バックアップフォルダを開きました",
- "openFolderFailed": "バックアップフォルダを開けませんでした",
- "locationCopied": "バックアップパスをクリップボードにコピーしました: {{path}}",
- "locationClipboardFallback": "バックアップパス: {{path}}",
- "exportButton": "バックアップをエクスポート",
- "exportSuccess": "バックアップを正常にエクスポートしました。",
- "exportFailed": "バックアップのエクスポートに失敗しました: {message}",
- "importButton": "バックアップをインポート",
- "importConfirm": "このバックアップをインポートして、ローカルのユーザー状態を上書きしますか?",
- "importSuccess": "バックアップを正常にインポートしました。",
- "importFailed": "バックアップのインポートに失敗しました: {message}",
- "latestSnapshot": "最新のスナップショット",
- "latestAutoSnapshot": "最新の自動スナップショット",
- "snapshotCount": "保存済みスナップショット",
- "noneAvailable": "まだスナップショットはありません"
- },
- "downloadSkipBaseModels": {
- "label": "ベースモデルのダウンロードをスキップ",
- "help": "すべてのダウンロードフローに適用されます。ここでは対応しているベースモデルのみ選択できます。",
- "searchPlaceholder": "ベースモデルを絞り込む...",
- "empty": "現在の検索に一致するベースモデルはありません。",
- "summary": {
- "none": "未選択",
- "count": "{count} 件を選択"
- },
- "actions": {
- "edit": "編集",
- "collapse": "折りたたむ",
- "clear": "クリア"
- },
- "validation": {
- "saveFailed": "除外するベースモデルを保存できませんでした: {message}"
- }
- },
- "skipPreviouslyDownloadedModelVersions": {
- "label": "以前にダウンロードしたモデルバージョンをスキップ",
- "help": "有効にすると、ダウンロード履歴サービスがそのバージョンが既にダウンロード済みと記録している場合、LoRA Managerはそのモデルバージョンのダウンロードをスキップします。すべてのダウンロードフローに適用されます。"
- },
- "layoutSettings": {
- "groupByModel": "モデルでグループ化",
- "groupByModelHelp": "有効にすると、各Civitaiモデルの最新バージョンのみが1枚のカードとして表示され、古いバージョンは非表示になります。",
- "displayDensity": "表示密度",
- "displayDensityOptions": {
- "default": "デフォルト",
- "medium": "中",
- "compact": "コンパクト"
- },
- "displayDensityHelp": "1行に表示するカード数を選択:",
- "displayDensityDetails": {
- "default": "5(1080p)、6(2K)、8(4K)",
- "medium": "6(1080p)、7(2K)、9(4K)",
- "compact": "7(1080p)、8(2K)、10(4K)"
- },
- "displayDensityWarning": "警告:高密度設定は、リソースが限られたシステムでパフォーマンスの問題を引き起こす可能性があります。",
- "showFolderSidebar": "フォルダサイドバーを表示",
- "showFolderSidebarHelp": "モデルページのフォルダナビゲーションサイドバーを表示/非表示にします。無効にするとサイドバーとホバーエリアは表示されません。",
- "cardInfoDisplay": "カード情報表示",
- "cardInfoDisplayOptions": {
- "always": "常に表示",
- "hover": "ホバー時に表示"
- },
- "cardInfoDisplayHelp": "モデル情報とアクションボタンの表示タイミングを選択",
- "showVersionOnCard": "カードにバージョンを表示",
- "showVersionOnCardHelp": "モデルカード上のバージョン名の表示/非表示を切り替えます",
- "modelCardFooterAction": "モデルカードボタンのアクション",
- "modelCardFooterActionOptions": {
- "exampleImages": "例画像を開く",
- "replacePreview": "プレビューを置換"
- },
- "modelCardFooterActionHelp": "カード右下のボタンが何をするかを選択します",
- "modelNameDisplay": "モデル名表示",
- "modelNameDisplayOptions": {
- "modelName": "モデル名",
- "fileName": "ファイル名"
- },
- "modelNameDisplayHelp": "モデルカードのフッターに表示する内容を選択",
- "cardBlurAmount": "カードオーバーレイのぼかし",
- "cardBlurAmountHelp": "モデルカードとレシピカードのヘッダー・フッターオーバーレイのぼかし強度を調整します(0 = ぼかしなし、20 = 最大ぼかし)。"
- },
- "folderSettings": {
- "activeLibrary": "アクティブライブラリ",
- "activeLibraryHelp": "設定済みのライブラリを切り替えてデフォルトのフォルダを更新します。選択を変更するとページが再読み込みされます。",
- "loadingLibraries": "ライブラリを読み込み中...",
- "noLibraries": "ライブラリが設定されていません",
- "defaultLoraRoot": "LoRAルート",
- "defaultLoraRootHelp": "ダウンロード、インポート、移動用のデフォルトLoRAルートディレクトリを設定",
- "defaultCheckpointRoot": "Checkpointルート",
- "defaultCheckpointRootHelp": "ダウンロード、インポート、移動用のデフォルトcheckpointルートディレクトリを設定",
- "defaultUnetRoot": "Diffusion Modelルート",
- "defaultUnetRootHelp": "ダウンロード、インポート、移動用のデフォルトDiffusion Model (UNET)ルートディレクトリを設定",
- "defaultEmbeddingRoot": "Embeddingルート",
- "defaultEmbeddingRootHelp": "ダウンロード、インポート、移動用のデフォルトembeddingルートディレクトリを設定",
- "recipesPath": "レシピ保存先",
- "recipesPathHelp": "保存済みレシピ用の任意のカスタムディレクトリです。空欄にすると最初のLoRAルートのrecipesフォルダーを使用します。",
- "recipesPathPlaceholder": "/path/to/recipes",
- "recipesPathMigrating": "レシピ保存先を移動中...",
- "noDefault": "デフォルトなし"
- },
- "extraFolderPaths": {
- "title": "追加フォルダーパス",
- "description": "LoRA Manager専用の追加モデルルートパス。ComfyUIの標準フォルダー外の場所からモデルを読み込みます。ComfyUIの動作を低下させる可能性のある大規模ライブラリに最適です。",
- "restartRequired": "Requires restart to take effect",
- "modelTypes": {
- "lora": "LoRAパス",
- "checkpoint": "Checkpointパス",
- "unet": "Diffusionモデルパス",
- "embedding": "Embeddingパス"
- },
- "pathPlaceholder": "/追加モデルへのパス",
- "saveSuccess": "追加フォルダーパスを更新しました。変更を適用するには再起動が必要です。",
- "saveError": "追加フォルダーパスの更新に失敗しました: {message}",
- "validation": {
- "duplicatePath": "このパスはすでに設定されています"
- }
- },
- "priorityTags": {
- "title": "優先タグ",
- "description": "各モデルタイプのタグ優先順位をカスタマイズします (例: character, concept, style(toon|toon_style))",
- "placeholder": "character, concept, style(toon|toon_style)",
- "helpLinkLabel": "優先タグのヘルプを開く",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "チェックポイント",
- "embedding": "埋め込み"
- },
- "saveSuccess": "優先タグを更新しました。",
- "saveError": "優先タグの更新に失敗しました。",
- "loadingSuggestions": "候補を読み込み中...",
- "validation": {
- "missingClosingParen": "エントリ {index} に閉じ括弧がありません。",
- "missingCanonical": "エントリ {index} には正規タグ名を含める必要があります。",
- "duplicateCanonical": "正規タグ \"{tag}\" が複数回登場しています。",
- "unknown": "無効な優先タグ設定です。"
- }
- },
- "downloadPathTemplates": {
- "title": "ダウンロードパステンプレート",
- "help": "Civitaiからダウンロードする際の異なるモデルタイプのフォルダ構造を設定します。",
- "availablePlaceholders": "利用可能なプレースホルダー:",
- "templateOptions": {
- "flatStructure": "フラット構造",
- "byBaseModel": "ベースモデル別",
- "byAuthor": "作成者別",
- "byFirstTag": "最初のタグ別",
- "baseModelFirstTag": "ベースモデル + 最初のタグ",
- "baseModelAuthor": "ベースモデル + 作成者",
- "authorFirstTag": "作成者 + 最初のタグ",
- "baseModelAuthorFirstTag": "ベースモデル + 作成者 + 最初のタグ",
- "customTemplate": "カスタムテンプレート"
- },
- "customTemplatePlaceholder": "カスタムテンプレートを入力(例:{base_model}/{author}/{first_tag})",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "baseModelPathMappings": "ベースモデルパスマッピング",
- "baseModelPathMappingsHelp": "特定のベースモデルのフォルダ名をカスタマイズ(例:\"Flux.1 D\" → \"flux\")",
- "addMapping": "マッピングを追加",
- "selectBaseModel": "ベースモデルを選択",
- "customPathPlaceholder": "カスタムパス(例:flux)",
- "removeMapping": "マッピングを削除",
- "validation": {
- "validFlat": "有効(フラット構造)",
- "invalidChars": "無効な文字が検出されました",
- "doubleSlashes": "二重スラッシュは許可されていません",
- "leadingTrailingSlash": "スラッシュで開始または終了することはできません",
- "invalidPlaceholder": "無効なプレースホルダー:{placeholder}",
- "validTemplate": "有効なテンプレート"
- }
- },
- "exampleImages": {
- "downloadLocation": "ダウンロード場所",
- "downloadLocationPlaceholder": "例画像のフォルダパスを入力",
- "downloadLocationHelp": "Civitaiからの例画像を保存するフォルダパスを入力してください",
- "autoDownload": "例画像の自動ダウンロード",
- "autoDownloadHelp": "例画像がないモデルの例画像を自動的にダウンロードします(ダウンロード場所の設定が必要)",
- "openMode": "サンプル画像を開く動作",
- "openModeHelp": "サーバー上で開くか、対応するローカルパスをコピーするか、カスタム URI を起動するかを選択します。",
- "openModeOptions": {
- "system": "サーバー上で開く",
- "clipboard": "ローカルパスをコピー",
- "uriTemplate": "カスタム URI を開く"
- },
- "localRoot": "ローカルのサンプル画像ルート",
- "localRootHelp": "サーバーのサンプル画像ディレクトリを反映する任意のローカルまたはマウント済みルートです。空欄の場合はサーバーのパスを再利用します。",
- "localRootPlaceholder": "例: /Volumes/ComfyUI/example_images",
- "uriTemplate": "URI テンプレートを開く",
- "uriTemplateHelp": "ファイル URI や Shortcuts リンクなどのカスタムディープリンクを使用します。",
- "uriTemplatePlaceholder": "例: shortcuts://run-shortcut?name=Open%20Finder&input=text&text={{encoded_local_path}}",
- "uriTemplatePlaceholders": "使用可能なプレースホルダー: {{local_path}}, {{encoded_local_path}}, {{relative_path}}, {{encoded_relative_path}}, {{file_uri}}, {{encoded_file_uri}}",
- "openModeWikiLink": "リモートオープンモードの詳細",
- "optimizeImages": "ダウンロード画像の最適化",
- "optimizeImagesHelp": "例画像を最適化してファイルサイズを縮小し、読み込み速度を向上させます(メタデータは保持されます)",
- "download": "ダウンロード",
- "restartRequired": "再起動が必要"
- },
- "versionGrouping": {
- "label": "アップデートフラグの表示戦略",
- "help": "新リリースがローカルファイルと同じベースモデルを共有する場合にのみ更新バッジを表示するか、そのモデルに新しいバージョンがあれば常に表示するかを決めます。",
- "options": {
- "sameBase": "ベースモデルで更新をマッチ",
- "any": "利用可能な更新すべてを表示"
- }
- },
- "hideEarlyAccessUpdates": {
- "label": "早期アクセス更新を非表示",
- "help": "早期アクセスのみの更新"
- },
- "licenseIcons": {
- "useNewStyle": "更新されたライセンスアイコンを使用",
- "useNewStyleHelp": "カラーインジケーター付きでライセンス許可を表示(新スタイル)するか、制限のみのアイコンを表示(クラシックスタイル)します。現在のCivitAIデザインを反映しています。"
- },
- "misc": {
- "includeTriggerWords": "LoRA構文にトリガーワードを含める",
- "includeTriggerWordsHelp": "LoRA構文をクリップボードにコピーする際、学習済みトリガーワードを含めます",
- "loraSyntaxFormat": "LoRA構文形式",
- "loraSyntaxFormatHelp": "LoRA構文形式。フルパスはサブフォルダパスを含み(filename_v1.2 → filename_v1.2-ab3c",
- "impact": "{groups} 組の重複にわたって {count} 個のファイルをリネームします",
- "confirm": "ファイルをリネーム",
- "cancel": "キャンセル"
+ "metadataFetchSummary": {
+ "title": "メタデータ取得サマリー",
+ "statSuccess": "成功",
+ "statFailed": "失敗",
+ "statSkipped": "スキップ",
+ "statTotal": "スキャン合計",
+ "statDuration": "所要時間",
+ "successMessage": "すべての{count}件の{type}を正常に更新しました",
+ "failedItems": "失敗したアイテム ({count})",
+ "close": "閉じる",
+ "copyReport": "レポートをコピー",
+ "downloadCsv": "CSVをダウンロード",
+ "columnModelName": "モデル名",
+ "columnError": "エラー"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "タグが正常に更新されました",
+ "updateFailed": "タグの更新に失敗しました"
+ },
+ "validation": {
+ "maxLength": "タグは30文字を超えることはできません",
+ "maxCount": "最大30タグまで許可されています",
+ "duplicate": "このタグは既に存在します"
+ }
+ },
+ "initialization": {
+ "title": "初期化中",
+ "message": "ワークスペースを準備中...",
+ "status": "初期化中...",
+ "estimatingTime": "時間を推定中...",
+ "loras": {
+ "title": "LoRA Managerを初期化中",
+ "message": "LoRAキャッシュをスキャンして構築中。数分かかる場合があります..."
+ },
+ "checkpoints": {
+ "title": "Checkpoint Managerを初期化中",
+ "message": "checkpointキャッシュをスキャンして構築中。数分かかる場合があります..."
+ },
+ "embeddings": {
+ "title": "Embedding Managerを初期化中",
+ "message": "embeddingキャッシュをスキャンして構築中。数分かかる場合があります..."
+ },
+ "recipes": {
+ "title": "Recipe Managerを初期化中",
+ "message": "レシピを読み込んで処理中。数分かかる場合があります..."
+ },
+ "statistics": {
+ "title": "統計を初期化中",
+ "message": "統計用のモデルデータを処理中。数分かかる場合があります..."
+ },
+ "tips": {
+ "title": "ヒント&コツ",
+ "civitai": {
+ "title": "Civitai統合",
+ "description": "Civitaiアカウントを接続:プロフィールアバター → 設定 → APIキー → APIキーを追加し、LoRA Manager設定に貼り付けてください。",
+ "alt": "Civitai API設定"
+ },
+ "download": {
+ "title": "簡単ダウンロード",
+ "description": "Civitai URLを使用して新しいモデルを素早くダウンロードしてインストールできます。",
+ "alt": "Civitaiダウンロード"
+ },
+ "recipes": {
+ "title": "レシピを保存",
+ "description": "お気に入りのモデル組み合わせを将来使用するためにレシピを作成できます。",
+ "alt": "レシピ"
+ },
+ "filter": {
+ "title": "高速フィルタリング",
+ "description": "ヘッダーのフィルタボタンを使用してタグやベースモデルタイプでモデルをフィルタできます。",
+ "alt": "モデルフィルタ"
+ },
+ "search": {
+ "title": "クイック検索",
+ "description": "Ctrl+F(MacではCmd+F)を押して、現在のビュー内を素早く検索できます。",
+ "alt": "クイック検索"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "{count} 個の重複グループが見つかりました",
+ "showNotification": "重複通知を表示",
+ "deleteSelected": "選択したものを削除",
+ "exitMode": "モードを終了",
+ "help": {
+ "identicalHashes": "同一のハッシュは、名前やプレビューが異なっていても、同一のモデルファイルを意味します。",
+ "keepOne": "1つのバージョンのみを保持し(より良いメタデータ/プレビューを持つものが望ましい)、他は安全に削除してください。"
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "クリップボードにコピーされました",
+ "copyFailed": "コピーに失敗しました"
+ },
+ "lora": {
+ "syntaxCopied": "LoRA構文がクリップボードにコピーされました",
+ "syntaxCopiedNoTriggerWords": "LoRA構文がクリップボードにコピーされました(トリガーワードが見つかりません)",
+ "syntaxCopiedWithTriggerWords": "トリガーワード付きLoRA構文がクリップボードにコピーされました",
+ "syntaxCopiedWithTriggerWordGroups": "トリガーワードグループ付きLoRA構文がクリップボードにコピーされました"
+ },
+ "workflow": {
+ "noSupportedNodes": "ワークフローで対応するターゲットノードが見つかりません",
+ "communicationFailed": "ComfyUIとの通信に失敗しました",
+ "loraAdded": "LoRAがワークフローに追加されました",
+ "loraReplaced": "LoRAがワークフローで置換されました",
+ "loraFailedToSend": "LoRAをワークフローに送信できませんでした",
+ "recipeAdded": "レシピがワークフローに追加されました",
+ "recipeReplaced": "レシピがワークフローで置換されました",
+ "recipeFailedToSend": "レシピをワークフローに送信できませんでした",
+ "noMatchingNodes": "現在のワークフローには互換性のあるノードがありません",
+ "noTargetNodeSelected": "ターゲットノードが選択されていません",
+ "modelUpdated": "モデルがワークフローで更新されました",
+ "modelFailed": "モデルノードの更新に失敗しました",
+ "embeddingAdded": "Embeddingをワークフローに追加しました",
+ "embeddingFailed": "Embeddingの追加に失敗しました",
+ "promptSent": "プロンプトをワークフローに送信しました",
+ "promptFailed": "プロンプトの送信に失敗しました"
+ },
+ "nodeSelector": {
+ "recipe": "レシピ",
+ "lora": "LoRA",
+ "embedding": "Embedding",
+ "prompt": "プロンプト",
+ "replace": "置換",
+ "append": "追加",
+ "selectTargetNode": "ターゲットノードを選択",
+ "sendToAll": "すべてに送信"
+ },
+ "exampleImages": {
+ "opened": "例画像フォルダが開かれました",
+ "openingFolder": "例画像フォルダを開いています",
+ "failedToOpen": "例画像フォルダを開くのに失敗しました",
+ "copiedPath": "パスをクリップボードにコピーしました: {{path}}",
+ "clipboardFallback": "パス: {{path}}",
+ "copiedUri": "リンクをクリップボードにコピーしました: {{uri}}",
+ "uriClipboardFallback": "リンク: {{uri}}",
+ "setupRequired": "例画像ストレージ",
+ "setupDescription": "カスタム例画像を追加するには、まずダウンロード場所を設定する必要があります。",
+ "setupUsage": "このパスは、ダウンロードした例画像とカスタム画像の両方に使用されます。",
+ "openSettings": "設定を開く"
+ }
+ },
+ "help": {
+ "title": "ヘルプ & チュートリアル",
+ "tabs": {
+ "gettingStarted": "はじめに",
+ "updateVlogs": "更新Vlog",
+ "documentation": "ドキュメント"
+ },
+ "gettingStarted": {
+ "title": "LoRA Managerを始める"
+ },
+ "updateVlogs": {
+ "title": "最新の更新",
+ "watchOnYouTube": "YouTubeで視聴",
+ "playlistTitle": "LoRA Manager更新プレイリスト",
+ "playlistDescription": "最新の機能と改善を紹介するすべての更新動画を視聴できます。"
+ },
+ "documentation": {
+ "title": "ドキュメント",
+ "general": "一般",
+ "troubleshooting": "トラブルシューティング",
+ "modelManagement": "モデル管理",
+ "recipes": "レシピ",
+ "settings": "設定&構成",
+ "extensions": "拡張機能",
+ "newBadge": "新着"
+ }
+ },
+ "update": {
+ "title": "更新確認",
+ "notificationsTitle": "通知センター",
+ "tabs": {
+ "updates": "更新",
+ "messages": "メッセージ"
+ },
+ "updateAvailable": "更新が利用可能",
+ "noChangelogAvailable": "詳細な変更ログは利用できません。詳細はGitHubでご確認ください。",
+ "currentVersion": "現在のバージョン",
+ "newVersion": "新しいバージョン",
+ "commit": "コミット",
+ "viewOnGitHub": "GitHubで表示",
+ "updateNow": "今すぐ更新",
+ "preparingUpdate": "更新を準備中...",
+ "changelog": "変更ログ",
+ "checkingUpdates": "更新を確認中...",
+ "checkingMessage": "最新バージョンを確認しています。お待ちください。",
+ "showNotifications": "更新通知を表示",
+ "latestBadge": "最新",
+ "updateProgress": {
+ "preparing": "更新を準備中...",
+ "installing": "更新をインストール中...",
+ "completed": "更新が正常に完了しました!",
+ "failed": "更新に失敗しました:{error}"
+ },
+ "status": {
+ "updating": "更新中...",
+ "updated": "更新済み!",
+ "updateFailed": "更新失敗"
+ },
+ "completion": {
+ "successMessage": "{version}への更新が成功しました!",
+ "restartMessage": "更新を適用するためにComfyUIまたはLoRA Managerを再起動してください。",
+ "reloadMessage": "LoRA ManagerとComfyUIの両方でブラウザを再読み込みしてください。"
+ },
+ "nightly": {
+ "warning": "警告:ナイトリービルドには実験的機能が含まれており、不安定な場合があります。",
+ "enable": "ナイトリー更新を有効にする"
},
"banners": {
- "versionMismatch": {
- "title": "アプリケーション更新が検出されました",
- "content": "ブラウザは古いバージョンのLoRA Manager({storedVersion})を実行しています。サーバーはバージョン{currentVersion}に更新されました。正常な機能を確保するため再読み込みしてください。",
- "refreshNow": "今すぐ更新",
- "refreshingIn": "更新まで",
- "seconds": "秒"
- },
- "communitySupport": {
- "title": "Keep LoRA Manager Thriving with Your Support ❤️",
- "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
- "supportCta": "Support on Ko-fi",
- "learnMore": "LM Civitai Extension Tutorial"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "キャッシュの破損が検出されました"
- },
- "degraded": {
- "title": "キャッシュの問題が検出されました"
- },
- "content": "{total}個のキャッシュエントリのうち{invalid}個が無効です({rate})。モデルが見つからない原因になったり、エラーが発生する可能性があります。キャッシュの再構築を推奨します。",
- "rebuildCache": "キャッシュを再構築",
- "dismiss": "閉じる",
- "rebuilding": "キャッシュを再構築中...",
- "rebuildFailed": "キャッシュの再構築に失敗しました: {error}",
- "retry": "再試行"
- }
+ "recent": "最近の通知",
+ "empty": "最近のバナーはありません。",
+ "shown": "{time} に表示",
+ "dismissed": "{time} に非表示",
+ "active": "アクティブ"
}
+ },
+ "support": {
+ "title": "プロジェクトをサポート",
+ "message": "LoRA Managerが役に立ったら、ぜひサポートをお願いします! 🙌",
+ "feedback": {
+ "title": "フィードバックを提供",
+ "description": "あなたのフィードバックが将来の更新を形作ります!ご意見をお聞かせください:"
+ },
+ "links": {
+ "submitGithubIssue": "GitHub Issueを提出",
+ "joinDiscord": "Discordに参加",
+ "youtubeChannel": "YouTubeチャンネル",
+ "civitaiProfile": "Civitaiプロフィール",
+ "supportKofi": "Ko-fiでサポート",
+ "supportPatreon": "Patreonでサポート"
+ },
+ "sections": {
+ "followUpdates": "更新をフォロー",
+ "buyMeCoffee": "コーヒーをおごる",
+ "coffeeDescription": "私の仕事を直接サポートしたい場合:",
+ "becomePatron": "パトロンになる",
+ "patronDescription": "月額寄付で継続的な開発をサポート:",
+ "wechatSupport": "WeChatサポート",
+ "wechatDescription": "中国のユーザーはWeChatでサポートできます:",
+ "showWechatQR": "WeChat QRコードを表示",
+ "hideWechatQR": "WeChat QRコードを非表示"
+ },
+ "footer": "LoRA Managerをご利用いただきありがとうございます! ❤️",
+ "supporters": {
+ "title": "サポーターの皆様に感謝",
+ "subtitle": "{count} 名のサポーターの皆様に、このプロジェクトを実現していただきありがとうございます",
+ "specialThanks": "特別感謝",
+ "allSupporters": "全サポーター",
+ "totalCount": "サポーター {count} 名"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "スタンドアロンモードではComfyUIと連携できません",
+ "failedWorkflowInfo": "ワークフロー情報の取得に失敗しました",
+ "pageInitFailed": "{pageType}ページの初期化に失敗しました。再読み込みしてください。",
+ "statisticsLoadFailed": "統計データの読み込みに失敗しました"
+ },
+ "loras": {
+ "copyOnlyForLoras": "構文のコピーはLoRAのみ利用可能です",
+ "noLorasSelected": "LoRAが選択されていません",
+ "missingDataForLoras": "{count} LoRAのデータが不足しています",
+ "noValidLorasToCopy": "コピーする有効なLoRAがありません",
+ "sendOnlyForLoras": "ワークフローへの送信はLoRAのみ利用可能です",
+ "noValidLorasToSend": "送信する有効なLoRAがありません",
+ "downloadSuccessful": "LoRAが正常にダウンロードされました",
+ "allDownloadSuccessful": "{count} LoRAすべてが正常にダウンロードされました",
+ "downloadPartialSuccess": "{total} LoRAのうち {completed} がダウンロードされました",
+ "downloadPartialWithAccess": "{total} LoRAのうち {completed} がダウンロードされました。{accessFailures} はアクセス制限により失敗しました。設定でAPIキーまたはアーリーアクセス状況を確認してください。",
+ "pleaseSelectVersion": "バージョンを選択してください",
+ "versionExists": "このバージョンは既にライブラリに存在します",
+ "downloadCompleted": "ダウンロードが正常に完了しました",
+ "downloadSkippedByBaseModel": "ベースモデル {baseModel} が除外されているため、ダウンロードをスキップしました",
+ "autoOrganizeSuccess": "{count} {type} の自動整理が正常に完了しました",
+ "autoOrganizePartialSuccess": "自動整理が完了しました:{total} モデル中 {success} 移動、{failures} 失敗",
+ "autoOrganizeFailed": "自動整理に失敗しました:{error}",
+ "noModelsSelected": "モデルが選択されていません"
+ },
+ "recipes": {
+ "fetchFailed": "レシピの取得に失敗しました:{message}",
+ "reloadFailed": "{modelType}の再読み込みに失敗しました:{message}",
+ "loadFailed": "{modelType}の読み込みに失敗しました:{message}",
+ "refreshComplete": "更新完了",
+ "refreshFailed": "レシピの更新に失敗しました:{message}",
+ "syncComplete": "同期完了",
+ "syncFailed": "レシピの同期に失敗しました:{message}",
+ "updateFailed": "レシピの更新に失敗しました:{error}",
+ "updateError": "レシピ更新エラー:{message}",
+ "nameSaved": "レシピ\"{name}\"が正常に保存されました",
+ "nameUpdated": "レシピ名が正常に更新されました",
+ "tagsUpdated": "レシピタグが正常に更新されました",
+ "sourceUrlUpdated": "ソースURLが正常に更新されました",
+ "promptUpdated": "プロンプトが正常に更新されました",
+ "negativePromptUpdated": "ネガティブプロンプトが正常に更新されました",
+ "promptEditorHint": "Enterキーで保存、Shift+Enterで改行",
+ "noRecipeId": "レシピIDが利用できません",
+ "sendToWorkflowFailed": "ワークフローへのレシピ送信に失敗しました:{message}",
+ "copyFailed": "レシピ構文のコピーエラー:{message}",
+ "createError": "レシピ作成中にエラーが発生しました:{message}",
+ "createFailed": "レシピの作成に失敗しました:{error}",
+ "createMissingData": "レシピ作成に必要なデータが不足しています",
+ "created": "レシピを作成しました",
+ "noMissingLoras": "ダウンロードする不足LoRAがありません",
+ "missingLorasInfoFailed": "不足LoRAの情報取得に失敗しました",
+ "preparingForDownloadFailed": "ダウンロード用LoRAの準備中にエラーが発生しました",
+ "enterLoraName": "LoRA名または構文を入力してください",
+ "reconnectedSuccessfully": "LoRAが正常に再接続されました",
+ "reconnectFailed": "LoRA再接続エラー:{message}",
+ "noPromptToSend": "送信するプロンプトがありません",
+ "cannotSend": "レシピを送信できません:レシピIDがありません",
+ "sendFailed": "レシピのワークフローへの送信に失敗しました",
+ "sendError": "レシピのワークフロー送信エラー",
+ "missingCheckpointPath": "チェックポイントのパスがありません",
+ "missingCheckpointInfo": "チェックポイント情報が不足しています",
+ "downloadCheckpointFailed": "チェックポイントのダウンロードに失敗しました: {message}",
+ "cannotDelete": "レシピを削除できません:レシピIDがありません",
+ "deleteConfirmationError": "削除確認の表示中にエラーが発生しました",
+ "deletedSuccessfully": "レシピが正常に削除されました",
+ "deleteFailed": "レシピ削除エラー:{message}",
+ "cannotShare": "レシピを共有できません:レシピIDがありません",
+ "preparingForSharing": "レシピの共有を準備中...",
+ "downloadStarted": "レシピのダウンロードが開始されました",
+ "shareError": "レシピ共有エラー:{message}",
+ "sharePreparationError": "レシピ共有準備エラー",
+ "selectImageFirst": "最初に画像を選択してください",
+ "enterRecipeName": "レシピ名を入力してください",
+ "processingError": "処理エラー:{message}",
+ "folderBrowserError": "フォルダブラウザの読み込みエラー:{message}",
+ "recipeSaveFailed": "レシピの保存に失敗しました:{error}",
+ "recipeSaved": "Recipe saved successfully",
+ "importFailed": "インポートに失敗しました:{message}",
+ "folderTreeFailed": "フォルダツリーの読み込みに失敗しました",
+ "folderTreeError": "フォルダツリー読み込みエラー",
+ "batchImportFailed": "Failed to start batch import: {message}",
+ "batchImportCancelling": "Cancelling batch import...",
+ "batchImportCancelFailed": "Failed to cancel batch import: {message}",
+ "batchImportNoUrls": "Please enter at least one URL or file path",
+ "batchImportNoDirectory": "Please enter a directory path",
+ "batchImportBrowseFailed": "Failed to browse directory: {message}",
+ "batchImportDirectorySelected": "Directory selected: {path}",
+ "noRecipesSelected": "レシピが選択されていません",
+ "repairBulkComplete": "修復完了:{repaired} 件修復、{skipped} 件スキップ(合計 {total} 件)",
+ "repairBulkSkipped": "選択した {total} 件のレシピは修復不要です",
+ "repairBulkFailed": "選択したレシピの修復に失敗しました:{message}",
+ "reimporting": "ソースからレシピを再インポート中...",
+ "reimportSuccess": "レシピの再インポートが完了しました",
+ "reimportBulkComplete": "再インポート完了:{completed} 件成功、{failed} 件失敗(合計 {total} 件)",
+ "reimportBulkFailed": "一部のレシピの再インポートに失敗しました",
+ "noMissingLorasInSelection": "選択したレシピに不足している LoRA が見つかりませんでした",
+ "noLoraRootConfigured": "LoRA ルートディレクトリが設定されていません。設定でデフォルトの LoRA ルートを設定してください。"
+ },
+ "models": {
+ "noModelsSelected": "モデルが選択されていません",
+ "deletedSuccessfully": "{count} {type}が正常に削除されました",
+ "deleteFailed": "エラー:{error}",
+ "deleteFailedGeneral": "モデルの削除に失敗しました",
+ "selectedAdditional": "{count} 追加{type}が選択されました",
+ "marqueeSelectionComplete": "マーキー選択で {count} の{type}が選択されました",
+ "refreshMetadataFailed": "メタデータの更新に失敗しました",
+ "nameCannotBeEmpty": "モデル名を空にすることはできません",
+ "nameUpdatedSuccessfully": "モデル名が正常に更新されました",
+ "nameUpdateFailed": "モデル名の更新に失敗しました",
+ "baseModelUpdated": "ベースモデルが正常に更新されました",
+ "baseModelUpdateFailed": "ベースモデルの更新に失敗しました",
+ "baseModelNotSelected": "ベースモデルを選択してください",
+ "bulkBaseModelUpdating": "{count} モデルのベースモデルを更新中...",
+ "bulkBaseModelUpdateSuccess": "{count} モデルのベースモデルが正常に更新されました",
+ "bulkBaseModelUpdatePartial": "{success} モデルを更新、{failed} モデルは失敗しました",
+ "bulkBaseModelUpdateFailed": "選択したモデルのベースモデルの更新に失敗しました",
+ "skipMetadataRefreshUpdating": "{count}モデルのメタデータ更新フラグを更新中...",
+ "skipMetadataRefreshSet": "{count}モデルのメタデータ更新をスキップしました",
+ "skipMetadataRefreshCleared": "{count}モデルのメタデータ更新を再開しました",
+ "skipMetadataRefreshPartial": "{success}モデルを更新しました。{failed}モデルで失敗しました",
+ "skipMetadataRefreshFailed": "選択したモデルのメタデータ更新フラグの更新に失敗しました",
+ "bulkContentRatingUpdating": "{count} 件のモデルのコンテンツレーティングを更新中...",
+ "bulkContentRatingSet": "{count} 件のモデルのコンテンツレーティングを {level} に設定しました",
+ "bulkContentRatingPartial": "{success} 件のモデルのコンテンツレーティングを {level} に設定、{failed} 件は失敗しました",
+ "bulkContentRatingFailed": "選択したモデルのコンテンツレーティングを更新できませんでした",
+ "bulkFavoriteUpdating": "{count} 個のモデルをお気に入りに追加中...",
+ "bulkUnfavoriteUpdating": "{count} 個のモデルをお気に入りから削除中...",
+ "bulkFavoritePartialAdded": "{success} 個のモデルをお気に入りに追加、{failed} 個失敗",
+ "bulkFavoritePartialRemoved": "{success} 個のモデルをお気に入りから削除、{failed} 個失敗",
+ "bulkFavoriteFailed": "お気に入り状態の更新に失敗しました",
+ "bulkUpdatesChecking": "選択された{type}の更新を確認しています...",
+ "bulkUpdatesSuccess": "{count} 件の選択された{type}に利用可能な更新があります",
+ "bulkUpdatesNone": "選択された{type}には更新が見つかりませんでした",
+ "bulkUpdatesMissing": "選択された{type}はCivitaiの更新にリンクされていません",
+ "bulkUpdatesPartialMissing": "Civitaiリンクがない{missing} 件の{type}をスキップしました",
+ "bulkUpdatesFailed": "選択された{type}の更新確認に失敗しました: {message}",
+ "invalidCharactersRemoved": "ファイル名から無効な文字が削除されました",
+ "filenameCannotBeEmpty": "ファイル名を空にすることはできません",
+ "renameFailed": "ファイル名の変更に失敗しました:{message}",
+ "moveFailed": "モデルの移動に失敗しました:{message}",
+ "pleaseSelectRoot": "{type}ルートディレクトリを選択してください",
+ "nameTooLong": "モデル名は100文字に制限されています",
+ "verificationAlreadyDone": "このグループは既に検証済みです",
+ "verificationCompleteMismatch": "検証完了。{count} ファイルの実際のハッシュが異なります。",
+ "verificationCompleteSuccess": "検証完了。すべてのファイルが重複であることが確認されました。",
+ "verificationFailed": "ハッシュの検証に失敗しました:{message}",
+ "noTagsToAdd": "追加するタグがありません",
+ "bulkTagsUpdating": "{count} 個のモデルのタグを更新しています...",
+ "tagsAddedSuccessfully": "{count} {type} に {tagCount} 個のタグを追加しました",
+ "tagsReplacedSuccessfully": "{count} {type} のタグを {tagCount} 個に置換しました",
+ "tagsAddFailed": "{count} モデルへのタグ追加に失敗しました",
+ "tagsReplaceFailed": "{count} モデルのタグ置換に失敗しました",
+ "bulkTagsAddFailed": "モデルへのタグ追加に失敗しました",
+ "bulkTagsReplaceFailed": "モデルのタグ置換に失敗しました"
+ },
+ "search": {
+ "atLeastOneOption": "少なくとも1つの検索オプションを選択する必要があります"
+ },
+ "settings": {
+ "loraRootsFailed": "LoRAルートの読み込みに失敗しました:{message}",
+ "checkpointRootsFailed": "checkpointルートの読み込みに失敗しました:{message}",
+ "unetRootsFailed": "Diffusion Modelルートの読み込みに失敗しました:{message}",
+ "embeddingRootsFailed": "embeddingルートの読み込みに失敗しました:{message}",
+ "mappingsUpdated": "ベースモデルパスマッピングが更新されました({count} マッピング{plural})",
+ "mappingsCleared": "ベースモデルパスマッピングがクリアされました",
+ "mappingSaveFailed": "ベースモデルマッピングの保存に失敗しました:{message}",
+ "downloadTemplatesUpdated": "ダウンロードパステンプレートが更新されました",
+ "downloadTemplatesFailed": "ダウンロードパステンプレートの保存に失敗しました:{message}",
+ "recipesPathUpdated": "レシピ保存先を更新しました",
+ "recipesPathSaveFailed": "レシピ保存先の更新に失敗しました: {message}",
+ "settingsUpdated": "設定が更新されました:{setting}",
+ "compactModeToggled": "コンパクトモード {state}",
+ "settingSaveFailed": "設定の保存に失敗しました:{message}",
+ "displayDensitySet": "表示密度が {density} に設定されました",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "言語の変更に失敗しました:{message}",
+ "cacheCleared": "キャッシュファイルが正常にクリアされました。次回のアクションでキャッシュが再構築されます。",
+ "cacheClearFailed": "キャッシュのクリアに失敗しました:{error}",
+ "cacheClearError": "キャッシュクリアエラー:{message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "フィルタがクリアされました",
+ "noCustomFilterToClear": "クリアするカスタムフィルタがありません",
+ "noActiveFilters": "保存するアクティブフィルタがありません"
+ },
+ "presets": {
+ "created": "プリセット \"{name}\" が作成されました",
+ "deleted": "プリセット \"{name}\" が削除されました",
+ "applied": "プリセット \"{name}\" が適用されました",
+ "overwritten": "プリセット「{name}」を上書きしました",
+ "restored": "デフォルトのプリセットを復元しました"
+ },
+ "error": {
+ "presetNameEmpty": "プリセット名を入力してください",
+ "presetNameTooLong": "プリセット名は{max}文字以内にしてください",
+ "presetNameInvalidChars": "プリセット名に使用できない文字が含まれています",
+ "presetNameExists": "同じ名前のプリセットが既に存在します",
+ "maxPresetsReached": "プリセットは最大{max}個までです。追加するには既存のものを削除してください。",
+ "presetNotFound": "プリセットが見つかりません",
+ "invalidPreset": "無効なプリセットデータです",
+ "deletePresetFailed": "プリセットの削除に失敗しました",
+ "applyPresetFailed": "プリセットの適用に失敗しました"
+ },
+ "downloads": {
+ "imagesCompleted": "例画像 {action} が完了しました",
+ "imagesFailed": "例画像 {action} が失敗しました",
+ "loadError": "ダウンロード読み込みエラー:{message}",
+ "downloadError": "ダウンロードエラー:{message}"
+ },
+ "import": {
+ "folderTreeFailed": "フォルダツリーの読み込みに失敗しました",
+ "folderTreeError": "フォルダツリー読み込みエラー",
+ "imagesImported": "例画像が正常にインポートされました",
+ "imagesPartial": "{success} 件の画像をインポート、{failed} 件失敗",
+ "importFailed": "例画像のインポートに失敗しました:{message}"
+ },
+ "triggerWords": {
+ "loadFailed": "学習済みワードを読み込めませんでした",
+ "tooLong": "トリガーワードは500ワードを超えてはいけません",
+ "tooMany": "最大100トリガーワードまで許可されています",
+ "alreadyExists": "このトリガーワードは既に存在します",
+ "updateSuccess": "トリガーワードが正常に更新されました",
+ "updateFailed": "トリガーワードの更新に失敗しました",
+ "copyFailed": "コピーに失敗しました"
+ },
+ "virtual": {
+ "loadFailed": "アイテムの読み込みに失敗しました",
+ "loadMoreFailed": "追加アイテムの読み込みに失敗しました",
+ "loadPositionFailed": "この位置のアイテムの読み込みに失敗しました"
+ },
+ "bulk": {
+ "unableToSelectAll": "すべてのアイテムを選択できません"
+ },
+ "duplicates": {
+ "findFailed": "重複の検索に失敗しました:{message}",
+ "noDuplicatesFound": "重複 {type} が見つかりませんでした",
+ "noItemsSelected": "削除する {type} が選択されていません",
+ "deleteError": "エラー:{message}",
+ "deleteSuccess": "{count} {type} が正常に削除されました",
+ "deleteFailed": "{type} の削除に失敗しました:{message}"
+ },
+ "controls": {
+ "reloadFailed": "{pageType}の再読み込みに失敗しました:{message}",
+ "refreshFailed": "{pageType}の{action}に失敗しました:{message}",
+ "fetchMetadataFailed": "メタデータの取得に失敗しました:{message}",
+ "clearFilterFailed": "カスタムフィルタのクリアに失敗しました:{message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "コンテンツレーティングが {level} に設定されました",
+ "contentRatingFailed": "コンテンツレーティングの設定に失敗しました:{message}",
+ "relinkSuccess": "モデルがCivitaiに正常に再リンクされました",
+ "relinkFailed": "エラー:{message}",
+ "fetchMetadataFirst": "最初にCivitAIからメタデータを取得してください",
+ "noCivitaiInfo": "CivitAI情報が利用できません",
+ "missingHash": "モデルハッシュが利用できません"
+ },
+ "exampleImages": {
+ "pathUpdated": "例画像パスが正常に更新されました",
+ "pathUpdateFailed": "例画像パスの更新に失敗しました:{message}",
+ "downloadInProgress": "ダウンロードは既に進行中です",
+ "enterLocationFirst": "最初にダウンロード場所を入力してください",
+ "downloadStarted": "例画像のダウンロードが開始されました",
+ "downloadStartFailed": "ダウンロードの開始に失敗しました:{error}",
+ "downloadPaused": "ダウンロードが一時停止されました",
+ "pauseFailed": "ダウンロードの一時停止に失敗しました:{error}",
+ "downloadResumed": "ダウンロードが再開されました",
+ "resumeFailed": "ダウンロードの再開に失敗しました:{error}",
+ "downloadStopped": "ダウンロードをキャンセルしました",
+ "stopFailed": "ダウンロードのキャンセルに失敗しました:{error}",
+ "deleted": "例画像が削除されました",
+ "deleteFailed": "例画像の削除に失敗しました",
+ "setPreviewFailed": "プレビュー画像の設定に失敗しました"
+ },
+ "api": {
+ "fetchFailed": "{type}の取得に失敗しました:{message}",
+ "reloadFailed": "{type}の再読み込みに失敗しました:{message}",
+ "deleteSuccess": "{type}が正常に削除されました",
+ "deleteFailed": "{type}の削除に失敗しました:{message}",
+ "excludeSuccess": "{type}が正常に除外されました",
+ "excludeFailed": "{type}の除外に失敗しました:{message}",
+ "restoreSuccess": "{type}を復元しました",
+ "restoreFailed": "{type}の復元に失敗しました: {message}",
+ "fileNameUpdated": "ファイル名が正常に更新されました",
+ "fileRenameFailed": "ファイル名の変更に失敗しました:{error}",
+ "previewUpdated": "プレビューが正常に更新されました",
+ "previewUploadFailed": "プレビュー画像のアップロードに失敗しました",
+ "refreshComplete": "{action} 完了",
+ "refreshFailed": "{type}の{action}に失敗しました",
+ "metadataRefreshed": "メタデータが正常に更新されました",
+ "metadataRefreshFailed": "メタデータの更新に失敗しました:{message}",
+ "metadataUpdateComplete": "メタデータ更新完了",
+ "operationCancelled": "ユーザーによって操作がキャンセルされました",
+ "operationCancelledPartial": "操作がキャンセルされました。{success} 個の項目が処理されました。",
+ "metadataFetchFailed": "メタデータの取得に失敗しました:{message}",
+ "bulkMetadataCompleteAll": "{count} {type}すべてが正常に更新されました",
+ "bulkMetadataCompletePartial": "{total} {type}のうち {success} が更新されました",
+ "bulkMetadataCompleteNone": "{type}のメタデータ更新に失敗しました",
+ "bulkMetadataFailureDetails": "失敗した更新:\n{failures}",
+ "bulkMetadataFailed": "メタデータの更新に失敗しました:{message}",
+ "moveNotSupported": "{type}の移動はサポートされていません",
+ "alreadyInFolder": "{type}は既に選択されたフォルダにあります",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type}が正常に移動されました",
+ "bulkMoveNotSupported": "{type}の移動はサポートされていません",
+ "allAlreadyInFolder": "選択されたすべての{type}は既にターゲットフォルダにあります",
+ "bulkMovePartial": "{successCount} {type}が移動され、{failureCount} が失敗しました",
+ "bulkMoveFailures": "失敗した移動:\n{failures}",
+ "bulkMoveSuccess": "{successCount} {type}が正常に移動されました",
+ "exampleImagesDownloadSuccess": "例画像が正常にダウンロードされました!",
+ "exampleImagesDownloadFailed": "例画像のダウンロードに失敗しました:{message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "クリップボードにコピーしました",
+ "downloadStarted": "ダウンロードを開始しました"
+ }
+ },
+ "doctor": {
+ "kicker": "システム診断",
+ "title": "ドクター",
+ "buttonTitle": "診断と一般的な修復を実行",
+ "loading": "環境を確認中...",
+ "footer": "修復後も問題が続く場合は、診断パッケージをエクスポートしてください。",
+ "summary": {
+ "idle": "設定、キャッシュ整合性、UI の一貫性をヘルスチェックします。",
+ "ok": "現在の環境でアクティブな問題は見つかりませんでした。",
+ "warning": "{count} 件の問題が見つかりました。ほとんどはこのパネルから直接修復できます。",
+ "error": "アプリが完全に正常になる前に、{count} 件の問題に対処する必要があります。"
+ },
+ "status": {
+ "ok": "正常",
+ "warning": "要注意",
+ "error": "対応が必要"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API キー"
+ },
+ "cache_health": {
+ "title": "モデルキャッシュの健全性"
+ },
+ "filename_conflicts": {
+ "title": "ファイル名重複競合"
+ },
+ "ui_version": {
+ "title": "UI バージョン"
+ }
+ },
+ "actions": {
+ "runAgain": "再実行",
+ "exportBundle": "パッケージをエクスポート",
+ "open-settings": "設定を開く",
+ "open-settings-syntax-format": "フルパス構文に切り替え",
+ "repair-cache": "キャッシュを再構築",
+ "resolve-filename-conflicts": "競合を解決",
+ "reload-page": "UI をリロード"
+ },
+ "labels": {
+ "conflicts": "競合",
+ "version": "バージョン"
+ },
+ "toast": {
+ "loadFailed": "診断の読み込みに失敗しました: {message}",
+ "repairSuccess": "キャッシュの再構築が完了しました。",
+ "repairFailed": "キャッシュの再構築に失敗しました: {message}",
+ "exportSuccess": "診断パッケージをエクスポートしました。",
+ "exportFailed": "診断パッケージのエクスポートに失敗しました: {message}",
+ "conflictsResolved": "{count} 件のファイル名競合が解決されました。",
+ "conflictsResolveFailed": "ファイル名競合の解決に失敗しました: {message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "ファイル名の競合を解決",
+ "message": "重複したファイル名に4文字のハッシュを追加してリネームします。",
+ "note": "この操作はディスク上のファイルをリネームします。A1111 構文形式を使用している場合、既存のワークフロー内のモデル参照を更新する必要があるかもしれません。",
+ "detail": "例:filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "{groups} 組の重複にわたって {count} 個のファイルをリネームします",
+ "confirm": "ファイルをリネーム",
+ "cancel": "キャンセル"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "アプリケーション更新が検出されました",
+ "content": "ブラウザは古いバージョンのLoRA Manager({storedVersion})を実行しています。サーバーはバージョン{currentVersion}に更新されました。正常な機能を確保するため再読み込みしてください。",
+ "refreshNow": "今すぐ更新",
+ "refreshingIn": "更新まで",
+ "seconds": "秒"
+ },
+ "communitySupport": {
+ "title": "Keep LoRA Manager Thriving with Your Support ❤️",
+ "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
+ "supportCta": "Support on Ko-fi",
+ "learnMore": "LM Civitai Extension Tutorial"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "キャッシュの破損が検出されました"
+ },
+ "degraded": {
+ "title": "キャッシュの問題が検出されました"
+ },
+ "content": "{total}個のキャッシュエントリのうち{invalid}個が無効です({rate})。モデルが見つからない原因になったり、エラーが発生する可能性があります。キャッシュの再構築を推奨します。",
+ "rebuildCache": "キャッシュを再構築",
+ "dismiss": "閉じる",
+ "rebuilding": "キャッシュを再構築中...",
+ "rebuildFailed": "キャッシュの再構築に失敗しました: {error}",
+ "retry": "再試行"
+ }
+ }
}
diff --git a/locales/ko.json b/locales/ko.json
index 1e613351..cc16dea5 100644
--- a/locales/ko.json
+++ b/locales/ko.json
@@ -1,2167 +1,2171 @@
{
- "common": {
- "cancel": "취소",
- "confirm": "확인",
- "actions": {
- "save": "저장",
- "cancel": "취소",
- "confirm": "확인",
- "delete": "삭제",
- "move": "이동",
- "refresh": "새로고침",
- "back": "뒤로",
- "next": "다음",
- "backToTop": "맨 위로",
- "settings": "설정",
- "help": "도움말",
- "add": "추가",
- "close": "닫기",
- "menu": "메뉴",
- "remove": "제거",
- "change": "변경"
- },
- "status": {
- "loading": "로딩 중...",
- "cancelling": "취소 중...",
- "unknown": "알 수 없음",
- "date": "날짜",
- "version": "버전",
- "enabled": "활성화됨",
- "disabled": "비활성화됨"
- },
- "language": {
- "select": "언어",
- "select_help": "인터페이스에 사용할 언어를 선택하세요",
- "english": "English",
- "chinese_simplified": "中文(简体)",
- "chinese_traditional": "中文(繁体)",
- "russian": "Русский",
- "german": "Deutsch",
- "japanese": "日本語",
- "korean": "한국어",
- "french": "Français",
- "spanish": "Español",
- "Hebrew": "עברית"
- },
- "fileSize": {
- "zero": "0 바이트",
- "bytes": "바이트",
- "kb": "KB",
- "mb": "MB",
- "gb": "GB",
- "tb": "TB"
- }
+ "common": {
+ "cancel": "취소",
+ "confirm": "확인",
+ "actions": {
+ "save": "저장",
+ "cancel": "취소",
+ "confirm": "확인",
+ "delete": "삭제",
+ "move": "이동",
+ "refresh": "새로고침",
+ "back": "뒤로",
+ "next": "다음",
+ "backToTop": "맨 위로",
+ "settings": "설정",
+ "help": "도움말",
+ "add": "추가",
+ "close": "닫기",
+ "menu": "메뉴",
+ "remove": "제거",
+ "change": "변경"
},
- "onboarding": {
- "languageSelection": {
- "title": "LoRA Manager에 오신 것을 환영합니다",
- "continue": "계속",
- "changeFailed": "언어 변경 실패: {message}"
- },
- "tutorial": {
- "skipTutorial": "튜토리얼 건너뛰기",
- "back": "뒤로",
- "next": "다음",
- "finish": "완료"
- },
- "steps": {
- "fetch": {
- "title": "모델 메타데이터 가져오기",
- "content": "가져오기 버튼을 클릭하여 Civitai에서 모델 메타데이터와 미리보기 이미지를 다운로드하세요."
- },
- "download": {
- "title": "새 모델 다운로드",
- "content": "다운로드 버튼을 사용하여 Civitai URL에서 모델을 직접 다운로드하세요."
- },
- "bulk": {
- "title": "일괄 작업",
- "content": "이 버튼을 클릭하거나 B 키를 눌러 일괄 모드로 진입하세요. 여러 모델을 선택하여 일괄 작업을 수행할 수 있습니다. Ctrl+A로 모든 표시된 모델을 선택하세요."
- },
- "searchOptions": {
- "title": "검색 옵션",
- "content": "이 버튼을 클릭하여 검색할 필드를 설정하세요: 파일명, 모델명, 태그, 제작자명 등. 검색 범위를 자유롭게 지정할 수 있습니다."
- },
- "filter": {
- "title": "모델 필터링",
- "content": "필터를 사용하여 베이스 모델 유형(SD1.5, SDXL, Flux 등)이나 특정 태그로 모델을 좁혀보세요."
- },
- "breadcrumb": {
- "title": "경로(브레드크럼) 내비게이션",
- "content": "브레드크럼 내비게이션은 현재 경로를 보여주며 폴더 간 빠른 이동을 지원합니다. 폴더 이름을 클릭하면 해당 위치로 바로 이동합니다."
- },
- "modelCards": {
- "title": "모델 카드",
- "content": "한 번 클릭하면 모델 카드의 상세 정보와 메타데이터를 볼 수 있습니다. 편집 가능한 필드는 마우스를 올리면 연필 아이콘이 표시됩니다."
- },
- "contextMenu": {
- "title": "컨텍스트 메뉴",
- "content": "오른쪽 클릭으로 모델 카드의 추가 작업 메뉴를 사용할 수 있습니다."
- }
- }
+ "status": {
+ "loading": "로딩 중...",
+ "cancelling": "취소 중...",
+ "unknown": "알 수 없음",
+ "date": "날짜",
+ "version": "버전",
+ "enabled": "활성화됨",
+ "disabled": "비활성화됨"
},
- "modelCard": {
- "actions": {
- "addToFavorites": "즐겨찾기에 추가",
- "removeFromFavorites": "즐겨찾기에서 제거",
- "viewOnCivitai": "Civitai에서 보기",
- "notAvailableFromCivitai": "Civitai에서 사용할 수 없음",
- "sendToWorkflow": "ComfyUI로 전송 (클릭: 추가, Shift+클릭: 교체)",
- "copyLoRASyntax": "LoRA 문법 복사",
- "checkpointNameCopied": "Checkpoint 이름 복사됨",
- "toggleBlur": "블러 토글",
- "show": "보기",
- "openExampleImages": "예시 이미지 폴더 열기",
- "replacePreview": "미리보기 교체",
- "copyCheckpointName": "Checkpoint 이름 복사",
- "copyEmbeddingName": "Embedding 이름 복사",
- "embeddingNameCopied": "Embedding 구문 복사됨",
- "sendCheckpointToWorkflow": "ComfyUI로 전송",
- "sendEmbeddingToWorkflow": "ComfyUI로 전송"
- },
- "nsfw": {
- "matureContent": "성인 콘텐츠",
- "xxxRated": "XXX 등급 콘텐츠",
- "xRated": "X 등급 콘텐츠",
- "rRated": "R 등급 콘텐츠"
- },
- "favorites": {
- "added": "즐겨찾기에 추가됨",
- "removed": "즐겨찾기에서 제거됨",
- "updateFailed": "즐겨찾기 상태 업데이트 실패"
- },
- "sendToWorkflow": {
- "checkpointNotImplemented": "Checkpoint을 워크플로로 전송 - 구현 예정 기능",
- "missingPath": "이 카드의 모델 경로를 확인할 수 없습니다"
- },
- "exampleImages": {
- "checkError": "예시 이미지 확인 중 오류",
- "missingHash": "모델 해시 정보가 없습니다.",
- "noRemoteImagesAvailable": "Civitai에서 이 모델의 원격 예시 이미지를 사용할 수 없습니다"
- },
- "badges": {
- "update": "업데이트",
- "updateAvailable": "업데이트 가능",
- "skipRefresh": "메타데이터 새로고침 건너뜀"
- },
- "usage": {
- "timesUsed": "사용 횟수"
- },
- "footer": {
- "versionCount": "{count}개 버전",
- "viewAllVersions": "모든 로컬 버전 보기"
- }
+ "language": {
+ "select": "언어",
+ "select_help": "인터페이스에 사용할 언어를 선택하세요",
+ "english": "English",
+ "chinese_simplified": "中文(简体)",
+ "chinese_traditional": "中文(繁体)",
+ "russian": "Русский",
+ "german": "Deutsch",
+ "japanese": "日本語",
+ "korean": "한국어",
+ "french": "Français",
+ "spanish": "Español",
+ "Hebrew": "עברית"
},
- "globalContextMenu": {
- "downloadExampleImages": {
- "label": "예시 이미지 다운로드",
- "missingPath": "예시 이미지를 다운로드하기 전에 다운로드 위치를 설정하세요.",
- "unavailable": "예시 이미지 다운로드는 아직 사용할 수 없습니다. 페이지 로딩이 완료된 후 다시 시도하세요."
- },
- "checkModelUpdates": {
- "label": "업데이트 확인",
- "loading": "{type} 업데이트를 확인 중...",
- "success": "{type} 업데이트 {count}개를 찾았습니다",
- "none": "모든 {type}가 최신 상태입니다",
- "error": "{type} 업데이트 확인 실패: {message}"
- },
- "cleanupExampleImages": {
- "label": "예시 이미지 폴더 정리",
- "success": "{count}개의 폴더가 삭제 폴더로 이동되었습니다",
- "none": "정리가 필요한 예시 이미지 폴더가 없습니다",
- "partial": "정리가 완료되었으나 {failures}개의 폴더가 건너뛰어졌습니다",
- "error": "예시 이미지 폴더 정리에 실패했습니다: {message}"
- },
- "fetchMissingLicenses": {
- "label": "Refresh license metadata",
- "loading": "Refreshing license metadata for {typePlural}...",
- "success": "Updated license metadata for {count} {typePlural}",
- "none": "All {typePlural} already have license metadata",
- "error": "Failed to refresh license metadata for {typePlural}: {message}"
- },
- "repairRecipes": {
- "label": "레시피 데이터 복구",
- "loading": "레시피 데이터 복구 중...",
- "success": "{count}개의 레시피가 성공적으로 복구되었습니다.",
- "cancelled": "수리가 취소되었습니다. {count}개의 레시피가 수리되었습니다.",
- "error": "레시피 복구 실패: {message}"
- },
- "manageExcludedModels": {
- "label": "제외된 모델 관리"
- },
- "groupByModel": {
- "label": "모델별 그룹화"
- }
+ "fileSize": {
+ "zero": "0 바이트",
+ "bytes": "바이트",
+ "kb": "KB",
+ "mb": "MB",
+ "gb": "GB",
+ "tb": "TB"
+ }
+ },
+ "onboarding": {
+ "languageSelection": {
+ "title": "LoRA Manager에 오신 것을 환영합니다",
+ "continue": "계속",
+ "changeFailed": "언어 변경 실패: {message}"
},
- "header": {
- "appTitle": "LoRA Manager",
- "navigation": {
- "loras": "LoRA",
- "recipes": "레시피",
- "checkpoints": "Checkpoint",
- "embeddings": "Embedding",
- "statistics": "통계"
- },
- "search": {
- "placeholder": "검색",
- "options": "검색 옵션",
- "searchIn": "검색 범위:",
- "notAvailable": "통계 페이지에서는 검색을 사용할 수 없습니다",
- "filters": {
- "filename": "파일명",
- "modelname": "모델명",
- "tags": "태그",
- "creator": "제작자",
- "title": "레시피 제목",
- "loraName": "LoRA 파일명",
- "loraModel": "LoRA 모델명",
- "prompt": "프롬프트"
- }
- },
- "filter": {
- "title": "모델 필터",
- "presets": "프리셋",
- "savePreset": "현재 활성 필터를 새 프리셋으로 저장.",
- "savePresetDisabledActive": "저장할 수 없음: 프리셋이 이미 활성화되어 있습니다. 필터를 수정한 후 새 프리셋을 저장하세요",
- "savePresetDisabledNoFilters": "먼저 필터를 선택한 후 프리셋으로 저장",
- "savePresetPrompt": "프리셋 이름 입력:",
- "presetClickTooltip": "프리셋 \"{name}\" 적용하려면 클릭",
- "presetDeleteTooltip": "프리셋 삭제",
- "presetDeleteConfirm": "프리셋 \"{name}\" 삭제하시겠습니까?",
- "presetDeleteConfirmClick": "다시 클릭하여 확인",
- "presetOverwriteConfirm": "프리셋 \"{name}\"이(가) 이미 존재합니다. 덮어쓰시겠습니까?",
- "presetNamePlaceholder": "프리셋 이름...",
- "baseModel": "베이스 모델",
- "baseModelSearchPlaceholder": "베이스 모델 검색...",
- "modelTags": "태그 (상위 20개)",
- "modelTypes": "모델 유형",
- "license": "라이선스",
- "noCreditRequired": "크레딧 표기 없음",
- "allowSellingGeneratedContent": "판매 허용",
- "allowSellingGeneratedContentTooltip": "생성된 이미지 판매 허용",
- "noCreditRequiredTooltip": "크리에이터 저작자 표시 없이 모델 사용 가능",
- "noTags": "태그 없음",
- "autoTags": "자동 태그",
- "noBaseModelMatches": "현재 검색과 일치하는 베이스 모델이 없습니다.",
- "clearAll": "모든 필터 지우기",
- "any": "아무",
- "all": "모두",
- "tagLogicAny": "모든 태그 일치 (OR)",
- "tagLogicAll": "모든 태그 일치 (AND)"
- },
- "theme": {
- "toggle": "테마 토글",
- "switchToLight": "라이트 테마로 전환",
- "switchToDark": "다크 테마로 전환",
- "switchToAuto": "자동 테마로 전환",
- "presets": "테마 프리셋",
- "default": "기본",
- "nord": "Nord",
- "midnight": "Midnight",
- "monokai": "Monokai",
- "dracula": "Dracula",
- "solarized": "Solarized",
- "mode": "모드",
- "light": "라이트",
- "dark": "다크",
- "auto": "자동"
- },
- "actions": {
- "checkUpdates": "업데이트 확인",
- "notifications": "알림",
- "support": "지원"
- }
+ "tutorial": {
+ "skipTutorial": "튜토리얼 건너뛰기",
+ "back": "뒤로",
+ "next": "다음",
+ "finish": "완료"
},
- "settings": {
- "civitaiApiKey": "Civitai API 키",
- "civitaiApiKeyPlaceholder": "Civitai API 키를 입력하세요",
- "civitaiApiKeyHelp": "Civitai에서 모델을 다운로드할 때 인증에 사용됩니다",
- "civitaiApiKeyConfigured": "설정됨",
- "civitaiApiKeyNotConfigured": "설정되지 않음",
- "civitaiApiKeySet": "설정",
- "civitaiHost": {
- "label": "Civitai 호스트",
- "help": "\"View on Civitai\" 링크를 사용할 때 어떤 Civitai 사이트를 열지 선택합니다.",
- "options": {
- "com": "civitai.com(SFW 전용)",
- "red": "civitai.red(무제한)"
- }
- },
- "downloadBackend": {
- "label": "다운로드 백엔드",
- "help": "모델 파일을 다운로드하는 방식을 선택합니다. Python은 내장 다운로더를 사용하고, aria2는 권장되는 외부 다운로더 프로세스를 사용합니다.",
- "options": {
- "python": "Python(내장)",
- "aria2": "aria2(권장)"
- }
- },
- "aria2cPath": {
- "label": "aria2c 경로",
- "help": "aria2c 실행 파일의 선택적 경로입니다. 비워 두면 시스템 PATH의 aria2c를 사용합니다.",
- "placeholder": "비워 두면 PATH의 aria2c를 사용합니다"
- },
- "aria2HelpLink": "aria2 다운로드 백엔드 설정 방법 알아보기",
- "civitaiHostBanner": {
- "title": "Civitai 호스트 기본 설정 사용 가능",
- "content": "이제 Civitai는 SFW 콘텐츠에 civitai.com을, 무제한 콘텐츠에 civitai.red를 사용합니다. 설정에서 기본으로 열 사이트를 변경할 수 있습니다.",
- "openSettings": "설정 열기"
- },
- "openSettingsFileLocation": {
- "label": "설정 폴더 열기",
- "tooltip": "settings.json이 있는 폴더를 엽니다",
- "success": "settings.json 폴더를 열었습니다",
- "failed": "settings.json 폴더를 열지 못했습니다",
- "copied": "설정 경로가 클립보드에 복사되었습니다: {{path}}",
- "clipboardFallback": "설정 경로: {{path}}"
- },
- "sections": {
- "contentFiltering": "콘텐츠 필터링",
- "downloads": "다운로드",
- "videoSettings": "비디오 설정",
- "layoutSettings": "레이아웃 설정",
- "licenseIcons": "라이선스 아이콘",
- "misc": "기타",
- "backup": "백업",
- "folderSettings": "기본 루트",
- "recipeSettings": "레시피",
- "extraFolderPaths": "추가 폴다 경로",
- "downloadPathTemplates": "다운로드 경로 템플릿",
- "priorityTags": "우선순위 태그",
- "versionScope": "업데이트 표시",
- "exampleImages": "예시 이미지",
- "autoOrganize": "자동 정리",
- "metadata": "메타데이터",
- "proxySettings": "프록시 설정"
- },
- "nav": {
- "general": "일반",
- "interface": "인터페이스",
- "library": "라이브러리"
- },
- "search": {
- "placeholder": "설정 검색...",
- "clear": "검색 지우기",
- "noResults": "\"{query}\"와 일치하는 설정을 찾을 수 없습니다"
- },
- "storage": {
- "locationLabel": "휴대용 모드",
- "locationHelp": "활성화하면 settings.json을 리포지토리에 유지하고, 비활성화하면 사용자 구성 디렉터리에 저장합니다."
- },
- "contentFiltering": {
- "blurNsfwContent": "NSFW 콘텐츠 블러 처리",
- "blurNsfwContentHelp": "성인(NSFW) 콘텐츠 미리보기 이미지를 블러 처리합니다",
- "showOnlySfw": "SFW 결과만 표시",
- "showOnlySfwHelp": "탐색 및 검색 시 모든 NSFW 콘텐츠를 필터링합니다",
- "matureBlurThreshold": "성인 콘텐츠 블러 임계값",
- "matureBlurThresholdHelp": "NSFW 블러가 활성화될 때 어떤 등급 레벨부터 블러 필터링을 시작할지 설정합니다.",
- "matureBlurThresholdOptions": {
- "pg13": "PG13 이상",
- "r": "R 이상(기본값)",
- "x": "X 이상",
- "xxx": "XXX만"
- }
- },
- "videoSettings": {
- "autoplayOnHover": "호버 시 비디오 자동 재생",
- "autoplayOnHoverHelp": "마우스를 올렸을 때만 비디오 미리보기를 재생합니다"
- },
- "autoOrganizeExclusions": {
- "label": "자동 정리 제외 항목",
- "placeholder": "예: curated/*, */backups/*; *_temp.safetensors",
- "help": "이 와일드카드 패턴과 일치하는 파일 이동을 건너뜁니다. 여러 패턴은 쉼표 또는 세미콜론으로 구분하십시오.",
- "validation": {
- "noPatterns": "쉼표 또는 세미콜론으로 구분된 최소한 하나의 패턴을 입력하십시오.",
- "saveFailed": "제외 항목을 저장할 수 없습니다: {message}"
- }
- },
- "metadataRefreshSkipPaths": {
- "label": "메타데이터 새로고침 건너뛰기 경로",
- "placeholder": "예: temp, archived/old, test_models",
- "help": "일괄 메타데이터 새로고침(\"모든 메타데이터 가져오기\") 시 이 디렉터리 경로의 모델을 건너뜁니다. 모델 루트 디렉터리를 기준으로 한 폴 더 경로를 쉼표로 구분하여 입력하세요.",
- "validation": {
- "noPaths": "쉼표로 구분하여 하나 이상의 경로를 입력하세요.",
- "saveFailed": "건너뛰기 경로를 저장할 수 없습니다: {message}"
- }
- },
- "backup": {
- "autoEnabled": "자동 백업",
- "autoEnabledHelp": "하루에 한 번 로컬 스냅샷을 만들고 보존 정책에 따라 최신 스냅샷을 유지합니다.",
- "retention": "보존 개수",
- "retentionHelp": "오래된 자동 스냅샷을 삭제하기 전에 몇 개를 유지할지 지정합니다.",
- "management": "백업 관리",
- "managementHelp": "현재 사용자 상태를 내보내거나 백업 아카이브에서 복원합니다.",
- "scopeHelp": "설정, 다운로드 기록, 모델 업데이트 상태를 백업합니다. 모델 파일과 다시 생성할 수 있는 캐시는 포함되지 않습니다.",
- "locationSummary": "현재 백업 위치",
- "openFolderButton": "백업 폴더 열기",
- "openFolderSuccess": "백업 폴더를 열었습니다",
- "openFolderFailed": "백업 폴더를 열지 못했습니다",
- "locationCopied": "백업 경로를 클립보드에 복사했습니다: {{path}}",
- "locationClipboardFallback": "백업 경로: {{path}}",
- "exportButton": "백업 내보내기",
- "exportSuccess": "백업을 성공적으로 내보냈습니다.",
- "exportFailed": "백업 내보내기에 실패했습니다: {message}",
- "importButton": "백업 가져오기",
- "importConfirm": "이 백업을 가져와서 로컬 사용자 상태를 덮어쓰시겠습니까?",
- "importSuccess": "백업을 성공적으로 가져왔습니다.",
- "importFailed": "백업 가져오기에 실패했습니다: {message}",
- "latestSnapshot": "최근 스냅샷",
- "latestAutoSnapshot": "최근 자동 스냅샷",
- "snapshotCount": "저장된 스냅샷",
- "noneAvailable": "아직 스냅샷이 없습니다"
- },
- "downloadSkipBaseModels": {
- "label": "기본 모델 다운로드 건너뛰기",
- "help": "모든 다운로드 흐름에 적용됩니다. 여기서는 지원되는 기본 모델만 선택할 수 있습니다.",
- "searchPlaceholder": "기본 모델 필터링...",
- "empty": "현재 검색과 일치하는 기본 모델이 없습니다.",
- "summary": {
- "none": "선택 없음",
- "count": "{count}개 선택됨"
- },
- "actions": {
- "edit": "편집",
- "collapse": "접기",
- "clear": "지우기"
- },
- "validation": {
- "saveFailed": "제외된 기본 모델을 저장할 수 없습니다: {message}"
- }
- },
- "skipPreviouslyDownloadedModelVersions": {
- "label": "이전에 다운로드한 모델 버전 건너뛰기",
- "help": "활성화하면 다운로드 기록 서비스가 해당 버전이 이미 다운로드되었음을 기록한 경우 LoRA Manager는 해당 모델 버전 다운로드를 건너뜁니다. 모든 다운로드 플로우에 적용됩니다."
- },
- "layoutSettings": {
- "groupByModel": "모델별 그룹화",
- "groupByModelHelp": "활성화하면 각 Civitai 모델의 최신 버전만 단일 카드로 표시되며, 이전 버전은 숨겨집니다.",
- "displayDensity": "표시 밀도",
- "displayDensityOptions": {
- "default": "기본",
- "medium": "중간",
- "compact": "조밀"
- },
- "displayDensityHelp": "한 줄에 표시할 카드 수를 선택하세요:",
- "displayDensityDetails": {
- "default": "5개 (1080p), 6개 (2K), 8개 (4K)",
- "medium": "6개 (1080p), 7개 (2K), 9개 (4K)",
- "compact": "7개 (1080p), 8개 (2K), 10개 (4K)"
- },
- "displayDensityWarning": "경고: 높은 밀도는 리소스가 제한된 시스템에서 성능 문제를 일으킬 수 있습니다.",
- "showFolderSidebar": "폴더 사이드바 표시",
- "showFolderSidebarHelp": "모델 페이지에서 폴더 탐색 사이드바를 켜거나 끕니다. 비활성화하면 사이드바와 호버 영역이 표시되지 않습니다.",
- "cardInfoDisplay": "카드 정보 표시",
- "cardInfoDisplayOptions": {
- "always": "항상 표시",
- "hover": "호버 시 표시"
- },
- "cardInfoDisplayHelp": "모델 정보 및 액션 버튼을 언제 표시할지 선택하세요",
- "showVersionOnCard": "카드에 버전 표시",
- "showVersionOnCardHelp": "모델 카드에 버전 이름 표시 여부를 전환합니다",
- "modelCardFooterAction": "모델 카드 버튼 동작",
- "modelCardFooterActionOptions": {
- "exampleImages": "예시 이미지 열기",
- "replacePreview": "미리보기 교체"
- },
- "modelCardFooterActionHelp": "카드 우측 하단 버튼이 수행할 작업을 선택하세요",
- "modelNameDisplay": "모델명 표시",
- "modelNameDisplayOptions": {
- "modelName": "모델명",
- "fileName": "파일명"
- },
- "modelNameDisplayHelp": "모델 카드 하단에 표시할 내용을 선택하세요",
- "cardBlurAmount": "카드 오버레이 흐림 강도",
- "cardBlurAmountHelp": "모델 및 레시피 카드의 헤더와 푸터 오버레이 흐림 강도를 조정합니다 (0 = 흐림 없음, 20 = 최대 흐림)."
- },
- "folderSettings": {
- "activeLibrary": "활성 라이브러리",
- "activeLibraryHelp": "구성된 라이브러리를 전환하여 기본 폴더를 업데이트합니다. 선택을 변경하면 페이지가 다시 로드됩니다.",
- "loadingLibraries": "라이브러리를 불러오는 중...",
- "noLibraries": "구성된 라이브러리가 없습니다",
- "defaultLoraRoot": "LoRA 루트",
- "defaultLoraRootHelp": "다운로드, 가져오기 및 이동을 위한 기본 LoRA 루트 디렉토리를 설정합니다",
- "defaultCheckpointRoot": "Checkpoint 루트",
- "defaultCheckpointRootHelp": "다운로드, 가져오기 및 이동을 위한 기본 Checkpoint 루트 디렉토리를 설정합니다",
- "defaultUnetRoot": "Diffusion Model 루트",
- "defaultUnetRootHelp": "다운로드, 가져오기 및 이동을 위한 기본 Diffusion Model (UNET) 루트 디렉토리를 설정합니다",
- "defaultEmbeddingRoot": "Embedding 루트",
- "defaultEmbeddingRootHelp": "다운로드, 가져오기 및 이동을 위한 기본 Embedding 루트 디렉토리를 설정합니다",
- "recipesPath": "레시피 저장 경로",
- "recipesPathHelp": "저장된 레시피를 위한 선택적 사용자 지정 디렉터리입니다. 비워 두면 첫 번째 LoRA 루트의 recipes 폴더를 사용합니다.",
- "recipesPathPlaceholder": "/path/to/recipes",
- "recipesPathMigrating": "레시피 저장 경로를 이동 중...",
- "noDefault": "기본값 없음"
- },
- "extraFolderPaths": {
- "title": "추가 폴다 경로",
- "description": "LoRA Manager 전용 추가 모델 루트 경로입니다. ComfyUI의 표준 폴더 외부 위치에서 모델을 로드하여 대규모 라이브러리로 인한 성능 저하를 방지합니다.",
- "restartRequired": "Requires restart to take effect",
- "modelTypes": {
- "lora": "LoRA 경로",
- "checkpoint": "Checkpoint 경로",
- "unet": "Diffusion 모델 경로",
- "embedding": "Embedding 경로"
- },
- "pathPlaceholder": "/추가/모델/경로",
- "saveSuccess": "추가 폴다 경로가 업데이트되었습니다. 변경 사항을 적용하려면 재시작이 필요합니다.",
- "saveError": "추가 폴다 경로 업데이트 실패: {message}",
- "validation": {
- "duplicatePath": "이 경로는 이미 구성되어 있습니다"
- }
- },
- "priorityTags": {
- "title": "우선순위 태그",
- "description": "모델 유형별 태그 우선순위를 사용자 지정합니다(예: character, concept, style(toon|toon_style)).",
- "placeholder": "character, concept, style(toon|toon_style)",
- "helpLinkLabel": "우선순위 태그 도움말 열기",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "체크포인트",
- "embedding": "임베딩"
- },
- "saveSuccess": "우선순위 태그가 업데이트되었습니다.",
- "saveError": "우선순위 태그를 업데이트하지 못했습니다.",
- "loadingSuggestions": "추천을 불러오는 중...",
- "validation": {
- "missingClosingParen": "{index}번째 항목에 닫는 괄호가 없습니다.",
- "missingCanonical": "{index}번째 항목에는 정식 태그 이름이 포함되어야 합니다.",
- "duplicateCanonical": "정식 태그 \"{tag}\"가 여러 번 나타납니다.",
- "unknown": "잘못된 우선순위 태그 구성입니다."
- }
- },
- "downloadPathTemplates": {
- "title": "다운로드 경로 템플릿",
- "help": "Civitai에서 다운로드할 때 다양한 모델 유형의 폴더 구조를 구성합니다.",
- "availablePlaceholders": "사용 가능한 플레이스홀더:",
- "templateOptions": {
- "flatStructure": "플랫 구조",
- "byBaseModel": "베이스 모델별",
- "byAuthor": "제작자별",
- "byFirstTag": "첫 번째 태그별",
- "baseModelFirstTag": "베이스 모델 + 첫 번째 태그",
- "baseModelAuthor": "베이스 모델 + 제작자",
- "authorFirstTag": "제작자 + 첫 번째 태그",
- "baseModelAuthorFirstTag": "베이스 모델 + 제작자 + 첫 번째 태그",
- "customTemplate": "사용자 정의 템플릿"
- },
- "customTemplatePlaceholder": "사용자 정의 템플릿 입력 (예: {base_model}/{author}/{first_tag})",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "baseModelPathMappings": "베이스 모델 경로 매핑",
- "baseModelPathMappingsHelp": "특정 베이스 모델의 폴더 이름을 사용자 정의합니다 (예: \"Flux.1 D\" → \"flux\")",
- "addMapping": "매핑 추가",
- "selectBaseModel": "베이스 모델 선택",
- "customPathPlaceholder": "사용자 정의 경로 (예: flux)",
- "removeMapping": "매핑 제거",
- "validation": {
- "validFlat": "유효함 (플랫 구조)",
- "invalidChars": "잘못된 문자가 감지됨",
- "doubleSlashes": "이중 슬래시는 허용되지 않습니다",
- "leadingTrailingSlash": "슬래시로 시작하거나 끝날 수 없습니다",
- "invalidPlaceholder": "잘못된 플레이스홀더: {placeholder}",
- "validTemplate": "유효한 템플릿"
- }
- },
- "exampleImages": {
- "downloadLocation": "다운로드 위치",
- "downloadLocationPlaceholder": "예시 이미지 폴더 경로를 입력하세요",
- "downloadLocationHelp": "Civitai의 예시 이미지가 저장될 폴더 경로를 입력하세요",
- "autoDownload": "예시 이미지 자동 다운로드",
- "autoDownloadHelp": "예시 이미지가 없는 모델의 예시 이미지를 자동으로 다운로드합니다 (다운로드 위치 설정 필요)",
- "openMode": "예시 이미지 열기 동작",
- "openModeHelp": "서버에서 열지, 매핑된 로컬 경로를 복사할지, 사용자 지정 URI를 실행할지 선택합니다.",
- "openModeOptions": {
- "system": "서버에서 열기",
- "clipboard": "로컬 경로 복사",
- "uriTemplate": "사용자 지정 URI 열기"
- },
- "localRoot": "로컬 예시 이미지 루트",
- "localRootHelp": "서버 예시 이미지 디렉터리를 반영하는 선택적 로컬 또는 마운트된 루트입니다. 비워 두면 서버 경로를 재사용합니다.",
- "localRootPlaceholder": "예: /Volumes/ComfyUI/example_images",
- "uriTemplate": "URI 템플릿 열기",
- "uriTemplateHelp": "파일 URI 또는 Shortcuts 링크 같은 사용자 지정 딥링크를 사용합니다.",
- "uriTemplatePlaceholder": "예: shortcuts://run-shortcut?name=Open%20Finder&input=text&text={{encoded_local_path}}",
- "uriTemplatePlaceholders": "사용 가능한 플레이스홀더: {{local_path}}, {{encoded_local_path}}, {{relative_path}}, {{encoded_relative_path}}, {{file_uri}}, {{encoded_file_uri}}",
- "openModeWikiLink": "원격 열기 모드에 대해 자세히 알아보기",
- "optimizeImages": "다운로드된 이미지 최적화",
- "optimizeImagesHelp": "파일 크기를 줄이고 로딩 속도를 향상시키기 위해 예시 이미지를 최적화합니다 (메타데이터는 보존됨)",
- "download": "다운로드",
- "restartRequired": "재시작 필요"
- },
- "versionGrouping": {
- "label": "업데이트 표시 전략",
- "help": "새 릴리스가 로컬 파일과 동일한 베이스 모델을 공유할 때만 업데이트 배지를 표시할지, 또는 해당 모델에 사용 가능한 새 버전이 있으면 항상 표시할지 결정합니다.",
- "options": {
- "sameBase": "베이스 모델로 업데이트 일치",
- "any": "사용 가능한 모든 업데이트 표시"
- }
- },
- "hideEarlyAccessUpdates": {
- "label": "얼리 액세스 업데이트 숨기기",
- "help": "얼리 액세스 업데이트만"
- },
- "licenseIcons": {
- "useNewStyle": "업데이트된 라이선스 아이콘 사용",
- "useNewStyleHelp": "색상 표시기가 있는 라이선스 권한(새 스타일) 또는 제한 전용 아이콘(클래식 스타일)을 표시합니다. 현재 CivitAI 디자인을 반영합니다."
- },
- "misc": {
- "includeTriggerWords": "LoRA 문법에 트리거 단어 포함",
- "includeTriggerWordsHelp": "LoRA 문법을 클립보드에 복사할 때 학습된 트리거 단어를 포함합니다",
- "loraSyntaxFormat": "LoRA 구문 형식",
- "loraSyntaxFormatHelp": "LoRA 구문 형식. 전체 경로는 하위 폴더 경로(filename_v1.2 → filename_v1.2-ab3c",
- "impact": "{groups}개 중복 그룹에서 {count}개 파일 이름을 변경합니다",
- "confirm": "파일 이름 변경",
- "cancel": "취소"
+ "metadataFetchSummary": {
+ "title": "메타데이터 가져오기 요약",
+ "statSuccess": "성공",
+ "statFailed": "실패",
+ "statSkipped": "건너뜀",
+ "statTotal": "총 스캔",
+ "statDuration": "소요 시간",
+ "successMessage": "모든 {count}개 {type}이(가) 성공적으로 업데이트되었습니다",
+ "failedItems": "실패한 항목 ({count})",
+ "close": "닫기",
+ "copyReport": "보고서 복사",
+ "downloadCsv": "CSV 다운로드",
+ "columnModelName": "모델 이름",
+ "columnError": "오류"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "태그가 성공적으로 업데이트됨",
+ "updateFailed": "태그 업데이트 실패"
+ },
+ "validation": {
+ "maxLength": "태그는 30자를 초과할 수 없습니다",
+ "maxCount": "최대 30개의 태그만 허용됩니다",
+ "duplicate": "이 태그는 이미 존재합니다"
+ }
+ },
+ "initialization": {
+ "title": "초기화 중",
+ "message": "작업공간을 준비하고 있습니다...",
+ "status": "초기화 중...",
+ "estimatingTime": "시간 추정 중...",
+ "loras": {
+ "title": "LoRA Manager 초기화 중",
+ "message": "LoRA 캐시를 스캔하고 구축하고 있습니다. 몇 분이 걸릴 수 있습니다..."
+ },
+ "checkpoints": {
+ "title": "Checkpoint Manager 초기화 중",
+ "message": "Checkpoint 캐시를 스캔하고 구축하고 있습니다. 몇 분이 걸릴 수 있습니다..."
+ },
+ "embeddings": {
+ "title": "Embedding Manager 초기화 중",
+ "message": "Embedding 캐시를 스캔하고 구축하고 있습니다. 몇 분이 걸릴 수 있습니다..."
+ },
+ "recipes": {
+ "title": "Recipe Manager 초기화 중",
+ "message": "레시피를 로딩하고 처리하고 있습니다. 몇 분이 걸릴 수 있습니다..."
+ },
+ "statistics": {
+ "title": "통계 초기화 중",
+ "message": "통계를 위한 모델 데이터를 처리하고 있습니다. 몇 분이 걸릴 수 있습니다..."
+ },
+ "tips": {
+ "title": "팁 & 요령",
+ "civitai": {
+ "title": "Civitai 통합",
+ "description": "Civitai 계정 연결: 프로필 아바타 → 설정 → API 키 → API 키 추가를 방문한 후 LoRA Manager 설정에 붙여넣으세요.",
+ "alt": "Civitai API 설정"
+ },
+ "download": {
+ "title": "간편 다운로드",
+ "description": "Civitai URL을 사용하여 새로운 모델을 빠르게 다운로드하고 설치하세요.",
+ "alt": "Civitai 다운로드"
+ },
+ "recipes": {
+ "title": "레시피 저장",
+ "description": "향후 사용을 위해 좋아하는 모델 조합을 저장할 레시피를 생성하세요.",
+ "alt": "레시피"
+ },
+ "filter": {
+ "title": "빠른 필터링",
+ "description": "헤더의 필터 버튼을 사용하여 태그나 베이스 모델 유형별로 모델을 필터링하세요.",
+ "alt": "모델 필터"
+ },
+ "search": {
+ "title": "빠른 검색",
+ "description": "Ctrl+F (Mac에서는 Cmd+F)를 눌러 현재 뷰에서 빠르게 검색하세요.",
+ "alt": "빠른 검색"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "{count}개의 중복 그룹 발견",
+ "showNotification": "중복 알림 표시",
+ "deleteSelected": "선택된 항목 삭제",
+ "exitMode": "모드 종료",
+ "help": {
+ "identicalHashes": "동일한 해시는 이름이나 미리보기가 다르더라도 동일한 모델 파일을 의미합니다.",
+ "keepOne": "하나의 버전만 유지하고 (더 나은 메타데이터/미리보기가 있는 것이 바람직) 나머지는 안전하게 삭제하세요."
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "클립보드에 복사됨",
+ "copyFailed": "복사 실패"
+ },
+ "lora": {
+ "syntaxCopied": "LoRA 문법이 클립보드에 복사됨",
+ "syntaxCopiedNoTriggerWords": "LoRA 문법이 클립보드에 복사됨 (트리거 단어를 찾을 수 없음)",
+ "syntaxCopiedWithTriggerWords": "트리거 단어가 포함된 LoRA 문법이 클립보드에 복사됨",
+ "syntaxCopiedWithTriggerWordGroups": "트리거 단어 그룹이 포함된 LoRA 문법이 클립보드에 복사됨"
+ },
+ "workflow": {
+ "noSupportedNodes": "워크플로에서 지원되는 대상 노드를 찾을 수 없습니다",
+ "communicationFailed": "ComfyUI와의 통신에 실패했습니다",
+ "loraAdded": "LoRA가 워크플로에 추가되었습니다",
+ "loraReplaced": "LoRA가 워크플로에서 교체되었습니다",
+ "loraFailedToSend": "LoRA를 워크플로로 전송하지 못했습니다",
+ "recipeAdded": "레시피가 워크플로에 추가되었습니다",
+ "recipeReplaced": "레시피가 워크플로에서 교체되었습니다",
+ "recipeFailedToSend": "레시피를 워크플로로 전송하지 못했습니다",
+ "noMatchingNodes": "현재 워크플로에서 호환되는 노드가 없습니다",
+ "noTargetNodeSelected": "대상 노드가 선택되지 않았습니다",
+ "modelUpdated": "모델이 워크플로에서 업데이트되었습니다",
+ "modelFailed": "모델 노드 업데이트 실패",
+ "embeddingAdded": "Embedding을 워크플로에 추가했습니다",
+ "embeddingFailed": "Embedding 추가 실패",
+ "promptSent": "프롬프트를 워크플로에 보냈습니다",
+ "promptFailed": "프롬프트 보내기 실패"
+ },
+ "nodeSelector": {
+ "recipe": "레시피",
+ "lora": "LoRA",
+ "embedding": "임베딩",
+ "prompt": "프롬프트",
+ "replace": "교체",
+ "append": "추가",
+ "selectTargetNode": "대상 노드 선택",
+ "sendToAll": "모두에게 전송"
+ },
+ "exampleImages": {
+ "opened": "예시 이미지 폴더가 열렸습니다",
+ "openingFolder": "예시 이미지 폴더를 여는 중",
+ "failedToOpen": "예시 이미지 폴더 열기 실패",
+ "copiedPath": "경로를 클립보드에 복사했습니다: {{path}}",
+ "clipboardFallback": "경로: {{path}}",
+ "copiedUri": "링크를 클립보드에 복사했습니다: {{uri}}",
+ "uriClipboardFallback": "링크: {{uri}}",
+ "setupRequired": "예시 이미지 저장소",
+ "setupDescription": "사용자 지정 예시 이미지를 추가하려면 먼저 다운로드 위치를 설정해야 합니다.",
+ "setupUsage": "이 경로는 다운로드한 예시 이미지와 사용자 지정 이미지 모두에 사용됩니다.",
+ "openSettings": "설정 열기"
+ }
+ },
+ "help": {
+ "title": "도움말 & 튜토리얼",
+ "tabs": {
+ "gettingStarted": "시작하기",
+ "updateVlogs": "업데이트 영상",
+ "documentation": "문서"
+ },
+ "gettingStarted": {
+ "title": "LoRA Manager 시작하기"
+ },
+ "updateVlogs": {
+ "title": "최신 업데이트",
+ "watchOnYouTube": "YouTube에서 보기",
+ "playlistTitle": "LoRA Manager 업데이트 재생목록",
+ "playlistDescription": "최신 기능과 개선사항을 보여주는 모든 업데이트 비디오를 시청하세요."
+ },
+ "documentation": {
+ "title": "문서",
+ "general": "일반",
+ "troubleshooting": "문제 해결",
+ "modelManagement": "모델 관리",
+ "recipes": "레시피",
+ "settings": "설정 & 구성",
+ "extensions": "확장",
+ "newBadge": "신규"
+ }
+ },
+ "update": {
+ "title": "업데이트 확인",
+ "notificationsTitle": "알림 센터",
+ "tabs": {
+ "updates": "업데이트",
+ "messages": "메시지"
+ },
+ "updateAvailable": "업데이트 사용 가능",
+ "noChangelogAvailable": "상세한 변경 로그가 없습니다. 더 많은 정보는 GitHub를 확인하세요.",
+ "currentVersion": "현재 버전",
+ "newVersion": "새 버전",
+ "commit": "커밋",
+ "viewOnGitHub": "GitHub에서 보기",
+ "updateNow": "지금 업데이트",
+ "preparingUpdate": "업데이트 준비 중...",
+ "changelog": "변경 로그",
+ "checkingUpdates": "업데이트 확인 중...",
+ "checkingMessage": "최신 버전을 확인하는 동안 잠시 기다려주세요.",
+ "showNotifications": "업데이트 알림 표시",
+ "latestBadge": "최신",
+ "updateProgress": {
+ "preparing": "업데이트 준비 중...",
+ "installing": "업데이트 설치 중...",
+ "completed": "업데이트가 성공적으로 완료되었습니다!",
+ "failed": "업데이트 실패: {error}"
+ },
+ "status": {
+ "updating": "업데이트 중...",
+ "updated": "업데이트됨!",
+ "updateFailed": "업데이트 실패"
+ },
+ "completion": {
+ "successMessage": "{version}로 성공적으로 업데이트되었습니다!",
+ "restartMessage": "업데이트를 적용하려면 ComfyUI 또는 LoRA Manager를 재시작해주세요.",
+ "reloadMessage": "LoRA Manager와 ComfyUI 모두에 대해 브라우저를 새로고침해야 합니다."
+ },
+ "nightly": {
+ "warning": "경고: 나이틀리 빌드는 실험적 기능을 포함할 수 있으며 불안정할 수 있습니다.",
+ "enable": "나이틀리 업데이트 활성화"
},
"banners": {
- "versionMismatch": {
- "title": "애플리케이션 업데이트 감지",
- "content": "브라우저에서 구버전의 LoRA Manager ({storedVersion})를 실행하고 있습니다. 서버가 버전 {currentVersion}로 업데이트되었습니다. 올바른 기능을 위해 새로고침해주세요.",
- "refreshNow": "지금 새로고침",
- "refreshingIn": "새로고침까지",
- "seconds": "초"
- },
- "communitySupport": {
- "title": "Keep LoRA Manager Thriving with Your Support ❤️",
- "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
- "supportCta": "Support on Ko-fi",
- "learnMore": "LM Civitai Extension Tutorial"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "캐시 손상이 감지되었습니다"
- },
- "degraded": {
- "title": "캐시 문제가 감지되었습니다"
- },
- "content": "{total}개의 캐시 항목 중 {invalid}개가 유효하지 않습니다 ({rate}). 모델 누락이나 오류가 발생할 수 있습니다. 캐시를 재구축하는 것이 좋습니다.",
- "rebuildCache": "캐시 재구축",
- "dismiss": "무시",
- "rebuilding": "캐시 재구축 중...",
- "rebuildFailed": "캐시 재구축 실패: {error}",
- "retry": "다시 시도"
- }
+ "recent": "최근 알림",
+ "empty": "최근 배너가 없습니다.",
+ "shown": "{time}에 표시",
+ "dismissed": "{time}에 닫힘",
+ "active": "활성"
}
+ },
+ "support": {
+ "title": "프로젝트 지원",
+ "message": "LoRA Manager가 유용하다고 생각하신다면, 지원해주시면 정말 감사하겠습니다! 🙌",
+ "feedback": {
+ "title": "피드백 제공",
+ "description": "여러분의 피드백이 향후 업데이트를 만드는 데 도움이 됩니다! 의견을 공유해주세요:"
+ },
+ "links": {
+ "submitGithubIssue": "GitHub 이슈 제출",
+ "joinDiscord": "Discord 참여",
+ "youtubeChannel": "YouTube 채널",
+ "civitaiProfile": "Civitai 프로필",
+ "supportKofi": "Ko-fi에서 지원",
+ "supportPatreon": "Patreon에서 지원"
+ },
+ "sections": {
+ "followUpdates": "업데이트 팔로우",
+ "buyMeCoffee": "커피 사주기",
+ "coffeeDescription": "제 작업을 직접 지원하고 싶으시다면:",
+ "becomePatron": "후원자 되기",
+ "patronDescription": "월간 기여로 지속적인 개발을 지원하세요:",
+ "wechatSupport": "WeChat 지원",
+ "wechatDescription": "중국 사용자의 경우, WeChat을 통해 지원할 수 있습니다:",
+ "showWechatQR": "WeChat QR 코드 표시",
+ "hideWechatQR": "WeChat QR 코드 숨기기"
+ },
+ "footer": "LoRA Manager를 사용해주셔서 감사합니다! ❤️",
+ "supporters": {
+ "title": "후원자 분들께 감사드립니다",
+ "subtitle": "이 프로젝트를 가능하게 해준 {count}명의 후원자분들께 감사드립니다",
+ "specialThanks": "특별 감사",
+ "allSupporters": "모든 후원자",
+ "totalCount": "총 {count}명의 후원자"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "독립 실행 모드에서는 ComfyUI와 상호작용할 수 없습니다",
+ "failedWorkflowInfo": "워크플로 정보를 가져오는데 실패했습니다",
+ "pageInitFailed": "{pageType} 페이지 초기화에 실패했습니다. 새로고침해주세요.",
+ "statisticsLoadFailed": "통계 데이터 로딩에 실패했습니다"
+ },
+ "loras": {
+ "copyOnlyForLoras": "문법 복사는 LoRA에서만 사용할 수 있습니다",
+ "noLorasSelected": "선택된 LoRA가 없습니다",
+ "missingDataForLoras": "{count}개 LoRA의 데이터가 누락되었습니다",
+ "noValidLorasToCopy": "복사할 유효한 LoRA가 없습니다",
+ "sendOnlyForLoras": "워크플로로 전송은 LoRA에서만 사용할 수 있습니다",
+ "noValidLorasToSend": "전송할 유효한 LoRA가 없습니다",
+ "downloadSuccessful": "LoRA가 성공적으로 다운로드되었습니다",
+ "allDownloadSuccessful": "모든 {count}개 LoRA가 성공적으로 다운로드되었습니다",
+ "downloadPartialSuccess": "{total}개 중 {completed}개 LoRA가 다운로드되었습니다",
+ "downloadPartialWithAccess": "{total}개 중 {completed}개 LoRA가 다운로드되었습니다. {accessFailures}개는 액세스 제한으로 실패했습니다. 설정에서 API 키 또는 얼리 액세스 상태를 확인하세요.",
+ "pleaseSelectVersion": "버전을 선택해주세요",
+ "versionExists": "이 버전은 이미 라이브러리에 있습니다",
+ "downloadCompleted": "다운로드가 성공적으로 완료되었습니다",
+ "downloadSkippedByBaseModel": "기본 모델 {baseModel}이(가) 제외되어 다운로드를 건너뛰었습니다",
+ "autoOrganizeSuccess": "{count}개의 {type}에 대해 자동 정리가 성공적으로 완료되었습니다",
+ "autoOrganizePartialSuccess": "자동 정리 완료: 전체 {total}개 중 {success}개 이동, {failures}개 실패",
+ "autoOrganizeFailed": "자동 정리 실패: {error}",
+ "noModelsSelected": "선택된 모델이 없습니다"
+ },
+ "recipes": {
+ "fetchFailed": "레시피 가져오기 실패: {message}",
+ "reloadFailed": "{modelType} 다시 로딩 실패: {message}",
+ "loadFailed": "{modelType} 로딩 실패: {message}",
+ "refreshComplete": "새로고침 완료",
+ "refreshFailed": "레시피 새로고침 실패: {message}",
+ "syncComplete": "동기화 완료",
+ "syncFailed": "레시피 동기화 실패: {message}",
+ "updateFailed": "레시피 업데이트 실패: {error}",
+ "updateError": "레시피 업데이트 오류: {message}",
+ "nameSaved": "레시피 \"{name}\"이 성공적으로 저장되었습니다",
+ "nameUpdated": "레시피 이름이 성공적으로 업데이트되었습니다",
+ "tagsUpdated": "레시피 태그가 성공적으로 업데이트되었습니다",
+ "sourceUrlUpdated": "소스 URL이 성공적으로 업데이트되었습니다",
+ "promptUpdated": "프롬프트가 성공적으로 업데이트되었습니다",
+ "negativePromptUpdated": "네거티브 프롬프트가 성공적으로 업데이트되었습니다",
+ "promptEditorHint": "Enter 키를 눌러 저장, Shift+Enter로 새 줄",
+ "noRecipeId": "사용 가능한 레시피 ID가 없습니다",
+ "sendToWorkflowFailed": "워크플로우에 레시피 보내기 실패: {message}",
+ "copyFailed": "레시피 문법 복사 오류: {message}",
+ "createError": "레시피 생성 중 오류 발생:{message}",
+ "createFailed": "레시피 생성 실패:{error}",
+ "createMissingData": "레시피 생성에 필요한 데이터가 없습니다",
+ "created": "레시피가 생성되었습니다",
+ "noMissingLoras": "다운로드할 누락된 LoRA가 없습니다",
+ "missingLorasInfoFailed": "누락된 LoRA 정보를 가져오는데 실패했습니다",
+ "preparingForDownloadFailed": "LoRA 다운로드 준비 오류",
+ "enterLoraName": "LoRA 이름 또는 문법을 입력해주세요",
+ "reconnectedSuccessfully": "LoRA가 성공적으로 다시 연결되었습니다",
+ "reconnectFailed": "LoRA 다시 연결 오류: {message}",
+ "noPromptToSend": "보낼 프롬프트가 없습니다",
+ "cannotSend": "레시피를 전송할 수 없습니다: 레시피 ID 누락",
+ "sendFailed": "레시피를 워크플로로 전송하는데 실패했습니다",
+ "sendError": "레시피를 워크플로로 전송하는 중 오류",
+ "missingCheckpointPath": "체크포인트 경로를 사용할 수 없습니다",
+ "missingCheckpointInfo": "체크포인트 정보가 부족합니다",
+ "downloadCheckpointFailed": "체크포인트 다운로드 실패: {message}",
+ "cannotDelete": "레시피를 삭제할 수 없습니다: 레시피 ID 누락",
+ "deleteConfirmationError": "삭제 확인 표시 오류",
+ "deletedSuccessfully": "레시피가 성공적으로 삭제되었습니다",
+ "deleteFailed": "레시피 삭제 오류: {message}",
+ "cannotShare": "레시피를 공유할 수 없습니다: 레시피 ID 누락",
+ "preparingForSharing": "공유를 위한 레시피 준비 중...",
+ "downloadStarted": "레시피 다운로드가 시작되었습니다",
+ "shareError": "레시피 공유 오류: {message}",
+ "sharePreparationError": "레시피 공유 준비 오류",
+ "selectImageFirst": "먼저 이미지를 선택해주세요",
+ "enterRecipeName": "레시피 이름을 입력해주세요",
+ "processingError": "처리 오류: {message}",
+ "folderBrowserError": "폴더 브라우저 로딩 오류: {message}",
+ "recipeSaveFailed": "레시피 저장 실패: {error}",
+ "recipeSaved": "Recipe saved successfully",
+ "importFailed": "가져오기 실패: {message}",
+ "folderTreeFailed": "폴더 트리 로딩 실패",
+ "folderTreeError": "폴더 트리 로딩 오류",
+ "batchImportFailed": "Failed to start batch import: {message}",
+ "batchImportCancelling": "Cancelling batch import...",
+ "batchImportCancelFailed": "Failed to cancel batch import: {message}",
+ "batchImportNoUrls": "Please enter at least one URL or file path",
+ "batchImportNoDirectory": "Please enter a directory path",
+ "batchImportBrowseFailed": "Failed to browse directory: {message}",
+ "batchImportDirectorySelected": "Directory selected: {path}",
+ "noRecipesSelected": "선택한 레시피가 없습니다",
+ "repairBulkComplete": "복구 완료: {repaired}개 복구, {skipped}개 건너뜀 (총 {total}개)",
+ "repairBulkSkipped": "선택한 {total}개 레시피는 복구가 필요하지 않습니다",
+ "repairBulkFailed": "선택한 레시피 복구 실패: {message}",
+ "reimporting": "소스에서 레시피를 다시 가져오는 중...",
+ "reimportSuccess": "레시피를 다시 가져왔습니다",
+ "reimportBulkComplete": "다시 가져오기 완료: {completed}개 성공, {failed}개 실패 (총 {total}개)",
+ "reimportBulkFailed": "일부 레시피를 다시 가져오지 못했습니다",
+ "noMissingLorasInSelection": "선택한 레시피에서 누락된 LoRA를 찾을 수 없습니다",
+ "noLoraRootConfigured": "LoRA 루트 디렉토리가 구성되지 않았습니다. 설정에서 기본 LoRA 루트를 설정하세요."
+ },
+ "models": {
+ "noModelsSelected": "선택된 모델이 없습니다",
+ "deletedSuccessfully": "{count}개의 {type}이(가) 성공적으로 삭제되었습니다",
+ "deleteFailed": "오류: {error}",
+ "deleteFailedGeneral": "모델 삭제에 실패했습니다",
+ "selectedAdditional": "추가로 {count}개의 {type}이(가) 선택되었습니다",
+ "marqueeSelectionComplete": "마키 선택으로 {count}개의 {type}이(가) 선택되었습니다",
+ "refreshMetadataFailed": "메타데이터 새로고침에 실패했습니다",
+ "nameCannotBeEmpty": "모델 이름은 비어있을 수 없습니다",
+ "nameUpdatedSuccessfully": "모델 이름이 성공적으로 업데이트되었습니다",
+ "nameUpdateFailed": "모델 이름 업데이트에 실패했습니다",
+ "baseModelUpdated": "베이스 모델이 성공적으로 업데이트되었습니다",
+ "baseModelUpdateFailed": "베이스 모델 업데이트에 실패했습니다",
+ "baseModelNotSelected": "베이스 모델을 선택해주세요",
+ "bulkBaseModelUpdating": "{count}개의 모델에 베이스 모델을 업데이트 중...",
+ "bulkBaseModelUpdateSuccess": "{count}개의 모델에 베이스 모델이 성공적으로 업데이트되었습니다",
+ "bulkBaseModelUpdatePartial": "{success}개의 모델이 업데이트되었고, {failed}개의 모델이 실패했습니다",
+ "bulkBaseModelUpdateFailed": "선택한 모델의 베이스 모델 업데이트에 실패했습니다",
+ "skipMetadataRefreshUpdating": "{count}개 모델의 메타데이터 새로고침 플래그를 업데이트하는 중...",
+ "skipMetadataRefreshSet": "{count}개 모델의 메타데이터 새로고침을 건너뛰었습니다",
+ "skipMetadataRefreshCleared": "{count}개 모델의 메타데이터 새로고침을 재개했습니다",
+ "skipMetadataRefreshPartial": "{success}개 모델을 업데이트했습니다. {failed}개 실패",
+ "skipMetadataRefreshFailed": "선택한 모델의 메타데이터 새로고침 플래그 업데이트 실패",
+ "bulkContentRatingUpdating": "{count}개 모델의 콘텐츠 등급을 업데이트하는 중...",
+ "bulkContentRatingSet": "{count}개 모델의 콘텐츠 등급을 {level}(으)로 설정했습니다",
+ "bulkContentRatingPartial": "{success}개 모델의 콘텐츠 등급을 {level}(으)로 설정했고, {failed}개는 실패했습니다",
+ "bulkContentRatingFailed": "선택한 모델의 콘텐츠 등급을 업데이트하지 못했습니다",
+ "bulkFavoriteUpdating": "{count}개 모델을 즐겨찾기에 추가 중...",
+ "bulkUnfavoriteUpdating": "{count}개 모델을 즐겨찾기에서 제거 중...",
+ "bulkFavoritePartialAdded": "{success}개 모델을 즐겨찾기에 추가, {failed}개 실패",
+ "bulkFavoritePartialRemoved": "{success}개 모델을 즐겨찾기에서 제거, {failed}개 실패",
+ "bulkFavoriteFailed": "즐겨찾기 상태 업데이트 실패",
+ "bulkUpdatesChecking": "선택한 {type}의 업데이트를 확인하는 중...",
+ "bulkUpdatesSuccess": "선택한 {count}개의 {type}에 사용할 수 있는 업데이트가 있습니다",
+ "bulkUpdatesNone": "선택한 {type}에 대한 업데이트가 없습니다",
+ "bulkUpdatesMissing": "선택한 {type}이 Civitai 업데이트에 연결되어 있지 않습니다",
+ "bulkUpdatesPartialMissing": "Civitai 링크가 없는 {missing}개의 {type}을 건너뛰었습니다",
+ "bulkUpdatesFailed": "선택한 {type}의 업데이트 확인에 실패했습니다: {message}",
+ "invalidCharactersRemoved": "파일명에서 잘못된 문자가 제거되었습니다",
+ "filenameCannotBeEmpty": "파일 이름은 비어있을 수 없습니다",
+ "renameFailed": "파일 이름 변경 실패: {message}",
+ "moveFailed": "모델 이동 실패: {message}",
+ "pleaseSelectRoot": "{type} 루트 디렉토리를 선택해주세요",
+ "nameTooLong": "모델 이름은 100자로 제한됩니다",
+ "verificationAlreadyDone": "이 그룹은 이미 검증되었습니다",
+ "verificationCompleteMismatch": "검증 완료. {count}개 파일의 실제 해시가 다릅니다.",
+ "verificationCompleteSuccess": "검증 완료. 모든 파일이 중복임을 확인했습니다.",
+ "verificationFailed": "해시 검증 실패: {message}",
+ "noTagsToAdd": "추가할 태그가 없습니다",
+ "bulkTagsUpdating": "{count}개 모델의 태그를 업데이트 중입니다...",
+ "tagsAddedSuccessfully": "{count}개의 {type}에 {tagCount}개의 태그가 성공적으로 추가되었습니다",
+ "tagsReplacedSuccessfully": "{count}개의 {type}의 태그가 {tagCount}개의 태그로 성공적으로 교체되었습니다",
+ "tagsAddFailed": "{count}개의 모델에 태그 추가에 실패했습니다",
+ "tagsReplaceFailed": "{count}개의 모델의 태그 교체에 실패했습니다",
+ "bulkTagsAddFailed": "모델에 태그 추가에 실패했습니다",
+ "bulkTagsReplaceFailed": "모델의 태그 교체에 실패했습니다"
+ },
+ "search": {
+ "atLeastOneOption": "최소 하나의 검색 옵션을 선택해야 합니다"
+ },
+ "settings": {
+ "loraRootsFailed": "LoRA 루트 로딩 실패: {message}",
+ "checkpointRootsFailed": "Checkpoint 루트 로딩 실패: {message}",
+ "unetRootsFailed": "Diffusion Model 루트 로딩 실패: {message}",
+ "embeddingRootsFailed": "Embedding 루트 로딩 실패: {message}",
+ "mappingsUpdated": "베이스 모델 경로 매핑이 업데이트되었습니다 ({count}개 매핑)",
+ "mappingsCleared": "베이스 모델 경로 매핑이 지워졌습니다",
+ "mappingSaveFailed": "베이스 모델 매핑 저장 실패: {message}",
+ "downloadTemplatesUpdated": "다운로드 경로 템플릿이 업데이트되었습니다",
+ "downloadTemplatesFailed": "다운로드 경로 템플릿 저장 실패: {message}",
+ "recipesPathUpdated": "레시피 저장 경로가 업데이트되었습니다",
+ "recipesPathSaveFailed": "레시피 저장 경로 업데이트 실패: {message}",
+ "settingsUpdated": "설정 업데이트됨: {setting}",
+ "compactModeToggled": "컴팩트 모드 {state}",
+ "settingSaveFailed": "설정 저장 실패: {message}",
+ "displayDensitySet": "표시 밀도가 {density}로 설정되었습니다",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "언어 변경 실패: {message}",
+ "cacheCleared": "캐시 파일이 성공적으로 지워졌습니다. 다음 작업 시 캐시가 재구축됩니다.",
+ "cacheClearFailed": "캐시 지우기 실패: {error}",
+ "cacheClearError": "캐시 지우기 오류: {message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "필터가 지워졌습니다",
+ "noCustomFilterToClear": "지울 사용자 정의 필터가 없습니다",
+ "noActiveFilters": "저장할 활성 필터가 없습니다"
+ },
+ "presets": {
+ "created": "프리셋 \"{name}\" 생성됨",
+ "deleted": "프리셋 \"{name}\" 삭제됨",
+ "applied": "프리셋 \"{name}\" 적용됨",
+ "overwritten": "프리셋 \"{name}\" 덮어쓰기 완료",
+ "restored": "기본 프리셋 복원 완료"
+ },
+ "error": {
+ "presetNameEmpty": "프리셋 이름을 입력하세요",
+ "presetNameTooLong": "프리셋 이름은 {max}자 이하여야 합니다",
+ "presetNameInvalidChars": "프리셋 이름에 유효하지 않은 문자가 포함되어 있습니다",
+ "presetNameExists": "동일한 이름의 프리셋이 이미 존재합니다",
+ "maxPresetsReached": "최대 {max}개의 프리셋만 허용됩니다. 더 추가하려면 기존 것을 삭제하세요.",
+ "presetNotFound": "프리셋을 찾을 수 없습니다",
+ "invalidPreset": "잘못된 프리셋 데이터입니다",
+ "deletePresetFailed": "프리셋 삭제에 실패했습니다",
+ "applyPresetFailed": "프리셋 적용에 실패했습니다"
+ },
+ "downloads": {
+ "imagesCompleted": "예시 이미지 {action}이(가) 완료되었습니다",
+ "imagesFailed": "예시 이미지 {action}이(가) 실패했습니다",
+ "loadError": "다운로드 로딩 오류: {message}",
+ "downloadError": "다운로드 오류: {message}"
+ },
+ "import": {
+ "folderTreeFailed": "폴더 트리 로딩 실패",
+ "folderTreeError": "폴더 트리 로딩 오류",
+ "imagesImported": "예시 이미지가 성공적으로 가져와졌습니다",
+ "imagesPartial": "{success}개 이미지 가져오기 성공, {failed}개 실패",
+ "importFailed": "예시 이미지 가져오기 실패: {message}"
+ },
+ "triggerWords": {
+ "loadFailed": "학습된 단어를 로딩할 수 없습니다",
+ "tooLong": "트리거 단어는 500단어를 초과할 수 없습니다",
+ "tooMany": "최대 100개의 트리거 단어만 허용됩니다",
+ "alreadyExists": "이 트리거 단어는 이미 존재합니다",
+ "updateSuccess": "트리거 단어가 성공적으로 업데이트되었습니다",
+ "updateFailed": "트리거 단어 업데이트에 실패했습니다",
+ "copyFailed": "복사 실패"
+ },
+ "virtual": {
+ "loadFailed": "항목 로딩 실패",
+ "loadMoreFailed": "더 많은 항목 로딩 실패",
+ "loadPositionFailed": "이 위치의 항목 로딩 실패"
+ },
+ "bulk": {
+ "unableToSelectAll": "모든 항목을 선택할 수 없습니다"
+ },
+ "duplicates": {
+ "findFailed": "중복 찾기 실패: {message}",
+ "noDuplicatesFound": "중복 {type}을(를) 찾을 수 없습니다",
+ "noItemsSelected": "삭제할 {type}이(가) 선택되지 않았습니다",
+ "deleteError": "오류: {message}",
+ "deleteSuccess": "{count}개의 {type}이(가) 성공적으로 삭제되었습니다",
+ "deleteFailed": "{type} 삭제 실패: {message}"
+ },
+ "controls": {
+ "reloadFailed": "{pageType} 다시 로딩 실패: {message}",
+ "refreshFailed": "{pageType} {action} 실패: {message}",
+ "fetchMetadataFailed": "메타데이터 가져오기 실패: {message}",
+ "clearFilterFailed": "사용자 정의 필터 지우기 실패: {message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "콘텐츠 등급이 {level}로 설정되었습니다",
+ "contentRatingFailed": "콘텐츠 등급 설정 실패: {message}",
+ "relinkSuccess": "모델이 Civitai에 성공적으로 다시 연결되었습니다",
+ "relinkFailed": "오류: {message}",
+ "fetchMetadataFirst": "먼저 CivitAI에서 메타데이터를 가져와주세요",
+ "noCivitaiInfo": "사용 가능한 CivitAI 정보가 없습니다",
+ "missingHash": "모델 해시를 사용할 수 없습니다"
+ },
+ "exampleImages": {
+ "pathUpdated": "예시 이미지 경로가 성공적으로 업데이트되었습니다",
+ "pathUpdateFailed": "예시 이미지 경로 업데이트 실패: {message}",
+ "downloadInProgress": "이미 다운로드가 진행 중입니다",
+ "enterLocationFirst": "먼저 다운로드 위치를 입력해주세요",
+ "downloadStarted": "예시 이미지 다운로드가 시작되었습니다",
+ "downloadStartFailed": "다운로드 시작 실패: {error}",
+ "downloadPaused": "다운로드가 일시정지되었습니다",
+ "pauseFailed": "다운로드 일시정지 실패: {error}",
+ "downloadResumed": "다운로드가 재개되었습니다",
+ "resumeFailed": "다운로드 재개 실패: {error}",
+ "downloadStopped": "다운로드가 취소되었습니다",
+ "stopFailed": "다운로드 취소 실패: {error}",
+ "deleted": "예시 이미지가 삭제되었습니다",
+ "deleteFailed": "예시 이미지 삭제 실패",
+ "setPreviewFailed": "미리보기 이미지 설정 실패"
+ },
+ "api": {
+ "fetchFailed": "{type} 가져오기 실패: {message}",
+ "reloadFailed": "{type} 다시 로딩 실패: {message}",
+ "deleteSuccess": "{type}이(가) 성공적으로 삭제되었습니다",
+ "deleteFailed": "{type} 삭제 실패: {message}",
+ "excludeSuccess": "{type}이(가) 성공적으로 제외되었습니다",
+ "excludeFailed": "{type} 제외 실패: {message}",
+ "restoreSuccess": "{type} 복원 완료",
+ "restoreFailed": "{type} 복원 실패: {message}",
+ "fileNameUpdated": "파일명이 성공적으로 업데이트되었습니다",
+ "fileRenameFailed": "파일 이름 변경 실패: {error}",
+ "previewUpdated": "미리보기가 성공적으로 업데이트되었습니다",
+ "previewUploadFailed": "미리보기 이미지 업로드 실패",
+ "refreshComplete": "{action} 완료",
+ "refreshFailed": "{type} {action} 실패",
+ "metadataRefreshed": "메타데이터가 성공적으로 새로고침되었습니다",
+ "metadataRefreshFailed": "메타데이터 새로고침 실패: {message}",
+ "metadataUpdateComplete": "메타데이터 업데이트 완료",
+ "operationCancelled": "사용자에 의해 작업이 취소되었습니다",
+ "operationCancelledPartial": "작업이 취소되었습니다. {success}개 항목이 처리되었습니다.",
+ "metadataFetchFailed": "메타데이터 가져오기 실패: {message}",
+ "bulkMetadataCompleteAll": "모든 {count}개 {type}이(가) 성공적으로 새로고침되었습니다",
+ "bulkMetadataCompletePartial": "{total}개 중 {success}개 {type}이(가) 새로고침되었습니다",
+ "bulkMetadataCompleteNone": "어떤 {type}의 메타데이터도 새로고침하지 못했습니다",
+ "bulkMetadataFailureDetails": "실패한 새로고침:\n{failures}",
+ "bulkMetadataFailed": "메타데이터 새로고침 실패: {message}",
+ "moveNotSupported": "{type} 이동은 지원되지 않습니다",
+ "alreadyInFolder": "{type}이(가) 이미 선택된 폴더에 있습니다",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type}이(가) 성공적으로 이동되었습니다",
+ "bulkMoveNotSupported": "{type} 이동은 지원되지 않습니다",
+ "allAlreadyInFolder": "선택된 모든 {type}이(가) 이미 대상 폴더에 있습니다",
+ "bulkMovePartial": "{successCount}개 {type}이(가) 이동되었고, {failureCount}개가 실패했습니다",
+ "bulkMoveFailures": "실패한 이동:\n{failures}",
+ "bulkMoveSuccess": "{successCount}개 {type}이(가) 성공적으로 이동되었습니다",
+ "exampleImagesDownloadSuccess": "예시 이미지가 성공적으로 다운로드되었습니다!",
+ "exampleImagesDownloadFailed": "예시 이미지 다운로드 실패: {message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "클립보드에 복사됨",
+ "downloadStarted": "다운로드 시작됨"
+ }
+ },
+ "doctor": {
+ "kicker": "시스템 진단",
+ "title": "닥터",
+ "buttonTitle": "진단 및 일반적인 수정 실행",
+ "loading": "환경을 확인하는 중...",
+ "footer": "수리 후에도 문제가 계속되면 진단 번들을 내보내세요.",
+ "summary": {
+ "idle": "설정, 캐시 무결성, UI 일관성에 대한 상태 검사를 실행합니다.",
+ "ok": "현재 환경에서 활성 문제를 찾지 못했습니다.",
+ "warning": "{count}개의 문제가 발견되었습니다. 대부분은 이 패널에서 바로 해결할 수 있습니다.",
+ "error": "앱이 완전히 정상 상태가 되기 전에 {count}개의 문제를 처리해야 합니다."
+ },
+ "status": {
+ "ok": "정상",
+ "warning": "주의 필요",
+ "error": "조치 필요"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API 키"
+ },
+ "cache_health": {
+ "title": "모델 캐시 상태"
+ },
+ "filename_conflicts": {
+ "title": "파일명 중복 충돌"
+ },
+ "ui_version": {
+ "title": "UI 버전"
+ }
+ },
+ "actions": {
+ "runAgain": "다시 실행",
+ "exportBundle": "번들 내보내기",
+ "open-settings": "설정 열기",
+ "open-settings-syntax-format": "전체 경로 구문으로 전환",
+ "repair-cache": "캐시 재구축",
+ "resolve-filename-conflicts": "충돌 해결",
+ "reload-page": "UI 새로고침"
+ },
+ "labels": {
+ "conflicts": "충돌",
+ "version": "버전"
+ },
+ "toast": {
+ "loadFailed": "진단 로드 실패: {message}",
+ "repairSuccess": "캐시 재구성이 완료되었습니다.",
+ "repairFailed": "캐시 재구성 실패: {message}",
+ "exportSuccess": "진단 번들이 내보내졌습니다.",
+ "exportFailed": "진단 번들 내보내기 실패: {message}",
+ "conflictsResolved": "{count}개 파일명 충돌이 해결되었습니다.",
+ "conflictsResolveFailed": "파일명 충돌 해결 실패: {message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "파일명 충돌 해결",
+ "message": "중복 파일명에 4자리 해시를 추가하여 이름을 변경합니다.",
+ "note": "이 작업은 디스크에 있는 파일의 이름을 변경합니다. A1111 구문 형식을 사용하는 경우 기존 워크플로우의 모델 참조를 업데이트해야 할 수 있습니다.",
+ "detail": "예시: filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "{groups}개 중복 그룹에서 {count}개 파일 이름을 변경합니다",
+ "confirm": "파일 이름 변경",
+ "cancel": "취소"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "애플리케이션 업데이트 감지",
+ "content": "브라우저에서 구버전의 LoRA Manager ({storedVersion})를 실행하고 있습니다. 서버가 버전 {currentVersion}로 업데이트되었습니다. 올바른 기능을 위해 새로고침해주세요.",
+ "refreshNow": "지금 새로고침",
+ "refreshingIn": "새로고침까지",
+ "seconds": "초"
+ },
+ "communitySupport": {
+ "title": "Keep LoRA Manager Thriving with Your Support ❤️",
+ "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
+ "supportCta": "Support on Ko-fi",
+ "learnMore": "LM Civitai Extension Tutorial"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "캐시 손상이 감지되었습니다"
+ },
+ "degraded": {
+ "title": "캐시 문제가 감지되었습니다"
+ },
+ "content": "{total}개의 캐시 항목 중 {invalid}개가 유효하지 않습니다 ({rate}). 모델 누락이나 오류가 발생할 수 있습니다. 캐시를 재구축하는 것이 좋습니다.",
+ "rebuildCache": "캐시 재구축",
+ "dismiss": "무시",
+ "rebuilding": "캐시 재구축 중...",
+ "rebuildFailed": "캐시 재구축 실패: {error}",
+ "retry": "다시 시도"
+ }
+ }
}
diff --git a/locales/ru.json b/locales/ru.json
index 4beeb06c..527d02ab 100644
--- a/locales/ru.json
+++ b/locales/ru.json
@@ -1,2167 +1,2171 @@
{
- "common": {
- "cancel": "Отмена",
- "confirm": "Подтвердить",
- "actions": {
- "save": "Сохранить",
- "cancel": "Отмена",
- "confirm": "Подтвердить",
- "delete": "Удалить",
- "move": "Переместить",
- "refresh": "Обновить",
- "back": "Назад",
- "next": "Далее",
- "backToTop": "Наверх",
- "settings": "Настройки",
- "help": "Справка",
- "add": "Добавить",
- "close": "Закрыть",
- "menu": "Меню",
- "remove": "Удалить",
- "change": "Изменить"
- },
- "status": {
- "loading": "Загрузка...",
- "cancelling": "Отмена...",
- "unknown": "Неизвестно",
- "date": "Дата",
- "version": "Версия",
- "enabled": "Включено",
- "disabled": "Отключено"
- },
- "language": {
- "select": "Язык",
- "select_help": "Выберите предпочитаемый язык интерфейса",
- "english": "English",
- "chinese_simplified": "中文(简体)",
- "chinese_traditional": "中文(繁体)",
- "russian": "Русский",
- "german": "Deutsch",
- "japanese": "日本語",
- "korean": "한국어",
- "french": "Français",
- "spanish": "Español",
- "Hebrew": "עברית"
- },
- "fileSize": {
- "zero": "0 Байт",
- "bytes": "Байт",
- "kb": "КБ",
- "mb": "МБ",
- "gb": "ГБ",
- "tb": "ТБ"
- }
+ "common": {
+ "cancel": "Отмена",
+ "confirm": "Подтвердить",
+ "actions": {
+ "save": "Сохранить",
+ "cancel": "Отмена",
+ "confirm": "Подтвердить",
+ "delete": "Удалить",
+ "move": "Переместить",
+ "refresh": "Обновить",
+ "back": "Назад",
+ "next": "Далее",
+ "backToTop": "Наверх",
+ "settings": "Настройки",
+ "help": "Справка",
+ "add": "Добавить",
+ "close": "Закрыть",
+ "menu": "Меню",
+ "remove": "Удалить",
+ "change": "Изменить"
},
- "onboarding": {
- "languageSelection": {
- "title": "Добро пожаловать в LoRA Manager",
- "continue": "Продолжить",
- "changeFailed": "Не удалось изменить язык: {message}"
- },
- "tutorial": {
- "skipTutorial": "Пропустить обучение",
- "back": "Назад",
- "next": "Далее",
- "finish": "Завершить"
- },
- "steps": {
- "fetch": {
- "title": "Получить метаданные моделей",
- "content": "Нажмите кнопку Получить, чтобы загрузить метаданные моделей и изображения превью с Civitai."
- },
- "download": {
- "title": "Загрузить новые модели",
- "content": "Используйте кнопку Загрузить для скачивания моделей напрямую по URL Civitai."
- },
- "bulk": {
- "title": "Массовые операции",
- "content": "Войдите в массовый режим, нажав эту кнопку или клавишу B. Выберите несколько моделей и выполните пакетные операции. Используйте Ctrl+A для выбора всех видимых моделей."
- },
- "searchOptions": {
- "title": "Опции поиска",
- "content": "Нажмите эту кнопку, чтобы настроить поля для поиска: имя файла, название модели, теги или имя автора. Настройте область поиска."
- },
- "filter": {
- "title": "Фильтрация моделей",
- "content": "Используйте фильтры для сужения списка моделей по типу базовой модели (SD1.5, SDXL, Flux и др.) или по конкретным тегам."
- },
- "breadcrumb": {
- "title": "Навигация по папкам",
- "content": "Навигация по папкам показывает ваш текущий путь и позволяет быстро переходить между папками. Нажмите на имя папки для перехода."
- },
- "modelCards": {
- "title": "Карточки моделей",
- "content": "Одиночный клик по карточке модели откроет подробную информацию и позволит редактировать метаданные. Ищите значок карандаша при наведении на редактируемые поля."
- },
- "contextMenu": {
- "title": "Контекстное меню",
- "content": "Правый клик по карточке модели откроет контекстное меню с дополнительными действиями."
- }
- }
+ "status": {
+ "loading": "Загрузка...",
+ "cancelling": "Отмена...",
+ "unknown": "Неизвестно",
+ "date": "Дата",
+ "version": "Версия",
+ "enabled": "Включено",
+ "disabled": "Отключено"
},
- "modelCard": {
- "actions": {
- "addToFavorites": "Добавить в избранное",
- "removeFromFavorites": "Удалить из избранного",
- "viewOnCivitai": "Посмотреть на Civitai",
- "notAvailableFromCivitai": "Недоступно на Civitai",
- "sendToWorkflow": "Отправить в ComfyUI (Клик: Добавить, Shift+Клик: Заменить)",
- "copyLoRASyntax": "Копировать синтаксис LoRA",
- "checkpointNameCopied": "Имя checkpoint скопировано",
- "toggleBlur": "Переключить размытие",
- "show": "Показать",
- "openExampleImages": "Открыть папку с примерами",
- "replacePreview": "Заменить превью",
- "copyCheckpointName": "Копировать имя checkpoint",
- "copyEmbeddingName": "Копировать имя embedding",
- "embeddingNameCopied": "Синтаксис embedding скопирован",
- "sendCheckpointToWorkflow": "Отправить в ComfyUI",
- "sendEmbeddingToWorkflow": "Отправить в ComfyUI"
- },
- "nsfw": {
- "matureContent": "Контент для взрослых",
- "xxxRated": "XXX-контент",
- "xRated": "X-контент",
- "rRated": "R-контент"
- },
- "favorites": {
- "added": "Добавлено в избранное",
- "removed": "Удалено из избранного",
- "updateFailed": "Не удалось обновить статус избранного"
- },
- "sendToWorkflow": {
- "checkpointNotImplemented": "Отправка checkpoint в workflow - функция будет реализована",
- "missingPath": "Невозможно определить путь модели для этой карточки"
- },
- "exampleImages": {
- "checkError": "Ошибка проверки примеров изображений",
- "missingHash": "Отсутствует хеш модели.",
- "noRemoteImagesAvailable": "Нет удаленных примеров изображений для этой модели на Civitai"
- },
- "badges": {
- "update": "Обновление",
- "updateAvailable": "Доступно обновление",
- "skipRefresh": "Обновление метаданных пропущено"
- },
- "usage": {
- "timesUsed": "Количество использований"
- },
- "footer": {
- "versionCount": "{count} версий",
- "viewAllVersions": "Показать все локальные версии"
- }
+ "language": {
+ "select": "Язык",
+ "select_help": "Выберите предпочитаемый язык интерфейса",
+ "english": "English",
+ "chinese_simplified": "中文(简体)",
+ "chinese_traditional": "中文(繁体)",
+ "russian": "Русский",
+ "german": "Deutsch",
+ "japanese": "日本語",
+ "korean": "한국어",
+ "french": "Français",
+ "spanish": "Español",
+ "Hebrew": "עברית"
},
- "globalContextMenu": {
- "downloadExampleImages": {
- "label": "Загрузить примеры изображений",
- "missingPath": "Укажите место загрузки перед загрузкой примеров изображений.",
- "unavailable": "Загрузка примеров изображений пока недоступна. Попробуйте снова после полной загрузки страницы."
- },
- "checkModelUpdates": {
- "label": "Проверить обновления",
- "loading": "Проверка обновлений для {type}...",
- "success": "Найдено {count} обновлений для {type}",
- "none": "Все {type} актуальны",
- "error": "Не удалось проверить обновления для {type}: {message}"
- },
- "cleanupExampleImages": {
- "label": "Очистить папки с примерами изображений",
- "success": "Перемещено {count} папок в папку удалённых",
- "none": "Нет папок с примерами изображений, требующих очистки",
- "partial": "Очистка завершена, пропущено {failures} папок",
- "error": "Не удалось очистить папки с примерами изображений: {message}"
- },
- "fetchMissingLicenses": {
- "label": "Refresh license metadata",
- "loading": "Refreshing license metadata for {typePlural}...",
- "success": "Updated license metadata for {count} {typePlural}",
- "none": "All {typePlural} already have license metadata",
- "error": "Failed to refresh license metadata for {typePlural}: {message}"
- },
- "repairRecipes": {
- "label": "Восстановить данные рецептов",
- "loading": "Восстановление данных рецептов...",
- "success": "Успешно восстановлено {count} рецептов.",
- "cancelled": "Восстановление отменено. {count} рецептов было восстановлено.",
- "error": "Ошибка восстановления рецептов: {message}"
- },
- "manageExcludedModels": {
- "label": "Управление исключёнными моделями"
- },
- "groupByModel": {
- "label": "Группировать по модели"
- }
+ "fileSize": {
+ "zero": "0 Байт",
+ "bytes": "Байт",
+ "kb": "КБ",
+ "mb": "МБ",
+ "gb": "ГБ",
+ "tb": "ТБ"
+ }
+ },
+ "onboarding": {
+ "languageSelection": {
+ "title": "Добро пожаловать в LoRA Manager",
+ "continue": "Продолжить",
+ "changeFailed": "Не удалось изменить язык: {message}"
},
- "header": {
- "appTitle": "LoRA Manager",
- "navigation": {
- "loras": "LoRAs",
- "recipes": "Рецепты",
- "checkpoints": "Checkpoints",
- "embeddings": "Embeddings",
- "statistics": "Статистика"
- },
- "search": {
- "placeholder": "Поиск",
- "options": "Опции поиска",
- "searchIn": "Искать в:",
- "notAvailable": "Поиск недоступен на странице статистики",
- "filters": {
- "filename": "Имя файла",
- "modelname": "Название модели",
- "tags": "Теги",
- "creator": "Автор",
- "title": "Название рецепта",
- "loraName": "Имя файла LoRA",
- "loraModel": "Название модели LoRA",
- "prompt": "Запрос"
- }
- },
- "filter": {
- "title": "Фильтр моделей",
- "presets": "Пресеты",
- "savePreset": "Сохранить текущие активные фильтры как новый пресет.",
- "savePresetDisabledActive": "Невозможно сохранить: Пресет уже активен. Измените фильтры, чтобы сохранить новый пресет",
- "savePresetDisabledNoFilters": "Сначала выберите фильтры для сохранения как пресет",
- "savePresetPrompt": "Введите имя пресета:",
- "presetClickTooltip": "Нажмите чтобы применить пресет \"{name}\"",
- "presetDeleteTooltip": "Удалить пресет",
- "presetDeleteConfirm": "Удалить пресет \"{name}\"?",
- "presetDeleteConfirmClick": "Нажмите еще раз для подтверждения",
- "presetOverwriteConfirm": "Пресет \"{name}\" уже существует. Перезаписать?",
- "presetNamePlaceholder": "Имя пресета...",
- "baseModel": "Базовая модель",
- "baseModelSearchPlaceholder": "Поиск базовых моделей...",
- "modelTags": "Теги (Топ 20)",
- "modelTypes": "Типы моделей",
- "license": "Лицензия",
- "noCreditRequired": "Без указания авторства",
- "allowSellingGeneratedContent": "Продажа разрешена",
- "allowSellingGeneratedContentTooltip": "Разрешить продажу сгенерированных изображений",
- "noCreditRequiredTooltip": "Использование модели без указания автора",
- "noTags": "Без тегов",
- "autoTags": "Авто-теги",
- "noBaseModelMatches": "Нет базовых моделей, соответствующих текущему поиску.",
- "clearAll": "Очистить все фильтры",
- "any": "Любой",
- "all": "Все",
- "tagLogicAny": "Совпадение с любым тегом (ИЛИ)",
- "tagLogicAll": "Совпадение со всеми тегами (И)"
- },
- "theme": {
- "toggle": "Переключить тему",
- "switchToLight": "Переключить на светлую тему",
- "switchToDark": "Переключить на тёмную тему",
- "switchToAuto": "Переключить на автоматическую тему",
- "presets": "Предустановки тем",
- "default": "По умолчанию",
- "nord": "Nord",
- "midnight": "Midnight",
- "monokai": "Monokai",
- "dracula": "Dracula",
- "solarized": "Solarized",
- "mode": "Режим",
- "light": "Светлый",
- "dark": "Тёмный",
- "auto": "Авто"
- },
- "actions": {
- "checkUpdates": "Проверить обновления",
- "notifications": "Уведомления",
- "support": "Поддержка"
- }
+ "tutorial": {
+ "skipTutorial": "Пропустить обучение",
+ "back": "Назад",
+ "next": "Далее",
+ "finish": "Завершить"
},
- "settings": {
- "civitaiApiKey": "Ключ API Civitai",
- "civitaiApiKeyPlaceholder": "Введите ваш ключ API Civitai",
- "civitaiApiKeyHelp": "Используется для аутентификации при загрузке моделей с Civitai",
- "civitaiApiKeyConfigured": "Настроен",
- "civitaiApiKeyNotConfigured": "Не настроен",
- "civitaiApiKeySet": "Настроить",
- "civitaiHost": {
- "label": "Хост Civitai",
- "help": "Выберите, какой сайт Civitai будет открываться при использовании ссылок «View on Civitai».",
- "options": {
- "com": "civitai.com (только SFW)",
- "red": "civitai.red (без ограничений)"
- }
- },
- "downloadBackend": {
- "label": "Бэкенд загрузки",
- "help": "Выберите способ загрузки файлов моделей. Python использует встроенный загрузчик. aria2 использует рекомендуемый внешний процесс загрузки.",
- "options": {
- "python": "Python (встроенный)",
- "aria2": "aria2 (рекомендуемый)"
- }
- },
- "aria2cPath": {
- "label": "Путь к aria2c",
- "help": "Необязательный путь к исполняемому файлу aria2c. Оставьте пустым, чтобы использовать aria2c из системного PATH.",
- "placeholder": "Оставьте пустым, чтобы использовать aria2c из PATH"
- },
- "aria2HelpLink": "Узнайте, как настроить сервер загрузки aria2",
- "civitaiHostBanner": {
- "title": "Доступна настройка хоста Civitai",
- "content": "Теперь Civitai использует civitai.com для контента SFW и civitai.red для контента без ограничений. В настройках можно изменить, какой сайт открывать по умолчанию.",
- "openSettings": "Открыть настройки"
- },
- "openSettingsFileLocation": {
- "label": "Открыть папку настроек",
- "tooltip": "Открыть папку, содержащую settings.json",
- "success": "Папка settings.json открыта",
- "failed": "Не удалось открыть папку settings.json",
- "copied": "Путь настроек скопирован в буфер обмена: {{path}}",
- "clipboardFallback": "Путь настроек: {{path}}"
- },
- "sections": {
- "contentFiltering": "Фильтрация контента",
- "downloads": "Загрузки",
- "videoSettings": "Настройки видео",
- "layoutSettings": "Настройки макета",
- "licenseIcons": "Значки лицензии",
- "misc": "Разное",
- "backup": "Резервные копии",
- "folderSettings": "Корневые папки",
- "recipeSettings": "Рецепты",
- "extraFolderPaths": "Дополнительные пути к папкам",
- "downloadPathTemplates": "Шаблоны путей загрузки",
- "priorityTags": "Приоритетные теги",
- "versionScope": "Метки обновлений",
- "exampleImages": "Примеры изображений",
- "autoOrganize": "Автоорганизация",
- "metadata": "Метаданные",
- "proxySettings": "Настройки прокси"
- },
- "nav": {
- "general": "Общее",
- "interface": "Интерфейс",
- "library": "Библиотека"
- },
- "search": {
- "placeholder": "Поиск в настройках...",
- "clear": "Очистить поиск",
- "noResults": "Настройки, соответствующие \"{query}\", не найдены"
- },
- "storage": {
- "locationLabel": "Портативный режим",
- "locationHelp": "Включите, чтобы хранить settings.json в репозитории; выключите, чтобы сохранить его в папке конфигурации пользователя."
- },
- "contentFiltering": {
- "blurNsfwContent": "Размывать NSFW контент",
- "blurNsfwContentHelp": "Размывать превью изображений контента для взрослых (NSFW)",
- "showOnlySfw": "Показывать только SFW результаты",
- "showOnlySfwHelp": "Фильтровать весь NSFW контент при просмотре и поиске",
- "matureBlurThreshold": "Порог размытия взрослого контента",
- "matureBlurThresholdHelp": "Установить, с какого уровня рейтинга начинается размытие при включенном размытии NSFW.",
- "matureBlurThresholdOptions": {
- "pg13": "PG13 и выше",
- "r": "R и выше (по умолчанию)",
- "x": "X и выше",
- "xxx": "Только XXX"
- }
- },
- "videoSettings": {
- "autoplayOnHover": "Автовоспроизведение видео при наведении",
- "autoplayOnHoverHelp": "Воспроизводить превью видео только при наведении курсора"
- },
- "autoOrganizeExclusions": {
- "label": "Исключения автосортировки",
- "placeholder": "Пример: curated/*, */backups/*; *_temp.safetensors",
- "help": "Пропускать перемещение файлов, соответствующих этим шаблонам. Разделяйте несколько шаблонов запятыми или точками с запятой.",
- "validation": {
- "noPatterns": "Введите хотя бы один шаблон, разделенный запятыми или точками с запятой.",
- "saveFailed": "Не удалось сохранить исключения: {message}"
- }
- },
- "metadataRefreshSkipPaths": {
- "label": "Пути для пропуска обновления метаданных",
- "placeholder": "Пример: temp, archived/old, test_models",
- "help": "Пропускать модели в этих каталогах при массовом обновлении метаданных («Получить все метаданные»). Введите пути к папкам относительно корневого каталога моделей, разделённые запятой.",
- "validation": {
- "noPaths": "Введите хотя бы один путь, разделённый запятыми.",
- "saveFailed": "Не удалось сохранить пути для пропуска: {message}"
- }
- },
- "backup": {
- "autoEnabled": "Автоматические резервные копии",
- "autoEnabledHelp": "Создаёт локальный снимок раз в день и хранит последние снимки согласно политике хранения.",
- "retention": "Количество хранения",
- "retentionHelp": "Сколько автоматических снимков сохранять перед удалением старых.",
- "management": "Управление резервными копиями",
- "managementHelp": "Экспортируйте текущее состояние пользователя или восстановите его из архива резервной копии.",
- "scopeHelp": "Резервная копия включает ваши настройки, историю загрузок и состояние обновлений моделей. Файлы моделей и пересоздаваемые кэши не входят.",
- "locationSummary": "Текущее расположение резервных копий",
- "openFolderButton": "Открыть папку резервных копий",
- "openFolderSuccess": "Папка резервных копий открыта",
- "openFolderFailed": "Не удалось открыть папку резервных копий",
- "locationCopied": "Путь к резервной копии скопирован в буфер обмена: {{path}}",
- "locationClipboardFallback": "Путь к резервной копии: {{path}}",
- "exportButton": "Экспортировать резервную копию",
- "exportSuccess": "Резервная копия успешно экспортирована.",
- "exportFailed": "Не удалось экспортировать резервную копию: {message}",
- "importButton": "Импортировать резервную копию",
- "importConfirm": "Импортировать эту резервную копию и перезаписать локальное состояние пользователя?",
- "importSuccess": "Резервная копия успешно импортирована.",
- "importFailed": "Не удалось импортировать резервную копию: {message}",
- "latestSnapshot": "Последний снимок",
- "latestAutoSnapshot": "Последний автоматический снимок",
- "snapshotCount": "Сохранённые снимки",
- "noneAvailable": "Снимков пока нет"
- },
- "downloadSkipBaseModels": {
- "label": "Пропускать загрузки для базовых моделей",
- "help": "Применяется ко всем сценариям загрузки. Здесь можно выбрать только поддерживаемые базовые модели.",
- "searchPlaceholder": "Фильтровать базовые модели...",
- "empty": "Нет базовых моделей, соответствующих текущему поиску.",
- "summary": {
- "none": "Ничего не выбрано",
- "count": "Выбрано: {count}"
- },
- "actions": {
- "edit": "Изменить",
- "collapse": "Свернуть",
- "clear": "Очистить"
- },
- "validation": {
- "saveFailed": "Не удалось сохранить исключённые базовые модели: {message}"
- }
- },
- "skipPreviouslyDownloadedModelVersions": {
- "label": "Пропускать ранее загруженные версии моделей",
- "help": "Если включено, LoRA Manager будет пропускать загрузку версии модели, если сервис истории загрузок записал, что эта конкретная версия уже загружена. Применяется ко всем потокам загрузки."
- },
- "layoutSettings": {
- "groupByModel": "Группировать по модели",
- "groupByModelHelp": "При включении отображается только последняя версия каждой модели Civitai в виде одной карточки. Старые версии скрыты.",
- "displayDensity": "Плотность отображения",
- "displayDensityOptions": {
- "default": "По умолчанию",
- "medium": "Средняя",
- "compact": "Компактная"
- },
- "displayDensityHelp": "Выберите количество карточек для отображения в ряду:",
- "displayDensityDetails": {
- "default": "5 (1080p), 6 (2K), 8 (4K)",
- "medium": "6 (1080p), 7 (2K), 9 (4K)",
- "compact": "7 (1080p), 8 (2K), 10 (4K)"
- },
- "displayDensityWarning": "Предупреждение: Высокая плотность может вызвать проблемы с производительностью на системах с ограниченными ресурсами.",
- "showFolderSidebar": "Показывать боковую панель папок",
- "showFolderSidebarHelp": "Включает или выключает боковую панель навигации по папкам на страницах моделей. При отключении панель и область наведения скрыты.",
- "cardInfoDisplay": "Отображение информации карточки",
- "cardInfoDisplayOptions": {
- "always": "Всегда видимо",
- "hover": "Показать при наведении"
- },
- "cardInfoDisplayHelp": "Выберите когда отображать информацию о модели и кнопки действий",
- "showVersionOnCard": "Показывать версию на карточке",
- "showVersionOnCardHelp": "Показать или скрыть название версии на карточках моделей",
- "modelCardFooterAction": "Действие кнопки карточки модели",
- "modelCardFooterActionOptions": {
- "exampleImages": "Открыть примеры изображений",
- "replacePreview": "Заменить превью"
- },
- "modelCardFooterActionHelp": "Выберите, что делает кнопка в правом нижнем углу карточки",
- "modelNameDisplay": "Отображение названия модели",
- "modelNameDisplayOptions": {
- "modelName": "Название модели",
- "fileName": "Имя файла"
- },
- "modelNameDisplayHelp": "Выберите, что отображать в нижней части карточки модели",
- "cardBlurAmount": "Размытие наложения карточек",
- "cardBlurAmountHelp": "Настройте интенсивность размытия наложений верхнего и нижнего колонтитулов на карточках моделей и рецептов (0 = без размытия, 20 = максимальное размытие)."
- },
- "folderSettings": {
- "activeLibrary": "Активная библиотека",
- "activeLibraryHelp": "Переключайтесь между настроенными библиотеками, чтобы обновить папки по умолчанию. Изменение выбора перезагружает страницу.",
- "loadingLibraries": "Загрузка библиотек...",
- "noLibraries": "Библиотеки не настроены",
- "defaultLoraRoot": "Корневая папка LoRA",
- "defaultLoraRootHelp": "Установить корневую папку LoRA по умолчанию для загрузок, импорта и перемещений",
- "defaultCheckpointRoot": "Корневая папка Checkpoint",
- "defaultCheckpointRootHelp": "Установить корневую папку checkpoint по умолчанию для загрузок, импорта и перемещений",
- "defaultUnetRoot": "Корневая папка Diffusion Model",
- "defaultUnetRootHelp": "Установить корневую папку Diffusion Model (UNET) по умолчанию для загрузок, импорта и перемещений",
- "defaultEmbeddingRoot": "Корневая папка Embedding",
- "defaultEmbeddingRootHelp": "Установить корневую папку embedding по умолчанию для загрузок, импорта и перемещений",
- "recipesPath": "Путь хранения рецептов",
- "recipesPathHelp": "Дополнительный пользовательский каталог для сохранённых рецептов. Оставьте пустым, чтобы использовать папку recipes в первом корне LoRA.",
- "recipesPathPlaceholder": "/path/to/recipes",
- "recipesPathMigrating": "Перенос хранилища рецептов...",
- "noDefault": "Не задано"
- },
- "extraFolderPaths": {
- "title": "Дополнительные пути к папкам",
- "description": "Дополнительные корневые пути моделей, эксклюзивные для LoRA Manager. Загружайте модели из расположений за пределами стандартных папок ComfyUI — идеально подходит для больших библиотек, которые иначе замедлили бы ComfyUI.",
- "restartRequired": "Requires restart to take effect",
- "modelTypes": {
- "lora": "Пути LoRA",
- "checkpoint": "Пути Checkpoint",
- "unet": "Пути моделей диффузии",
- "embedding": "Пути Embedding"
- },
- "pathPlaceholder": "/путь/к/дополнительным/моделям",
- "saveSuccess": "Дополнительные пути к папкам обновлены. Требуется перезапуск для применения изменений.",
- "saveError": "Не удалось обновить дополнительные пути к папкам: {message}",
- "validation": {
- "duplicatePath": "Этот путь уже настроен"
- }
- },
- "priorityTags": {
- "title": "Приоритетные теги",
- "description": "Настройте порядок приоритетов тегов для каждого типа моделей (например, character, concept, style(toon|toon_style)).",
- "placeholder": "character, concept, style(toon|toon_style)",
- "helpLinkLabel": "Открыть справку по приоритетным тегам",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Чекпойнт",
- "embedding": "Эмбеддинг"
- },
- "saveSuccess": "Приоритетные теги обновлены.",
- "saveError": "Не удалось обновить приоритетные теги.",
- "loadingSuggestions": "Загрузка подсказок...",
- "validation": {
- "missingClosingParen": "В записи {index} отсутствует закрывающая скобка.",
- "missingCanonical": "Запись {index} должна содержать каноническое имя тега.",
- "duplicateCanonical": "Канонический тег \"{tag}\" встречается более одного раза.",
- "unknown": "Недопустимая конфигурация приоритетных тегов."
- }
- },
- "downloadPathTemplates": {
- "title": "Шаблоны путей загрузки",
- "help": "Настройте структуру папок для разных типов моделей при загрузке с Civitai.",
- "availablePlaceholders": "Доступные заполнители:",
- "templateOptions": {
- "flatStructure": "Плоская структура",
- "byBaseModel": "По базовой модели",
- "byAuthor": "По автору",
- "byFirstTag": "По первому тегу",
- "baseModelFirstTag": "Базовая модель + Первый тег",
- "baseModelAuthor": "Базовая модель + Автор",
- "authorFirstTag": "Автор + Первый тег",
- "baseModelAuthorFirstTag": "Базовая модель + Автор + Первый тег",
- "customTemplate": "Пользовательский шаблон"
- },
- "customTemplatePlaceholder": "Введите пользовательский шаблон (например, {base_model}/{author}/{first_tag})",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "baseModelPathMappings": "Сопоставления путей базовых моделей",
- "baseModelPathMappingsHelp": "Настройте имена папок для конкретных базовых моделей (например, \"Flux.1 D\" → \"flux\")",
- "addMapping": "Добавить сопоставление",
- "selectBaseModel": "Выбрать базовую модель",
- "customPathPlaceholder": "Пользовательский путь (например, flux)",
- "removeMapping": "Удалить сопоставление",
- "validation": {
- "validFlat": "Действительный (плоская структура)",
- "invalidChars": "Обнаружены недопустимые символы",
- "doubleSlashes": "Двойные слеши не разрешены",
- "leadingTrailingSlash": "Не может начинаться или заканчиваться слешем",
- "invalidPlaceholder": "Недопустимый заполнитель: {placeholder}",
- "validTemplate": "Действительный шаблон"
- }
- },
- "exampleImages": {
- "downloadLocation": "Место загрузки",
- "downloadLocationPlaceholder": "Введите путь к папке для примеров изображений",
- "downloadLocationHelp": "Введите путь к папке, где будут сохраняться примеры изображений с Civitai",
- "autoDownload": "Автозагрузка примеров изображений",
- "autoDownloadHelp": "Автоматически загружать примеры изображений для моделей, у которых их нет (требует настройки места загрузки)",
- "openMode": "Действие открытия примеров изображений",
- "openModeHelp": "Выберите, будет ли действие открывать папку на сервере, копировать сопоставленный локальный путь или запускать пользовательский URI.",
- "openModeOptions": {
- "system": "Открыть на сервере",
- "clipboard": "Скопировать локальный путь",
- "uriTemplate": "Открыть пользовательский URI"
- },
- "localRoot": "Локальный корень примеров изображений",
- "localRootHelp": "Необязательный локальный или смонтированный корневой путь, отражающий каталог примеров изображений на сервере. Если оставить пустым, будет использован путь сервера.",
- "localRootPlaceholder": "Пример: /Volumes/ComfyUI/example_images",
- "uriTemplate": "Шаблон URI для открытия",
- "uriTemplateHelp": "Используйте пользовательскую deep link-ссылку, например file URI или ссылку Shortcuts.",
- "uriTemplatePlaceholder": "Пример: shortcuts://run-shortcut?name=Open%20Finder&input=text&text={{encoded_local_path}}",
- "uriTemplatePlaceholders": "Доступные плейсхолдеры: {{local_path}}, {{encoded_local_path}}, {{relative_path}}, {{encoded_relative_path}}, {{file_uri}}, {{encoded_file_uri}}",
- "openModeWikiLink": "Подробнее об удаленных режимах открытия",
- "optimizeImages": "Оптимизировать загруженные изображения",
- "optimizeImagesHelp": "Оптимизировать примеры изображений для уменьшения размера файла и улучшения скорости загрузки (метаданные будут сохранены)",
- "download": "Загрузить",
- "restartRequired": "Требует перезапуска"
- },
- "versionGrouping": {
- "label": "Стратегия меток обновлений",
- "help": "Выберите, отображать ли значки обновления только когда новая версия имеет тот же базовый модель, что и локальные файлы, или всегда при наличии любого нового релиза для этой модели.",
- "options": {
- "sameBase": "Совпадение обновлений по базовой модели",
- "any": "Отмечать любые доступные обновления"
- }
- },
- "hideEarlyAccessUpdates": {
- "label": "Скрыть обновления раннего доступа",
- "help": "Только обновления раннего доступа"
- },
- "licenseIcons": {
- "useNewStyle": "Использовать обновлённые значки лицензии",
- "useNewStyleHelp": "Отображать разрешения лицензии с цветными индикаторами (новый стиль) или только значки ограничений (классический стиль). Соответствует текущему дизайну CivitAI."
- },
- "misc": {
- "includeTriggerWords": "Включать триггерные слова в синтаксис LoRA",
- "includeTriggerWordsHelp": "Включать обученные триггерные слова при копировании синтаксиса LoRA в буфер обмена",
- "loraSyntaxFormat": "Формат синтаксиса LoRA",
- "loraSyntaxFormatHelp": "Формат синтаксиса LoRA. Полный путь включает подпапку (filename_v1.2 → filename_v1.2-ab3c",
- "impact": "Будет переименовано {count} файл(ов) в {groups} группе(ах) дубликатов",
- "confirm": "Переименовать файлы",
- "cancel": "Отмена"
+ "metadataFetchSummary": {
+ "title": "Сводка получения метаданных",
+ "statSuccess": "Успешно",
+ "statFailed": "Ошибка",
+ "statSkipped": "Пропущено",
+ "statTotal": "Всего проверено",
+ "statDuration": "Длительность",
+ "successMessage": "Все {count} {type}s успешно обновлены",
+ "failedItems": "Ошибочные элементы ({count})",
+ "close": "Закрыть",
+ "copyReport": "Копировать отчет",
+ "downloadCsv": "Скачать CSV",
+ "columnModelName": "Имя модели",
+ "columnError": "Ошибка"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "Теги успешно обновлены",
+ "updateFailed": "Не удалось обновить теги"
+ },
+ "validation": {
+ "maxLength": "Тег не должен превышать 30 символов",
+ "maxCount": "Максимум 30 тегов разрешено",
+ "duplicate": "Этот тег уже существует"
+ }
+ },
+ "initialization": {
+ "title": "Инициализация",
+ "message": "Подготовка вашего рабочего пространства...",
+ "status": "Инициализация...",
+ "estimatingTime": "Расчет времени...",
+ "loras": {
+ "title": "Инициализация LoRA Manager",
+ "message": "Сканирование и построение кэша LoRA. Это может занять несколько минут..."
+ },
+ "checkpoints": {
+ "title": "Инициализация Checkpoint Manager",
+ "message": "Сканирование и построение кэша checkpoint. Это может занять несколько минут..."
+ },
+ "embeddings": {
+ "title": "Инициализация Embedding Manager",
+ "message": "Сканирование и построение кэша embedding. Это может занять несколько минут..."
+ },
+ "recipes": {
+ "title": "Инициализация Recipe Manager",
+ "message": "Загрузка и обработка рецептов. Это может занять несколько минут..."
+ },
+ "statistics": {
+ "title": "Инициализация статистики",
+ "message": "Обработка данных моделей для статистики. Это может занять несколько минут..."
+ },
+ "tips": {
+ "title": "Советы и хитрости",
+ "civitai": {
+ "title": "Интеграция с Civitai",
+ "description": "Подключите ваш аккаунт Civitai: Перейдите в Аватар профиля → Настройки → API ключи → Добавить API ключ, затем вставьте его в настройки Lora Manager.",
+ "alt": "Настройка API Civitai"
+ },
+ "download": {
+ "title": "Легкая загрузка",
+ "description": "Используйте URL Civitai для быстрой загрузки и установки новых моделей.",
+ "alt": "Загрузка с Civitai"
+ },
+ "recipes": {
+ "title": "Сохранение рецептов",
+ "description": "Создавайте рецепты для сохранения ваших любимых комбинаций моделей для будущего использования.",
+ "alt": "Рецепты"
+ },
+ "filter": {
+ "title": "Быстрая фильтрация",
+ "description": "Фильтруйте модели по тегам или типу базовой модели, используя кнопку фильтра в заголовке.",
+ "alt": "Фильтрация моделей"
+ },
+ "search": {
+ "title": "Быстрый поиск",
+ "description": "Нажмите Ctrl+F (Cmd+F на Mac) для быстрого поиска в текущем представлении.",
+ "alt": "Быстрый поиск"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "Найдено {count} групп дубликатов",
+ "showNotification": "Показать уведомление о дубликатах",
+ "deleteSelected": "Удалить выбранные",
+ "exitMode": "Выйти из режима",
+ "help": {
+ "identicalHashes": "Идентичные хеши означают идентичные файлы моделей, даже если у них разные названия или превью.",
+ "keepOne": "Оставьте только одну версию (предпочтительно с лучшими метаданными/превью) и безопасно удалите остальные."
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "Скопировано в буфер обмена",
+ "copyFailed": "Копирование не удалось"
+ },
+ "lora": {
+ "syntaxCopied": "Синтаксис LoRA скопирован в буфер обмена",
+ "syntaxCopiedNoTriggerWords": "Синтаксис LoRA скопирован в буфер обмена (триггерные слова не найдены)",
+ "syntaxCopiedWithTriggerWords": "Синтаксис LoRA с триггерными словами скопирован в буфер обмена",
+ "syntaxCopiedWithTriggerWordGroups": "Синтаксис LoRA с группами триггерных слов скопирован в буфер обмена"
+ },
+ "workflow": {
+ "noSupportedNodes": "В workflow не найдены поддерживаемые целевые узлы",
+ "communicationFailed": "Не удалось установить связь с ComfyUI",
+ "loraAdded": "LoRA добавлена в workflow",
+ "loraReplaced": "LoRA заменена в workflow",
+ "loraFailedToSend": "Не удалось отправить LoRA в workflow",
+ "recipeAdded": "Рецепт добавлен в workflow",
+ "recipeReplaced": "Рецепт заменён в workflow",
+ "recipeFailedToSend": "Не удалось отправить рецепт в workflow",
+ "noMatchingNodes": "В текущем workflow нет совместимых узлов",
+ "noTargetNodeSelected": "Целевой узел не выбран",
+ "modelUpdated": "Модель обновлена в workflow",
+ "modelFailed": "Не удалось обновить узел модели",
+ "embeddingAdded": "Embedding добавлен в workflow",
+ "embeddingFailed": "Не удалось добавить embedding",
+ "promptSent": "Запрос отправлен в workflow",
+ "promptFailed": "Не удалось отправить запрос"
+ },
+ "nodeSelector": {
+ "recipe": "Рецепт",
+ "lora": "LoRA",
+ "embedding": "Эмбеддинг",
+ "prompt": "Запрос",
+ "replace": "Заменить",
+ "append": "Добавить",
+ "selectTargetNode": "Выберите целевой узел",
+ "sendToAll": "Отправить во все"
+ },
+ "exampleImages": {
+ "opened": "Папка с примерами изображений открыта",
+ "openingFolder": "Открытие папки с примерами изображений",
+ "failedToOpen": "Не удалось открыть папку с примерами изображений",
+ "copiedPath": "Путь скопирован в буфер обмена: {{path}}",
+ "clipboardFallback": "Путь: {{path}}",
+ "copiedUri": "Ссылка скопирована в буфер обмена: {{uri}}",
+ "uriClipboardFallback": "Ссылка: {{uri}}",
+ "setupRequired": "Хранилище примеров изображений",
+ "setupDescription": "Чтобы добавить собственные примеры изображений, сначала нужно установить место загрузки.",
+ "setupUsage": "Этот путь используется как для загруженных, так и для пользовательских примеров изображений.",
+ "openSettings": "Открыть настройки"
+ }
+ },
+ "help": {
+ "title": "Справка и учебные материалы",
+ "tabs": {
+ "gettingStarted": "Начало работы",
+ "updateVlogs": "Видео обновлений",
+ "documentation": "Документация"
+ },
+ "gettingStarted": {
+ "title": "Начало работы с LoRA Manager"
+ },
+ "updateVlogs": {
+ "title": "Последние обновления",
+ "watchOnYouTube": "Смотреть на YouTube",
+ "playlistTitle": "Плейлист обновлений LoRA Manager",
+ "playlistDescription": "Смотрите все видео обновлений, демонстрирующие новейшие функции и улучшения."
+ },
+ "documentation": {
+ "title": "Документация",
+ "general": "Общие",
+ "troubleshooting": "Устранение неполадок",
+ "modelManagement": "Управление моделями",
+ "recipes": "Рецепты",
+ "settings": "Настройки и конфигурация",
+ "extensions": "Расширения",
+ "newBadge": "НОВОЕ"
+ }
+ },
+ "update": {
+ "title": "Проверить обновления",
+ "notificationsTitle": "Центр уведомлений",
+ "tabs": {
+ "updates": "Обновления",
+ "messages": "Сообщения"
+ },
+ "updateAvailable": "Доступно обновление",
+ "noChangelogAvailable": "Подробный список изменений недоступен. Проверьте GitHub для получения дополнительной информации.",
+ "currentVersion": "Текущая версия",
+ "newVersion": "Новая версия",
+ "commit": "Коммит",
+ "viewOnGitHub": "Посмотреть на GitHub",
+ "updateNow": "Обновить сейчас",
+ "preparingUpdate": "Подготовка обновления...",
+ "changelog": "Список изменений",
+ "checkingUpdates": "Проверка обновлений...",
+ "checkingMessage": "Пожалуйста, подождите, пока мы проверяем последнюю версию.",
+ "showNotifications": "Показывать уведомления об обновлениях",
+ "latestBadge": "Последний",
+ "updateProgress": {
+ "preparing": "Подготовка обновления...",
+ "installing": "Установка обновления...",
+ "completed": "Обновление успешно завершено!",
+ "failed": "Обновление не удалось: {error}"
+ },
+ "status": {
+ "updating": "Обновление...",
+ "updated": "Обновлено!",
+ "updateFailed": "Обновление не удалось"
+ },
+ "completion": {
+ "successMessage": "Успешно обновлено до {version}!",
+ "restartMessage": "Пожалуйста, перезапустите ComfyUI или LoRA Manager для применения обновления.",
+ "reloadMessage": "Обязательно перезагрузите ваш браузер как для LoRA Manager, так и для ComfyUI."
+ },
+ "nightly": {
+ "warning": "Предупреждение: Ночные сборки могут содержать экспериментальные функции и могут быть нестабильными.",
+ "enable": "Включить ночные обновления"
},
"banners": {
- "versionMismatch": {
- "title": "Обнаружено обновление приложения",
- "content": "Ваш браузер работает с устаревшей версией LoRA Manager ({storedVersion}). Сервер был обновлен до версии {currentVersion}. Пожалуйста, обновите страницу для обеспечения правильной работы.",
- "refreshNow": "Обновить сейчас",
- "refreshingIn": "Обновление через",
- "seconds": "секунд"
- },
- "communitySupport": {
- "title": "Keep LoRA Manager Thriving with Your Support ❤️",
- "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
- "supportCta": "Support on Ko-fi",
- "learnMore": "LM Civitai Extension Tutorial"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "Обнаружено повреждение кэша"
- },
- "degraded": {
- "title": "Обнаружены проблемы с кэшем"
- },
- "content": "{invalid} из {total} записей кэша недействительны ({rate}). Это может привести к отсутствию моделей или ошибкам. Рекомендуется перестроить кэш.",
- "rebuildCache": "Перестроить кэш",
- "dismiss": "Отклонить",
- "rebuilding": "Перестроение кэша...",
- "rebuildFailed": "Не удалось перестроить кэш: {error}",
- "retry": "Повторить"
- }
+ "recent": "Недавние уведомления",
+ "empty": "Недавних баннеров нет.",
+ "shown": "Показано {time}",
+ "dismissed": "Закрыто {time}",
+ "active": "Активно"
}
+ },
+ "support": {
+ "title": "Поддержать проект",
+ "message": "Если вы находите LoRA Manager полезным, я буду очень признателен за вашу поддержку! 🙌",
+ "feedback": {
+ "title": "Оставить отзыв",
+ "description": "Ваш отзыв помогает формировать будущие обновления! Поделитесь своими мыслями:"
+ },
+ "links": {
+ "submitGithubIssue": "Создать issue на GitHub",
+ "joinDiscord": "Присоединиться к Discord",
+ "youtubeChannel": "YouTube канал",
+ "civitaiProfile": "Профиль на Civitai",
+ "supportKofi": "Поддержать на Ko-fi",
+ "supportPatreon": "Поддержать на Patreon"
+ },
+ "sections": {
+ "followUpdates": "Следить за обновлениями",
+ "buyMeCoffee": "Купите мне кофе",
+ "coffeeDescription": "Если вы хотите поддержать мою работу напрямую:",
+ "becomePatron": "Стать покровителем",
+ "patronDescription": "Поддержите постоянную разработку ежемесячными взносами:",
+ "wechatSupport": "Поддержка через WeChat",
+ "wechatDescription": "Для пользователей в Китае вы можете поддержать через WeChat:",
+ "showWechatQR": "Показать QR-код WeChat",
+ "hideWechatQR": "Скрыть QR-код WeChat"
+ },
+ "footer": "Спасибо за использование LoRA Manager! ❤️",
+ "supporters": {
+ "title": "Спасибо всем сторонникам",
+ "subtitle": "Спасибо {count} сторонникам, которые сделали этот проект возможным",
+ "specialThanks": "Особая благодарность",
+ "allSupporters": "Все сторонники",
+ "totalCount": "Всего {count} сторонников"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "Невозможно взаимодействовать с ComfyUI в автономном режиме",
+ "failedWorkflowInfo": "Не удалось получить информацию о workflow",
+ "pageInitFailed": "Не удалось инициализировать страницу {pageType}. Пожалуйста, перезагрузите.",
+ "statisticsLoadFailed": "Не удалось загрузить данные статистики"
+ },
+ "loras": {
+ "copyOnlyForLoras": "Копирование синтаксиса доступно только для LoRAs",
+ "noLorasSelected": "LoRAs не выбраны",
+ "missingDataForLoras": "Отсутствуют данные для {count} LoRAs",
+ "noValidLorasToCopy": "Нет валидных LoRAs для копирования",
+ "sendOnlyForLoras": "Отправка в workflow доступна только для LoRAs",
+ "noValidLorasToSend": "Нет валидных LoRAs для отправки",
+ "downloadSuccessful": "LoRAs успешно загружены",
+ "allDownloadSuccessful": "Все {count} LoRAs успешно загружены",
+ "downloadPartialSuccess": "Загружено {completed} из {total} LoRAs",
+ "downloadPartialWithAccess": "Загружено {completed} из {total} LoRAs. {accessFailures} не удалось из-за ограничений доступа. Проверьте ваш API ключ в настройках или статус раннего доступа.",
+ "pleaseSelectVersion": "Пожалуйста, выберите версию",
+ "versionExists": "Эта версия уже существует в вашей библиотеке",
+ "downloadCompleted": "Загрузка успешно завершена",
+ "downloadSkippedByBaseModel": "Загрузка пропущена, потому что базовая модель {baseModel} исключена",
+ "autoOrganizeSuccess": "Автоматическая организация успешно завершена для {count} {type}",
+ "autoOrganizePartialSuccess": "Автоматическая организация завершена: перемещено {success}, не удалось {failures} из {total} моделей",
+ "autoOrganizeFailed": "Ошибка автоматической организации: {error}",
+ "noModelsSelected": "Модели не выбраны"
+ },
+ "recipes": {
+ "fetchFailed": "Не удалось получить рецепты: {message}",
+ "reloadFailed": "Не удалось перезагрузить {modelType}s: {message}",
+ "loadFailed": "Не удалось загрузить {modelType}s: {message}",
+ "refreshComplete": "Обновление завершено",
+ "refreshFailed": "Не удалось обновить рецепты: {message}",
+ "syncComplete": "Синхронизация завершена",
+ "syncFailed": "Не удалось синхронизировать рецепты: {message}",
+ "updateFailed": "Не удалось обновить рецепт: {error}",
+ "updateError": "Ошибка обновления рецепта: {message}",
+ "nameSaved": "Рецепт \"{name}\" успешно сохранен",
+ "nameUpdated": "Название рецепта успешно обновлено",
+ "tagsUpdated": "Теги рецепта успешно обновлены",
+ "sourceUrlUpdated": "Исходный URL успешно обновлен",
+ "promptUpdated": "Промпт успешно обновлён",
+ "negativePromptUpdated": "Негативный промпт успешно обновлён",
+ "promptEditorHint": "Нажмите Enter для сохранения, Shift+Enter для новой строки",
+ "noRecipeId": "ID рецепта недоступен",
+ "sendToWorkflowFailed": "Не удалось отправить рецепт в рабочий процесс: {message}",
+ "copyFailed": "Ошибка копирования синтаксиса рецепта: {message}",
+ "createError": "Ошибка при создании рецепта:{message}",
+ "createFailed": "Не удалось создать рецепт:{error}",
+ "createMissingData": "Отсутствуют необходимые данные для создания рецепта",
+ "created": "Рецепт успешно создан",
+ "noMissingLoras": "Нет отсутствующих LoRAs для загрузки",
+ "missingLorasInfoFailed": "Не удалось получить информацию для отсутствующих LoRAs",
+ "preparingForDownloadFailed": "Ошибка подготовки LoRAs для загрузки",
+ "enterLoraName": "Пожалуйста, введите название LoRA или синтаксис",
+ "reconnectedSuccessfully": "LoRA успешно переподключена",
+ "reconnectFailed": "Ошибка переподключения LoRA: {message}",
+ "noPromptToSend": "Нет запроса для отправки",
+ "cannotSend": "Невозможно отправить рецепт: отсутствует ID рецепта",
+ "sendFailed": "Не удалось отправить рецепт в workflow",
+ "sendError": "Ошибка отправки рецепта в workflow",
+ "missingCheckpointPath": "Путь к чекпойнту недоступен",
+ "missingCheckpointInfo": "Отсутствуют данные о чекпойнте",
+ "downloadCheckpointFailed": "Не удалось скачать чекпойнт: {message}",
+ "cannotDelete": "Невозможно удалить рецепт: отсутствует ID рецепта",
+ "deleteConfirmationError": "Ошибка отображения подтверждения удаления",
+ "deletedSuccessfully": "Рецепт успешно удален",
+ "deleteFailed": "Ошибка удаления рецепта: {message}",
+ "cannotShare": "Невозможно поделиться рецептом: отсутствует ID рецепта",
+ "preparingForSharing": "Подготовка рецепта для общего доступа...",
+ "downloadStarted": "Загрузка рецепта начата",
+ "shareError": "Ошибка при предоставлении общего доступа к рецепту: {message}",
+ "sharePreparationError": "Ошибка подготовки рецепта для общего доступа",
+ "selectImageFirst": "Пожалуйста, сначала выберите изображение",
+ "enterRecipeName": "Пожалуйста, введите название рецепта",
+ "processingError": "Ошибка обработки: {message}",
+ "folderBrowserError": "Ошибка загрузки браузера папок: {message}",
+ "recipeSaveFailed": "Не удалось сохранить рецепт: {error}",
+ "recipeSaved": "Recipe saved successfully",
+ "importFailed": "Импорт не удался: {message}",
+ "folderTreeFailed": "Не удалось загрузить дерево папок",
+ "folderTreeError": "Ошибка загрузки дерева папок",
+ "batchImportFailed": "Failed to start batch import: {message}",
+ "batchImportCancelling": "Cancelling batch import...",
+ "batchImportCancelFailed": "Failed to cancel batch import: {message}",
+ "batchImportNoUrls": "Please enter at least one URL or file path",
+ "batchImportNoDirectory": "Please enter a directory path",
+ "batchImportBrowseFailed": "Failed to browse directory: {message}",
+ "batchImportDirectorySelected": "Directory selected: {path}",
+ "noRecipesSelected": "Рецепты не выбраны",
+ "repairBulkComplete": "Восстановление завершено: {repaired} восстановлено, {skipped} пропущено (из {total})",
+ "repairBulkSkipped": "Ни один из {total} выбранных рецептов не требует восстановления",
+ "repairBulkFailed": "Не удалось восстановить выбранные рецепты: {message}",
+ "reimporting": "Переимпорт рецепта из источника...",
+ "reimportSuccess": "Рецепт успешно переимпортирован",
+ "reimportBulkComplete": "Переимпорт завершён: {completed} переимпортировано, {failed} ошибок (из {total})",
+ "reimportBulkFailed": "Не удалось переимпортировать некоторые рецепты",
+ "noMissingLorasInSelection": "В выбранных рецептах не найдены отсутствующие LoRAs",
+ "noLoraRootConfigured": "Корневой каталог LoRA не настроен. Пожалуйста, установите корневой каталог LoRA по умолчанию в настройках."
+ },
+ "models": {
+ "noModelsSelected": "Модели не выбраны",
+ "deletedSuccessfully": "Успешно удалено {count} {type}(ей)",
+ "deleteFailed": "Ошибка: {error}",
+ "deleteFailedGeneral": "Не удалось удалить модели",
+ "selectedAdditional": "Выбрано дополнительно {count} {type}(ей)",
+ "marqueeSelectionComplete": "Выбрано {count} {type} с помощью выделения рамкой",
+ "refreshMetadataFailed": "Не удалось обновить метаданные",
+ "nameCannotBeEmpty": "Название модели не может быть пустым",
+ "nameUpdatedSuccessfully": "Название модели успешно обновлено",
+ "nameUpdateFailed": "Не удалось обновить название модели",
+ "baseModelUpdated": "Базовая модель успешно обновлена",
+ "baseModelUpdateFailed": "Не удалось обновить базовую модель",
+ "baseModelNotSelected": "Пожалуйста, выберите базовую модель",
+ "bulkBaseModelUpdating": "Обновление базовой модели для {count} моделей...",
+ "bulkBaseModelUpdateSuccess": "Базовая модель успешно обновлена для {count} моделей",
+ "bulkBaseModelUpdatePartial": "Обновлено {success} моделей, не удалось обновить {failed} моделей",
+ "bulkBaseModelUpdateFailed": "Не удалось обновить базовую модель для выбранных моделей",
+ "skipMetadataRefreshUpdating": "Обновление флага обновления метаданных для {count} модели(ей)...",
+ "skipMetadataRefreshSet": "Обновление метаданных пропущено для {count} модели(ей)",
+ "skipMetadataRefreshCleared": "Обновление метаданных возобновлено для {count} модели(ей)",
+ "skipMetadataRefreshPartial": "{success} модели(ей) обновлено, {failed} не удалось",
+ "skipMetadataRefreshFailed": "Не удалось обновить флаг обновления метаданных для выбранных моделей",
+ "bulkContentRatingUpdating": "Обновление рейтинга контента для {count} модель(ей)...",
+ "bulkContentRatingSet": "Рейтинг контента установлен на {level} для {count} модель(ей)",
+ "bulkContentRatingPartial": "Рейтинг контента {level} установлен для {success} модель(ей), {failed} не удалось",
+ "bulkContentRatingFailed": "Не удалось обновить рейтинг контента для выбранных моделей",
+ "bulkFavoriteUpdating": "Добавление {count} моделей в избранное...",
+ "bulkUnfavoriteUpdating": "Удаление {count} моделей из избранного...",
+ "bulkFavoritePartialAdded": "{success} моделей добавлено в избранное, {failed} не удалось",
+ "bulkFavoritePartialRemoved": "{success} моделей удалено из избранного, {failed} не удалось",
+ "bulkFavoriteFailed": "Не удалось обновить статус избранного",
+ "bulkUpdatesChecking": "Проверка обновлений для выбранных {type}...",
+ "bulkUpdatesSuccess": "Доступны обновления для {count} выбранных {type}",
+ "bulkUpdatesNone": "Обновления для выбранных {type} не найдены",
+ "bulkUpdatesMissing": "Выбранные {type} не привязаны к обновлениям Civitai",
+ "bulkUpdatesPartialMissing": "Пропущено {missing} выбранных {type} без привязки Civitai",
+ "bulkUpdatesFailed": "Не удалось проверить обновления для выбранных {type}: {message}",
+ "invalidCharactersRemoved": "Недопустимые символы удалены из имени файла",
+ "filenameCannotBeEmpty": "Имя файла не может быть пустым",
+ "renameFailed": "Не удалось переименовать файл: {message}",
+ "moveFailed": "Не удалось переместить модель(и): {message}",
+ "pleaseSelectRoot": "Пожалуйста, выберите корневую папку {type}",
+ "nameTooLong": "Название модели ограничено 100 символами",
+ "verificationAlreadyDone": "Эта группа уже была проверена",
+ "verificationCompleteMismatch": "Проверка завершена. {count} файл(ов) имеют разные фактические хеши.",
+ "verificationCompleteSuccess": "Проверка завершена. Все файлы подтверждены как дубликаты.",
+ "verificationFailed": "Не удалось проверить хеши: {message}",
+ "noTagsToAdd": "Нет тегов для добавления",
+ "bulkTagsUpdating": "Обновление тегов для {count} модел(ей)...",
+ "tagsAddedSuccessfully": "Успешно добавлено {tagCount} тег(ов) к {count} {type}(ам)",
+ "tagsReplacedSuccessfully": "Успешно заменены теги для {count} {type}(ов) на {tagCount} тег(ов)",
+ "tagsAddFailed": "Не удалось добавить теги к {count} модель(ям)",
+ "tagsReplaceFailed": "Не удалось заменить теги для {count} модель(ей)",
+ "bulkTagsAddFailed": "Не удалось добавить теги к моделям",
+ "bulkTagsReplaceFailed": "Не удалось заменить теги для моделей"
+ },
+ "search": {
+ "atLeastOneOption": "Должен быть выбран хотя бы один вариант поиска"
+ },
+ "settings": {
+ "loraRootsFailed": "Не удалось загрузить корни LoRA: {message}",
+ "checkpointRootsFailed": "Не удалось загрузить корни checkpoint: {message}",
+ "unetRootsFailed": "Не удалось загрузить корни Diffusion Model: {message}",
+ "embeddingRootsFailed": "Не удалось загрузить корни embedding: {message}",
+ "mappingsUpdated": "Сопоставления путей базовых моделей обновлены ({count} сопоставлени{plural})",
+ "mappingsCleared": "Сопоставления путей базовых моделей очищены",
+ "mappingSaveFailed": "Не удалось сохранить сопоставления базовых моделей: {message}",
+ "downloadTemplatesUpdated": "Шаблоны путей загрузки обновлены",
+ "downloadTemplatesFailed": "Не удалось сохранить шаблоны путей загрузки: {message}",
+ "recipesPathUpdated": "Путь хранения рецептов обновлён",
+ "recipesPathSaveFailed": "Не удалось обновить путь хранения рецептов: {message}",
+ "settingsUpdated": "Настройки обновлены: {setting}",
+ "compactModeToggled": "Компактный режим {state}",
+ "settingSaveFailed": "Не удалось сохранить настройку: {message}",
+ "displayDensitySet": "Плотность отображения установлена на {density}",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "Не удалось изменить язык: {message}",
+ "cacheCleared": "Файлы кэша успешно очищены. Кэш будет пересобран при следующем действии.",
+ "cacheClearFailed": "Не удалось очистить кэш: {error}",
+ "cacheClearError": "Ошибка очистки кэша: {message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "Фильтры очищены",
+ "noCustomFilterToClear": "Нет пользовательского фильтра для очистки",
+ "noActiveFilters": "Нет активных фильтров для сохранения"
+ },
+ "presets": {
+ "created": "Пресет \"{name}\" создан",
+ "deleted": "Пресет \"{name}\" удален",
+ "applied": "Пресет \"{name}\" применен",
+ "overwritten": "Пресет \"{name}\" перезаписан",
+ "restored": "Пресеты по умолчанию восстановлены"
+ },
+ "error": {
+ "presetNameEmpty": "Имя пресета не может быть пустым",
+ "presetNameTooLong": "Имя пресета должно содержать не более {max} символов",
+ "presetNameInvalidChars": "Имя пресета содержит недопустимые символы",
+ "presetNameExists": "Пресет с таким именем уже существует",
+ "maxPresetsReached": "Допустимо максимум {max} пресетов. Удалите один, чтобы добавить больше.",
+ "presetNotFound": "Пресет не найден",
+ "invalidPreset": "Недопустимые данные пресета",
+ "deletePresetFailed": "Не удалось удалить пресет",
+ "applyPresetFailed": "Не удалось применить пресет"
+ },
+ "downloads": {
+ "imagesCompleted": "Примеры изображений {action} завершены",
+ "imagesFailed": "Примеры изображений {action} не удались",
+ "loadError": "Ошибка загрузки downloads: {message}",
+ "downloadError": "Ошибка загрузки: {message}"
+ },
+ "import": {
+ "folderTreeFailed": "Не удалось загрузить дерево папок",
+ "folderTreeError": "Ошибка загрузки дерева папок",
+ "imagesImported": "Примеры изображений успешно импортированы",
+ "imagesPartial": "{success} изображ. импортировано, {failed} не удалось",
+ "importFailed": "Не удалось импортировать примеры изображений: {message}"
+ },
+ "triggerWords": {
+ "loadFailed": "Не удалось загрузить обученные слова",
+ "tooLong": "Триггерное слово не должно превышать 500 слов",
+ "tooMany": "Максимум 100 триггерных слов разрешено",
+ "alreadyExists": "Это триггерное слово уже существует",
+ "updateSuccess": "Триггерные слова успешно обновлены",
+ "updateFailed": "Не удалось обновить триггерные слова",
+ "copyFailed": "Копирование не удалось"
+ },
+ "virtual": {
+ "loadFailed": "Не удалось загрузить элементы",
+ "loadMoreFailed": "Не удалось загрузить больше элементов",
+ "loadPositionFailed": "Не удалось загрузить элементы в этой позиции"
+ },
+ "bulk": {
+ "unableToSelectAll": "Невозможно выбрать все элементы"
+ },
+ "duplicates": {
+ "findFailed": "Не удалось найти дубликаты: {message}",
+ "noDuplicatesFound": "Дубликаты {type} не найдены",
+ "noItemsSelected": "Не выбрано {type} для удаления",
+ "deleteError": "Ошибка: {message}",
+ "deleteSuccess": "Успешно удалено {count} {type}",
+ "deleteFailed": "Не удалось удалить {type}: {message}"
+ },
+ "controls": {
+ "reloadFailed": "Не удалось перезагрузить {pageType}: {message}",
+ "refreshFailed": "Не удалось {action} {pageType}: {message}",
+ "fetchMetadataFailed": "Не удалось получить метаданные: {message}",
+ "clearFilterFailed": "Не удалось очистить пользовательский фильтр: {message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "Рейтинг контента установлен на {level}",
+ "contentRatingFailed": "Не удалось установить рейтинг контента: {message}",
+ "relinkSuccess": "Модель успешно пересвязана с Civitai",
+ "relinkFailed": "Ошибка: {message}",
+ "fetchMetadataFirst": "Пожалуйста, сначала получите метаданные с CivitAI",
+ "noCivitaiInfo": "Информация CivitAI недоступна",
+ "missingHash": "Хеш модели недоступен"
+ },
+ "exampleImages": {
+ "pathUpdated": "Путь к примерам изображений успешно обновлен",
+ "pathUpdateFailed": "Не удалось обновить путь к примерам изображений: {message}",
+ "downloadInProgress": "Загрузка уже в процессе",
+ "enterLocationFirst": "Пожалуйста, сначала введите место загрузки",
+ "downloadStarted": "Загрузка примеров изображений начата",
+ "downloadStartFailed": "Не удалось начать загрузку: {error}",
+ "downloadPaused": "Загрузка приостановлена",
+ "pauseFailed": "Не удалось приостановить загрузку: {error}",
+ "downloadResumed": "Загрузка возобновлена",
+ "resumeFailed": "Не удалось возобновить загрузку: {error}",
+ "downloadStopped": "Загрузка отменена",
+ "stopFailed": "Не удалось отменить загрузку: {error}",
+ "deleted": "Пример изображения удален",
+ "deleteFailed": "Не удалось удалить пример изображения",
+ "setPreviewFailed": "Не удалось установить превью изображение"
+ },
+ "api": {
+ "fetchFailed": "Не удалось получить {type}s: {message}",
+ "reloadFailed": "Не удалось перезагрузить {type}s: {message}",
+ "deleteSuccess": "{type} успешно удален",
+ "deleteFailed": "Не удалось удалить {type}: {message}",
+ "excludeSuccess": "{type} успешно исключен",
+ "excludeFailed": "Не удалось исключить {type}: {message}",
+ "restoreSuccess": "{type} успешно восстановлен",
+ "restoreFailed": "Не удалось восстановить {type}: {message}",
+ "fileNameUpdated": "Имя файла успешно обновлено",
+ "fileRenameFailed": "Не удалось переименовать файл: {error}",
+ "previewUpdated": "Превью успешно обновлено",
+ "previewUploadFailed": "Не удалось загрузить превью изображение",
+ "refreshComplete": "{action} завершено",
+ "refreshFailed": "Не удалось {action} {type}s",
+ "metadataRefreshed": "Метаданные успешно обновлены",
+ "metadataRefreshFailed": "Не удалось обновить метаданные: {message}",
+ "metadataUpdateComplete": "Обновление метаданных завершено",
+ "operationCancelled": "Операция отменена пользователем",
+ "operationCancelledPartial": "Операция отменена. Обработано {success} элементов.",
+ "metadataFetchFailed": "Не удалось получить метаданные: {message}",
+ "bulkMetadataCompleteAll": "Успешно обновлены все {count} {type}s",
+ "bulkMetadataCompletePartial": "Обновлено {success} из {total} {type}s",
+ "bulkMetadataCompleteNone": "Не удалось обновить метаданные ни для одного {type}s",
+ "bulkMetadataFailureDetails": "Неудачные обновления:\n{failures}",
+ "bulkMetadataFailed": "Не удалось обновить метаданные: {message}",
+ "moveNotSupported": "Перемещение {type}s не поддерживается",
+ "alreadyInFolder": "{type} уже находится в выбранной папке",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type} успешно перемещен",
+ "bulkMoveNotSupported": "Перемещение {type}s не поддерживается",
+ "allAlreadyInFolder": "Все выбранные {type}s уже находятся в целевой папке",
+ "bulkMovePartial": "Перемещено {successCount} {type}s, {failureCount} не удалось",
+ "bulkMoveFailures": "Неудачные перемещения:\n{failures}",
+ "bulkMoveSuccess": "Успешно перемещено {successCount} {type}s",
+ "exampleImagesDownloadSuccess": "Примеры изображений успешно загружены!",
+ "exampleImagesDownloadFailed": "Не удалось загрузить примеры изображений: {message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "Скопировано в буфер обмена",
+ "downloadStarted": "Загрузка начата"
+ }
+ },
+ "doctor": {
+ "kicker": "Системная диагностика",
+ "title": "Доктор",
+ "buttonTitle": "Запустить диагностику и обычные исправления",
+ "loading": "Проверка окружения...",
+ "footer": "Экспортируйте диагностический пакет, если проблема сохраняется после исправления.",
+ "summary": {
+ "idle": "Выполнить проверку настроек, целостности кэша и согласованности интерфейса.",
+ "ok": "В текущем окружении активных проблем не обнаружено.",
+ "warning": "Обнаружено {count} проблем(ы). Большинство можно исправить прямо из этой панели.",
+ "error": "Перед тем как приложение станет полностью исправным, нужно устранить {count} проблем(ы)."
+ },
+ "status": {
+ "ok": "Исправно",
+ "warning": "Требует внимания",
+ "error": "Требуется действие"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API Key"
+ },
+ "cache_health": {
+ "title": "Model Cache Health"
+ },
+ "filename_conflicts": {
+ "title": "Duplicate Filename Conflicts"
+ },
+ "ui_version": {
+ "title": "UI Version"
+ }
+ },
+ "actions": {
+ "runAgain": "Запустить снова",
+ "exportBundle": "Экспортировать пакет",
+ "open-settings": "Open Settings",
+ "open-settings-syntax-format": "Switch to Full Path Syntax",
+ "repair-cache": "Rebuild Cache",
+ "resolve-filename-conflicts": "Resolve Conflicts",
+ "reload-page": "Reload UI"
+ },
+ "labels": {
+ "conflicts": "Conflicts",
+ "version": "Version"
+ },
+ "toast": {
+ "loadFailed": "Не удалось загрузить диагностику: {message}",
+ "repairSuccess": "Перестройка кэша завершена.",
+ "repairFailed": "Не удалось перестроить кэш: {message}",
+ "exportSuccess": "Диагностический пакет экспортирован.",
+ "exportFailed": "Не удалось экспортировать диагностический пакет: {message}",
+ "conflictsResolved": "Разрешено конфликтов имён файлов: {count}.",
+ "conflictsResolveFailed": "Не удалось разрешить конфликты имён файлов: {message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "Разрешить конфликты имён файлов",
+ "message": "Переименование с добавлением 4-символьного хеша к каждому дублирующемуся имени файла.",
+ "note": "Эта операция переименовывает файлы на диске. Если вы используете синтаксис A1111, ссылки на модели в существующих рабочих процессах могут потребовать обновления.",
+ "detail": "Пример: filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "Будет переименовано {count} файл(ов) в {groups} группе(ах) дубликатов",
+ "confirm": "Переименовать файлы",
+ "cancel": "Отмена"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "Обнаружено обновление приложения",
+ "content": "Ваш браузер работает с устаревшей версией LoRA Manager ({storedVersion}). Сервер был обновлен до версии {currentVersion}. Пожалуйста, обновите страницу для обеспечения правильной работы.",
+ "refreshNow": "Обновить сейчас",
+ "refreshingIn": "Обновление через",
+ "seconds": "секунд"
+ },
+ "communitySupport": {
+ "title": "Keep LoRA Manager Thriving with Your Support ❤️",
+ "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
+ "supportCta": "Support on Ko-fi",
+ "learnMore": "LM Civitai Extension Tutorial"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "Обнаружено повреждение кэша"
+ },
+ "degraded": {
+ "title": "Обнаружены проблемы с кэшем"
+ },
+ "content": "{invalid} из {total} записей кэша недействительны ({rate}). Это может привести к отсутствию моделей или ошибкам. Рекомендуется перестроить кэш.",
+ "rebuildCache": "Перестроить кэш",
+ "dismiss": "Отклонить",
+ "rebuilding": "Перестроение кэша...",
+ "rebuildFailed": "Не удалось перестроить кэш: {error}",
+ "retry": "Повторить"
+ }
+ }
}
diff --git a/locales/zh-CN.json b/locales/zh-CN.json
index c1cdbea3..49a790c0 100644
--- a/locales/zh-CN.json
+++ b/locales/zh-CN.json
@@ -1,2167 +1,2171 @@
{
- "common": {
- "cancel": "取消",
- "confirm": "确认",
- "actions": {
- "save": "保存",
- "cancel": "取消",
- "confirm": "确认",
- "delete": "删除",
- "move": "移动",
- "refresh": "刷新",
- "back": "返回",
- "next": "下一步",
- "backToTop": "返回顶部",
- "settings": "设置",
- "help": "帮助",
- "add": "添加",
- "close": "关闭",
- "menu": "菜单",
- "remove": "移除",
- "change": "更换"
- },
- "status": {
- "loading": "加载中...",
- "cancelling": "取消中...",
- "unknown": "未知",
- "date": "日期",
- "version": "版本",
- "enabled": "已启用",
- "disabled": "已禁用"
- },
- "language": {
- "select": "选择语言",
- "select_help": "选择你喜欢的界面语言",
- "english": "English",
- "chinese_simplified": "中文(简体)",
- "chinese_traditional": "中文(繁体)",
- "russian": "Русский",
- "german": "Deutsch",
- "japanese": "日本語",
- "korean": "한국어",
- "french": "Français",
- "spanish": "Español",
- "Hebrew": "עברית"
- },
- "fileSize": {
- "zero": "0 字节",
- "bytes": "字节",
- "kb": "KB",
- "mb": "MB",
- "gb": "GB",
- "tb": "TB"
- }
+ "common": {
+ "cancel": "取消",
+ "confirm": "确认",
+ "actions": {
+ "save": "保存",
+ "cancel": "取消",
+ "confirm": "确认",
+ "delete": "删除",
+ "move": "移动",
+ "refresh": "刷新",
+ "back": "返回",
+ "next": "下一步",
+ "backToTop": "返回顶部",
+ "settings": "设置",
+ "help": "帮助",
+ "add": "添加",
+ "close": "关闭",
+ "menu": "菜单",
+ "remove": "移除",
+ "change": "更换"
},
- "onboarding": {
- "languageSelection": {
- "title": "欢迎使用 LoRA 管理器",
- "continue": "继续",
- "changeFailed": "切换语言失败:{message}"
- },
- "tutorial": {
- "skipTutorial": "跳过教程",
- "back": "返回",
- "next": "下一步",
- "finish": "完成"
- },
- "steps": {
- "fetch": {
- "title": "获取模型元数据",
- "content": "点击 获取 按钮,从 Civitai 下载模型元数据和预览图片。"
- },
- "download": {
- "title": "下载新模型",
- "content": "使用 下载 按钮,可直接通过 Civitai URL 下载模型。"
- },
- "bulk": {
- "title": "批量操作",
- "content": "点击此按钮或按 B 进入批量模式。可多选模型并进行批量操作。使用 Ctrl+A 全选所有可见模型。"
- },
- "searchOptions": {
- "title": "搜索选项",
- "content": "点击此按钮可配置搜索字段:文件名、模型名称、标签或创作者名称。自定义你的搜索范围。"
- },
- "filter": {
- "title": "筛选模型",
- "content": "使用筛选器按基础模型类型(SD1.5、SDXL、Flux 等)或特定标签缩小模型范围。"
- },
- "breadcrumb": {
- "title": "路径导航",
- "content": "路径导航显示你当前所在位置,并可快速在文件夹间跳转。点击任意文件夹名称即可直接跳转。"
- },
- "modelCards": {
- "title": "模型卡片",
- "content": "单击模型卡片可查看详细信息并编辑元数据。悬停在可编辑字段时会显示铅笔图标。"
- },
- "contextMenu": {
- "title": "右键菜单",
- "content": "右键点击任意模型卡片可打开更多操作菜单。"
- }
- }
+ "status": {
+ "loading": "加载中...",
+ "cancelling": "取消中...",
+ "unknown": "未知",
+ "date": "日期",
+ "version": "版本",
+ "enabled": "已启用",
+ "disabled": "已禁用"
},
- "modelCard": {
- "actions": {
- "addToFavorites": "添加到收藏",
- "removeFromFavorites": "从收藏移除",
- "viewOnCivitai": "在 Civitai 查看",
- "notAvailableFromCivitai": "Civitai 上不可用",
- "sendToWorkflow": "发送到 ComfyUI(点击:追加,Shift+点击:替换)",
- "copyLoRASyntax": "复制 LoRA 语法",
- "checkpointNameCopied": "检查点名称已复制",
- "toggleBlur": "切换模糊",
- "show": "显示",
- "openExampleImages": "打开示例图片文件夹",
- "replacePreview": "替换预览",
- "copyCheckpointName": "复制 Checkpoint 名称",
- "copyEmbeddingName": "复制 Embedding 名称",
- "embeddingNameCopied": "已复制 Embedding 语法",
- "sendCheckpointToWorkflow": "发送到 ComfyUI",
- "sendEmbeddingToWorkflow": "发送到 ComfyUI"
- },
- "nsfw": {
- "matureContent": "成熟内容",
- "xxxRated": "XXX级内容",
- "xRated": "X级内容",
- "rRated": "R级内容"
- },
- "favorites": {
- "added": "已添加到收藏",
- "removed": "已从收藏移除",
- "updateFailed": "收藏状态更新失败"
- },
- "sendToWorkflow": {
- "checkpointNotImplemented": "发送检查点到工作流 - 功能待实现",
- "missingPath": "无法确定此卡片的模型路径"
- },
- "exampleImages": {
- "checkError": "检查示例图片时出错",
- "missingHash": "缺少模型哈希信息。",
- "noRemoteImagesAvailable": "此模型在 Civitai 上没有远程示例图片"
- },
- "badges": {
- "update": "更新",
- "updateAvailable": "有可用更新",
- "skipRefresh": "元数据刷新已跳过"
- },
- "usage": {
- "timesUsed": "使用次数"
- },
- "footer": {
- "versionCount": "{count} 个版本",
- "viewAllVersions": "查看所有本地版本"
- }
+ "language": {
+ "select": "选择语言",
+ "select_help": "选择你喜欢的界面语言",
+ "english": "English",
+ "chinese_simplified": "中文(简体)",
+ "chinese_traditional": "中文(繁体)",
+ "russian": "Русский",
+ "german": "Deutsch",
+ "japanese": "日本語",
+ "korean": "한국어",
+ "french": "Français",
+ "spanish": "Español",
+ "Hebrew": "עברית"
},
- "globalContextMenu": {
- "downloadExampleImages": {
- "label": "下载示例图片",
- "missingPath": "请先设置下载位置后再下载示例图片。",
- "unavailable": "示例图片下载当前不可用。请在页面加载完成后重试。"
- },
- "checkModelUpdates": {
- "label": "检查更新",
- "loading": "正在检查 {type} 更新...",
- "success": "找到 {count} 条 {type} 更新",
- "none": "所有 {type} 均已是最新版本",
- "error": "检查 {type} 更新失败:{message}"
- },
- "cleanupExampleImages": {
- "label": "清理示例图片文件夹",
- "success": "已将 {count} 个文件夹移动到已删除文件夹",
- "none": "没有需要清理的示例图片文件夹",
- "partial": "清理完成,有 {failures} 个文件夹跳过",
- "error": "清理示例图片文件夹失败:{message}"
- },
- "fetchMissingLicenses": {
- "label": "刷新许可证元数据",
- "loading": "正在刷新 {typePlural} 的许可证元数据...",
- "success": "已更新 {count} 个 {typePlural} 的许可证元数据",
- "none": "所有 {typePlural} 都已具备许可证元数据",
- "error": "刷新 {typePlural} 的许可证元数据失败:{message}"
- },
- "repairRecipes": {
- "label": "修复配方数据",
- "loading": "正在修复配方数据...",
- "success": "成功修复了 {count} 个配方。",
- "cancelled": "修复已取消。已修复 {count} 个配方。",
- "error": "配方修复失败:{message}"
- },
- "manageExcludedModels": {
- "label": "管理已排除的模型"
- },
- "groupByModel": {
- "label": "按模型分组"
- }
+ "fileSize": {
+ "zero": "0 字节",
+ "bytes": "字节",
+ "kb": "KB",
+ "mb": "MB",
+ "gb": "GB",
+ "tb": "TB"
+ }
+ },
+ "onboarding": {
+ "languageSelection": {
+ "title": "欢迎使用 LoRA 管理器",
+ "continue": "继续",
+ "changeFailed": "切换语言失败:{message}"
},
- "header": {
- "appTitle": "LoRA 管理器",
- "navigation": {
- "loras": "LoRA",
- "recipes": "配方",
- "checkpoints": "Checkpoint",
- "embeddings": "Embedding",
- "statistics": "统计"
- },
- "search": {
- "placeholder": "搜索",
- "options": "搜索选项",
- "searchIn": "搜索范围:",
- "notAvailable": "统计页面不可用搜索",
- "filters": {
- "filename": "文件名",
- "modelname": "模型名称",
- "tags": "标签",
- "creator": "创作者",
- "title": "配方标题",
- "loraName": "LoRA 文件名",
- "loraModel": "LoRA 模型名称",
- "prompt": "提示词"
- }
- },
- "filter": {
- "title": "筛选模型",
- "presets": "预设",
- "savePreset": "将当前激活的筛选器保存为新预设。",
- "savePresetDisabledActive": "无法保存:已有预设处于激活状态。修改筛选器后可保存新预设",
- "savePresetDisabledNoFilters": "先选择筛选器,然后保存为预设",
- "savePresetPrompt": "输入预设名称:",
- "presetClickTooltip": "点击应用预设 \"{name}\"",
- "presetDeleteTooltip": "删除预设",
- "presetDeleteConfirm": "删除预设 \"{name}\"?",
- "presetDeleteConfirmClick": "再次点击确认",
- "presetOverwriteConfirm": "预设 \"{name}\" 已存在。是否覆盖?",
- "presetNamePlaceholder": "预设名称...",
- "baseModel": "基础模型",
- "baseModelSearchPlaceholder": "搜索基础模型...",
- "modelTags": "标签(前20)",
- "modelTypes": "模型类型",
- "license": "许可证",
- "noCreditRequired": "无需署名",
- "allowSellingGeneratedContent": "允许销售",
- "allowSellingGeneratedContentTooltip": "允许出售生成的图片",
- "noCreditRequiredTooltip": "使用模型时无需注明原作者",
- "noTags": "无标签",
- "autoTags": "自动标签",
- "noBaseModelMatches": "没有基础模型符合当前搜索。",
- "clearAll": "清除所有筛选",
- "any": "任一",
- "all": "全部",
- "tagLogicAny": "匹配任一标签 (或)",
- "tagLogicAll": "匹配所有标签 (与)"
- },
- "theme": {
- "toggle": "切换主题",
- "switchToLight": "切换到浅色主题",
- "switchToDark": "切换到深色主题",
- "switchToAuto": "切换到自动主题",
- "presets": "主题预设",
- "default": "默认",
- "nord": "Nord",
- "midnight": "Midnight",
- "monokai": "Monokai",
- "dracula": "Dracula",
- "solarized": "Solarized",
- "mode": "模式",
- "light": "浅色",
- "dark": "深色",
- "auto": "自动"
- },
- "actions": {
- "checkUpdates": "检查更新",
- "notifications": "通知",
- "support": "支持"
- }
+ "tutorial": {
+ "skipTutorial": "跳过教程",
+ "back": "返回",
+ "next": "下一步",
+ "finish": "完成"
},
- "settings": {
- "civitaiApiKey": "Civitai API 密钥",
- "civitaiApiKeyPlaceholder": "请输入你的 Civitai API 密钥",
- "civitaiApiKeyHelp": "用于从 Civitai 下载模型时的身份验证",
- "civitaiApiKeyConfigured": "已配置",
- "civitaiApiKeyNotConfigured": "未配置",
- "civitaiApiKeySet": "设置",
- "civitaiHost": {
- "label": "Civitai 站点",
- "help": "选择使用“在 Civitai 中查看”时默认打开的 Civitai 站点。",
- "options": {
- "com": "civitai.com(仅 SFW)",
- "red": "civitai.red(无限制)"
- }
- },
- "downloadBackend": {
- "label": "下载后端",
- "help": "选择模型文件的下载方式。Python 使用内置下载器。aria2 使用推荐的外部下载进程。",
- "options": {
- "python": "Python(内置)",
- "aria2": "aria2(推荐)"
- }
- },
- "aria2cPath": {
- "label": "aria2c 路径",
- "help": "可选的 aria2c 可执行文件路径。留空则使用系统 PATH 中的 aria2c。",
- "placeholder": "留空则使用 PATH 中的 aria2c"
- },
- "aria2HelpLink": "了解如何配置 aria2 下载后端",
- "civitaiHostBanner": {
- "title": "已提供 Civitai 站点偏好设置",
- "content": "Civitai 现在使用 civitai.com 提供 SFW 内容,使用 civitai.red 提供无限制内容。你可以在设置中更改默认打开的站点。",
- "openSettings": "打开设置"
- },
- "openSettingsFileLocation": {
- "label": "打开设置文件夹",
- "tooltip": "打开包含 settings.json 的文件夹",
- "success": "已打开 settings.json 文件夹",
- "failed": "无法打开 settings.json 文件夹",
- "copied": "设置路径已复制到剪贴板:{{path}}",
- "clipboardFallback": "设置路径:{{path}}"
- },
- "sections": {
- "contentFiltering": "内容过滤",
- "downloads": "下载",
- "videoSettings": "视频设置",
- "layoutSettings": "布局设置",
- "licenseIcons": "许可协议图标",
- "misc": "其他",
- "backup": "备份",
- "folderSettings": "默认根目录",
- "recipeSettings": "配方",
- "extraFolderPaths": "额外文件夹路径",
- "downloadPathTemplates": "下载路径模板",
- "priorityTags": "优先标签",
- "versionScope": "版本范围",
- "exampleImages": "示例图片",
- "autoOrganize": "自动整理",
- "metadata": "元数据",
- "proxySettings": "代理设置"
- },
- "nav": {
- "general": "通用",
- "interface": "界面",
- "library": "库"
- },
- "search": {
- "placeholder": "搜索设置...",
- "clear": "清除搜索",
- "noResults": "未找到匹配 \"{query}\" 的设置"
- },
- "storage": {
- "locationLabel": "便携模式",
- "locationHelp": "开启可将 settings.json 保存在仓库中;关闭则保存在用户配置目录。"
- },
- "contentFiltering": {
- "blurNsfwContent": "模糊 NSFW 内容",
- "blurNsfwContentHelp": "模糊成熟(NSFW)内容预览图片",
- "showOnlySfw": "仅显示 SFW 结果",
- "showOnlySfwHelp": "浏览和搜索时过滤所有 NSFW 内容",
- "matureBlurThreshold": "成人内容模糊阈值",
- "matureBlurThresholdHelp": "设置当启用 NSFW 模糊时,从哪个评级级别开始模糊过滤。",
- "matureBlurThresholdOptions": {
- "pg13": "PG13 及以上",
- "r": "R 及以上(默认)",
- "x": "X 及以上",
- "xxx": "仅 XXX"
- }
- },
- "videoSettings": {
- "autoplayOnHover": "悬停时自动播放视频",
- "autoplayOnHoverHelp": "仅在悬停时播放视频预览"
- },
- "autoOrganizeExclusions": {
- "label": "自动整理排除项",
- "placeholder": "示例: curated/*, */backups/*; *_temp.safetensors",
- "help": "跳过与这些通配符模式匹配的文件。多个模式用逗号或分号分隔。",
- "validation": {
- "noPatterns": "请输入至少一个用逗号或分号分隔的模式。",
- "saveFailed": "无法保存排除项:{message}"
- }
- },
- "metadataRefreshSkipPaths": {
- "label": "元数据刷新跳过路径",
- "placeholder": "示例:temp, archived/old, test_models",
- "help": "批量刷新元数据(\"获取全部元数据\")时跳过这些目录路径中的模型。输入相对于模型根目录的文件夹路径,以逗号分隔。",
- "validation": {
- "noPaths": "请输入至少一个路径,以逗号分隔。",
- "saveFailed": "无法保存跳过路径:{message}"
- }
- },
- "backup": {
- "autoEnabled": "自动备份",
- "autoEnabledHelp": "每天创建一次本地快照,并按保留策略保留最新快照。",
- "retention": "保留数量",
- "retentionHelp": "在删除旧快照之前,要保留多少个自动快照。",
- "management": "备份管理",
- "managementHelp": "导出当前用户状态,或从备份归档中恢复。",
- "scopeHelp": "备份你的设置、下载历史和模型更新状态。不包含模型文件或可重建的缓存。",
- "locationSummary": "当前备份位置",
- "openFolderButton": "打开备份文件夹",
- "openFolderSuccess": "已打开备份文件夹",
- "openFolderFailed": "无法打开备份文件夹",
- "locationCopied": "备份路径已复制到剪贴板:{{path}}",
- "locationClipboardFallback": "备份路径:{{path}}",
- "exportButton": "导出备份",
- "exportSuccess": "备份导出成功。",
- "exportFailed": "备份导出失败:{message}",
- "importButton": "导入备份",
- "importConfirm": "导入此备份并覆盖本地用户状态吗?",
- "importSuccess": "备份导入成功。",
- "importFailed": "备份导入失败:{message}",
- "latestSnapshot": "最近快照",
- "latestAutoSnapshot": "最近自动快照",
- "snapshotCount": "已保存快照",
- "noneAvailable": "还没有快照"
- },
- "downloadSkipBaseModels": {
- "label": "跳过这些基础模型的下载",
- "help": "适用于所有下载流程。这里只能选择受支持的基础模型。",
- "searchPlaceholder": "筛选基础模型...",
- "empty": "没有与当前搜索匹配的基础模型。",
- "summary": {
- "none": "未选择",
- "count": "已选择 {count} 项"
- },
- "actions": {
- "edit": "编辑",
- "collapse": "收起",
- "clear": "清空"
- },
- "validation": {
- "saveFailed": "无法保存已排除的基础模型:{message}"
- }
- },
- "skipPreviouslyDownloadedModelVersions": {
- "label": "跳过已下载的模型版本",
- "help": "启用后,如果下载历史服务记录显示该版本已下载,LoRA Manager 将跳过下载该模型版本。适用于所有下载流程。"
- },
- "layoutSettings": {
- "groupByModel": "按模型分组",
- "groupByModelHelp": "开启后,每个 Civitai 模型仅显示最新版本的单张卡片,旧版本将被隐藏。",
- "displayDensity": "显示密度",
- "displayDensityOptions": {
- "default": "默认",
- "medium": "中等",
- "compact": "紧凑"
- },
- "displayDensityHelp": "选择每行显示卡片数量:",
- "displayDensityDetails": {
- "default": "5(1080p),6(2K),8(4K)",
- "medium": "6(1080p),7(2K),9(4K)",
- "compact": "7(1080p),8(2K),10(4K)"
- },
- "displayDensityWarning": "警告:高密度可能导致资源有限的系统性能下降。",
- "showFolderSidebar": "显示文件夹侧边栏",
- "showFolderSidebarHelp": "在模型页面启用或禁用文件夹导航侧边栏。关闭后,侧边栏和悬停区域将保持隐藏。",
- "cardInfoDisplay": "卡片信息显示",
- "cardInfoDisplayOptions": {
- "always": "始终可见",
- "hover": "悬停时显示"
- },
- "cardInfoDisplayHelp": "选择何时显示模型信息和操作按钮",
- "showVersionOnCard": "在卡片上显示版本",
- "showVersionOnCardHelp": "在模型卡片上显示或隐藏版本名称",
- "modelCardFooterAction": "模型卡片按钮操作",
- "modelCardFooterActionOptions": {
- "exampleImages": "打开示例图片",
- "replacePreview": "替换预览"
- },
- "modelCardFooterActionHelp": "选择右下角卡片按钮的功能",
- "modelNameDisplay": "模型名称显示",
- "modelNameDisplayOptions": {
- "modelName": "模型名称",
- "fileName": "文件名"
- },
- "modelNameDisplayHelp": "选择在模型卡片底部显示的内容",
- "cardBlurAmount": "卡片叠加模糊强度",
- "cardBlurAmountHelp": "调整模型和配方卡片上页眉和页脚叠加层的模糊强度(0 = 无模糊,20 = 最大模糊)。"
- },
- "folderSettings": {
- "activeLibrary": "活动库",
- "activeLibraryHelp": "在已配置的库之间切换以更新默认文件夹。更改选择将重新加载页面。",
- "loadingLibraries": "正在加载库...",
- "noLibraries": "尚未配置库",
- "defaultLoraRoot": "LoRA 根目录",
- "defaultLoraRootHelp": "设置下载、导入和移动时的默认 LoRA 根目录",
- "defaultCheckpointRoot": "Checkpoint 根目录",
- "defaultCheckpointRootHelp": "设置下载、导入和移动时的默认 Checkpoint 根目录",
- "defaultUnetRoot": "Diffusion Model 根目录",
- "defaultUnetRootHelp": "设置下载、导入和移动时的默认 Diffusion Model (UNET) 根目录",
- "defaultEmbeddingRoot": "Embedding 根目录",
- "defaultEmbeddingRootHelp": "设置下载、导入和移动时的默认 Embedding 根目录",
- "recipesPath": "配方存储路径",
- "recipesPathHelp": "已保存配方的可选自定义目录。留空则使用第一个 LoRA 根目录下的 recipes 文件夹。",
- "recipesPathPlaceholder": "/path/to/recipes",
- "recipesPathMigrating": "正在迁移配方存储...",
- "noDefault": "无默认"
- },
- "extraFolderPaths": {
- "title": "额外文件夹路径",
- "description": "LoRA Manager 专属的额外模型根目录。从 ComfyUI 标准文件夹之外的位置加载模型,特别适合管理大型模型库,避免影响 ComfyUI 性能。",
- "restartRequired": "需要重启才能生效",
- "modelTypes": {
- "lora": "LoRA 路径",
- "checkpoint": "Checkpoint 路径",
- "unet": "Diffusion 模型路径",
- "embedding": "Embedding 路径"
- },
- "pathPlaceholder": "/额外/模型/路径",
- "saveSuccess": "额外文件夹路径已更新,需要重启才能生效。",
- "saveError": "更新额外文件夹路径失败:{message}",
- "validation": {
- "duplicatePath": "此路径已配置"
- }
- },
- "priorityTags": {
- "title": "优先标签",
- "description": "为每种模型类型自定义标签优先级顺序 (例如: character, concept, style(toon|toon_style))",
- "placeholder": "character, concept, style(toon|toon_style)",
- "helpLinkLabel": "打开优先标签帮助",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "saveSuccess": "优先标签已更新。",
- "saveError": "优先标签更新失败。",
- "loadingSuggestions": "正在加载建议...",
- "validation": {
- "missingClosingParen": "条目 {index} 缺少右括号。",
- "missingCanonical": "条目 {index} 必须包含规范标签名称。",
- "duplicateCanonical": "规范标签 \"{tag}\" 出现多次。",
- "unknown": "优先标签配置无效。"
- }
- },
- "downloadPathTemplates": {
- "title": "下载路径模板",
- "help": "配置从 Civitai 下载不同模型类型的文件夹结构。",
- "availablePlaceholders": "可用占位符:",
- "templateOptions": {
- "flatStructure": "扁平结构",
- "byBaseModel": "按基础模型",
- "byAuthor": "按作者",
- "byFirstTag": "按首标签",
- "baseModelFirstTag": "基础模型 + 首标签",
- "baseModelAuthor": "基础模型 + 作者",
- "authorFirstTag": "作者 + 首标签",
- "baseModelAuthorFirstTag": "基础模型 + 作者 + 首标签",
- "customTemplate": "自定义模板"
- },
- "customTemplatePlaceholder": "输入自定义模板(如:{base_model}/{author}/{first_tag})",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "baseModelPathMappings": "基础模型路径映射",
- "baseModelPathMappingsHelp": "为特定基础模型自定义文件夹名称(如“Flux.1 D”→“flux”)",
- "addMapping": "添加映射",
- "selectBaseModel": "选择基础模型",
- "customPathPlaceholder": "自定义路径(如:flux)",
- "removeMapping": "移除映射",
- "validation": {
- "validFlat": "有效(扁平结构)",
- "invalidChars": "检测到无效字符",
- "doubleSlashes": "不允许双斜杠",
- "leadingTrailingSlash": "不能以斜杠开始或结束",
- "invalidPlaceholder": "无效占位符:{placeholder}",
- "validTemplate": "有效模板"
- }
- },
- "exampleImages": {
- "downloadLocation": "下载位置",
- "downloadLocationPlaceholder": "输入示例图片文件夹路径",
- "downloadLocationHelp": "输入保存从 Civitai 下载的示例图片的文件夹路径",
- "autoDownload": "自动下载示例图片",
- "autoDownloadHelp": "自动为没有示例图片的模型下载示例图片(需设置下载位置)",
- "openMode": "打开示例图片操作",
- "openModeHelp": "选择是在服务器上打开、复制映射后的本地路径,还是启动自定义 URI。",
- "openModeOptions": {
- "system": "在服务器上打开",
- "clipboard": "复制本地路径",
- "uriTemplate": "打开自定义 URI"
- },
- "localRoot": "本地示例图片根目录",
- "localRootHelp": "可选的本地或挂载根目录,用于映射服务器上的示例图片目录。若留空,则复用服务器路径。",
- "localRootPlaceholder": "例如:/Volumes/ComfyUI/example_images",
- "uriTemplate": "打开 URI 模板",
- "uriTemplateHelp": "使用自定义深链接,例如文件 URI 或 Shortcuts 链接。",
- "uriTemplatePlaceholder": "例如:shortcuts://run-shortcut?name=Open%20Finder&input=text&text={{encoded_local_path}}",
- "uriTemplatePlaceholders": "可用占位符:{{local_path}}、{{encoded_local_path}}、{{relative_path}}、{{encoded_relative_path}}、{{file_uri}}、{{encoded_file_uri}}",
- "openModeWikiLink": "了解远程打开模式",
- "optimizeImages": "优化下载图片",
- "optimizeImagesHelp": "优化示例图片以减少文件大小并提升加载速度(保留元数据)",
- "download": "下载",
- "restartRequired": "需要重启"
- },
- "versionGrouping": {
- "label": "版本分组",
- "help": "控制版本在 UI 中的分组方式:按基础模型分组或合并显示。同时影响更新徽章逻辑和版本列表的筛选行为。",
- "options": {
- "sameBase": "按基础模型分组",
- "any": "显示所有版本"
- }
- },
- "hideEarlyAccessUpdates": {
- "label": "隐藏抢先体验更新",
- "help": "抢先体验更新"
- },
- "licenseIcons": {
- "useNewStyle": "使用新版许可协议图标",
- "useNewStyleHelp": "以彩色指示器显示许可权限(新样式),或仅显示限制图标(经典样式)。与当前 CivitAI 设计保持一致。"
- },
- "misc": {
- "includeTriggerWords": "复制 LoRA 语法时包含触发词",
- "includeTriggerWordsHelp": "复制 LoRA 语法到剪贴板时包含训练触发词",
- "loraSyntaxFormat": "LoRA 语法格式",
- "loraSyntaxFormatHelp": "LoRA 语法格式。完整路径(Full)包含子文件夹路径 (filename_v1.2 → filename_v1.2-ab3c",
- "impact": "将重命名 {count} 个文件(共 {groups} 组重复)",
- "confirm": "重命名文件",
- "cancel": "取消"
+ "metadataFetchSummary": {
+ "title": "元数据获取摘要",
+ "statSuccess": "成功",
+ "statFailed": "失败",
+ "statSkipped": "已跳过",
+ "statTotal": "总计扫描",
+ "statDuration": "耗时",
+ "successMessage": "全部 {count} 个 {type} 更新成功!",
+ "failedItems": "失败项目 ({count})",
+ "close": "关闭",
+ "copyReport": "复制报告",
+ "downloadCsv": "下载 CSV",
+ "columnModelName": "模型名称",
+ "columnError": "错误"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "标签更新成功",
+ "updateFailed": "标签更新失败"
+ },
+ "validation": {
+ "maxLength": "标签不能超过30个字符",
+ "maxCount": "最多允许30个标签",
+ "duplicate": "该标签已存在"
+ }
+ },
+ "initialization": {
+ "title": "初始化",
+ "message": "正在准备你的工作空间...",
+ "status": "初始化中...",
+ "estimatingTime": "正在估算时间...",
+ "loras": {
+ "title": "初始化 LoRA 管理器",
+ "message": "正在扫描并构建 LoRA 缓存。这可能需要几分钟..."
+ },
+ "checkpoints": {
+ "title": "初始化 Checkpoint 管理器",
+ "message": "正在扫描并构建 Checkpoint 缓存。这可能需要几分钟..."
+ },
+ "embeddings": {
+ "title": "初始化 Embedding 管理器",
+ "message": "正在扫描并构建 Embedding 缓存。这可能需要几分钟..."
+ },
+ "recipes": {
+ "title": "初始化配方管理器",
+ "message": "正在加载和处理配方。这可能需要几分钟..."
+ },
+ "statistics": {
+ "title": "初始化统计",
+ "message": "正在处理模型数据以生成统计信息。这可能需要几分钟..."
+ },
+ "tips": {
+ "title": "技巧与提示",
+ "civitai": {
+ "title": "Civitai 集成",
+ "description": "连接你的 Civitai 账号:访问头像 → 设置 → API 密钥 → 添加密钥,然后粘贴到 LoRA 管理器设置中。",
+ "alt": "Civitai API 设置"
+ },
+ "download": {
+ "title": "便捷下载",
+ "description": "使用 Civitai URL 快速下载和安装新模型。",
+ "alt": "Civitai 下载"
+ },
+ "recipes": {
+ "title": "保存配方",
+ "description": "创建配方,保存你喜欢的模型组合,方便以后使用。",
+ "alt": "配方"
+ },
+ "filter": {
+ "title": "快速筛选",
+ "description": "通过头部筛选按钮按标签或基础模型类型筛选模型。",
+ "alt": "筛选模型"
+ },
+ "search": {
+ "title": "快速搜索",
+ "description": "按 Ctrl+F(Mac 上为 Cmd+F)可快速在当前视图内搜索。",
+ "alt": "快速搜索"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "发现 {count} 个重复组",
+ "showNotification": "显示重复项通知",
+ "deleteSelected": "删除已选",
+ "exitMode": "退出模式",
+ "help": {
+ "identicalHashes": "哈希相同表示模型文件完全一致,即使文件名或预览不同。",
+ "keepOne": "只保留一个版本(建议保留元数据/预览更好的),安全删除其他版本。"
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "已复制到剪贴板",
+ "copyFailed": "复制失败"
+ },
+ "lora": {
+ "syntaxCopied": "LoRA 语法已复制到剪贴板",
+ "syntaxCopiedNoTriggerWords": "LoRA 语法已复制到剪贴板(未找到触发词)",
+ "syntaxCopiedWithTriggerWords": "LoRA 语法和触发词已复制到剪贴板",
+ "syntaxCopiedWithTriggerWordGroups": "LoRA 语法和触发词组已复制到剪贴板"
+ },
+ "workflow": {
+ "noSupportedNodes": "工作流中未找到支持的目标节点",
+ "communicationFailed": "与 ComfyUI 通信失败",
+ "loraAdded": "LoRA 已追加到工作流",
+ "loraReplaced": "LoRA 已替换到工作流",
+ "loraFailedToSend": "发送 LoRA 到工作流失败",
+ "recipeAdded": "配方已追加到工作流",
+ "recipeReplaced": "配方已替换到工作流",
+ "recipeFailedToSend": "发送配方到工作流失败",
+ "noMatchingNodes": "当前工作流中没有兼容的节点",
+ "noTargetNodeSelected": "未选择目标节点",
+ "modelUpdated": "模型已更新到工作流",
+ "modelFailed": "更新模型节点失败",
+ "embeddingAdded": "Embedding 已追加到工作流",
+ "embeddingFailed": "添加 Embedding 失败",
+ "promptSent": "提示词已发送到工作流",
+ "promptFailed": "提示词发送失败"
+ },
+ "nodeSelector": {
+ "recipe": "配方",
+ "lora": "LoRA",
+ "embedding": "Embedding",
+ "prompt": "提示词",
+ "replace": "替换",
+ "append": "追加",
+ "selectTargetNode": "选择目标节点",
+ "sendToAll": "全部发送"
+ },
+ "exampleImages": {
+ "opened": "示例图片文件夹已打开",
+ "openingFolder": "正在打开示例图片文件夹",
+ "failedToOpen": "打开示例图片文件夹失败",
+ "copiedPath": "路径已复制到剪贴板:{{path}}",
+ "clipboardFallback": "路径:{{path}}",
+ "copiedUri": "链接已复制到剪贴板:{{uri}}",
+ "uriClipboardFallback": "链接:{{uri}}",
+ "setupRequired": "示例图片存储",
+ "setupDescription": "要添加自定义示例图片,您需要先设置下载位置。",
+ "setupUsage": "此路径用于存储下载的示例图片和自定义图片。",
+ "openSettings": "打开设置"
+ }
+ },
+ "help": {
+ "title": "帮助与教程",
+ "tabs": {
+ "gettingStarted": "新手入门",
+ "updateVlogs": "更新日志",
+ "documentation": "文档"
+ },
+ "gettingStarted": {
+ "title": "LoRA 管理器新手入门"
+ },
+ "updateVlogs": {
+ "title": "最新更新",
+ "watchOnYouTube": "在 YouTube 上观看",
+ "playlistTitle": "LoRA 管理器更新播放列表",
+ "playlistDescription": "观看所有更新视频,了解最新功能和改进。"
+ },
+ "documentation": {
+ "title": "文档",
+ "general": "通用",
+ "troubleshooting": "故障排查",
+ "modelManagement": "模型管理",
+ "recipes": "配方",
+ "settings": "设置与配置",
+ "extensions": "扩展",
+ "newBadge": "新"
+ }
+ },
+ "update": {
+ "title": "检查更新",
+ "notificationsTitle": "通知中心",
+ "tabs": {
+ "updates": "更新",
+ "messages": "消息"
+ },
+ "updateAvailable": "更新可用",
+ "noChangelogAvailable": "没有详细的更新日志可用。请查看 GitHub 以获取更多信息。",
+ "currentVersion": "当前版本",
+ "newVersion": "新版本",
+ "commit": "提交",
+ "viewOnGitHub": "在 GitHub 查看",
+ "updateNow": "立即更新",
+ "preparingUpdate": "正在准备更新...",
+ "changelog": "更新日志",
+ "checkingUpdates": "正在检查更新...",
+ "checkingMessage": "请稍候,正在检查最新版本。",
+ "showNotifications": "显示更新通知",
+ "latestBadge": "最新",
+ "updateProgress": {
+ "preparing": "正在准备更新...",
+ "installing": "正在安装更新...",
+ "completed": "更新已成功完成!",
+ "failed": "更新失败:{error}"
+ },
+ "status": {
+ "updating": "正在更新...",
+ "updated": "已更新!",
+ "updateFailed": "更新失败"
+ },
+ "completion": {
+ "successMessage": "已成功更新到 {version}!",
+ "restartMessage": "请重启 ComfyUI 或 LoRA 管理器以应用更新。",
+ "reloadMessage": "请确保刷新浏览器以加载最新的 LoRA 管理器和 ComfyUI。"
+ },
+ "nightly": {
+ "warning": "警告:Nightly 版本可能包含实验性功能,可能不稳定。",
+ "enable": "启用 Nightly 更新"
},
"banners": {
- "versionMismatch": {
- "title": "检测到应用更新",
- "content": "你的浏览器正在运行过时的 LoRA 管理器版本({storedVersion})。服务器已更新到版本 {currentVersion}。请刷新以确保正常使用。",
- "refreshNow": "立即刷新",
- "refreshingIn": "将在",
- "seconds": "秒后刷新"
- },
- "communitySupport": {
- "title": "LM 浏览器插件限时优惠 ⚡",
- "content": "来爱发电为Lora Manager项目发电,支持项目持续开发的同时,获取浏览器插件验证码,按季支付更优惠!支付宝/微信方便支付。感谢支持!🚀",
- "supportCta": "为LM发电",
- "learnMore": "浏览器插件教程"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "检测到缓存损坏"
- },
- "degraded": {
- "title": "检测到缓存问题"
- },
- "content": "{total} 个缓存条目中有 {invalid} 个无效({rate})。这可能导致模型丢失或错误。建议重建缓存。",
- "rebuildCache": "重建缓存",
- "dismiss": "忽略",
- "rebuilding": "正在重建缓存...",
- "rebuildFailed": "重建缓存失败:{error}",
- "retry": "重试"
- }
+ "recent": "最近的通知",
+ "empty": "暂无最近的横幅通知。",
+ "shown": "{time} 显示",
+ "dismissed": "{time} 关闭",
+ "active": "仍在显示"
}
+ },
+ "support": {
+ "title": "支持项目",
+ "message": "如果你觉得 LoRA 管理器有用,非常欢迎你的支持!🙌",
+ "feedback": {
+ "title": "反馈建议",
+ "description": "你的反馈有助于未来更新!欢迎分享你的想法:"
+ },
+ "links": {
+ "submitGithubIssue": "提交 GitHub 问题",
+ "joinDiscord": "加入 Discord",
+ "youtubeChannel": "YouTube 频道",
+ "civitaiProfile": "Civitai 个人资料",
+ "supportKofi": "支持 Ko-fi",
+ "supportPatreon": "支持 Patreon"
+ },
+ "sections": {
+ "followUpdates": "关注更新",
+ "buyMeCoffee": "请我喝杯咖啡",
+ "coffeeDescription": "如果你想直接支持我的工作:",
+ "becomePatron": "成为赞助人",
+ "patronDescription": "通过每月捐款支持持续开发:",
+ "wechatSupport": "微信支持",
+ "wechatDescription": "对于中国用户,你可以通过微信支持:",
+ "showWechatQR": "显示微信二维码",
+ "hideWechatQR": "隐藏微信二维码"
+ },
+ "footer": "感谢使用 LoRA 管理器!❤️",
+ "supporters": {
+ "title": "感谢所有支持者",
+ "subtitle": "感谢 {count} 位支持者让这个项目成为可能",
+ "specialThanks": "特别感谢",
+ "allSupporters": "所有支持者",
+ "totalCount": "共 {count} 位支持者"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "独立模式下无法与 ComfyUI 交互",
+ "failedWorkflowInfo": "获取工作流信息失败",
+ "pageInitFailed": "{pageType} 页面初始化失败,请刷新。",
+ "statisticsLoadFailed": "统计数据加载失败"
+ },
+ "loras": {
+ "copyOnlyForLoras": "仅 LoRA 支持复制语法",
+ "noLorasSelected": "未选中 LoRA",
+ "missingDataForLoras": "缺少 {count} 个 LoRA 的数据",
+ "noValidLorasToCopy": "没有可复制的有效 LoRA",
+ "sendOnlyForLoras": "仅 LoRA 支持发送到工作流",
+ "noValidLorasToSend": "没有可发送的有效 LoRA",
+ "downloadSuccessful": "LoRA 下载成功",
+ "allDownloadSuccessful": "全部 {count} 个 LoRA 下载成功",
+ "downloadPartialSuccess": "已下载 {completed}/{total} 个 LoRA",
+ "downloadPartialWithAccess": "已下载 {completed}/{total} 个 LoRA。{accessFailures} 个因访问限制失败。请检查设置中的 API 密钥或早期访问状态。",
+ "pleaseSelectVersion": "请选择版本",
+ "versionExists": "该版本已存在于你的库中",
+ "downloadCompleted": "下载成功完成",
+ "downloadSkippedByBaseModel": "由于基础模型 {baseModel} 已被排除,已跳过下载",
+ "autoOrganizeSuccess": "自动整理已成功完成,共 {count} 个 {type}",
+ "autoOrganizePartialSuccess": "自动整理完成:已移动 {success} 个,{failures} 个失败,共 {total} 个模型",
+ "autoOrganizeFailed": "自动整理失败:{error}",
+ "noModelsSelected": "未选中模型"
+ },
+ "recipes": {
+ "fetchFailed": "获取配方失败:{message}",
+ "reloadFailed": "重新加载 {modelType} 失败:{message}",
+ "loadFailed": "加载 {modelType} 失败:{message}",
+ "refreshComplete": "刷新完成",
+ "refreshFailed": "刷新配方失败:{message}",
+ "syncComplete": "同步完成",
+ "syncFailed": "同步配方失败:{message}",
+ "updateFailed": "更新配方失败:{error}",
+ "updateError": "更新配方出错:{message}",
+ "nameSaved": "配方“{name}”保存成功",
+ "nameUpdated": "配方名称更新成功",
+ "tagsUpdated": "配方标签更新成功",
+ "sourceUrlUpdated": "来源 URL 更新成功",
+ "promptUpdated": "提示词更新成功",
+ "negativePromptUpdated": "负面提示词更新成功",
+ "promptEditorHint": "按 Enter 保存,Shift+Enter 换行",
+ "noRecipeId": "无配方 ID",
+ "sendToWorkflowFailed": "发送配方到工作流失败:{message}",
+ "copyFailed": "复制配方语法出错:{message}",
+ "createError": "创建配方时出错:{message}",
+ "createFailed": "创建配方失败:{error}",
+ "createMissingData": "缺少创建配方所需的数据",
+ "created": "配方创建成功",
+ "noMissingLoras": "没有缺失的 LoRA 可下载",
+ "missingLorasInfoFailed": "获取缺失 LoRA 信息失败",
+ "preparingForDownloadFailed": "准备下载 LoRA 时出错",
+ "enterLoraName": "请输入 LoRA 名称或语法",
+ "reconnectedSuccessfully": "LoRA 重新连接成功",
+ "reconnectFailed": "LoRA 重新连接出错:{message}",
+ "noPromptToSend": "没有可发送的提示词",
+ "cannotSend": "无法发送配方:缺少配方 ID",
+ "sendFailed": "发送配方到工作流失败",
+ "sendError": "发送配方到工作流出错",
+ "missingCheckpointPath": "缺少检查点路径",
+ "missingCheckpointInfo": "缺少检查点信息",
+ "downloadCheckpointFailed": "下载检查点失败:{message}",
+ "cannotDelete": "无法删除配方:缺少配方 ID",
+ "deleteConfirmationError": "显示删除确认出错",
+ "deletedSuccessfully": "配方删除成功",
+ "deleteFailed": "删除配方出错:{message}",
+ "cannotShare": "无法分享配方:缺少配方 ID",
+ "preparingForSharing": "正在准备分享配方...",
+ "downloadStarted": "配方下载已开始",
+ "shareError": "分享配方出错:{message}",
+ "sharePreparationError": "准备分享配方出错",
+ "selectImageFirst": "请先选择图片",
+ "enterRecipeName": "请输入配方名称",
+ "processingError": "处理出错:{message}",
+ "folderBrowserError": "加载文件夹浏览器出错:{message}",
+ "recipeSaveFailed": "保存配方失败:{error}",
+ "recipeSaved": "配方保存成功",
+ "importFailed": "导入失败:{message}",
+ "folderTreeFailed": "加载文件夹树失败",
+ "folderTreeError": "加载文件夹树出错",
+ "batchImportFailed": "启动批量导入失败:{message}",
+ "batchImportCancelling": "正在取消批量导入...",
+ "batchImportCancelFailed": "取消批量导入失败:{message}",
+ "batchImportNoUrls": "请输入至少一个 URL 或文件路径",
+ "batchImportNoDirectory": "请输入目录路径",
+ "batchImportBrowseFailed": "浏览目录失败:{message}",
+ "batchImportDirectorySelected": "已选择目录:{path}",
+ "noRecipesSelected": "未选择任何配方",
+ "repairBulkComplete": "修复完成:{repaired} 个已修复,{skipped} 个已跳过(共 {total} 个)",
+ "repairBulkSkipped": "所选 {total} 个配方无需修复",
+ "repairBulkFailed": "修复所选配方失败:{message}",
+ "reimporting": "正在从源重新导入配方...",
+ "reimportSuccess": "配方已从源重新导入成功",
+ "reimportBulkComplete": "重新导入完成:{completed} 个已导入,{failed} 个失败(共 {total} 个)",
+ "reimportBulkFailed": "重新导入某些配方失败",
+ "noMissingLorasInSelection": "在选定的配方中未找到缺失的 LoRAs",
+ "noLoraRootConfigured": "未配置 LoRA 根目录。请在设置中设置默认的 LoRA 根目录。"
+ },
+ "models": {
+ "noModelsSelected": "未选中模型",
+ "deletedSuccessfully": "成功删除 {count} 个 {type}",
+ "deleteFailed": "错误:{error}",
+ "deleteFailedGeneral": "删除模型失败",
+ "selectedAdditional": "已选中 {count} 个额外 {type}",
+ "marqueeSelectionComplete": "框选已选中 {count} 个 {type}",
+ "refreshMetadataFailed": "刷新元数据失败",
+ "nameCannotBeEmpty": "模型名称不能为空",
+ "nameUpdatedSuccessfully": "模型名称更新成功",
+ "nameUpdateFailed": "模型名称更新失败",
+ "baseModelUpdated": "基础模型更新成功",
+ "baseModelUpdateFailed": "基础模型更新失败",
+ "baseModelNotSelected": "请选择基础模型",
+ "bulkBaseModelUpdating": "正在为 {count} 个模型更新基础模型...",
+ "bulkBaseModelUpdateSuccess": "成功为 {count} 个模型更新基础模型",
+ "bulkBaseModelUpdatePartial": "更新了 {success} 个模型,{failed} 个失败",
+ "bulkBaseModelUpdateFailed": "为选中模型更新基础模型失败",
+ "skipMetadataRefreshUpdating": "正在更新 {count} 个模型的元数据刷新标志...",
+ "skipMetadataRefreshSet": "已为 {count} 个模型跳过元数据刷新",
+ "skipMetadataRefreshCleared": "已为 {count} 个模型恢复元数据刷新",
+ "skipMetadataRefreshPartial": "已更新 {success} 个模型,{failed} 个失败",
+ "skipMetadataRefreshFailed": "未能更新所选模型的元数据刷新标志",
+ "bulkContentRatingUpdating": "正在为 {count} 个模型更新内容评级...",
+ "bulkContentRatingSet": "已将 {count} 个模型的内容评级设置为 {level}",
+ "bulkContentRatingPartial": "已将 {success} 个模型的内容评级设置为 {level},{failed} 个失败",
+ "bulkContentRatingFailed": "未能更新所选模型的内容评级",
+ "bulkFavoriteUpdating": "正在将 {count} 个模型添加到收藏...",
+ "bulkUnfavoriteUpdating": "正在将 {count} 个模型从收藏移除...",
+ "bulkFavoritePartialAdded": "已将 {success} 个模型添加到收藏,{failed} 个失败",
+ "bulkFavoritePartialRemoved": "已将 {success} 个模型从收藏移除,{failed} 个失败",
+ "bulkFavoriteFailed": "更新收藏状态失败",
+ "bulkUpdatesChecking": "正在检查所选 {type} 的更新...",
+ "bulkUpdatesSuccess": "{count} 个所选 {type} 有可用更新",
+ "bulkUpdatesNone": "所选 {type} 未发现更新",
+ "bulkUpdatesMissing": "所选 {type} 未关联 Civitai 更新",
+ "bulkUpdatesPartialMissing": "已跳过 {missing} 个未关联 Civitai 的所选 {type}",
+ "bulkUpdatesFailed": "检查所选 {type} 的更新失败:{message}",
+ "invalidCharactersRemoved": "文件名中的无效字符已移除",
+ "filenameCannotBeEmpty": "文件名不能为空",
+ "renameFailed": "重命名文件失败:{message}",
+ "moveFailed": "移动模型失败:{message}",
+ "pleaseSelectRoot": "请选择 {type} 根目录",
+ "nameTooLong": "模型名称最多100个字符",
+ "verificationAlreadyDone": "此组已验证过",
+ "verificationCompleteMismatch": "验证完成。{count} 个文件实际哈希不同。",
+ "verificationCompleteSuccess": "验证完成。所有文件均为重复项。",
+ "verificationFailed": "验证哈希失败:{message}",
+ "noTagsToAdd": "没有可添加的标签",
+ "bulkTagsUpdating": "正在更新 {count} 个模型的标签...",
+ "tagsAddedSuccessfully": "已成功为 {count} 个 {type} 添加 {tagCount} 个标签",
+ "tagsReplacedSuccessfully": "已成功为 {count} 个 {type} 替换为 {tagCount} 个标签",
+ "tagsAddFailed": "为 {count} 个模型添加标签失败",
+ "tagsReplaceFailed": "为 {count} 个模型替换标签失败",
+ "bulkTagsAddFailed": "批量添加标签失败",
+ "bulkTagsReplaceFailed": "批量替换标签失败"
+ },
+ "search": {
+ "atLeastOneOption": "至少选择一个搜索选项"
+ },
+ "settings": {
+ "loraRootsFailed": "加载 LoRA 根目录失败:{message}",
+ "checkpointRootsFailed": "加载 Checkpoint 根目录失败:{message}",
+ "unetRootsFailed": "加载 Diffusion Model 根目录失败:{message}",
+ "embeddingRootsFailed": "加载 Embedding 根目录失败:{message}",
+ "mappingsUpdated": "基础模型路径映射已更新({count} 条映射{plural})",
+ "mappingsCleared": "基础模型路径映射已清除",
+ "mappingSaveFailed": "保存基础模型映射失败:{message}",
+ "downloadTemplatesUpdated": "下载路径模板已更新",
+ "downloadTemplatesFailed": "保存下载路径模板失败:{message}",
+ "recipesPathUpdated": "配方存储路径已更新",
+ "recipesPathSaveFailed": "更新配方存储路径失败:{message}",
+ "settingsUpdated": "设置已更新:{setting}",
+ "compactModeToggled": "紧凑模式 {state}",
+ "settingSaveFailed": "保存设置失败:{message}",
+ "displayDensitySet": "显示密度已设置为 {density}",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "切换语言失败:{message}",
+ "cacheCleared": "缓存文件已成功清除。下次操作将重建缓存。",
+ "cacheClearFailed": "清除缓存失败:{error}",
+ "cacheClearError": "清除缓存出错:{message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "筛选已清除",
+ "noCustomFilterToClear": "没有自定义筛选可清除",
+ "noActiveFilters": "没有可保存的激活筛选"
+ },
+ "presets": {
+ "created": "预设 \"{name}\" 已创建",
+ "deleted": "预设 \"{name}\" 已删除",
+ "applied": "预设 \"{name}\" 已应用",
+ "overwritten": "预设 \"{name}\" 已覆盖",
+ "restored": "默认预设已恢复"
+ },
+ "error": {
+ "presetNameEmpty": "预设名称不能为空",
+ "presetNameTooLong": "预设名称不能超过 {max} 个字符",
+ "presetNameInvalidChars": "预设名称包含无效字符",
+ "presetNameExists": "已存在同名预设",
+ "maxPresetsReached": "最多允许 {max} 个预设。删除一个以添加更多。",
+ "presetNotFound": "预设未找到",
+ "invalidPreset": "无效的预设数据",
+ "deletePresetFailed": "删除预设失败",
+ "applyPresetFailed": "应用预设失败"
+ },
+ "downloads": {
+ "imagesCompleted": "示例图片{action}完成",
+ "imagesFailed": "示例图片{action}失败",
+ "loadError": "加载下载项出错:{message}",
+ "downloadError": "下载错误:{message}"
+ },
+ "import": {
+ "folderTreeFailed": "加载文件夹树失败",
+ "folderTreeError": "加载文件夹树出错",
+ "imagesImported": "示例图片导入成功",
+ "imagesPartial": "成功导入 {success} 张图片,{failed} 张失败",
+ "importFailed": "导入示例图片失败:{message}"
+ },
+ "triggerWords": {
+ "loadFailed": "无法加载训练词",
+ "tooLong": "触发词不能超过500个词",
+ "tooMany": "最多允许100个触发词",
+ "alreadyExists": "该触发词已存在",
+ "updateSuccess": "触发词更新成功",
+ "updateFailed": "触发词更新失败",
+ "copyFailed": "复制失败"
+ },
+ "virtual": {
+ "loadFailed": "加载项目失败",
+ "loadMoreFailed": "加载更多项目失败",
+ "loadPositionFailed": "加载当前位置项目失败"
+ },
+ "bulk": {
+ "unableToSelectAll": "无法全选项目"
+ },
+ "duplicates": {
+ "findFailed": "查找重复项失败:{message}",
+ "noDuplicatesFound": "未找到重复的 {type}",
+ "noItemsSelected": "未选中要删除的 {type}",
+ "deleteError": "错误:{message}",
+ "deleteSuccess": "成功删除 {count} 个 {type}",
+ "deleteFailed": "删除 {type} 失败:{message}"
+ },
+ "controls": {
+ "reloadFailed": "重新加载 {pageType} 失败:{message}",
+ "refreshFailed": "{action} {pageType} 失败:{message}",
+ "fetchMetadataFailed": "获取元数据失败:{message}",
+ "clearFilterFailed": "清除自定义筛选失败:{message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "内容评级已设置为 {level}",
+ "contentRatingFailed": "设置内容评级失败:{message}",
+ "relinkSuccess": "模型已成功重新关联到 Civitai",
+ "relinkFailed": "错误:{message}",
+ "fetchMetadataFirst": "请先从 CivitAI 获取元数据",
+ "noCivitaiInfo": "无 CivitAI 信息",
+ "missingHash": "模型哈希不可用"
+ },
+ "exampleImages": {
+ "pathUpdated": "示例图片路径更新成功",
+ "pathUpdateFailed": "更新示例图片路径失败:{message}",
+ "downloadInProgress": "下载已在进行中",
+ "enterLocationFirst": "请先输入下载位置",
+ "downloadStarted": "示例图片下载已开始",
+ "downloadStartFailed": "开始下载失败:{error}",
+ "downloadPaused": "下载已暂停",
+ "pauseFailed": "暂停下载失败:{error}",
+ "downloadResumed": "下载已恢复",
+ "resumeFailed": "恢复下载失败:{error}",
+ "downloadStopped": "下载已取消",
+ "stopFailed": "取消下载失败:{error}",
+ "deleted": "示例图片已删除",
+ "deleteFailed": "删除示例图片失败",
+ "setPreviewFailed": "设置预览图片失败"
+ },
+ "api": {
+ "fetchFailed": "获取 {type} 失败:{message}",
+ "reloadFailed": "重新加载 {type} 失败:{message}",
+ "deleteSuccess": "{type} 删除成功",
+ "deleteFailed": "删除 {type} 失败:{message}",
+ "excludeSuccess": "{type} 排除成功",
+ "excludeFailed": "排除 {type} 失败:{message}",
+ "restoreSuccess": "{type} 已成功恢复",
+ "restoreFailed": "恢复 {type} 失败:{message}",
+ "fileNameUpdated": "文件名更新成功",
+ "fileRenameFailed": "重命名文件失败:{error}",
+ "previewUpdated": "预览图片更新成功",
+ "previewUploadFailed": "上传预览图片失败",
+ "refreshComplete": "{action} 完成",
+ "refreshFailed": "{action} {type} 失败",
+ "metadataRefreshed": "元数据刷新成功",
+ "metadataRefreshFailed": "刷新元数据失败:{message}",
+ "metadataUpdateComplete": "元数据更新完成",
+ "operationCancelled": "操作已由用户取消",
+ "operationCancelledPartial": "操作已取消。已处理 {success} 个项目。",
+ "metadataFetchFailed": "获取元数据失败:{message}",
+ "bulkMetadataCompleteAll": "全部 {count} 个 {type} 元数据刷新成功",
+ "bulkMetadataCompletePartial": "已刷新 {success}/{total} 个 {type} 元数据",
+ "bulkMetadataCompleteNone": "所有 {type} 元数据刷新失败",
+ "bulkMetadataFailureDetails": "刷新失败:\n{failures}",
+ "bulkMetadataFailed": "刷新元数据失败:{message}",
+ "moveNotSupported": "不支持移动 {type}",
+ "alreadyInFolder": "{type} 已在选定文件夹中",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type} 移动成功",
+ "bulkMoveNotSupported": "不支持批量移动 {type}",
+ "allAlreadyInFolder": "所有选中的 {type} 已在目标文件夹中",
+ "bulkMovePartial": "已移动 {successCount} 个 {type},{failureCount} 个失败",
+ "bulkMoveFailures": "移动失败:\n{failures}",
+ "bulkMoveSuccess": "成功移动 {successCount} 个 {type}",
+ "exampleImagesDownloadSuccess": "示例图片下载成功!",
+ "exampleImagesDownloadFailed": "示例图片下载失败:{message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "已复制到剪贴板",
+ "downloadStarted": "下载已开始"
+ }
+ },
+ "doctor": {
+ "kicker": "系统诊断",
+ "title": "医生",
+ "buttonTitle": "运行诊断并尝试修复常见问题",
+ "loading": "正在检查当前环境...",
+ "footer": "如果修复后问题仍然存在,可以导出诊断包进一步排查。",
+ "summary": {
+ "idle": "检查设置、缓存健康状况和前后端 UI 版本是否一致。",
+ "ok": "当前环境未发现活动问题。",
+ "warning": "发现 {count} 个问题,大多数可以直接在这里处理。",
+ "error": "发现 {count} 个需要尽快处理的问题。"
+ },
+ "status": {
+ "ok": "健康",
+ "warning": "需要关注",
+ "error": "需要处理"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API 密钥"
+ },
+ "cache_health": {
+ "title": "模型缓存健康状态"
+ },
+ "filename_conflicts": {
+ "title": "文件名重复冲突"
+ },
+ "ui_version": {
+ "title": "UI 版本"
+ }
+ },
+ "actions": {
+ "runAgain": "重新检查",
+ "exportBundle": "导出诊断包",
+ "open-settings": "打开设置",
+ "open-settings-syntax-format": "切换为完整路径语法",
+ "repair-cache": "重建缓存",
+ "resolve-filename-conflicts": "解决冲突",
+ "reload-page": "刷新 UI"
+ },
+ "labels": {
+ "conflicts": "冲突详情",
+ "version": "版本信息"
+ },
+ "toast": {
+ "loadFailed": "加载诊断结果失败:{message}",
+ "repairSuccess": "缓存重建完成。",
+ "repairFailed": "缓存重建失败:{message}",
+ "exportSuccess": "诊断包已导出。",
+ "exportFailed": "导出诊断包失败:{message}",
+ "conflictsResolved": "已解决 {count} 个文件名冲突。",
+ "conflictsResolveFailed": "解决文件名冲突失败:{message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "解决文件名冲突",
+ "message": "通过在每个重复文件名后附加 4 位哈希值来重命名文件。",
+ "note": "此操作会重命名磁盘上的文件。如果使用 A1111 语法格式,现有工作流中的模型引用可能需要更新。",
+ "detail": "示例:filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "将重命名 {count} 个文件(共 {groups} 组重复)",
+ "confirm": "重命名文件",
+ "cancel": "取消"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "检测到应用更新",
+ "content": "你的浏览器正在运行过时的 LoRA 管理器版本({storedVersion})。服务器已更新到版本 {currentVersion}。请刷新以确保正常使用。",
+ "refreshNow": "立即刷新",
+ "refreshingIn": "将在",
+ "seconds": "秒后刷新"
+ },
+ "communitySupport": {
+ "title": "LM 浏览器插件限时优惠 ⚡",
+ "content": "来爱发电为Lora Manager项目发电,支持项目持续开发的同时,获取浏览器插件验证码,按季支付更优惠!支付宝/微信方便支付。感谢支持!🚀",
+ "supportCta": "为LM发电",
+ "learnMore": "浏览器插件教程"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "检测到缓存损坏"
+ },
+ "degraded": {
+ "title": "检测到缓存问题"
+ },
+ "content": "{total} 个缓存条目中有 {invalid} 个无效({rate})。这可能导致模型丢失或错误。建议重建缓存。",
+ "rebuildCache": "重建缓存",
+ "dismiss": "忽略",
+ "rebuilding": "正在重建缓存...",
+ "rebuildFailed": "重建缓存失败:{error}",
+ "retry": "重试"
+ }
+ }
}
diff --git a/locales/zh-TW.json b/locales/zh-TW.json
index 370b4cfd..aea3500e 100644
--- a/locales/zh-TW.json
+++ b/locales/zh-TW.json
@@ -1,2167 +1,2171 @@
{
- "common": {
- "cancel": "取消",
- "confirm": "確認",
- "actions": {
- "save": "儲存",
- "cancel": "取消",
- "confirm": "確認",
- "delete": "刪除",
- "move": "移動",
- "refresh": "重新整理",
- "back": "返回",
- "next": "下一步",
- "backToTop": "回到頂部",
- "settings": "設定",
- "help": "說明",
- "add": "新增",
- "close": "關閉",
- "menu": "選單",
- "remove": "移除",
- "change": "更換"
- },
- "status": {
- "loading": "載入中...",
- "cancelling": "取消中...",
- "unknown": "未知",
- "date": "日期",
- "version": "版本",
- "enabled": "已啟用",
- "disabled": "已停用"
- },
- "language": {
- "select": "語言",
- "select_help": "選擇您偏好的介面語言",
- "english": "English",
- "chinese_simplified": "中文(简体)",
- "chinese_traditional": "中文(繁体)",
- "russian": "Русский",
- "german": "Deutsch",
- "japanese": "日本語",
- "korean": "한국어",
- "french": "Français",
- "spanish": "Español",
- "Hebrew": "עברית"
- },
- "fileSize": {
- "zero": "0 位元組",
- "bytes": "位元組",
- "kb": "KB",
- "mb": "MB",
- "gb": "GB",
- "tb": "TB"
- }
+ "common": {
+ "cancel": "取消",
+ "confirm": "確認",
+ "actions": {
+ "save": "儲存",
+ "cancel": "取消",
+ "confirm": "確認",
+ "delete": "刪除",
+ "move": "移動",
+ "refresh": "重新整理",
+ "back": "返回",
+ "next": "下一步",
+ "backToTop": "回到頂部",
+ "settings": "設定",
+ "help": "說明",
+ "add": "新增",
+ "close": "關閉",
+ "menu": "選單",
+ "remove": "移除",
+ "change": "更換"
},
- "onboarding": {
- "languageSelection": {
- "title": "歡迎使用 LoRA 管理器",
- "continue": "繼續",
- "changeFailed": "切換語言失敗:{message}"
- },
- "tutorial": {
- "skipTutorial": "跳過教學",
- "back": "返回",
- "next": "下一步",
- "finish": "完成"
- },
- "steps": {
- "fetch": {
- "title": "取得模型 metadata",
- "content": "點擊 取得 按鈕,從 Civitai 下載模型 metadata 與預覽圖片。"
- },
- "download": {
- "title": "下載新模型",
- "content": "使用 下載 按鈕,直接從 Civitai 網址下載模型。"
- },
- "bulk": {
- "title": "批次操作",
- "content": "點擊此按鈕或按下 B 進入批次模式。可選取多個模型並執行批量操作。使用 Ctrl+A 選取所有可見模型。"
- },
- "searchOptions": {
- "title": "搜尋選項",
- "content": "點擊此按鈕可設定搜尋欄位:檔案名稱、模型名稱、標籤或創作者名稱。自訂搜尋範圍。"
- },
- "filter": {
- "title": "篩選模型",
- "content": "使用篩選器依基礎模型類型(SD1.5、SDXL、Flux 等)或特定標籤縮小模型範圍。"
- },
- "breadcrumb": {
- "title": "麵包屑導覽",
- "content": "麵包屑導覽顯示目前路徑,並可快速在資料夾間切換。點擊任一資料夾名稱即可直接跳轉。"
- },
- "modelCards": {
- "title": "模型卡片",
- "content": "單擊模型卡片可檢視詳細資訊並編輯 metadata。滑鼠懸停於可編輯欄位時會顯示鉛筆圖示。"
- },
- "contextMenu": {
- "title": "右鍵選單",
- "content": "右鍵點擊任一模型卡片可開啟更多操作選單。"
- }
- }
+ "status": {
+ "loading": "載入中...",
+ "cancelling": "取消中...",
+ "unknown": "未知",
+ "date": "日期",
+ "version": "版本",
+ "enabled": "已啟用",
+ "disabled": "已停用"
},
- "modelCard": {
- "actions": {
- "addToFavorites": "加入收藏",
- "removeFromFavorites": "移除收藏",
- "viewOnCivitai": "在 Civitai 查看",
- "notAvailableFromCivitai": "Civitai 不提供",
- "sendToWorkflow": "傳送到 ComfyUI(點擊:附加,Shift+點擊:取代)",
- "copyLoRASyntax": "複製 LoRA 語法",
- "checkpointNameCopied": "Checkpoint 名稱已複製",
- "toggleBlur": "切換模糊",
- "show": "顯示",
- "openExampleImages": "開啟範例圖片資料夾",
- "replacePreview": "更換預覽圖",
- "copyCheckpointName": "複製檢查點名稱",
- "copyEmbeddingName": "複製嵌入名稱",
- "embeddingNameCopied": "已複製 Embedding 語法",
- "sendCheckpointToWorkflow": "傳送到 ComfyUI",
- "sendEmbeddingToWorkflow": "傳送到 ComfyUI"
- },
- "nsfw": {
- "matureContent": "成熟內容",
- "xxxRated": "XXX 級內容",
- "xRated": "X 級內容",
- "rRated": "R 級內容"
- },
- "favorites": {
- "added": "已加入收藏",
- "removed": "已移除收藏",
- "updateFailed": "更新收藏狀態失敗"
- },
- "sendToWorkflow": {
- "checkpointNotImplemented": "傳送 checkpoint 到工作流 - 功能尚未實現",
- "missingPath": "無法確定此卡片的模型路徑"
- },
- "exampleImages": {
- "checkError": "檢查範例圖片時發生錯誤",
- "missingHash": "缺少模型雜湊資訊。",
- "noRemoteImagesAvailable": "此模型在 Civitai 上無遠端範例圖片"
- },
- "badges": {
- "update": "更新",
- "updateAvailable": "有可用更新",
- "skipRefresh": "元數據更新已跳過"
- },
- "usage": {
- "timesUsed": "使用次數"
- },
- "footer": {
- "versionCount": "{count} 個版本",
- "viewAllVersions": "檢視所有本地版本"
- }
+ "language": {
+ "select": "語言",
+ "select_help": "選擇您偏好的介面語言",
+ "english": "English",
+ "chinese_simplified": "中文(简体)",
+ "chinese_traditional": "中文(繁体)",
+ "russian": "Русский",
+ "german": "Deutsch",
+ "japanese": "日本語",
+ "korean": "한국어",
+ "french": "Français",
+ "spanish": "Español",
+ "Hebrew": "עברית"
},
- "globalContextMenu": {
- "downloadExampleImages": {
- "label": "下載範例圖片",
- "missingPath": "請先設定下載位置再下載範例圖片。",
- "unavailable": "範例圖片下載目前尚不可用。請在頁面載入完成後再試一次。"
- },
- "checkModelUpdates": {
- "label": "檢查更新",
- "loading": "正在檢查 {type} 更新...",
- "success": "找到 {count} 個 {type} 更新",
- "none": "所有 {type} 都是最新版本",
- "error": "檢查 {type} 更新失敗:{message}"
- },
- "cleanupExampleImages": {
- "label": "清理範例圖片資料夾",
- "success": "已將 {count} 個資料夾移至已刪除資料夾",
- "none": "沒有需要清理的範例圖片資料夾",
- "partial": "清理完成,有 {failures} 個資料夾略過",
- "error": "清理範例圖片資料夾失敗:{message}"
- },
- "fetchMissingLicenses": {
- "label": "重新整理授權中繼資料",
- "loading": "正在重新整理 {typePlural} 的授權中繼資料...",
- "success": "已更新 {count} 個 {typePlural} 的授權中繼資料",
- "none": "所有 {typePlural} 已具備授權中繼資料",
- "error": "重新整理 {typePlural} 授權中繼資料失敗:{message}"
- },
- "repairRecipes": {
- "label": "修復配方資料",
- "loading": "正在修復配方資料...",
- "success": "成功修復 {count} 個配方。",
- "cancelled": "修復已取消。已修復 {count} 個配方。",
- "error": "配方修復失敗:{message}"
- },
- "manageExcludedModels": {
- "label": "管理已排除的模型"
- },
- "groupByModel": {
- "label": "按模型分組"
- }
+ "fileSize": {
+ "zero": "0 位元組",
+ "bytes": "位元組",
+ "kb": "KB",
+ "mb": "MB",
+ "gb": "GB",
+ "tb": "TB"
+ }
+ },
+ "onboarding": {
+ "languageSelection": {
+ "title": "歡迎使用 LoRA 管理器",
+ "continue": "繼續",
+ "changeFailed": "切換語言失敗:{message}"
},
- "header": {
- "appTitle": "LoRA 管理器",
- "navigation": {
- "loras": "LoRA",
- "recipes": "配方",
- "checkpoints": "Checkpoint",
- "embeddings": "Embedding",
- "statistics": "統計"
- },
- "search": {
- "placeholder": "搜尋",
- "options": "搜尋選項",
- "searchIn": "搜尋範圍:",
- "notAvailable": "統計頁面無法搜尋",
- "filters": {
- "filename": "檔案名稱",
- "modelname": "模型名稱",
- "tags": "標籤",
- "creator": "創作者",
- "title": "配方標題",
- "loraName": "LoRA 檔案名稱",
- "loraModel": "LoRA 模型名稱",
- "prompt": "提示詞"
- }
- },
- "filter": {
- "title": "篩選模型",
- "presets": "預設",
- "savePreset": "將目前啟用的篩選器儲存為新預設。",
- "savePresetDisabledActive": "無法儲存:已有預設處於啟用狀態。修改篩選器後可儲存新預設",
- "savePresetDisabledNoFilters": "先選擇篩選器,然後儲存為預設",
- "savePresetPrompt": "輸入預設名稱:",
- "presetClickTooltip": "點擊套用預設 \"{name}\"",
- "presetDeleteTooltip": "刪除預設",
- "presetDeleteConfirm": "刪除預設 \"{name}\"?",
- "presetDeleteConfirmClick": "再次點擊確認",
- "presetOverwriteConfirm": "預設 \"{name}\" 已存在。是否覆蓋?",
- "presetNamePlaceholder": "預設名稱...",
- "baseModel": "基礎模型",
- "baseModelSearchPlaceholder": "搜尋基礎模型...",
- "modelTags": "標籤(前 20)",
- "modelTypes": "模型類型",
- "license": "授權",
- "noCreditRequired": "無需署名",
- "allowSellingGeneratedContent": "允許銷售",
- "allowSellingGeneratedContentTooltip": "允許出售生成的圖片",
- "noCreditRequiredTooltip": "使用模型時無需註明原作者",
- "noTags": "無標籤",
- "autoTags": "自動標籤",
- "noBaseModelMatches": "沒有基礎模型符合目前的搜尋。",
- "clearAll": "清除所有篩選",
- "any": "任一",
- "all": "全部",
- "tagLogicAny": "符合任一票籤 (或)",
- "tagLogicAll": "符合所有標籤 (與)"
- },
- "theme": {
- "toggle": "切換主題",
- "switchToLight": "切換至淺色主題",
- "switchToDark": "切換至深色主題",
- "switchToAuto": "自動主題",
- "presets": "主題預設",
- "default": "預設",
- "nord": "Nord",
- "midnight": "Midnight",
- "monokai": "Monokai",
- "dracula": "Dracula",
- "solarized": "Solarized",
- "mode": "模式",
- "light": "淺色",
- "dark": "深色",
- "auto": "自動"
- },
- "actions": {
- "checkUpdates": "檢查更新",
- "notifications": "通知",
- "support": "支援"
- }
+ "tutorial": {
+ "skipTutorial": "跳過教學",
+ "back": "返回",
+ "next": "下一步",
+ "finish": "完成"
},
- "settings": {
- "civitaiApiKey": "Civitai API 金鑰",
- "civitaiApiKeyPlaceholder": "請輸入您的 Civitai API 金鑰",
- "civitaiApiKeyHelp": "用於從 Civitai 下載模型時的身份驗證",
- "civitaiApiKeyConfigured": "已設定",
- "civitaiApiKeyNotConfigured": "未設定",
- "civitaiApiKeySet": "設定",
- "civitaiHost": {
- "label": "Civitai 站點",
- "help": "選擇使用「在 Civitai 中查看」時預設開啟的 Civitai 站點。",
- "options": {
- "com": "civitai.com(僅 SFW)",
- "red": "civitai.red(無限制)"
- }
- },
- "downloadBackend": {
- "label": "下載後端",
- "help": "選擇模型檔案的下載方式。Python 使用內建下載器。aria2 使用推薦的外部下載程序。",
- "options": {
- "python": "Python(內建)",
- "aria2": "aria2(推薦)"
- }
- },
- "aria2cPath": {
- "label": "aria2c 路徑",
- "help": "可選的 aria2c 可執行檔路徑。留空則使用系統 PATH 中的 aria2c。",
- "placeholder": "留空則使用 PATH 中的 aria2c"
- },
- "aria2HelpLink": "了解如何設定 aria2 下載後端",
- "civitaiHostBanner": {
- "title": "已提供 Civitai 站點偏好設定",
- "content": "Civitai 現在使用 civitai.com 提供 SFW 內容,使用 civitai.red 提供無限制內容。你可以在設定中變更預設開啟的站點。",
- "openSettings": "開啟設定"
- },
- "openSettingsFileLocation": {
- "label": "開啟設定資料夾",
- "tooltip": "開啟包含 settings.json 的資料夾",
- "success": "已開啟 settings.json 資料夾",
- "failed": "無法開啟 settings.json 資料夾",
- "copied": "設定路徑已複製到剪貼簿:{{path}}",
- "clipboardFallback": "設定路徑:{{path}}"
- },
- "sections": {
- "contentFiltering": "內容過濾",
- "downloads": "下載",
- "videoSettings": "影片設定",
- "layoutSettings": "版面設定",
- "licenseIcons": "許可協議圖標",
- "misc": "其他",
- "backup": "備份",
- "folderSettings": "預設根目錄",
- "recipeSettings": "配方",
- "extraFolderPaths": "額外資料夾路徑",
- "downloadPathTemplates": "下載路徑範本",
- "priorityTags": "優先標籤",
- "versionScope": "版本範圍",
- "exampleImages": "範例圖片",
- "autoOrganize": "自動整理",
- "metadata": "中繼資料",
- "proxySettings": "代理設定"
- },
- "nav": {
- "general": "通用",
- "interface": "介面",
- "library": "模型庫"
- },
- "search": {
- "placeholder": "搜尋設定...",
- "clear": "清除搜尋",
- "noResults": "未找到符合 \"{query}\" 的設定"
- },
- "storage": {
- "locationLabel": "可攜式模式",
- "locationHelp": "啟用可將 settings.json 保存在儲存庫中;停用則保存在使用者設定目錄。"
- },
- "contentFiltering": {
- "blurNsfwContent": "模糊 NSFW 內容",
- "blurNsfwContentHelp": "模糊成熟(NSFW)內容預覽圖片",
- "showOnlySfw": "僅顯示 SFW 結果",
- "showOnlySfwHelp": "瀏覽和搜尋時過濾所有 NSFW 內容",
- "matureBlurThreshold": "成人內容模糊閾值",
- "matureBlurThresholdHelp": "設定當啟用 NSFW 模糊時,從哪個評級級別開始模糊過濾。",
- "matureBlurThresholdOptions": {
- "pg13": "PG13 及以上",
- "r": "R 及以上(預設)",
- "x": "X 及以上",
- "xxx": "僅 XXX"
- }
- },
- "videoSettings": {
- "autoplayOnHover": "滑鼠懸停自動播放影片",
- "autoplayOnHoverHelp": "僅在滑鼠懸停時播放影片預覽"
- },
- "autoOrganizeExclusions": {
- "label": "自動整理排除項目",
- "placeholder": "範例: curated/*, */backups/*; *_temp.safetensors",
- "help": "跳過符合這些萬用字元模式的檔案。多個模式請用逗號或分號分隔。",
- "validation": {
- "noPatterns": "請輸入至少一個以逗號或分號分隔的模式。",
- "saveFailed": "無法儲存排除項目:{message}"
- }
- },
- "metadataRefreshSkipPaths": {
- "label": "中繼資料重新整理跳過路徑",
- "placeholder": "範例:temp, archived/old, test_models",
- "help": "批次重新整理中繼資料(「擷取所有中繼資料」)時跳過這些目錄路徑中的模型。輸入相對於模型根目錄的資料夾路徑,以逗號分隔。",
- "validation": {
- "noPaths": "請輸入至少一個路徑,以逗號分隔。",
- "saveFailed": "無法儲存跳過路徑:{message}"
- }
- },
- "backup": {
- "autoEnabled": "自動備份",
- "autoEnabledHelp": "每天建立一次本地快照,並依保留政策保留最新快照。",
- "retention": "保留數量",
- "retentionHelp": "在刪除舊快照之前,要保留多少自動快照。",
- "management": "備份管理",
- "managementHelp": "匯出目前的使用者狀態,或從備份封存中還原。",
- "scopeHelp": "備份你的設定、下載歷史與模型更新狀態。不包含模型檔案或可重建的快取。",
- "locationSummary": "目前備份位置",
- "openFolderButton": "開啟備份資料夾",
- "openFolderSuccess": "已開啟備份資料夾",
- "openFolderFailed": "無法開啟備份資料夾",
- "locationCopied": "備份路徑已複製到剪貼簿:{{path}}",
- "locationClipboardFallback": "備份路徑:{{path}}",
- "exportButton": "匯出備份",
- "exportSuccess": "備份匯出成功。",
- "exportFailed": "備份匯出失敗:{message}",
- "importButton": "匯入備份",
- "importConfirm": "要匯入此備份並覆寫本機使用者狀態嗎?",
- "importSuccess": "備份匯入成功。",
- "importFailed": "備份匯入失敗:{message}",
- "latestSnapshot": "最近快照",
- "latestAutoSnapshot": "最近自動快照",
- "snapshotCount": "已儲存快照",
- "noneAvailable": "目前還沒有快照"
- },
- "downloadSkipBaseModels": {
- "label": "跳過這些基礎模型的下載",
- "help": "適用於所有下載流程。這裡只能選擇受支援的基礎模型。",
- "searchPlaceholder": "篩選基礎模型...",
- "empty": "沒有符合目前搜尋條件的基礎模型。",
- "summary": {
- "none": "未選擇",
- "count": "已選擇 {count} 項"
- },
- "actions": {
- "edit": "編輯",
- "collapse": "收起",
- "clear": "清空"
- },
- "validation": {
- "saveFailed": "無法儲存已排除的基礎模型:{message}"
- }
- },
- "skipPreviouslyDownloadedModelVersions": {
- "label": "跳過已下載的模型版本",
- "help": "啟用後,如果下載歷史服務記錄顯示該版本已下載,LoRA Manager 將跳過下載該模型版本。適用於所有下載流程。"
- },
- "layoutSettings": {
- "groupByModel": "按模型分組",
- "groupByModelHelp": "啟用後,每個 Civitai 模型僅顯示最新版本的單張卡片,舊版本將被隱藏。",
- "displayDensity": "顯示密度",
- "displayDensityOptions": {
- "default": "預設",
- "medium": "中等",
- "compact": "緊湊"
- },
- "displayDensityHelp": "選擇每行顯示卡片數量:",
- "displayDensityDetails": {
- "default": "5(1080p)、6(2K)、8(4K)",
- "medium": "6(1080p)、7(2K)、9(4K)",
- "compact": "7(1080p)、8(2K)、10(4K)"
- },
- "displayDensityWarning": "警告:較高密度可能導致資源有限的系統效能下降。",
- "showFolderSidebar": "顯示資料夾側邊欄",
- "showFolderSidebarHelp": "在模型頁面啟用或停用資料夾導覽側邊欄。停用後,側邊欄與滑鼠懸停區域將保持隱藏。",
- "cardInfoDisplay": "卡片資訊顯示",
- "cardInfoDisplayOptions": {
- "always": "永遠顯示",
- "hover": "滑鼠懸停顯示"
- },
- "cardInfoDisplayHelp": "選擇何時顯示模型資訊與操作按鈕",
- "showVersionOnCard": "在卡片上顯示版本",
- "showVersionOnCardHelp": "在模型卡片上顯示或隱藏版本名稱",
- "modelCardFooterAction": "模型卡片按鈕操作",
- "modelCardFooterActionOptions": {
- "exampleImages": "開啟範例圖片",
- "replacePreview": "更換預覽圖"
- },
- "modelCardFooterActionHelp": "選擇右下角卡片按鈕的功能",
- "modelNameDisplay": "模型名稱顯示",
- "modelNameDisplayOptions": {
- "modelName": "模型名稱",
- "fileName": "檔案名稱"
- },
- "modelNameDisplayHelp": "選擇在模型卡片底部顯示的內容",
- "cardBlurAmount": "卡片疊加模糊強度",
- "cardBlurAmountHelp": "調整模型和配方卡片上頁首和頁尾疊加層的模糊強度(0 = 無模糊,20 = 最大模糊)。"
- },
- "folderSettings": {
- "activeLibrary": "使用中的資料庫",
- "activeLibraryHelp": "在已設定的資料庫之間切換以更新預設資料夾。變更選項會重新載入頁面。",
- "loadingLibraries": "正在載入資料庫...",
- "noLibraries": "尚未設定任何資料庫",
- "defaultLoraRoot": "LoRA 根目錄",
- "defaultLoraRootHelp": "設定下載、匯入和移動時的預設 LoRA 根目錄",
- "defaultCheckpointRoot": "Checkpoint 根目錄",
- "defaultCheckpointRootHelp": "設定下載、匯入和移動時的預設 Checkpoint 根目錄",
- "defaultUnetRoot": "Diffusion Model 根目錄",
- "defaultUnetRootHelp": "設定下載、匯入和移動時的預設 Diffusion Model (UNET) 根目錄",
- "defaultEmbeddingRoot": "Embedding 根目錄",
- "defaultEmbeddingRootHelp": "設定下載、匯入和移動時的預設 Embedding 根目錄",
- "recipesPath": "配方儲存路徑",
- "recipesPathHelp": "已儲存配方的可選自訂目錄。留空則使用第一個 LoRA 根目錄下的 recipes 資料夾。",
- "recipesPathPlaceholder": "/path/to/recipes",
- "recipesPathMigrating": "正在遷移配方儲存...",
- "noDefault": "未設定預設"
- },
- "extraFolderPaths": {
- "title": "額外資料夾路徑",
- "description": "LoRA Manager 專屬的額外模型根目錄。從 ComfyUI 標準資料夾之外的位置載入模型,特別適合管理大型模型庫,避免影響 ComfyUI 效能。",
- "restartRequired": "Requires restart to take effect",
- "modelTypes": {
- "lora": "LoRA 路徑",
- "checkpoint": "Checkpoint 路徑",
- "unet": "Diffusion 模型路徑",
- "embedding": "Embedding 路徑"
- },
- "pathPlaceholder": "/額外/模型/路徑",
- "saveSuccess": "額外資料夾路徑已更新,需要重啟才能生效。",
- "saveError": "更新額外資料夾路徑失敗:{message}",
- "validation": {
- "duplicatePath": "此路徑已設定"
- }
- },
- "priorityTags": {
- "title": "優先標籤",
- "description": "為每種模型類型自訂標籤的優先順序 (例如: character, concept, style(toon|toon_style))",
- "placeholder": "character, concept, style(toon|toon_style)",
- "helpLinkLabel": "開啟優先標籤說明",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "saveSuccess": "優先標籤已更新。",
- "saveError": "更新優先標籤失敗。",
- "loadingSuggestions": "正在載入建議...",
- "validation": {
- "missingClosingParen": "項目 {index} 缺少右括號。",
- "missingCanonical": "項目 {index} 必須包含正規標籤名稱。",
- "duplicateCanonical": "正規標籤 \"{tag}\" 出現多於一次。",
- "unknown": "優先標籤設定無效。"
- }
- },
- "downloadPathTemplates": {
- "title": "下載路徑範本",
- "help": "設定從 Civitai 下載時不同模型類型的資料夾結構。",
- "availablePlaceholders": "可用佔位符:",
- "templateOptions": {
- "flatStructure": "扁平結構",
- "byBaseModel": "依基礎模型",
- "byAuthor": "依作者",
- "byFirstTag": "依第一標籤",
- "baseModelFirstTag": "基礎模型 + 第一標籤",
- "baseModelAuthor": "基礎模型 + 作者",
- "authorFirstTag": "作者 + 第一標籤",
- "baseModelAuthorFirstTag": "基礎模型 + 作者 + 第一標籤",
- "customTemplate": "自訂範本"
- },
- "customTemplatePlaceholder": "輸入自訂範本(例如:{base_model}/{author}/{first_tag})",
- "modelTypes": {
- "lora": "LoRA",
- "checkpoint": "Checkpoint",
- "embedding": "Embedding"
- },
- "baseModelPathMappings": "基礎模型路徑對應",
- "baseModelPathMappingsHelp": "自訂特定基礎模型的資料夾名稱(例如:「Flux.1 D」→「flux」)",
- "addMapping": "新增對應",
- "selectBaseModel": "選擇基礎模型",
- "customPathPlaceholder": "自訂路徑(例如:flux)",
- "removeMapping": "移除對應",
- "validation": {
- "validFlat": "有效(扁平結構)",
- "invalidChars": "偵測到無效字元",
- "doubleSlashes": "不允許連續斜線",
- "leadingTrailingSlash": "不能以斜線開始或結束",
- "invalidPlaceholder": "無效佔位符:{placeholder}",
- "validTemplate": "範本有效"
- }
- },
- "exampleImages": {
- "downloadLocation": "下載位置",
- "downloadLocationPlaceholder": "輸入範例圖片的資料夾路徑",
- "downloadLocationHelp": "輸入從 Civitai 下載範例圖片要儲存的資料夾路徑",
- "autoDownload": "自動下載範例圖片",
- "autoDownloadHelp": "自動為沒有範例圖片的模型下載範例圖片(需設定下載位置)",
- "openMode": "開啟範例圖片動作",
- "openModeHelp": "選擇是在伺服器上開啟、複製對應的本機路徑,或啟動自訂 URI。",
- "openModeOptions": {
- "system": "在伺服器上開啟",
- "clipboard": "複製本機路徑",
- "uriTemplate": "開啟自訂 URI"
- },
- "localRoot": "本機範例圖片根目錄",
- "localRootHelp": "可選的本機或掛載根目錄,用於對應伺服器上的範例圖片目錄。若留白,則會重用伺服器路徑。",
- "localRootPlaceholder": "例如:/Volumes/ComfyUI/example_images",
- "uriTemplate": "開啟 URI 範本",
- "uriTemplateHelp": "使用自訂深層連結,例如檔案 URI 或 Shortcuts 連結。",
- "uriTemplatePlaceholder": "例如:shortcuts://run-shortcut?name=Open%20Finder&input=text&text={{encoded_local_path}}",
- "uriTemplatePlaceholders": "可用佔位符:{{local_path}}、{{encoded_local_path}}、{{relative_path}}、{{encoded_relative_path}}、{{file_uri}}、{{encoded_file_uri}}",
- "openModeWikiLink": "了解遠端開啟模式",
- "optimizeImages": "最佳化下載圖片",
- "optimizeImagesHelp": "最佳化範例圖片以減少檔案大小並提升載入速度(會保留原有的 metadata)",
- "download": "下載",
- "restartRequired": "需要重新啟動"
- },
- "versionGrouping": {
- "label": "更新標記策略",
- "help": "決定更新徽章是否僅在新版本與本地檔案共享相同基礎模型時顯示,或只要該模型有任何更新版本就顯示。",
- "options": {
- "sameBase": "依基礎模型匹配更新",
- "any": "顯示任何可用更新"
- }
- },
- "hideEarlyAccessUpdates": {
- "label": "隱藏搶先體驗更新",
- "help": "搶先體驗更新"
- },
- "licenseIcons": {
- "useNewStyle": "使用新版許可協議圖標",
- "useNewStyleHelp": "以彩色指示器顯示許可權限(新樣式),或僅顯示限制圖標(經典樣式)。與當前 CivitAI 設計保持一致。"
- },
- "misc": {
- "includeTriggerWords": "在 LoRA 語法中包含觸發詞",
- "includeTriggerWordsHelp": "複製 LoRA 語法到剪貼簿時包含訓練觸發詞",
- "loraSyntaxFormat": "LoRA 語法格式",
- "loraSyntaxFormatHelp": "LoRA 語法格式。完整路徑(Full)包含子資料夾路徑 (filename_v1.2 → filename_v1.2-ab3c",
- "impact": "將重新命名 {count} 個檔案(共 {groups} 組重複)",
- "confirm": "重新命名檔案",
- "cancel": "取消"
+ "metadataFetchSummary": {
+ "title": "元資料獲取摘要",
+ "statSuccess": "成功",
+ "statFailed": "失敗",
+ "statSkipped": "已跳過",
+ "statTotal": "總計掃描",
+ "statDuration": "耗時",
+ "successMessage": "全部 {count} 個 {type} 更新成功!",
+ "failedItems": "失敗項目 ({count})",
+ "close": "關閉",
+ "copyReport": "複製報告",
+ "downloadCsv": "下載 CSV",
+ "columnModelName": "模型名稱",
+ "columnError": "錯誤"
+ }
+ },
+ "modelTags": {
+ "messages": {
+ "updated": "標籤已更新",
+ "updateFailed": "標籤更新失敗"
+ },
+ "validation": {
+ "maxLength": "標籤不可超過 30 字元",
+ "maxCount": "最多可新增 30 個標籤",
+ "duplicate": "此標籤已存在"
+ }
+ },
+ "initialization": {
+ "title": "初始化",
+ "message": "正在準備您的工作區...",
+ "status": "初始化中...",
+ "estimatingTime": "正在估算時間...",
+ "loras": {
+ "title": "初始化 LoRA 管理器",
+ "message": "正在掃描並建立 LoRA 快取,可能需要幾分鐘..."
+ },
+ "checkpoints": {
+ "title": "初始化 Checkpoint 管理器",
+ "message": "正在掃描並建立 Checkpoint 快取,可能需要幾分鐘..."
+ },
+ "embeddings": {
+ "title": "初始化 Embedding 管理器",
+ "message": "正在掃描並建立 Embedding 快取,可能需要幾分鐘..."
+ },
+ "recipes": {
+ "title": "初始化配方管理器",
+ "message": "正在載入並處理配方,可能需要幾分鐘..."
+ },
+ "statistics": {
+ "title": "初始化統計",
+ "message": "正在處理模型資料以產生統計,可能需要幾分鐘..."
+ },
+ "tips": {
+ "title": "小技巧",
+ "civitai": {
+ "title": "Civitai 整合",
+ "description": "連結您的 Civitai 帳號:前往個人頭像 → 設定 → API 金鑰 → 新增 API 金鑰,然後貼到 LoRA 管理器設定中。",
+ "alt": "Civitai API 設定"
+ },
+ "download": {
+ "title": "快速下載",
+ "description": "使用 Civitai 網址即可快速下載並安裝新模型。",
+ "alt": "Civitai 下載"
+ },
+ "recipes": {
+ "title": "儲存配方",
+ "description": "建立配方,保存您喜愛的模型組合以便日後使用。",
+ "alt": "配方"
+ },
+ "filter": {
+ "title": "快速篩選",
+ "description": "可透過標籤或基礎模型類型,在標頭的篩選按鈕進行模型篩選。",
+ "alt": "篩選模型"
+ },
+ "search": {
+ "title": "快速搜尋",
+ "description": "按 Ctrl+F(Mac 為 Cmd+F)可在目前檢視中快速搜尋。",
+ "alt": "快速搜尋"
+ }
+ }
+ },
+ "duplicates": {
+ "found": "發現 {count} 組重複項",
+ "showNotification": "顯示重複項通知",
+ "deleteSelected": "刪除所選",
+ "exitMode": "離開模式",
+ "help": {
+ "identicalHashes": "相同雜湊值代表模型檔案完全一致,即使名稱或預覽不同。",
+ "keepOne": "僅保留一個版本(建議選擇 metadata 或預覽較佳者),安全刪除其他版本。"
+ }
+ },
+ "uiHelpers": {
+ "clipboard": {
+ "copied": "已複製到剪貼簿",
+ "copyFailed": "複製失敗"
+ },
+ "lora": {
+ "syntaxCopied": "LoRA 語法已複製到剪貼簿",
+ "syntaxCopiedNoTriggerWords": "LoRA 語法已複製到剪貼簿(未找到觸發詞)",
+ "syntaxCopiedWithTriggerWords": "LoRA 語法(含觸發詞)已複製到剪貼簿",
+ "syntaxCopiedWithTriggerWordGroups": "LoRA 語法(含觸發詞群組)已複製到剪貼簿"
+ },
+ "workflow": {
+ "noSupportedNodes": "工作流中未找到支援的目標節點",
+ "communicationFailed": "與 ComfyUI 通訊失敗",
+ "loraAdded": "LoRA 已附加到工作流",
+ "loraReplaced": "LoRA 已取代於工作流",
+ "loraFailedToSend": "傳送 LoRA 到工作流失敗",
+ "recipeAdded": "配方已附加到工作流",
+ "recipeReplaced": "配方已取代於工作流",
+ "recipeFailedToSend": "傳送配方到工作流失敗",
+ "noMatchingNodes": "目前工作流程中沒有相容的節點",
+ "noTargetNodeSelected": "未選擇目標節點",
+ "modelUpdated": "模型已更新到工作流",
+ "modelFailed": "更新模型節點失敗",
+ "embeddingAdded": "Embedding 已附加到工作流",
+ "embeddingFailed": "傳送 Embedding 到工作流失敗",
+ "promptSent": "提示詞已發送到工作流",
+ "promptFailed": "提示詞發送失敗"
+ },
+ "nodeSelector": {
+ "recipe": "配方",
+ "lora": "LoRA",
+ "embedding": "Embedding",
+ "prompt": "提示詞",
+ "replace": "取代",
+ "append": "附加",
+ "selectTargetNode": "選擇目標節點",
+ "sendToAll": "全部傳送"
+ },
+ "exampleImages": {
+ "opened": "範例圖片資料夾已開啟",
+ "openingFolder": "正在開啟範例圖片資料夾",
+ "failedToOpen": "開啟範例圖片資料夾失敗",
+ "copiedPath": "路徑已複製到剪貼簿:{{path}}",
+ "clipboardFallback": "路徑:{{path}}",
+ "copiedUri": "連結已複製到剪貼簿:{{uri}}",
+ "uriClipboardFallback": "連結:{{uri}}",
+ "setupRequired": "範例圖片儲存",
+ "setupDescription": "要新增自訂範例圖片,您需要先設定下載位置。",
+ "setupUsage": "此路徑用於儲存下載的範例圖片和自訂圖片。",
+ "openSettings": "開啟設定"
+ }
+ },
+ "help": {
+ "title": "說明與教學",
+ "tabs": {
+ "gettingStarted": "快速開始",
+ "updateVlogs": "更新影片",
+ "documentation": "文件"
+ },
+ "gettingStarted": {
+ "title": "LoRA 管理器快速開始"
+ },
+ "updateVlogs": {
+ "title": "最新更新",
+ "watchOnYouTube": "在 YouTube 觀看",
+ "playlistTitle": "LoRA 管理器更新影片清單",
+ "playlistDescription": "觀看所有展示最新功能與改進的更新影片。"
+ },
+ "documentation": {
+ "title": "文件",
+ "general": "一般",
+ "troubleshooting": "疑難排解",
+ "modelManagement": "模型管理",
+ "recipes": "配方",
+ "settings": "設定與配置",
+ "extensions": "擴充功能",
+ "newBadge": "新"
+ }
+ },
+ "update": {
+ "title": "檢查更新",
+ "notificationsTitle": "通知中心",
+ "tabs": {
+ "updates": "更新",
+ "messages": "訊息"
+ },
+ "updateAvailable": "有新版本可用",
+ "noChangelogAvailable": "無詳細更新日誌。請至 GitHub 查看更多資訊。",
+ "currentVersion": "目前版本",
+ "newVersion": "新版本",
+ "commit": "提交",
+ "viewOnGitHub": "在 GitHub 查看",
+ "updateNow": "立即更新",
+ "preparingUpdate": "正在準備更新...",
+ "changelog": "更新日誌",
+ "checkingUpdates": "正在檢查更新...",
+ "checkingMessage": "請稍候,正在檢查最新版本。",
+ "showNotifications": "顯示更新通知",
+ "latestBadge": "最新",
+ "updateProgress": {
+ "preparing": "正在準備更新...",
+ "installing": "正在安裝更新...",
+ "completed": "更新成功完成!",
+ "failed": "更新失敗:{error}"
+ },
+ "status": {
+ "updating": "更新中...",
+ "updated": "已更新!",
+ "updateFailed": "更新失敗"
+ },
+ "completion": {
+ "successMessage": "已成功更新至 {version}!",
+ "restartMessage": "請重新啟動 ComfyUI 或 LoRA 管理器以套用更新。",
+ "reloadMessage": "請重新載入瀏覽器以確保 LoRA 管理器與 ComfyUI 都已更新。"
+ },
+ "nightly": {
+ "warning": "警告:Nightly 版本可能包含實驗性功能且可能不穩定。",
+ "enable": "啟用 Nightly 更新"
},
"banners": {
- "versionMismatch": {
- "title": "偵測到應用程式更新",
- "content": "您的瀏覽器正在執行舊版本的 LoRA 管理器({storedVersion})。伺服器已更新至版本 {currentVersion}。請重新整理以確保正常運作。",
- "refreshNow": "立即重新整理",
- "refreshingIn": "將於",
- "seconds": "秒後重新整理"
- },
- "communitySupport": {
- "title": "Keep LoRA Manager Thriving with Your Support ❤️",
- "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
- "supportCta": "Support on Ko-fi",
- "learnMore": "LM Civitai Extension Tutorial"
- },
- "cacheHealth": {
- "corrupted": {
- "title": "檢測到快取損壞"
- },
- "degraded": {
- "title": "檢測到快取問題"
- },
- "content": "{total} 個快取項目中有 {invalid} 個無效({rate})。這可能會導致模型遺失或錯誤。建議重建快取。",
- "rebuildCache": "重建快取",
- "dismiss": "關閉",
- "rebuilding": "重建快取中...",
- "rebuildFailed": "重建快取失敗:{error}",
- "retry": "重試"
- }
+ "recent": "最新通知",
+ "empty": "目前沒有最近的橫幅通知。",
+ "shown": "{time} 顯示",
+ "dismissed": "{time} 關閉",
+ "active": "仍在顯示"
}
+ },
+ "support": {
+ "title": "支持本專案",
+ "message": "如果您覺得 LoRA 管理器有幫助,歡迎支持!🙌",
+ "feedback": {
+ "title": "提供回饋",
+ "description": "您的回饋有助於未來更新!歡迎分享想法:"
+ },
+ "links": {
+ "submitGithubIssue": "提交 GitHub 問題",
+ "joinDiscord": "加入 Discord",
+ "youtubeChannel": "YouTube 頻道",
+ "civitaiProfile": "Civitai 個人檔案",
+ "supportKofi": "在 Ko-fi 支持",
+ "supportPatreon": "在 Patreon 支持"
+ },
+ "sections": {
+ "followUpdates": "追蹤最新消息",
+ "buyMeCoffee": "請我喝咖啡",
+ "coffeeDescription": "如果您想直接支持我的工作:",
+ "becomePatron": "成為贊助者",
+ "patronDescription": "每月支持持續開發:",
+ "wechatSupport": "微信支持",
+ "wechatDescription": "中國用戶可透過微信支持:",
+ "showWechatQR": "顯示微信二維碼",
+ "hideWechatQR": "隱藏微信二維碼"
+ },
+ "footer": "感謝您使用 LoRA 管理器!❤️",
+ "supporters": {
+ "title": "感謝所有支持者",
+ "subtitle": "感謝 {count} 位支持者讓這個專案成為可能",
+ "specialThanks": "特別感謝",
+ "allSupporters": "所有支持者",
+ "totalCount": "共 {count} 位支持者"
+ }
+ },
+ "toast": {
+ "general": {
+ "cannotInteractStandalone": "無法在獨立模式下與 ComfyUI 互動",
+ "failedWorkflowInfo": "無法獲取工作流程資訊",
+ "pageInitFailed": "無法初始化 {pageType} 頁面。請重新載入。",
+ "statisticsLoadFailed": "無法載入統計數據"
+ },
+ "loras": {
+ "copyOnlyForLoras": "僅對 LoRA 可用的複製語法",
+ "noLorasSelected": "未選擇任何 LoRA",
+ "missingDataForLoras": "缺少 {count} 個 LoRA 的數據",
+ "noValidLorasToCopy": "沒有有效的 LoRA 可供複製",
+ "sendOnlyForLoras": "僅對 LoRA 可用的發送到工作流程",
+ "noValidLorasToSend": "沒有有效的 LoRA 可供發送",
+ "downloadSuccessful": "LoRA 下載成功",
+ "allDownloadSuccessful": "所有 {count} 個 LoRA 下載成功",
+ "downloadPartialSuccess": "已下載 {completed} 個 LoRA,共 {total} 個",
+ "downloadPartialWithAccess": "已下載 {completed} 個 LoRA,共 {total} 個。{accessFailures} 個因訪問限制而失敗。請檢查您的 API 密鑰或提前訪問狀態。",
+ "pleaseSelectVersion": "請選擇一個版本",
+ "versionExists": "此版本已存在於您的庫中",
+ "downloadCompleted": "下載成功完成",
+ "downloadSkippedByBaseModel": "由於基礎模型 {baseModel} 已被排除,已跳過下載",
+ "autoOrganizeSuccess": "自動整理已成功完成,共 {count} 個 {type} 已整理",
+ "autoOrganizePartialSuccess": "自動整理完成:已移動 {success} 個,{failures} 個失敗,共 {total} 個模型",
+ "autoOrganizeFailed": "自動整理失敗:{error}",
+ "noModelsSelected": "未選擇任何模型"
+ },
+ "recipes": {
+ "fetchFailed": "取得配方失敗:{message}",
+ "reloadFailed": "重新載入 {modelType} 失敗:{message}",
+ "loadFailed": "載入 {modelType} 失敗:{message}",
+ "refreshComplete": "刷新完成",
+ "refreshFailed": "刷新配方失敗:{message}",
+ "syncComplete": "同步完成",
+ "syncFailed": "同步配方失敗:{message}",
+ "updateFailed": "更新配方失敗:{error}",
+ "updateError": "更新配方錯誤:{message}",
+ "nameSaved": "配方「{name}」已成功儲存",
+ "nameUpdated": "配方名稱已更新",
+ "tagsUpdated": "配方標籤已更新",
+ "sourceUrlUpdated": "來源網址已更新",
+ "promptUpdated": "提示詞更新成功",
+ "negativePromptUpdated": "負面提示詞更新成功",
+ "promptEditorHint": "按 Enter 儲存,Shift+Enter 換行",
+ "noRecipeId": "無配方 ID",
+ "sendToWorkflowFailed": "傳送配方到工作流失敗:{message}",
+ "copyFailed": "複製配方語法錯誤:{message}",
+ "createError": "建立配方時發生錯誤:{message}",
+ "createFailed": "建立配方失敗:{error}",
+ "createMissingData": "缺少建立配方所需的資料",
+ "created": "配方建立成功",
+ "noMissingLoras": "無缺少的 LoRA 可下載",
+ "missingLorasInfoFailed": "取得缺少 LoRA 資訊失敗",
+ "preparingForDownloadFailed": "準備下載 LoRA 時發生錯誤",
+ "enterLoraName": "請輸入 LoRA 名稱或語法",
+ "reconnectedSuccessfully": "LoRA 重新連結成功",
+ "reconnectFailed": "LoRA 重新連結錯誤:{message}",
+ "noPromptToSend": "沒有可發送的提示詞",
+ "cannotSend": "無法傳送配方:缺少配方 ID",
+ "sendFailed": "傳送配方到工作流失敗",
+ "sendError": "傳送配方到工作流錯誤",
+ "missingCheckpointPath": "缺少檢查點路徑",
+ "missingCheckpointInfo": "缺少檢查點資訊",
+ "downloadCheckpointFailed": "下載檢查點失敗:{message}",
+ "cannotDelete": "無法刪除配方:缺少配方 ID",
+ "deleteConfirmationError": "顯示刪除確認時發生錯誤",
+ "deletedSuccessfully": "配方已成功刪除",
+ "deleteFailed": "刪除配方錯誤:{message}",
+ "cannotShare": "無法分享配方:缺少配方 ID",
+ "preparingForSharing": "正在準備分享配方...",
+ "downloadStarted": "配方下載已開始",
+ "shareError": "分享配方錯誤:{message}",
+ "sharePreparationError": "準備分享配方時發生錯誤",
+ "selectImageFirst": "請先選擇圖片",
+ "enterRecipeName": "請輸入配方名稱",
+ "processingError": "處理錯誤:{message}",
+ "folderBrowserError": "載入資料夾瀏覽器錯誤:{message}",
+ "recipeSaveFailed": "儲存配方失敗:{error}",
+ "recipeSaved": "配方儲存成功",
+ "importFailed": "匯入失敗:{message}",
+ "folderTreeFailed": "載入資料夾樹狀結構失敗",
+ "folderTreeError": "載入資料夾樹狀結構錯誤",
+ "batchImportFailed": "啟動批量匯入失敗:{message}",
+ "batchImportCancelling": "正在取消批量匯入...",
+ "batchImportCancelFailed": "取消批量匯入失敗:{message}",
+ "batchImportNoUrls": "請輸入至少一個 URL 或檔案路徑",
+ "batchImportNoDirectory": "請輸入目錄路徑",
+ "batchImportBrowseFailed": "瀏覽目錄失敗:{message}",
+ "batchImportDirectorySelected": "已選擇目錄:{path}",
+ "noRecipesSelected": "未選取任何食譜",
+ "repairBulkComplete": "修復完成:{repaired} 個已修復,{skipped} 個已跳過(共 {total} 個)",
+ "repairBulkSkipped": "所選 {total} 個配方無需修復",
+ "repairBulkFailed": "修復所選配方失敗:{message}",
+ "reimporting": "正在從來源重新匯入配方...",
+ "reimportSuccess": "配方已從來源重新匯入成功",
+ "reimportBulkComplete": "重新匯入完成:{completed} 個已匯入,{failed} 個失敗(共 {total} 個)",
+ "reimportBulkFailed": "重新匯入某些配方失敗",
+ "noMissingLorasInSelection": "在選取的食譜中未找到缺失的 LoRAs",
+ "noLoraRootConfigured": "未配置 LoRA 根目錄。請在設定中設定預設的 LoRA 根目錄。"
+ },
+ "models": {
+ "noModelsSelected": "未選擇模型",
+ "deletedSuccessfully": "成功刪除 {count} 個 {type}",
+ "deleteFailed": "錯誤:{error}",
+ "deleteFailedGeneral": "刪除模型失敗",
+ "selectedAdditional": "已選擇 {count} 個額外 {type}",
+ "marqueeSelectionComplete": "框選已選擇 {count} 個 {type}",
+ "refreshMetadataFailed": "刷新 metadata 失敗",
+ "nameCannotBeEmpty": "模型名稱不可為空",
+ "nameUpdatedSuccessfully": "模型名稱已成功更新",
+ "nameUpdateFailed": "更新模型名稱失敗",
+ "baseModelUpdated": "基礎模型已成功更新",
+ "baseModelUpdateFailed": "更新基礎模型失敗",
+ "baseModelNotSelected": "請選擇基礎模型",
+ "bulkBaseModelUpdating": "正在為 {count} 個模型更新基礎模型...",
+ "bulkBaseModelUpdateSuccess": "已成功為 {count} 個模型更新基礎模型",
+ "bulkBaseModelUpdatePartial": "已更新 {success} 個模型,{failed} 個模型失敗",
+ "bulkBaseModelUpdateFailed": "更新所選模型的基礎模型失敗",
+ "skipMetadataRefreshUpdating": "正在更新 {count} 個模型的元數據更新標記...",
+ "skipMetadataRefreshSet": "已為 {count} 個模型跳過元數據更新",
+ "skipMetadataRefreshCleared": "已為 {count} 個模型恢復元數據更新",
+ "skipMetadataRefreshPartial": "已更新 {success} 個模型,{failed} 個失敗",
+ "skipMetadataRefreshFailed": "無法更新所選模型的元數據更新標記",
+ "bulkContentRatingUpdating": "正在為 {count} 個模型更新內容分級...",
+ "bulkContentRatingSet": "已將 {count} 個模型的內容分級設定為 {level}",
+ "bulkContentRatingPartial": "已將 {success} 個模型的內容分級設定為 {level},{failed} 個失敗",
+ "bulkContentRatingFailed": "無法更新所選模型的內容分級",
+ "bulkFavoriteUpdating": "正在將 {count} 個模型加入收藏...",
+ "bulkUnfavoriteUpdating": "正在將 {count} 個模型從收藏移除...",
+ "bulkFavoritePartialAdded": "已將 {success} 個模型加入收藏,{failed} 個失敗",
+ "bulkFavoritePartialRemoved": "已將 {success} 個模型從收藏移除,{failed} 個失敗",
+ "bulkFavoriteFailed": "更新收藏狀態失敗",
+ "bulkUpdatesChecking": "正在檢查所選 {type} 的更新...",
+ "bulkUpdatesSuccess": "{count} 個所選 {type} 有可用更新",
+ "bulkUpdatesNone": "所選 {type} 未找到更新",
+ "bulkUpdatesMissing": "所選 {type} 未連結 Civitai 更新",
+ "bulkUpdatesPartialMissing": "已略過 {missing} 個未連結 Civitai 的所選 {type}",
+ "bulkUpdatesFailed": "檢查所選 {type} 更新失敗:{message}",
+ "invalidCharactersRemoved": "已移除檔名中的無效字元",
+ "filenameCannotBeEmpty": "檔案名稱不可為空",
+ "renameFailed": "重新命名檔案失敗:{message}",
+ "moveFailed": "移動模型失敗:{message}",
+ "pleaseSelectRoot": "請選擇 {type} 根目錄",
+ "nameTooLong": "模型名稱限 100 字元以內",
+ "verificationAlreadyDone": "此群組已驗證過",
+ "verificationCompleteMismatch": "驗證完成。{count} 個檔案的實際雜湊不同。",
+ "verificationCompleteSuccess": "驗證完成。所有檔案均確認為重複項。",
+ "verificationFailed": "驗證雜湊失敗:{message}",
+ "noTagsToAdd": "沒有可新增的標籤",
+ "bulkTagsUpdating": "正在更新 {count} 個模型的標籤...",
+ "tagsAddedSuccessfully": "已成功將 {tagCount} 個標籤新增到 {count} 個 {type}",
+ "tagsReplacedSuccessfully": "已成功以 {tagCount} 個標籤取代 {count} 個 {type} 的標籤",
+ "tagsAddFailed": "新增標籤到 {count} 個模型失敗",
+ "tagsReplaceFailed": "取代 {count} 個模型的標籤失敗",
+ "bulkTagsAddFailed": "批量新增標籤到模型失敗",
+ "bulkTagsReplaceFailed": "批量取代模型標籤失敗"
+ },
+ "search": {
+ "atLeastOneOption": "至少需選擇一個搜尋選項"
+ },
+ "settings": {
+ "loraRootsFailed": "載入 LoRA 根目錄失敗:{message}",
+ "checkpointRootsFailed": "載入 checkpoint 根目錄失敗:{message}",
+ "unetRootsFailed": "載入 Diffusion Model 根目錄失敗:{message}",
+ "embeddingRootsFailed": "載入 embedding 根目錄失敗:{message}",
+ "mappingsUpdated": "基礎模型路徑對應已更新({count} 個對應)",
+ "mappingsCleared": "基礎模型路徑對應已清除",
+ "mappingSaveFailed": "儲存基礎模型對應失敗:{message}",
+ "downloadTemplatesUpdated": "下載路徑範本已更新",
+ "downloadTemplatesFailed": "儲存下載路徑範本失敗:{message}",
+ "recipesPathUpdated": "配方儲存路徑已更新",
+ "recipesPathSaveFailed": "更新配方儲存路徑失敗:{message}",
+ "settingsUpdated": "設定已更新:{setting}",
+ "compactModeToggled": "緊湊模式已{state}",
+ "settingSaveFailed": "儲存設定失敗:{message}",
+ "displayDensitySet": "顯示密度已設為 {density}",
+ "libraryLoadFailed": "Failed to load libraries: {message}",
+ "libraryActivateFailed": "Failed to activate library: {message}",
+ "languageChangeFailed": "切換語言失敗:{message}",
+ "cacheCleared": "快取檔案已成功清除。快取將於下次操作時重建。",
+ "cacheClearFailed": "清除快取失敗:{error}",
+ "cacheClearError": "清除快取時發生錯誤:{message}"
+ },
+ "filters": {
+ "applied": "{message}",
+ "cleared": "篩選已清除",
+ "noCustomFilterToClear": "無自訂篩選可清除",
+ "noActiveFilters": "沒有可儲存的啟用篩選"
+ },
+ "presets": {
+ "created": "預設 \"{name}\" 已建立",
+ "deleted": "預設 \"{name}\" 已刪除",
+ "applied": "預設 \"{name}\" 已套用",
+ "overwritten": "預設 \"{name}\" 已覆蓋",
+ "restored": "預設設定已恢復"
+ },
+ "error": {
+ "presetNameEmpty": "預設名稱不能為空",
+ "presetNameTooLong": "預設名稱不能超過 {max} 個字元",
+ "presetNameInvalidChars": "預設名稱包含無效字元",
+ "presetNameExists": "已存在同名預設",
+ "maxPresetsReached": "最多允許 {max} 個預設。刪除一個以新增更多。",
+ "presetNotFound": "預設未找到",
+ "invalidPreset": "無效的預設資料",
+ "deletePresetFailed": "刪除預設失敗",
+ "applyPresetFailed": "套用預設失敗"
+ },
+ "downloads": {
+ "imagesCompleted": "範例圖片{action}完成",
+ "imagesFailed": "範例圖片{action}失敗",
+ "loadError": "載入下載時發生錯誤:{message}",
+ "downloadError": "下載錯誤:{message}"
+ },
+ "import": {
+ "folderTreeFailed": "載入資料夾樹狀結構失敗",
+ "folderTreeError": "載入資料夾樹狀結構錯誤",
+ "imagesImported": "範例圖片匯入成功",
+ "imagesPartial": "成功匯入 {success} 張圖片,{failed} 張失敗",
+ "importFailed": "匯入範例圖片失敗:{message}"
+ },
+ "triggerWords": {
+ "loadFailed": "無法載入訓練詞",
+ "tooLong": "觸發詞不可超過 500 個字",
+ "tooMany": "最多允許 100 個觸發詞",
+ "alreadyExists": "此觸發詞已存在",
+ "updateSuccess": "觸發詞已更新",
+ "updateFailed": "更新觸發詞失敗",
+ "copyFailed": "複製失敗"
+ },
+ "virtual": {
+ "loadFailed": "載入項目失敗",
+ "loadMoreFailed": "載入更多項目失敗",
+ "loadPositionFailed": "載入此位置項目失敗"
+ },
+ "bulk": {
+ "unableToSelectAll": "無法選取所有項目"
+ },
+ "duplicates": {
+ "findFailed": "尋找重複項失敗:{message}",
+ "noDuplicatesFound": "未找到重複的 {type}",
+ "noItemsSelected": "未選擇要刪除的 {type}",
+ "deleteError": "錯誤:{message}",
+ "deleteSuccess": "成功刪除 {count} 個 {type}",
+ "deleteFailed": "刪除 {type} 失敗:{message}"
+ },
+ "controls": {
+ "reloadFailed": "重新載入 {pageType} 失敗:{message}",
+ "refreshFailed": "刷新 {pageType} 失敗:{message}",
+ "fetchMetadataFailed": "取得 metadata 失敗:{message}",
+ "clearFilterFailed": "清除自訂篩選失敗:{message}"
+ },
+ "contextMenu": {
+ "contentRatingSet": "內容分級已設為 {level}",
+ "contentRatingFailed": "設定內容分級失敗:{message}",
+ "relinkSuccess": "模型已成功重新連結至 Civitai",
+ "relinkFailed": "錯誤:{message}",
+ "fetchMetadataFirst": "請先從 CivitAI 取得 metadata",
+ "noCivitaiInfo": "無 CivitAI 資訊",
+ "missingHash": "模型雜湊不可用"
+ },
+ "exampleImages": {
+ "pathUpdated": "範例圖片路徑已更新",
+ "pathUpdateFailed": "更新範例圖片路徑失敗:{message}",
+ "downloadInProgress": "下載已在進行中",
+ "enterLocationFirst": "請先輸入下載位置",
+ "downloadStarted": "範例圖片下載已開始",
+ "downloadStartFailed": "開始下載失敗:{error}",
+ "downloadPaused": "下載已暫停",
+ "pauseFailed": "暫停下載失敗:{error}",
+ "downloadResumed": "下載已恢復",
+ "resumeFailed": "恢復下載失敗:{error}",
+ "downloadStopped": "下載已取消",
+ "stopFailed": "取消下載失敗:{error}",
+ "deleted": "範例圖片已刪除",
+ "deleteFailed": "刪除範例圖片失敗",
+ "setPreviewFailed": "設定預覽圖片失敗"
+ },
+ "api": {
+ "fetchFailed": "取得 {type} 失敗:{message}",
+ "reloadFailed": "重新載入 {type} 失敗:{message}",
+ "deleteSuccess": "{type} 已成功刪除",
+ "deleteFailed": "刪除 {type} 失敗:{message}",
+ "excludeSuccess": "{type} 已成功排除",
+ "excludeFailed": "排除 {type} 失敗:{message}",
+ "restoreSuccess": "{type} 已成功還原",
+ "restoreFailed": "還原 {type} 失敗:{message}",
+ "fileNameUpdated": "檔案名稱已成功更新",
+ "fileRenameFailed": "重新命名檔案失敗:{error}",
+ "previewUpdated": "預覽圖片已成功更新",
+ "previewUploadFailed": "上傳預覽圖片失敗",
+ "refreshComplete": "{action} 完成",
+ "refreshFailed": "{action} {type} 失敗",
+ "metadataRefreshed": "metadata 已成功刷新",
+ "metadataRefreshFailed": "刷新 metadata 失敗:{message}",
+ "metadataUpdateComplete": "metadata 更新完成",
+ "operationCancelled": "操作已由用戶取消",
+ "operationCancelledPartial": "操作已取消。已處理 {success} 個項目。",
+ "metadataFetchFailed": "取得 metadata 失敗:{message}",
+ "bulkMetadataCompleteAll": "已成功刷新全部 {count} 個 {type}",
+ "bulkMetadataCompletePartial": "已刷新 {success} / {total} 個 {type}",
+ "bulkMetadataCompleteNone": "全部 {type} metadata 刷新失敗",
+ "bulkMetadataFailureDetails": "刷新失敗:\n{failures}",
+ "bulkMetadataFailed": "刷新 metadata 失敗:{message}",
+ "moveNotSupported": "不支援移動 {type}",
+ "alreadyInFolder": "{type} 已在選定資料夾",
+ "moveInfo": "{message}",
+ "moveSuccess": "{type} 已成功移動",
+ "bulkMoveNotSupported": "不支援批量移動 {type}",
+ "allAlreadyInFolder": "所有選取的 {type} 已在目標資料夾",
+ "bulkMovePartial": "已移動 {successCount} 個 {type},{failureCount} 個失敗",
+ "bulkMoveFailures": "移動失敗:\n{failures}",
+ "bulkMoveSuccess": "已成功移動 {successCount} 個 {type}",
+ "exampleImagesDownloadSuccess": "範例圖片下載成功!",
+ "exampleImagesDownloadFailed": "下載範例圖片失敗:{message}",
+ "moveFailed": "Failed to move item: {message}",
+ "copiedToClipboard": "已複製到剪貼簿",
+ "downloadStarted": "下載已開始"
+ }
+ },
+ "doctor": {
+ "kicker": "系統診斷",
+ "title": "醫生",
+ "buttonTitle": "執行診斷與常見修復",
+ "loading": "正在檢查環境...",
+ "footer": "如果修復後問題仍然存在,請匯出診斷套件。",
+ "summary": {
+ "idle": "針對設定、快取完整性與 UI 一致性執行健康檢查。",
+ "ok": "目前環境中未發現任何活動中的問題。",
+ "warning": "找到 {count} 個問題。大多可以直接在此面板修復。",
+ "error": "應先處理 {count} 個問題,應用程式才能完全正常。"
+ },
+ "status": {
+ "ok": "健康",
+ "warning": "需要注意",
+ "error": "需要處理"
+ },
+ "issues": {
+ "civitai_api_key": {
+ "title": "Civitai API 金鑰"
+ },
+ "cache_health": {
+ "title": "模型快取健康狀態"
+ },
+ "filename_conflicts": {
+ "title": "檔案名稱重複衝突"
+ },
+ "ui_version": {
+ "title": "UI 版本"
+ }
+ },
+ "actions": {
+ "runAgain": "重新執行",
+ "exportBundle": "匯出套件",
+ "open-settings": "開啟設定",
+ "open-settings-syntax-format": "切換為完整路徑語法",
+ "repair-cache": "重建快取",
+ "resolve-filename-conflicts": "解決衝突",
+ "reload-page": "重新載入 UI"
+ },
+ "labels": {
+ "conflicts": "衝突詳情",
+ "version": "版本"
+ },
+ "toast": {
+ "loadFailed": "載入診斷失敗:{message}",
+ "repairSuccess": "快取重建完成。",
+ "repairFailed": "快取重建失敗:{message}",
+ "exportSuccess": "診斷套件已匯出。",
+ "exportFailed": "匯出診斷套件失敗:{message}",
+ "conflictsResolved": "已解決 {count} 個檔案名稱衝突。",
+ "conflictsResolveFailed": "解決檔案名稱衝突失敗:{message}"
+ }
+ },
+ "conflictConfirm": {
+ "title": "解決檔案名稱衝突",
+ "message": "通過在每個重複檔案名稱後附加 4 位元哈希值來重新命名檔案。",
+ "note": "此操作會重新命名磁碟上的檔案。如果使用 A1111 語法格式,現有工作流程中的模型參考可能需要更新。",
+ "detail": "示例:filename_v1.2 → filename_v1.2-ab3c",
+ "impact": "將重新命名 {count} 個檔案(共 {groups} 組重複)",
+ "confirm": "重新命名檔案",
+ "cancel": "取消"
+ },
+ "banners": {
+ "versionMismatch": {
+ "title": "偵測到應用程式更新",
+ "content": "您的瀏覽器正在執行舊版本的 LoRA 管理器({storedVersion})。伺服器已更新至版本 {currentVersion}。請重新整理以確保正常運作。",
+ "refreshNow": "立即重新整理",
+ "refreshingIn": "將於",
+ "seconds": "秒後重新整理"
+ },
+ "communitySupport": {
+ "title": "Keep LoRA Manager Thriving with Your Support ❤️",
+ "content": "LoRA Manager is a passion project maintained full-time by a solo developer. Your support on Ko-fi helps cover development costs, keeps new updates coming, and unlocks a license key for the LM Civitai Extension as a thank-you gift. Every contribution truly makes a difference.",
+ "supportCta": "Support on Ko-fi",
+ "learnMore": "LM Civitai Extension Tutorial"
+ },
+ "cacheHealth": {
+ "corrupted": {
+ "title": "檢測到快取損壞"
+ },
+ "degraded": {
+ "title": "檢測到快取問題"
+ },
+ "content": "{total} 個快取項目中有 {invalid} 個無效({rate})。這可能會導致模型遺失或錯誤。建議重建快取。",
+ "rebuildCache": "重建快取",
+ "dismiss": "關閉",
+ "rebuilding": "重建快取中...",
+ "rebuildFailed": "重建快取失敗:{error}",
+ "retry": "重試"
+ }
+ }
}
diff --git a/py/routes/handlers/hf_handlers.py b/py/routes/handlers/hf_handlers.py
new file mode 100644
index 00000000..aaebbb22
--- /dev/null
+++ b/py/routes/handlers/hf_handlers.py
@@ -0,0 +1,360 @@
+"""Handlers for Hugging Face model listing and download.
+
+Minimal MVP implementation — uses direct HTTP to the HF API for file
+listing and the project's existing aiohttp-based Downloader for
+downloading. No huggingface_hub dependency required.
+"""
+
+from __future__ import annotations
+
+import json
+import logging
+import os
+from typing import Any
+
+import aiohttp
+from aiohttp import web
+
+from ...config import config
+from ...services.downloader import (
+ DownloadProgress,
+ get_downloader,
+)
+from ...services.aria2_downloader import Aria2Downloader
+from ...services.settings_manager import get_settings_manager
+from ...services.service_registry import ServiceRegistry
+from ...services.websocket_manager import ws_manager
+from ...utils.constants import MODEL_FILE_EXTENSIONS
+from ...utils.metadata_manager import MetadataManager
+from ...utils.models import LoraMetadata, CheckpointMetadata, EmbeddingMetadata
+
+logger = logging.getLogger(__name__)
+
+_DEFAULT_MODEL_CLASS = LoraMetadata
+_DEFAULT_SCANNER_GETTER = "get_lora_scanner"
+
+# Shared aiohttp session for HF API calls (created on first use)
+_hf_api_session: aiohttp.ClientSession | None = None
+
+
+async def _get_hf_api_session() -> aiohttp.ClientSession:
+ """Get or create the shared aiohttp session for HF API calls."""
+ global _hf_api_session # needed because we reassign the module-level name
+ if _hf_api_session is None or _hf_api_session.closed:
+ _hf_api_session = aiohttp.ClientSession(
+ headers={"User-Agent": "ComfyUI-LoRA-Manager/1.0"},
+ timeout=aiohttp.ClientTimeout(total=30),
+ )
+ return _hf_api_session
+
+
+def _infer_model_type(model_root: str) -> tuple[Any, str]:
+ """Determine model class and scanner by matching ``model_root`` against the
+ configured root paths for each model type (from ``Config``).
+
+ The ``model_root`` value comes from the frontend's model-root dropdown,
+ which is populated from the current page's scanner roots. By checking
+ which scanner's root list it belongs to, we avoid fragile heuristics
+ like substring-matching path names.
+ """
+ norm = os.path.normpath(model_root).replace(os.sep, "/")
+
+ # LoRA roots
+ for p in (config.loras_roots or []) + (config.extra_loras_roots or []):
+ if os.path.normpath(p).replace(os.sep, "/") == norm:
+ return LoraMetadata, "get_lora_scanner"
+
+ # Checkpoint / UNet roots
+ for p in (
+ (config.checkpoints_roots or [])
+ + (config.extra_checkpoints_roots or [])
+ + (config.unet_roots or [])
+ + (config.extra_unet_roots or [])
+ ):
+ if os.path.normpath(p).replace(os.sep, "/") == norm:
+ return CheckpointMetadata, "get_checkpoint_scanner"
+
+ # Embedding roots
+ for p in (config.embeddings_roots or []) + (config.extra_embeddings_roots or []):
+ if os.path.normpath(p).replace(os.sep, "/") == norm:
+ return EmbeddingMetadata, "get_embedding_scanner"
+
+ # Fallback — should not happen in normal use
+ logger.warning(
+ "Could not determine model type for root '%s'; defaulting to LoRA",
+ model_root,
+ )
+ return _DEFAULT_MODEL_CLASS, _DEFAULT_SCANNER_GETTER
+
+
+async def _save_hf_metadata(dest_path: str, repo: str, model_root: str) -> None:
+ """Create a proper .metadata.json and add the model to the scanner cache.
+
+ Uses ``MetadataManager.create_default_metadata()`` which computes the
+ SHA256 hash, extracts safetensors header metadata (base_model), and
+ produces a fully-populated ``LoraMetadata`` (or ``CheckpointMetadata`` /
+ ``EmbeddingMetadata``) object. We then overlay HF-specific fields and
+ register the model in the in-memory scanner cache so it appears
+ immediately without a full filesystem walk.
+ """
+ try:
+ hf_url = f"https://huggingface.co/{repo}"
+ model_class, scanner_getter_name = _infer_model_type(model_root)
+
+ # 1. Create proper metadata (computes SHA256, reads safetensors headers)
+ metadata = await MetadataManager.create_default_metadata(
+ dest_path, model_class=model_class
+ )
+ if metadata is None:
+ logger.warning("create_default_metadata returned None for %s", dest_path)
+ return
+
+ # 2. Overlay HF-specific fields
+ metadata._unknown_fields["hf_url"] = hf_url
+ metadata.from_civitai = True # leave default, don't interfere with CivitAI fetch
+
+ # 3. Save metadata atomically
+ await MetadataManager.save_metadata(dest_path, metadata)
+ logger.info("Saved HF metadata (with hf_url) for %s", dest_path)
+
+ # 4. Determine relative folder path for cache
+ # model_root is an absolute path; dest_path is under it
+ folder = ""
+ if os.path.isabs(model_root) and dest_path.startswith(model_root):
+ rel = os.path.relpath(os.path.dirname(dest_path), model_root)
+ folder = rel.replace(os.sep, "/") if rel != "." else ""
+
+ # 5. Add to scanner cache (same as CivitAI's _execute_download does)
+ scanner_getter = getattr(ServiceRegistry, scanner_getter_name, None)
+ if scanner_getter is not None:
+ scanner = await scanner_getter()
+ if scanner is not None:
+ metadata_dict = metadata.to_dict()
+ metadata_dict["hf_url"] = hf_url
+ await scanner.add_model_to_cache(metadata_dict, folder)
+ logger.info("Added %s to scanner cache (folder=%s)", dest_path, folder)
+
+ except Exception as exc:
+ logger.warning("Failed to save HF metadata for %s: %s", dest_path, exc)
+
+
+class HfHandler:
+ """Handle Hugging Face model browsing and download."""
+
+ async def get_hf_repo_files(self, request: web.Request) -> web.Response:
+ """List model-weight files from a HF repo with real file sizes.
+
+ Uses the HF tree API endpoint which returns accurate file sizes
+ (including LFS-tracked files), unlike the model info endpoint.
+ """
+ repo = request.query.get("repo", "").strip()
+ if not repo or "/" not in repo:
+ return web.json_response(
+ {"error": "Missing or invalid 'repo' parameter (expected user/repo)"},
+ status=400,
+ )
+
+ url = f"https://huggingface.co/api/models/{repo}/tree/main"
+
+ try:
+ session = await _get_hf_api_session()
+ async with session.get(url) as resp:
+ if resp.status == 404:
+ return web.json_response(
+ {"error": f"Repo '{repo}' not found"}, status=404
+ )
+ if resp.status != 200:
+ text = await resp.text()
+ return web.json_response(
+ {"error": f"HF API error {resp.status}: {text[:200]}"},
+ status=resp.status,
+ )
+ tree: list[dict[str, Any]] = await resp.json()
+ except Exception as exc:
+ logger.error("Failed to fetch HF repo files: %s", exc)
+ return web.json_response({"error": str(exc)}, status=502)
+
+ files: list[dict[str, Any]] = []
+ for entry in tree:
+ path: str = entry.get("path", "")
+ ext = os.path.splitext(path)[1].lower()
+ if ext not in MODEL_FILE_EXTENSIONS:
+ continue
+ size = entry.get("size", 0) or 0
+ if size == 0 and "lfs" in entry:
+ size = entry["lfs"].get("size", 0) or 0
+ files.append({
+ "filename": path,
+ "size": size,
+ })
+
+ files.sort(key=lambda f: f["size"], reverse=True)
+ return web.json_response(files)
+
+ async def download_hf_model(self, request: web.Request) -> web.Response:
+ """Download a single file from Hugging Face into the model directory.
+
+ POST JSON body::
+
+ {
+ "repo": "dx8152/Flux2-Klein-9B-Consistency",
+ "filename": "Flux2-Klein-9B-consistency-V2.safetensors",
+ "revision": "main",
+ "model_root": "loras",
+ "relative_path": "",
+ "use_default_paths": false,
+ "download_id": "optional-batch-id"
+ }
+
+ If ``download_id`` is provided, real-time progress (bytes, speed,
+ percentage) is broadcast via the WebSocket progress system, matching
+ the CivitAI download experience.
+
+ Respects the ``download_backend`` setting (``aria2`` or ``default``).
+ """
+ try:
+ payload: dict[str, Any] = await request.json()
+ except json.JSONDecodeError:
+ return web.json_response({"error": "Invalid JSON"}, status=400)
+
+ repo = (payload.get("repo") or "").strip()
+ filename = (payload.get("filename") or "").strip()
+ revision = (payload.get("revision") or "main").strip()
+ model_root = (payload.get("model_root") or "").strip()
+ relative_path = (payload.get("relative_path") or "").strip()
+ use_default_paths = bool(payload.get("use_default_paths", False))
+ download_id: str | None = payload.get("download_id")
+
+ logger.info(
+ "download_hf_model: repo=%s file=%s root=%s download_id=%s",
+ repo, filename, model_root, download_id,
+ )
+
+ if not repo or not filename:
+ return web.json_response(
+ {"error": "Missing required fields: 'repo' and 'filename'"}, status=400
+ )
+
+ # Determine target directory
+ if os.path.isabs(model_root):
+ base_dir = model_root
+ else:
+ base_dir = os.path.join(os.getcwd(), "models", model_root)
+
+ if use_default_paths:
+ author, repo_name = repo.split("/", 1)
+ target_dir = os.path.join(base_dir, "huggingface", author, repo_name)
+ elif relative_path:
+ target_dir = os.path.join(base_dir, relative_path)
+ else:
+ target_dir = base_dir
+
+ os.makedirs(target_dir, exist_ok=True)
+ dest_path = os.path.join(target_dir, filename)
+
+ # Check if already exists (simple skip)
+ if os.path.exists(dest_path) and os.path.getsize(dest_path) > 0:
+ logger.info("download_hf_model: file already exists, skipping — %s", dest_path)
+ return web.json_response({
+ "success": True,
+ "message": f"File already exists: {dest_path}",
+ "path": dest_path,
+ })
+
+ # Build HF resolve URL
+ resolve_url = (
+ f"https://huggingface.co/{repo}/resolve/{revision}/{filename}"
+ )
+
+ # Set up progress callback if download_id is provided
+ progress_callback = None
+ if download_id:
+
+ async def _progress_callback(
+ progress: float | DownloadProgress,
+ snapshot: DownloadProgress | None = None,
+ ) -> None:
+ percent = 0.0
+ metrics = snapshot if isinstance(snapshot, DownloadProgress) else None
+
+ if isinstance(progress, DownloadProgress):
+ percent = progress.percent_complete
+ metrics = progress
+ elif isinstance(snapshot, DownloadProgress):
+ percent = snapshot.percent_complete
+ else:
+ percent = float(progress)
+
+ broadcast: dict[str, Any] = {
+ "status": "progress",
+ "progress": round(percent),
+ }
+ if metrics:
+ broadcast["bytes_downloaded"] = metrics.bytes_downloaded
+ broadcast["total_bytes"] = metrics.total_bytes
+ broadcast["bytes_per_second"] = metrics.bytes_per_second
+
+ await ws_manager.broadcast_download_progress(download_id, broadcast)
+
+ progress_callback = _progress_callback
+
+ # Respect download backend setting (aria2 vs default)
+ download_backend = (
+ get_settings_manager().get("download_backend", "default")
+ )
+
+ if download_backend == "aria2":
+ aria2 = await Aria2Downloader.get_instance()
+ aid = download_id or f"hf_{repo}_{filename}"
+ try:
+ hf_success, hf_result = await aria2.download_file(
+ url=resolve_url,
+ save_path=dest_path,
+ download_id=aid,
+ progress_callback=progress_callback,
+ )
+ if hf_success:
+ await _save_hf_metadata(dest_path, repo, model_root)
+ return web.json_response({
+ "success": True,
+ "message": f"Downloaded to {dest_path}",
+ "path": dest_path,
+ })
+ else:
+ return web.json_response(
+ {"success": False, "error": hf_result or "aria2 download failed"},
+ status=500,
+ )
+ except Exception as exc:
+ logger.error("HF download (aria2) failed: %s", exc)
+ return web.json_response(
+ {"success": False, "error": str(exc)}, status=500
+ )
+
+ # Default: use built-in aiohttp Downloader
+ downloader = await get_downloader()
+ try:
+ success, result = await downloader.download_file(
+ url=resolve_url,
+ save_path=dest_path,
+ use_auth=False,
+ allow_resume=True,
+ progress_callback=progress_callback,
+ )
+ if success:
+ await _save_hf_metadata(dest_path, repo, model_root)
+ return web.json_response({
+ "success": True,
+ "message": f"Downloaded to {result}",
+ "path": result,
+ })
+ else:
+ return web.json_response(
+ {"success": False, "error": result or "Download failed"},
+ status=500,
+ )
+ except Exception as exc:
+ logger.error("HF download failed: %s", exc)
+ return web.json_response(
+ {"success": False, "error": str(exc)}, status=500
+ )
diff --git a/py/routes/handlers/misc_handlers.py b/py/routes/handlers/misc_handlers.py
index 1450046f..0ab63ca7 100644
--- a/py/routes/handlers/misc_handlers.py
+++ b/py/routes/handlers/misc_handlers.py
@@ -48,6 +48,7 @@ from ...utils.constants import (
SUPPORTED_MEDIA_EXTENSIONS,
VALID_LORA_TYPES,
)
+from .hf_handlers import HfHandler
from ...utils.civitai_utils import rewrite_preview_url
from ...utils.example_images_paths import (
find_non_compliant_items_in_example_images_root,
@@ -3315,6 +3316,7 @@ class MiscHandlerSet:
doctor: DoctorHandler,
example_workflows: ExampleWorkflowsHandler,
base_model: BaseModelHandlerSet,
+ hf_handler: HfHandler | None = None,
) -> None:
self.health = health
self.settings = settings
@@ -3333,6 +3335,7 @@ class MiscHandlerSet:
self.doctor = doctor
self.example_workflows = example_workflows
self.base_model = base_model
+ self.hf_handler = hf_handler
def to_route_mapping(
self,
@@ -3378,6 +3381,9 @@ class MiscHandlerSet:
"get_supporters": self.supporters.get_supporters,
"get_example_workflows": self.example_workflows.get_example_workflows,
"get_example_workflow": self.example_workflows.get_example_workflow,
+ # Hugging Face handlers
+ "get_hf_repo_files": self.hf_handler.get_hf_repo_files,
+ "download_hf_model": self.hf_handler.download_hf_model,
# Base model handlers
"get_base_models": self.base_model.get_base_models,
"refresh_base_models": self.base_model.refresh_base_models,
diff --git a/py/routes/misc_route_registrar.py b/py/routes/misc_route_registrar.py
index 268a5d1b..a44c8d3f 100644
--- a/py/routes/misc_route_registrar.py
+++ b/py/routes/misc_route_registrar.py
@@ -94,6 +94,13 @@ MISC_ROUTE_DEFINITIONS: tuple[RouteDefinition, ...] = (
RouteDefinition(
"GET", "/api/lm/delete-model-version", "delete_model_version"
),
+ # Hugging Face model endpoints
+ RouteDefinition(
+ "GET", "/api/lm/hf-repo-files", "get_hf_repo_files"
+ ),
+ RouteDefinition(
+ "POST", "/api/lm/download-hf-model", "download_hf_model"
+ ),
)
diff --git a/py/routes/misc_routes.py b/py/routes/misc_routes.py
index df302d64..e45adf55 100644
--- a/py/routes/misc_routes.py
+++ b/py/routes/misc_routes.py
@@ -39,6 +39,7 @@ from .handlers.misc_handlers import (
build_service_registry_adapter,
)
from .handlers.base_model_handlers import BaseModelHandlerSet
+from .handlers.hf_handlers import HfHandler
from .misc_route_registrar import MiscRouteRegistrar
logger = logging.getLogger(__name__)
@@ -136,6 +137,7 @@ class MiscRoutes:
doctor = DoctorHandler(settings_service=self._settings)
example_workflows = ExampleWorkflowsHandler()
base_model = BaseModelHandlerSet()
+ hf_handler = HfHandler()
return self._handler_set_factory(
health=health,
@@ -155,6 +157,7 @@ class MiscRoutes:
doctor=doctor,
example_workflows=example_workflows,
base_model=base_model,
+ hf_handler=hf_handler,
)
diff --git a/py/utils/constants.py b/py/utils/constants.py
index b9e5f2ba..95d3ddbc 100644
--- a/py/utils/constants.py
+++ b/py/utils/constants.py
@@ -47,6 +47,20 @@ SUPPORTED_MEDIA_EXTENSIONS = {
"videos": [".mp4", ".webm"],
}
+# Model weight file extensions recognised by scanners.
+# This is the union of all scanner extensions (lora, checkpoint, embedding).
+MODEL_FILE_EXTENSIONS = {
+ ".safetensors",
+ ".ckpt",
+ ".pt",
+ ".pt2",
+ ".bin",
+ ".pth",
+ ".pkl",
+ ".sft",
+ ".gguf",
+}
+
# Valid sub-types for each scanner type
VALID_LORA_SUB_TYPES = ["lora", "locon", "dora"]
VALID_CHECKPOINT_SUB_TYPES = ["checkpoint", "diffusion_model"]
diff --git a/static/css/components/modal/download-modal.css b/static/css/components/modal/download-modal.css
index 9cc420c0..88e5c31d 100644
--- a/static/css/components/modal/download-modal.css
+++ b/static/css/components/modal/download-modal.css
@@ -821,4 +821,112 @@
[data-theme="dark"] .batch-preview-item {
background: var(--lora-surface);
+}
+
+/* HF Repo File Explorer Step */
+.hf-repo-header {
+ margin-bottom: var(--space-2);
+ font-size: 0.95em;
+ color: var(--text-color);
+ opacity: 0.8;
+}
+
+.repo-file-list {
+ max-height: 360px;
+ overflow-y: auto;
+ margin: var(--space-2) 0;
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+}
+
+.repo-file-item {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding: 10px 12px;
+ border: 1px solid var(--border-color);
+ border-radius: var(--border-radius-sm);
+ cursor: pointer;
+ transition: var(--transition-base);
+ background: var(--bg-color);
+}
+
+.repo-file-item:hover {
+ border-color: var(--lora-accent);
+ box-shadow: var(--shadow-sm);
+}
+
+.repo-file-item.selected {
+ border: 2px solid var(--lora-accent);
+ background: oklch(var(--lora-accent) / 0.05);
+}
+
+.repo-file-item .repo-file-checkbox {
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ accent-color: var(--lora-accent);
+ flex-shrink: 0;
+ padding: 0;
+ border: none;
+}
+
+.repo-file-icon {
+ font-size: 1.2em;
+ color: var(--text-color);
+ opacity: 0.6;
+ width: 24px;
+ text-align: center;
+ flex-shrink: 0;
+}
+
+.repo-file-name {
+ flex: 1;
+ font-weight: 500;
+ font-size: 0.95em;
+ word-break: keep-all;
+ overflow-wrap: anywhere;
+ min-width: 0;
+}
+
+.repo-file-meta {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ font-size: 0.85em;
+ color: var(--text-color);
+ opacity: 0.6;
+ white-space: nowrap;
+}
+
+.repo-file-size {
+ font-variant-numeric: tabular-nums;
+}
+
+.hf-badge {
+ display: inline-block;
+ padding: 1px 6px;
+ border-radius: 8px;
+ background: oklch(0.55 0.12 250 / 0.15);
+ color: oklch(0.7 0.12 250);
+ font-size: 0.75em;
+ font-weight: 600;
+ margin-left: 4px;
+}
+
+[data-theme="dark"] .repo-file-item {
+ background: var(--lora-surface);
+}
+
+/* Checkbox inside HF batch preview items */
+.batch-preview-checkbox {
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ accent-color: var(--lora-accent);
+ flex-shrink: 0;
+ padding: 0;
+ border: none;
+ margin: 0;
}
\ No newline at end of file
diff --git a/static/js/api/apiConfig.js b/static/js/api/apiConfig.js
index 4e7f1e56..ccafba35 100644
--- a/static/js/api/apiConfig.js
+++ b/static/js/api/apiConfig.js
@@ -190,6 +190,12 @@ export const DOWNLOAD_ENDPOINTS = {
exampleImages: '/api/lm/force-download-example-images' // New endpoint for downloading example images
};
+// Hugging Face API endpoints
+export const HF_ENDPOINTS = {
+ repoFiles: '/api/lm/hf-repo-files',
+ download: '/api/lm/download-hf-model',
+};
+
// WebSocket endpoints
export const WS_ENDPOINTS = {
fetchProgress: '/ws/fetch-progress'
diff --git a/static/js/api/baseModelApi.js b/static/js/api/baseModelApi.js
index c1a8d586..0fa4b562 100644
--- a/static/js/api/baseModelApi.js
+++ b/static/js/api/baseModelApi.js
@@ -7,6 +7,7 @@ import {
getCurrentModelType,
isValidModelType,
DOWNLOAD_ENDPOINTS,
+ HF_ENDPOINTS,
WS_ENDPOINTS
} from './apiConfig.js';
import { resetAndReload } from './modelApiFactory.js';
@@ -1243,6 +1244,48 @@ export class BaseModelApiClient {
}
}
+ async fetchHfRepoFiles(repo, revision = 'main') {
+ try {
+ const params = new URLSearchParams({ repo, revision });
+ const response = await fetch(`${HF_ENDPOINTS.repoFiles}?${params}`);
+ if (!response.ok) {
+ const err = await response.json().catch(() => ({}));
+ throw new Error(err.error || 'Failed to fetch HF repo files');
+ }
+ return await response.json();
+ } catch (error) {
+ console.error('Error fetching HF repo files:', error);
+ throw error;
+ }
+ }
+
+ async downloadHfModel({ repo, filename, revision, modelRoot, relativePath, useDefaultPaths, download_id }) {
+ try {
+ const response = await fetch(HF_ENDPOINTS.download, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ repo,
+ filename,
+ revision: revision || 'main',
+ model_root: modelRoot,
+ relative_path: relativePath || '',
+ use_default_paths: useDefaultPaths || false,
+ ...(download_id ? { download_id } : {}),
+ })
+ });
+
+ if (!response.ok) {
+ throw new Error(await response.text());
+ }
+
+ return await response.json();
+ } catch (error) {
+ console.error('Error downloading HF model:', error);
+ throw error;
+ }
+ }
+
_buildQueryParams(baseParams, pageState) {
const params = new URLSearchParams(baseParams);
const isExcludedView = pageState.viewMode === 'excluded';
diff --git a/static/js/managers/DownloadManager.js b/static/js/managers/DownloadManager.js
index c12ddfab..8db246ac 100644
--- a/static/js/managers/DownloadManager.js
+++ b/static/js/managers/DownloadManager.js
@@ -27,6 +27,11 @@ export class DownloadManager {
this.isBatchMode = false;
this.editingBatchIndex = -1;
+ // HF download state
+ this.hfRepoId = null;
+ this.hfRepoFiles = [];
+ this.hfSelectedFiles = [];
+
this.loadingManager = new LoadingManager();
this.folderTreeManager = new FolderTreeManager();
this.folderClickHandler = null;
@@ -44,6 +49,10 @@ export class DownloadManager {
this.handleToggleDefaultPath = this.toggleDefaultPath.bind(this);
this.handleBackToUrlFromBatch = this.backToUrlFromBatch.bind(this);
this.handleNextFromBatch = this.nextFromBatch.bind(this);
+
+ // HF handlers
+ this.handleBackToUrlFromHf = this.backToUrlFromHf.bind(this);
+ this.handleNextFromHfFiles = this.nextFromHfFiles.bind(this);
}
showDownloadModal() {
@@ -99,6 +108,12 @@ export class DownloadManager {
// Default path toggle handler
document.getElementById('useDefaultPath').addEventListener('change', this.handleToggleDefaultPath);
+
+ // HF step buttons
+ const backToUrlFromHfBtn = document.getElementById('backToUrlFromHfBtn');
+ if (backToUrlFromHfBtn) backToUrlFromHfBtn.addEventListener('click', this.handleBackToUrlFromHf);
+ const nextFromHfFiles = document.getElementById('nextFromHfFiles');
+ if (nextFromHfFiles) nextFromHfFiles.addEventListener('click', this.handleNextFromHfFiles);
}
updateModalLabels() {
@@ -160,6 +175,11 @@ export class DownloadManager {
// Reset default path toggle
this.loadDefaultPathSetting();
+
+ // Reset HF state
+ this.hfRepoId = null;
+ this.hfRepoFiles = [];
+ this.hfSelectedFiles = [];
}
async retrieveVersionsForModel(modelId, source = null) {
@@ -180,6 +200,29 @@ export class DownloadManager {
return;
}
+ // Detect URL types — all URLs must share the same source type
+ const urlTypes = urls.map(u => DownloadManager.detectUrlType(u));
+ const isHf = urlTypes.every(t => t && (t.type === 'hf-resolve' || t.type === 'hf-repo'));
+ const isCivitai = urlTypes.every(t => t && t.type === 'civitai');
+
+ if (!isHf && !isCivitai) {
+ const allValid = urlTypes.every(t => t !== null);
+ if (!allValid) {
+ errorElement.textContent = translate('modals.download.errors.invalidUrl');
+ return;
+ }
+ // Mixed sources not supported in one batch
+ if (urls.length > 1) {
+ errorElement.textContent = translate('modals.download.errors.mixedSources');
+ return;
+ }
+ }
+
+ if (isHf) {
+ return this._validateAndFetchHf(urls, errorElement);
+ }
+
+ // --- Original CivitAI flow below ---
if (urls.length === 1) {
this.isBatchMode = false;
try {
@@ -271,6 +314,142 @@ export class DownloadManager {
this.showBatchPreviewStep();
}
+ // ---- Hugging Face download flow ----
+
+ async _validateAndFetchHf(urls, errorElement) {
+ if (urls.length === 1) {
+ const info = DownloadManager.detectUrlType(urls[0]);
+ // Direct file resolve URL → skip file selection, go to location
+ if (info.type === 'hf-resolve') {
+ this.isBatchMode = false;
+ this.hfRepoId = info.repo;
+ this.hfSelectedFiles = [info.filename];
+ this.hfRepoFiles = [];
+ this.source = 'huggingface';
+ this.proceedToLocation();
+ return;
+ }
+ // Repo URL → fetch file list
+ try {
+ this.loadingManager.showSimpleLoading(translate('modals.download.fetchingRepoFiles'));
+ const files = await this.apiClient.fetchHfRepoFiles(info.repo);
+ if (!files || files.length === 0) {
+ throw new Error(translate('modals.download.errors.noModelFiles'));
+ }
+ this.hfRepoId = info.repo;
+ this.hfRepoFiles = files;
+ this.hfSelectedFiles = [];
+ this.isBatchMode = false;
+ this.source = 'huggingface';
+ this.showRepoFileStep(info.repo);
+ } catch (err) {
+ errorElement.textContent = err.message;
+ } finally {
+ this.loadingManager.hide();
+ }
+ return;
+ }
+
+ // Multiple HF URLs → batch mode: flatten all files from all repos
+ this.isBatchMode = true;
+ this.batchModels = [];
+ this.source = 'huggingface';
+ this.loadingManager.showSimpleLoading(translate('modals.download.fetchingRepoFiles'));
+
+ for (const url of urls) {
+ const info = DownloadManager.detectUrlType(url);
+ if (!info) {
+ this.batchModels.push({ url, error: 'Invalid URL', versions: [], selectedVersion: null });
+ continue;
+ }
+ if (info.type === 'hf-resolve') {
+ this.batchModels.push({
+ url,
+ source: 'huggingface',
+ repo: info.repo,
+ filename: info.filename,
+ revision: info.revision || 'main',
+ displayName: info.filename,
+ selectedVersion: true,
+ versions: [],
+ checked: true,
+ error: null,
+ });
+ } else if (info.type === 'hf-repo') {
+ try {
+ const files = await this.apiClient.fetchHfRepoFiles(info.repo);
+ if (!files || files.length === 0) {
+ this.batchModels.push({ url, error: 'No model files found', versions: [], selectedVersion: null });
+ continue;
+ }
+ // Flatten: create one batch item per file, all checked by default
+ for (const file of files) {
+ this.batchModels.push({
+ url,
+ source: 'huggingface',
+ repo: info.repo,
+ filename: file.filename,
+ revision: 'main',
+ displayName: file.filename,
+ fileSizeBytes: file.size,
+ selectedVersion: true,
+ versions: [],
+ checked: true,
+ error: null,
+ });
+ }
+ } catch (err) {
+ this.batchModels.push({ url, error: err.message, versions: [], selectedVersion: null });
+ }
+ }
+ }
+
+ this.loadingManager.hide();
+ this.showBatchPreviewStep();
+ }
+
+ showRepoFileStep(repoId) {
+ document.querySelectorAll('.download-step').forEach(s => s.style.display = 'none');
+ document.getElementById('repoFileStep').style.display = 'block';
+ document.getElementById('hfRepoLabel').textContent = repoId;
+
+ const list = document.getElementById('repoFileList');
+ list.innerHTML = this.hfRepoFiles.map((f, i) => {
+ const sizeMb = f.size > 0 ? (f.size / (1024 * 1024)).toFixed(1) : '?';
+ return `
+