From 1134466cc00235b2f857606bbdee14b9934bab58 Mon Sep 17 00:00:00 2001 From: Will Miao <13051207myq@gmail.com> Date: Mon, 1 Sep 2025 08:48:34 +0800 Subject: [PATCH] feat(i18n): complete locale files for all languages --- locales/de.json | 1138 +++++++++++++++++++++++++++++++------------ locales/es.json | 1130 ++++++++++++++++++++++++++++++------------ locales/fr.json | 1074 +++++++++++++++++++++++++++++----------- locales/ja.json | 1108 ++++++++++++++++++++++++++++++------------ locales/ko.json | 1114 ++++++++++++++++++++++++++++++------------ locales/ru.json | 1158 +++++++++++++++++++++++++++++++------------- locales/zh-TW.json | 1131 ++++++++++++++++++++++++++++++------------ 7 files changed, 5657 insertions(+), 2196 deletions(-) diff --git a/locales/de.json b/locales/de.json index be1b16de..c361df15 100644 --- a/locales/de.json +++ b/locales/de.json @@ -1,66 +1,24 @@ { "common": { - "file": "Datei", - "folder": "Ordner", - "name": "Name", - "size": "Größe", - "date": "Datum", - "type": "Typ", - "path": "Pfad", - "fileSize": { - "zero": "0 Bytes", - "bytes": "Bytes", - "kb": "KB", - "mb": "MB", - "gb": "GB", - "tb": "TB" - }, "actions": { "save": "Speichern", "cancel": "Abbrechen", "delete": "Löschen", - "edit": "Bearbeiten", - "copy": "Kopieren", "move": "Verschieben", "refresh": "Aktualisieren", - "download": "Herunterladen", - "upload": "Hochladen", - "search": "Suchen", - "filter": "Filter", - "sort": "Sortieren", - "select": "Auswählen", - "selectAll": "Alle auswählen", - "deselectAll": "Auswahl aufheben", - "confirm": "Bestätigen", - "close": "Schließen", "back": "Zurück", "next": "Weiter", - "previous": "Vorherige", - "view": "Ansicht", - "preview": "Vorschau", - "details": "Details", "backToTop": "Nach oben", "settings": "Einstellungen", - "help": "Hilfe", - "about": "Über" + "help": "Hilfe" }, "status": { "loading": "Wird geladen...", - "saving": "Wird gespeichert...", - "saved": "Gespeichert", - "error": "Fehler", - "success": "Erfolgreich", - "warning": "Warnung", - "info": "Information", - "processing": "Wird verarbeitet...", - "completed": "Abgeschlossen", - "failed": "Fehlgeschlagen", - "cancelled": "Abgebrochen", - "pending": "Wartend", - "ready": "Bereit" + "unknown": "Unbekannt", + "date": "Datum", + "version": "Version" }, "language": { - "current": "Sprache", "select": "Sprache auswählen", "select_help": "Wählen Sie Ihre bevorzugte Sprache für die Benutzeroberfläche", "english": "English", @@ -72,6 +30,47 @@ "korean": "한국어", "french": "Français", "spanish": "Español" + }, + "fileSize": { + "zero": "0 Bytes", + "bytes": "Bytes", + "kb": "KB", + "mb": "MB", + "gb": "GB", + "tb": "TB" + } + }, + "modelCard": { + "actions": { + "addToFavorites": "Zu Favoriten hinzufügen", + "removeFromFavorites": "Aus Favoriten entfernen", + "viewOnCivitai": "Auf Civitai anzeigen", + "notAvailableFromCivitai": "Nicht auf Civitai verfügbar", + "sendToWorkflow": "An ComfyUI senden (Klick: Anhängen, Shift+Klick: Ersetzen)", + "copyLoRASyntax": "LoRA-Syntax kopieren", + "checkpointNameCopied": "Checkpoint-Name kopiert", + "toggleBlur": "Unschärfe umschalten", + "show": "Anzeigen", + "openExampleImages": "Beispielbilder-Ordner öffnen" + }, + "nsfw": { + "matureContent": "Nicht jugendfreie Inhalte", + "xxxRated": "XXX-bewertete Inhalte", + "xRated": "X-bewertete Inhalte", + "rRated": "R-bewertete Inhalte" + }, + "favorites": { + "added": "Zu Favoriten hinzugefügt", + "removed": "Aus Favoriten entfernt", + "updateFailed": "Fehler beim Aktualisieren des Favoriten-Status" + }, + "sendToWorkflow": { + "checkpointNotImplemented": "Checkpoint an Workflow senden - Funktion wird implementiert" + }, + "exampleImages": { + "checkError": "Fehler beim Überprüfen der Beispielbilder", + "missingHash": "Fehlende Modell-Hash-Informationen.", + "noRemoteImagesAvailable": "Keine Remote-Beispielbilder für dieses Modell auf Civitai verfügbar" } }, "header": { @@ -93,15 +92,15 @@ }, "options": "Suchoptionen", "searchIn": "Suchen in:", - "notAvailable": "Suche auf der Statistikseite nicht verfügbar", + "notAvailable": "Suche auf Statistikseite nicht verfügbar", "filters": { "filename": "Dateiname", "modelname": "Modellname", "tags": "Tags", "creator": "Ersteller", "title": "Rezept-Titel", - "loraName": "LoRA Dateiname", - "loraModel": "LoRA Modellname" + "loraName": "LoRA-Dateiname", + "loraModel": "LoRA-Modellname" } }, "filter": { @@ -111,21 +110,132 @@ "clearAll": "Alle Filter löschen" }, "theme": { - "toggle": "Theme umschalten", + "toggle": "Theme wechseln", "switchToLight": "Zu hellem Theme wechseln", "switchToDark": "Zu dunklem Theme wechseln", "switchToAuto": "Zu automatischem Theme wechseln" + }, + "actions": { + "checkUpdates": "Updates prüfen", + "support": "Unterstützung" + } + }, + "settings": { + "civitaiApiKey": "Civitai API Key", + "civitaiApiKeyPlaceholder": "Geben Sie Ihren Civitai API Key ein", + "civitaiApiKeyHelp": "Wird für die Authentifizierung beim Herunterladen von Modellen von Civitai verwendet", + "sections": { + "contentFiltering": "Inhaltsfilterung", + "videoSettings": "Video-Einstellungen", + "layoutSettings": "Layout-Einstellungen", + "folderSettings": "Ordner-Einstellungen", + "downloadPathTemplates": "Download-Pfad-Vorlagen", + "exampleImages": "Beispielbilder", + "misc": "Verschiedenes" + }, + "contentFiltering": { + "blurNsfwContent": "NSFW-Inhalte unscharf stellen", + "blurNsfwContentHelp": "Nicht jugendfreie (NSFW) Vorschaubilder unscharf stellen", + "showOnlySfw": "Nur SFW-Ergebnisse anzeigen", + "showOnlySfwHelp": "Alle NSFW-Inhalte beim Durchsuchen und Suchen herausfiltern" + }, + "videoSettings": { + "autoplayOnHover": "Videos bei Hover automatisch abspielen", + "autoplayOnHoverHelp": "Video-Vorschauen nur beim Darüberfahren mit der Maus abspielen" + }, + "layoutSettings": { + "displayDensity": "Anzeige-Dichte", + "displayDensityOptions": { + "default": "Standard", + "medium": "Mittel", + "compact": "Kompakt" + }, + "displayDensityHelp": "Wählen Sie, wie viele Karten pro Zeile angezeigt werden sollen:", + "displayDensityDetails": { + "default": "Standard: 5 (1080p), 6 (2K), 8 (4K)", + "medium": "Mittel: 6 (1080p), 7 (2K), 9 (4K)", + "compact": "Kompakt: 7 (1080p), 8 (2K), 10 (4K)" + }, + "displayDensityWarning": "Warnung: Höhere Dichten können bei Systemen mit begrenzten Ressourcen zu Performance-Problemen führen.", + "cardInfoDisplay": "Karten-Info-Anzeige", + "cardInfoDisplayOptions": { + "always": "Immer sichtbar", + "hover": "Bei Hover anzeigen" + }, + "cardInfoDisplayHelp": "Wählen Sie, wann Modellinformationen und Aktionsschaltflächen angezeigt werden sollen:", + "cardInfoDisplayDetails": { + "always": "Immer sichtbar: Kopf- und Fußzeilen sind immer sichtbar", + "hover": "Bei Hover anzeigen: Kopf- und Fußzeilen erscheinen nur beim Darüberfahren mit der Maus" + } + }, + "folderSettings": { + "defaultLoraRoot": "Standard-LoRA-Stammordner", + "defaultLoraRootHelp": "Legen Sie den Standard-LoRA-Stammordner für Downloads, Importe und Verschiebungen fest", + "defaultCheckpointRoot": "Standard-Checkpoint-Stammordner", + "defaultCheckpointRootHelp": "Legen Sie den Standard-Checkpoint-Stammordner für Downloads, Importe und Verschiebungen fest", + "defaultEmbeddingRoot": "Standard-Embedding-Stammordner", + "defaultEmbeddingRootHelp": "Legen Sie den Standard-Embedding-Stammordner für Downloads, Importe und Verschiebungen fest", + "noDefault": "Kein Standard" + }, + "downloadPathTemplates": { + "title": "Download-Pfad-Vorlagen", + "help": "Konfigurieren Sie Ordnerstrukturen für verschiedene Modelltypen beim Herunterladen von Civitai.", + "availablePlaceholders": "Verfügbare Platzhalter:", + "templateOptions": { + "flatStructure": "Flache Struktur", + "byBaseModel": "Nach Basis-Modell", + "byAuthor": "Nach Autor", + "byFirstTag": "Nach erstem Tag", + "baseModelFirstTag": "Basis-Modell + Erster Tag", + "baseModelAuthor": "Basis-Modell + Autor", + "authorFirstTag": "Autor + Erster Tag", + "customTemplate": "Benutzerdefinierte Vorlage" + }, + "customTemplatePlaceholder": "Benutzerdefinierte Vorlage eingeben (z.B. {base_model}/{author}/{first_tag})", + "modelTypes": { + "lora": "LoRA", + "checkpoint": "Checkpoint", + "embedding": "Embedding" + }, + "baseModelPathMappings": "Basis-Modell-Pfad-Zuordnungen", + "baseModelPathMappingsHelp": "Passen Sie Ordnernamen für spezifische Basis-Modelle an (z.B. \"Flux.1 D\" → \"flux\")", + "addMapping": "Zuordnung hinzufügen", + "selectBaseModel": "Basis-Modell auswählen", + "customPathPlaceholder": "Benutzerdefinierter Pfad (z.B. flux)", + "removeMapping": "Zuordnung entfernen", + "validation": { + "validFlat": "Gültig (flache Struktur)", + "invalidChars": "Ungültige Zeichen erkannt", + "doubleSlashes": "Doppelte Schrägstriche nicht erlaubt", + "leadingTrailingSlash": "Kann nicht mit Schrägstrich beginnen oder enden", + "invalidPlaceholder": "Ungültiger Platzhalter: {placeholder}", + "validTemplate": "Gültige Vorlage" + } + }, + "exampleImages": { + "downloadLocation": "Download-Speicherort", + "downloadLocationPlaceholder": "Ordnerpfad für Beispielbilder eingeben", + "downloadLocationHelp": "Geben Sie den Ordnerpfad ein, wo Beispielbilder von Civitai gespeichert werden", + "autoDownload": "Beispielbilder automatisch herunterladen", + "autoDownloadHelp": "Beispielbilder automatisch für Modelle herunterladen, die keine haben (erfordert gesetzten Download-Speicherort)", + "optimizeImages": "Heruntergeladene Bilder optimieren", + "optimizeImagesHelp": "Beispielbilder optimieren, um Dateigröße zu reduzieren und Ladegeschwindigkeit zu verbessern (Metadaten bleiben erhalten)", + "download": "Herunterladen", + "restartRequired": "Neustart erforderlich" + }, + "misc": { + "includeTriggerWords": "Trigger Words in LoRA-Syntax einschließen", + "includeTriggerWordsHelp": "Trainierte Trigger Words beim Kopieren der LoRA-Syntax in die Zwischenablage einschließen" } }, "loras": { - "title": "LoRA Modelle", "controls": { "sort": { "title": "Modelle sortieren nach...", "name": "Name", "nameAsc": "A - Z", "nameDesc": "Z - A", - "date": "Hinzugefügt am", + "date": "Hinzugefügtes Datum", "dateDesc": "Neueste", "dateAsc": "Älteste", "size": "Dateigröße", @@ -133,7 +243,7 @@ "sizeAsc": "Kleinste" }, "refresh": { - "title": "Modellliste aktualisieren", + "title": "Modelliste aktualisieren", "quick": "Schnelle Aktualisierung (inkrementell)", "full": "Vollständiger Neuaufbau (komplett)" }, @@ -144,14 +254,15 @@ "favorites": "Nur Favoriten anzeigen" }, "bulkOperations": { - "title": "Massenoperationen", "selected": "{count} ausgewählt", - "sendToWorkflow": "Alle ausgewählten LoRAs an Workflow senden", - "copyAll": "Syntax aller ausgewählten LoRAs kopieren", - "refreshAll": "CivitAI-Metadaten für ausgewählte Modelle aktualisieren", - "moveAll": "Ausgewählte Modelle in Ordner verschieben", - "deleteAll": "Ausgewählte Modelle löschen", - "clear": "Auswahl löschen" + "selectedSuffix": "ausgewählt", + "viewSelected": "Klicken Sie, um ausgewählte Elemente anzuzeigen", + "sendToWorkflow": "An Workflow senden", + "copyAll": "Alle kopieren", + "refreshAll": "Alle aktualisieren", + "moveAll": "Alle verschieben", + "deleteAll": "Alle löschen", + "clear": "Leeren" }, "contextMenu": { "refreshMetadata": "Civitai-Daten aktualisieren", @@ -159,9 +270,9 @@ "copySyntax": "LoRA-Syntax kopieren", "copyFilename": "Modell-Dateiname kopieren", "copyRecipeSyntax": "Rezept-Syntax kopieren", - "sendToWorkflowAppend": "An Workflow senden (anhängen)", - "sendToWorkflowReplace": "An Workflow senden (ersetzen)", - "openExamplesFolder": "Beispiel-Ordner öffnen", + "sendToWorkflowAppend": "An Workflow senden (Anhängen)", + "sendToWorkflowReplace": "An Workflow senden (Ersetzen)", + "openExamples": "Beispiele-Ordner öffnen", "downloadExamples": "Beispielbilder herunterladen", "replacePreview": "Vorschau ersetzen", "setContentRating": "Inhaltsbewertung festlegen", @@ -172,92 +283,107 @@ "viewAllLoras": "Alle LoRAs anzeigen", "downloadMissingLoras": "Fehlende LoRAs herunterladen", "deleteRecipe": "Rezept löschen" - }, - "modal": { - "title": "LoRA Details", - "tabs": { - "examples": "Beispiele", - "description": "Modellbeschreibung", - "recipes": "Rezepte" - }, - "info": { - "filename": "Dateiname", - "modelName": "Modellname", - "baseModel": "Basis-Modell", - "fileSize": "Dateigröße", - "dateAdded": "Hinzugefügt am", - "triggerWords": "Auslösewörter", - "description": "Beschreibung", - "tags": "Tags", - "rating": "Bewertung", - "downloads": "Downloads", - "likes": "Likes", - "version": "Version" - }, - "actions": { - "copyTriggerWords": "Auslösewörter kopieren", - "copyLoraName": "LoRA-Name kopieren", - "sendToWorkflow": "An Workflow senden", - "viewOnCivitai": "Auf Civitai anzeigen", - "downloadExamples": "Beispielbilder herunterladen" - } } }, "recipes": { - "title": "LoRA Rezepte", + "title": "LoRA-Rezepte", "controls": { - "import": "Rezept importieren", + "import": { + "action": "Rezept importieren", + "title": "Ein Rezept aus Bild oder URL importieren", + "urlLocalPath": "URL / Lokaler Pfad", + "uploadImage": "Bild hochladen", + "urlSectionDescription": "Geben Sie eine Civitai-Bild-URL oder einen lokalen Dateipfad ein, um es als Rezept zu importieren.", + "imageUrlOrPath": "Bild-URL oder Dateipfad:", + "urlPlaceholder": "https://civitai.com/images/... oder C:/pfad/zu/bild.png", + "fetchImage": "Bild abrufen", + "uploadSectionDescription": "Laden Sie ein Bild mit LoRA-Metadaten hoch, um es als Rezept zu importieren.", + "selectImage": "Bild auswählen", + "recipeName": "Rezeptname", + "recipeNamePlaceholder": "Rezeptname eingeben", + "tagsOptional": "Tags (optional)", + "addTagPlaceholder": "Tag hinzufügen", + "addTag": "Hinzufügen", + "noTagsAdded": "Keine Tags hinzugefügt", + "lorasInRecipe": "LoRAs in diesem Rezept", + "downloadLocationPreview": "Download-Speicherort Vorschau:", + "useDefaultPath": "Standardpfad verwenden", + "useDefaultPathTooltip": "Wenn aktiviert, werden Dateien automatisch mit konfigurierten Pfadvorlagen organisiert", + "selectLoraRoot": "Wählen Sie ein LoRA-Stammverzeichnis", + "targetFolderPath": "Zielordnerpfad:", + "folderPathPlaceholder": "Ordnerpfad eingeben oder aus Baum unten auswählen...", + "createNewFolder": "Neuen Ordner erstellen", + "root": "Stammverzeichnis", + "browseFolders": "Ordner durchsuchen:", + "downloadAndSaveRecipe": "Herunterladen & Rezept speichern", + "downloadMissingLoras": "Fehlende LoRAs herunterladen", + "saveRecipe": "Rezept speichern", + "loraCountInfo": "({existing}/{total} in Bibliothek)", + "processingInput": "Eingabe wird verarbeitet...", + "analyzingMetadata": "Bild-Metadaten werden analysiert...", + "downloadingLoras": "LoRAs werden heruntergeladen...", + "savingRecipe": "Rezept wird gespeichert...", + "startingDownload": "Download für LoRA {current}/{total} wird gestartet", + "deletedFromCivitai": "Von Civitai gelöscht", + "inLibrary": "In Bibliothek", + "notInLibrary": "Nicht in Bibliothek", + "earlyAccessRequired": "Dieses LoRA erfordert eine Early Access-Zahlung zum Herunterladen.", + "earlyAccessEnds": "Early Access endet am {date}.", + "earlyAccess": "Early Access", + "verifyEarlyAccess": "Überprüfen Sie, dass Sie Early Access gekauft haben, bevor Sie herunterladen.", + "duplicateRecipesFound": "{count} identische(s) Rezept(e) in Ihrer Bibliothek gefunden", + "duplicateRecipesDescription": "Diese Rezepte enthalten dieselben LoRAs mit identischen Gewichtungen.", + "showDuplicates": "Duplikate anzeigen", + "hideDuplicates": "Duplikate ausblenden", + "loraCount": "{count} LoRAs", + "recipePreviewAlt": "Rezept-Vorschau", + "loraPreviewAlt": "LoRA-Vorschau", + "errors": { + "selectImageFile": "Bitte wählen Sie eine Bilddatei aus", + "enterUrlOrPath": "Bitte geben Sie eine URL oder einen Dateipfad ein", + "selectLoraRoot": "Bitte wählen Sie ein LoRA-Stammverzeichnis aus" + } + }, "refresh": { "title": "Rezeptliste aktualisieren" }, - "duplicates": { - "title": "Doppelte Rezepte finden" - }, - "filteredByLora": "Nach LoRA gefiltert", - "create": "Rezept erstellen", - "export": "Ausgewählte exportieren", - "downloadMissing": "Fehlende LoRAs herunterladen" + "filteredByLora": "Gefiltert nach LoRA" }, "duplicates": { - "found": "{count} doppelte Gruppen gefunden", + "found": "{count} Duplikat-Gruppen gefunden", "keepLatest": "Neueste Versionen behalten", "deleteSelected": "Ausgewählte löschen" }, - "card": { - "author": "Autor", - "loras": "{count} LoRAs", - "tags": "Tags", - "actions": { - "sendToWorkflow": "An Workflow senden", - "edit": "Rezept bearbeiten", - "duplicate": "Rezept duplizieren", - "export": "Rezept exportieren", - "delete": "Rezept löschen" + "contextMenu": { + "copyRecipe": { + "missingId": "Kann Rezept nicht kopieren: Fehlende Rezept-ID", + "failed": "Fehler beim Kopieren der Rezept-Syntax" + }, + "sendRecipe": { + "missingId": "Kann Rezept nicht senden: Fehlende Rezept-ID", + "failed": "Fehler beim Senden des Rezepts an Workflow" + }, + "viewLoras": { + "missingId": "Kann LoRAs nicht anzeigen: Fehlende Rezept-ID", + "noLorasFound": "Keine LoRAs in diesem Rezept gefunden", + "loadError": "Fehler beim Laden der Rezept-LoRAs: {message}" + }, + "downloadMissing": { + "missingId": "Kann LoRAs nicht herunterladen: Fehlende Rezept-ID", + "noMissingLoras": "Keine fehlenden LoRAs zum Herunterladen", + "getInfoFailed": "Fehler beim Abrufen der Informationen für fehlende LoRAs", + "prepareError": "Fehler beim Vorbereiten der LoRAs für den Download: {message}" } } }, "checkpoints": { - "title": "Checkpoint-Modelle", - "info": { - "filename": "Dateiname", - "modelName": "Modellname", - "baseModel": "Basis-Modell", - "fileSize": "Dateigröße", - "dateAdded": "Hinzugefügt am" - } + "title": "Checkpoint-Modelle" }, "embeddings": { - "title": "Embedding-Modelle", - "info": { - "filename": "Dateiname", - "modelName": "Modellname", - "triggerWords": "Auslösewörter", - "fileSize": "Dateigröße", - "dateAdded": "Hinzugefügt am" - } + "title": "Embedding-Modelle" }, "sidebar": { - "modelRoot": "Modell-Wurzel", + "modelRoot": "Modell-Stammverzeichnis", "collapseAll": "Alle Ordner einklappen", "pinToggle": "Seitenleiste anheften/lösen" }, @@ -270,66 +396,213 @@ "storage": "Speicher", "insights": "Erkenntnisse" }, - "overview": { - "title": "Übersicht", - "totalLoras": "LoRAs gesamt", - "totalCheckpoints": "Checkpoints gesamt", - "totalEmbeddings": "Embeddings gesamt", - "totalSize": "Gesamtgröße", - "favoriteModels": "Lieblingsmodelle" + "usage": { + "mostUsedLoras": "Meistgenutzte LoRAs", + "mostUsedCheckpoints": "Meistgenutzte Checkpoints", + "mostUsedEmbeddings": "Meistgenutzte Embeddings" + }, + "collection": { + "popularTags": "Beliebte Tags", + "modelTypes": "Modelltypen", + "collectionAnalysis": "Sammlungsanalyse" + }, + "storage": { + "storageUsage": "Speichernutzung", + "largestModels": "Größte Modelle", + "storageEfficiency": "Speicher vs. Nutzungseffizienz" + }, + "insights": { + "smartInsights": "Intelligente Erkenntnisse", + "recommendations": "Empfehlungen" }, "charts": { - "modelsByType": "Modelle nach Typ", - "modelsByBaseModel": "Modelle nach Basis-Modell", - "modelsBySize": "Modelle nach Dateigröße", - "modelsAddedOverTime": "Modelle über Zeit hinzugefügt" + "collectionOverview": "Sammlungsübersicht", + "baseModelDistribution": "Basis-Modell-Verteilung", + "usageTrends": "Nutzungstrends (Letzte 30 Tage)", + "usageDistribution": "Nutzungsverteilung" } }, "modals": { - "delete": { - "title": "Löschung bestätigen", - "message": "Sind Sie sicher, dass Sie dieses Modell löschen möchten?", - "warningMessage": "Diese Aktion kann nicht rückgängig gemacht werden.", - "confirm": "Löschen", - "cancel": "Abbrechen" - }, "exclude": { - "title": "Modell ausschließen", - "message": "Sind Sie sicher, dass Sie dieses Modell aus der Bibliothek ausschließen möchten?", - "confirm": "Ausschließen", - "cancel": "Abbrechen" + "confirm": "Ausschließen" }, "download": { "title": "Modell von URL herunterladen", + "titleWithType": "{type} von URL herunterladen", "url": "Civitai URL", + "civitaiUrl": "Civitai URL:", "placeholder": "https://civitai.com/models/...", - "locationPreview": "Download-Ort Vorschau", + "locationPreview": "Download-Speicherort Vorschau", "useDefaultPath": "Standardpfad verwenden", - "useDefaultPathTooltip": "Wenn aktiviert, werden Dateien automatisch mit konfigurierten Pfad-Vorlagen organisiert", - "selectRootDirectory": "Wurzelverzeichnis auswählen", + "useDefaultPathTooltip": "Wenn aktiviert, werden Dateien automatisch mit konfigurierten Pfadvorlagen organisiert", + "selectRootDirectory": "Wählen Sie ein Stammverzeichnis", + "selectModelRoot": "Modell-Stammverzeichnis auswählen:", + "selectTypeRoot": "{type}-Stammverzeichnis auswählen:", + "targetFolderPath": "Zielordnerpfad:", + "browseFolders": "Ordner durchsuchen:", + "createNewFolder": "Neuen Ordner erstellen", + "pathPlaceholder": "Ordnerpfad eingeben oder aus Baum unten auswählen...", + "root": "Stammverzeichnis", "download": "Herunterladen", - "cancel": "Abbrechen" + "fetchingVersions": "Modellversionen werden abgerufen...", + "versionPreview": "Versions-Vorschau", + "earlyAccess": "Early Access", + "earlyAccessTooltip": "Early Access erforderlich", + "inLibrary": "In Bibliothek", + "alreadyInLibrary": "Bereits in Bibliothek", + "autoOrganizedPath": "[Automatisch organisiert durch Pfadvorlage]", + "errors": { + "invalidUrl": "Ungültiges Civitai URL-Format", + "noVersions": "Keine Versionen für dieses Modell verfügbar" + }, + "status": { + "preparing": "Download wird vorbereitet...", + "downloadedPreview": "Vorschaubild heruntergeladen", + "downloadingFile": "{type}-Datei wird heruntergeladen", + "finalizing": "Download wird abgeschlossen..." + } }, "move": { - "title": "Modelle verschieben", - "selectFolder": "Zielordner auswählen", - "createFolder": "Neuen Ordner erstellen", - "folderName": "Ordnername", - "move": "Verschieben", - "cancel": "Abbrechen" + "title": "Modelle verschieben" }, "contentRating": { "title": "Inhaltsbewertung festlegen", "current": "Aktuell", "levels": { - "pg": "Alle Altersgruppen", - "pg13": "Ab 13 Jahren", - "r": "Eingeschränkt", - "x": "Nur Erwachsene", - "xxx": "Explizit" + "pg": "PG", + "pg13": "PG13", + "r": "R", + "x": "X", + "xxx": "XXX" } }, + "deleteModel": { + "title": "Modell löschen", + "message": "Sind Sie sicher, dass Sie dieses Modell und alle zugehörigen Dateien löschen möchten?" + }, + "excludeModel": { + "title": "Modell ausschließen", + "message": "Sind Sie sicher, dass Sie dieses Modell ausschließen möchten? Ausgeschlossene Modelle erscheinen nicht in Suchergebnissen oder Modelllisten." + }, + "deleteDuplicateRecipes": { + "title": "Doppelte Rezepte löschen", + "message": "Sind Sie sicher, dass Sie die ausgewählten doppelten Rezepte löschen möchten?", + "countMessage": "Rezepte werden dauerhaft gelöscht." + }, + "deleteDuplicateModels": { + "title": "Doppelte Modelle löschen", + "message": "Sind Sie sicher, dass Sie die ausgewählten doppelten Modelle löschen möchten?", + "countMessage": "Modelle werden dauerhaft gelöscht." + }, + "clearCache": { + "title": "Cache-Dateien löschen", + "message": "Sind Sie sicher, dass Sie alle Cache-Dateien löschen möchten?", + "description": "Dies entfernt alle zwischengespeicherten Modelldaten. Das System muss beim nächsten Start den Cache neu aufbauen, was je nach Größe Ihrer Modellsammlung einige Zeit dauern kann.", + "action": "Cache löschen" + }, + "bulkDelete": { + "title": "Mehrere Modelle löschen", + "message": "Sind Sie sicher, dass Sie alle ausgewählten Modelle und ihre zugehörigen Dateien löschen möchten?", + "countMessage": "Modelle werden dauerhaft gelöscht.", + "action": "Alle löschen" + }, + "exampleAccess": { + "title": "Lokale Beispielbilder", + "message": "Keine lokalen Beispielbilder für dieses Modell gefunden. Ansichtsoptionen:", + "downloadOption": { + "title": "Von Civitai herunterladen", + "description": "Remote-Beispiele lokal speichern für Offline-Nutzung und schnelleres Laden" + }, + "importOption": { + "title": "Eigene importieren", + "description": "Fügen Sie Ihre eigenen benutzerdefinierten Beispiele für dieses Modell hinzu" + }, + "footerNote": "Remote-Beispiele sind auch ohne lokale Kopien in den Modelldetails einsehbar" + }, + "moveModel": { + "targetLocationPreview": "Zielort-Vorschau:", + "selectModelRoot": "Modell-Stammverzeichnis auswählen:", + "targetFolderPath": "Zielordnerpfad:", + "browseFolders": "Ordner durchsuchen:", + "createNewFolder": "Neuen Ordner erstellen", + "pathPlaceholder": "Ordnerpfad eingeben oder aus Baum unten auswählen...", + "root": "Stammverzeichnis" + }, + "relinkCivitai": { + "title": "Mit Civitai neu verknüpfen", + "warning": "Warnung:", + "warningText": "Dies ist eine potentiell destruktive Operation. Das Neu-Verknüpfen wird:", + "warningList": { + "overrideMetadata": "Vorhandene Metadaten überschreiben", + "modifyHash": "Potentiell den Modell-Hash ändern", + "unintendedConsequences": "Möglicherweise andere unbeabsichtigte Folgen haben" + }, + "proceedText": "Fahren Sie nur fort, wenn Sie sicher sind, dass Sie das wollen.", + "urlLabel": "Civitai-Modell-URL:", + "urlPlaceholder": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "helpText": { + "title": "Fügen Sie eine beliebige Civitai-Modell-URL ein. Unterstützte Formate:", + "format1": "https://civitai.com/models/649516", + "format2": "https://civitai.com/models/649516?modelVersionId=726676", + "format3": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "note": "Hinweis: Wenn keine modelVersionId angegeben ist, wird die neueste Version verwendet." + }, + "confirmAction": "Neu-Verknüpfung bestätigen" + }, "model": { + "actions": { + "editModelName": "Modellname bearbeiten", + "editFileName": "Dateiname bearbeiten", + "editBaseModel": "Basis-Modell bearbeiten", + "viewOnCivitai": "Auf Civitai anzeigen", + "viewOnCivitaiText": "Auf Civitai anzeigen", + "viewCreatorProfile": "Ersteller-Profil anzeigen" + }, + "metadata": { + "version": "Version", + "fileName": "Dateiname", + "location": "Speicherort", + "baseModel": "Basis-Modell", + "size": "Größe", + "unknown": "Unbekannt", + "usageTips": "Nutzungstipps", + "additionalNotes": "Zusätzliche Notizen", + "notesHint": "Enter zum Speichern, Shift+Enter für neue Zeile", + "addNotesPlaceholder": "Fügen Sie hier Ihre Notizen hinzu...", + "aboutThisVersion": "Über diese Version" + }, + "notes": { + "saved": "Notizen erfolgreich gespeichert", + "saveFailed": "Fehler beim Speichern der Notizen" + }, + "usageTips": { + "addPresetParameter": "Voreingestellten Parameter hinzufügen...", + "strengthMin": "Stärke Min", + "strengthMax": "Stärke Max", + "strength": "Stärke", + "clipSkip": "Clip Skip", + "valuePlaceholder": "Wert", + "add": "Hinzufügen" + }, + "triggerWords": { + "label": "Trigger Words", + "noTriggerWordsNeeded": "Keine Trigger Words benötigt", + "edit": "Trigger Words bearbeiten", + "cancel": "Bearbeitung abbrechen", + "save": "Änderungen speichern", + "addPlaceholder": "Tippen zum Hinzufügen oder klicken Sie auf Vorschläge unten", + "copyWord": "Trigger Word kopieren", + "deleteWord": "Trigger Word löschen", + "suggestions": { + "noSuggestions": "Keine Vorschläge verfügbar", + "noTrainedWords": "Keine trainierten Wörter oder Klassen-Token in diesem Modell gefunden. Sie können manuell Trigger Words eingeben.", + "classToken": "Klassen-Token", + "classTokenDescription": "Zu Ihrem Prompt hinzufügen für beste Ergebnisse", + "wordSuggestions": "Wort-Vorschläge", + "wordsFound": "{count} Wörter gefunden", + "loading": "Vorschläge werden geladen..." + } + }, "description": { "noDescription": "Keine Modellbeschreibung verfügbar", "failedToLoad": "Fehler beim Laden der Modellbeschreibung", @@ -342,153 +615,84 @@ "updateFailed": "Fehler beim Aktualisieren der Modellbeschreibung" } }, - "actions": { - "editModelName": "Modellname bearbeiten", - "editFileName": "Dateiname bearbeiten", - "editBaseModel": "Basismodell bearbeiten", - "viewOnCivitai": "Auf Civitai anzeigen", - "viewOnCivitaiText": "Auf Civitai anzeigen", - "viewCreatorProfile": "Ersteller-Profil anzeigen" + "tabs": { + "examples": "Beispiele", + "description": "Modellbeschreibung", + "recipes": "Rezepte" }, - "metadata": { - "version": "Version", - "fileName": "Dateiname", - "location": "Standort", - "baseModel": "Basismodell", - "size": "Größe", - "unknown": "Unbekannt", - "usageTips": "Verwendungstipps", - "additionalNotes": "Zusätzliche Notizen", - "notesHint": "Enter zum Speichern, Shift+Enter für neue Zeile", - "addNotesPlaceholder": "Fügen Sie hier Ihre Notizen hinzu...", - "aboutThisVersion": "Über diese Version", - "validation": { - "nameTooLong": "Modellname ist auf 100 Zeichen begrenzt", - "nameEmpty": "Modellname darf nicht leer sein" - }, - "messages": { - "nameUpdated": "Modellname erfolgreich aktualisiert", - "nameUpdateFailed": "Aktualisierung des Modellnamens fehlgeschlagen", - "baseModelUpdated": "Basismodell erfolgreich aktualisiert", - "baseModelUpdateFailed": "Aktualisierung des Basismodells fehlgeschlagen" - } - }, - "notes": { - "saved": "Notizen erfolgreich gespeichert", - "saveFailed": "Speichern der Notizen fehlgeschlagen" - }, - "usageTips": { - "addPresetParameter": "Voreingestellten Parameter hinzufügen...", - "strengthMin": "Stärke Min", - "strengthMax": "Stärke Max", - "strength": "Stärke", - "clipSkip": "Clip Skip", - "valuePlaceholder": "Wert", - "add": "Hinzufügen" - }, - "tags": { - "messages": { - "updated": "Tags erfolgreich aktualisiert", - "updateFailed": "Aktualisierung der Tags fehlgeschlagen" - }, - "validation": { - "maxLength": "Tag sollte 30 Zeichen nicht überschreiten", - "maxCount": "Maximal 30 Tags erlaubt", - "duplicate": "Dieser Tag existiert bereits" - } - }, - "recipeTab": { - "noRecipesFound": "Keine Rezepte gefunden, die diese LoRA verwenden.", - "loadingRecipes": "Rezepte werden geladen...", - "errorLoadingRecipes": "Fehler beim Laden der Rezepte. Bitte versuchen Sie es später erneut." + "loading": { + "exampleImages": "Beispielbilder werden geladen...", + "description": "Modellbeschreibung wird geladen...", + "recipes": "Rezepte werden geladen...", + "examples": "Beispiele werden geladen..." } } }, - "errors": { - "general": "Ein Fehler ist aufgetreten", - "networkError": "Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.", - "serverError": "Serverfehler. Bitte versuchen Sie es später erneut.", - "fileNotFound": "Datei nicht gefunden", - "invalidFile": "Ungültiges Dateiformat", - "uploadFailed": "Upload fehlgeschlagen", - "downloadFailed": "Download fehlgeschlagen", - "saveFailed": "Speichern fehlgeschlagen", - "loadFailed": "Laden fehlgeschlagen", - "deleteFailed": "Löschen fehlgeschlagen", - "moveFailed": "Verschieben fehlgeschlagen", - "copyFailed": "Kopieren fehlgeschlagen", - "fetchFailed": "Daten von Civitai konnten nicht abgerufen werden", - "invalidUrl": "Ungültiges URL-Format", - "missingPermissions": "Unzureichende Berechtigungen" - }, - "success": { - "saved": "Erfolgreich gespeichert", - "deleted": "Erfolgreich gelöscht", - "moved": "Erfolgreich verschoben", - "copied": "Erfolgreich kopiert", - "downloaded": "Erfolgreich heruntergeladen", - "uploaded": "Erfolgreich hochgeladen", - "refreshed": "Erfolgreich aktualisiert", - "exported": "Erfolgreich exportiert", - "imported": "Erfolgreich importiert" + "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" + } }, "keyboard": { - "navigation": "Tastaturnavigation:", + "navigation": "Tastatur-Navigation:", "shortcuts": { "pageUp": "Eine Seite nach oben scrollen", "pageDown": "Eine Seite nach unten scrollen", "home": "Zum Anfang springen", - "end": "Zum Ende springen", - "bulkMode": "Massenmodus umschalten", - "search": "Suche fokussieren", - "escape": "Modal/Panel schließen" + "end": "Zum Ende springen" } }, "initialization": { "title": "Initialisierung", - "message": "Vorbereitung Ihres Arbeitsbereichs...", - "status": "Initialisierung...", - "estimatingTime": "Zeit schätzen...", + "message": "Ihr Arbeitsbereich wird vorbereitet...", + "status": "Initialisierung läuft...", + "estimatingTime": "Zeit wird geschätzt...", "loras": { - "title": "LoRA Manager initialisieren", - "message": "LoRA-Cache wird gescannt und erstellt. Dies kann einige Minuten dauern..." + "title": "LoRA Manager wird initialisiert", + "message": "LoRA-Cache wird gescannt und aufgebaut. Dies kann einige Minuten dauern..." }, "checkpoints": { - "title": "Checkpoint Manager initialisieren", - "message": "Checkpoint-Cache wird gescannt und erstellt. Dies kann einige Minuten dauern..." + "title": "Checkpoint Manager wird initialisiert", + "message": "Checkpoint-Cache wird gescannt und aufgebaut. Dies kann einige Minuten dauern..." }, "embeddings": { - "title": "Embedding Manager initialisieren", - "message": "Embedding-Cache wird gescannt und erstellt. Dies kann einige Minuten dauern..." + "title": "Embedding Manager wird initialisiert", + "message": "Embedding-Cache wird gescannt und aufgebaut. Dies kann einige Minuten dauern..." }, "recipes": { - "title": "Rezept Manager initialisieren", + "title": "Rezept Manager wird initialisiert", "message": "Rezepte werden geladen und verarbeitet. Dies kann einige Minuten dauern..." }, "statistics": { - "title": "Statistiken initialisieren", + "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" + "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 neue Modelle schnell herunterzuladen und zu installieren.", - "alt": "Civitai 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 die zukünftige Verwendung zu 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 dem Filter-Button im Header.", + "description": "Filtern Sie Modelle nach Tags oder Basis-Modelltyp mit der Filter-Schaltfläche in der Kopfzeile.", "alt": "Modelle filtern" }, "search": { @@ -496,65 +700,357 @@ "description": "Drücken Sie Strg+F (Cmd+F auf Mac), um schnell in Ihrer aktuellen Ansicht zu suchen.", "alt": "Schnellsuche" } - }, - "steps": { - "scanning": "Modelldateien scannen...", - "processing": "Metadaten verarbeiten...", - "building": "Cache erstellen...", - "finalizing": "Abschließen..." } }, "duplicates": { - "found": "{count} doppelte Gruppen gefunden", - "showNotification": "Duplikate-Benachrichtigung anzeigen", + "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 Vorschaubilder haben.", - "keepOne": "Behalten Sie nur eine Version (vorzugsweise mit besseren Metadaten/Vorschaubildern) und löschen Sie die anderen sicher." + "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." } }, - "tooltips": { - "refresh": "Modellliste aktualisieren", - "bulkOperations": "Mehrere Modelle für Batch-Operationen auswählen", - "favorites": "Nur Lieblingsmodelle anzeigen", - "duplicates": "Doppelte Modelle finden und verwalten", - "search": "Modelle nach Name, Tags oder anderen Kriterien suchen", - "filter": "Modelle nach verschiedenen Kriterien filtern", - "sort": "Modelle nach verschiedenen Attributen sortieren", - "backToTop": "Zurück zum Seitenanfang scrollen" - }, - "modelCard": { - "actions": { - "addToFavorites": "Zu Favoriten hinzufügen", - "removeFromFavorites": "Aus Favoriten entfernen", - "viewOnCivitai": "Auf Civitai anzeigen", - "notAvailableFromCivitai": "Nicht verfügbar auf Civitai", - "sendToWorkflow": "An ComfyUI senden (Klick: Anhängen, Shift+Klick: Ersetzen)", - "copyLoRASyntax": "LoRA-Syntax kopieren", - "checkpointNameCopied": "Checkpoint-Name kopiert", - "toggleBlur": "Unschärfe umschalten", - "show": "Anzeigen", - "openExampleImages": "Beispielbilder-Ordner öffnen" + "uiHelpers": { + "clipboard": { + "copied": "In Zwischenablage kopiert", + "copyFailed": "Kopieren fehlgeschlagen" }, - "nsfw": { - "matureContent": "Erwachseneninhalte", - "xxxRated": "XXX-bewertete Inhalte", - "xRated": "X-bewertete Inhalte", - "rRated": "R-bewertete Inhalte" + "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" }, - "favorites": { - "added": "Zu Favoriten hinzugefügt", - "removed": "Aus Favoriten entfernt", - "updateFailed": "Favoriten-Status aktualisierung fehlgeschlagen" + "workflow": { + "noSupportedNodes": "Keine unterstützten Zielknoten im Workflow gefunden", + "communicationFailed": "Fehler bei der Kommunikation mit ComfyUI" }, - "sendToWorkflow": { - "checkpointNotImplemented": "Checkpoint an Workflow senden - Funktion noch zu implementieren" + "nodeSelector": { + "recipe": "Rezept", + "lora": "LoRA", + "replace": "Ersetzen", + "append": "Anhängen", + "selectTargetNode": "Zielknoten auswählen", + "sendToAll": "An alle senden" }, "exampleImages": { - "checkError": "Fehler beim Überprüfen der Beispielbilder", - "missingHash": "Fehlende Modell-Hash-Informationen.", - "noRemoteImagesAvailable": "Keine Remote-Beispielbilder für dieses Modell auf Civitai verfügbar" + "opened": "Beispielbilder-Ordner geöffnet", + "openingFolder": "Beispielbilder-Ordner wird geöffnet", + "failedToOpen": "Fehler beim Öffnen des Beispielbilder-Ordners" + } + }, + "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", + "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", + "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" + } + }, + "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! ❤️" + }, + "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" + }, + "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}", + "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", + "noRecipeId": "Keine Rezept-ID verfügbar", + "copyFailed": "Fehler beim Kopieren der Rezept-Syntax: {message}", + "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}", + "cannotSend": "Kann Rezept nicht senden: Fehlende Rezept-ID", + "sendFailed": "Fehler beim Senden des Rezepts an Workflow", + "sendError": "Fehler beim Senden des Rezepts an Workflow", + "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}", + "importFailed": "Import fehlgeschlagen: {message}", + "folderTreeFailed": "Fehler beim Laden des Ordnerbaums", + "folderTreeError": "Fehler beim Laden des Ordnerbaums" + }, + "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", + "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", + "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}" + }, + "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}", + "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}", + "settingsUpdated": "Einstellungen aktualisiert: {setting}", + "compactModeToggled": "Kompakt-Modus {state}", + "settingSaveFailed": "Fehler beim Speichern der Einstellung: {message}", + "displayDensitySet": "Anzeige-Dichte auf {density} gesetzt", + "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" + }, + "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", + "importFailed": "Fehler beim Importieren der Beispielbilder: {message}" + }, + "triggerWords": { + "loadFailed": "Konnte trainierte Wörter nicht laden", + "tooLong": "Trigger Word sollte 30 Wörter nicht überschreiten", + "tooMany": "Maximal 30 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", + "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}", + "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}", + "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", + "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}" + } + }, + "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" } } -} \ No newline at end of file +} diff --git a/locales/es.json b/locales/es.json index 2553f491..5641bb9d 100644 --- a/locales/es.json +++ b/locales/es.json @@ -1,66 +1,24 @@ { "common": { - "file": "Archivo", - "folder": "Carpeta", - "name": "Nombre", - "size": "Tamaño", - "date": "Fecha", - "type": "Tipo", - "path": "Ruta", - "fileSize": { - "zero": "0 Bytes", - "bytes": "Bytes", - "kb": "KB", - "mb": "MB", - "gb": "GB", - "tb": "TB" - }, "actions": { "save": "Guardar", "cancel": "Cancelar", "delete": "Eliminar", - "edit": "Editar", - "copy": "Copiar", "move": "Mover", "refresh": "Actualizar", - "download": "Descargar", - "upload": "Subir", - "search": "Buscar", - "filter": "Filtrar", - "sort": "Ordenar", - "select": "Seleccionar", - "selectAll": "Seleccionar todo", - "deselectAll": "Deseleccionar todo", - "confirm": "Confirmar", - "close": "Cerrar", "back": "Atrás", "next": "Siguiente", - "previous": "Anterior", - "view": "Ver", - "preview": "Vista previa", - "details": "Detalles", "backToTop": "Volver arriba", "settings": "Configuración", - "help": "Ayuda", - "about": "Acerca de" + "help": "Ayuda" }, "status": { "loading": "Cargando...", - "saving": "Guardando...", - "saved": "Guardado", - "error": "Error", - "success": "Éxito", - "warning": "Advertencia", - "info": "Información", - "processing": "Procesando...", - "completed": "Completado", - "failed": "Fallido", - "cancelled": "Cancelado", - "pending": "Pendiente", - "ready": "Listo" + "unknown": "Desconocido", + "date": "Fecha", + "version": "Versión" }, "language": { - "current": "Idioma", "select": "Seleccionar idioma", "select_help": "Elige tu idioma preferido para la interfaz", "english": "English", @@ -72,10 +30,51 @@ "korean": "한국어", "french": "Français", "spanish": "Español" + }, + "fileSize": { + "zero": "0 Bytes", + "bytes": "Bytes", + "kb": "KB", + "mb": "MB", + "gb": "GB", + "tb": "TB" + } + }, + "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" + }, + "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" + }, + "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" } }, "header": { - "appTitle": "Gestor LoRA", + "appTitle": "Gestor de LoRA", "navigation": { "loras": "LoRAs", "recipes": "Recetas", @@ -100,7 +99,7 @@ "tags": "Etiquetas", "creator": "Creador", "title": "Título de la receta", - "loraName": "Nombre del archivo LoRA", + "loraName": "Nombre de archivo LoRA", "loraModel": "Nombre del modelo LoRA" } }, @@ -115,10 +114,121 @@ "switchToLight": "Cambiar a tema claro", "switchToDark": "Cambiar a tema oscuro", "switchToAuto": "Cambiar a tema automático" + }, + "actions": { + "checkUpdates": "Comprobar actualizaciones", + "support": "Soporte" + } + }, + "settings": { + "civitaiApiKey": "Clave API de Civitai", + "civitaiApiKeyPlaceholder": "Introduce tu clave API de Civitai", + "civitaiApiKeyHelp": "Utilizada para autenticación al descargar modelos de Civitai", + "sections": { + "contentFiltering": "Filtrado de contenido", + "videoSettings": "Configuración de video", + "layoutSettings": "Configuración de diseño", + "folderSettings": "Configuración de carpetas", + "downloadPathTemplates": "Plantillas de rutas de descarga", + "exampleImages": "Imágenes de ejemplo", + "misc": "Varios" + }, + "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" + }, + "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" + }, + "layoutSettings": { + "displayDensity": "Densidad de visualización", + "displayDensityOptions": { + "default": "Predeterminado", + "medium": "Medio", + "compact": "Compacto" + }, + "displayDensityHelp": "Elige cuántas tarjetas mostrar por fila:", + "displayDensityDetails": { + "default": "Predeterminado: 5 (1080p), 6 (2K), 8 (4K)", + "medium": "Medio: 6 (1080p), 7 (2K), 9 (4K)", + "compact": "Compacto: 7 (1080p), 8 (2K), 10 (4K)" + }, + "displayDensityWarning": "Advertencia: Densidades más altas pueden causar problemas de rendimiento en sistemas con recursos limitados.", + "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:", + "cardInfoDisplayDetails": { + "always": "Siempre visible: Los encabezados y pies de página siempre son visibles", + "hover": "Mostrar al pasar el ratón: Los encabezados y pies de página solo aparecen al pasar el ratón sobre una tarjeta" + } + }, + "folderSettings": { + "defaultLoraRoot": "Raíz predeterminada de LoRA", + "defaultLoraRootHelp": "Establecer el directorio raíz predeterminado de LoRA para descargas, importaciones y movimientos", + "defaultCheckpointRoot": "Raíz predeterminada de checkpoint", + "defaultCheckpointRootHelp": "Establecer el directorio raíz predeterminado de checkpoint para descargas, importaciones y movimientos", + "defaultEmbeddingRoot": "Raíz predeterminada de embedding", + "defaultEmbeddingRootHelp": "Establecer el directorio raíz predeterminado de embedding para descargas, importaciones y movimientos", + "noDefault": "Sin predeterminado" + }, + "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", + "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)", + "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" + }, + "misc": { + "includeTriggerWords": "Incluir palabras clave en la sintaxis de LoRA", + "includeTriggerWordsHelp": "Incluir palabras clave entrenadas al copiar la sintaxis de LoRA al portapapeles" } }, "loras": { - "title": "Modelos LoRA", "controls": { "sort": { "title": "Ordenar modelos por...", @@ -129,13 +239,13 @@ "dateDesc": "Más reciente", "dateAsc": "Más antiguo", "size": "Tamaño de archivo", - "sizeDesc": "Más grande", - "sizeAsc": "Más pequeño" + "sizeDesc": "Mayor", + "sizeAsc": "Menor" }, "refresh": { "title": "Actualizar lista de modelos", "quick": "Actualización rápida (incremental)", - "full": "Reconstrucción completa (completa)" + "full": "Reconstrucción completa" }, "fetch": "Obtener de Civitai", "download": "Descargar desde URL", @@ -144,24 +254,25 @@ "favorites": "Mostrar solo favoritos" }, "bulkOperations": { - "title": "Operaciones masivas", - "selected": "{count} seleccionado(s)", - "sendToWorkflow": "Enviar todos los LoRAs seleccionados al flujo de trabajo", - "copyAll": "Copiar sintaxis de todos los LoRAs seleccionados", - "refreshAll": "Actualizar metadatos de CivitAI para modelos seleccionados", - "moveAll": "Mover modelos seleccionados a carpeta", - "deleteAll": "Eliminar modelos seleccionados", - "clear": "Limpiar selección" + "selected": "{count} seleccionados", + "selectedSuffix": "seleccionados", + "viewSelected": "Clic para ver elementos seleccionados", + "sendToWorkflow": "Enviar al flujo de trabajo", + "copyAll": "Copiar todo", + "refreshAll": "Actualizar todo", + "moveAll": "Mover todo", + "deleteAll": "Eliminar todo", + "clear": "Limpiar" }, "contextMenu": { "refreshMetadata": "Actualizar datos de Civitai", - "relinkCivitai": "Volver a vincular con Civitai", - "copySyntax": "Copiar sintaxis LoRA", + "relinkCivitai": "Re-vincular a Civitai", + "copySyntax": "Copiar sintaxis de LoRA", "copyFilename": "Copiar nombre de archivo del modelo", "copyRecipeSyntax": "Copiar sintaxis de receta", - "sendToWorkflowAppend": "Enviar al flujo de trabajo (agregar)", - "sendToWorkflowReplace": "Enviar al flujo de trabajo (reemplazar)", - "openExamplesFolder": "Abrir carpeta de ejemplos", + "sendToWorkflowAppend": "Enviar al flujo de trabajo (Añadir)", + "sendToWorkflowReplace": "Enviar al flujo de trabajo (Reemplazar)", + "openExamples": "Abrir carpeta de ejemplos", "downloadExamples": "Descargar imágenes de ejemplo", "replacePreview": "Reemplazar vista previa", "setContentRating": "Establecer clasificación de contenido", @@ -172,94 +283,109 @@ "viewAllLoras": "Ver todos los LoRAs", "downloadMissingLoras": "Descargar LoRAs faltantes", "deleteRecipe": "Eliminar receta" - }, - "modal": { - "title": "Detalles LoRA", - "tabs": { - "examples": "Ejemplos", - "description": "Descripción del modelo", - "recipes": "Recetas" - }, - "info": { - "filename": "Nombre de archivo", - "modelName": "Nombre del modelo", - "baseModel": "Modelo base", - "fileSize": "Tamaño de archivo", - "dateAdded": "Fecha de adición", - "triggerWords": "Palabras clave", - "description": "Descripción", - "tags": "Etiquetas", - "rating": "Calificación", - "downloads": "Descargas", - "likes": "Me gusta", - "version": "Versión" - }, - "actions": { - "copyTriggerWords": "Copiar palabras clave", - "copyLoraName": "Copiar nombre LoRA", - "sendToWorkflow": "Enviar al flujo de trabajo", - "viewOnCivitai": "Ver en Civitai", - "downloadExamples": "Descargar imágenes de ejemplo" - } } }, "recipes": { - "title": "Recetas LoRA", + "title": "Recetas de LoRA", "controls": { - "import": "Importar receta", + "import": { + "action": "Importar receta", + "title": "Importar una receta desde imagen o URL", + "urlLocalPath": "URL / Ruta local", + "uploadImage": "Subir imagen", + "urlSectionDescription": "Introduce una URL de imagen de Civitai o ruta de archivo local para importar como receta.", + "imageUrlOrPath": "URL de imagen o ruta de archivo:", + "urlPlaceholder": "https://civitai.com/images/... o C:/ruta/a/imagen.png", + "fetchImage": "Obtener imagen", + "uploadSectionDescription": "Sube una imagen con metadatos de LoRA para importar como receta.", + "selectImage": "Seleccionar imagen", + "recipeName": "Nombre de receta", + "recipeNamePlaceholder": "Introduce nombre de receta", + "tagsOptional": "Etiquetas (opcional)", + "addTagPlaceholder": "Añadir una etiqueta", + "addTag": "Añadir", + "noTagsAdded": "No se añadieron etiquetas", + "lorasInRecipe": "LoRAs en esta receta", + "downloadLocationPreview": "Vista previa de ubicación de descarga:", + "useDefaultPath": "Usar ruta predeterminada", + "useDefaultPathTooltip": "Cuando está habilitado, los archivos se organizan automáticamente usando plantillas de rutas configuradas", + "selectLoraRoot": "Selecciona un directorio raíz de LoRA", + "targetFolderPath": "Ruta de carpeta de destino:", + "folderPathPlaceholder": "Escribe la ruta de la carpeta o selecciona del árbol de abajo...", + "createNewFolder": "Crear nueva carpeta", + "root": "Raíz", + "browseFolders": "Explorar carpetas:", + "downloadAndSaveRecipe": "Descargar y guardar receta", + "downloadMissingLoras": "Descargar LoRAs faltantes", + "saveRecipe": "Guardar receta", + "loraCountInfo": "({existing}/{total} en la biblioteca)", + "processingInput": "Procesando entrada...", + "analyzingMetadata": "Analizando metadatos de imagen...", + "downloadingLoras": "Descargando LoRAs...", + "savingRecipe": "Guardando receta...", + "startingDownload": "Iniciando descarga para LoRA {current}/{total}", + "deletedFromCivitai": "Eliminado de Civitai", + "inLibrary": "En la biblioteca", + "notInLibrary": "No en la biblioteca", + "earlyAccessRequired": "Este LoRA requiere pago de acceso temprano para descargar.", + "earlyAccessEnds": "El acceso temprano termina el {date}.", + "earlyAccess": "Acceso temprano", + "verifyEarlyAccess": "Verifica que hayas comprado el acceso temprano antes de descargar.", + "duplicateRecipesFound": "{count} receta(s) idéntica(s) encontrada(s) en tu biblioteca", + "duplicateRecipesDescription": "Estas recetas contienen los mismos LoRAs con pesos idénticos.", + "showDuplicates": "Mostrar duplicados", + "hideDuplicates": "Ocultar duplicados", + "loraCount": "{count} LoRAs", + "recipePreviewAlt": "Vista previa de receta", + "loraPreviewAlt": "Vista previa de LoRA", + "errors": { + "selectImageFile": "Por favor selecciona un archivo de imagen", + "enterUrlOrPath": "Por favor introduce una URL o ruta de archivo", + "selectLoraRoot": "Por favor selecciona un directorio raíz de LoRA" + } + }, "refresh": { "title": "Actualizar lista de recetas" }, - "duplicates": { - "title": "Encontrar recetas duplicadas" - }, - "filteredByLora": "Filtrado por LoRA", - "create": "Crear receta", - "export": "Exportar seleccionados", - "downloadMissing": "Descargar LoRAs faltantes" + "filteredByLora": "Filtrado por LoRA" }, "duplicates": { - "found": "Se encontraron {count} grupos duplicados", - "keepLatest": "Mantener últimas versiones", + "found": "Se encontraron {count} grupos de duplicados", + "keepLatest": "Mantener versiones más recientes", "deleteSelected": "Eliminar seleccionados" }, - "card": { - "author": "Autor", - "loras": "{count} LoRAs", - "tags": "Etiquetas", - "actions": { - "sendToWorkflow": "Enviar al flujo de trabajo", - "edit": "Editar receta", - "duplicate": "Duplicar receta", - "export": "Exportar receta", - "delete": "Eliminar receta" + "contextMenu": { + "copyRecipe": { + "missingId": "No se puede copiar la receta: Falta ID de receta", + "failed": "Error al copiar sintaxis de receta" + }, + "sendRecipe": { + "missingId": "No se puede enviar la receta: Falta ID de receta", + "failed": "Error al enviar receta al flujo de trabajo" + }, + "viewLoras": { + "missingId": "No se pueden ver LoRAs: Falta ID de receta", + "noLorasFound": "No se encontraron LoRAs en esta receta", + "loadError": "Error cargando LoRAs de receta: {message}" + }, + "downloadMissing": { + "missingId": "No se pueden descargar LoRAs: Falta ID de receta", + "noMissingLoras": "No hay LoRAs faltantes para descargar", + "getInfoFailed": "Error al obtener información de LoRAs faltantes", + "prepareError": "Error preparando LoRAs para descarga: {message}" } } }, "checkpoints": { - "title": "Modelos Checkpoint", - "info": { - "filename": "Nombre de archivo", - "modelName": "Nombre del modelo", - "baseModel": "Modelo base", - "fileSize": "Tamaño de archivo", - "dateAdded": "Fecha de adición" - } + "title": "Modelos checkpoint" }, "embeddings": { - "title": "Modelos Embedding", - "info": { - "filename": "Nombre de archivo", - "modelName": "Nombre del modelo", - "triggerWords": "Palabras clave", - "fileSize": "Tamaño de archivo", - "dateAdded": "Fecha de adición" - } + "title": "Modelos embedding" }, "sidebar": { - "modelRoot": "Raíz de modelos", - "collapseAll": "Contraer todas las carpetas", - "pinToggle": "Fijar/Desfijar barra lateral" + "modelRoot": "Raíz del modelo", + "collapseAll": "Colapsar todas las carpetas", + "pinToggle": "Anclar/Desanclar barra lateral" }, "statistics": { "title": "Estadísticas", @@ -270,66 +396,213 @@ "storage": "Almacenamiento", "insights": "Perspectivas" }, - "overview": { - "title": "Resumen", - "totalLoras": "Total LoRAs", - "totalCheckpoints": "Total Checkpoints", - "totalEmbeddings": "Total Embeddings", - "totalSize": "Tamaño total", - "favoriteModels": "Modelos favoritos" + "usage": { + "mostUsedLoras": "LoRAs más utilizados", + "mostUsedCheckpoints": "Checkpoints más utilizados", + "mostUsedEmbeddings": "Embeddings más utilizados" + }, + "collection": { + "popularTags": "Etiquetas populares", + "modelTypes": "Tipos de modelo", + "collectionAnalysis": "Análisis de colección" + }, + "storage": { + "storageUsage": "Uso de almacenamiento", + "largestModels": "Modelos más grandes", + "storageEfficiency": "Eficiencia de almacenamiento vs uso" + }, + "insights": { + "smartInsights": "Perspectivas inteligentes", + "recommendations": "Recomendaciones" }, "charts": { - "modelsByType": "Modelos por tipo", - "modelsByBaseModel": "Modelos por modelo base", - "modelsBySize": "Modelos por tamaño de archivo", - "modelsAddedOverTime": "Modelos agregados a lo largo del tiempo" + "collectionOverview": "Resumen de colección", + "baseModelDistribution": "Distribución de modelo base", + "usageTrends": "Tendencias de uso (Últimos 30 días)", + "usageDistribution": "Distribución de uso" } }, "modals": { - "delete": { - "title": "Confirmar eliminación", - "message": "¿Estás seguro de que quieres eliminar este modelo?", - "warningMessage": "Esta acción no se puede deshacer.", - "confirm": "Eliminar", - "cancel": "Cancelar" - }, "exclude": { - "title": "Excluir modelo", - "message": "¿Estás seguro de que quieres excluir este modelo de la biblioteca?", - "confirm": "Excluir", - "cancel": "Cancelar" + "confirm": "Excluir" }, "download": { "title": "Descargar modelo desde URL", + "titleWithType": "Descargar {type} desde URL", "url": "URL de Civitai", + "civitaiUrl": "URL de Civitai:", "placeholder": "https://civitai.com/models/...", "locationPreview": "Vista previa de ubicación de descarga", "useDefaultPath": "Usar ruta predeterminada", - "useDefaultPathTooltip": "Cuando está habilitado, los archivos se organizan automáticamente usando plantillas de ruta configuradas", - "selectRootDirectory": "Seleccionar directorio raíz", + "useDefaultPathTooltip": "Cuando está habilitado, los archivos se organizan automáticamente usando plantillas de rutas configuradas", + "selectRootDirectory": "Selecciona un directorio raíz", + "selectModelRoot": "Seleccionar raíz del modelo:", + "selectTypeRoot": "Seleccionar raíz de {type}:", + "targetFolderPath": "Ruta de carpeta de destino:", + "browseFolders": "Explorar carpetas:", + "createNewFolder": "Crear nueva carpeta", + "pathPlaceholder": "Escribe la ruta de la carpeta o selecciona del árbol de abajo...", + "root": "Raíz", "download": "Descargar", - "cancel": "Cancelar" + "fetchingVersions": "Obteniendo versiones del modelo...", + "versionPreview": "Vista previa de versión", + "earlyAccess": "Acceso temprano", + "earlyAccessTooltip": "Acceso temprano requerido", + "inLibrary": "En la biblioteca", + "alreadyInLibrary": "Ya en la biblioteca", + "autoOrganizedPath": "[Auto-organizado por plantilla de ruta]", + "errors": { + "invalidUrl": "Formato de URL de Civitai inválido", + "noVersions": "No hay versiones disponibles para este modelo" + }, + "status": { + "preparing": "Preparando descarga...", + "downloadedPreview": "Imagen de vista previa descargada", + "downloadingFile": "Descargando archivo de {type}", + "finalizing": "Finalizando descarga..." + } }, "move": { - "title": "Mover modelos", - "selectFolder": "Seleccionar carpeta de destino", - "createFolder": "Crear nueva carpeta", - "folderName": "Nombre de carpeta", - "move": "Mover", - "cancel": "Cancelar" + "title": "Mover modelos" }, "contentRating": { "title": "Establecer clasificación de contenido", "current": "Actual", "levels": { - "pg": "Para todos los públicos", - "pg13": "13 años y más", - "r": "Restringido", - "x": "Solo adultos", - "xxx": "Explícito" + "pg": "PG", + "pg13": "PG13", + "r": "R", + "x": "X", + "xxx": "XXX" } }, + "deleteModel": { + "title": "Eliminar modelo", + "message": "¿Estás seguro de que quieres eliminar este modelo y todos los archivos asociados?" + }, + "excludeModel": { + "title": "Excluir modelo", + "message": "¿Estás seguro de que quieres excluir este modelo? Los modelos excluidos no aparecerán en búsquedas o listas de modelos." + }, + "deleteDuplicateRecipes": { + "title": "Eliminar recetas duplicadas", + "message": "¿Estás seguro de que quieres eliminar las recetas duplicadas seleccionadas?", + "countMessage": "recetas serán eliminadas permanentemente." + }, + "deleteDuplicateModels": { + "title": "Eliminar modelos duplicados", + "message": "¿Estás seguro de que quieres eliminar los modelos duplicados seleccionados?", + "countMessage": "modelos serán eliminados permanentemente." + }, + "clearCache": { + "title": "Limpiar archivos de caché", + "message": "¿Estás seguro de que quieres limpiar todos los archivos de caché?", + "description": "Esto eliminará todos los datos del modelo en caché. El sistema necesitará reconstruir la caché en el próximo inicio, lo que puede tomar tiempo dependiendo del tamaño de tu colección de modelos.", + "action": "Limpiar caché" + }, + "bulkDelete": { + "title": "Eliminar múltiples modelos", + "message": "¿Estás seguro de que quieres eliminar todos los modelos seleccionados y sus archivos asociados?", + "countMessage": "modelos serán eliminados permanentemente.", + "action": "Eliminar todo" + }, + "exampleAccess": { + "title": "Imágenes de ejemplo locales", + "message": "No se encontraron imágenes de ejemplo locales para este modelo. Opciones de visualización:", + "downloadOption": { + "title": "Descargar de Civitai", + "description": "Guardar ejemplos remotos localmente para uso sin conexión y carga más rápida" + }, + "importOption": { + "title": "Importar los tuyos", + "description": "Añade tus propios ejemplos personalizados para este modelo" + }, + "footerNote": "Los ejemplos remotos aún se pueden ver en los detalles del modelo incluso sin copias locales" + }, + "moveModel": { + "targetLocationPreview": "Vista previa de ubicación de destino:", + "selectModelRoot": "Seleccionar raíz del modelo:", + "targetFolderPath": "Ruta de carpeta de destino:", + "browseFolders": "Explorar carpetas:", + "createNewFolder": "Crear nueva carpeta", + "pathPlaceholder": "Escribe la ruta de la carpeta o selecciona del árbol de abajo...", + "root": "Raíz" + }, + "relinkCivitai": { + "title": "Re-vincular a Civitai", + "warning": "Advertencia:", + "warningText": "Esta es una operación potencialmente destructiva. Re-vincular hará:", + "warningList": { + "overrideMetadata": "Sobrescribir metadatos existentes", + "modifyHash": "Potencialmente modificar el hash del modelo", + "unintendedConsequences": "Puede tener otras consecuencias no deseadas" + }, + "proceedText": "Solo procede si estás seguro de que esto es lo que quieres.", + "urlLabel": "URL del modelo de Civitai:", + "urlPlaceholder": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "helpText": { + "title": "Pega cualquier URL de modelo de Civitai. Formatos soportados:", + "format1": "https://civitai.com/models/649516", + "format2": "https://civitai.com/models/649516?modelVersionId=726676", + "format3": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "note": "Nota: Si no se proporciona modelVersionId, se usará la versión más reciente." + }, + "confirmAction": "Confirmar re-vinculación" + }, "model": { + "actions": { + "editModelName": "Editar nombre del modelo", + "editFileName": "Editar nombre de archivo", + "editBaseModel": "Editar modelo base", + "viewOnCivitai": "Ver en Civitai", + "viewOnCivitaiText": "Ver en Civitai", + "viewCreatorProfile": "Ver perfil del creador" + }, + "metadata": { + "version": "Versión", + "fileName": "Nombre de archivo", + "location": "Ubicación", + "baseModel": "Modelo base", + "size": "Tamaño", + "unknown": "Desconocido", + "usageTips": "Consejos de uso", + "additionalNotes": "Notas adicionales", + "notesHint": "Presiona Enter para guardar, Shift+Enter para nueva línea", + "addNotesPlaceholder": "Añade tus notas aquí...", + "aboutThisVersion": "Acerca de esta versión" + }, + "notes": { + "saved": "Notas guardadas exitosamente", + "saveFailed": "Error al guardar notas" + }, + "usageTips": { + "addPresetParameter": "Añadir parámetro preestablecido...", + "strengthMin": "Fuerza mínima", + "strengthMax": "Fuerza máxima", + "strength": "Fuerza", + "clipSkip": "Clip Skip", + "valuePlaceholder": "Valor", + "add": "Añadir" + }, + "triggerWords": { + "label": "Palabras clave", + "noTriggerWordsNeeded": "No se necesita palabra clave", + "edit": "Editar palabras clave", + "cancel": "Cancelar edición", + "save": "Guardar cambios", + "addPlaceholder": "Escribe para añadir o haz clic en sugerencias de abajo", + "copyWord": "Copiar palabra clave", + "deleteWord": "Eliminar palabra clave", + "suggestions": { + "noSuggestions": "No hay sugerencias disponibles", + "noTrainedWords": "No se encontraron palabras entrenadas o tokens de clase en este modelo. Puedes introducir palabras clave manualmente.", + "classToken": "Token de clase", + "classTokenDescription": "Añadir a tu prompt para mejores resultados", + "wordSuggestions": "Sugerencias de palabras", + "wordsFound": "{count} palabras encontradas", + "loading": "Cargando sugerencias..." + } + }, "description": { "noDescription": "No hay descripción del modelo disponible", "failedToLoad": "Error al cargar la descripción del modelo", @@ -342,106 +615,37 @@ "updateFailed": "Error al actualizar la descripción del modelo" } }, - "actions": { - "editModelName": "Editar nombre del modelo", - "editFileName": "Editar nombre del archivo", - "editBaseModel": "Editar modelo base", - "viewOnCivitai": "Ver en Civitai", - "viewOnCivitaiText": "Ver en Civitai", - "viewCreatorProfile": "Ver perfil del creador" + "tabs": { + "examples": "Ejemplos", + "description": "Descripción del modelo", + "recipes": "Recetas" }, - "metadata": { - "version": "Versión", - "fileName": "Nombre del archivo", - "location": "Ubicación", - "baseModel": "Modelo base", - "size": "Tamaño", - "unknown": "Desconocido", - "usageTips": "Consejos de uso", - "additionalNotes": "Notas adicionales", - "notesHint": "Presiona Enter para guardar, Shift+Enter para nueva línea", - "addNotesPlaceholder": "Añade tus notas aquí...", - "aboutThisVersion": "Sobre esta versión", - "validation": { - "nameTooLong": "El nombre del modelo está limitado a 100 caracteres", - "nameEmpty": "El nombre del modelo no puede estar vacío" - }, - "messages": { - "nameUpdated": "Nombre del modelo actualizado exitosamente", - "nameUpdateFailed": "Error al actualizar el nombre del modelo", - "baseModelUpdated": "Modelo base actualizado exitosamente", - "baseModelUpdateFailed": "Error al actualizar el modelo base" - } - }, - "notes": { - "saved": "Notas guardadas exitosamente", - "saveFailed": "Error al guardar las notas" - }, - "usageTips": { - "addPresetParameter": "Añadir parámetro preestablecido...", - "strengthMin": "Fuerza Mín", - "strengthMax": "Fuerza Máx", - "strength": "Fuerza", - "clipSkip": "Clip Skip", - "valuePlaceholder": "Valor", - "add": "Añadir" - }, - "tags": { - "messages": { - "updated": "Etiquetas actualizadas exitosamente", - "updateFailed": "Error al actualizar las etiquetas" - }, - "validation": { - "maxLength": "La etiqueta no debe exceder 30 caracteres", - "maxCount": "Máximo 30 etiquetas permitidas", - "duplicate": "Esta etiqueta ya existe" - } - }, - "recipeTab": { - "noRecipesFound": "No se encontraron recetas que usen esta LoRA.", - "loadingRecipes": "Cargando recetas...", - "errorLoadingRecipes": "Error al cargar las recetas. Por favor intenta más tarde." + "loading": { + "exampleImages": "Cargando imágenes de ejemplo...", + "description": "Cargando descripción del modelo...", + "recipes": "Cargando recetas...", + "examples": "Cargando ejemplos..." } } }, - "errors": { - "general": "Ocurrió un error", - "networkError": "Error de red. Por favor verifica tu conexión.", - "serverError": "Error del servidor. Por favor intenta de nuevo más tarde.", - "fileNotFound": "Archivo no encontrado", - "invalidFile": "Formato de archivo inválido", - "uploadFailed": "Subida fallida", - "downloadFailed": "Descarga fallida", - "saveFailed": "Guardado fallido", - "loadFailed": "Carga fallida", - "deleteFailed": "Eliminación fallida", - "moveFailed": "Movimiento fallido", - "copyFailed": "Copia fallida", - "fetchFailed": "Falló la obtención de datos de Civitai", - "invalidUrl": "Formato de URL inválido", - "missingPermissions": "Permisos insuficientes" - }, - "success": { - "saved": "Guardado exitosamente", - "deleted": "Eliminado exitosamente", - "moved": "Movido exitosamente", - "copied": "Copiado exitosamente", - "downloaded": "Descargado exitosamente", - "uploaded": "Subido exitosamente", - "refreshed": "Actualizado exitosamente", - "exported": "Exportado exitosamente", - "imported": "Importado exitosamente" + "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" + } }, "keyboard": { "navigation": "Navegación por teclado:", "shortcuts": { - "pageUp": "Desplazar una página hacia arriba", - "pageDown": "Desplazar una página hacia abajo", - "home": "Ir al inicio", - "end": "Ir al final", - "bulkMode": "Alternar modo masivo", - "search": "Enfocar búsqueda", - "escape": "Cerrar modal/panel" + "pageUp": "Desplazar hacia arriba una página", + "pageDown": "Desplazar hacia abajo una página", + "home": "Saltar al inicio", + "end": "Saltar al final" } }, "initialization": { @@ -450,31 +654,31 @@ "status": "Inicializando...", "estimatingTime": "Estimando tiempo...", "loras": { - "title": "Inicializando Gestor LoRA", - "message": "Escaneando y construyendo caché LoRA. Esto puede tomar unos minutos..." + "title": "Inicializando gestor de LoRA", + "message": "Escaneando y construyendo caché de LoRA. Esto puede tomar unos minutos..." }, "checkpoints": { - "title": "Inicializando Gestor de Checkpoint", + "title": "Inicializando gestor de checkpoint", "message": "Escaneando y construyendo caché de checkpoint. Esto puede tomar unos minutos..." }, "embeddings": { - "title": "Inicializando Gestor de Embedding", + "title": "Inicializando gestor de embedding", "message": "Escaneando y construyendo caché de embedding. Esto puede tomar unos minutos..." }, "recipes": { - "title": "Inicializando Gestor de Recetas", + "title": "Inicializando gestor de recetas", "message": "Cargando y procesando recetas. Esto puede tomar unos minutos..." }, "statistics": { - "title": "Inicializando Estadísticas", - "message": "Procesando datos de modelo para estadísticas. Esto puede tomar unos minutos..." + "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 → Agregar clave API, luego pégala en la configuración de Lora Manager.", - "alt": "Configuración API de 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", @@ -496,65 +700,357 @@ "description": "Presiona Ctrl+F (Cmd+F en Mac) para buscar rápidamente dentro de tu vista actual.", "alt": "Búsqueda rápida" } - }, - "steps": { - "scanning": "Escaneando archivos de modelo...", - "processing": "Procesando metadatos...", - "building": "Construyendo caché...", - "finalizing": "Finalizando..." } }, "duplicates": { - "found": "Se encontraron {count} grupos duplicados", + "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, aunque tengan nombres o vistas previas diferentes.", - "keepOne": "Mantén solo una versión (preferiblemente con mejores metadatos/vistas previas) y elimina las otras de forma segura." + "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." } }, - "tooltips": { - "refresh": "Actualizar la lista de modelos", - "bulkOperations": "Seleccionar múltiples modelos para operaciones por lotes", - "favorites": "Mostrar solo modelos favoritos", - "duplicates": "Encontrar y gestionar modelos duplicados", - "search": "Buscar modelos por nombre, etiquetas u otros criterios", - "filter": "Filtrar modelos por varios criterios", - "sort": "Ordenar modelos por diferentes atributos", - "backToTop": "Volver al inicio de la página" - }, - "modelCard": { - "actions": { - "addToFavorites": "Añadir a favoritos", - "removeFromFavorites": "Quitar de favoritos", - "viewOnCivitai": "Ver en Civitai", - "notAvailableFromCivitai": "No disponible en Civitai", - "sendToWorkflow": "Enviar a ComfyUI (Clic: Adjuntar, Shift+Clic: Reemplazar)", - "copyLoRASyntax": "Copiar sintaxis LoRA", - "checkpointNameCopied": "Nombre del checkpoint copiado", - "toggleBlur": "Alternar difuminado", - "show": "Mostrar", - "openExampleImages": "Abrir carpeta de imágenes de ejemplo" + "uiHelpers": { + "clipboard": { + "copied": "Copiado al portapapeles", + "copyFailed": "Error al copiar" }, - "nsfw": { - "matureContent": "Contenido para adultos", - "xxxRated": "Contenido XXX", - "xRated": "Contenido X", - "rRated": "Contenido R" + "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" }, - "favorites": { - "added": "Añadido a favoritos", - "removed": "Eliminado de favoritos", - "updateFailed": "Error al actualizar estado de favorito" + "workflow": { + "noSupportedNodes": "No se encontraron nodos de destino compatibles en el flujo de trabajo", + "communicationFailed": "Error al comunicarse con ComfyUI" }, - "sendToWorkflow": { - "checkpointNotImplemented": "Enviar checkpoint al flujo de trabajo - función por implementar" + "nodeSelector": { + "recipe": "Receta", + "lora": "LoRA", + "replace": "Reemplazar", + "append": "Añadir", + "selectTargetNode": "Seleccionar nodo de destino", + "sendToAll": "Enviar a todos" }, "exampleImages": { - "checkError": "Error al verificar imágenes de ejemplo", - "missingHash": "Falta información de hash del modelo.", - "noRemoteImagesAvailable": "No hay imágenes de ejemplo remotas disponibles para este modelo en Civitai" + "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" + } + }, + "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", + "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", + "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" + } + }, + "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! ❤️" + }, + "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" + }, + "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}", + "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", + "noRecipeId": "No hay ID de receta disponible", + "copyFailed": "Error copiando sintaxis de receta: {message}", + "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}", + "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", + "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}", + "importFailed": "Importación falló: {message}", + "folderTreeFailed": "Error al cargar árbol de carpetas", + "folderTreeError": "Error cargando árbol de carpetas" + }, + "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", + "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", + "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}" + }, + "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}", + "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}", + "settingsUpdated": "Configuración actualizada: {setting}", + "compactModeToggled": "Modo compacto {state}", + "settingSaveFailed": "Error al guardar configuración: {message}", + "displayDensitySet": "Densidad de visualización establecida a {density}", + "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" + }, + "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", + "importFailed": "Error al importar imágenes de ejemplo: {message}" + }, + "triggerWords": { + "loadFailed": "No se pudieron cargar palabras entrenadas", + "tooLong": "La palabra clave no debe exceder 30 palabras", + "tooMany": "Máximo 30 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", + "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}", + "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}", + "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", + "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}" + } + }, + "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" } } -} \ No newline at end of file +} diff --git a/locales/fr.json b/locales/fr.json index ef63ffc5..23c88556 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -1,66 +1,24 @@ { "common": { - "file": "Fichier", - "folder": "Dossier", - "name": "Nom", - "size": "Taille", - "date": "Date", - "type": "Type", - "path": "Chemin", - "fileSize": { - "zero": "0 Octets", - "bytes": "Octets", - "kb": "Ko", - "mb": "Mo", - "gb": "Go", - "tb": "To" - }, "actions": { "save": "Enregistrer", "cancel": "Annuler", "delete": "Supprimer", - "edit": "Modifier", - "copy": "Copier", "move": "Déplacer", "refresh": "Actualiser", - "download": "Télécharger", - "upload": "Téléverser", - "search": "Rechercher", - "filter": "Filtrer", - "sort": "Trier", - "select": "Sélectionner", - "selectAll": "Tout sélectionner", - "deselectAll": "Tout désélectionner", - "confirm": "Confirmer", - "close": "Fermer", "back": "Retour", "next": "Suivant", - "previous": "Précédent", - "view": "Voir", - "preview": "Aperçu", - "details": "Détails", "backToTop": "Retour en haut", "settings": "Paramètres", - "help": "Aide", - "about": "À propos" + "help": "Aide" }, "status": { "loading": "Chargement...", - "saving": "Enregistrement...", - "saved": "Enregistré", - "error": "Erreur", - "success": "Succès", - "warning": "Avertissement", - "info": "Information", - "processing": "Traitement...", - "completed": "Terminé", - "failed": "Échec", - "cancelled": "Annulé", - "pending": "En attente", - "ready": "Prêt" + "unknown": "Inconnu", + "date": "Date", + "version": "Version" }, "language": { - "current": "Langue", "select": "Sélectionner la langue", "select_help": "Choisissez votre langue préférée pour l'interface", "english": "English", @@ -72,6 +30,47 @@ "korean": "한국어", "french": "Français", "spanish": "Español" + }, + "fileSize": { + "zero": "0 Octets", + "bytes": "Octets", + "kb": "Ko", + "mb": "Mo", + "gb": "Go", + "tb": "To" + } + }, + "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" + }, + "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" + }, + "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" } }, "header": { @@ -93,14 +92,14 @@ }, "options": "Options de recherche", "searchIn": "Rechercher dans :", - "notAvailable": "Recherche non disponible sur la page statistiques", + "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 recette", - "loraName": "Nom du fichier LoRA", + "loraName": "Nom de fichier LoRA", "loraModel": "Nom du modèle LoRA" } }, @@ -115,10 +114,121 @@ "switchToLight": "Passer au thème clair", "switchToDark": "Passer au thème sombre", "switchToAuto": "Passer au thème automatique" + }, + "actions": { + "checkUpdates": "Vérifier les mises à jour", + "support": "Support" + } + }, + "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", + "sections": { + "contentFiltering": "Filtrage du contenu", + "videoSettings": "Paramètres vidéo", + "layoutSettings": "Paramètres d'affichage", + "folderSettings": "Paramètres des dossiers", + "downloadPathTemplates": "Modèles de chemin de téléchargement", + "exampleImages": "Images d'exemple", + "misc": "Divers" + }, + "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" + }, + "videoSettings": { + "autoplayOnHover": "Lecture automatique vidéo au survol", + "autoplayOnHoverHelp": "Lire les aperçus vidéo uniquement lors du survol" + }, + "layoutSettings": { + "displayDensity": "Densité d'affichage", + "displayDensityOptions": { + "default": "Par défaut", + "medium": "Moyen", + "compact": "Compact" + }, + "displayDensityHelp": "Choisissez combien de cartes afficher par ligne :", + "displayDensityDetails": { + "default": "Par défaut : 5 (1080p), 6 (2K), 8 (4K)", + "medium": "Moyen : 6 (1080p), 7 (2K), 9 (4K)", + "compact": "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.", + "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 :", + "cardInfoDisplayDetails": { + "always": "Toujours visible : Les en-têtes et pieds de page sont toujours visibles", + "hover": "Révéler au survol : Les en-têtes et pieds de page n'apparaissent qu'au survol d'une carte" + } + }, + "folderSettings": { + "defaultLoraRoot": "Racine LoRA par défaut", + "defaultLoraRootHelp": "Définir le répertoire racine LoRA par défaut pour les téléchargements, imports et déplacements", + "defaultCheckpointRoot": "Racine Checkpoint par défaut", + "defaultCheckpointRootHelp": "Définir le répertoire racine checkpoint par défaut pour les téléchargements, imports et déplacements", + "defaultEmbeddingRoot": "Racine Embedding par défaut", + "defaultEmbeddingRootHelp": "Définir le répertoire racine embedding par défaut pour les téléchargements, imports et déplacements", + "noDefault": "Aucun par défaut" + }, + "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", + "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)", + "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" + }, + "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" } }, "loras": { - "title": "Modèles LoRA", "controls": { "sort": { "title": "Trier les modèles par...", @@ -134,24 +244,25 @@ }, "refresh": { "title": "Actualiser la liste des modèles", - "quick": "Actualisation rapide (incrémentielle)", - "full": "Reconstruction complète (complète)" + "quick": "Actualisation rapide (incrémentale)", + "full": "Reconstruction complète" }, "fetch": "Récupérer depuis Civitai", - "download": "Télécharger depuis l'URL", + "download": "Télécharger depuis une URL", "bulk": "Opérations en lot", "duplicates": "Trouver les doublons", "favorites": "Afficher uniquement les favoris" }, "bulkOperations": { - "title": "Opérations en lot", "selected": "{count} sélectionné(s)", - "sendToWorkflow": "Envoyer tous les LoRAs sélectionnés au workflow", - "copyAll": "Copier la syntaxe de tous les LoRAs sélectionnés", - "refreshAll": "Actualiser les métadonnées CivitAI pour les modèles sélectionnés", - "moveAll": "Déplacer les modèles sélectionnés vers un dossier", - "deleteAll": "Supprimer les modèles sélectionnés", - "clear": "Effacer la sélection" + "selectedSuffix": "sélectionné(s)", + "viewSelected": "Cliquez pour voir les éléments sélectionnés", + "sendToWorkflow": "Envoyer vers le workflow", + "copyAll": "Tout copier", + "refreshAll": "Tout actualiser", + "moveAll": "Tout déplacer", + "deleteAll": "Tout supprimer", + "clear": "Effacer" }, "contextMenu": { "refreshMetadata": "Actualiser les données Civitai", @@ -159,106 +270,121 @@ "copySyntax": "Copier la syntaxe LoRA", "copyFilename": "Copier le nom de fichier du modèle", "copyRecipeSyntax": "Copier la syntaxe de la recette", - "sendToWorkflowAppend": "Envoyer au workflow (ajouter)", - "sendToWorkflowReplace": "Envoyer au workflow (remplacer)", - "openExamplesFolder": "Ouvrir le dossier d'exemples", + "sendToWorkflowAppend": "Envoyer vers le workflow (Ajouter)", + "sendToWorkflowReplace": "Envoyer vers le workflow (Remplacer)", + "openExamples": "Ouvrir le dossier d'exemples", "downloadExamples": "Télécharger les images d'exemple", "replacePreview": "Remplacer l'aperçu", "setContentRating": "Définir la classification du contenu", - "moveToFolder": "Déplacer vers le dossier", + "moveToFolder": "Déplacer vers un dossier", "excludeModel": "Exclure le modèle", "deleteModel": "Supprimer le modèle", "shareRecipe": "Partager la recette", "viewAllLoras": "Voir tous les LoRAs", "downloadMissingLoras": "Télécharger les LoRAs manquants", "deleteRecipe": "Supprimer la recette" - }, - "modal": { - "title": "Détails LoRA", - "tabs": { - "examples": "Exemples", - "description": "Description du modèle", - "recipes": "Recettes" - }, - "info": { - "filename": "Nom de fichier", - "modelName": "Nom du modèle", - "baseModel": "Modèle de base", - "fileSize": "Taille du fichier", - "dateAdded": "Date d'ajout", - "triggerWords": "Mots déclencheurs", - "description": "Description", - "tags": "Tags", - "rating": "Évaluation", - "downloads": "Téléchargements", - "likes": "J'aime", - "version": "Version" - }, - "actions": { - "copyTriggerWords": "Copier les mots déclencheurs", - "copyLoraName": "Copier le nom LoRA", - "sendToWorkflow": "Envoyer au workflow", - "viewOnCivitai": "Voir sur Civitai", - "downloadExamples": "Télécharger les images d'exemple" - } } }, "recipes": { "title": "Recettes LoRA", "controls": { - "import": "Importer une recette", + "import": { + "action": "Importer une recette", + "title": "Importer une recette depuis une image ou une URL", + "urlLocalPath": "URL / Chemin local", + "uploadImage": "Téléverser une image", + "urlSectionDescription": "Saisissez une URL d'image Civitai ou un chemin de fichier local pour l'importer comme recette.", + "imageUrlOrPath": "URL d'image ou chemin de fichier :", + "urlPlaceholder": "https://civitai.com/images/... ou C:/chemin/vers/image.png", + "fetchImage": "Récupérer l'image", + "uploadSectionDescription": "Téléversez une image avec des métadonnées LoRA pour l'importer comme recette.", + "selectImage": "Sélectionner une image", + "recipeName": "Nom de la recette", + "recipeNamePlaceholder": "Entrez le nom de la recette", + "tagsOptional": "Tags (optionnel)", + "addTagPlaceholder": "Ajouter un tag", + "addTag": "Ajouter", + "noTagsAdded": "Aucun tag ajouté", + "lorasInRecipe": "LoRAs dans cette recette", + "downloadLocationPreview": "Aperçu de l'emplacement de téléchargement :", + "useDefaultPath": "Utiliser le chemin par défaut", + "useDefaultPathTooltip": "Lorsque activé, les fichiers sont automatiquement organisés selon les modèles de chemin configurés", + "selectLoraRoot": "Sélectionner un répertoire racine LoRA", + "targetFolderPath": "Chemin du dossier cible :", + "folderPathPlaceholder": "Tapez le chemin du dossier ou sélectionnez dans l'arbre ci-dessous...", + "createNewFolder": "Créer un nouveau dossier", + "root": "Racine", + "browseFolders": "Parcourir les dossiers :", + "downloadAndSaveRecipe": "Télécharger et sauvegarder la recette", + "downloadMissingLoras": "Télécharger les LoRAs manquants", + "saveRecipe": "Sauvegarder la recette", + "loraCountInfo": "({existing}/{total} dans la bibliothèque)", + "processingInput": "Traitement de l'entrée...", + "analyzingMetadata": "Analyse des métadonnées de l'image...", + "downloadingLoras": "Téléchargement des LoRAs...", + "savingRecipe": "Sauvegarde de la recette...", + "startingDownload": "Début du téléchargement pour le LoRA {current}/{total}", + "deletedFromCivitai": "Supprimé de Civitai", + "inLibrary": "Dans la bibliothèque", + "notInLibrary": "Pas dans la bibliothèque", + "earlyAccessRequired": "Ce LoRA nécessite un paiement d'accès anticipé pour le téléchargement.", + "earlyAccessEnds": "L'accès anticipé se termine le {date}.", + "earlyAccess": "Accès anticipé", + "verifyEarlyAccess": "Vérifiez que vous avez acheté l'accès anticipé avant de télécharger.", + "duplicateRecipesFound": "{count} recette(s) identique(s) trouvée(s) dans votre bibliothèque", + "duplicateRecipesDescription": "Ces recettes contiennent les mêmes LoRAs avec des poids identiques.", + "showDuplicates": "Afficher les doublons", + "hideDuplicates": "Masquer les doublons", + "loraCount": "{count} LoRAs", + "recipePreviewAlt": "Aperçu de la recette", + "loraPreviewAlt": "Aperçu LoRA", + "errors": { + "selectImageFile": "Veuillez sélectionner un fichier image", + "enterUrlOrPath": "Veuillez entrer une URL ou un chemin de fichier", + "selectLoraRoot": "Veuillez sélectionner un répertoire racine LoRA" + } + }, "refresh": { "title": "Actualiser la liste des recettes" }, - "duplicates": { - "title": "Trouver les recettes en double" - }, - "filteredByLora": "Filtré par LoRA", - "create": "Créer une recette", - "export": "Exporter la sélection", - "downloadMissing": "Télécharger les LoRAs manquants" + "filteredByLora": "Filtré par LoRA" }, "duplicates": { - "found": "{count} groupes de doublons trouvés", + "found": "Trouvé {count} groupes de doublons", "keepLatest": "Garder les dernières versions", "deleteSelected": "Supprimer la sélection" }, - "card": { - "author": "Auteur", - "loras": "{count} LoRAs", - "tags": "Tags", - "actions": { - "sendToWorkflow": "Envoyer au workflow", - "edit": "Modifier la recette", - "duplicate": "Dupliquer la recette", - "export": "Exporter la recette", - "delete": "Supprimer la recette" + "contextMenu": { + "copyRecipe": { + "missingId": "Impossible de copier la recette : ID de recette manquant", + "failed": "Échec de la copie de la syntaxe de la recette" + }, + "sendRecipe": { + "missingId": "Impossible d'envoyer la recette : ID de recette manquant", + "failed": "Échec de l'envoi de la recette vers le workflow" + }, + "viewLoras": { + "missingId": "Impossible de voir les LoRAs : ID de recette manquant", + "noLorasFound": "Aucun LoRA trouvé dans cette recette", + "loadError": "Erreur lors du chargement des LoRAs de la recette : {message}" + }, + "downloadMissing": { + "missingId": "Impossible de télécharger les LoRAs : ID de recette manquant", + "noMissingLoras": "Aucun LoRA manquant à télécharger", + "getInfoFailed": "Échec de l'obtention des informations pour les LoRAs manquants", + "prepareError": "Erreur lors de la préparation des LoRAs pour le téléchargement : {message}" } } }, "checkpoints": { - "title": "Modèles Checkpoint", - "info": { - "filename": "Nom de fichier", - "modelName": "Nom du modèle", - "baseModel": "Modèle de base", - "fileSize": "Taille du fichier", - "dateAdded": "Date d'ajout" - } + "title": "Modèles Checkpoint" }, "embeddings": { - "title": "Modèles Embedding", - "info": { - "filename": "Nom de fichier", - "modelName": "Nom du modèle", - "triggerWords": "Mots déclencheurs", - "fileSize": "Taille du fichier", - "dateAdded": "Date d'ajout" - } + "title": "Modèles Embedding" }, "sidebar": { - "modelRoot": "Racine des modèles", - "collapseAll": "Replier tous les dossiers", + "modelRoot": "Racine du modèle", + "collapseAll": "Réduire tous les dossiers", "pinToggle": "Épingler/Désépingler la barre latérale" }, "statistics": { @@ -268,83 +394,165 @@ "usage": "Analyse d'utilisation", "collection": "Collection", "storage": "Stockage", - "insights": "Analyses" + "insights": "Aperçus" }, - "overview": { - "title": "Aperçu", - "totalLoras": "Total LoRAs", - "totalCheckpoints": "Total Checkpoints", - "totalEmbeddings": "Total Embeddings", - "totalSize": "Taille totale", - "favoriteModels": "Modèles favoris" + "usage": { + "mostUsedLoras": "LoRAs les plus utilisés", + "mostUsedCheckpoints": "Checkpoints les plus utilisés", + "mostUsedEmbeddings": "Embeddings les plus utilisés" + }, + "collection": { + "popularTags": "Tags populaires", + "modelTypes": "Types de modèles", + "collectionAnalysis": "Analyse de la collection" + }, + "storage": { + "storageUsage": "Utilisation du stockage", + "largestModels": "Plus gros modèles", + "storageEfficiency": "Efficacité stockage vs utilisation" + }, + "insights": { + "smartInsights": "Aperçus intelligents", + "recommendations": "Recommandations" }, "charts": { - "modelsByType": "Modèles par type", - "modelsByBaseModel": "Modèles par modèle de base", - "modelsBySize": "Modèles par taille de fichier", - "modelsAddedOverTime": "Modèles ajoutés au fil du temps" + "collectionOverview": "Aperçu de la collection", + "baseModelDistribution": "Distribution des modèles de base", + "usageTrends": "Tendances d'utilisation (30 derniers jours)", + "usageDistribution": "Distribution de l'utilisation" } }, "modals": { - "delete": { - "title": "Confirmer la suppression", - "message": "Êtes-vous sûr de vouloir supprimer ce modèle ?", - "warningMessage": "Cette action ne peut pas être annulée.", - "confirm": "Supprimer", - "cancel": "Annuler" - }, "exclude": { - "title": "Exclure le modèle", - "message": "Êtes-vous sûr de vouloir exclure ce modèle de la bibliothèque ?", - "confirm": "Exclure", - "cancel": "Annuler" + "confirm": "Exclure" }, "download": { - "title": "Télécharger le modèle depuis l'URL", + "title": "Télécharger un modèle depuis une URL", + "titleWithType": "Télécharger {type} depuis une URL", "url": "URL Civitai", + "civitaiUrl": "URL Civitai :", "placeholder": "https://civitai.com/models/...", "locationPreview": "Aperçu de l'emplacement de téléchargement", "useDefaultPath": "Utiliser le chemin par défaut", - "useDefaultPathTooltip": "Quand activé, les fichiers sont automatiquement organisés en utilisant les modèles de chemin configurés", + "useDefaultPathTooltip": "Lorsque activé, les fichiers sont automatiquement organisés selon les modèles de chemin configurés", "selectRootDirectory": "Sélectionner un répertoire racine", + "selectModelRoot": "Sélectionner la racine du modèle :", + "selectTypeRoot": "Sélectionner la racine {type} :", + "targetFolderPath": "Chemin du dossier cible :", + "browseFolders": "Parcourir les dossiers :", + "createNewFolder": "Créer un nouveau dossier", + "pathPlaceholder": "Tapez le chemin du dossier ou sélectionnez dans l'arbre ci-dessous...", + "root": "Racine", "download": "Télécharger", - "cancel": "Annuler" + "fetchingVersions": "Récupération des versions du modèle...", + "versionPreview": "Aperçu de la version", + "earlyAccess": "Accès anticipé", + "earlyAccessTooltip": "Accès anticipé requis", + "inLibrary": "Dans la bibliothèque", + "alreadyInLibrary": "Déjà dans la bibliothèque", + "autoOrganizedPath": "[Auto-organisé par modèle de chemin]", + "errors": { + "invalidUrl": "Format d'URL Civitai invalide", + "noVersions": "Aucune version disponible pour ce modèle" + }, + "status": { + "preparing": "Préparation du téléchargement...", + "downloadedPreview": "Image d'aperçu téléchargée", + "downloadingFile": "Téléchargement du fichier {type}", + "finalizing": "Finalisation du téléchargement..." + } }, "move": { - "title": "Déplacer les modèles", - "selectFolder": "Sélectionner le dossier de destination", - "createFolder": "Créer un nouveau dossier", - "folderName": "Nom du dossier", - "move": "Déplacer", - "cancel": "Annuler" + "title": "Déplacer les modèles" }, "contentRating": { "title": "Définir la classification du contenu", "current": "Actuel", "levels": { - "pg": "Tout public", - "pg13": "13 ans et plus", - "r": "Restreint", - "x": "Adultes seulement", - "xxx": "Explicite" + "pg": "PG", + "pg13": "PG13", + "r": "R", + "x": "X", + "xxx": "XXX" } }, - "model": { - "description": { - "noDescription": "Aucune description de modèle disponible", - "failedToLoad": "Échec du chargement de la description du modèle", - "editTitle": "Modifier la description du modèle", - "validation": { - "cannotBeEmpty": "La description ne peut pas être vide" - }, - "messages": { - "updated": "Description du modèle mise à jour", - "updateFailed": "Échec de la mise à jour de la description du modèle" - } + "deleteModel": { + "title": "Supprimer le modèle", + "message": "Êtes-vous sûr de vouloir supprimer ce modèle et tous les fichiers associés ?" + }, + "excludeModel": { + "title": "Exclure le modèle", + "message": "Êtes-vous sûr de vouloir exclure ce modèle ? Les modèles exclus n'apparaîtront pas dans les recherches ou listes de modèles." + }, + "deleteDuplicateRecipes": { + "title": "Supprimer les recettes dupliquées", + "message": "Êtes-vous sûr de vouloir supprimer les recettes dupliquées sélectionnées ?", + "countMessage": "recettes seront définitivement supprimées." + }, + "deleteDuplicateModels": { + "title": "Supprimer les modèles dupliqués", + "message": "Êtes-vous sûr de vouloir supprimer les modèles dupliqués sélectionnés ?", + "countMessage": "modèles seront définitivement supprimés." + }, + "clearCache": { + "title": "Vider les fichiers de cache", + "message": "Êtes-vous sûr de vouloir vider tous les fichiers de cache ?", + "description": "Cela supprimera toutes les données de modèle mises en cache. Le système devra reconstruire le cache au prochain démarrage, ce qui peut prendre du temps selon la taille de votre collection de modèles.", + "action": "Vider le cache" + }, + "bulkDelete": { + "title": "Supprimer plusieurs modèles", + "message": "Êtes-vous sûr de vouloir supprimer tous les modèles sélectionnés et leurs fichiers associés ?", + "countMessage": "modèles seront définitivement supprimés.", + "action": "Tout supprimer" + }, + "exampleAccess": { + "title": "Images d'exemple locales", + "message": "Aucune image d'exemple locale trouvée pour ce modèle. Options d'affichage :", + "downloadOption": { + "title": "Télécharger depuis Civitai", + "description": "Sauvegarder les exemples distants localement pour un usage hors ligne et un chargement plus rapide" }, + "importOption": { + "title": "Importer vos propres", + "description": "Ajouter vos propres exemples personnalisés pour ce modèle" + }, + "footerNote": "Les exemples distants sont toujours visibles dans les détails du modèle même sans copies locales" + }, + "moveModel": { + "targetLocationPreview": "Aperçu de l'emplacement cible :", + "selectModelRoot": "Sélectionner la racine du modèle :", + "targetFolderPath": "Chemin du dossier cible :", + "browseFolders": "Parcourir les dossiers :", + "createNewFolder": "Créer un nouveau dossier", + "pathPlaceholder": "Tapez le chemin du dossier ou sélectionnez dans l'arbre ci-dessous...", + "root": "Racine" + }, + "relinkCivitai": { + "title": "Relier à nouveau à Civitai", + "warning": "Attention :", + "warningText": "Il s'agit d'une opération potentiellement destructrice. Relier à nouveau va :", + "warningList": { + "overrideMetadata": "Remplacer les métadonnées existantes", + "modifyHash": "Potentiellement modifier le hash du modèle", + "unintendedConsequences": "Peut avoir d'autres conséquences non prévues" + }, + "proceedText": "Ne procédez que si vous êtes sûr que c'est ce que vous voulez.", + "urlLabel": "URL du modèle Civitai :", + "urlPlaceholder": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "helpText": { + "title": "Collez n'importe quelle URL de modèle Civitai. Formats supportés :", + "format1": "https://civitai.com/models/649516", + "format2": "https://civitai.com/models/649516?modelVersionId=726676", + "format3": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "note": "Note : Si aucun modelVersionId n'est fourni, la dernière version sera utilisée." + }, + "confirmAction": "Confirmer la re-liaison" + }, + "model": { "actions": { "editModelName": "Modifier le nom du modèle", - "editFileName": "Modifier le nom du fichier", + "editFileName": "Modifier le nom de fichier", "editBaseModel": "Modifier le modèle de base", "viewOnCivitai": "Voir sur Civitai", "viewOnCivitaiText": "Voir sur Civitai", @@ -352,26 +560,16 @@ }, "metadata": { "version": "Version", - "fileName": "Nom du fichier", + "fileName": "Nom de fichier", "location": "Emplacement", "baseModel": "Modèle de base", "size": "Taille", "unknown": "Inconnu", "usageTips": "Conseils d'utilisation", "additionalNotes": "Notes supplémentaires", - "notesHint": "Appuyez sur Entrée pour sauvegarder, Shift+Entrée pour nouvelle ligne", + "notesHint": "Appuyez sur Entrée pour sauvegarder, Maj+Entrée pour nouvelle ligne", "addNotesPlaceholder": "Ajoutez vos notes ici...", - "aboutThisVersion": "À propos de cette version", - "validation": { - "nameTooLong": "Le nom du modèle est limité à 100 caractères", - "nameEmpty": "Le nom du modèle ne peut pas être vide" - }, - "messages": { - "nameUpdated": "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" - } + "aboutThisVersion": "À propos de cette version" }, "notes": { "saved": "Notes sauvegardées avec succès", @@ -386,62 +584,68 @@ "valuePlaceholder": "Valeur", "add": "Ajouter" }, - "tags": { - "messages": { - "updated": "Étiquettes mises à jour avec succès", - "updateFailed": "Échec de la mise à jour des étiquettes" - }, - "validation": { - "maxLength": "L'étiquette ne doit pas dépasser 30 caractères", - "maxCount": "Maximum 30 étiquettes autorisées", - "duplicate": "Cette étiquette existe déjà" + "triggerWords": { + "label": "Mots-clés", + "noTriggerWordsNeeded": "Aucun mot-clé nécessaire", + "edit": "Modifier les mots-clés", + "cancel": "Annuler la modification", + "save": "Sauvegarder les modifications", + "addPlaceholder": "Tapez pour ajouter ou cliquez sur les suggestions ci-dessous", + "copyWord": "Copier le mot-clé", + "deleteWord": "Supprimer le mot-clé", + "suggestions": { + "noSuggestions": "Aucune suggestion disponible", + "noTrainedWords": "Aucun mot entraîné ou token de classe trouvé dans ce modèle. Vous pouvez saisir manuellement les mots-clés.", + "classToken": "Token de classe", + "classTokenDescription": "Ajoutez à votre prompt pour de meilleurs résultats", + "wordSuggestions": "Suggestions de mots", + "wordsFound": "{count} mots trouvés", + "loading": "Chargement des suggestions..." } }, - "recipeTab": { - "noRecipesFound": "Aucune recette trouvée utilisant cette LoRA.", - "loadingRecipes": "Chargement des recettes...", - "errorLoadingRecipes": "Échec du chargement des recettes. Veuillez réessayer plus tard." + "description": { + "noDescription": "Aucune description de modèle disponible", + "failedToLoad": "Échec du chargement de la description du modèle", + "editTitle": "Modifier la description du modèle", + "validation": { + "cannotBeEmpty": "La description ne peut pas être vide" + }, + "messages": { + "updated": "Description du modèle mise à jour", + "updateFailed": "Échec de la mise à jour de la description du modèle" + } + }, + "tabs": { + "examples": "Exemples", + "description": "Description du modèle", + "recipes": "Recettes" + }, + "loading": { + "exampleImages": "Chargement des images d'exemple...", + "description": "Chargement de la description du modèle...", + "recipes": "Chargement des recettes...", + "examples": "Chargement des exemples..." } } }, - "errors": { - "general": "Une erreur s'est produite", - "networkError": "Erreur réseau. Veuillez vérifier votre connexion.", - "serverError": "Erreur serveur. Veuillez réessayer plus tard.", - "fileNotFound": "Fichier non trouvé", - "invalidFile": "Format de fichier invalide", - "uploadFailed": "Échec du téléversement", - "downloadFailed": "Échec du téléchargement", - "saveFailed": "Échec de l'enregistrement", - "loadFailed": "Échec du chargement", - "deleteFailed": "Échec de la suppression", - "moveFailed": "Échec du déplacement", - "copyFailed": "Échec de la copie", - "fetchFailed": "Échec de récupération des données depuis Civitai", - "invalidUrl": "Format d'URL invalide", - "missingPermissions": "Permissions insuffisantes" - }, - "success": { - "saved": "Enregistré avec succès", - "deleted": "Supprimé avec succès", - "moved": "Déplacé avec succès", - "copied": "Copié avec succès", - "downloaded": "Téléchargé avec succès", - "uploaded": "Téléversé avec succès", - "refreshed": "Actualisé avec succès", - "exported": "Exporté avec succès", - "imported": "Importé avec succès" + "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à" + } }, "keyboard": { "navigation": "Navigation au clavier :", "shortcuts": { - "pageUp": "Faire défiler d'une page vers le haut", - "pageDown": "Faire défiler d'une page vers le bas", + "pageUp": "Défiler d'une page vers le haut", + "pageDown": "Défiler d'une page vers le bas", "home": "Aller en haut", - "end": "Aller en bas", - "bulkMode": "Basculer le mode lot", - "search": "Focuser la recherche", - "escape": "Fermer modal/panneau" + "end": "Aller en bas" } }, "initialization": { @@ -451,15 +655,15 @@ "estimatingTime": "Estimation du temps...", "loras": { "title": "Initialisation du gestionnaire LoRA", - "message": "Analyse et construction du cache LoRA. Cela peut prendre quelques minutes..." + "message": "Scan et construction du cache LoRA. Cela peut prendre quelques minutes..." }, "checkpoints": { "title": "Initialisation du gestionnaire Checkpoint", - "message": "Analyse et construction du cache checkpoint. Cela peut prendre quelques minutes..." + "message": "Scan et construction du cache checkpoint. Cela peut prendre quelques minutes..." }, "embeddings": { "title": "Initialisation du gestionnaire Embedding", - "message": "Analyse et construction du cache embedding. Cela peut prendre quelques minutes..." + "message": "Scan et construction du cache embedding. Cela peut prendre quelques minutes..." }, "recipes": { "title": "Initialisation du gestionnaire de recettes", @@ -470,10 +674,10 @@ "message": "Traitement des données de modèle pour les statistiques. Cela peut prendre quelques minutes..." }, "tips": { - "title": "Conseils et astuces", + "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 de Lora Manager.", + "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": { @@ -496,65 +700,357 @@ "description": "Appuyez sur Ctrl+F (Cmd+F sur Mac) pour rechercher rapidement dans votre vue actuelle.", "alt": "Recherche rapide" } - }, - "steps": { - "scanning": "Analyse des fichiers de modèle...", - "processing": "Traitement des métadonnées...", - "building": "Construction du cache...", - "finalizing": "Finalisation..." } }, "duplicates": { - "found": "{count} groupes de doublons trouvés", - "showNotification": "Afficher la notification des doublons", + "found": "Trouvé {count} groupes de doublons", + "showNotification": "Afficher la notification de doublons", "deleteSelected": "Supprimer la sélection", "exitMode": "Quitter le mode", "help": { - "identicalHashes": "Des hachages identiques signifient des fichiers de modèle identiques, même s'ils ont des noms ou des aperçus différents.", + "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é." } }, - "tooltips": { - "refresh": "Actualiser la liste des modèles", - "bulkOperations": "Sélectionner plusieurs modèles pour les opérations par lot", - "favorites": "Afficher uniquement les modèles favoris", - "duplicates": "Trouver et gérer les modèles en double", - "search": "Rechercher des modèles par nom, tags ou autres critères", - "filter": "Filtrer les modèles selon divers critères", - "sort": "Trier les modèles selon différents attributs", - "backToTop": "Remonter en haut de la page" - }, - "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, Shift+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" + "uiHelpers": { + "clipboard": { + "copied": "Copié dans le presse-papiers", + "copyFailed": "Échec de la copie" }, - "nsfw": { - "matureContent": "Contenu pour adultes", - "xxxRated": "Contenu XXX", - "xRated": "Contenu X", - "rRated": "Contenu R" + "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" }, - "favorites": { - "added": "Ajouté aux favoris", - "removed": "Retiré des favoris", - "updateFailed": "Échec de la mise à jour du statut favori" + "workflow": { + "noSupportedNodes": "Aucun nœud cible supporté trouvé dans le workflow", + "communicationFailed": "Échec de la communication avec ComfyUI" }, - "sendToWorkflow": { - "checkpointNotImplemented": "Envoyer checkpoint vers workflow - fonctionnalité à implémenter" + "nodeSelector": { + "recipe": "Recette", + "lora": "LoRA", + "replace": "Remplacer", + "append": "Ajouter", + "selectTargetNode": "Sélectionner le nœud cible", + "sendToAll": "Envoyer à tous" }, "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" + "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" + } + }, + "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": "Recettes", + "settings": "Paramètres & Configuration", + "extensions": "Extensions", + "newBadge": "NOUVEAU" + } + }, + "update": { + "title": "Vérifier les mises à jour", + "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", + "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" + } + }, + "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 ! ❤️" + }, + "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" + }, + "recipes": { + "fetchFailed": "Échec de la récupération des recettes : {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 recettes : {message}", + "updateFailed": "Échec de la mise à jour de la recette : {error}", + "updateError": "Erreur lors de la mise à jour de la recette : {message}", + "nameSaved": "Recette \"{name}\" sauvegardée avec succès", + "nameUpdated": "Nom de la recette mis à jour avec succès", + "tagsUpdated": "Tags de la recette mis à jour avec succès", + "sourceUrlUpdated": "URL source mise à jour avec succès", + "noRecipeId": "Aucun ID de recette disponible", + "copyFailed": "Erreur lors de la copie de la syntaxe de la recette : {message}", + "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}", + "cannotSend": "Impossible d'envoyer la recette : ID de recette manquant", + "sendFailed": "Échec de l'envoi de la recette vers le workflow", + "sendError": "Erreur lors de l'envoi de la recette vers le workflow", + "cannotDelete": "Impossible de supprimer la recette : ID de recette manquant", + "deleteConfirmationError": "Erreur lors de l'affichage de la confirmation de suppression", + "deletedSuccessfully": "Recette supprimée avec succès", + "deleteFailed": "Erreur lors de la suppression de la recette : {message}", + "cannotShare": "Impossible de partager la recette : ID de recette manquant", + "preparingForSharing": "Préparation de la recette pour le partage...", + "downloadStarted": "Téléchargement de la recette démarré", + "shareError": "Erreur lors du partage de la recette : {message}", + "sharePreparationError": "Erreur lors de la préparation de la recette pour le partage", + "selectImageFirst": "Veuillez d'abord sélectionner une image", + "enterRecipeName": "Veuillez entrer un nom de recette", + "processingError": "Erreur de traitement : {message}", + "folderBrowserError": "Erreur lors du chargement du navigateur de dossiers : {message}", + "recipeSaveFailed": "Échec de la sauvegarde de la recette : {error}", + "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" + }, + "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)", + "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", + "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}" + }, + "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}", + "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}", + "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}", + "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" + }, + "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", + "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 30 mots", + "tooMany": "Maximum 30 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", + "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}", + "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}", + "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", + "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}" + } + }, + "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" } } -} \ No newline at end of file +} diff --git a/locales/ja.json b/locales/ja.json index 058c1fd3..ba421b0f 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -1,68 +1,26 @@ { "common": { - "file": "ファイル", - "folder": "フォルダ", - "name": "名前", - "size": "サイズ", - "date": "日付", - "type": "種類", - "path": "パス", - "fileSize": { - "zero": "0 バイト", - "bytes": "バイト", - "kb": "KB", - "mb": "MB", - "gb": "GB", - "tb": "TB" - }, "actions": { "save": "保存", "cancel": "キャンセル", "delete": "削除", - "edit": "編集", - "copy": "コピー", "move": "移動", "refresh": "更新", - "download": "ダウンロード", - "upload": "アップロード", - "search": "検索", - "filter": "フィルター", - "sort": "ソート", - "select": "選択", - "selectAll": "すべて選択", - "deselectAll": "選択解除", - "confirm": "確認", - "close": "閉じる", "back": "戻る", "next": "次へ", - "previous": "前へ", - "view": "表示", - "preview": "プレビュー", - "details": "詳細", "backToTop": "トップに戻る", "settings": "設定", - "help": "ヘルプ", - "about": "について" + "help": "ヘルプ" }, "status": { "loading": "読み込み中...", - "saving": "保存中...", - "saved": "保存済み", - "error": "エラー", - "success": "成功", - "warning": "警告", - "info": "情報", - "processing": "処理中...", - "completed": "完了", - "failed": "失敗", - "cancelled": "キャンセル", - "pending": "待機中", - "ready": "準備完了" + "unknown": "不明", + "date": "日付", + "version": "バージョン" }, "language": { - "current": "言語", "select": "言語を選択", - "select_help": "インターフェース言語を選択してください", + "select_help": "インターフェースの言語を選択してください", "english": "English", "chinese_simplified": "中文(简体)", "chinese_traditional": "中文(繁体)", @@ -72,15 +30,56 @@ "korean": "한국어", "french": "Français", "spanish": "Español" + }, + "fileSize": { + "zero": "0バイト", + "bytes": "バイト", + "kb": "KB", + "mb": "MB", + "gb": "GB", + "tb": "TB" + } + }, + "modelCard": { + "actions": { + "addToFavorites": "お気に入りに追加", + "removeFromFavorites": "お気に入りから削除", + "viewOnCivitai": "Civitaiで表示", + "notAvailableFromCivitai": "Civitaiでは利用できません", + "sendToWorkflow": "ComfyUIに送信(クリック:追加、Shift+クリック:置換)", + "copyLoRASyntax": "LoRA構文をコピー", + "checkpointNameCopied": "checkpointの名前をコピーしました", + "toggleBlur": "ぼかしの切り替え", + "show": "表示", + "openExampleImages": "例画像フォルダを開く" + }, + "nsfw": { + "matureContent": "成人向けコンテンツ", + "xxxRated": "XXX指定コンテンツ", + "xRated": "X指定コンテンツ", + "rRated": "R指定コンテンツ" + }, + "favorites": { + "added": "お気に入りに追加されました", + "removed": "お気に入りから削除されました", + "updateFailed": "お気に入り状態の更新に失敗しました" + }, + "sendToWorkflow": { + "checkpointNotImplemented": "checkpointをワークフローに送信 - 実装予定の機能" + }, + "exampleImages": { + "checkError": "例画像の確認中にエラーが発生しました", + "missingHash": "モデルハッシュ情報がありません。", + "noRemoteImagesAvailable": "このモデルのCivitaiでのリモート例画像は利用できません" } }, "header": { - "appTitle": "LoRA マネージャー", + "appTitle": "LoRA Manager", "navigation": { "loras": "LoRA", "recipes": "レシピ", - "checkpoints": "チェックポイント", - "embeddings": "エンベディング", + "checkpoints": "Checkpoint", + "embeddings": "Embedding", "statistics": "統計" }, "search": { @@ -88,11 +87,11 @@ "placeholders": { "loras": "LoRAを検索...", "recipes": "レシピを検索...", - "checkpoints": "チェックポイントを検索...", - "embeddings": "エンベディングを検索..." + "checkpoints": "checkpointを検索...", + "embeddings": "embeddingを検索..." }, "options": "検索オプション", - "searchIn": "検索対象:", + "searchIn": "検索対象:", "notAvailable": "統計ページでは検索は利用できません", "filters": { "filename": "ファイル名", @@ -105,23 +104,134 @@ } }, "filter": { - "title": "モデルをフィルター", + "title": "モデルをフィルタ", "baseModel": "ベースモデル", - "modelTags": "タグ(トップ20)", - "clearAll": "すべてのフィルターをクリア" + "modelTags": "タグ(上位20)", + "clearAll": "すべてのフィルタをクリア" }, "theme": { - "toggle": "テーマ切り替え", + "toggle": "テーマの切り替え", "switchToLight": "ライトテーマに切り替え", "switchToDark": "ダークテーマに切り替え", - "switchToAuto": "オートテーマに切り替え" + "switchToAuto": "自動テーマに切り替え" + }, + "actions": { + "checkUpdates": "更新確認", + "support": "サポート" + } + }, + "settings": { + "civitaiApiKey": "Civitai APIキー", + "civitaiApiKeyPlaceholder": "Civitai APIキーを入力してください", + "civitaiApiKeyHelp": "Civitaiからモデルをダウンロードするときの認証に使用されます", + "sections": { + "contentFiltering": "コンテンツフィルタリング", + "videoSettings": "動画設定", + "layoutSettings": "レイアウト設定", + "folderSettings": "フォルダ設定", + "downloadPathTemplates": "ダウンロードパステンプレート", + "exampleImages": "例画像", + "misc": "その他" + }, + "contentFiltering": { + "blurNsfwContent": "NSFWコンテンツをぼかす", + "blurNsfwContentHelp": "成人向け(NSFW)コンテンツのプレビュー画像をぼかします", + "showOnlySfw": "SFWコンテンツのみ表示", + "showOnlySfwHelp": "閲覧と検索時にすべてのNSFWコンテンツを除外します" + }, + "videoSettings": { + "autoplayOnHover": "ホバー時に動画を自動再生", + "autoplayOnHoverHelp": "動画プレビューはホバー時にのみ再生されます" + }, + "layoutSettings": { + "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": "警告:高密度設定は、リソースが限られたシステムでパフォーマンスの問題を引き起こす可能性があります。", + "cardInfoDisplay": "カード情報表示", + "cardInfoDisplayOptions": { + "always": "常に表示", + "hover": "ホバー時に表示" + }, + "cardInfoDisplayHelp": "モデル情報とアクションボタンの表示タイミングを選択:", + "cardInfoDisplayDetails": { + "always": "常に表示:ヘッダーとフッターが常に表示されます", + "hover": "ホバー時に表示:カードにホバーしたときのみヘッダーとフッターが表示されます" + } + }, + "folderSettings": { + "defaultLoraRoot": "デフォルトLoRAルート", + "defaultLoraRootHelp": "ダウンロード、インポート、移動用のデフォルトLoRAルートディレクトリを設定", + "defaultCheckpointRoot": "デフォルトCheckpointルート", + "defaultCheckpointRootHelp": "ダウンロード、インポート、移動用のデフォルトcheckpointルートディレクトリを設定", + "defaultEmbeddingRoot": "デフォルトEmbeddingルート", + "defaultEmbeddingRootHelp": "ダウンロード、インポート、移動用のデフォルトembeddingルートディレクトリを設定", + "noDefault": "デフォルトなし" + }, + "downloadPathTemplates": { + "title": "ダウンロードパステンプレート", + "help": "Civitaiからダウンロードする際の異なるモデルタイプのフォルダ構造を設定します。", + "availablePlaceholders": "利用可能なプレースホルダー:", + "templateOptions": { + "flatStructure": "フラット構造", + "byBaseModel": "ベースモデル別", + "byAuthor": "作成者別", + "byFirstTag": "最初のタグ別", + "baseModelFirstTag": "ベースモデル + 最初のタグ", + "baseModelAuthor": "ベースモデル + 作成者", + "authorFirstTag": "作成者 + 最初のタグ", + "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": "例画像がないモデルの例画像を自動的にダウンロードします(ダウンロード場所の設定が必要)", + "optimizeImages": "ダウンロード画像の最適化", + "optimizeImagesHelp": "例画像を最適化してファイルサイズを縮小し、読み込み速度を向上させます(メタデータは保持されます)", + "download": "ダウンロード", + "restartRequired": "再起動が必要" + }, + "misc": { + "includeTriggerWords": "LoRA構文にトリガーワードを含める", + "includeTriggerWordsHelp": "LoRA構文をクリップボードにコピーする際、学習済みトリガーワードを含めます" } }, "loras": { - "title": "LoRAモデル", "controls": { "sort": { - "title": "モデルをソート...", + "title": "モデルの並び順...", "name": "名前", "nameAsc": "A - Z", "nameDesc": "Z - A", @@ -144,14 +254,15 @@ "favorites": "お気に入りのみ表示" }, "bulkOperations": { - "title": "一括操作", - "selected": "{count}個選択中", - "sendToWorkflow": "選択したLoRAをワークフローに送信", - "copyAll": "選択したLoRA構文をコピー", - "refreshAll": "選択したモデルのCivitAIメタデータを更新", - "moveAll": "選択したモデルをフォルダに移動", - "deleteAll": "選択したモデルを削除", - "clear": "選択をクリア" + "selected": "{count} 選択中", + "selectedSuffix": "選択中", + "viewSelected": "選択したアイテムを表示するにはクリック", + "sendToWorkflow": "ワークフローに送信", + "copyAll": "すべてコピー", + "refreshAll": "すべて更新", + "moveAll": "すべて移動", + "deleteAll": "すべて削除", + "clear": "クリア" }, "contextMenu": { "refreshMetadata": "Civitaiデータを更新", @@ -161,8 +272,8 @@ "copyRecipeSyntax": "レシピ構文をコピー", "sendToWorkflowAppend": "ワークフローに送信(追加)", "sendToWorkflowReplace": "ワークフローに送信(置換)", - "openExamplesFolder": "サンプルフォルダを開く", - "downloadExamples": "サンプル画像をダウンロード", + "openExamples": "例画像フォルダを開く", + "downloadExamples": "例画像をダウンロード", "replacePreview": "プレビューを置換", "setContentRating": "コンテンツレーティングを設定", "moveToFolder": "フォルダに移動", @@ -172,183 +283,280 @@ "viewAllLoras": "すべてのLoRAを表示", "downloadMissingLoras": "不足しているLoRAをダウンロード", "deleteRecipe": "レシピを削除" - }, - "modal": { - "title": "LoRA詳細", - "tabs": { - "examples": "サンプル", - "description": "モデル説明", - "recipes": "レシピ" - }, - "info": { - "filename": "ファイル名", - "modelName": "モデル名", - "baseModel": "ベースモデル", - "fileSize": "ファイルサイズ", - "dateAdded": "追加日", - "triggerWords": "トリガーワード", - "description": "説明", - "tags": "タグ", - "rating": "評価", - "downloads": "ダウンロード数", - "likes": "いいね数", - "version": "バージョン" - }, - "actions": { - "copyTriggerWords": "トリガーワードをコピー", - "copyLoraName": "LoRA名をコピー", - "sendToWorkflow": "ワークフローに送信", - "viewOnCivitai": "Civitaiで表示", - "downloadExamples": "サンプル画像をダウンロード" - } } }, "recipes": { "title": "LoRAレシピ", "controls": { - "import": "レシピをインポート", + "import": { + "action": "レシピをインポート", + "title": "画像またはURLからレシピをインポート", + "urlLocalPath": "URL / ローカルパス", + "uploadImage": "画像をアップロード", + "urlSectionDescription": "Civitai画像URLまたはローカルファイルパスを入力してレシピとしてインポートします。", + "imageUrlOrPath": "画像URLまたはファイルパス:", + "urlPlaceholder": "https://civitai.com/images/... または C:/path/to/image.png", + "fetchImage": "画像を取得", + "uploadSectionDescription": "LoRAメタデータを含む画像をアップロードしてレシピとしてインポートします。", + "selectImage": "画像を選択", + "recipeName": "レシピ名", + "recipeNamePlaceholder": "レシピ名を入力", + "tagsOptional": "タグ(任意)", + "addTagPlaceholder": "タグを追加", + "addTag": "追加", + "noTagsAdded": "タグが追加されていません", + "lorasInRecipe": "このレシピのLoRA", + "downloadLocationPreview": "ダウンロード場所プレビュー:", + "useDefaultPath": "デフォルトパスを使用", + "useDefaultPathTooltip": "有効にすると、設定されたパステンプレートを使用してファイルが自動的に整理されます", + "selectLoraRoot": "LoRAルートディレクトリを選択", + "targetFolderPath": "ターゲットフォルダパス:", + "folderPathPlaceholder": "フォルダパスを入力するか、下のツリーから選択...", + "createNewFolder": "新しいフォルダを作成", + "root": "ルート", + "browseFolders": "フォルダを参照:", + "downloadAndSaveRecipe": "ダウンロード & レシピ保存", + "downloadMissingLoras": "不足しているLoRAをダウンロード", + "saveRecipe": "レシピを保存", + "loraCountInfo": "({existing}/{total} ライブラリ内)", + "processingInput": "入力を処理中...", + "analyzingMetadata": "画像メタデータを解析中...", + "downloadingLoras": "LoRAをダウンロード中...", + "savingRecipe": "レシピを保存中...", + "startingDownload": "LoRA {current}/{total} のダウンロードを開始", + "deletedFromCivitai": "Civitaiから削除済み", + "inLibrary": "ライブラリ内", + "notInLibrary": "ライブラリ外", + "earlyAccessRequired": "このLoRAはダウンロードにアーリーアクセス料金が必要です。", + "earlyAccessEnds": "アーリーアクセスは {date} に終了します。", + "earlyAccess": "アーリーアクセス", + "verifyEarlyAccess": "ダウンロード前にアーリーアクセスを購入済みであることを確認してください。", + "duplicateRecipesFound": "ライブラリ内に {count} 個の同一レシピが見つかりました", + "duplicateRecipesDescription": "これらのレシピは同じLoRAを同じ重みで含んでいます。", + "showDuplicates": "重複を表示", + "hideDuplicates": "重複を非表示", + "loraCount": "{count} LoRA", + "recipePreviewAlt": "レシピプレビュー", + "loraPreviewAlt": "LoRAプレビュー", + "errors": { + "selectImageFile": "画像ファイルを選択してください", + "enterUrlOrPath": "URLまたはファイルパスを入力してください", + "selectLoraRoot": "LoRAルートディレクトリを選択してください" + } + }, "refresh": { "title": "レシピリストを更新" }, - "duplicates": { - "title": "重複レシピを検索" - }, - "filteredByLora": "LoRAでフィルタ", - "create": "レシピを作成", - "export": "選択項目をエクスポート", - "downloadMissing": "不足しているLoRAをダウンロード" + "filteredByLora": "LoRAでフィルタ済み" }, "duplicates": { - "found": "{count}個の重複グループが見つかりました", + "found": "{count} 個の重複グループが見つかりました", "keepLatest": "最新バージョンを保持", - "deleteSelected": "選択項目を削除" + "deleteSelected": "選択したものを削除" }, - "card": { - "author": "作者", - "loras": "{count}個のLoRA", - "tags": "タグ", - "actions": { - "sendToWorkflow": "ワークフローに送信", - "edit": "レシピを編集", - "duplicate": "レシピを複製", - "export": "レシピをエクスポート", - "delete": "レシピを削除" + "contextMenu": { + "copyRecipe": { + "missingId": "レシピをコピーできません:レシピIDがありません", + "failed": "レシピ構文のコピーに失敗しました" + }, + "sendRecipe": { + "missingId": "レシピを送信できません:レシピIDがありません", + "failed": "レシピのワークフローへの送信に失敗しました" + }, + "viewLoras": { + "missingId": "LoRAを表示できません:レシピIDがありません", + "noLorasFound": "このレシピにLoRAが見つかりませんでした", + "loadError": "レシピLoRAの読み込みエラー:{message}" + }, + "downloadMissing": { + "missingId": "LoRAをダウンロードできません:レシピIDがありません", + "noMissingLoras": "ダウンロードする不足LoRAがありません", + "getInfoFailed": "不足LoRAの情報取得に失敗しました", + "prepareError": "ダウンロード用LoRAの準備中にエラー:{message}" } } }, "checkpoints": { - "title": "チェックポイントモデル", - "info": { - "filename": "ファイル名", - "modelName": "モデル名", - "baseModel": "ベースモデル", - "fileSize": "ファイルサイズ", - "dateAdded": "追加日" - } + "title": "Checkpointモデル" }, "embeddings": { - "title": "エンベディングモデル", - "info": { - "filename": "ファイル名", - "modelName": "モデル名", - "triggerWords": "トリガーワード", - "fileSize": "ファイルサイズ", - "dateAdded": "追加日" - } + "title": "Embeddingモデル" }, "sidebar": { "modelRoot": "モデルルート", "collapseAll": "すべてのフォルダを折りたたむ", - "pinToggle": "サイドバーをピン留め/解除" + "pinToggle": "サイドバーの固定/固定解除" }, "statistics": { "title": "統計", "tabs": { "overview": "概要", - "usage": "使用分析", + "usage": "使用状況分析", "collection": "コレクション", "storage": "ストレージ", "insights": "インサイト" }, - "overview": { - "title": "概要", - "totalLoras": "LoRA総数", - "totalCheckpoints": "チェックポイント総数", - "totalEmbeddings": "エンベディング総数", - "totalSize": "総サイズ", - "favoriteModels": "お気に入りモデル" + "usage": { + "mostUsedLoras": "最も使用されているLoRA", + "mostUsedCheckpoints": "最も使用されているCheckpoint", + "mostUsedEmbeddings": "最も使用されているEmbedding" + }, + "collection": { + "popularTags": "人気のタグ", + "modelTypes": "モデルタイプ", + "collectionAnalysis": "コレクション分析" + }, + "storage": { + "storageUsage": "ストレージ使用量", + "largestModels": "最大のモデル", + "storageEfficiency": "ストレージ対使用効率" + }, + "insights": { + "smartInsights": "スマートインサイト", + "recommendations": "推奨事項" }, "charts": { - "modelsByType": "タイプ別モデル", - "modelsByBaseModel": "ベースモデル別", - "modelsBySize": "ファイルサイズ別", - "modelsAddedOverTime": "時系列追加モデル" + "collectionOverview": "コレクション概要", + "baseModelDistribution": "ベースモデル分布", + "usageTrends": "使用傾向(過去30日)", + "usageDistribution": "使用分布" } }, "modals": { - "delete": { - "title": "削除の確認", - "message": "このモデルを削除してもよろしいですか?", - "warningMessage": "この操作は元に戻せません。", - "confirm": "削除", - "cancel": "キャンセル" - }, "exclude": { - "title": "モデルを除外", - "message": "このモデルをライブラリから除外してもよろしいですか?", - "confirm": "除外", - "cancel": "キャンセル" + "confirm": "除外" }, "download": { "title": "URLからモデルをダウンロード", + "titleWithType": "URLから{type}をダウンロード", "url": "Civitai URL", + "civitaiUrl": "Civitai URL:", "placeholder": "https://civitai.com/models/...", "locationPreview": "ダウンロード場所プレビュー", "useDefaultPath": "デフォルトパスを使用", "useDefaultPathTooltip": "有効にすると、設定されたパステンプレートを使用してファイルが自動的に整理されます", "selectRootDirectory": "ルートディレクトリを選択", + "selectModelRoot": "モデルルートを選択:", + "selectTypeRoot": "{type}ルートを選択:", + "targetFolderPath": "ターゲットフォルダパス:", + "browseFolders": "フォルダを参照:", + "createNewFolder": "新しいフォルダを作成", + "pathPlaceholder": "フォルダパスを入力するか、下のツリーから選択...", + "root": "ルート", "download": "ダウンロード", - "cancel": "キャンセル" + "fetchingVersions": "モデルバージョンを取得中...", + "versionPreview": "バージョンプレビュー", + "earlyAccess": "アーリーアクセス", + "earlyAccessTooltip": "アーリーアクセスが必要", + "inLibrary": "ライブラリ内", + "alreadyInLibrary": "既にライブラリ内", + "autoOrganizedPath": "[パステンプレートによる自動整理]", + "errors": { + "invalidUrl": "無効なCivitai URL形式", + "noVersions": "このモデルの利用可能なバージョンがありません" + }, + "status": { + "preparing": "ダウンロードを準備中...", + "downloadedPreview": "プレビュー画像をダウンロードしました", + "downloadingFile": "{type}ファイルをダウンロード中", + "finalizing": "ダウンロードを完了中..." + } }, "move": { - "title": "モデルを移動", - "selectFolder": "移動先フォルダを選択", - "createFolder": "新しいフォルダを作成", - "folderName": "フォルダ名", - "move": "移動", - "cancel": "キャンセル" + "title": "モデルを移動" }, "contentRating": { "title": "コンテンツレーティングを設定", "current": "現在", "levels": { - "pg": "全年齢", - "pg13": "13歳以上", - "r": "制限あり", - "x": "成人向け", - "xxx": "露骨" + "pg": "PG", + "pg13": "PG13", + "r": "R", + "x": "X", + "xxx": "XXX" } }, - "model": { - "description": { - "noDescription": "モデルの説明がありません", - "failedToLoad": "モデルの説明の読み込みに失敗しました", - "editTitle": "モデルの説明を編集", - "validation": { - "cannotBeEmpty": "説明を空にすることはできません" - }, - "messages": { - "updated": "モデルの説明を更新しました", - "updateFailed": "モデルの説明の更新に失敗しました" - } + "deleteModel": { + "title": "モデルを削除", + "message": "このモデルと関連するすべてのファイルを削除してもよろしいですか?" + }, + "excludeModel": { + "title": "モデルを除外", + "message": "このモデルを除外してもよろしいですか?除外されたモデルは検索やモデルリストに表示されません。" + }, + "deleteDuplicateRecipes": { + "title": "重複レシピを削除", + "message": "選択した重複レシピを削除してもよろしいですか?", + "countMessage": "レシピが完全に削除されます。" + }, + "deleteDuplicateModels": { + "title": "重複モデルを削除", + "message": "選択した重複モデルを削除してもよろしいですか?", + "countMessage": "モデルが完全に削除されます。" + }, + "clearCache": { + "title": "キャッシュファイルをクリア", + "message": "すべてのキャッシュファイルをクリアしてもよろしいですか?", + "description": "これにより、キャッシュされたすべてのモデルデータが削除されます。システムは次回起動時にキャッシュを再構築する必要があり、モデルコレクションのサイズによっては時間がかかる場合があります。", + "action": "キャッシュをクリア" + }, + "bulkDelete": { + "title": "複数のモデルを削除", + "message": "選択したすべてのモデルと関連ファイルを削除してもよろしいですか?", + "countMessage": "モデルが完全に削除されます。", + "action": "すべて削除" + }, + "exampleAccess": { + "title": "ローカル例画像", + "message": "このモデルのローカル例画像が見つかりませんでした。表示オプション:", + "downloadOption": { + "title": "Civitaiからダウンロード", + "description": "リモート例画像をローカルに保存して、オフライン使用と高速読み込みを可能にします" }, + "importOption": { + "title": "独自のものをインポート", + "description": "このモデル用の独自のカスタム例画像を追加します" + }, + "footerNote": "ローカルコピーがなくても、モデル詳細でリモート例画像は表示可能です" + }, + "moveModel": { + "targetLocationPreview": "ターゲット場所プレビュー:", + "selectModelRoot": "モデルルートを選択:", + "targetFolderPath": "ターゲットフォルダパス:", + "browseFolders": "フォルダを参照:", + "createNewFolder": "新しいフォルダを作成", + "pathPlaceholder": "フォルダパスを入力するか、下のツリーから選択...", + "root": "ルート" + }, + "relinkCivitai": { + "title": "Civitaiに再リンク", + "warning": "警告:", + "warningText": "これは破壊的な操作になる可能性があります。再リンクは以下を行います:", + "warningList": { + "overrideMetadata": "既存のメタデータを上書き", + "modifyHash": "モデルハッシュを変更する可能性", + "unintendedConsequences": "その他の意図しない結果を引き起こす可能性" + }, + "proceedText": "これが本当に必要な場合のみ続行してください。", + "urlLabel": "CivitaiモデルURL:", + "urlPlaceholder": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "helpText": { + "title": "CivitaiモデルURLを貼り付けてください。対応形式:", + "format1": "https://civitai.com/models/649516", + "format2": "https://civitai.com/models/649516?modelVersionId=726676", + "format3": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "note": "注:modelVersionIdが提供されていない場合、最新バージョンが使用されます。" + }, + "confirmAction": "再リンクを確認" + }, + "model": { "actions": { "editModelName": "モデル名を編集", "editFileName": "ファイル名を編集", "editBaseModel": "ベースモデルを編集", "viewOnCivitai": "Civitaiで表示", "viewOnCivitaiText": "Civitaiで表示", - "viewCreatorProfile": "クリエイタープロフィールを表示" + "viewCreatorProfile": "作成者プロフィールを表示" }, "metadata": { "version": "バージョン", @@ -357,21 +565,11 @@ "baseModel": "ベースモデル", "size": "サイズ", "unknown": "不明", - "usageTips": "使用のコツ", + "usageTips": "使用のヒント", "additionalNotes": "追加メモ", "notesHint": "Enterで保存、Shift+Enterで改行", - "addNotesPlaceholder": "ここにメモを追加...", - "aboutThisVersion": "このバージョンについて", - "validation": { - "nameTooLong": "モデル名は100文字以内に制限されています", - "nameEmpty": "モデル名を空にすることはできません" - }, - "messages": { - "nameUpdated": "モデル名が正常に更新されました", - "nameUpdateFailed": "モデル名の更新に失敗しました", - "baseModelUpdated": "ベースモデルが正常に更新されました", - "baseModelUpdateFailed": "ベースモデルの更新に失敗しました" - } + "addNotesPlaceholder": "メモをここに追加...", + "aboutThisVersion": "このバージョンについて" }, "notes": { "saved": "メモが正常に保存されました", @@ -386,175 +584,473 @@ "valuePlaceholder": "値", "add": "追加" }, - "tags": { - "messages": { - "updated": "タグが正常に更新されました", - "updateFailed": "タグの更新に失敗しました" - }, - "validation": { - "maxLength": "タグは30文字を超えてはいけません", - "maxCount": "最大30個のタグが許可されています", - "duplicate": "このタグは既に存在します" + "triggerWords": { + "label": "トリガーワード", + "noTriggerWordsNeeded": "トリガーワードは不要", + "edit": "トリガーワードを編集", + "cancel": "編集をキャンセル", + "save": "変更を保存", + "addPlaceholder": "入力して追加するか、下の提案をクリック", + "copyWord": "トリガーワードをコピー", + "deleteWord": "トリガーワードを削除", + "suggestions": { + "noSuggestions": "提案はありません", + "noTrainedWords": "このモデルには学習済みワードやクラストークンが見つかりませんでした。手動でトリガーワードを入力できます。", + "classToken": "クラストークン", + "classTokenDescription": "最良の結果を得るためにプロンプトに追加", + "wordSuggestions": "ワード提案", + "wordsFound": "{count} ワードが見つかりました", + "loading": "提案を読み込み中..." } }, - "recipeTab": { - "noRecipesFound": "このLoRAを使用するレシピが見つかりません。", - "loadingRecipes": "レシピを読み込み中...", - "errorLoadingRecipes": "レシピの読み込みに失敗しました。後でもう一度お試しください。" + "description": { + "noDescription": "モデルの説明がありません", + "failedToLoad": "モデルの説明の読み込みに失敗しました", + "editTitle": "モデルの説明を編集", + "validation": { + "cannotBeEmpty": "説明を空にすることはできません" + }, + "messages": { + "updated": "モデルの説明が更新されました", + "updateFailed": "モデルの説明の更新に失敗しました" + } + }, + "tabs": { + "examples": "例", + "description": "モデル説明", + "recipes": "レシピ" + }, + "loading": { + "exampleImages": "例画像を読み込み中...", + "description": "モデル説明を読み込み中...", + "recipes": "レシピを読み込み中...", + "examples": "例を読み込み中..." } } }, - "errors": { - "general": "エラーが発生しました", - "networkError": "ネットワークエラー。接続を確認してください。", - "serverError": "サーバーエラー。後でもう一度試してください。", - "fileNotFound": "ファイルが見つかりません", - "invalidFile": "無効なファイル形式", - "uploadFailed": "アップロードに失敗しました", - "downloadFailed": "ダウンロードに失敗しました", - "saveFailed": "保存に失敗しました", - "loadFailed": "読み込みに失敗しました", - "deleteFailed": "削除に失敗しました", - "moveFailed": "移動に失敗しました", - "copyFailed": "コピーに失敗しました", - "fetchFailed": "Civitaiからデータを取得できませんでした", - "invalidUrl": "無効なURL形式", - "missingPermissions": "権限が不足しています" - }, - "success": { - "saved": "正常に保存されました", - "deleted": "正常に削除されました", - "moved": "正常に移動されました", - "copied": "正常にコピーされました", - "downloaded": "正常にダウンロードされました", - "uploaded": "正常にアップロードされました", - "refreshed": "正常に更新されました", - "exported": "正常にエクスポートされました", - "imported": "正常にインポートされました" + "modelTags": { + "messages": { + "updated": "タグが正常に更新されました", + "updateFailed": "タグの更新に失敗しました" + }, + "validation": { + "maxLength": "タグは30文字を超えることはできません", + "maxCount": "最大30タグまで許可されています", + "duplicate": "このタグは既に存在します" + } }, "keyboard": { - "navigation": "キーボードナビゲーション:", + "navigation": "キーボードナビゲーション:", "shortcuts": { "pageUp": "1ページ上にスクロール", "pageDown": "1ページ下にスクロール", "home": "トップにジャンプ", - "end": "ボトムにジャンプ", - "bulkMode": "一括モードを切り替え", - "search": "検索にフォーカス", - "escape": "モーダル/パネルを閉じる" + "end": "ボトムにジャンプ" } }, "initialization": { "title": "初期化中", "message": "ワークスペースを準備中...", "status": "初期化中...", - "estimatingTime": "時間を見積もり中...", + "estimatingTime": "時間を推定中...", "loras": { - "title": "LoRAマネージャーを初期化中", - "message": "LoRAキャッシュをスキャンして構築中です。数分かかる場合があります..." + "title": "LoRA Managerを初期化中", + "message": "LoRAキャッシュをスキャンして構築中。数分かかる場合があります..." }, "checkpoints": { - "title": "チェックポイントマネージャーを初期化中", - "message": "チェックポイントキャッシュをスキャンして構築中です。数分かかる場合があります..." + "title": "Checkpoint Managerを初期化中", + "message": "checkpointキャッシュをスキャンして構築中。数分かかる場合があります..." }, "embeddings": { - "title": "エンベディングマネージャーを初期化中", - "message": "エンベディングキャッシュをスキャンして構築中です。数分かかる場合があります..." + "title": "Embedding Managerを初期化中", + "message": "embeddingキャッシュをスキャンして構築中。数分かかる場合があります..." }, "recipes": { - "title": "レシピマネージャーを初期化中", - "message": "レシピを読み込んで処理中です。数分かかる場合があります..." + "title": "Recipe Managerを初期化中", + "message": "レシピを読み込んで処理中。数分かかる場合があります..." }, "statistics": { "title": "統計を初期化中", - "message": "統計用のモデルデータを処理中です。数分かかる場合があります..." + "message": "統計用のモデルデータを処理中。数分かかる場合があります..." }, "tips": { - "title": "ヒントとコツ", + "title": "ヒント&コツ", "civitai": { "title": "Civitai統合", - "description": "Civitaiアカウントを接続:プロフィールアバター → 設定 → APIキー → APIキーを追加し、Loraマネージャー設定に貼り付けてください。", + "description": "Civitaiアカウントを接続:プロフィールアバター → 設定 → APIキー → APIキーを追加し、LoRA Manager設定に貼り付けてください。", "alt": "Civitai API設定" }, "download": { "title": "簡単ダウンロード", - "description": "Civitai URLを使用して新しいモデルを素早くダウンロードおよびインストールします。", + "description": "Civitai URLを使用して新しいモデルを素早くダウンロードしてインストールできます。", "alt": "Civitaiダウンロード" }, "recipes": { "title": "レシピを保存", - "description": "お気に入りのモデルの組み合わせを将来使用するためにレシピを作成します。", + "description": "お気に入りのモデル組み合わせを将来使用するためにレシピを作成できます。", "alt": "レシピ" }, "filter": { "title": "高速フィルタリング", - "description": "ヘッダーのフィルターボタンを使用してタグやベースモデルタイプでモデルをフィルタリングします。", - "alt": "モデルをフィルター" + "description": "ヘッダーのフィルタボタンを使用してタグやベースモデルタイプでモデルをフィルタできます。", + "alt": "モデルフィルタ" }, "search": { "title": "クイック検索", - "description": "Ctrl+F(MacではCmd+F)を押して現在のビュー内を素早く検索します。", + "description": "Ctrl+F(MacではCmd+F)を押して、現在のビュー内を素早く検索できます。", "alt": "クイック検索" } - }, - "steps": { - "scanning": "モデルファイルをスキャン中...", - "processing": "メタデータを処理中...", - "building": "キャッシュを構築中...", - "finalizing": "完了中..." } }, "duplicates": { - "found": "{count}個の重複グループが見つかりました", + "found": "{count} 個の重複グループが見つかりました", "showNotification": "重複通知を表示", - "deleteSelected": "選択項目を削除", + "deleteSelected": "選択したものを削除", "exitMode": "モードを終了", "help": { - "identicalHashes": "同一のハッシュは、名前やプレビューが異なっていても同一のモデルファイルを意味します。", - "keepOne": "1つのバージョンのみを保持し(より良いメタデータ/プレビューを持つもの)、他は安全に削除してください。" + "identicalHashes": "同一のハッシュは、名前やプレビューが異なっていても、同一のモデルファイルを意味します。", + "keepOne": "1つのバージョンのみを保持し(より良いメタデータ/プレビューを持つものが望ましい)、他は安全に削除してください。" } }, - "tooltips": { - "refresh": "モデルリストを更新", - "bulkOperations": "複数のモデルを選択してバッチ操作", - "favorites": "お気に入りモデルのみ表示", - "duplicates": "重複モデルを検索・管理", - "search": "名前、タグ、その他の条件でモデルを検索", - "filter": "様々な条件でモデルをフィルター", - "sort": "異なる属性でモデルをソート", - "backToTop": "ページトップにスクロール" - }, - "modelCard": { - "actions": { - "addToFavorites": "お気に入りに追加", - "removeFromFavorites": "お気に入りから削除", - "viewOnCivitai": "Civitaiで表示", - "notAvailableFromCivitai": "Civitaiで利用不可", - "sendToWorkflow": "ComfyUIに送信(クリック:追加、Shift+クリック:置換)", - "copyLoRASyntax": "LoRA構文をコピー", - "checkpointNameCopied": "チェックポイント名をコピーしました", - "toggleBlur": "ぼかしを切り替え", - "show": "表示", - "openExampleImages": "サンプル画像フォルダを開く" + "uiHelpers": { + "clipboard": { + "copied": "クリップボードにコピーされました", + "copyFailed": "コピーに失敗しました" }, - "nsfw": { - "matureContent": "成人向けコンテンツ", - "xxxRated": "XXX指定コンテンツ", - "xRated": "X指定コンテンツ", - "rRated": "R指定コンテンツ" + "lora": { + "syntaxCopied": "LoRA構文がクリップボードにコピーされました", + "syntaxCopiedNoTriggerWords": "LoRA構文がクリップボードにコピーされました(トリガーワードが見つかりません)", + "syntaxCopiedWithTriggerWords": "トリガーワード付きLoRA構文がクリップボードにコピーされました", + "syntaxCopiedWithTriggerWordGroups": "トリガーワードグループ付きLoRA構文がクリップボードにコピーされました" }, - "favorites": { - "added": "お気に入りに追加しました", - "removed": "お気に入りから削除しました", - "updateFailed": "お気に入り状態の更新に失敗しました" + "workflow": { + "noSupportedNodes": "ワークフローで対応するターゲットノードが見つかりません", + "communicationFailed": "ComfyUIとの通信に失敗しました" }, - "sendToWorkflow": { - "checkpointNotImplemented": "チェックポイントをワークフローに送信 - 機能実装予定" + "nodeSelector": { + "recipe": "レシピ", + "lora": "LoRA", + "replace": "置換", + "append": "追加", + "selectTargetNode": "ターゲットノードを選択", + "sendToAll": "すべてに送信" }, "exampleImages": { - "checkError": "サンプル画像の確認でエラーが発生しました", - "missingHash": "モデルハッシュ情報が不足しています。", - "noRemoteImagesAvailable": "このモデルのリモートサンプル画像はCivitaiで利用できません" + "opened": "例画像フォルダが開かれました", + "openingFolder": "例画像フォルダを開いています", + "failedToOpen": "例画像フォルダを開くのに失敗しました" + } + }, + "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": "更新確認", + "updateAvailable": "更新が利用可能", + "noChangelogAvailable": "詳細な変更ログは利用できません。詳細はGitHubでご確認ください。", + "currentVersion": "現在のバージョン", + "newVersion": "新しいバージョン", + "commit": "コミット", + "viewOnGitHub": "GitHubで表示", + "updateNow": "今すぐ更新", + "preparingUpdate": "更新を準備中...", + "changelog": "変更ログ", + "checkingUpdates": "更新を確認中...", + "checkingMessage": "最新バージョンを確認しています。お待ちください。", + "showNotifications": "更新通知を表示", + "updateProgress": { + "preparing": "更新を準備中...", + "installing": "更新をインストール中...", + "completed": "更新が正常に完了しました!", + "failed": "更新に失敗しました:{error}" + }, + "status": { + "updating": "更新中...", + "updated": "更新済み!", + "updateFailed": "更新失敗" + }, + "completion": { + "successMessage": "{version}への更新が成功しました!", + "restartMessage": "更新を適用するためにComfyUIまたはLoRA Managerを再起動してください。", + "reloadMessage": "LoRA ManagerとComfyUIの両方でブラウザを再読み込みしてください。" + }, + "nightly": { + "warning": "警告:ナイトリービルドには実験的機能が含まれており、不安定な場合があります。", + "enable": "ナイトリー更新を有効にする" + } + }, + "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をご利用いただきありがとうございます! ❤️" + }, + "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": "ダウンロードが正常に完了しました" + }, + "recipes": { + "fetchFailed": "レシピの取得に失敗しました:{message}", + "reloadFailed": "{modelType}の再読み込みに失敗しました:{message}", + "loadFailed": "{modelType}の読み込みに失敗しました:{message}", + "refreshComplete": "更新完了", + "refreshFailed": "レシピの更新に失敗しました:{message}", + "updateFailed": "レシピの更新に失敗しました:{error}", + "updateError": "レシピ更新エラー:{message}", + "nameSaved": "レシピ\"{name}\"が正常に保存されました", + "nameUpdated": "レシピ名が正常に更新されました", + "tagsUpdated": "レシピタグが正常に更新されました", + "sourceUrlUpdated": "ソースURLが正常に更新されました", + "noRecipeId": "レシピIDが利用できません", + "copyFailed": "レシピ構文のコピーエラー:{message}", + "noMissingLoras": "ダウンロードする不足LoRAがありません", + "missingLorasInfoFailed": "不足LoRAの情報取得に失敗しました", + "preparingForDownloadFailed": "ダウンロード用LoRAの準備中にエラーが発生しました", + "enterLoraName": "LoRA名または構文を入力してください", + "reconnectedSuccessfully": "LoRAが正常に再接続されました", + "reconnectFailed": "LoRA再接続エラー:{message}", + "cannotSend": "レシピを送信できません:レシピIDがありません", + "sendFailed": "レシピのワークフローへの送信に失敗しました", + "sendError": "レシピのワークフロー送信エラー", + "cannotDelete": "レシピを削除できません:レシピIDがありません", + "deleteConfirmationError": "削除確認の表示中にエラーが発生しました", + "deletedSuccessfully": "レシピが正常に削除されました", + "deleteFailed": "レシピ削除エラー:{message}", + "cannotShare": "レシピを共有できません:レシピIDがありません", + "preparingForSharing": "レシピの共有を準備中...", + "downloadStarted": "レシピのダウンロードが開始されました", + "shareError": "レシピ共有エラー:{message}", + "sharePreparationError": "レシピ共有準備エラー", + "selectImageFirst": "最初に画像を選択してください", + "enterRecipeName": "レシピ名を入力してください", + "processingError": "処理エラー:{message}", + "folderBrowserError": "フォルダブラウザの読み込みエラー:{message}", + "recipeSaveFailed": "レシピの保存に失敗しました:{error}", + "importFailed": "インポートに失敗しました:{message}", + "folderTreeFailed": "フォルダツリーの読み込みに失敗しました", + "folderTreeError": "フォルダツリー読み込みエラー" + }, + "models": { + "noModelsSelected": "モデルが選択されていません", + "deletedSuccessfully": "{count} {type}が正常に削除されました", + "deleteFailed": "エラー:{error}", + "deleteFailedGeneral": "モデルの削除に失敗しました", + "selectedAdditional": "{count} 追加{type}が選択されました", + "refreshMetadataFailed": "メタデータの更新に失敗しました", + "nameCannotBeEmpty": "モデル名を空にすることはできません", + "nameUpdatedSuccessfully": "モデル名が正常に更新されました", + "nameUpdateFailed": "モデル名の更新に失敗しました", + "baseModelUpdated": "ベースモデルが正常に更新されました", + "baseModelUpdateFailed": "ベースモデルの更新に失敗しました", + "invalidCharactersRemoved": "ファイル名から無効な文字が削除されました", + "filenameCannotBeEmpty": "ファイル名を空にすることはできません", + "renameFailed": "ファイル名の変更に失敗しました:{message}", + "moveFailed": "モデルの移動に失敗しました:{message}", + "pleaseSelectRoot": "{type}ルートディレクトリを選択してください", + "nameTooLong": "モデル名は100文字に制限されています", + "verificationAlreadyDone": "このグループは既に検証済みです", + "verificationCompleteMismatch": "検証完了。{count} ファイルの実際のハッシュが異なります。", + "verificationCompleteSuccess": "検証完了。すべてのファイルが重複であることが確認されました。", + "verificationFailed": "ハッシュの検証に失敗しました:{message}" + }, + "search": { + "atLeastOneOption": "少なくとも1つの検索オプションを選択する必要があります" + }, + "settings": { + "loraRootsFailed": "LoRAルートの読み込みに失敗しました:{message}", + "checkpointRootsFailed": "checkpointルートの読み込みに失敗しました:{message}", + "embeddingRootsFailed": "embeddingルートの読み込みに失敗しました:{message}", + "mappingsUpdated": "ベースモデルパスマッピングが更新されました({count} マッピング{plural})", + "mappingsCleared": "ベースモデルパスマッピングがクリアされました", + "mappingSaveFailed": "ベースモデルマッピングの保存に失敗しました:{message}", + "downloadTemplatesUpdated": "ダウンロードパステンプレートが更新されました", + "downloadTemplatesFailed": "ダウンロードパステンプレートの保存に失敗しました:{message}", + "settingsUpdated": "設定が更新されました:{setting}", + "compactModeToggled": "コンパクトモード {state}", + "settingSaveFailed": "設定の保存に失敗しました:{message}", + "displayDensitySet": "表示密度が {density} に設定されました", + "languageChangeFailed": "言語の変更に失敗しました:{message}", + "cacheCleared": "キャッシュファイルが正常にクリアされました。次回のアクションでキャッシュが再構築されます。", + "cacheClearFailed": "キャッシュのクリアに失敗しました:{error}", + "cacheClearError": "キャッシュクリアエラー:{message}" + }, + "filters": { + "applied": "{message}", + "cleared": "フィルタがクリアされました", + "noCustomFilterToClear": "クリアするカスタムフィルタがありません" + }, + "downloads": { + "imagesCompleted": "例画像 {action} が完了しました", + "imagesFailed": "例画像 {action} が失敗しました", + "loadError": "ダウンロード読み込みエラー:{message}", + "downloadError": "ダウンロードエラー:{message}" + }, + "import": { + "folderTreeFailed": "フォルダツリーの読み込みに失敗しました", + "folderTreeError": "フォルダツリー読み込みエラー", + "imagesImported": "例画像が正常にインポートされました", + "importFailed": "例画像のインポートに失敗しました:{message}" + }, + "triggerWords": { + "loadFailed": "学習済みワードを読み込めませんでした", + "tooLong": "トリガーワードは30ワードを超えてはいけません", + "tooMany": "最大30トリガーワードまで許可されています", + "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": "例画像パスが正常に更新されました", + "downloadInProgress": "ダウンロードは既に進行中です", + "enterLocationFirst": "最初にダウンロード場所を入力してください", + "downloadStarted": "例画像のダウンロードが開始されました", + "downloadStartFailed": "ダウンロードの開始に失敗しました:{error}", + "downloadPaused": "ダウンロードが一時停止されました", + "pauseFailed": "ダウンロードの一時停止に失敗しました:{error}", + "downloadResumed": "ダウンロードが再開されました", + "resumeFailed": "ダウンロードの再開に失敗しました:{error}", + "deleted": "例画像が削除されました", + "deleteFailed": "例画像の削除に失敗しました", + "setPreviewFailed": "プレビュー画像の設定に失敗しました" + }, + "api": { + "fetchFailed": "{type}の取得に失敗しました:{message}", + "reloadFailed": "{type}の再読み込みに失敗しました:{message}", + "deleteSuccess": "{type}が正常に削除されました", + "deleteFailed": "{type}の削除に失敗しました:{message}", + "excludeSuccess": "{type}が正常に除外されました", + "excludeFailed": "{type}の除外に失敗しました:{message}", + "fileNameUpdated": "ファイル名が正常に更新されました", + "fileRenameFailed": "ファイル名の変更に失敗しました:{error}", + "previewUpdated": "プレビューが正常に更新されました", + "previewUploadFailed": "プレビュー画像のアップロードに失敗しました", + "refreshComplete": "{action} 完了", + "refreshFailed": "{type}の{action}に失敗しました", + "metadataRefreshed": "メタデータが正常に更新されました", + "metadataRefreshFailed": "メタデータの更新に失敗しました:{message}", + "metadataUpdateComplete": "メタデータ更新完了", + "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}" + } + }, + "banners": { + "versionMismatch": { + "title": "アプリケーション更新が検出されました", + "content": "ブラウザは古いバージョンのLoRA Manager({storedVersion})を実行しています。サーバーはバージョン{currentVersion}に更新されました。正常な機能を確保するため再読み込みしてください。", + "refreshNow": "今すぐ更新", + "refreshingIn": "更新まで", + "seconds": "秒" } } -} \ No newline at end of file +} diff --git a/locales/ko.json b/locales/ko.json index 625a6dab..fe575795 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -1,68 +1,26 @@ { "common": { - "file": "파일", - "folder": "폴더", - "name": "이름", - "size": "크기", - "date": "날짜", - "type": "유형", - "path": "경로", - "fileSize": { - "zero": "0 바이트", - "bytes": "바이트", - "kb": "KB", - "mb": "MB", - "gb": "GB", - "tb": "TB" - }, "actions": { "save": "저장", "cancel": "취소", "delete": "삭제", - "edit": "편집", - "copy": "복사", "move": "이동", "refresh": "새로고침", - "download": "다운로드", - "upload": "업로드", - "search": "검색", - "filter": "필터", - "sort": "정렬", - "select": "선택", - "selectAll": "모두 선택", - "deselectAll": "모두 선택 해제", - "confirm": "확인", - "close": "닫기", "back": "뒤로", "next": "다음", - "previous": "이전", - "view": "보기", - "preview": "미리보기", - "details": "세부사항", "backToTop": "맨 위로", "settings": "설정", - "help": "도움말", - "about": "정보" + "help": "도움말" }, "status": { "loading": "로딩 중...", - "saving": "저장 중...", - "saved": "저장됨", - "error": "오류", - "success": "성공", - "warning": "경고", - "info": "정보", - "processing": "처리 중...", - "completed": "완료", - "failed": "실패", - "cancelled": "취소됨", - "pending": "대기 중", - "ready": "준비됨" + "unknown": "알 수 없음", + "date": "날짜", + "version": "버전" }, "language": { - "current": "언어", "select": "언어 선택", - "select_help": "인터페이스 언어를 선택하세요", + "select_help": "인터페이스에 사용할 언어를 선택하세요", "english": "English", "chinese_simplified": "中文(简体)", "chinese_traditional": "中文(繁体)", @@ -72,15 +30,56 @@ "korean": "한국어", "french": "Français", "spanish": "Español" + }, + "fileSize": { + "zero": "0 바이트", + "bytes": "바이트", + "kb": "KB", + "mb": "MB", + "gb": "GB", + "tb": "TB" + } + }, + "modelCard": { + "actions": { + "addToFavorites": "즐겨찾기에 추가", + "removeFromFavorites": "즐겨찾기에서 제거", + "viewOnCivitai": "Civitai에서 보기", + "notAvailableFromCivitai": "Civitai에서 사용할 수 없음", + "sendToWorkflow": "ComfyUI로 전송 (클릭: 추가, Shift+클릭: 교체)", + "copyLoRASyntax": "LoRA 문법 복사", + "checkpointNameCopied": "Checkpoint 이름 복사됨", + "toggleBlur": "블러 토글", + "show": "보기", + "openExampleImages": "예시 이미지 폴더 열기" + }, + "nsfw": { + "matureContent": "성인 콘텐츠", + "xxxRated": "XXX 등급 콘텐츠", + "xRated": "X 등급 콘텐츠", + "rRated": "R 등급 콘텐츠" + }, + "favorites": { + "added": "즐겨찾기에 추가됨", + "removed": "즐겨찾기에서 제거됨", + "updateFailed": "즐겨찾기 상태 업데이트 실패" + }, + "sendToWorkflow": { + "checkpointNotImplemented": "Checkpoint을 워크플로로 전송 - 구현 예정 기능" + }, + "exampleImages": { + "checkError": "예시 이미지 확인 중 오류", + "missingHash": "모델 해시 정보가 없습니다.", + "noRemoteImagesAvailable": "Civitai에서 이 모델의 원격 예시 이미지를 사용할 수 없습니다" } }, "header": { - "appTitle": "LoRA 매니저", + "appTitle": "LoRA Manager", "navigation": { "loras": "LoRA", "recipes": "레시피", - "checkpoints": "체크포인트", - "embeddings": "임베딩", + "checkpoints": "Checkpoint", + "embeddings": "Embedding", "statistics": "통계" }, "search": { @@ -88,8 +87,8 @@ "placeholders": { "loras": "LoRA 검색...", "recipes": "레시피 검색...", - "checkpoints": "체크포인트 검색...", - "embeddings": "임베딩 검색..." + "checkpoints": "Checkpoint 검색...", + "embeddings": "Embedding 검색..." }, "options": "검색 옵션", "searchIn": "검색 범위:", @@ -111,26 +110,137 @@ "clearAll": "모든 필터 지우기" }, "theme": { - "toggle": "테마 전환", + "toggle": "테마 토글", "switchToLight": "라이트 테마로 전환", "switchToDark": "다크 테마로 전환", "switchToAuto": "자동 테마로 전환" + }, + "actions": { + "checkUpdates": "업데이트 확인", + "support": "지원" + } + }, + "settings": { + "civitaiApiKey": "Civitai API 키", + "civitaiApiKeyPlaceholder": "Civitai API 키를 입력하세요", + "civitaiApiKeyHelp": "Civitai에서 모델을 다운로드할 때 인증에 사용됩니다", + "sections": { + "contentFiltering": "콘텐츠 필터링", + "videoSettings": "비디오 설정", + "layoutSettings": "레이아웃 설정", + "folderSettings": "폴더 설정", + "downloadPathTemplates": "다운로드 경로 템플릿", + "exampleImages": "예시 이미지", + "misc": "기타" + }, + "contentFiltering": { + "blurNsfwContent": "NSFW 콘텐츠 블러 처리", + "blurNsfwContentHelp": "성인(NSFW) 콘텐츠 미리보기 이미지를 블러 처리합니다", + "showOnlySfw": "SFW 결과만 표시", + "showOnlySfwHelp": "탐색 및 검색 시 모든 NSFW 콘텐츠를 필터링합니다" + }, + "videoSettings": { + "autoplayOnHover": "호버 시 비디오 자동 재생", + "autoplayOnHoverHelp": "마우스를 올렸을 때만 비디오 미리보기를 재생합니다" + }, + "layoutSettings": { + "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": "경고: 높은 밀도는 리소스가 제한된 시스템에서 성능 문제를 일으킬 수 있습니다.", + "cardInfoDisplay": "카드 정보 표시", + "cardInfoDisplayOptions": { + "always": "항상 표시", + "hover": "호버 시 표시" + }, + "cardInfoDisplayHelp": "모델 정보 및 액션 버튼을 언제 표시할지 선택하세요:", + "cardInfoDisplayDetails": { + "always": "항상 표시: 헤더와 푸터가 항상 보입니다", + "hover": "호버 시 표시: 카드에 마우스를 올렸을 때만 헤더와 푸터가 나타납니다" + } + }, + "folderSettings": { + "defaultLoraRoot": "기본 LoRA 루트", + "defaultLoraRootHelp": "다운로드, 가져오기 및 이동을 위한 기본 LoRA 루트 디렉토리를 설정합니다", + "defaultCheckpointRoot": "기본 Checkpoint 루트", + "defaultCheckpointRootHelp": "다운로드, 가져오기 및 이동을 위한 기본 Checkpoint 루트 디렉토리를 설정합니다", + "defaultEmbeddingRoot": "기본 Embedding 루트", + "defaultEmbeddingRootHelp": "다운로드, 가져오기 및 이동을 위한 기본 Embedding 루트 디렉토리를 설정합니다", + "noDefault": "기본값 없음" + }, + "downloadPathTemplates": { + "title": "다운로드 경로 템플릿", + "help": "Civitai에서 다운로드할 때 다양한 모델 유형의 폴더 구조를 구성합니다.", + "availablePlaceholders": "사용 가능한 플레이스홀더:", + "templateOptions": { + "flatStructure": "플랫 구조", + "byBaseModel": "베이스 모델별", + "byAuthor": "제작자별", + "byFirstTag": "첫 번째 태그별", + "baseModelFirstTag": "베이스 모델 + 첫 번째 태그", + "baseModelAuthor": "베이스 모델 + 제작자", + "authorFirstTag": "제작자 + 첫 번째 태그", + "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": "예시 이미지가 없는 모델의 예시 이미지를 자동으로 다운로드합니다 (다운로드 위치 설정 필요)", + "optimizeImages": "다운로드된 이미지 최적화", + "optimizeImagesHelp": "파일 크기를 줄이고 로딩 속도를 향상시키기 위해 예시 이미지를 최적화합니다 (메타데이터는 보존됨)", + "download": "다운로드", + "restartRequired": "재시작 필요" + }, + "misc": { + "includeTriggerWords": "LoRA 문법에 트리거 단어 포함", + "includeTriggerWordsHelp": "LoRA 문법을 클립보드에 복사할 때 학습된 트리거 단어를 포함합니다" } }, "loras": { - "title": "LoRA 모델", "controls": { "sort": { - "title": "모델 정렬...", + "title": "모델 정렬 기준...", "name": "이름", "nameAsc": "가나다순", - "nameDesc": "가나다 역순", + "nameDesc": "역순", "date": "추가 날짜", "dateDesc": "최신순", - "dateAsc": "오래된 순", + "dateAsc": "오래된순", "size": "파일 크기", - "sizeDesc": "큰 순", - "sizeAsc": "작은 순" + "sizeDesc": "큰 순서", + "sizeAsc": "작은 순서" }, "refresh": { "title": "모델 목록 새로고침", @@ -141,28 +251,29 @@ "download": "URL에서 다운로드", "bulk": "일괄 작업", "duplicates": "중복 찾기", - "favorites": "즐겨찾기만 보기" + "favorites": "즐겨찾기만 표시" }, "bulkOperations": { - "title": "일괄 작업", "selected": "{count}개 선택됨", - "sendToWorkflow": "선택된 모든 LoRA를 워크플로우로 전송", - "copyAll": "선택된 모든 LoRA 구문 복사", - "refreshAll": "선택된 모델의 CivitAI 메타데이터 새로고침", - "moveAll": "선택된 모델을 폴더로 이동", - "deleteAll": "선택된 모델 삭제", - "clear": "선택 지우기" + "selectedSuffix": "개 선택됨", + "viewSelected": "선택된 항목 보기", + "sendToWorkflow": "워크플로로 전송", + "copyAll": "모두 복사", + "refreshAll": "모두 새로고침", + "moveAll": "모두 이동", + "deleteAll": "모두 삭제", + "clear": "지우기" }, "contextMenu": { "refreshMetadata": "Civitai 데이터 새로고침", "relinkCivitai": "Civitai에 다시 연결", - "copySyntax": "LoRA 구문 복사", + "copySyntax": "LoRA 문법 복사", "copyFilename": "모델 파일명 복사", - "copyRecipeSyntax": "레시피 구문 복사", - "sendToWorkflowAppend": "워크플로우로 전송 (추가)", - "sendToWorkflowReplace": "워크플로우로 전송 (교체)", - "openExamplesFolder": "예제 폴더 열기", - "downloadExamples": "예제 이미지 다운로드", + "copyRecipeSyntax": "레시피 문법 복사", + "sendToWorkflowAppend": "워크플로로 전송 (추가)", + "sendToWorkflowReplace": "워크플로로 전송 (교체)", + "openExamples": "예시 폴더 열기", + "downloadExamples": "예시 이미지 다운로드", "replacePreview": "미리보기 교체", "setContentRating": "콘텐츠 등급 설정", "moveToFolder": "폴더로 이동", @@ -172,89 +283,104 @@ "viewAllLoras": "모든 LoRA 보기", "downloadMissingLoras": "누락된 LoRA 다운로드", "deleteRecipe": "레시피 삭제" - }, - "modal": { - "title": "LoRA 세부사항", - "tabs": { - "examples": "예제", - "description": "모델 설명", - "recipes": "레시피" - }, - "info": { - "filename": "파일명", - "modelName": "모델명", - "baseModel": "베이스 모델", - "fileSize": "파일 크기", - "dateAdded": "추가 날짜", - "triggerWords": "트리거 워드", - "description": "설명", - "tags": "태그", - "rating": "평점", - "downloads": "다운로드", - "likes": "좋아요", - "version": "버전" - }, - "actions": { - "copyTriggerWords": "트리거 워드 복사", - "copyLoraName": "LoRA 이름 복사", - "sendToWorkflow": "워크플로우로 전송", - "viewOnCivitai": "Civitai에서 보기", - "downloadExamples": "예제 이미지 다운로드" - } } }, "recipes": { "title": "LoRA 레시피", "controls": { - "import": "레시피 가져오기", + "import": { + "action": "레시피 가져오기", + "title": "이미지 또는 URL에서 레시피 가져오기", + "urlLocalPath": "URL / 로컬 경로", + "uploadImage": "이미지 업로드", + "urlSectionDescription": "Civitai 이미지 URL 또는 로컬 파일 경로를 입력하여 레시피로 가져옵니다.", + "imageUrlOrPath": "이미지 URL 또는 파일 경로:", + "urlPlaceholder": "https://civitai.com/images/... 또는 C:/path/to/image.png", + "fetchImage": "이미지 가져오기", + "uploadSectionDescription": "LoRA 메타데이터가 포함된 이미지를 업로드하여 레시피로 가져옵니다.", + "selectImage": "이미지 선택", + "recipeName": "레시피 이름", + "recipeNamePlaceholder": "레시피 이름을 입력하세요", + "tagsOptional": "태그 (선택사항)", + "addTagPlaceholder": "태그 추가", + "addTag": "추가", + "noTagsAdded": "추가된 태그 없음", + "lorasInRecipe": "이 레시피의 LoRA", + "downloadLocationPreview": "다운로드 위치 미리보기:", + "useDefaultPath": "기본 경로 사용", + "useDefaultPathTooltip": "활성화하면 구성된 경로 템플릿을 사용하여 파일이 자동으로 정리됩니다", + "selectLoraRoot": "LoRA 루트 디렉토리를 선택하세요", + "targetFolderPath": "대상 폴더 경로:", + "folderPathPlaceholder": "폴더 경로를 입력하거나 아래 트리에서 선택하세요...", + "createNewFolder": "새 폴더 만들기", + "root": "루트", + "browseFolders": "폴더 탐색:", + "downloadAndSaveRecipe": "다운로드 및 레시피 저장", + "downloadMissingLoras": "누락된 LoRA 다운로드", + "saveRecipe": "레시피 저장", + "loraCountInfo": "({existing}/{total} 라이브러리에 있음)", + "processingInput": "입력 처리 중...", + "analyzingMetadata": "이미지 메타데이터 분석 중...", + "downloadingLoras": "LoRA 다운로드 중...", + "savingRecipe": "레시피 저장 중...", + "startingDownload": "LoRA {current}/{total} 다운로드 시작", + "deletedFromCivitai": "Civitai에서 삭제됨", + "inLibrary": "라이브러리에 있음", + "notInLibrary": "라이브러리에 없음", + "earlyAccessRequired": "이 LoRA는 얼리 액세스 결제가 필요합니다.", + "earlyAccessEnds": "얼리 액세스는 {date}에 종료됩니다.", + "earlyAccess": "얼리 액세스", + "verifyEarlyAccess": "다운로드 전에 얼리 액세스를 구매했는지 확인하세요.", + "duplicateRecipesFound": "라이브러리에서 {count}개의 동일한 레시피가 발견됨", + "duplicateRecipesDescription": "이 레시피들은 동일한 가중치의 같은 LoRA를 포함합니다.", + "showDuplicates": "중복 표시", + "hideDuplicates": "중복 숨기기", + "loraCount": "{count}개 LoRA", + "recipePreviewAlt": "레시피 미리보기", + "loraPreviewAlt": "LoRA 미리보기", + "errors": { + "selectImageFile": "이미지 파일을 선택해주세요", + "enterUrlOrPath": "URL 또는 파일 경로를 입력해주세요", + "selectLoraRoot": "LoRA 루트 디렉토리를 선택해주세요" + } + }, "refresh": { "title": "레시피 목록 새로고침" }, - "duplicates": { - "title": "중복 레시피 찾기" - }, - "filteredByLora": "LoRA로 필터됨", - "create": "레시피 만들기", - "export": "선택 항목 내보내기", - "downloadMissing": "누락된 LoRA 다운로드" + "filteredByLora": "LoRA로 필터링됨" }, "duplicates": { - "found": "{count}개의 중복 그룹을 찾았습니다", + "found": "{count}개의 중복 그룹 발견", "keepLatest": "최신 버전 유지", - "deleteSelected": "선택 항목 삭제" + "deleteSelected": "선택된 항목 삭제" }, - "card": { - "author": "작성자", - "loras": "{count}개 LoRA", - "tags": "태그", - "actions": { - "sendToWorkflow": "워크플로우로 전송", - "edit": "레시피 편집", - "duplicate": "레시피 복제", - "export": "레시피 내보내기", - "delete": "레시피 삭제" + "contextMenu": { + "copyRecipe": { + "missingId": "레시피를 복사할 수 없습니다: 레시피 ID 누락", + "failed": "레시피 문법 복사 실패" + }, + "sendRecipe": { + "missingId": "레시피를 전송할 수 없습니다: 레시피 ID 누락", + "failed": "레시피를 워크플로로 전송하는데 실패했습니다" + }, + "viewLoras": { + "missingId": "LoRA를 볼 수 없습니다: 레시피 ID 누락", + "noLorasFound": "이 레시피에서 LoRA를 찾을 수 없습니다", + "loadError": "레시피 LoRA 로딩 오류: {message}" + }, + "downloadMissing": { + "missingId": "LoRA를 다운로드할 수 없습니다: 레시피 ID 누락", + "noMissingLoras": "다운로드할 누락된 LoRA가 없습니다", + "getInfoFailed": "누락된 LoRA 정보를 가져오는데 실패했습니다", + "prepareError": "LoRA 다운로드 준비 중 오류: {message}" } } }, "checkpoints": { - "title": "체크포인트 모델", - "info": { - "filename": "파일명", - "modelName": "모델명", - "baseModel": "베이스 모델", - "fileSize": "파일 크기", - "dateAdded": "추가 날짜" - } + "title": "Checkpoint 모델" }, "embeddings": { - "title": "임베딩 모델", - "info": { - "filename": "파일명", - "modelName": "모델명", - "triggerWords": "트리거 워드", - "fileSize": "파일 크기", - "dateAdded": "추가 날짜" - } + "title": "Embedding 모델" }, "sidebar": { "modelRoot": "모델 루트", @@ -265,83 +391,165 @@ "title": "통계", "tabs": { "overview": "개요", - "usage": "사용 분석", + "usage": "사용량 분석", "collection": "컬렉션", "storage": "저장소", "insights": "인사이트" }, - "overview": { - "title": "개요", - "totalLoras": "총 LoRA 수", - "totalCheckpoints": "총 체크포인트 수", - "totalEmbeddings": "총 임베딩 수", - "totalSize": "총 크기", - "favoriteModels": "즐겨찾기 모델" + "usage": { + "mostUsedLoras": "가장 많이 사용된 LoRA", + "mostUsedCheckpoints": "가장 많이 사용된 Checkpoint", + "mostUsedEmbeddings": "가장 많이 사용된 Embedding" + }, + "collection": { + "popularTags": "인기 태그", + "modelTypes": "모델 유형", + "collectionAnalysis": "컬렉션 분석" + }, + "storage": { + "storageUsage": "저장소 사용량", + "largestModels": "가장 큰 모델", + "storageEfficiency": "저장소 대비 사용 효율성" + }, + "insights": { + "smartInsights": "스마트 인사이트", + "recommendations": "추천" }, "charts": { - "modelsByType": "유형별 모델", - "modelsByBaseModel": "베이스 모델별", - "modelsBySize": "파일 크기별", - "modelsAddedOverTime": "시간별 추가된 모델" + "collectionOverview": "컬렉션 개요", + "baseModelDistribution": "베이스 모델 분포", + "usageTrends": "사용량 트렌드 (최근 30일)", + "usageDistribution": "사용량 분포" } }, "modals": { - "delete": { - "title": "삭제 확인", - "message": "이 모델을 삭제하시겠습니까?", - "warningMessage": "이 작업은 되돌릴 수 없습니다.", - "confirm": "삭제", - "cancel": "취소" - }, "exclude": { - "title": "모델 제외", - "message": "이 모델을 라이브러리에서 제외하시겠습니까?", - "confirm": "제외", - "cancel": "취소" + "confirm": "제외" }, "download": { "title": "URL에서 모델 다운로드", + "titleWithType": "URL에서 {type} 다운로드", "url": "Civitai URL", + "civitaiUrl": "Civitai URL:", "placeholder": "https://civitai.com/models/...", "locationPreview": "다운로드 위치 미리보기", "useDefaultPath": "기본 경로 사용", - "useDefaultPathTooltip": "활성화되면 구성된 경로 템플릿을 사용하여 파일이 자동으로 정리됩니다", - "selectRootDirectory": "루트 디렉터리 선택", + "useDefaultPathTooltip": "활성화하면 구성된 경로 템플릿을 사용하여 파일이 자동으로 정리됩니다", + "selectRootDirectory": "루트 디렉토리를 선택하세요", + "selectModelRoot": "모델 루트 선택:", + "selectTypeRoot": "{type} 루트 선택:", + "targetFolderPath": "대상 폴더 경로:", + "browseFolders": "폴더 탐색:", + "createNewFolder": "새 폴더 만들기", + "pathPlaceholder": "폴더 경로를 입력하거나 아래 트리에서 선택하세요...", + "root": "루트", "download": "다운로드", - "cancel": "취소" + "fetchingVersions": "모델 버전 가져오는 중...", + "versionPreview": "버전 미리보기", + "earlyAccess": "얼리 액세스", + "earlyAccessTooltip": "얼리 액세스 필요", + "inLibrary": "라이브러리에 있음", + "alreadyInLibrary": "이미 라이브러리에 있음", + "autoOrganizedPath": "[경로 템플릿으로 자동 정리됨]", + "errors": { + "invalidUrl": "잘못된 Civitai URL 형식", + "noVersions": "이 모델에 사용 가능한 버전이 없습니다" + }, + "status": { + "preparing": "다운로드 준비 중...", + "downloadedPreview": "미리보기 이미지 다운로드됨", + "downloadingFile": "{type} 파일 다운로드 중", + "finalizing": "다운로드 완료 중..." + } }, "move": { - "title": "모델 이동", - "selectFolder": "대상 폴더 선택", - "createFolder": "새 폴더 만들기", - "folderName": "폴더 이름", - "move": "이동", - "cancel": "취소" + "title": "모델 이동" }, "contentRating": { "title": "콘텐츠 등급 설정", "current": "현재", "levels": { - "pg": "전체 이용가", - "pg13": "13세 이상", - "r": "제한됨", - "x": "성인 전용", - "xxx": "성인 노골적" + "pg": "PG", + "pg13": "PG13", + "r": "R", + "x": "X", + "xxx": "XXX" } }, - "model": { - "description": { - "noDescription": "모델 설명이 없습니다", - "failedToLoad": "모델 설명 로드에 실패했습니다", - "editTitle": "모델 설명 편집", - "validation": { - "cannotBeEmpty": "설명은 비어있을 수 없습니다" - }, - "messages": { - "updated": "모델 설명이 업데이트되었습니다", - "updateFailed": "모델 설명 업데이트에 실패했습니다" - } + "deleteModel": { + "title": "모델 삭제", + "message": "이 모델과 모든 관련 파일을 삭제하시겠습니까?" + }, + "excludeModel": { + "title": "모델 제외", + "message": "이 모델을 제외하시겠습니까? 제외된 모델은 검색이나 모델 목록에 나타나지 않습니다." + }, + "deleteDuplicateRecipes": { + "title": "중복 레시피 삭제", + "message": "선택된 중복 레시피를 삭제하시겠습니까?", + "countMessage": "개의 레시피가 영구적으로 삭제됩니다." + }, + "deleteDuplicateModels": { + "title": "중복 모델 삭제", + "message": "선택된 중복 모델을 삭제하시겠습니까?", + "countMessage": "개의 모델이 영구적으로 삭제됩니다." + }, + "clearCache": { + "title": "캐시 파일 지우기", + "message": "모든 캐시 파일을 지우시겠습니까?", + "description": "이렇게 하면 모든 캐시된 모델 데이터가 제거됩니다. 시스템은 다음 시작 시 캐시를 다시 구축해야 하며, 모델 컬렉션 크기에 따라 시간이 걸릴 수 있습니다.", + "action": "캐시 지우기" + }, + "bulkDelete": { + "title": "여러 모델 삭제", + "message": "선택된 모든 모델과 관련 파일을 삭제하시겠습니까?", + "countMessage": "개의 모델이 영구적으로 삭제됩니다.", + "action": "모두 삭제" + }, + "exampleAccess": { + "title": "로컬 예시 이미지", + "message": "이 모델의 로컬 예시 이미지를 찾을 수 없습니다. 보기 옵션:", + "downloadOption": { + "title": "Civitai에서 다운로드", + "description": "오프라인 사용 및 빠른 로딩을 위해 원격 예시를 로컬에 저장" }, + "importOption": { + "title": "직접 가져오기", + "description": "이 모델을 위한 사용자 정의 예시 추가" + }, + "footerNote": "로컬 복사본이 없어도 원격 예시는 모델 세부 정보에서 여전히 볼 수 있습니다" + }, + "moveModel": { + "targetLocationPreview": "대상 위치 미리보기:", + "selectModelRoot": "모델 루트 선택:", + "targetFolderPath": "대상 폴더 경로:", + "browseFolders": "폴더 탐색:", + "createNewFolder": "새 폴더 만들기", + "pathPlaceholder": "폴더 경로를 입력하거나 아래 트리에서 선택하세요...", + "root": "루트" + }, + "relinkCivitai": { + "title": "Civitai에 다시 연결", + "warning": "경고:", + "warningText": "이것은 잠재적으로 파괴적인 작업입니다. 다시 연결하면:", + "warningList": { + "overrideMetadata": "기존 메타데이터 덮어쓰기", + "modifyHash": "모델 해시를 잠재적으로 수정", + "unintendedConsequences": "기타 의도하지 않은 결과가 있을 수 있음" + }, + "proceedText": "원하는 작업이 확실한 경우에만 진행하세요.", + "urlLabel": "Civitai 모델 URL:", + "urlPlaceholder": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "helpText": { + "title": "모든 Civitai 모델 URL을 붙여넣으세요. 지원되는 형식:", + "format1": "https://civitai.com/models/649516", + "format2": "https://civitai.com/models/649516?modelVersionId=726676", + "format3": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "note": "참고: modelVersionId가 제공되지 않으면 최신 버전이 사용됩니다." + }, + "confirmAction": "다시 연결 확인" + }, + "model": { "actions": { "editModelName": "모델명 편집", "editFileName": "파일명 편집", @@ -360,18 +568,8 @@ "usageTips": "사용 팁", "additionalNotes": "추가 메모", "notesHint": "Enter로 저장, Shift+Enter로 줄바꿈", - "addNotesPlaceholder": "여기에 메모를 추가하세요...", - "aboutThisVersion": "이 버전에 대해", - "validation": { - "nameTooLong": "모델명은 100자로 제한됩니다", - "nameEmpty": "모델명은 비워둘 수 없습니다" - }, - "messages": { - "nameUpdated": "모델명이 성공적으로 업데이트됨", - "nameUpdateFailed": "모델명 업데이트 실패", - "baseModelUpdated": "베이스 모델이 성공적으로 업데이트됨", - "baseModelUpdateFailed": "베이스 모델 업데이트 실패" - } + "addNotesPlaceholder": "메모를 여기에 추가하세요...", + "aboutThisVersion": "이 버전에 대해" }, "notes": { "saved": "메모가 성공적으로 저장됨", @@ -379,69 +577,75 @@ }, "usageTips": { "addPresetParameter": "프리셋 매개변수 추가...", - "strengthMin": "강도 최소", - "strengthMax": "강도 최대", + "strengthMin": "최소 강도", + "strengthMax": "최대 강도", "strength": "강도", - "clipSkip": "Clip Skip", + "clipSkip": "클립 스킵", "valuePlaceholder": "값", "add": "추가" }, - "tags": { - "messages": { - "updated": "태그가 성공적으로 업데이트됨", - "updateFailed": "태그 업데이트 실패" - }, - "validation": { - "maxLength": "태그는 30자를 초과할 수 없습니다", - "maxCount": "최대 30개의 태그가 허용됩니다", - "duplicate": "이 태그는 이미 존재합니다" + "triggerWords": { + "label": "트리거 단어", + "noTriggerWordsNeeded": "트리거 단어가 필요하지 않음", + "edit": "트리거 단어 편집", + "cancel": "편집 취소", + "save": "변경사항 저장", + "addPlaceholder": "입력하거나 아래 제안을 클릭하세요", + "copyWord": "트리거 단어 복사", + "deleteWord": "트리거 단어 삭제", + "suggestions": { + "noSuggestions": "사용 가능한 제안이 없습니다", + "noTrainedWords": "이 모델에서 학습된 단어나 클래스 토큰을 찾을 수 없습니다. 수동으로 트리거 단어를 입력할 수 있습니다.", + "classToken": "클래스 토큰", + "classTokenDescription": "최상의 결과를 위해 프롬프트에 추가하세요", + "wordSuggestions": "단어 제안", + "wordsFound": "{count}개 단어 발견", + "loading": "제안 로딩 중..." } }, - "recipeTab": { - "noRecipesFound": "이 LoRA를 사용하는 레시피를 찾을 수 없습니다.", - "loadingRecipes": "레시피 로딩 중...", - "errorLoadingRecipes": "레시피 로딩에 실패했습니다. 나중에 다시 시도해주세요." + "description": { + "noDescription": "사용 가능한 모델 설명이 없습니다", + "failedToLoad": "모델 설명 로딩 실패", + "editTitle": "모델 설명 편집", + "validation": { + "cannotBeEmpty": "설명은 비어있을 수 없습니다" + }, + "messages": { + "updated": "모델 설명이 업데이트됨", + "updateFailed": "모델 설명 업데이트 실패" + } + }, + "tabs": { + "examples": "예시", + "description": "모델 설명", + "recipes": "레시피" + }, + "loading": { + "exampleImages": "예시 이미지 로딩 중...", + "description": "모델 설명 로딩 중...", + "recipes": "레시피 로딩 중...", + "examples": "예시 로딩 중..." } } }, - "errors": { - "general": "오류가 발생했습니다", - "networkError": "네트워크 오류입니다. 연결을 확인해주세요.", - "serverError": "서버 오류입니다. 나중에 다시 시도해주세요.", - "fileNotFound": "파일을 찾을 수 없습니다", - "invalidFile": "잘못된 파일 형식입니다", - "uploadFailed": "업로드 실패", - "downloadFailed": "다운로드 실패", - "saveFailed": "저장 실패", - "loadFailed": "로드 실패", - "deleteFailed": "삭제 실패", - "moveFailed": "이동 실패", - "copyFailed": "복사 실패", - "fetchFailed": "Civitai에서 데이터를 가져오는데 실패했습니다", - "invalidUrl": "잘못된 URL 형식입니다", - "missingPermissions": "권한이 부족합니다" - }, - "success": { - "saved": "성공적으로 저장되었습니다", - "deleted": "성공적으로 삭제되었습니다", - "moved": "성공적으로 이동되었습니다", - "copied": "성공적으로 복사되었습니다", - "downloaded": "성공적으로 다운로드되었습니다", - "uploaded": "성공적으로 업로드되었습니다", - "refreshed": "성공적으로 새로고침되었습니다", - "exported": "성공적으로 내보냈습니다", - "imported": "성공적으로 가져왔습니다" + "modelTags": { + "messages": { + "updated": "태그가 성공적으로 업데이트됨", + "updateFailed": "태그 업데이트 실패" + }, + "validation": { + "maxLength": "태그는 30자를 초과할 수 없습니다", + "maxCount": "최대 30개의 태그만 허용됩니다", + "duplicate": "이 태그는 이미 존재합니다" + } }, "keyboard": { - "navigation": "키보드 탐색:", + "navigation": "키보드 내비게이션:", "shortcuts": { "pageUp": "한 페이지 위로 스크롤", "pageDown": "한 페이지 아래로 스크롤", "home": "맨 위로 이동", - "end": "맨 아래로 이동", - "bulkMode": "일괄 모드 전환", - "search": "검색 포커스", - "escape": "모달/패널 닫기" + "end": "맨 아래로 이동" } }, "initialization": { @@ -450,111 +654,403 @@ "status": "초기화 중...", "estimatingTime": "시간 추정 중...", "loras": { - "title": "LoRA 매니저 초기화 중", - "message": "LoRA 캐시를 스캔하고 구축하고 있습니다. 몇 분 정도 걸릴 수 있습니다..." + "title": "LoRA Manager 초기화 중", + "message": "LoRA 캐시를 스캔하고 구축하고 있습니다. 몇 분이 걸릴 수 있습니다..." }, "checkpoints": { - "title": "체크포인트 매니저 초기화 중", - "message": "체크포인트 캐시를 스캔하고 구축하고 있습니다. 몇 분 정도 걸릴 수 있습니다..." + "title": "Checkpoint Manager 초기화 중", + "message": "Checkpoint 캐시를 스캔하고 구축하고 있습니다. 몇 분이 걸릴 수 있습니다..." }, "embeddings": { - "title": "임베딩 매니저 초기화 중", - "message": "임베딩 캐시를 스캔하고 구축하고 있습니다. 몇 분 정도 걸릴 수 있습니다..." + "title": "Embedding Manager 초기화 중", + "message": "Embedding 캐시를 스캔하고 구축하고 있습니다. 몇 분이 걸릴 수 있습니다..." }, "recipes": { - "title": "레시피 매니저 초기화 중", - "message": "레시피를 로드하고 처리하고 있습니다. 몇 분 정도 걸릴 수 있습니다..." + "title": "Recipe Manager 초기화 중", + "message": "레시피를 로딩하고 처리하고 있습니다. 몇 분이 걸릴 수 있습니다..." }, "statistics": { "title": "통계 초기화 중", - "message": "통계를 위한 모델 데이터를 처리하고 있습니다. 몇 분 정도 걸릴 수 있습니다..." + "message": "통계를 위한 모델 데이터를 처리하고 있습니다. 몇 분이 걸릴 수 있습니다..." }, "tips": { - "title": "팁과 요령", + "title": "팁 & 요령", "civitai": { "title": "Civitai 통합", - "description": "Civitai 계정을 연결하세요: 프로필 아바타 → 설정 → API 키 → API 키 추가로 이동한 후, Lora Manager 설정에 붙여넣으세요.", + "description": "Civitai 계정 연결: 프로필 아바타 → 설정 → API 키 → API 키 추가를 방문한 후 LoRA Manager 설정에 붙여넣으세요.", "alt": "Civitai API 설정" }, "download": { - "title": "쉬운 다운로드", - "description": "Civitai URL을 사용하여 새 모델을 빠르게 다운로드하고 설치하세요.", + "title": "간편 다운로드", + "description": "Civitai URL을 사용하여 새로운 모델을 빠르게 다운로드하고 설치하세요.", "alt": "Civitai 다운로드" }, "recipes": { "title": "레시피 저장", - "description": "좋아하는 모델 조합을 나중에 사용하기 위해 레시피를 만드세요.", + "description": "향후 사용을 위해 좋아하는 모델 조합을 저장할 레시피를 생성하세요.", "alt": "레시피" }, "filter": { "title": "빠른 필터링", - "description": "헤더의 필터 버튼을 사용하여 태그나 베이스 모델 유형으로 모델을 필터링하세요.", + "description": "헤더의 필터 버튼을 사용하여 태그나 베이스 모델 유형별로 모델을 필터링하세요.", "alt": "모델 필터" }, "search": { "title": "빠른 검색", - "description": "Ctrl+F (Mac에서는 Cmd+F)를 눌러 현재 보기에서 빠르게 검색하세요.", + "description": "Ctrl+F (Mac에서는 Cmd+F)를 눌러 현재 뷰에서 빠르게 검색하세요.", "alt": "빠른 검색" } - }, - "steps": { - "scanning": "모델 파일 스캔 중...", - "processing": "메타데이터 처리 중...", - "building": "캐시 구축 중...", - "finalizing": "완료 중..." } }, "duplicates": { - "found": "{count}개의 중복 그룹을 찾았습니다", + "found": "{count}개의 중복 그룹 발견", "showNotification": "중복 알림 표시", - "deleteSelected": "선택 항목 삭제", + "deleteSelected": "선택된 항목 삭제", "exitMode": "모드 종료", "help": { "identicalHashes": "동일한 해시는 이름이나 미리보기가 다르더라도 동일한 모델 파일을 의미합니다.", - "keepOne": "하나의 버전만 유지하고 (더 나은 메타데이터/미리보기가 있는 것을 선호) 나머지는 안전하게 삭제하세요." + "keepOne": "하나의 버전만 유지하고 (더 나은 메타데이터/미리보기가 있는 것이 바람직) 나머지는 안전하게 삭제하세요." } }, - "tooltips": { - "refresh": "모델 목록 새로고침", - "bulkOperations": "배치 작업을 위해 여러 모델 선택", - "favorites": "즐겨찾기 모델만 표시", - "duplicates": "중복 모델 찾기 및 관리", - "search": "이름, 태그 또는 기타 기준으로 모델 검색", - "filter": "다양한 기준으로 모델 필터링", - "sort": "다양한 속성으로 모델 정렬", - "backToTop": "페이지 맨 위로 스크롤" - }, - "modelCard": { - "actions": { - "addToFavorites": "즐겨찾기에 추가", - "removeFromFavorites": "즐겨찾기에서 제거", - "viewOnCivitai": "Civitai에서 보기", - "notAvailableFromCivitai": "Civitai에서 사용할 수 없음", - "sendToWorkflow": "ComfyUI로 전송 (클릭: 추가, Shift+클릭: 교체)", - "copyLoRASyntax": "LoRA 문법 복사", - "checkpointNameCopied": "체크포인트 이름이 복사됨", - "toggleBlur": "흐림 효과 전환", - "show": "표시", - "openExampleImages": "예제 이미지 폴더 열기" + "uiHelpers": { + "clipboard": { + "copied": "클립보드에 복사됨", + "copyFailed": "복사 실패" }, - "nsfw": { - "matureContent": "성인 콘텐츠", - "xxxRated": "XXX 등급 콘텐츠", - "xRated": "X 등급 콘텐츠", - "rRated": "R 등급 콘텐츠" + "lora": { + "syntaxCopied": "LoRA 문법이 클립보드에 복사됨", + "syntaxCopiedNoTriggerWords": "LoRA 문법이 클립보드에 복사됨 (트리거 단어를 찾을 수 없음)", + "syntaxCopiedWithTriggerWords": "트리거 단어가 포함된 LoRA 문법이 클립보드에 복사됨", + "syntaxCopiedWithTriggerWordGroups": "트리거 단어 그룹이 포함된 LoRA 문법이 클립보드에 복사됨" }, - "favorites": { - "added": "즐겨찾기에 추가됨", - "removed": "즐겨찾기에서 제거됨", - "updateFailed": "즐겨찾기 상태 업데이트 실패" + "workflow": { + "noSupportedNodes": "워크플로에서 지원되는 대상 노드를 찾을 수 없습니다", + "communicationFailed": "ComfyUI와의 통신에 실패했습니다" }, - "sendToWorkflow": { - "checkpointNotImplemented": "워크플로우로 체크포인트 전송 - 기능 구현 예정" + "nodeSelector": { + "recipe": "레시피", + "lora": "LoRA", + "replace": "교체", + "append": "추가", + "selectTargetNode": "대상 노드 선택", + "sendToAll": "모두에게 전송" }, "exampleImages": { - "checkError": "예제 이미지 확인 중 오류 발생", - "missingHash": "모델 해시 정보 누락.", - "noRemoteImagesAvailable": "이 모델에 대한 원격 예제 이미지가 Civitai에서 사용할 수 없습니다" + "opened": "예시 이미지 폴더가 열렸습니다", + "openingFolder": "예시 이미지 폴더를 여는 중", + "failedToOpen": "예시 이미지 폴더 열기 실패" + } + }, + "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": "업데이트 확인", + "updateAvailable": "업데이트 사용 가능", + "noChangelogAvailable": "상세한 변경 로그가 없습니다. 더 많은 정보는 GitHub를 확인하세요.", + "currentVersion": "현재 버전", + "newVersion": "새 버전", + "commit": "커밋", + "viewOnGitHub": "GitHub에서 보기", + "updateNow": "지금 업데이트", + "preparingUpdate": "업데이트 준비 중...", + "changelog": "변경 로그", + "checkingUpdates": "업데이트 확인 중...", + "checkingMessage": "최신 버전을 확인하는 동안 잠시 기다려주세요.", + "showNotifications": "업데이트 알림 표시", + "updateProgress": { + "preparing": "업데이트 준비 중...", + "installing": "업데이트 설치 중...", + "completed": "업데이트가 성공적으로 완료되었습니다!", + "failed": "업데이트 실패: {error}" + }, + "status": { + "updating": "업데이트 중...", + "updated": "업데이트됨!", + "updateFailed": "업데이트 실패" + }, + "completion": { + "successMessage": "{version}로 성공적으로 업데이트되었습니다!", + "restartMessage": "업데이트를 적용하려면 ComfyUI 또는 LoRA Manager를 재시작해주세요.", + "reloadMessage": "LoRA Manager와 ComfyUI 모두에 대해 브라우저를 새로고침해야 합니다." + }, + "nightly": { + "warning": "경고: 나이틀리 빌드는 실험적 기능을 포함할 수 있으며 불안정할 수 있습니다.", + "enable": "나이틀리 업데이트 활성화" + } + }, + "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를 사용해주셔서 감사합니다! ❤️" + }, + "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": "다운로드가 성공적으로 완료되었습니다" + }, + "recipes": { + "fetchFailed": "레시피 가져오기 실패: {message}", + "reloadFailed": "{modelType} 다시 로딩 실패: {message}", + "loadFailed": "{modelType} 로딩 실패: {message}", + "refreshComplete": "새로고침 완료", + "refreshFailed": "레시피 새로고침 실패: {message}", + "updateFailed": "레시피 업데이트 실패: {error}", + "updateError": "레시피 업데이트 오류: {message}", + "nameSaved": "레시피 \"{name}\"이 성공적으로 저장되었습니다", + "nameUpdated": "레시피 이름이 성공적으로 업데이트되었습니다", + "tagsUpdated": "레시피 태그가 성공적으로 업데이트되었습니다", + "sourceUrlUpdated": "소스 URL이 성공적으로 업데이트되었습니다", + "noRecipeId": "사용 가능한 레시피 ID가 없습니다", + "copyFailed": "레시피 문법 복사 오류: {message}", + "noMissingLoras": "다운로드할 누락된 LoRA가 없습니다", + "missingLorasInfoFailed": "누락된 LoRA 정보를 가져오는데 실패했습니다", + "preparingForDownloadFailed": "LoRA 다운로드 준비 오류", + "enterLoraName": "LoRA 이름 또는 문법을 입력해주세요", + "reconnectedSuccessfully": "LoRA가 성공적으로 다시 연결되었습니다", + "reconnectFailed": "LoRA 다시 연결 오류: {message}", + "cannotSend": "레시피를 전송할 수 없습니다: 레시피 ID 누락", + "sendFailed": "레시피를 워크플로로 전송하는데 실패했습니다", + "sendError": "레시피를 워크플로로 전송하는 중 오류", + "cannotDelete": "레시피를 삭제할 수 없습니다: 레시피 ID 누락", + "deleteConfirmationError": "삭제 확인 표시 오류", + "deletedSuccessfully": "레시피가 성공적으로 삭제되었습니다", + "deleteFailed": "레시피 삭제 오류: {message}", + "cannotShare": "레시피를 공유할 수 없습니다: 레시피 ID 누락", + "preparingForSharing": "공유를 위한 레시피 준비 중...", + "downloadStarted": "레시피 다운로드가 시작되었습니다", + "shareError": "레시피 공유 오류: {message}", + "sharePreparationError": "레시피 공유 준비 오류", + "selectImageFirst": "먼저 이미지를 선택해주세요", + "enterRecipeName": "레시피 이름을 입력해주세요", + "processingError": "처리 오류: {message}", + "folderBrowserError": "폴더 브라우저 로딩 오류: {message}", + "recipeSaveFailed": "레시피 저장 실패: {error}", + "importFailed": "가져오기 실패: {message}", + "folderTreeFailed": "폴더 트리 로딩 실패", + "folderTreeError": "폴더 트리 로딩 오류" + }, + "models": { + "noModelsSelected": "선택된 모델이 없습니다", + "deletedSuccessfully": "{count}개의 {type}이(가) 성공적으로 삭제되었습니다", + "deleteFailed": "오류: {error}", + "deleteFailedGeneral": "모델 삭제에 실패했습니다", + "selectedAdditional": "추가로 {count}개의 {type}이(가) 선택되었습니다", + "refreshMetadataFailed": "메타데이터 새로고침에 실패했습니다", + "nameCannotBeEmpty": "모델 이름은 비어있을 수 없습니다", + "nameUpdatedSuccessfully": "모델 이름이 성공적으로 업데이트되었습니다", + "nameUpdateFailed": "모델 이름 업데이트에 실패했습니다", + "baseModelUpdated": "베이스 모델이 성공적으로 업데이트되었습니다", + "baseModelUpdateFailed": "베이스 모델 업데이트에 실패했습니다", + "invalidCharactersRemoved": "파일명에서 잘못된 문자가 제거되었습니다", + "filenameCannotBeEmpty": "파일 이름은 비어있을 수 없습니다", + "renameFailed": "파일 이름 변경 실패: {message}", + "moveFailed": "모델 이동 실패: {message}", + "pleaseSelectRoot": "{type} 루트 디렉토리를 선택해주세요", + "nameTooLong": "모델 이름은 100자로 제한됩니다", + "verificationAlreadyDone": "이 그룹은 이미 검증되었습니다", + "verificationCompleteMismatch": "검증 완료. {count}개 파일의 실제 해시가 다릅니다.", + "verificationCompleteSuccess": "검증 완료. 모든 파일이 중복임을 확인했습니다.", + "verificationFailed": "해시 검증 실패: {message}" + }, + "search": { + "atLeastOneOption": "최소 하나의 검색 옵션을 선택해야 합니다" + }, + "settings": { + "loraRootsFailed": "LoRA 루트 로딩 실패: {message}", + "checkpointRootsFailed": "Checkpoint 루트 로딩 실패: {message}", + "embeddingRootsFailed": "Embedding 루트 로딩 실패: {message}", + "mappingsUpdated": "베이스 모델 경로 매핑이 업데이트되었습니다 ({count}개 매핑)", + "mappingsCleared": "베이스 모델 경로 매핑이 지워졌습니다", + "mappingSaveFailed": "베이스 모델 매핑 저장 실패: {message}", + "downloadTemplatesUpdated": "다운로드 경로 템플릿이 업데이트되었습니다", + "downloadTemplatesFailed": "다운로드 경로 템플릿 저장 실패: {message}", + "settingsUpdated": "설정 업데이트됨: {setting}", + "compactModeToggled": "컴팩트 모드 {state}", + "settingSaveFailed": "설정 저장 실패: {message}", + "displayDensitySet": "표시 밀도가 {density}로 설정되었습니다", + "languageChangeFailed": "언어 변경 실패: {message}", + "cacheCleared": "캐시 파일이 성공적으로 지워졌습니다. 다음 작업 시 캐시가 재구축됩니다.", + "cacheClearFailed": "캐시 지우기 실패: {error}", + "cacheClearError": "캐시 지우기 오류: {message}" + }, + "filters": { + "applied": "{message}", + "cleared": "필터가 지워졌습니다", + "noCustomFilterToClear": "지울 사용자 정의 필터가 없습니다" + }, + "downloads": { + "imagesCompleted": "예시 이미지 {action}이(가) 완료되었습니다", + "imagesFailed": "예시 이미지 {action}이(가) 실패했습니다", + "loadError": "다운로드 로딩 오류: {message}", + "downloadError": "다운로드 오류: {message}" + }, + "import": { + "folderTreeFailed": "폴더 트리 로딩 실패", + "folderTreeError": "폴더 트리 로딩 오류", + "imagesImported": "예시 이미지가 성공적으로 가져와졌습니다", + "importFailed": "예시 이미지 가져오기 실패: {message}" + }, + "triggerWords": { + "loadFailed": "학습된 단어를 로딩할 수 없습니다", + "tooLong": "트리거 단어는 30단어를 초과할 수 없습니다", + "tooMany": "최대 30개의 트리거 단어만 허용됩니다", + "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": "예시 이미지 경로가 성공적으로 업데이트되었습니다", + "downloadInProgress": "이미 다운로드가 진행 중입니다", + "enterLocationFirst": "먼저 다운로드 위치를 입력해주세요", + "downloadStarted": "예시 이미지 다운로드가 시작되었습니다", + "downloadStartFailed": "다운로드 시작 실패: {error}", + "downloadPaused": "다운로드가 일시정지되었습니다", + "pauseFailed": "다운로드 일시정지 실패: {error}", + "downloadResumed": "다운로드가 재개되었습니다", + "resumeFailed": "다운로드 재개 실패: {error}", + "deleted": "예시 이미지가 삭제되었습니다", + "deleteFailed": "예시 이미지 삭제 실패", + "setPreviewFailed": "미리보기 이미지 설정 실패" + }, + "api": { + "fetchFailed": "{type} 가져오기 실패: {message}", + "reloadFailed": "{type} 다시 로딩 실패: {message}", + "deleteSuccess": "{type}이(가) 성공적으로 삭제되었습니다", + "deleteFailed": "{type} 삭제 실패: {message}", + "excludeSuccess": "{type}이(가) 성공적으로 제외되었습니다", + "excludeFailed": "{type} 제외 실패: {message}", + "fileNameUpdated": "파일명이 성공적으로 업데이트되었습니다", + "fileRenameFailed": "파일 이름 변경 실패: {error}", + "previewUpdated": "미리보기가 성공적으로 업데이트되었습니다", + "previewUploadFailed": "미리보기 이미지 업로드 실패", + "refreshComplete": "{action} 완료", + "refreshFailed": "{type} {action} 실패", + "metadataRefreshed": "메타데이터가 성공적으로 새로고침되었습니다", + "metadataRefreshFailed": "메타데이터 새로고침 실패: {message}", + "metadataUpdateComplete": "메타데이터 업데이트 완료", + "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}" + } + }, + "banners": { + "versionMismatch": { + "title": "애플리케이션 업데이트 감지", + "content": "브라우저에서 구버전의 LoRA Manager ({storedVersion})를 실행하고 있습니다. 서버가 버전 {currentVersion}로 업데이트되었습니다. 올바른 기능을 위해 새로고침해주세요.", + "refreshNow": "지금 새로고침", + "refreshingIn": "새로고침까지", + "seconds": "초" } } -} \ No newline at end of file +} diff --git a/locales/ru.json b/locales/ru.json index f1a37a29..971aa3ed 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -1,66 +1,24 @@ { "common": { - "file": "Файл", - "folder": "Папка", - "name": "Имя", - "size": "Размер", - "date": "Дата", - "type": "Тип", - "path": "Путь", - "fileSize": { - "zero": "0 Байт", - "bytes": "Байт", - "kb": "КБ", - "mb": "МБ", - "gb": "ГБ", - "tb": "ТБ" - }, "actions": { "save": "Сохранить", "cancel": "Отмена", "delete": "Удалить", - "edit": "Редактировать", - "copy": "Копировать", "move": "Переместить", "refresh": "Обновить", - "download": "Скачать", - "upload": "Загрузить", - "search": "Поиск", - "filter": "Фильтр", - "sort": "Сортировка", - "select": "Выбрать", - "selectAll": "Выбрать всё", - "deselectAll": "Отменить выбор", - "confirm": "Подтвердить", - "close": "Закрыть", "back": "Назад", "next": "Далее", - "previous": "Предыдущий", - "view": "Просмотр", - "preview": "Предварительный просмотр", - "details": "Детали", "backToTop": "Наверх", "settings": "Настройки", - "help": "Помощь", - "about": "О программе" + "help": "Справка" }, "status": { "loading": "Загрузка...", - "saving": "Сохранение...", - "saved": "Сохранено", - "error": "Ошибка", - "success": "Успешно", - "warning": "Предупреждение", - "info": "Информация", - "processing": "Обработка...", - "completed": "Завершено", - "failed": "Неудачно", - "cancelled": "Отменено", - "pending": "Ожидание", - "ready": "Готово" + "unknown": "Неизвестно", + "date": "Дата", + "version": "Версия" }, "language": { - "current": "Язык", "select": "Выбрать язык", "select_help": "Выберите предпочитаемый язык интерфейса", "english": "English", @@ -72,42 +30,83 @@ "korean": "한국어", "french": "Français", "spanish": "Español" + }, + "fileSize": { + "zero": "0 Байт", + "bytes": "Байт", + "kb": "КБ", + "mb": "МБ", + "gb": "ГБ", + "tb": "ТБ" + } + }, + "modelCard": { + "actions": { + "addToFavorites": "Добавить в избранное", + "removeFromFavorites": "Удалить из избранного", + "viewOnCivitai": "Посмотреть на Civitai", + "notAvailableFromCivitai": "Недоступно на Civitai", + "sendToWorkflow": "Отправить в ComfyUI (Клик: Добавить, Shift+Клик: Заменить)", + "copyLoRASyntax": "Копировать синтаксис LoRA", + "checkpointNameCopied": "Имя checkpoint скопировано", + "toggleBlur": "Переключить размытие", + "show": "Показать", + "openExampleImages": "Открыть папку с примерами" + }, + "nsfw": { + "matureContent": "Контент для взрослых", + "xxxRated": "XXX-контент", + "xRated": "X-контент", + "rRated": "R-контент" + }, + "favorites": { + "added": "Добавлено в избранное", + "removed": "Удалено из избранного", + "updateFailed": "Не удалось обновить статус избранного" + }, + "sendToWorkflow": { + "checkpointNotImplemented": "Отправка checkpoint в workflow - функция будет реализована" + }, + "exampleImages": { + "checkError": "Ошибка проверки примеров изображений", + "missingHash": "Отсутствует хеш модели.", + "noRemoteImagesAvailable": "Нет удаленных примеров изображений для этой модели на Civitai" } }, "header": { - "appTitle": "LoRA Менеджер", + "appTitle": "LoRA Manager", "navigation": { - "loras": "LoRA", + "loras": "LoRAs", "recipes": "Рецепты", - "checkpoints": "Чекпойнты", - "embeddings": "Эмбеддинги", + "checkpoints": "Checkpoints", + "embeddings": "Embeddings", "statistics": "Статистика" }, "search": { "placeholder": "Поиск...", "placeholders": { - "loras": "Поиск LoRA...", + "loras": "Поиск LoRAs...", "recipes": "Поиск рецептов...", - "checkpoints": "Поиск чекпойнтов...", - "embeddings": "Поиск эмбеддингов..." + "checkpoints": "Поиск checkpoints...", + "embeddings": "Поиск embeddings..." }, - "options": "Параметры поиска", - "searchIn": "Поиск в:", + "options": "Опции поиска", + "searchIn": "Искать в:", "notAvailable": "Поиск недоступен на странице статистики", "filters": { "filename": "Имя файла", - "modelname": "Имя модели", + "modelname": "Название модели", "tags": "Теги", - "creator": "Создатель", + "creator": "Автор", "title": "Название рецепта", "loraName": "Имя файла LoRA", - "loraModel": "Имя модели LoRA" + "loraModel": "Название модели LoRA" } }, "filter": { "title": "Фильтр моделей", "baseModel": "Базовая модель", - "modelTags": "Теги (топ 20)", + "modelTags": "Теги (Топ 20)", "clearAll": "Очистить все фильтры" }, "theme": { @@ -115,146 +114,273 @@ "switchToLight": "Переключить на светлую тему", "switchToDark": "Переключить на тёмную тему", "switchToAuto": "Переключить на автоматическую тему" + }, + "actions": { + "checkUpdates": "Проверить обновления", + "support": "Поддержка" + } + }, + "settings": { + "civitaiApiKey": "Ключ API Civitai", + "civitaiApiKeyPlaceholder": "Введите ваш ключ API Civitai", + "civitaiApiKeyHelp": "Используется для аутентификации при загрузке моделей с Civitai", + "sections": { + "contentFiltering": "Фильтрация контента", + "videoSettings": "Настройки видео", + "layoutSettings": "Настройки макета", + "folderSettings": "Настройки папок", + "downloadPathTemplates": "Шаблоны путей загрузки", + "exampleImages": "Примеры изображений", + "misc": "Разное" + }, + "contentFiltering": { + "blurNsfwContent": "Размывать NSFW контент", + "blurNsfwContentHelp": "Размывать превью изображений контента для взрослых (NSFW)", + "showOnlySfw": "Показывать только SFW результаты", + "showOnlySfwHelp": "Фильтровать весь NSFW контент при просмотре и поиске" + }, + "videoSettings": { + "autoplayOnHover": "Автовоспроизведение видео при наведении", + "autoplayOnHoverHelp": "Воспроизводить превью видео только при наведении курсора" + }, + "layoutSettings": { + "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": "Предупреждение: Высокая плотность может вызвать проблемы с производительностью на системах с ограниченными ресурсами.", + "cardInfoDisplay": "Отображение информации карточки", + "cardInfoDisplayOptions": { + "always": "Всегда видимо", + "hover": "Показать при наведении" + }, + "cardInfoDisplayHelp": "Выберите когда отображать информацию о модели и кнопки действий:", + "cardInfoDisplayDetails": { + "always": "Всегда видимо: Заголовки и подписи всегда видны", + "hover": "Показать при наведении: Заголовки и подписи появляются только при наведении на карточку" + } + }, + "folderSettings": { + "defaultLoraRoot": "Корневая папка LoRA по умолчанию", + "defaultLoraRootHelp": "Установить корневую папку LoRA по умолчанию для загрузок, импорта и перемещений", + "defaultCheckpointRoot": "Корневая папка Checkpoint по умолчанию", + "defaultCheckpointRootHelp": "Установить корневую папку checkpoint по умолчанию для загрузок, импорта и перемещений", + "defaultEmbeddingRoot": "Корневая папка Embedding по умолчанию", + "defaultEmbeddingRootHelp": "Установить корневую папку embedding по умолчанию для загрузок, импорта и перемещений", + "noDefault": "Не задано" + }, + "downloadPathTemplates": { + "title": "Шаблоны путей загрузки", + "help": "Настройте структуру папок для разных типов моделей при загрузке с Civitai.", + "availablePlaceholders": "Доступные заполнители:", + "templateOptions": { + "flatStructure": "Плоская структура", + "byBaseModel": "По базовой модели", + "byAuthor": "По автору", + "byFirstTag": "По первому тегу", + "baseModelFirstTag": "Базовая модель + Первый тег", + "baseModelAuthor": "Базовая модель + Автор", + "authorFirstTag": "Автор + Первый тег", + "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": "Автоматически загружать примеры изображений для моделей, у которых их нет (требует настройки места загрузки)", + "optimizeImages": "Оптимизировать загруженные изображения", + "optimizeImagesHelp": "Оптимизировать примеры изображений для уменьшения размера файла и улучшения скорости загрузки (метаданные будут сохранены)", + "download": "Загрузить", + "restartRequired": "Требует перезапуска" + }, + "misc": { + "includeTriggerWords": "Включать триггерные слова в синтаксис LoRA", + "includeTriggerWordsHelp": "Включать обученные триггерные слова при копировании синтаксиса LoRA в буфер обмена" } }, "loras": { - "title": "LoRA Модели", "controls": { "sort": { "title": "Сортировать модели по...", - "name": "Имя", + "name": "Имени", "nameAsc": "А - Я", "nameDesc": "Я - А", - "date": "Дата добавления", - "dateDesc": "Новые", - "dateAsc": "Старые", - "size": "Размер файла", - "sizeDesc": "Самые большие", - "sizeAsc": "Самые маленькие" + "date": "Дате добавления", + "dateDesc": "Новейшим", + "dateAsc": "Старейшим", + "size": "Размеру файла", + "sizeDesc": "Наибольшим", + "sizeAsc": "Наименьшим" }, "refresh": { "title": "Обновить список моделей", - "quick": "Быстрое обновление (инкрементное)", - "full": "Полная перестройка (полная)" + "quick": "Быстрое обновление (инкрементальное)", + "full": "Полная перестройка (полное)" }, - "fetch": "Получить с Civitai", - "download": "Скачать по URL", + "fetch": "Загрузить с Civitai", + "download": "Загрузить по URL", "bulk": "Массовые операции", "duplicates": "Найти дубликаты", "favorites": "Показать только избранные" }, "bulkOperations": { - "title": "Массовые операции", "selected": "Выбрано {count}", - "sendToWorkflow": "Отправить все выбранные LoRA в рабочий процесс", - "copyAll": "Копировать синтаксис всех выбранных LoRA", - "refreshAll": "Обновить метаданные CivitAI для выбранных моделей", - "moveAll": "Переместить выбранные модели в папку", - "deleteAll": "Удалить выбранные модели", - "clear": "Очистить выбор" + "selectedSuffix": "выбрано", + "viewSelected": "Нажмите для просмотра выбранных элементов", + "sendToWorkflow": "Отправить в Workflow", + "copyAll": "Копировать все", + "refreshAll": "Обновить все", + "moveAll": "Переместить все", + "deleteAll": "Удалить все", + "clear": "Очистить" }, "contextMenu": { "refreshMetadata": "Обновить данные Civitai", - "relinkCivitai": "Переподключить к Civitai", + "relinkCivitai": "Пересвязать с Civitai", "copySyntax": "Копировать синтаксис LoRA", "copyFilename": "Копировать имя файла модели", "copyRecipeSyntax": "Копировать синтаксис рецепта", - "sendToWorkflowAppend": "Отправить в рабочий процесс (добавить)", - "sendToWorkflowReplace": "Отправить в рабочий процесс (заменить)", - "openExamplesFolder": "Открыть папку с примерами", - "downloadExamples": "Скачать примеры изображений", + "sendToWorkflowAppend": "Отправить в Workflow (Добавить)", + "sendToWorkflowReplace": "Отправить в Workflow (Заменить)", + "openExamples": "Открыть папку примеров", + "downloadExamples": "Загрузить примеры изображений", "replacePreview": "Заменить превью", - "setContentRating": "Установить возрастной рейтинг", + "setContentRating": "Установить рейтинг контента", "moveToFolder": "Переместить в папку", "excludeModel": "Исключить модель", "deleteModel": "Удалить модель", "shareRecipe": "Поделиться рецептом", - "viewAllLoras": "Просмотреть все LoRA", - "downloadMissingLoras": "Скачать недостающие LoRA", + "viewAllLoras": "Посмотреть все LoRAs", + "downloadMissingLoras": "Загрузить отсутствующие LoRAs", "deleteRecipe": "Удалить рецепт" - }, - "modal": { - "title": "Детали LoRA", - "tabs": { - "examples": "Примеры", - "description": "Описание модели", - "recipes": "Рецепты" - }, - "info": { - "filename": "Имя файла", - "modelName": "Имя модели", - "baseModel": "Базовая модель", - "fileSize": "Размер файла", - "dateAdded": "Дата добавления", - "triggerWords": "Ключевые слова", - "description": "Описание", - "tags": "Теги", - "rating": "Рейтинг", - "downloads": "Загрузки", - "likes": "Лайки", - "version": "Версия" - }, - "actions": { - "copyTriggerWords": "Копировать ключевые слова", - "copyLoraName": "Копировать имя LoRA", - "sendToWorkflow": "Отправить в рабочий процесс", - "viewOnCivitai": "Просмотреть на Civitai", - "downloadExamples": "Скачать примеры изображений" - } } }, "recipes": { - "title": "LoRA Рецепты", + "title": "Рецепты LoRA", "controls": { - "import": "Импортировать рецепт", + "import": { + "action": "Импортировать рецепт", + "title": "Импортировать рецепт из изображения или URL", + "urlLocalPath": "URL / Локальный путь", + "uploadImage": "Загрузить изображение", + "urlSectionDescription": "Введите URL изображения Civitai или локальный путь к файлу для импорта в качестве рецепта.", + "imageUrlOrPath": "URL изображения или путь к файлу:", + "urlPlaceholder": "https://civitai.com/images/... или C:/path/to/image.png", + "fetchImage": "Получить изображение", + "uploadSectionDescription": "Загрузите изображение с метаданными LoRA для импорта в качестве рецепта.", + "selectImage": "Выбрать изображение", + "recipeName": "Название рецепта", + "recipeNamePlaceholder": "Введите название рецепта", + "tagsOptional": "Теги (необязательно)", + "addTagPlaceholder": "Добавить тег", + "addTag": "Добавить", + "noTagsAdded": "Теги не добавлены", + "lorasInRecipe": "LoRAs в этом рецепте", + "downloadLocationPreview": "Предпросмотр места загрузки:", + "useDefaultPath": "Использовать путь по умолчанию", + "useDefaultPathTooltip": "При включении файлы автоматически организуются с использованием настроенных шаблонов путей", + "selectLoraRoot": "Выберите корневую папку LoRA", + "targetFolderPath": "Путь к целевой папке:", + "folderPathPlaceholder": "Введите путь к папке или выберите из дерева ниже...", + "createNewFolder": "Создать новую папку", + "root": "Корень", + "browseFolders": "Обзор папок:", + "downloadAndSaveRecipe": "Скачать и сохранить рецепт", + "downloadMissingLoras": "Скачать отсутствующие LoRAs", + "saveRecipe": "Сохранить рецепт", + "loraCountInfo": "({existing}/{total} в библиотеке)", + "processingInput": "Обработка ввода...", + "analyzingMetadata": "Анализ метаданных изображения...", + "downloadingLoras": "Загрузка LoRAs...", + "savingRecipe": "Сохранение рецепта...", + "startingDownload": "Начало загрузки LoRA {current}/{total}", + "deletedFromCivitai": "Удалено с Civitai", + "inLibrary": "В библиотеке", + "notInLibrary": "Не в библиотеке", + "earlyAccessRequired": "Для загрузки этой LoRA требуется платный ранний доступ.", + "earlyAccessEnds": "Ранний доступ заканчивается {date}.", + "earlyAccess": "Ранний доступ", + "verifyEarlyAccess": "Убедитесь, что вы приобрели ранний доступ перед загрузкой.", + "duplicateRecipesFound": "Найдено {count} идентичных рецептов в вашей библиотеке", + "duplicateRecipesDescription": "Эти рецепты содержат одинаковые LoRAs с идентичными весами.", + "showDuplicates": "Показать дубликаты", + "hideDuplicates": "Скрыть дубликаты", + "loraCount": "{count} LoRAs", + "recipePreviewAlt": "Предпросмотр рецепта", + "loraPreviewAlt": "Предпросмотр LoRA", + "errors": { + "selectImageFile": "Пожалуйста, выберите файл изображения", + "enterUrlOrPath": "Пожалуйста, введите URL или путь к файлу", + "selectLoraRoot": "Пожалуйста, выберите корневую папку LoRA" + } + }, "refresh": { "title": "Обновить список рецептов" }, - "duplicates": { - "title": "Найти дублирующиеся рецепты" - }, - "filteredByLora": "Отфильтровано по LoRA", - "create": "Создать рецепт", - "export": "Экспортировать выбранные", - "downloadMissing": "Скачать недостающие LoRA" + "filteredByLora": "Фильтр по LoRA" }, "duplicates": { - "found": "Найдено {count} дублирующихся групп", - "keepLatest": "Сохранить последние версии", + "found": "Найдено {count} групп дубликатов", + "keepLatest": "Оставить последние версии", "deleteSelected": "Удалить выбранные" }, - "card": { - "author": "Автор", - "loras": "{count} LoRA", - "tags": "Теги", - "actions": { - "sendToWorkflow": "Отправить в рабочий процесс", - "edit": "Редактировать рецепт", - "duplicate": "Дублировать рецепт", - "export": "Экспортировать рецепт", - "delete": "Удалить рецепт" + "contextMenu": { + "copyRecipe": { + "missingId": "Невозможно скопировать рецепт: отсутствует ID рецепта", + "failed": "Не удалось скопировать синтаксис рецепта" + }, + "sendRecipe": { + "missingId": "Невозможно отправить рецепт: отсутствует ID рецепта", + "failed": "Не удалось отправить рецепт в workflow" + }, + "viewLoras": { + "missingId": "Невозможно просмотреть LoRAs: отсутствует ID рецепта", + "noLorasFound": "В этом рецепте не найдено LoRAs", + "loadError": "Ошибка загрузки LoRAs рецепта: {message}" + }, + "downloadMissing": { + "missingId": "Невозможно загрузить LoRAs: отсутствует ID рецепта", + "noMissingLoras": "Нет отсутствующих LoRAs для загрузки", + "getInfoFailed": "Не удалось получить информацию для отсутствующих LoRAs", + "prepareError": "Ошибка подготовки LoRAs для загрузки: {message}" } } }, "checkpoints": { - "title": "Модели чекпойнтов", - "info": { - "filename": "Имя файла", - "modelName": "Имя модели", - "baseModel": "Базовая модель", - "fileSize": "Размер файла", - "dateAdded": "Дата добавления" - } + "title": "Модели Checkpoint" }, "embeddings": { - "title": "Модели эмбеддингов", - "info": { - "filename": "Имя файла", - "modelName": "Имя модели", - "triggerWords": "Ключевые слова", - "fileSize": "Размер файла", - "dateAdded": "Дата добавления" - } + "title": "Модели Embedding" }, "sidebar": { "modelRoot": "Корень моделей", @@ -267,83 +393,165 @@ "overview": "Обзор", "usage": "Анализ использования", "collection": "Коллекция", - "storage": "Хранилище", + "storage": "Хранение", "insights": "Аналитика" }, - "overview": { - "title": "Обзор", - "totalLoras": "Всего LoRA", - "totalCheckpoints": "Всего чекпойнтов", - "totalEmbeddings": "Всего эмбеддингов", - "totalSize": "Общий размер", - "favoriteModels": "Избранные модели" + "usage": { + "mostUsedLoras": "Наиболее используемые LoRAs", + "mostUsedCheckpoints": "Наиболее используемые Checkpoints", + "mostUsedEmbeddings": "Наиболее используемые Embeddings" + }, + "collection": { + "popularTags": "Популярные теги", + "modelTypes": "Типы моделей", + "collectionAnalysis": "Анализ коллекции" + }, + "storage": { + "storageUsage": "Использование хранилища", + "largestModels": "Самые большие модели", + "storageEfficiency": "Эффективность хранения против использования" + }, + "insights": { + "smartInsights": "Умная аналитика", + "recommendations": "Рекомендации" }, "charts": { - "modelsByType": "Модели по типу", - "modelsByBaseModel": "Модели по базовой модели", - "modelsBySize": "Модели по размеру файла", - "modelsAddedOverTime": "Модели, добавленные со временем" + "collectionOverview": "Обзор коллекции", + "baseModelDistribution": "Распределение базовых моделей", + "usageTrends": "Тенденции использования (за последние 30 дней)", + "usageDistribution": "Распределение использования" } }, "modals": { - "delete": { - "title": "Подтвердить удаление", - "message": "Вы уверены, что хотите удалить эту модель?", - "warningMessage": "Это действие нельзя отменить.", - "confirm": "Удалить", - "cancel": "Отмена" - }, "exclude": { - "title": "Исключить модель", - "message": "Вы уверены, что хотите исключить эту модель из библиотеки?", - "confirm": "Исключить", - "cancel": "Отмена" + "confirm": "Исключить" }, "download": { "title": "Скачать модель по URL", + "titleWithType": "Скачать {type} по URL", "url": "Civitai URL", + "civitaiUrl": "Civitai URL:", "placeholder": "https://civitai.com/models/...", - "locationPreview": "Предварительный просмотр места загрузки", + "locationPreview": "Предпросмотр места загрузки", "useDefaultPath": "Использовать путь по умолчанию", "useDefaultPathTooltip": "При включении файлы автоматически организуются с использованием настроенных шаблонов путей", - "selectRootDirectory": "Выбрать корневую директорию", + "selectRootDirectory": "Выберите корневую папку", + "selectModelRoot": "Выберите корень моделей:", + "selectTypeRoot": "Выберите корень {type}:", + "targetFolderPath": "Путь к целевой папке:", + "browseFolders": "Обзор папок:", + "createNewFolder": "Создать новую папку", + "pathPlaceholder": "Введите путь к папке или выберите из дерева ниже...", + "root": "Корень", "download": "Скачать", - "cancel": "Отмена" - }, - "move": { - "title": "Переместить модели", - "selectFolder": "Выбрать папку назначения", - "createFolder": "Создать новую папку", - "folderName": "Имя папки", - "move": "Переместить", - "cancel": "Отмена" - }, - "contentRating": { - "title": "Установить возрастной рейтинг", - "current": "Текущий", - "levels": { - "pg": "Для всех", - "pg13": "13+", - "r": "Ограничено", - "x": "Только для взрослых", - "xxx": "Откровенное содержание" + "fetchingVersions": "Получение версий модели...", + "versionPreview": "Предпросмотр версии", + "earlyAccess": "Ранний доступ", + "earlyAccessTooltip": "Требуется ранний доступ", + "inLibrary": "В библиотеке", + "alreadyInLibrary": "Уже в библиотеке", + "autoOrganizedPath": "[Автоматически организовано по шаблону пути]", + "errors": { + "invalidUrl": "Неверный формат URL Civitai", + "noVersions": "Нет доступных версий для этой модели" + }, + "status": { + "preparing": "Подготовка загрузки...", + "downloadedPreview": "Превью изображение загружено", + "downloadingFile": "Загрузка файла {type}", + "finalizing": "Завершение загрузки..." } }, - "model": { - "description": { - "noDescription": "Описание модели недоступно", - "failedToLoad": "Не удалось загрузить описание модели", - "editTitle": "Редактировать описание модели", - "validation": { - "cannotBeEmpty": "Описание не может быть пустым" - }, - "messages": { - "updated": "Описание модели обновлено", - "updateFailed": "Не удалось обновить описание модели" - } + "move": { + "title": "Переместить модели" + }, + "contentRating": { + "title": "Установить рейтинг контента", + "current": "Текущий", + "levels": { + "pg": "PG", + "pg13": "PG13", + "r": "R", + "x": "X", + "xxx": "XXX" + } + }, + "deleteModel": { + "title": "Удалить модель", + "message": "Вы уверены, что хотите удалить эту модель и все связанные файлы?" + }, + "excludeModel": { + "title": "Исключить модель", + "message": "Вы уверены, что хотите исключить эту модель? Исключенные модели не будут отображаться в поиске или списках моделей." + }, + "deleteDuplicateRecipes": { + "title": "Удалить дублирующиеся рецепты", + "message": "Вы уверены, что хотите удалить выбранные дублирующиеся рецепты?", + "countMessage": "рецептов будут удалены навсегда." + }, + "deleteDuplicateModels": { + "title": "Удалить дублирующиеся модели", + "message": "Вы уверены, что хотите удалить выбранные дублирующиеся модели?", + "countMessage": "моделей будут удалены навсегда." + }, + "clearCache": { + "title": "Очистить файлы кэша", + "message": "Вы уверены, что хотите очистить все файлы кэша?", + "description": "Это удалит все кэшированные данные моделей. Системе потребуется пересобрать кэш при следующем запуске, что может занять некоторое время в зависимости от размера вашей коллекции моделей.", + "action": "Очистить кэш" + }, + "bulkDelete": { + "title": "Удалить несколько моделей", + "message": "Вы уверены, что хотите удалить все выбранные модели и связанные с ними файлы?", + "countMessage": "моделей будут удалены навсегда.", + "action": "Удалить все" + }, + "exampleAccess": { + "title": "Локальные примеры изображений", + "message": "Локальные примеры изображений для этой модели не найдены. Варианты просмотра:", + "downloadOption": { + "title": "Скачать с Civitai", + "description": "Сохранить удаленные примеры локально для использования офлайн и более быстрой загрузки" }, + "importOption": { + "title": "Импортировать свои", + "description": "Добавить собственные примеры для этой модели" + }, + "footerNote": "Удаленные примеры все еще можно просматривать в деталях модели даже без локальных копий" + }, + "moveModel": { + "targetLocationPreview": "Предпросмотр целевого расположения:", + "selectModelRoot": "Выберите корень моделей:", + "targetFolderPath": "Путь к целевой папке:", + "browseFolders": "Обзор папок:", + "createNewFolder": "Создать новую папку", + "pathPlaceholder": "Введите путь к папке или выберите из дерева ниже...", + "root": "Корень" + }, + "relinkCivitai": { + "title": "Пересвязать с Civitai", + "warning": "Предупреждение:", + "warningText": "Это потенциально разрушительная операция. Пересвязывание:", + "warningList": { + "overrideMetadata": "Перезапишет существующие метаданные", + "modifyHash": "Потенциально изменит хеш модели", + "unintendedConsequences": "Может иметь другие непредвиденные последствия" + }, + "proceedText": "Продолжайте только если вы уверены, что это то, что вам нужно.", + "urlLabel": "URL модели Civitai:", + "urlPlaceholder": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "helpText": { + "title": "Вставьте любой URL модели Civitai. Поддерживаемые форматы:", + "format1": "https://civitai.com/models/649516", + "format2": "https://civitai.com/models/649516?modelVersionId=726676", + "format3": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "note": "Примечание: Если modelVersionId не указан, будет использована последняя версия." + }, + "confirmAction": "Подтвердить пересвязывание" + }, + "model": { "actions": { - "editModelName": "Редактировать имя модели", + "editModelName": "Редактировать название модели", "editFileName": "Редактировать имя файла", "editBaseModel": "Редактировать базовую модель", "viewOnCivitai": "Посмотреть на Civitai", @@ -359,19 +567,9 @@ "unknown": "Неизвестно", "usageTips": "Советы по использованию", "additionalNotes": "Дополнительные заметки", - "notesHint": "Enter для сохранения, Shift+Enter для новой строки", - "addNotesPlaceholder": "Добавьте свои заметки здесь...", - "aboutThisVersion": "О данной версии", - "validation": { - "nameTooLong": "Имя модели ограничено 100 символами", - "nameEmpty": "Имя модели не может быть пустым" - }, - "messages": { - "nameUpdated": "Имя модели успешно обновлено", - "nameUpdateFailed": "Не удалось обновить имя модели", - "baseModelUpdated": "Базовая модель успешно обновлена", - "baseModelUpdateFailed": "Не удалось обновить базовую модель" - } + "notesHint": "Нажмите Enter для сохранения, Shift+Enter для новой строки", + "addNotesPlaceholder": "Добавьте ваши заметки здесь...", + "aboutThisVersion": "Об этой версии" }, "notes": { "saved": "Заметки успешно сохранены", @@ -386,175 +584,473 @@ "valuePlaceholder": "Значение", "add": "Добавить" }, - "tags": { - "messages": { - "updated": "Теги успешно обновлены", - "updateFailed": "Не удалось обновить теги" - }, - "validation": { - "maxLength": "Тег не должен превышать 30 символов", - "maxCount": "Разрешено максимум 30 тегов", - "duplicate": "Этот тег уже существует" + "triggerWords": { + "label": "Триггерные слова", + "noTriggerWordsNeeded": "Триггерные слова не нужны", + "edit": "Редактировать триггерные слова", + "cancel": "Отменить редактирование", + "save": "Сохранить изменения", + "addPlaceholder": "Введите для добавления или нажмите на предложения ниже", + "copyWord": "Копировать триггерное слово", + "deleteWord": "Удалить триггерное слово", + "suggestions": { + "noSuggestions": "Предложения недоступны", + "noTrainedWords": "В этой модели не найдено обученных слов или токенов классов. Вы можете вручную ввести триггерные слова.", + "classToken": "Токен класса", + "classTokenDescription": "Добавьте в ваш промпт для лучших результатов", + "wordSuggestions": "Предложения слов", + "wordsFound": "найдено {count} слов", + "loading": "Загрузка предложений..." } }, - "recipeTab": { - "noRecipesFound": "Не найдено рецептов, использующих эту LoRA.", - "loadingRecipes": "Загрузка рецептов...", - "errorLoadingRecipes": "Не удалось загрузить рецепты. Пожалуйста, попробуйте позже." + "description": { + "noDescription": "Описание модели недоступно", + "failedToLoad": "Не удалось загрузить описание модели", + "editTitle": "Редактировать описание модели", + "validation": { + "cannotBeEmpty": "Описание не может быть пустым" + }, + "messages": { + "updated": "Описание модели обновлено", + "updateFailed": "Не удалось обновить описание модели" + } + }, + "tabs": { + "examples": "Примеры", + "description": "Описание модели", + "recipes": "Рецепты" + }, + "loading": { + "exampleImages": "Загрузка примеров изображений...", + "description": "Загрузка описания модели...", + "recipes": "Загрузка рецептов...", + "examples": "Загрузка примеров..." } } }, - "errors": { - "general": "Произошла ошибка", - "networkError": "Ошибка сети. Проверьте подключение.", - "serverError": "Ошибка сервера. Попробуйте ещё раз позже.", - "fileNotFound": "Файл не найден", - "invalidFile": "Неверный формат файла", - "uploadFailed": "Загрузка не удалась", - "downloadFailed": "Скачивание не удалось", - "saveFailed": "Сохранение не удалось", - "loadFailed": "Загрузка не удалась", - "deleteFailed": "Удаление не удалось", - "moveFailed": "Перемещение не удалось", - "copyFailed": "Копирование не удалось", - "fetchFailed": "Не удалось получить данные с Civitai", - "invalidUrl": "Неверный формат URL", - "missingPermissions": "Недостаточно прав" - }, - "success": { - "saved": "Успешно сохранено", - "deleted": "Успешно удалено", - "moved": "Успешно перемещено", - "copied": "Успешно скопировано", - "downloaded": "Успешно скачано", - "uploaded": "Успешно загружено", - "refreshed": "Успешно обновлено", - "exported": "Успешно экспортировано", - "imported": "Успешно импортировано" + "modelTags": { + "messages": { + "updated": "Теги успешно обновлены", + "updateFailed": "Не удалось обновить теги" + }, + "validation": { + "maxLength": "Тег не должен превышать 30 символов", + "maxCount": "Максимум 30 тегов разрешено", + "duplicate": "Этот тег уже существует" + } }, "keyboard": { "navigation": "Навигация с клавиатуры:", "shortcuts": { - "pageUp": "Прокрутить вверх на одну страницу", - "pageDown": "Прокрутить вниз на одну страницу", - "home": "Перейти наверх", - "end": "Перейти вниз", - "bulkMode": "Переключить массовый режим", - "search": "Фокус на поиске", - "escape": "Закрыть модальное окно/панель" + "pageUp": "Прокрутить на страницу вверх", + "pageDown": "Прокрутить на страницу вниз", + "home": "Перейти к началу", + "end": "Перейти к концу" } }, "initialization": { "title": "Инициализация", - "message": "Подготовка рабочего пространства...", + "message": "Подготовка вашего рабочего пространства...", "status": "Инициализация...", - "estimatingTime": "Оценка времени...", + "estimatingTime": "Расчет времени...", "loras": { - "title": "Инициализация LoRA Менеджера", - "message": "Сканирование и создание кэша LoRA. Это может занять несколько минут..." + "title": "Инициализация LoRA Manager", + "message": "Сканирование и построение кэша LoRA. Это может занять несколько минут..." }, "checkpoints": { - "title": "Инициализация менеджера чекпойнтов", - "message": "Сканирование и создание кэша чекпойнтов. Это может занять несколько минут..." + "title": "Инициализация Checkpoint Manager", + "message": "Сканирование и построение кэша checkpoint. Это может занять несколько минут..." }, "embeddings": { - "title": "Инициализация менеджера эмбеддингов", - "message": "Сканирование и создание кэша эмбеддингов. Это может занять несколько минут..." + "title": "Инициализация Embedding Manager", + "message": "Сканирование и построение кэша embedding. Это может занять несколько минут..." }, "recipes": { - "title": "Инициализация менеджера рецептов", + "title": "Инициализация Recipe Manager", "message": "Загрузка и обработка рецептов. Это может занять несколько минут..." }, "statistics": { "title": "Инициализация статистики", - "message": "Обработка данных модели для статистики. Это может занять несколько минут..." + "message": "Обработка данных моделей для статистики. Это может занять несколько минут..." }, "tips": { "title": "Советы и хитрости", "civitai": { "title": "Интеграция с Civitai", - "description": "Подключите аккаунт Civitai: Перейдите в Аватар профиля → Настройки → API ключи → Добавить API ключ, затем вставьте его в настройки Lora Manager.", - "alt": "Настройка Civitai API" + "description": "Подключите ваш аккаунт Civitai: Перейдите в Аватар профиля → Настройки → API ключи → Добавить API ключ, затем вставьте его в настройки Lora Manager.", + "alt": "Настройка API Civitai" }, "download": { - "title": "Простое скачивание", - "description": "Используйте URL Civitai для быстрого скачивания и установки новых моделей.", - "alt": "Скачивание с Civitai" + "title": "Легкая загрузка", + "description": "Используйте URL Civitai для быстрой загрузки и установки новых моделей.", + "alt": "Загрузка с Civitai" }, "recipes": { "title": "Сохранение рецептов", - "description": "Создавайте рецепты для сохранения любимых комбинаций моделей для будущего использования.", + "description": "Создавайте рецепты для сохранения ваших любимых комбинаций моделей для будущего использования.", "alt": "Рецепты" }, "filter": { "title": "Быстрая фильтрация", "description": "Фильтруйте модели по тегам или типу базовой модели, используя кнопку фильтра в заголовке.", - "alt": "Фильтр моделей" + "alt": "Фильтрация моделей" }, "search": { "title": "Быстрый поиск", "description": "Нажмите Ctrl+F (Cmd+F на Mac) для быстрого поиска в текущем представлении.", "alt": "Быстрый поиск" } - }, - "steps": { - "scanning": "Сканирование файлов моделей...", - "processing": "Обработка метаданных...", - "building": "Создание кэша...", - "finalizing": "Завершение..." } }, "duplicates": { - "found": "Найдено {count} дублирующихся групп", + "found": "Найдено {count} групп дубликатов", "showNotification": "Показать уведомление о дубликатах", "deleteSelected": "Удалить выбранные", "exitMode": "Выйти из режима", "help": { - "identicalHashes": "Одинаковые хэши означают одинаковые файлы моделей, даже если у них разные имена или превью.", + "identicalHashes": "Идентичные хеши означают идентичные файлы моделей, даже если у них разные названия или превью.", "keepOne": "Оставьте только одну версию (предпочтительно с лучшими метаданными/превью) и безопасно удалите остальные." } }, - "tooltips": { - "refresh": "Обновить список моделей", - "bulkOperations": "Выбрать несколько моделей для пакетных операций", - "favorites": "Показать только избранные модели", - "duplicates": "Найти и управлять дублирующимися моделями", - "search": "Поиск моделей по имени, тегам или другим критериям", - "filter": "Фильтровать модели по различным критериям", - "sort": "Сортировать модели по разным атрибутам", - "backToTop": "Прокрутить обратно наверх страницы" - }, - "modelCard": { - "actions": { - "addToFavorites": "Добавить в избранное", - "removeFromFavorites": "Удалить из избранного", - "viewOnCivitai": "Посмотреть на Civitai", - "notAvailableFromCivitai": "Недоступно на Civitai", - "sendToWorkflow": "Отправить в ComfyUI (Клик: Добавить, Shift+Клик: Заменить)", - "copyLoRASyntax": "Копировать синтаксис LoRA", - "checkpointNameCopied": "Имя чекпоинта скопировано", - "toggleBlur": "Переключить размытие", - "show": "Показать", - "openExampleImages": "Открыть папку с примерами изображений" + "uiHelpers": { + "clipboard": { + "copied": "Скопировано в буфер обмена", + "copyFailed": "Копирование не удалось" }, - "nsfw": { - "matureContent": "Контент для взрослых", - "xxxRated": "XXX-контент", - "xRated": "X-контент", - "rRated": "R-контент" + "lora": { + "syntaxCopied": "Синтаксис LoRA скопирован в буфер обмена", + "syntaxCopiedNoTriggerWords": "Синтаксис LoRA скопирован в буфер обмена (триггерные слова не найдены)", + "syntaxCopiedWithTriggerWords": "Синтаксис LoRA с триггерными словами скопирован в буфер обмена", + "syntaxCopiedWithTriggerWordGroups": "Синтаксис LoRA с группами триггерных слов скопирован в буфер обмена" }, - "favorites": { - "added": "Добавлено в избранное", - "removed": "Удалено из избранного", - "updateFailed": "Не удалось обновить статус избранного" + "workflow": { + "noSupportedNodes": "В workflow не найдены поддерживаемые целевые узлы", + "communicationFailed": "Не удалось установить связь с ComfyUI" }, - "sendToWorkflow": { - "checkpointNotImplemented": "Отправка чекпоинта в рабочий процесс - функция в разработке" + "nodeSelector": { + "recipe": "Рецепт", + "lora": "LoRA", + "replace": "Заменить", + "append": "Добавить", + "selectTargetNode": "Выберите целевой узел", + "sendToAll": "Отправить во все" }, "exampleImages": { - "checkError": "Ошибка при проверке примеров изображений", - "missingHash": "Отсутствует информация о хэше модели.", - "noRemoteImagesAvailable": "Для этой модели нет удалённых примеров изображений на Civitai" + "opened": "Папка с примерами изображений открыта", + "openingFolder": "Открытие папки с примерами изображений", + "failedToOpen": "Не удалось открыть папку с примерами изображений" + } + }, + "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": "Проверить обновления", + "updateAvailable": "Доступно обновление", + "noChangelogAvailable": "Подробный список изменений недоступен. Проверьте GitHub для получения дополнительной информации.", + "currentVersion": "Текущая версия", + "newVersion": "Новая версия", + "commit": "Коммит", + "viewOnGitHub": "Посмотреть на GitHub", + "updateNow": "Обновить сейчас", + "preparingUpdate": "Подготовка обновления...", + "changelog": "Список изменений", + "checkingUpdates": "Проверка обновлений...", + "checkingMessage": "Пожалуйста, подождите, пока мы проверяем последнюю версию.", + "showNotifications": "Показывать уведомления об обновлениях", + "updateProgress": { + "preparing": "Подготовка обновления...", + "installing": "Установка обновления...", + "completed": "Обновление успешно завершено!", + "failed": "Обновление не удалось: {error}" + }, + "status": { + "updating": "Обновление...", + "updated": "Обновлено!", + "updateFailed": "Обновление не удалось" + }, + "completion": { + "successMessage": "Успешно обновлено до {version}!", + "restartMessage": "Пожалуйста, перезапустите ComfyUI или LoRA Manager для применения обновления.", + "reloadMessage": "Обязательно перезагрузите ваш браузер как для LoRA Manager, так и для ComfyUI." + }, + "nightly": { + "warning": "Предупреждение: Ночные сборки могут содержать экспериментальные функции и могут быть нестабильными.", + "enable": "Включить ночные обновления" + } + }, + "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! ❤️" + }, + "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": "Загрузка успешно завершена" + }, + "recipes": { + "fetchFailed": "Не удалось получить рецепты: {message}", + "reloadFailed": "Не удалось перезагрузить {modelType}s: {message}", + "loadFailed": "Не удалось загрузить {modelType}s: {message}", + "refreshComplete": "Обновление завершено", + "refreshFailed": "Не удалось обновить рецепты: {message}", + "updateFailed": "Не удалось обновить рецепт: {error}", + "updateError": "Ошибка обновления рецепта: {message}", + "nameSaved": "Рецепт \"{name}\" успешно сохранен", + "nameUpdated": "Название рецепта успешно обновлено", + "tagsUpdated": "Теги рецепта успешно обновлены", + "sourceUrlUpdated": "Исходный URL успешно обновлен", + "noRecipeId": "ID рецепта недоступен", + "copyFailed": "Ошибка копирования синтаксиса рецепта: {message}", + "noMissingLoras": "Нет отсутствующих LoRAs для загрузки", + "missingLorasInfoFailed": "Не удалось получить информацию для отсутствующих LoRAs", + "preparingForDownloadFailed": "Ошибка подготовки LoRAs для загрузки", + "enterLoraName": "Пожалуйста, введите название LoRA или синтаксис", + "reconnectedSuccessfully": "LoRA успешно переподключена", + "reconnectFailed": "Ошибка переподключения LoRA: {message}", + "cannotSend": "Невозможно отправить рецепт: отсутствует ID рецепта", + "sendFailed": "Не удалось отправить рецепт в workflow", + "sendError": "Ошибка отправки рецепта в workflow", + "cannotDelete": "Невозможно удалить рецепт: отсутствует ID рецепта", + "deleteConfirmationError": "Ошибка отображения подтверждения удаления", + "deletedSuccessfully": "Рецепт успешно удален", + "deleteFailed": "Ошибка удаления рецепта: {message}", + "cannotShare": "Невозможно поделиться рецептом: отсутствует ID рецепта", + "preparingForSharing": "Подготовка рецепта для общего доступа...", + "downloadStarted": "Загрузка рецепта начата", + "shareError": "Ошибка при предоставлении общего доступа к рецепту: {message}", + "sharePreparationError": "Ошибка подготовки рецепта для общего доступа", + "selectImageFirst": "Пожалуйста, сначала выберите изображение", + "enterRecipeName": "Пожалуйста, введите название рецепта", + "processingError": "Ошибка обработки: {message}", + "folderBrowserError": "Ошибка загрузки браузера папок: {message}", + "recipeSaveFailed": "Не удалось сохранить рецепт: {error}", + "importFailed": "Импорт не удался: {message}", + "folderTreeFailed": "Не удалось загрузить дерево папок", + "folderTreeError": "Ошибка загрузки дерева папок" + }, + "models": { + "noModelsSelected": "Модели не выбраны", + "deletedSuccessfully": "Успешно удалено {count} {type}(ей)", + "deleteFailed": "Ошибка: {error}", + "deleteFailedGeneral": "Не удалось удалить модели", + "selectedAdditional": "Выбрано дополнительно {count} {type}(ей)", + "refreshMetadataFailed": "Не удалось обновить метаданные", + "nameCannotBeEmpty": "Название модели не может быть пустым", + "nameUpdatedSuccessfully": "Название модели успешно обновлено", + "nameUpdateFailed": "Не удалось обновить название модели", + "baseModelUpdated": "Базовая модель успешно обновлена", + "baseModelUpdateFailed": "Не удалось обновить базовую модель", + "invalidCharactersRemoved": "Недопустимые символы удалены из имени файла", + "filenameCannotBeEmpty": "Имя файла не может быть пустым", + "renameFailed": "Не удалось переименовать файл: {message}", + "moveFailed": "Не удалось переместить модель(и): {message}", + "pleaseSelectRoot": "Пожалуйста, выберите корневую папку {type}", + "nameTooLong": "Название модели ограничено 100 символами", + "verificationAlreadyDone": "Эта группа уже была проверена", + "verificationCompleteMismatch": "Проверка завершена. {count} файл(ов) имеют разные фактические хеши.", + "verificationCompleteSuccess": "Проверка завершена. Все файлы подтверждены как дубликаты.", + "verificationFailed": "Не удалось проверить хеши: {message}" + }, + "search": { + "atLeastOneOption": "Должен быть выбран хотя бы один вариант поиска" + }, + "settings": { + "loraRootsFailed": "Не удалось загрузить корни LoRA: {message}", + "checkpointRootsFailed": "Не удалось загрузить корни checkpoint: {message}", + "embeddingRootsFailed": "Не удалось загрузить корни embedding: {message}", + "mappingsUpdated": "Сопоставления путей базовых моделей обновлены ({count} сопоставлени{plural})", + "mappingsCleared": "Сопоставления путей базовых моделей очищены", + "mappingSaveFailed": "Не удалось сохранить сопоставления базовых моделей: {message}", + "downloadTemplatesUpdated": "Шаблоны путей загрузки обновлены", + "downloadTemplatesFailed": "Не удалось сохранить шаблоны путей загрузки: {message}", + "settingsUpdated": "Настройки обновлены: {setting}", + "compactModeToggled": "Компактный режим {state}", + "settingSaveFailed": "Не удалось сохранить настройку: {message}", + "displayDensitySet": "Плотность отображения установлена на {density}", + "languageChangeFailed": "Не удалось изменить язык: {message}", + "cacheCleared": "Файлы кэша успешно очищены. Кэш будет пересобран при следующем действии.", + "cacheClearFailed": "Не удалось очистить кэш: {error}", + "cacheClearError": "Ошибка очистки кэша: {message}" + }, + "filters": { + "applied": "{message}", + "cleared": "Фильтры очищены", + "noCustomFilterToClear": "Нет пользовательского фильтра для очистки" + }, + "downloads": { + "imagesCompleted": "Примеры изображений {action} завершены", + "imagesFailed": "Примеры изображений {action} не удались", + "loadError": "Ошибка загрузки downloads: {message}", + "downloadError": "Ошибка загрузки: {message}" + }, + "import": { + "folderTreeFailed": "Не удалось загрузить дерево папок", + "folderTreeError": "Ошибка загрузки дерева папок", + "imagesImported": "Примеры изображений успешно импортированы", + "importFailed": "Не удалось импортировать примеры изображений: {message}" + }, + "triggerWords": { + "loadFailed": "Не удалось загрузить обученные слова", + "tooLong": "Триггерное слово не должно превышать 30 слов", + "tooMany": "Максимум 30 триггерных слов разрешено", + "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": "Путь к примерам изображений успешно обновлен", + "downloadInProgress": "Загрузка уже в процессе", + "enterLocationFirst": "Пожалуйста, сначала введите место загрузки", + "downloadStarted": "Загрузка примеров изображений начата", + "downloadStartFailed": "Не удалось начать загрузку: {error}", + "downloadPaused": "Загрузка приостановлена", + "pauseFailed": "Не удалось приостановить загрузку: {error}", + "downloadResumed": "Загрузка возобновлена", + "resumeFailed": "Не удалось возобновить загрузку: {error}", + "deleted": "Пример изображения удален", + "deleteFailed": "Не удалось удалить пример изображения", + "setPreviewFailed": "Не удалось установить превью изображение" + }, + "api": { + "fetchFailed": "Не удалось получить {type}s: {message}", + "reloadFailed": "Не удалось перезагрузить {type}s: {message}", + "deleteSuccess": "{type} успешно удален", + "deleteFailed": "Не удалось удалить {type}: {message}", + "excludeSuccess": "{type} успешно исключен", + "excludeFailed": "Не удалось исключить {type}: {message}", + "fileNameUpdated": "Имя файла успешно обновлено", + "fileRenameFailed": "Не удалось переименовать файл: {error}", + "previewUpdated": "Превью успешно обновлено", + "previewUploadFailed": "Не удалось загрузить превью изображение", + "refreshComplete": "{action} завершено", + "refreshFailed": "Не удалось {action} {type}s", + "metadataRefreshed": "Метаданные успешно обновлены", + "metadataRefreshFailed": "Не удалось обновить метаданные: {message}", + "metadataUpdateComplete": "Обновление метаданных завершено", + "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}" + } + }, + "banners": { + "versionMismatch": { + "title": "Обнаружено обновление приложения", + "content": "Ваш браузер работает с устаревшей версией LoRA Manager ({storedVersion}). Сервер был обновлен до версии {currentVersion}. Пожалуйста, обновите страницу для обеспечения правильной работы.", + "refreshNow": "Обновить сейчас", + "refreshingIn": "Обновление через", + "seconds": "секунд" } } -} \ No newline at end of file +} diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 4719325d..4432a74f 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -1,66 +1,24 @@ { "common": { - "file": "檔案", - "folder": "資料夾", - "name": "名稱", - "size": "大小", - "date": "日期", - "type": "類型", - "path": "路徑", - "fileSize": { - "zero": "0 位元組", - "bytes": "位元組", - "kb": "KB", - "mb": "MB", - "gb": "GB", - "tb": "TB" - }, "actions": { "save": "儲存", "cancel": "取消", "delete": "刪除", - "edit": "編輯", - "copy": "複製", "move": "移動", "refresh": "重新整理", - "download": "下載", - "upload": "上傳", - "search": "搜尋", - "filter": "篩選", - "sort": "排序", - "select": "選擇", - "selectAll": "全選", - "deselectAll": "取消全選", - "confirm": "確認", - "close": "關閉", "back": "返回", "next": "下一步", - "previous": "上一步", - "view": "檢視", - "preview": "預覽", - "details": "詳情", - "backToTop": "返回頂部", + "backToTop": "回到頂部", "settings": "設定", - "help": "說明", - "about": "關於" + "help": "說明" }, "status": { "loading": "載入中...", - "saving": "儲存中...", - "saved": "已儲存", - "error": "錯誤", - "success": "成功", - "warning": "警告", - "info": "資訊", - "processing": "處理中...", - "completed": "已完成", - "failed": "失敗", - "cancelled": "已取消", - "pending": "等待中", - "ready": "就緒" + "unknown": "未知", + "date": "日期", + "version": "版本" }, "language": { - "current": "語言", "select": "選擇語言", "select_help": "選擇您偏好的介面語言", "english": "English", @@ -72,14 +30,22 @@ "korean": "한국어", "french": "Français", "spanish": "Español" + }, + "fileSize": { + "zero": "0 位元組", + "bytes": "位元組", + "kb": "KB", + "mb": "MB", + "gb": "GB", + "tb": "TB" } }, "modelCard": { "actions": { - "addToFavorites": "新增到收藏", - "removeFromFavorites": "從收藏中移除", - "viewOnCivitai": "在 Civitai 上檢視", - "notAvailableFromCivitai": "Civitai 上不可用", + "addToFavorites": "加入收藏", + "removeFromFavorites": "移除收藏", + "viewOnCivitai": "在 Civitai 查看", + "notAvailableFromCivitai": "Civitai 不提供", "sendToWorkflow": "傳送到 ComfyUI(點擊:附加,Shift+點擊:取代)", "copyLoRASyntax": "複製 LoRA 語法", "checkpointNameCopied": "Checkpoint 名稱已複製", @@ -88,23 +54,23 @@ "openExampleImages": "開啟範例圖片資料夾" }, "nsfw": { - "matureContent": "成人內容", + "matureContent": "成熟內容", "xxxRated": "XXX 級內容", "xRated": "X 級內容", "rRated": "R 級內容" }, "favorites": { - "added": "已新增到收藏", - "removed": "已從收藏中移除", + "added": "已加入收藏", + "removed": "已移除收藏", "updateFailed": "更新收藏狀態失敗" }, "sendToWorkflow": { - "checkpointNotImplemented": "傳送 Checkpoint 到工作流程 - 功能待實作" + "checkpointNotImplemented": "傳送 checkpoint 到工作流 - 功能尚未實現" }, "exampleImages": { - "checkError": "檢查範例圖片時出錯", + "checkError": "檢查範例圖片時發生錯誤", "missingHash": "缺少模型雜湊資訊。", - "noRemoteImagesAvailable": "該模型在 Civitai 上沒有可用的遠端範例圖片" + "noRemoteImagesAvailable": "此模型在 Civitai 上無遠端範例圖片" } }, "header": { @@ -121,12 +87,12 @@ "placeholders": { "loras": "搜尋 LoRA...", "recipes": "搜尋配方...", - "checkpoints": "搜尋 Checkpoint...", - "embeddings": "搜尋 Embedding..." + "checkpoints": "搜尋 checkpoint...", + "embeddings": "搜尋 embedding..." }, "options": "搜尋選項", "searchIn": "搜尋範圍:", - "notAvailable": "統計頁面不支援搜尋", + "notAvailable": "統計頁面無法搜尋", "filters": { "filename": "檔案名稱", "modelname": "模型名稱", @@ -140,21 +106,132 @@ "filter": { "title": "篩選模型", "baseModel": "基礎模型", - "modelTags": "標籤(前20個)", + "modelTags": "標籤(前 20)", "clearAll": "清除所有篩選" }, "theme": { "toggle": "切換主題", - "switchToLight": "切換到淺色主題", - "switchToDark": "切換到深色主題", - "switchToAuto": "切換到自動主題" + "switchToLight": "切換至淺色主題", + "switchToDark": "切換至深色主題", + "switchToAuto": "自動主題" + }, + "actions": { + "checkUpdates": "檢查更新", + "support": "支援" + } + }, + "settings": { + "civitaiApiKey": "Civitai API 金鑰", + "civitaiApiKeyPlaceholder": "請輸入您的 Civitai API 金鑰", + "civitaiApiKeyHelp": "用於從 Civitai 下載模型時的身份驗證", + "sections": { + "contentFiltering": "內容過濾", + "videoSettings": "影片設定", + "layoutSettings": "版面設定", + "folderSettings": "資料夾設定", + "downloadPathTemplates": "下載路徑範本", + "exampleImages": "範例圖片", + "misc": "其他" + }, + "contentFiltering": { + "blurNsfwContent": "模糊 NSFW 內容", + "blurNsfwContentHelp": "模糊成熟(NSFW)內容預覽圖片", + "showOnlySfw": "僅顯示 SFW 結果", + "showOnlySfwHelp": "瀏覽和搜尋時過濾所有 NSFW 內容" + }, + "videoSettings": { + "autoplayOnHover": "滑鼠懸停自動播放影片", + "autoplayOnHoverHelp": "僅在滑鼠懸停時播放影片預覽" + }, + "layoutSettings": { + "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": "警告:較高密度可能導致資源有限的系統效能下降。", + "cardInfoDisplay": "卡片資訊顯示", + "cardInfoDisplayOptions": { + "always": "永遠顯示", + "hover": "滑鼠懸停顯示" + }, + "cardInfoDisplayHelp": "選擇何時顯示模型資訊與操作按鈕:", + "cardInfoDisplayDetails": { + "always": "永遠顯示:標題與頁腳始終可見", + "hover": "滑鼠懸停顯示:標題與頁腳僅在滑鼠懸停時顯示" + } + }, + "folderSettings": { + "defaultLoraRoot": "預設 LoRA 根目錄", + "defaultLoraRootHelp": "設定下載、匯入和移動時的預設 LoRA 根目錄", + "defaultCheckpointRoot": "預設 Checkpoint 根目錄", + "defaultCheckpointRootHelp": "設定下載、匯入和移動時的預設 Checkpoint 根目錄", + "defaultEmbeddingRoot": "預設 Embedding 根目錄", + "defaultEmbeddingRootHelp": "設定下載、匯入和移動時的預設 Embedding 根目錄", + "noDefault": "未設定預設" + }, + "downloadPathTemplates": { + "title": "下載路徑範本", + "help": "設定從 Civitai 下載時不同模型類型的資料夾結構。", + "availablePlaceholders": "可用佔位符:", + "templateOptions": { + "flatStructure": "扁平結構", + "byBaseModel": "依基礎模型", + "byAuthor": "依作者", + "byFirstTag": "依第一標籤", + "baseModelFirstTag": "基礎模型 + 第一標籤", + "baseModelAuthor": "基礎模型 + 作者", + "authorFirstTag": "作者 + 第一標籤", + "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": "自動為沒有範例圖片的模型下載範例圖片(需設定下載位置)", + "optimizeImages": "最佳化下載圖片", + "optimizeImagesHelp": "最佳化範例圖片以減少檔案大小並提升載入速度(會保留原有的 metadata)", + "download": "下載", + "restartRequired": "需要重新啟動" + }, + "misc": { + "includeTriggerWords": "在 LoRA 語法中包含觸發詞", + "includeTriggerWordsHelp": "複製 LoRA 語法到剪貼簿時包含訓練觸發詞" } }, "loras": { - "title": "LoRA 模型", "controls": { "sort": { - "title": "排序方式...", + "title": "排序模型依...", "name": "名稱", "nameAsc": "A - Z", "nameDesc": "Z - A", @@ -166,222 +243,320 @@ "sizeAsc": "最小" }, "refresh": { - "title": "重新整理模型清單", - "quick": "快速重新整理(增量)", - "full": "完全重建(完整)" + "title": "重新整理模型列表", + "quick": "快速刷新(增量)", + "full": "完整重建(全部)" }, "fetch": "從 Civitai 取得", - "download": "從 URL 下載", + "download": "從網址下載", "bulk": "批次操作", "duplicates": "尋找重複項", "favorites": "僅顯示收藏" }, "bulkOperations": { - "title": "批次操作", - "selected": "已選擇{count}項", - "sendToWorkflow": "傳送到工作流程", - "copyAll": "複製LoRA語法", - "refreshAll": "重新整理中繼資料", - "moveAll": "移動", - "deleteAll": "刪除", - "clear": "清除選擇" + "selected": "已選擇 {count} 項", + "selectedSuffix": "已選擇", + "viewSelected": "點擊檢視已選項目", + "sendToWorkflow": "傳送到工作流", + "copyAll": "全部複製", + "refreshAll": "全部刷新", + "moveAll": "全部移動", + "deleteAll": "全部刪除", + "clear": "清除" }, "contextMenu": { - "refreshMetadata": "重新整理 Civitai 資料", - "relinkCivitai": "重新連結到 Civitai", + "refreshMetadata": "刷新 Civitai 資料", + "relinkCivitai": "重新連結 Civitai", "copySyntax": "複製 LoRA 語法", - "copyFilename": "複製模型檔案名稱", + "copyFilename": "複製模型檔名", "copyRecipeSyntax": "複製配方語法", - "sendToWorkflowAppend": "傳送到工作流程(附加)", - "sendToWorkflowReplace": "傳送到工作流程(取代)", - "openExamplesFolder": "開啟範例資料夾", + "sendToWorkflowAppend": "傳送到工作流(附加)", + "sendToWorkflowReplace": "傳送到工作流(取代)", + "openExamples": "開啟範例資料夾", "downloadExamples": "下載範例圖片", - "replacePreview": "取代預覽圖", - "setContentRating": "設定內容評級", + "replacePreview": "更換預覽圖", + "setContentRating": "設定內容分級", "moveToFolder": "移動到資料夾", "excludeModel": "排除模型", "deleteModel": "刪除模型", "shareRecipe": "分享配方", - "viewAllLoras": "檢視所有 LoRA", + "viewAllLoras": "檢視全部 LoRA", "downloadMissingLoras": "下載缺少的 LoRA", "deleteRecipe": "刪除配方" - }, - "modal": { - "title": "LoRA 詳情", - "tabs": { - "examples": "範例", - "description": "模型描述", - "recipes": "配方" - }, - "info": { - "filename": "檔案名稱", - "modelName": "模型名稱", - "baseModel": "基礎模型", - "fileSize": "檔案大小", - "dateAdded": "新增日期", - "triggerWords": "觸發詞", - "description": "描述", - "tags": "標籤", - "rating": "評分", - "downloads": "下載量", - "likes": "按讚數", - "version": "版本" - }, - "actions": { - "copyTriggerWords": "複製觸發詞", - "copyLoraName": "複製 LoRA 名稱", - "sendToWorkflow": "傳送到工作流程", - "viewOnCivitai": "在 Civitai 上檢視", - "downloadExamples": "下載範例圖片" - } } }, "recipes": { "title": "LoRA 配方", "controls": { - "import": "匯入配方", + "import": { + "action": "匯入配方", + "title": "從圖片或網址匯入配方", + "urlLocalPath": "網址 / 本機路徑", + "uploadImage": "上傳圖片", + "urlSectionDescription": "輸入 Civitai 圖片網址或本機檔案路徑以匯入配方。", + "imageUrlOrPath": "圖片網址或檔案路徑:", + "urlPlaceholder": "https://civitai.com/images/... 或 C:/path/to/image.png", + "fetchImage": "取得圖片", + "uploadSectionDescription": "上傳含 LoRA metadata 的圖片以匯入配方。", + "selectImage": "選擇圖片", + "recipeName": "配方名稱", + "recipeNamePlaceholder": "輸入配方名稱", + "tagsOptional": "標籤(選填)", + "addTagPlaceholder": "新增標籤", + "addTag": "新增", + "noTagsAdded": "尚未新增標籤", + "lorasInRecipe": "此配方包含的 LoRA", + "downloadLocationPreview": "下載位置預覽:", + "useDefaultPath": "使用預設路徑", + "useDefaultPathTooltip": "啟用後,檔案將依照設定的路徑範本自動整理", + "selectLoraRoot": "選擇 LoRA 根目錄", + "targetFolderPath": "目標資料夾路徑:", + "folderPathPlaceholder": "輸入資料夾路徑或從下方樹狀結構選擇...", + "createNewFolder": "建立新資料夾", + "root": "根目錄", + "browseFolders": "瀏覽資料夾:", + "downloadAndSaveRecipe": "下載並儲存配方", + "downloadMissingLoras": "下載缺少的 LoRA", + "saveRecipe": "儲存配方", + "loraCountInfo": "(庫存 {existing}/{total})", + "processingInput": "處理輸入中...", + "analyzingMetadata": "分析圖片 metadata...", + "downloadingLoras": "下載 LoRA 中...", + "savingRecipe": "儲存配方中...", + "startingDownload": "開始下載 LoRA {current}/{total}", + "deletedFromCivitai": "已從 Civitai 刪除", + "inLibrary": "已在庫存", + "notInLibrary": "不在庫存", + "earlyAccessRequired": "此 LoRA 需購買早期存取才能下載。", + "earlyAccessEnds": "早期存取結束時間:{date}", + "earlyAccess": "早期存取", + "verifyEarlyAccess": "下載前請確認已購買早期存取。", + "duplicateRecipesFound": "在庫存中發現 {count} 個相同配方", + "duplicateRecipesDescription": "這些配方包含相同的 LoRA 且權重一致。", + "showDuplicates": "顯示重複項", + "hideDuplicates": "隱藏重複項", + "loraCount": "{count} LoRA", + "recipePreviewAlt": "配方預覽", + "loraPreviewAlt": "LoRA 預覽", + "errors": { + "selectImageFile": "請選擇圖片檔案", + "enterUrlOrPath": "請輸入網址或檔案路徑", + "selectLoraRoot": "請選擇 LoRA 根目錄" + } + }, "refresh": { - "title": "重新整理配方清單" + "title": "重新整理配方列表" }, - "duplicates": { - "title": "尋找重複配方" - }, - "filteredByLora": "按 LoRA 篩選", - "create": "建立配方", - "export": "匯出已選", - "downloadMissing": "下載缺少的 LoRA" + "filteredByLora": "已依 LoRA 篩選" }, "duplicates": { - "found": "發現 {count} 個重複群組", + "found": "發現 {count} 組重複項", "keepLatest": "保留最新版本", - "deleteSelected": "刪除已選" + "deleteSelected": "刪除所選" }, - "card": { - "author": "作者", - "loras": "{count} 個 LoRA", - "tags": "標籤", - "actions": { - "sendToWorkflow": "傳送到工作流程", - "edit": "編輯配方", - "duplicate": "複製配方", - "export": "匯出配方", - "delete": "刪除配方" + "contextMenu": { + "copyRecipe": { + "missingId": "無法複製配方:缺少配方 ID", + "failed": "複製配方語法失敗" + }, + "sendRecipe": { + "missingId": "無法傳送配方:缺少配方 ID", + "failed": "傳送配方到工作流失敗" + }, + "viewLoras": { + "missingId": "無法檢視 LoRA:缺少配方 ID", + "noLorasFound": "此配方未包含 LoRA", + "loadError": "載入配方 LoRA 時發生錯誤:{message}" + }, + "downloadMissing": { + "missingId": "無法下載 LoRA:缺少配方 ID", + "noMissingLoras": "無缺少的 LoRA 可下載", + "getInfoFailed": "取得缺少 LoRA 資訊失敗", + "prepareError": "準備下載 LoRA 時發生錯誤:{message}" } } }, "checkpoints": { - "title": "Checkpoint 模型", - "info": { - "filename": "檔案名稱", - "modelName": "模型名稱", - "baseModel": "基礎模型", - "fileSize": "檔案大小", - "dateAdded": "新增日期" - } + "title": "Checkpoint 模型" }, "embeddings": { - "title": "Embedding 模型", - "info": { - "filename": "檔案名稱", - "modelName": "模型名稱", - "triggerWords": "觸發詞", - "fileSize": "檔案大小", - "dateAdded": "新增日期" - } + "title": "Embedding 模型" }, "sidebar": { "modelRoot": "模型根目錄", - "collapseAll": "摺疊所有資料夾", + "collapseAll": "全部摺疊資料夾", "pinToggle": "釘選/取消釘選側邊欄" }, "statistics": { - "title": "統計資訊", + "title": "統計", "tabs": { - "overview": "概覽", + "overview": "總覽", "usage": "使用分析", "collection": "收藏", - "storage": "儲存", + "storage": "儲存空間", "insights": "洞察" }, - "overview": { - "title": "概覽", - "totalLoras": "LoRA 總數", - "totalCheckpoints": "Checkpoint 總數", - "totalEmbeddings": "Embedding 總數", - "totalSize": "總大小", - "favoriteModels": "收藏模型" + "usage": { + "mostUsedLoras": "最常用的 LoRA", + "mostUsedCheckpoints": "最常用的 Checkpoint", + "mostUsedEmbeddings": "最常用的 Embedding" + }, + "collection": { + "popularTags": "熱門標籤", + "modelTypes": "模型類型", + "collectionAnalysis": "收藏分析" + }, + "storage": { + "storageUsage": "儲存空間使用量", + "largestModels": "最大模型", + "storageEfficiency": "儲存與使用效率" + }, + "insights": { + "smartInsights": "智慧洞察", + "recommendations": "推薦" }, "charts": { - "modelsByType": "按類型統計模型", - "modelsByBaseModel": "按基礎模型統計", - "modelsBySize": "按檔案大小統計", - "modelsAddedOverTime": "模型新增時間分佈" + "collectionOverview": "收藏總覽", + "baseModelDistribution": "基礎模型分布", + "usageTrends": "使用趨勢(最近 30 天)", + "usageDistribution": "使用分布" } }, "modals": { - "delete": { - "title": "確認刪除", - "message": "確定要刪除這個模型嗎?", - "warningMessage": "此操作無法復原。", - "confirm": "刪除", - "cancel": "取消" - }, "exclude": { - "title": "排除模型", - "message": "確定要從資料庫中排除這個模型嗎?", - "confirm": "排除", - "cancel": "取消" + "confirm": "排除" }, "download": { - "title": "從 URL 下載模型", - "url": "Civitai URL", + "title": "從網址下載模型", + "titleWithType": "從網址下載 {type}", + "url": "Civitai 網址", + "civitaiUrl": "Civitai 網址:", "placeholder": "https://civitai.com/models/...", "locationPreview": "下載位置預覽", "useDefaultPath": "使用預設路徑", - "useDefaultPathTooltip": "啟用時,檔案會使用設定的路徑範本自動組織", + "useDefaultPathTooltip": "啟用後,檔案將依照設定的路徑範本自動整理", "selectRootDirectory": "選擇根目錄", + "selectModelRoot": "選擇模型根目錄:", + "selectTypeRoot": "選擇 {type} 根目錄:", + "targetFolderPath": "目標資料夾路徑:", + "browseFolders": "瀏覽資料夾:", + "createNewFolder": "建立新資料夾", + "pathPlaceholder": "輸入資料夾路徑或從下方樹狀結構選擇...", + "root": "根目錄", "download": "下載", - "cancel": "取消" - }, - "move": { - "title": "移動模型", - "selectFolder": "選擇目標資料夾", - "createFolder": "建立新資料夾", - "folderName": "資料夾名稱", - "move": "移動", - "cancel": "取消" - }, - "contentRating": { - "title": "設定內容評級", - "current": "目前", - "levels": { - "pg": "普通級", - "pg13": "輔導級", - "r": "限制級", - "x": "成人級", - "xxx": "重口級" + "fetchingVersions": "正在取得模型版本...", + "versionPreview": "版本預覽", + "earlyAccess": "早期存取", + "earlyAccessTooltip": "需要早期存取", + "inLibrary": "已在庫存", + "alreadyInLibrary": "已在庫存", + "autoOrganizedPath": "[依路徑範本自動整理]", + "errors": { + "invalidUrl": "Civitai 網址格式無效", + "noVersions": "此模型無可用版本" + }, + "status": { + "preparing": "準備下載中...", + "downloadedPreview": "已下載預覽圖片", + "downloadingFile": "正在下載 {type} 檔案", + "finalizing": "完成下載中..." } }, - "model": { - "description": { - "noDescription": "無模型描述資訊", - "failedToLoad": "載入模型描述失敗", - "editTitle": "編輯模型描述", - "validation": { - "cannotBeEmpty": "描述不能為空" - }, - "messages": { - "updated": "模型描述已更新", - "updateFailed": "更新模型描述失敗" - } + "move": { + "title": "移動模型" + }, + "contentRating": { + "title": "設定內容分級", + "current": "目前", + "levels": { + "pg": "PG", + "pg13": "PG13", + "r": "R", + "x": "X", + "xxx": "XXX" + } + }, + "deleteModel": { + "title": "刪除模型", + "message": "您確定要刪除此模型及所有相關檔案嗎?" + }, + "excludeModel": { + "title": "排除模型", + "message": "您確定要排除此模型嗎?被排除的模型將不會出現在搜尋或模型列表中。" + }, + "deleteDuplicateRecipes": { + "title": "刪除重複配方", + "message": "您確定要刪除所選的重複配方嗎?", + "countMessage": "配方將被永久刪除。" + }, + "deleteDuplicateModels": { + "title": "刪除重複模型", + "message": "您確定要刪除所選的重複模型嗎?", + "countMessage": "模型將被永久刪除。" + }, + "clearCache": { + "title": "清除快取檔案", + "message": "您確定要清除所有快取檔案嗎?", + "description": "這將移除所有模型快取資料。系統下次啟動時需要重新建立快取,依模型數量可能需要一些時間。", + "action": "清除快取" + }, + "bulkDelete": { + "title": "刪除多個模型", + "message": "您確定要刪除所有選取的模型及其相關檔案嗎?", + "countMessage": "模型將被永久刪除。", + "action": "全部刪除" + }, + "exampleAccess": { + "title": "本機範例圖片", + "message": "此模型未找到本機範例圖片。可選擇:", + "downloadOption": { + "title": "從 Civitai 下載", + "description": "將遠端範例儲存到本機以便離線使用及加快載入" }, + "importOption": { + "title": "匯入自訂範例", + "description": "為此模型新增您自己的範例圖片" + }, + "footerNote": "即使沒有本機副本,仍可在模型詳情中檢視遠端範例" + }, + "moveModel": { + "targetLocationPreview": "目標位置預覽:", + "selectModelRoot": "選擇模型根目錄:", + "targetFolderPath": "目標資料夾路徑:", + "browseFolders": "瀏覽資料夾:", + "createNewFolder": "建立新資料夾", + "pathPlaceholder": "輸入資料夾路徑或從下方樹狀結構選擇...", + "root": "根目錄" + }, + "relinkCivitai": { + "title": "重新連結至 Civitai", + "warning": "警告:", + "warningText": "這是可能造成破壞性的操作。重新連結將會:", + "warningList": { + "overrideMetadata": "覆蓋現有 metadata", + "modifyHash": "可能會修改模型雜湊值", + "unintendedConsequences": "可能產生其他非預期後果" + }, + "proceedText": "僅在確定需要執行時才繼續。", + "urlLabel": "Civitai 模型網址:", + "urlPlaceholder": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "helpText": { + "title": "貼上任意 Civitai 模型網址。支援格式:", + "format1": "https://civitai.com/models/649516", + "format2": "https://civitai.com/models/649516?modelVersionId=726676", + "format3": "https://civitai.com/models/649516/model-name?modelVersionId=726676", + "note": "注意:若未提供 modelVersionId,將使用最新版本。" + }, + "confirmAction": "確認重新連結" + }, + "model": { "actions": { "editModelName": "編輯模型名稱", "editFileName": "編輯檔案名稱", "editBaseModel": "編輯基礎模型", - "viewOnCivitai": "在 Civitai 上檢視", - "viewOnCivitaiText": "在 Civitai 上檢視", - "viewCreatorProfile": "檢視創作者資料" + "viewOnCivitai": "在 Civitai 查看", + "viewOnCivitaiText": "在 Civitai 查看", + "viewCreatorProfile": "查看創作者個人檔案" }, "metadata": { "version": "版本", @@ -390,182 +565,492 @@ "baseModel": "基礎模型", "size": "大小", "unknown": "未知", - "usageTips": "使用技巧", - "additionalNotes": "附加說明", + "usageTips": "使用提示", + "additionalNotes": "附加備註", "notesHint": "按 Enter 儲存,Shift+Enter 換行", - "addNotesPlaceholder": "在此新增您的說明...", - "aboutThisVersion": "關於此版本", - "validation": { - "nameTooLong": "模型名稱最多100個字元", - "nameEmpty": "模型名稱不能為空" - }, - "messages": { - "nameUpdated": "模型名稱更新成功", - "nameUpdateFailed": "更新模型名稱失敗", - "baseModelUpdated": "基礎模型更新成功", - "baseModelUpdateFailed": "更新基礎模型失敗" - } + "addNotesPlaceholder": "在此新增備註...", + "aboutThisVersion": "關於此版本" }, "notes": { - "saved": "說明儲存成功", - "saveFailed": "儲存說明失敗" + "saved": "備註已儲存", + "saveFailed": "儲存備註失敗" }, "usageTips": { "addPresetParameter": "新增預設參數...", - "strengthMin": "強度最小值", - "strengthMax": "強度最大值", + "strengthMin": "最小強度", + "strengthMax": "最大強度", "strength": "強度", "clipSkip": "Clip Skip", - "valuePlaceholder": "值", + "valuePlaceholder": "數值", "add": "新增" }, + "triggerWords": { + "label": "觸發詞", + "noTriggerWordsNeeded": "不需觸發詞", + "edit": "編輯觸發詞", + "cancel": "取消編輯", + "save": "儲存變更", + "addPlaceholder": "輸入或點擊下方建議", + "copyWord": "複製觸發詞", + "deleteWord": "刪除觸發詞", + "suggestions": { + "noSuggestions": "無可用建議", + "noTrainedWords": "此模型未發現訓練詞或類別標記。您可手動輸入觸發詞。", + "classToken": "類別標記", + "classTokenDescription": "加入提示詞可獲最佳效果", + "wordSuggestions": "詞語建議", + "wordsFound": "找到 {count} 詞", + "loading": "載入建議中..." + } + }, + "description": { + "noDescription": "無模型描述", + "failedToLoad": "載入模型描述失敗", + "editTitle": "編輯模型描述", + "validation": { + "cannotBeEmpty": "描述不可為空" + }, + "messages": { + "updated": "模型描述已更新", + "updateFailed": "更新模型描述失敗" + } + }, "tabs": { "examples": "範例圖片", "description": "模型描述", "recipes": "配方" }, "loading": { - "exampleImages": "正在載入範例圖片...", - "description": "正在載入模型描述...", - "recipes": "正在載入配方...", - "examples": "正在載入範例..." - }, - "tags": { - "messages": { - "updated": "標籤更新成功", - "updateFailed": "更新標籤失敗" - }, - "validation": { - "maxLength": "標籤長度不能超過30個字元", - "maxCount": "最多允許30個標籤", - "duplicate": "該標籤已存在" - } - }, - "recipeTab": { - "noRecipesFound": "未找到使用此 LoRA 的配方。", - "loadingRecipes": "正在載入配方...", - "errorLoadingRecipes": "載入配方失敗。請稍後重試。" + "exampleImages": "載入範例圖片中...", + "description": "載入模型描述中...", + "recipes": "載入配方中...", + "examples": "載入範例中..." } } }, - "errors": { - "general": "發生錯誤", - "networkError": "網路錯誤,請檢查您的連線。", - "serverError": "伺服器錯誤,請稍後重試。", - "fileNotFound": "找不到檔案", - "invalidFile": "無效的檔案格式", - "uploadFailed": "上傳失敗", - "downloadFailed": "下載失敗", - "saveFailed": "儲存失敗", - "loadFailed": "載入失敗", - "deleteFailed": "刪除失敗", - "moveFailed": "移動失敗", - "copyFailed": "複製失敗", - "fetchFailed": "從 Civitai 取得資料失敗", - "invalidUrl": "無效的 URL 格式", - "missingPermissions": "權限不足" - }, - "success": { - "saved": "儲存成功", - "deleted": "刪除成功", - "moved": "移動成功", - "copied": "複製成功", - "downloaded": "下載成功", - "uploaded": "上傳成功", - "refreshed": "重新整理成功", - "exported": "匯出成功", - "imported": "匯入成功" + "modelTags": { + "messages": { + "updated": "標籤已更新", + "updateFailed": "標籤更新失敗" + }, + "validation": { + "maxLength": "標籤不可超過 30 字元", + "maxCount": "最多可新增 30 個標籤", + "duplicate": "此標籤已存在" + } }, "keyboard": { "navigation": "鍵盤導覽:", "shortcuts": { "pageUp": "向上捲動一頁", "pageDown": "向下捲動一頁", - "home": "跳轉到頂部", - "end": "跳轉到底部", - "bulkMode": "切換批次模式", - "search": "聚焦搜尋框", - "escape": "關閉對話方塊/面板" + "home": "跳至頂部", + "end": "跳至底部" } }, "initialization": { - "title": "正在初始化", - "message": "正在準備您的工作空間...", + "title": "初始化", + "message": "正在準備您的工作區...", "status": "初始化中...", "estimatingTime": "正在估算時間...", "loras": { "title": "初始化 LoRA 管理器", - "message": "正在掃描並建立 LoRA 快取,這可能需要幾分鐘時間..." + "message": "正在掃描並建立 LoRA 快取,可能需要幾分鐘..." }, "checkpoints": { "title": "初始化 Checkpoint 管理器", - "message": "正在掃描並建立 Checkpoint 快取,這可能需要幾分鐘時間..." + "message": "正在掃描並建立 Checkpoint 快取,可能需要幾分鐘..." }, "embeddings": { "title": "初始化 Embedding 管理器", - "message": "正在掃描並建立 Embedding 快取,這可能需要幾分鐘時間..." + "message": "正在掃描並建立 Embedding 快取,可能需要幾分鐘..." }, "recipes": { "title": "初始化配方管理器", - "message": "正在載入和處理配方,這可能需要幾分鐘時間..." + "message": "正在載入並處理配方,可能需要幾分鐘..." }, "statistics": { - "title": "初始化統計資訊", - "message": "正在處理模型資料以產生統計資訊,這可能需要幾分鐘時間..." + "title": "初始化統計", + "message": "正在處理模型資料以產生統計,可能需要幾分鐘..." }, "tips": { - "title": "提示與技巧", + "title": "小技巧", "civitai": { "title": "Civitai 整合", - "description": "連接您的 Civitai 帳戶:造訪頭像 → 設定 → API 金鑰 → 新增 API 金鑰,然後將其貼上到 Lora 管理器設定中。", + "description": "連結您的 Civitai 帳號:前往個人頭像 → 設定 → API 金鑰 → 新增 API 金鑰,然後貼到 LoRA 管理器設定中。", "alt": "Civitai API 設定" }, "download": { - "title": "輕鬆下載", - "description": "使用 Civitai URL 快速下載和安裝新模型。", + "title": "快速下載", + "description": "使用 Civitai 網址即可快速下載並安裝新模型。", "alt": "Civitai 下載" }, "recipes": { "title": "儲存配方", - "description": "建立配方以儲存您喜歡的模型組合供將來使用。", + "description": "建立配方,保存您喜愛的模型組合以便日後使用。", "alt": "配方" }, "filter": { "title": "快速篩選", - "description": "使用標題中的篩選按鈕按標籤或基礎模型類型篩選模型。", + "description": "可透過標籤或基礎模型類型,在標頭的篩選按鈕進行模型篩選。", "alt": "篩選模型" }, "search": { "title": "快速搜尋", - "description": "按 Ctrl+F(Mac 上為 Cmd+F)快速搜尋目前檢視中的內容。", + "description": "按 Ctrl+F(Mac 為 Cmd+F)可在目前檢視中快速搜尋。", "alt": "快速搜尋" } - }, - "steps": { - "scanning": "掃描模型檔案...", - "processing": "處理中繼資料...", - "building": "建立快取...", - "finalizing": "完成中..." } }, "duplicates": { - "found": "發現 {count} 個重複群組", + "found": "發現 {count} 組重複項", "showNotification": "顯示重複項通知", - "deleteSelected": "刪除已選", - "exitMode": "結束模式", + "deleteSelected": "刪除所選", + "exitMode": "離開模式", "help": { - "identicalHashes": "相同的雜湊值表示相同的模型檔案,即使它們的名稱或預覽圖不同。", - "keepOne": "只保留一個版本(最好是有更好中繼資料/預覽圖的版本),安全刪除其他版本。" + "identicalHashes": "相同雜湊值代表模型檔案完全一致,即使名稱或預覽不同。", + "keepOne": "僅保留一個版本(建議選擇 metadata 或預覽較佳者),安全刪除其他版本。" } }, - "tooltips": { - "refresh": "重新整理模型清單", - "bulkOperations": "選擇多個模型進行批次操作", - "favorites": "僅顯示收藏的模型", - "duplicates": "尋找和管理重複的模型", - "search": "按名稱、標籤或其他條件搜尋模型", - "filter": "按各種條件篩選模型", - "sort": "按不同屬性排序模型", - "backToTop": "捲動回頁面頂部" + "uiHelpers": { + "clipboard": { + "copied": "已複製到剪貼簿", + "copyFailed": "複製失敗" + }, + "lora": { + "syntaxCopied": "LoRA 語法已複製到剪貼簿", + "syntaxCopiedNoTriggerWords": "LoRA 語法已複製到剪貼簿(未找到觸發詞)", + "syntaxCopiedWithTriggerWords": "LoRA 語法(含觸發詞)已複製到剪貼簿", + "syntaxCopiedWithTriggerWordGroups": "LoRA 語法(含觸發詞群組)已複製到剪貼簿" + }, + "workflow": { + "noSupportedNodes": "工作流中未找到支援的目標節點", + "communicationFailed": "與 ComfyUI 通訊失敗" + }, + "nodeSelector": { + "recipe": "配方", + "lora": "LoRA", + "replace": "取代", + "append": "附加", + "selectTargetNode": "選擇目標節點", + "sendToAll": "全部傳送" + }, + "exampleImages": { + "opened": "範例圖片資料夾已開啟", + "openingFolder": "正在開啟範例圖片資料夾", + "failedToOpen": "開啟範例圖片資料夾失敗" + } + }, + "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": "檢查更新", + "updateAvailable": "有新版本可用", + "noChangelogAvailable": "無詳細更新日誌。請至 GitHub 查看更多資訊。", + "currentVersion": "目前版本", + "newVersion": "新版本", + "commit": "提交", + "viewOnGitHub": "在 GitHub 查看", + "updateNow": "立即更新", + "preparingUpdate": "正在準備更新...", + "changelog": "更新日誌", + "checkingUpdates": "正在檢查更新...", + "checkingMessage": "請稍候,正在檢查最新版本。", + "showNotifications": "顯示更新通知", + "updateProgress": { + "preparing": "正在準備更新...", + "installing": "正在安裝更新...", + "completed": "更新成功完成!", + "failed": "更新失敗:{error}" + }, + "status": { + "updating": "更新中...", + "updated": "已更新!", + "updateFailed": "更新失敗" + }, + "completion": { + "successMessage": "已成功更新至 {version}!", + "restartMessage": "請重新啟動 ComfyUI 或 LoRA 管理器以套用更新。", + "reloadMessage": "請重新載入瀏覽器以確保 LoRA 管理器與 ComfyUI 都已更新。" + }, + "nightly": { + "warning": "警告:Nightly 版本可能包含實驗性功能且可能不穩定。", + "enable": "啟用 Nightly 更新" + } + }, + "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 管理器!❤️" + }, + "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": "下載成功完成" + }, + "recipes": { + "fetchFailed": "取得配方失敗:{message}", + "reloadFailed": "重新載入 {modelType} 失敗:{message}", + "loadFailed": "載入 {modelType} 失敗:{message}", + "refreshComplete": "刷新完成", + "refreshFailed": "刷新配方失敗:{message}", + "updateFailed": "更新配方失敗:{error}", + "updateError": "更新配方錯誤:{message}", + "nameSaved": "配方「{name}」已成功儲存", + "nameUpdated": "配方名稱已更新", + "tagsUpdated": "配方標籤已更新", + "sourceUrlUpdated": "來源網址已更新", + "noRecipeId": "無配方 ID", + "copyFailed": "複製配方語法錯誤:{message}", + "noMissingLoras": "無缺少的 LoRA 可下載", + "missingLorasInfoFailed": "取得缺少 LoRA 資訊失敗", + "preparingForDownloadFailed": "準備下載 LoRA 時發生錯誤", + "enterLoraName": "請輸入 LoRA 名稱或語法", + "reconnectedSuccessfully": "LoRA 重新連結成功", + "reconnectFailed": "LoRA 重新連結錯誤:{message}", + "cannotSend": "無法傳送配方:缺少配方 ID", + "sendFailed": "傳送配方到工作流失敗", + "sendError": "傳送配方到工作流錯誤", + "cannotDelete": "無法刪除配方:缺少配方 ID", + "deleteConfirmationError": "顯示刪除確認時發生錯誤", + "deletedSuccessfully": "配方已成功刪除", + "deleteFailed": "刪除配方錯誤:{message}", + "cannotShare": "無法分享配方:缺少配方 ID", + "preparingForSharing": "正在準備分享配方...", + "downloadStarted": "配方下載已開始", + "shareError": "分享配方錯誤:{message}", + "sharePreparationError": "準備分享配方時發生錯誤", + "selectImageFirst": "請先選擇圖片", + "enterRecipeName": "請輸入配方名稱", + "processingError": "處理錯誤:{message}", + "folderBrowserError": "載入資料夾瀏覽器錯誤:{message}", + "recipeSaveFailed": "儲存配方失敗:{error}", + "importFailed": "匯入失敗:{message}", + "folderTreeFailed": "載入資料夾樹狀結構失敗", + "folderTreeError": "載入資料夾樹狀結構錯誤" + }, + "models": { + "noModelsSelected": "未選擇模型", + "deletedSuccessfully": "成功刪除 {count} 個 {type}", + "deleteFailed": "錯誤:{error}", + "deleteFailedGeneral": "刪除模型失敗", + "selectedAdditional": "已選擇 {count} 個額外 {type}", + "refreshMetadataFailed": "刷新 metadata 失敗", + "nameCannotBeEmpty": "模型名稱不可為空", + "nameUpdatedSuccessfully": "模型名稱已成功更新", + "nameUpdateFailed": "更新模型名稱失敗", + "baseModelUpdated": "基礎模型已成功更新", + "baseModelUpdateFailed": "更新基礎模型失敗", + "invalidCharactersRemoved": "已移除檔名中的無效字元", + "filenameCannotBeEmpty": "檔案名稱不可為空", + "renameFailed": "重新命名檔案失敗:{message}", + "moveFailed": "移動模型失敗:{message}", + "pleaseSelectRoot": "請選擇 {type} 根目錄", + "nameTooLong": "模型名稱限 100 字元以內", + "verificationAlreadyDone": "此群組已驗證過", + "verificationCompleteMismatch": "驗證完成。{count} 個檔案的實際雜湊不同。", + "verificationCompleteSuccess": "驗證完成。所有檔案均確認為重複項。", + "verificationFailed": "驗證雜湊失敗:{message}" + }, + "search": { + "atLeastOneOption": "至少需選擇一個搜尋選項" + }, + "settings": { + "loraRootsFailed": "載入 LoRA 根目錄失敗:{message}", + "checkpointRootsFailed": "載入 checkpoint 根目錄失敗:{message}", + "embeddingRootsFailed": "載入 embedding 根目錄失敗:{message}", + "mappingsUpdated": "基礎模型路徑對應已更新({count} 個對應)", + "mappingsCleared": "基礎模型路徑對應已清除", + "mappingSaveFailed": "儲存基礎模型對應失敗:{message}", + "downloadTemplatesUpdated": "下載路徑範本已更新", + "downloadTemplatesFailed": "儲存下載路徑範本失敗:{message}", + "settingsUpdated": "設定已更新:{setting}", + "compactModeToggled": "緊湊模式已{state}", + "settingSaveFailed": "儲存設定失敗:{message}", + "displayDensitySet": "顯示密度已設為 {density}", + "languageChangeFailed": "切換語言失敗:{message}", + "cacheCleared": "快取檔案已成功清除。快取將於下次操作時重建。", + "cacheClearFailed": "清除快取失敗:{error}", + "cacheClearError": "清除快取時發生錯誤:{message}" + }, + "filters": { + "applied": "{message}", + "cleared": "篩選已清除", + "noCustomFilterToClear": "無自訂篩選可清除" + }, + "downloads": { + "imagesCompleted": "範例圖片{action}完成", + "imagesFailed": "範例圖片{action}失敗", + "loadError": "載入下載時發生錯誤:{message}", + "downloadError": "下載錯誤:{message}" + }, + "import": { + "folderTreeFailed": "載入資料夾樹狀結構失敗", + "folderTreeError": "載入資料夾樹狀結構錯誤", + "imagesImported": "範例圖片匯入成功", + "importFailed": "匯入範例圖片失敗:{message}" + }, + "triggerWords": { + "loadFailed": "無法載入訓練詞", + "tooLong": "觸發詞不可超過 30 個字", + "tooMany": "最多允許 30 個觸發詞", + "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": "範例圖片路徑已更新", + "downloadInProgress": "下載已在進行中", + "enterLocationFirst": "請先輸入下載位置", + "downloadStarted": "範例圖片下載已開始", + "downloadStartFailed": "開始下載失敗:{error}", + "downloadPaused": "下載已暫停", + "pauseFailed": "暫停下載失敗:{error}", + "downloadResumed": "下載已恢復", + "resumeFailed": "恢復下載失敗:{error}", + "deleted": "範例圖片已刪除", + "deleteFailed": "刪除範例圖片失敗", + "setPreviewFailed": "設定預覽圖片失敗" + }, + "api": { + "fetchFailed": "取得 {type} 失敗:{message}", + "reloadFailed": "重新載入 {type} 失敗:{message}", + "deleteSuccess": "{type} 已成功刪除", + "deleteFailed": "刪除 {type} 失敗:{message}", + "excludeSuccess": "{type} 已成功排除", + "excludeFailed": "排除 {type} 失敗:{message}", + "fileNameUpdated": "檔案名稱已成功更新", + "fileRenameFailed": "重新命名檔案失敗:{error}", + "previewUpdated": "預覽圖片已成功更新", + "previewUploadFailed": "上傳預覽圖片失敗", + "refreshComplete": "{action} 完成", + "refreshFailed": "{action} {type} 失敗", + "metadataRefreshed": "metadata 已成功刷新", + "metadataRefreshFailed": "刷新 metadata 失敗:{message}", + "metadataUpdateComplete": "metadata 更新完成", + "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}" + } + }, + "banners": { + "versionMismatch": { + "title": "偵測到應用程式更新", + "content": "您的瀏覽器正在執行舊版本的 LoRA 管理器({storedVersion})。伺服器已更新至版本 {currentVersion}。請重新整理以確保正常運作。", + "refreshNow": "立即重新整理", + "refreshingIn": "將於", + "seconds": "秒後重新整理" + } } -} \ No newline at end of file +}