diff --git a/client/src/locales/cs.json b/client/src/locales/cs.json index ab304a37c..b13fc1b3d 100644 --- a/client/src/locales/cs.json +++ b/client/src/locales/cs.json @@ -1032,9 +1032,9 @@ "syncMetadataToFiles": "Synchronizovat metadata do souborů", "deleteLibrary": "Odstranit knihovnu", "bookCount": "{count, plural, =0 {Žádné knihy} one {# kniha} few {# knih} many {# knih} other {# knih}}", + "folderCount": "{count, plural, =0 {žádné složky} one {# složka} few {# složky} many {# složky} other {# složky}}", "fileMode": "Režim souboru", "folderMode": "Režim složky", - "folderCount": "{count, plural, =0 {žádné složky} one {# složka} few {# složky} many {# složky} other {# složky}}", "emptyTitle": "Zatím žádné knihovny", "emptyHint": "Přidejte knihovnu a začněte organizovat své knihy.", "addFirstLibrary": "Přidat svou první knihovnu", diff --git a/client/src/locales/da.json b/client/src/locales/da.json index 2b03ee579..9c81167ff 100644 --- a/client/src/locales/da.json +++ b/client/src/locales/da.json @@ -1038,9 +1038,9 @@ "syncMetadataToFiles": "Synkroniser metadata til filer", "deleteLibrary": "Slet bibliotek", "bookCount": "{count, plural, =0 {ingen bøger} one {# bog} other {# bøger}}", + "folderCount": "{count, plural, =0 {ingen mapper} one {# mappe} other {# mapper}}", "fileMode": "Fil tilstand", "folderMode": "Mappe tilstand", - "folderCount": "{count, plural, =0 {ingen mapper} one {# mappe} other {# mapper}}", "emptyTitle": "Ingen biblioteker endnu", "emptyHint": "Tilføj et bibliotek for at begynde at organisere dine bøger.", "addFirstLibrary": "Tilføj dit første bibliotek", diff --git a/client/src/locales/de.json b/client/src/locales/de.json index 0dc066e27..20cec36a9 100644 --- a/client/src/locales/de.json +++ b/client/src/locales/de.json @@ -173,6 +173,9 @@ }, "bookCovers": { "title": "Buchcover", + "coverSearch": { + "label": "Standard Titelbild Suchmaschine" + }, "displayMode": { "title": "Cover-Anzeigemodus", "hint": "Steuert, wie echte Cover in Buchplätze passen, wenn sich die Seitenverhältnisse unterscheiden", @@ -980,9 +983,9 @@ "syncMetadataToFiles": "Metadaten mit Dateien synchronisieren", "deleteLibrary": "Bibliothek löschen", "bookCount": "{count, plural, =0 {keine Bücher} one {# Buch} other {# Bücher}}", + "folderCount": "{count, plural, =0 {keine Ordner} one {# Ordner} other {# Ordner}}", "fileMode": "Dateimodus", "folderMode": "Ordnermodus", - "folderCount": "{count, plural, =0 {keine Ordner} one {# Ordner} other {# Ordner}}", "emptyTitle": "Noch keine Bibliotheken", "emptyHint": "Fügen Sie eine Bibliothek hinzu, um Ihre Bücher zu organisieren.", "addFirstLibrary": "Fügen Sie Ihre erste Bibliothek hinzu", diff --git a/client/src/locales/el.json b/client/src/locales/el.json index eb085a415..7c2a8061c 100644 --- a/client/src/locales/el.json +++ b/client/src/locales/el.json @@ -1035,9 +1035,9 @@ "syncMetadataToFiles": "Συγχρονισμός μεταδεδομένων σε αρχεία", "deleteLibrary": "Διαγραφή βιβλιοθήκης", "bookCount": "{count, plural, =0 {Δεν υπάρχουν βιβλία} one {# βιβλίο} other {# βιβλία}}", + "folderCount": "{count, plural, =0 {Δεν υπάρχουν φάκελοι} one {# φάκελος} other {# φάκελοι}}", "fileMode": "Λειτουργία αρχείου", "folderMode": "Λειτουργία φακέλου", - "folderCount": "{count, plural, =0 {Δεν υπάρχουν φάκελοι} one {# φάκελος} other {# φάκελοι}}", "emptyTitle": "Δεν υπάρχουν ακόμη βιβλιοθήκες", "emptyHint": "Προσθέστε μια βιβλιοθήκη για να ξεκινήσετε την οργάνωση των βιβλίων σας.", "addFirstLibrary": "Προσθέστε την πρώτη σας βιβλιοθήκη", diff --git a/client/src/locales/es.json b/client/src/locales/es.json index bab1ff3ce..39421a7d1 100644 --- a/client/src/locales/es.json +++ b/client/src/locales/es.json @@ -731,6 +731,7 @@ "test": { "connected": "Conectado - {issuer}", "connectionFailed": "La conexión falló", + "privateIssuerAddress": "La URL del emisor apunta a una dirección de red privada o local, por lo que el servidor rechazó la conexión. Establece OIDC_ALLOW_LOCAL_ISSUERS=true en el servidor de BookOrbit para permitirlo.", "hide": "Ocultar", "details": "Detalles", "supported": "apoyado", @@ -1075,9 +1076,10 @@ "syncMetadataToFiles": "Sincronizar metadatos con archivos", "deleteLibrary": "Eliminar biblioteca", "bookCount": "{count, plural, =0 {sin libros} one {# libro} other {# libros} many {# libros}}", + "booksUnit": "{count, plural, one {book} other {books}}", + "folderCount": "{count, plural, =0 {sin carpetas} one {# carpeta} other {# carpetas} many {# carpetas}}", "fileMode": "Modo de archivo", "folderMode": "Modo carpeta", - "folderCount": "{count, plural, =0 {sin carpetas} one {# carpeta} other {# carpetas} many {# carpetas}}", "emptyTitle": "Aún no hay bibliotecas", "emptyHint": "Agregue una biblioteca para comenzar a organizar sus libros.", "addFirstLibrary": "Añade tu primera biblioteca", @@ -1102,7 +1104,110 @@ "libraryDeleted": "\"{name}\" eliminado", "deleteFailed": "No se pudo eliminar la biblioteca", "refreshingCovers": "Cubiertas refrescantes {pct}% ({processed}/{total})", - "coversRefreshed": "Cubiertas actualizadas ({count} procesadas)" + "coversRefreshed": "Cubiertas actualizadas ({count} procesadas)", + "onDiskUnit": "{size} en disco", + "noFilesIndexed": "No hay archivos indexados", + "formatEntry": "{format} {count}", + "formatOverflow": "{count, plural, one {+# más formato} other {+# más formatos}}", + "extraFolders": "{count, plural, one {+# carpeta} other {+# carpetas}}", + "openLibrary": "Abrir {name}", + "moreActions": "Más acciones para {name}", + "statsFailed": "No se pudo cargar el número de bibliotecas. Todo lo demás en esta página todavía funciona.", + "filterLabel": "Filtrar bibliotecas", + "filterPlaceholder": "Filtrar por nombre o ruta", + "filterClear": "Borrar filtro", + "sortLabel": "Ordenar", + "noMatchesTitle": "Ninguna biblioteca coincide con ese filtro", + "noMatchesHint": "Nada coincide con \"{query}\" por nombre o ruta de la carpeta.", + "totalLibraries": "{count, plural, one {# librería} other {# librerías}}", + "neverScanned": "Nunca escaneado", + "neverScannedHint": "Ejecutar un escaneo para indexar sus carpetas", + "scanFailedAt": "Error: {time}", + "scanningPercent": "Escaneando {pct}%", + "scanCounting": "Contando archivos", + "scanCounts": "{processed} de {total}", + "scanAdded": "{count, plural, one {+# añadido} other {+# añadido}}", + "scanUpdated": "{count, plural, one {# actualizado} other {# actualizado}}", + "scanMissing": "{count, plural, one {# falta} other {# falta}}", + "scanNoChange": "Sin cambio", + "outcomeSeparator": ", ", + "scanOutcome": "{trigger} - {outcome}", + "syncConfirmBody": "Esto sobrescribirá los metadatos dentro de cada archivo soportado en {name} directamente en el disco. Esto no se puede deshacer.", + "columns": { + "library": "Biblioteca", + "contents": "Contenido", + "onDisk": "En disco", + "automation": "Automatización", + "lastScan": "Último escaneo", + "actions": "Acciones" + }, + "sort": { + "default": "Orden por defecto", + "name": "Nombre", + "books": "Libros", + "size": "Tamaño en disco", + "lastScan": "Último escaneo" + }, + "trigger": { + "manual": "Manual", + "watcher": "Observador", + "schedule": "Planificación" + }, + "capability": { + "watch": "Vigilar carpetas", + "schedule": "Análisis programado\n", + "fileWrite": "Escribir a archivo", + "fileRename": "Renombrar archivos", + "on": "{name}: activado", + "off": "{name}: desactivado", + "legendHint": "Las líneas discontinuas significan desactivado" + }, + "stateOn": "Activado", + "stateOff": "Desactivado", + "toggleDetail": "Mostrar detalles de {name}", + "durationMs": "{ms} ms", + "durationSeconds": "{seconds}s", + "durationMinutes": "{minutes}m {seconds}s", + "history": { + "when": "Cuando", + "trigger": "Disparador", + "duration": "Duración", + "result": "Resultado", + "status": "Estado", + "statusValue": { + "running": "Ejecutándose", + "completed": "Completado", + "failed": "Fallido" + } + }, + "detail": { + "foldersTitle": "Carpetas y diseño", + "metadataTitle": "Metadatos y lectura", + "accessTitle": "Acceso", + "historyTitle": "Historial de escaneo", + "path": "Ruta {index}", + "organization": "Organización", + "excludePatterns": "Excluir patrones", + "precedence": "Prioridad de origen", + "allowedFormats": "Formatos permitidos", + "countsAsStarted": "Cuenta como iniciado", + "countsAsFinished": "Cuenta como finalizado", + "peopleWithAccess": "Personas con acceso", + "added": "Añadido", + "coverShape": "Forma de la portada", + "coverShapeValue": { + "portrait": "2:3 vertical", + "square": "1:1 cuadrado" + }, + "none": "Ninguno", + "allSupported": "Todos soportados", + "patternCount": "{count, plural, one {# patrón} other {# patrones}}", + "peopleCount": "{count, plural, =0 {Ninguna concesión explícita} one {# persona} other {# personas}}", + "historyEmpty": "Esta biblioteca nunca ha sido escaneada.", + "historyFailed": "No se pudo cargar el historial de escaneo de esta biblioteca." + }, + "scannedAt": "Escaneado {time}", + "detailRegion": "Detalles de {name}" }, "authorEnrichment": { "configuration": "Configuración", @@ -1156,6 +1261,10 @@ "resetToDefaultsButton": "Restablecer los valores predeterminados", "recalculateAll": "Recalcular todo", "confirmReset": "Confirmar reinicio", + "resetDialog": { + "title": "¿Restablecer cada peso a su valor por defecto?", + "description": "Los 24 campos vuelven a los pesos predeterminados con los que se entrega BookOrbit. No se guarda nada hasta que seleccionas Guardar y volver a puntuar" + }, "reset": "Reiniciar", "recalculate": "Recalcular", "subtotal": "subtotal: {count}", @@ -1599,6 +1708,8 @@ "typography": "Tipografía", "font": "Fuente", "fontHint": "Tipo de letra utilizado para el cuerpo del texto.", + "fontStyle": "Estilo de la fuente", + "fontStyleHint": "Peso y cursiva del texto principal. La negrita y la cursiva del libro se mantienen en relación con él.", "builtInFonts": "Fuentes incorporadas", "yourFonts": "Tus fuentes", "fontSize": "Tamaño de fuente", @@ -1718,6 +1829,9 @@ "deleteVariant": "Eliminar variante", "styleNormal": "Normal", "styleItalic": "Cursiva", + "weightItalicOf": "{weight} Cursiva", + "variableRange": "Variable {min}-{max}", + "variableStyles": "{count, plural, one {# estilo} other {# estilos}}", "weightThin": "Delgado", "weightExtraLight": "Luz adicional", "weightLight": "Luz", @@ -3884,6 +3998,7 @@ "dateAddedFutureError": "La fecha añadida no puede ser futura.", "dateFinishedFutureError": "La fecha de finalización no puede ser futura.", "dateFinishedBeforeStartedError": "La fecha de finalización debe ser igual o posterior a la fecha de inicio.", + "dateFinishedBeforeStartedErrorWithDate": "La Fecha de finalización debe ser igual o posterior a la Fecha de inicio ({date}).", "saveReadingDatesError": "No se pudieron guardar las fechas de lectura.", "saveAddedDateError": "Error al guardar la fecha añadida.", "koboPendingDelete": "Pendiente de eliminar del dispositivo", @@ -4043,6 +4158,12 @@ "notInFieldRulesText": "{providers}. Incluido en la búsqueda manual con Todo habilitado, pero no utilizado por la recuperación automática de metadatos.", "noResults": "No se encontraron resultados", "noResultsHint": "Intenta ajustar el título o el autor.", + "searchInterrupted": "La búsqueda no terminó", + "searchIncomplete": "Es posible que falten algunos resultados", + "providerTimedOut": "{provider} tardó demasiado en responder.", + "providerThrottled": "{provider} ha alcanzado su límite de solicitudes. Espera un momento y vuelve a intentarlo.", + "providerFailed": "No se ha podido acceder a {provider}.", + "searchInterruptedHint": "Inténtelo de nuevo, o limite el ámbito de búsqueda.", "searchPrompt": "Busque arriba y luego haga clic en un resultado para comenzar a comparar metadatos." }, "writeAndRename": "Escribir en archivo y cambiar nombre", @@ -4186,6 +4307,7 @@ "startFuture": "La fecha de inicio no puede ser en el futuro.", "finishFuture": "La fecha de finalización no puede ser en el futuro.", "finishBeforeStart": "La fecha de finalización debe ser igual o posterior a la fecha de inicio.", + "finishBeforeStartWithDate": "La fecha de finalización debe ser igual o posterior a la fecha de inicio ({date}).", "saveFailed": "No se pudieron guardar las fechas de lectura." }, "eta": { @@ -6352,6 +6474,8 @@ "fontBuiltIn": "Predefinido", "fontServer": "Fuentes del servidor", "fontYours": "Tus fuentes", + "fontStyle": "Estilo", + "fontStyleItalicOf": "{style} Cursiva", "lineSpacing": "Interlineado", "pageWidth": "Ancho de página", "pageWidthNarrow": "Estrecho", diff --git a/client/src/locales/fi.json b/client/src/locales/fi.json index 26a7f5926..141050ef7 100644 --- a/client/src/locales/fi.json +++ b/client/src/locales/fi.json @@ -1020,9 +1020,9 @@ "syncMetadataToFiles": "Synkronoi metatiedot tiedostoihin", "deleteLibrary": "Poista kirjasto", "bookCount": "{count, plural, =0 {ei kirjoja} one {# kirja} other {# kirjoja}}", + "folderCount": "{count, plural, =0 {ei kansioita} one {# kansio} other {# kansioita}}", "fileMode": "Tiedoston tila", "folderMode": "Kansion tila", - "folderCount": "{count, plural, =0 {ei kansioita} one {# kansio} other {# kansioita}}", "emptyTitle": "Ei vielä kirjastoja", "emptyHint": "Lisää kirjasto aloittaaksesi kirjojesi järjestämisen.", "addFirstLibrary": "Lisää ensimmäinen kirjasto", diff --git a/client/src/locales/fr.json b/client/src/locales/fr.json index e6974ea90..43d243d1d 100644 --- a/client/src/locales/fr.json +++ b/client/src/locales/fr.json @@ -48,7 +48,7 @@ "narrators": "Meilleurs narrateurs" }, "confirm": { - "shareTitle": "Autoriser {level} ?", + "shareTitle": "Activer {level} ?", "shareDescription": "Les administrateurs autorisés pourront voir les informations suivantes.", "stopTitle": "Arrêter de partager des informations sur la lecture ?", "stopDescription": "L'accès administrateur sera immédiatement bloqué. Les enregistrements d'accès existants restent dans votre historique.", @@ -1075,9 +1075,9 @@ "syncMetadataToFiles": "Synchroniser les métadonnées avec les fichiers", "deleteLibrary": "Supprimer la bibliothèque", "bookCount": "{count, plural, =0 {pas de livres} one {# livre} other {# livres} many {# livres}}", + "folderCount": "{count, plural, =0 {pas de dossiers} one {# dossier} other {# dossiers} many {# dossiers}}", "fileMode": "Mode fichier", "folderMode": "Mode dossier", - "folderCount": "{count, plural, =0 {pas de dossiers} one {# dossier} other {# dossiers} many {# dossiers}}", "emptyTitle": "Pas encore de bibliothèques", "emptyHint": "Ajoutez une bibliothèque pour commencer à organiser vos livres.", "addFirstLibrary": "Ajoutez votre première bibliothèque", @@ -1599,6 +1599,7 @@ "typography": "Typographie", "font": "Police", "fontHint": "Police utilisée pour le corps du texte", + "fontStyle": "Style de police", "builtInFonts": "Polices intégrées", "yourFonts": "Vos polices", "fontSize": "Taille de la police", @@ -2107,7 +2108,13 @@ "description": "Chaque compte BookOrbit ne peut avoir qu'un identifiant KOReader associé. Modifiez-le ici sans supprimer les données synchronisées.", "newPassword": "Nouveau mot de passe", "usernameInvalid": "Le nom d'utilisateur doit contenir entre 3 et 100 caractères.", - "passwordPlaceholder": "Laisser vide pour conserver le mot de passe actuel" + "passwordPlaceholder": "Laisser vide pour conserver le mot de passe actuel", + "passwordHint": "Laisser ce champ vide pour conserver le mot de passe actuel.", + "passwordInvalid": "Le mot de passe doit contenir entre 6 et 128 caractères.", + "showPassword": "Afficher le nouveau mot de passe", + "hidePassword": "Cacher le nouveau mot de passe", + "save": "Enregistrer les identifiants", + "saving": "Sauvegarde en cours..." }, "creating": "Création...", "create": "Créer", @@ -2125,6 +2132,7 @@ "credentialsCreatedLabel": "Identifiants créés", "setup": "Configuration", "pluginServerUrl": "Serveur de plugins URL", + "syncUrl": "URL de synchronisation KOReader", "copied": "Copié", "copyUrl": "Copier URL", "preconfiguredPlugin": "Plugin BookOrbit préconfiguré", @@ -2365,7 +2373,10 @@ "nav": { "title": "Réglages", "ariaLabel": "Sections de réglages", - "searchPlaceholder": "Réglages de recherche" + "searchPlaceholder": "Réglages de recherche", + "groups": { + "library": "Galerie" + } } }, "achievements": { diff --git a/client/src/locales/hu.json b/client/src/locales/hu.json index b4e0a0f26..1172d770c 100644 --- a/client/src/locales/hu.json +++ b/client/src/locales/hu.json @@ -2,6 +2,7 @@ "common": { "resetSortAria": "Visszaállítás alap állapotra", "save": "Mentés", + "cancel": "Mégsem", "yes": "Igen", "no": "Nem" } diff --git a/client/src/locales/it.json b/client/src/locales/it.json index fc75b9e09..dbfd087c7 100644 --- a/client/src/locales/it.json +++ b/client/src/locales/it.json @@ -470,7 +470,8 @@ "book-covers": "Copertine di libri", "icons": "Icone", "layout": "Disposizione", - "behavior": "Comportamento" + "behavior": "Comportamento", + "language": "Lingua" } }, "account": { @@ -730,6 +731,7 @@ "test": { "connected": "Connesso - {issuer}", "connectionFailed": "Connessione non riuscita", + "privateIssuerAddress": "L'URL dell'emittente si risolve a un indirizzo di rete privato o locale, quindi il server si è rifiutato di connettersi. Imposta OIDC_ALLOW_LOCAL_ISSUERS=true sul server BookOrbit per consentirlo.", "hide": "Nasconditi", "details": "Dettagli", "supported": "supportato", @@ -781,10 +783,13 @@ "updatesGroup": "Aggiornamenti", "importFromBooklore": "Importa da Booklore", "bookloreImportConfigured": "Importazione di Booklore configurata", + "importLibraryData": "Importa dati della libreria", + "migrationConfigured": "Origine della migrazione configurata", "migrationRunning": "Migrazione in corso", "migrationCompleted": "Migrazione completata", "migrationFailed": "La migrazione non è riuscita", "importDescription": "Importazione una tantum di libri, metadati e progressi di lettura da una precedente installazione di Booklore.", + "migrationDescription": "Importazione una tantum di libri, meta dati e progressi di lettura da una applicazione precedente.", "configuredDescription": "Fonte: {name}. Nessuna migrazione ancora eseguita: continua la configurazione per eseguire l'importazione.", "runningDescription": "Fase: {stage} - iniziata {started}", "completedDescription": "Da {name} - completato {date}", @@ -826,6 +831,7 @@ "migration": { "title": "Migrazione", "subtitle": "Importazione di Booklore una tantum: connetti l'origine, mappa gli utenti, esegui il test, avvia la migrazione ed esporta un report.", + "genericSubtitle": "Importazione della libreria una tantum: connetti l'origine, mappa gli utenti, esegui il test, avvia la migrazione ed esporta un report.", "progress": "Progresso", "stepSourceConnection": "Connessione alla sorgente", "stepUserPathMapping": "Mappatura utenti e percorsi", @@ -919,13 +925,16 @@ "reasonNoFilePathMatch": "Il percorso del file non corrisponde ad alcun libro in questa libreria", "reasonNoFileHashMatch": "L'hash del file non corrisponde ad alcun libro in questa libreria", "reasonNoIsbnMatch": "ISBN non corrisponde ad alcun libro in questa libreria", + "reasonNoAsinMatch": "L'ASIN non corrisponde ad alcun libro in questa libreria", "reasonInsufficientSourceData": "Metadati insufficienti per tentare la corrispondenza", "reasonAmbiguousIsbnMatch": "Più libri corrispondevano allo stesso ISBN", + "reasonAmbiguousAsinMatch": "Più libri corrispondevano allo stesso ASIN", "reasonAmbiguousFileHashMatch": "Più libri corrispondevano allo stesso hash del file", "reasonAmbiguousFilePathMatch": "Più libri corrispondevano allo stesso percorso file", "reasonAmbiguousTitleAuthorMatch": "Più libri corrispondevano allo stesso titolo e autore", "reasonUnknown": "Impossibile determinare il motivo", "strategyIsbn": "Corrispondente a ISBN", + "strategyAsin": "Abbinato via ASIN", "strategyFileHash": "Corrispondente all'hash del file", "strategyPathMapping": "Corrispondente al percorso del file mappato", "strategyTitleAuthor": "Corrispondenza per titolo e autore", @@ -961,6 +970,7 @@ "refresh": "Aggiorna", "sourceUser": "Utente di origine", "targetUser": "Utente di destinazione", + "doNotImport": "Non importare questo utente", "noSourceUsersLoaded": "Nessun utente di origine ancora caricato.", "noActiveTargetUsers": "Nessun utente target attivo trovato. Crea o riattiva un utente BookOrbit prima della mappatura.", "pathPrefixMappings": "Mappature dei prefissi del percorso", @@ -1065,9 +1075,9 @@ "syncMetadataToFiles": "Sincronizza i metadati sui file", "deleteLibrary": "Elimina libreria", "bookCount": "{count, plural, =0 {niente libri} one {# libro} other {# libri} many {# libri}}", + "folderCount": "{count, plural, =0 {nessuna cartella} one {# cartella} other {# cartelle} many {# cartelle}}", "fileMode": "Modalità file", "folderMode": "Modalità cartella", - "folderCount": "{count, plural, =0 {nessuna cartella} one {# cartella} other {# cartelle} many {# cartelle}}", "emptyTitle": "Nessuna libreria ancora", "emptyHint": "Aggiungi una libreria per iniziare a organizzare i tuoi libri.", "addFirstLibrary": "Aggiungi la tua prima libreria", @@ -1092,7 +1102,50 @@ "libraryDeleted": "\"{name}\" eliminato", "deleteFailed": "Impossibile eliminare la libreria", "refreshingCovers": "Copertine rinfrescanti {pct}% ({processed}/{total})", - "coversRefreshed": "Copertine aggiornate ({count} elaborate)" + "coversRefreshed": "Copertine aggiornate ({count} elaborate)", + "onDiskUnit": "{size} sul disco", + "noFilesIndexed": "Nessun file indicizzato", + "formatEntry": "{format} {count}", + "openLibrary": "Apri {name}", + "moreActions": "Altre azioni per {name}", + "statsFailed": "Impossibile caricare i conteggi delle librerie. Tutto il resto su questa pagina funziona ancora.", + "filterLabel": "Filtra librerie", + "filterPlaceholder": "Filtra per nome o percorso", + "filterClear": "Cancella filtro", + "sortLabel": "Ordina", + "noMatchesTitle": "Nessuna libreria corrisponde a quel filtro", + "noMatchesHint": "Nessuna corrispondenza per \"{query}\" per nome o percorso cartella.", + "neverScanned": "Mai scansionato", + "neverScannedHint": "Esegui una scansione per indicizzare le cartelle", + "scanFailedAt": "Non riuscito: {time}", + "scanningPercent": "Scansione al {pct}%", + "scanCounting": "Conteggio file", + "scanCounts": "{processed} di {total}", + "scanNoChange": "nessun cambiamento", + "outcomeSeparator": ", ", + "scanOutcome": "{trigger} - {outcome}", + "syncConfirmBody": "Questo sovrascriverà i metadati direttamente sul disco all'interno di ogni file supportato in {name}. Questa azione non può essere annullata.", + "columns": { + "library": "Biblioteca", + "contents": "Contenuti", + "onDisk": "Su disco", + "automation": "Automazione", + "lastScan": "Ultima scansione", + "actions": "Azioni" + }, + "sort": { + "default": "Ordine predefinito", + "name": "Nome", + "books": "Libri", + "size": "Dimensione sul disco" + }, + "detail": { + "allSupported": "Tutti i formati supportati", + "historyEmpty": "Questa biblioteca non è mai stata scansionata.", + "historyFailed": "Impossibile caricare la cronologia di scansione per questa libreria." + }, + "scannedAt": "Scansionato alle {time}", + "detailRegion": "Dettagli per {name}" }, "authorEnrichment": { "configuration": "Configurazione", @@ -1119,7 +1172,25 @@ "saveFailed": "Impossibile salvare le impostazioni di arricchimento dell'autore", "noEligibleAuthors": "Nessun autore idoneo trovato", "noAuthorsToEnrich": "Nessun autore da arricchire", - "queueFailed": "Impossibile mettere in coda il backfill dell'autore" + "queueFailed": "Impossibile mettere in coda il backfill dell'autore", + "fields": { + "description": "Biografia", + "photo": "Foto", + "birthDate": "Nato/a il", + "deathDate": "Deceduto/a il", + "website": "Sito web", + "genres": "Generi", + "influences": "Influenze" + }, + "metadataPreferences": { + "title": "Fonti per i campi", + "hint": "Imposta l'ordine da cui ogni campo viene compilato. Il primo provider con un valore vince.", + "noProviders": "Nessun provider disponibile", + "saved": "Fonti per i campi salvate", + "saveFailed": "Impossibile salvare le fonti per i campi", + "limitedProviders": "{providers} fornisce solo biografie e foto.", + "addProvider": "Aggiungi {provider} come sorgente" + } }, "scoreWeights": { "groupLabel": "Pesi del punteggio", @@ -1128,6 +1199,10 @@ "resetToDefaultsButton": "Ripristina le impostazioni predefinite", "recalculateAll": "Ricalcola tutto", "confirmReset": "Conferma il ripristino", + "resetDialog": { + "title": "Ripristinare ogni peso al suo valore predefinito?", + "description": "Tutti i 24 campi saranno ripristinati ai pesi di default di BookOrbit. Nulla viene salvato fino a quando non scegli Salva e riesegui i valori." + }, "reset": "Ripristina", "recalculate": "Ricalcolare", "subtotal": "totale parziale: {count}", @@ -1135,7 +1210,11 @@ "saveFailed": "Impossibile salvare i pesi del punteggio", "recalcStarted": "Il ricalcolo del punteggio è iniziato in background", "recalcFailed": "Ricalcolo non riuscito", - "resetToDefaults": "I pesi vengono ripristinati ai valori predefiniti. Salva per applicare." + "resetToDefaults": "I pesi vengono ripristinati ai valori predefiniti. Salva per applicare.", + "howItWorks": { + "title": "Come funziona.", + "summary": "Ogni libro ottiene un punteggio su 100 in base a quanto sono completi i suoi metadati. Un peso è significativo solo accanto agli altri, quindi ogni campo sottostante mostra la parte di un punteggio finito di cui è responsabile. Raddoppiare ogni peso non cambia niente." + } }, "tabs": { "users": "Utenti", diff --git a/client/src/locales/ja.json b/client/src/locales/ja.json index 08e68ca13..ffe1801c6 100644 --- a/client/src/locales/ja.json +++ b/client/src/locales/ja.json @@ -1032,9 +1032,9 @@ "syncMetadataToFiles": "メタデータをファイルに同期", "deleteLibrary": "ライブラリを削除", "bookCount": "{count, plural, =0 {本はありません} one {# 本} other {# 本}}", + "folderCount": "{count, plural, =0 {フォルダなし} one {# フォルダ} other {# フォルダ}}", "fileMode": "ファイルモード", "folderMode": "フォルダモード", - "folderCount": "{count, plural, =0 {フォルダなし} one {# フォルダ} other {# フォルダ}}", "emptyTitle": "ライブラリはまだありません", "emptyHint": "あなたの本を整理し始めるために図書館を加えなさい。", "addFirstLibrary": "最初のライブラリを追加", diff --git a/client/src/locales/ko.json b/client/src/locales/ko.json index fb734665c..c3c92ea8c 100644 --- a/client/src/locales/ko.json +++ b/client/src/locales/ko.json @@ -1,95 +1,95 @@ { "common": { - "resetSortAria": "정렬 기본값으로 재설정", + "resetSortAria": "정렬 기준 초기화", "save": "저장", "cancel": "취소", "delete": "삭제", "edit": "편집", "close": "닫기", "confirm": "확인", - "loading": "불러오는 중", + "loading": "로딩 중...", "search": "검색", - "back": "후방", + "back": "뒤로", "next": "다음", "previous": "이전", - "retry": "다시 시도", - "yes": "네", + "retry": "재시도", + "yes": "예", "no": "아니오" }, "settings": { "privacySharing": { - "title": "프라이버시 & 공유", - "subtitle": "관리자의 개인 식별된 독서 활동 요약 열람을 허용할지 제어합니다.", + "title": "개인 정보 및 공유", + "subtitle": "사용자 독서 활동 요약 데이터의 공유 방식을 설정하세요. 요약 데이터에는 사용자 식별 데이터가 포함됩니다.", "levelLegend": "독서 인사이트 공유 수준", "current": "현재 설정", "levels": { "private": { - "title": "비공개", - "description": "독서 통계를 공개하지 않습니다." + "title": "공유 안 함", + "description": "사용자 본인만 독서 통계를 확인할 수 있습니다." }, "summary": { - "title": "요약 내용 공유", - "description": "책 제목, 저자, 시리즈, 내레이터를 제외한 전체적인 독서 습관을 공유합니다." + "title": "일부 정보 공유", + "description": "책 제목, 저자, 시리즈, 내레이터 정보 없이 전반적인 이용 패턴만 공유합니다." }, "detailed": { - "title": "상세 인사이트 공유", - "description": "근황 및 인기 도서, 작가, 시리즈, 장르, 내레이터에 대해서도 공유합니다." + "title": "상세 정보 공유", + "description": "최근 읽은 도서, 자주 읽은 도서, 작가, 시리즈, 장르, 내레이터 정보도 공유합니다." } }, "fields": { - "frequency": "독서 빈도 및 활동 일수", - "completion": "책 집계 시작 및 완료됨", + "frequency": "독서 빈도 및 방문 일수", + "completion": "시작 도서 및 완독 도서 총계", "formats": "포맷 분포", - "genres": "광범위 장르 분포", - "trend": "독서 경향 집계", - "books": "현재, 최근, 그리고 가장 많이 읽힌 도서 제목", - "authors": "인기 작가", - "series": "인기 시리즈", - "narrators": "인기 내레이터" + "genres": "장르 분포", + "trend": "종합 독서 추세", + "books": "읽고 있는 책, 최근 읽은 책, 많이 읽은 책", + "authors": "좋아하는 작가", + "series": "좋아하는 시리즈", + "narrators": "좋아하는 내레이터" }, "confirm": { - "shareTitle": "{level}를 활성화하시겠습니까?", - "shareDescription": "권한 있는 관리자가 다음 정보를 볼 수 있습니다.", - "stopTitle": "독서 인사이트 공유를 중단하시겠습니까?", - "stopDescription": "관리자 접근이 즉시 차단됩니다. 기존 접근 기록은 이력에 남아 있습니다.", - "recordedNotice": "각 관리자 프로필 보기 열람이 저장되어 접근 이력에 나타납니다." + "shareTitle": "{level}로 변경하시겠습니까?", + "shareDescription": "권한이 있는 관리자가 다음 정보를 볼 수 있습니다.", + "stopTitle": "독서 인사이트 공유를 멈추시겠습니까?", + "stopDescription": "관리자 접근이 즉시 차단됩니다. 기존 접근 기록은 사용자 기록에 남아 있습니다.", + "recordedNotice": "관리자의 프로필 조회 기록은 모두 저장되며, 접근 기록 란에 표시됩니다." }, "preview": { "title": "공유 프로필 미리보기", - "description": "현재 권한 있는 관리자에게 제공되는 정보를 확인합니다.", - "action": "미리보기 불러오기", + "description": "앞으로 관리자에게 공유될 정보를 확인하세요.", + "action": "미리보기 가져오기", "readingTime": "독서 시간", - "activeDays": "활동 일수", - "started": "독서 시작됨", - "completed": "독서 완료됨", - "topBooks": "인기 도서" + "activeDays": "방문 일수", + "started": "읽기 시작한 도서", + "completed": "완독한 도서", + "topBooks": "좋아하는 도서" }, "history": { - "title": "프로필 접근 이력", - "description": "공유 독서 프로필에 대한 관리자의 최근 열람 기록입니다.", - "empty": "관리자의 공유 독서 프로필 열람 기록이 없습니다.", - "paginationLabel": "프로필 열람 이력 페이지" + "title": "프로필 접근 기록", + "description": "사용자의 공유 독서 프로필에 대한 관리자 조회 내역.", + "empty": "관리자가 귀하의 공유 독서 프로필을 조회한 기록이 없습니다.", + "paginationLabel": "프로필 접근 기록 페이지" }, "durationMinutes": "{count, plural, one {#분} other {#분}}", "durationHours": "{count, plural, one {#시간} other {#시간}}", "unknownTitle": "제목 없는 책", "errors": { - "load": "공유 설정 불러오기 실패.", - "save": "공유 설정 업데이트 실패.", - "preview": "공유 프로필 미리보기 불러오기 실패." + "load": "공유 설정을 불러오는 데 실패했습니다.", + "save": "공유 설정을 업데이트하는 데 실패했습니다.", + "preview": "공유 프로필 미리보기를 불러오는 데 실패했습니다." } }, "appearance": { "language": { "title": "언어", - "description": "인터페이스 전반에 사용할 언어를 선택합니다.", + "description": "전체 인터페이스에 적용될 언어를 선택하세요.", "label": "언어", - "loadError": "선택한 언어 불러오기 실패", - "saveError": "언어 설정 저장 실패" + "loadError": "선택한 언어를 불러오는 데 실패했습니다.", + "saveError": "언어 설정 저장에 실패했습니다." }, "pageTitle": "디스플레이", - "pageSubtitle": "테마, 표지, 레이아웃 및 라이브러리 표시 방법을 제어합니다.", - "mobileSummary": "테마: {theme} • 강조: {accent} • 배경: {background}", + "pageSubtitle": "테마, 표지, 레이아웃, 라이브러리 표시 방식을 설정하세요.", + "mobileSummary": "테마: {theme} • 강조색: {accent} • 배경: {background}", "themeMode": { "light": "라이트", "dark": "다크", @@ -99,7 +99,7 @@ "title": "테마", "colorScheme": { "label": "색상 구성", - "hint": "라이트 또는 다크 인터페이스" + "hint": "라이트 모드 또는 다크 모드" }, "accents": { "grey": "그레이", @@ -109,15 +109,15 @@ "copper": "코퍼", "orange": "오렌지", "chartreuse": "샤르트뢰즈", - "marigold": "마리골드", + "marigold": "메리골드", "wasabi": "와사비", "amber": "앰버", - "malachite": "말라카이트", - "yellow": "노랑", - "viridian": "비리디언", - "turquoise": "터쿼이즈", + "malachite": "마라카이트", + "yellow": "옐로", + "viridian": "비리디안", + "turquoise": "터콰이즈", "lime": "라임", - "green": "초록", + "green": "그린", "acid-green": "애시드 그린", "emerald": "에메랄드", "teal": "틸", @@ -127,20 +127,20 @@ "ultramarine": "울트라마린", "iris": "아이리스", "purple": "퍼플", - "blue": "파랑", + "blue": "블루", "indigo": "인디고", "violet": "바이올렛", - "amethyst": "아메지스트", + "amethyst": "아메시스트", "fuchsia": "퓨시아", "raspberry": "라즈베리", "pink": "핑크", "white": "화이트", "rosewater": "로즈워터", - "salmon": "새먼", + "salmon": "살몬", "coral": "코랄", "sand": "샌드", "peach": "피치", - "pear": "페어", + "pear": "피어", "flax": "플랙스", "sprout": "스프라우트", "butter": "버터", @@ -148,23 +148,23 @@ "lemon": "레몬", "foam": "폼", "aqua": "아쿠아", - "celadon": "청자", + "celadon": "셀라돈", "sage": "세이지", "pistachio": "피스타치오", "mint": "민트", - "seafoam": "바다거품", + "seafoam": "시폼", "baby-blue": "베이비 블루", "powder": "파우더", - "sea-glass": "씨 글래스", + "sea-glass": "시 글래스", "bluebell": "블루벨", "cornflower": "콘플라워", - "thistle": "엉겅퀴", + "thistle": "시슬", "periwinkle": "페리윙클", - "wisteria": "등나무", + "wisteria": "위스테리아", "lavender": "라벤더", "mauve": "모브", "orchid": "오키드", - "rose-quartz": "장미수정", + "rose-quartz": "로즈 쿼츠", "blush": "블러시" }, "accentColor": { @@ -172,59 +172,147 @@ }, "cornerRadius": { "label": "모서리 곡률", - "hint": "카드 및 UI 요소의 둥글기" + "hint": "카드 및 UI 요소의 둥근 정도" }, "surfaceBrightness": { - "label": "표면 밝기", - "hint": "다크 모드 표면 밝게 만들기", - "reset": "초기화" + "label": "배경 밝기", + "hint": "다크 모드 배경 밝기 조정", + "reset": "재설정" }, "libraryBackground": { "title": "라이브러리 배경", "pattern": { "label": "배경 패턴", - "hint": "책 그리드 뒤에 표시되는 패턴" + "hint": "애플리케이션 배경에 적용될 패턴" } + }, + "backgroundGroups": { + "fundamental": "기본", + "structural": "구조", + "ambient": "엠비언트", + "refractive": "스펙트럼" } }, "storage": { - "title": "표시 설정을 저장할 곳을 지정합니다", - "active": "활성", + "title": "디스플레이 설정 저장 위치", + "active": "사용 중", "notAvailable": "사용 불가", "device": { - "title": "이 기기만", - "description": "브라우저에 설정을 저장합니다. 기기마다 다른 외관을 원할 때 추천." + "title": "이 기기에만", + "description": "설정이 브라우저에 저장됩니다. 각 기기에서 설정이 다르게 적용되길 원하는 경우에 가장 적합합니다." }, "account": { - "title": "내 계정", - "description": "설정이 계정에 저장됩니다. 모든 기기에서 동일한 설정을 원할 경우 권장됩니다." + "title": "내 계정에", + "description": "설정이 계정에 저장됩니다. 모든 기기에서 동일한 설정을 유지하고 싶은 경우에 가장 적합합니다." }, "toasts": { - "synced": "설정 내용이 동기화됩니다", - "local": "설정 내용이 이 기기에 한정됩니다" + "synced": "이제 설정이 동기화됩니다.", + "local": "설정이 이 기기에 저장됩니다." }, "errors": { - "demoRestricted": "데모 제한 계정은 테마 저장 모드를 변경할 수 없습니다", - "update": "저장 모드 업데이트 실패", - "generic": "저장 모드 업데이트 중 오류가 발생했습니다" + "demoRestricted": "데모 전용 계정은 설정 저장 모드를 변경할 수 없습니다.", + "update": "저장 모드 업데이트에 실패했습니다.", + "generic": "저장 모드 업데이트 중 오류가 발생했습니다." } }, "bookCovers": { "title": "책 표지", "coverSearch": { - "label": "기본 커버 검색 공급자" + "label": "기본 표지 검색 제공자", + "hint": "온라인에서 표지를 찾을 때 사용할 소스를 지정합니다. 이 설정은 계정에 저장되므로 모든 기기에 적용됩니다.", + "loadError": "기본 표지 검색 제공자를 로드하는 데 실패했습니다.", + "saveError": "기본 표지 검색 제공자 저장에 실패했습니다." }, "displayMode": { + "title": "표지 디스플레이 모드", + "hint": "표지 크기가 책 카드 크기와 다를 때 표지 이미지를 처리하는 방법 설정", "blurredFit": { - "label": "블러 핏" + "label": "흐린 배경", + "hint": "흐린 배경 위에 원본 표지를 표시합니다" }, "fillCrop": { - "hint": "가장자리 잘라내기" + "label": "카드 채우기", + "hint": "이미지가 카드 전체를 채울 수 있도록 이미지의 일부를 잘라 비율을 맞춥니다" + }, + "naturalBottom": { + "label": "하단 고정", + "hint": "원본 표지 비율을 유지하고 표지를 하단에 고정합니다" + } + }, + "spine": { + "title": "책등 오버레이", + "hint": "표지에 정형화된 책등 효과와 광택 효과를 추가합니다", + "off": { + "label": "끄기", + "hint": "표지에 책등/광택 효과 미적용" + }, + "subtle": { + "label": "약하게", + "hint": "실물 책과 가까운 연한 책등 효과 및 광택 효과 적용" + }, + "strong": { + "label": "강하게", + "hint": "보다 강조된 책등 효과 및 광택 효과 적용" + } + }, + "showSpineOnComics": { + "label": "만화책에 책등 표시", + "hint": "만화책 표지에 책등 오버레이와 광택 효과를 적용합니다 (cbz, cbr, cb7)" + }, + "detailCoverTint": { + "title": "책 상세 정보 배경 색조", + "hint": "책 상세 정보 페이지에서 표지와 제목 뒤쪽에 적용되는 틴팅용 색상 설정", + "off": { + "label": "끄기", + "hint": "일반 카드 배경 사용" + }, + "single": { + "label": "한 가지 색상", + "hint": "표지의 주 색상만 사용" + }, + "duotone": { + "label": "두 가지 색상", + "hint": "눈에 띄는 강조색이 있을 경우 해당 색상 포함" + } + }, + "shadow": { + "title": "표지 그림자 강도", + "hint": "그리드, 목록, 테이블, 대시보드 썸네일 전반에 걸쳐 사용되는 그림자 깊이 수치를 제어합니다.", + "default": { + "label": "기본값", + "hint": "기본 그림자 깊이 적용" + }, + "strong": { + "label": "강하게", + "hint": "표지 하부에 책장 스타일의 강한 그림자 적용" } }, "overlays": { + "title": "카드 오버레이", + "hint": "책 표지 카드에 표시될 메타데이터를 선택하세요", + "progressBar": { + "label": "진행도 바", + "hint": "표지 아래쪽에 위치하는 진행도 표시용 얇은 색상 막대" + }, + "format": { + "label": "파일 형식", + "hint": "우측 하단에 표시되는 포맷 별로 색상이 구분된 EPUB, PDF, CBZ 배지" + }, + "rating": { + "label": "등급", + "hint": "좌측 하단에 표시되는 별점 표시" + }, + "readStatus": { + "label": "독서 상태", + "hint": "좌측 상단에 표시되는 현재 독서 상태를 나타내기 위한 아이콘" + }, + "seriesPosition": { + "label": "시리즈 번호", + "hint": "우측 상단에 표시되는 현재 책이 시리즈에서 몇 번째 권인지를 나타내는 배지 (예시: #3, #1.5)" + }, "lockStatus": { - "hint": "메타데이터 잠금 아이콘은 오른쪽 상단에 있으며, 잠겨 있을 때는 주황색, 잠금 해제 시에는 녹색입니다" + "label": "잠금 상태", + "hint": "우측 상단에 표시되는 메타데이터 잠금 상태를 나타내는 아이콘 (주황색: 잠김, 초록색: 잠기지 않음)" } } }, @@ -232,9 +320,7582 @@ "coverSize": "표지 크기", "gridSpacing": "그리드 간격", "gridLayout": { - "title": "라이브러리 그리드 배치" + "title": "라이브러리 그리드 레이아웃" + }, + "coverSizeBehavior": { + "label": "표지 크기 동작 방식", + "hint": "장방형/정방형 크기 및 그리드 간격 설정이 모든 보기 모드에서 공유될지, 아니면 각 보기 모드별로 적용될지 설정합니다.", + "perViewHint": "보기마다 다르게: 각 보기 모드의 디스플레이 설정에서 표지 크기 및 간격을 조정할 수 있습니다.", + "syncAll": "모든 보기에서 동일", + "perView": "보기마다 다르게" + }, + "portraitCoverSize": { + "label": "장방형 표지 크기", + "hint": "장방형 표지를 라이브러리에 표시할 때 사용" + }, + "squareCoverSize": { + "label": "정방형 표지 크기", + "hint": "정방형 표지를 라이브러리에 표시할 때 사용" + }, + "portraitGridSpacing": { + "label": "장방형 그리드 간격", + "hint": "장방형 표지 간격" + }, + "squareGridSpacing": { + "label": "정방형 그리드 간격", + "hint": "정방형 표지 간격" + }, + "cardInfoMode": { + "label": "책 카드 정보 표시 방식", + "hint": "책 카드에 제목 및 저자 정보를 표시하는 방식", + "onHover": "접촉 시", + "belowCover": "표지 아래", + "off": "끄기" + }, + "primaryCardLabel": { + "label": "주 텍스트 라벨", + "hint": "표지 아래에 표시될 텍스트 (첫 번째 줄)" + }, + "secondaryCardLabel": { + "label": "보조 텍스트 라벨", + "hint": "주 텍스트 아래에 추가될 텍스트 (두 번째 줄)" + }, + "labelField": { + "hidden": "숨김", + "bookTitle": "책 제목", + "seriesTitle": "시리즈 제목", + "seriesTitlePosition": "시리즈 제목 + 위치", + "author": "저자" + }, + "seriesDisplay": { + "title": "시리즈 표시", + "collapsedCover": { + "label": "시리즈 표지", + "hint": "시리즈를 모아서 볼 때 표지를 표시하는 방식" + }, + "stack": "책 더미", + "mosaic": "모아보기", + "first": "첫 번째 권", + "latest": "마지막 권", + "firstUnread": "읽지 않은 첫 번째 권" + }, + "authorGrid": { + "title": "작가 그리드", + "coverSize": { + "label": "프로필 크기", + "hint": "그리드에 표시될 저자 프로필 사진 크기" + }, + "coverShape": { + "label": "이미지 모양", + "hint": "그리드에 표시될 저자 프로필 사진의 모양" + }, + "circle": "원형", + "square": "정사각형" + }, + "listTableViews": { + "title": "목록 보기 및 표 보기" + }, + "zebraStriping": { + "label": "행 배경색 교차", + "hint": "가독성 향상을 위해 홀수 행과 짝수 행의 배경색을 다르게 설정" + } + }, + "behavior": { + "title": "라이브러리 동작", + "thumbnailClicks": { + "label": "썸네일 클릭", + "hint": "그리드 보기와 목록 보기에서 책을 열 때 수행할 동작", + "readFirst": "읽기 우선", + "readFirstHint": "읽을 수 있는 파일이 존재할 경우 리더를 엽니다.", + "openDetails": "상세 정보 열기", + "openDetailsHint": "그리드 및 목록 썸네일 클릭 시 책 상세 정보 페이지로 이동합니다." + }, + "filterPreview": { + "label": "필터 표시를 기본값으로", + "hint": "스마트 스코프를 열 때 활성활된 필터와 정렬 기준을 표시" + }, + "collapseSeries": { + "label": "시리즈 모아보기를 기본값으로", + "hint": "라이브러리 및 컬렉션에서 같은 시리즈의 책들을 하나의 카드로 그룹화" + } + }, + "icons": { + "title": "커스텀 아이콘", + "uploadIcons": "아이콘 업로드", + "uploadedCount": "{count, plural, =0 {업로드된 아이콘 없음} one {#개 아이콘 업로드됨} other {#개 아이콘 업로드됨}}", + "searchPlaceholder": "아이콘 검색", + "sort": { + "newest": "최신순", + "name": "이름순" + }, + "selectedCount": "{count, plural, one {#개 선택됨} other {#개 선택됨}}", + "clear": "취소", + "deleteSelected": "선택 항목 삭제", + "loading": "아이콘 로딩 중...", + "emptySearch": "검색 내용과 일치하는 아이콘이 없습니다.", + "emptyNoIcons": "아직 업로드된 커스텀 아이콘이 없습니다.", + "namePlaceholder": "이름", + "checkingUsage": "사용처 확인 중...", + "usedBy": "{count}번 사용됨", + "notUsedYet": "아직 사용되지 않음", + "rename": "이름 변경", + "replace": "교체", + "usage": { + "libraries": "{count, plural, =0 {라이브러리 없음} one {#개 라이브러리} other {#개 라이브러리}}", + "collections": "{count, plural, =0 {컬렉션 없음} one {#개 컬렉션} other {#개 컬렉션}}", + "smartScopes": "{count, plural, =0 {스마트 스코프 없음} one {#개 스마트 스코프} other {#개 스마트 스코프}}" + }, + "confirm": { + "deleteOne": "\"{name}\"을(를) 삭제하시겠습니까? 기존 사용처는 기본 아이콘으로 대체됩니다.", + "deleteMany": "{count, plural, =0 {0개 아이콘을 삭제하시겠습니까?} one {아이콘 #개를 삭제하시겠습니까? 기존 사용처는 기본 아이콘으로 대체됩니다.} other {아이콘 #개를 삭제하시겠습니까? 기존 사용처는 기본 아이콘으로 대체됩니다.}}" + }, + "toasts": { + "saved": "아이콘이 저장되었습니다.", + "updated": "아이콘이 업데이트되었습니다.", + "deleted": "아이콘이 삭제되었습니다.", + "bulkDeleted": "{count, plural, =0 {아이콘 0개를 삭제했습니다} one {아이콘 #개를 삭제했습니다} other {아이콘 #개를 삭제했습니다}}", + "bulkDeletePartial": "{deleted}개 삭제 완료, {failed}개 삭제 실패" + }, + "errors": { + "load": "아이콘 불러오기에 실패했습니다.", + "save": "아이콘 저장에 실패했습니다.", + "replace": "아이콘 교체에 실패했습니다.", + "delete": "아이콘 삭제에 실패했습니다.", + "bulkDelete": "아이콘 삭제에 실패했습니다." + } + }, + "tabs": { + "theme": "테마", + "book-covers": "책 표지", + "icons": "아이콘", + "layout": "레이아웃", + "behavior": "동작", + "language": "언어" + } + }, + "account": { + "title": "계정", + "subtitle": "개인 프로필 설정을 관리하세요.", + "subtitleAll": "개인 프로필 및 알림 설정을 관리하세요.", + "tabs": { + "profile": "프로필", + "privacy": "개인 정보 및 공유", + "notifications": "알림", + "restrictions": "제한" + }, + "demoRestricted": { + "cannotEdit": "데모 전용 계정은 계정 설정을 수정할 수 없습니다.", + "notice": "데모 전용 계정은 프로필, 비밀번호, 아바타, 인증 연결 항목을 편집할 수 없습니다." + }, + "feedback": { + "unsavedChanges": "변경 사항이 저장되지 않음", + "discard": "취소" + }, + "profile": { + "securityHeading": "프로필 및 보안", + "username": "사용자 이름", + "fullName": "표시 이름", + "email": "이메일", + "emailHint": "이메일 주소를 변경하려면 관리자에게 문의하세요.", + "save": "프로필 저장", + "saving": "저장 중...", + "changePassword": "비밀번호 변경", + "accountType": "계정 유형:", + "accountTypeOidc": "OIDC / SSO", + "accountTypeShared": "공유", + "accountTypeLocal": "로컬", + "nameRequired": "이름이 필요합니다.", + "updateFailed": "프로필 업데이트에 실패했습니다.", + "updated": "프로필이 업데이트되었습니다.", + "usernameHint": "사용자 이름은 변경할 수 없습니다.", + "passwordHint": "로그인 시 사용하는 비밀번호를 변경합니다.", + "passwordHintOidc": "비밀번호는 사용자가 이용하는 인증 제공자에서 관리됩니다.", + "passwordHintShared": "공유 계정은 매직 링크를 통해 로그인하며 비밀번호가 필요 없습니다." + }, + "readingPreferences": { + "title": "독서 관련 설정", + "timezoneHint": "시간대는 'Early Bird'나 'All-nighter'와 같이 시간 확인이 필요한 업적에서 사용됩니다.", + "timezone": "시간대", + "save": "설정 저장", + "enableAchievements": "업적 활성화", + "enableAchievementsHint": "업적 진행도를 추적하고 업적 관련 인터페이스를 표시합니다. 업적 알림을 기타 알림과는 별도로 관리합니다.", + "achievementsEnabled": "업적 활성화됨", + "achievementsDisabled": "업적 비활성화됨", + "achievementsSaveFailed": "업적 설정을 업데이트하는 데 실패했습니다" + }, + "preferences": { + "saveFailed": "설정 저장에 실패했습니다.", + "saved": "설정이 저장되었습니다." + }, + "avatar": { + "title": "프로필 사진", + "unknownUser": "알 수 없는 사용자", + "formatHint": "PNG/JPEG/WEBP (최대 {size} MB)", + "upload": "사진 업로드", + "replace": "사진 교체", + "uploading": "업로드 중...", + "remove": "사진 삭제", + "removing": "삭제 중...", + "updated": "프로필 사진이 업데이트되었습니다.", + "uploadFailed": "프로필 사진 업로드에 실패했습니다.", + "removed": "프로필 사진이 삭제되었습니다.", + "removeFailed": "프로필 사진 삭제에 실패했습니다.", + "removeConfirm": { + "title": "프로필 사진을 삭제하시겠습니까?", + "description": "프로필 사진이 삭제되고 이니셜로 대체됩니다.", + "confirm": "삭제" + } + }, + "connectedAccounts": { + "title": "연결된 계정", + "unlink": "연결 해제", + "unlinking": "연결 해제 중...", + "linkAdditional": "다른 인증 제공자와 연결:", + "linkProvider": "{provider}와(과) 연결", + "redirecting": "리디렉션 중...", + "noneConfigured": "OIDC 인증 제공자가 구성되지 않았습니다. SSO(Single Sign-On) 기능을 설정하려면 관리자에게 문의하세요.", + "linkStateFailed": "연결 상태를 생성하는 데 실패했습니다.", + "startLinkFailed": "OIDC 연결에 실패했습니다.", + "unlinkFailed": "연결 해제에 실패했습니다.", + "unlinked": "인증 연결 해제에 성공했습니다.", + "unlinkIdentityFailed": "인증 연결 해제에 실패했습니다.", + "unlinkDialog": { + "title": "{provider} 연결을 해제하시겠습니까?", + "description": "진행하려면 비밀번호를 입력해 주세요. 앞으로 이 인증 제공자를 통해서는 더 이상 로그인할 수 없습니다.", + "currentPassword": "현재 비밀번호" + }, + "description": "이 계정에 연결된 외부 인증 제공자를 통해 로그인하세요.", + "unlinkAria": "{provider} 연결 해제" + }, + "tour": { + "title": "가이드 투어", + "description": "앱의 주요 기능을 소개하는 튜토리얼을 다시 확인해 보세요.", + "action": "다시 보기" + }, + "restrictions": { + "none": { + "title": "콘텐츠 제한 없음", + "description": "현재 사용자 계정은 할당된 라이브러리 내의 모든 콘텐츠에 대한 접근 권한을 가지고 있습니다." + }, + "banner": "현재 사용자 계정에는 관리자에 의해 콘텐츠 제한이 적용되어 있습니다. 따라서 일부 도서가 표시되지 않을 수 있습니다.", + "allowedTags": { + "title": "허용 태그", + "description": "다음 태그들 중 하나 이상이 포함된 책들만 표시됩니다." + }, + "blockedTags": { + "title": "차단 태그", + "description": "다음 태그가 하나라도 포함된 책은 현재 사용자에게 표시되지 않습니다." + }, + "allowedGenres": { + "title": "허용 장르", + "description": "다음 장르들 중 하나 이상이 포함된 책들만 표시됩니다." + }, + "blockedGenres": { + "title": "차단 장르", + "description": "다음 장르가 하나라도 포함된 책은 현재 사용자에게 표시되지 않습니다." + } + }, + "groups": { + "profile": "프로필", + "preferences": "환경 설정", + "security": "보안 및 접근 (Security & access)" + } + }, + "magicLinks": { + "title": "매직 링크", + "subtitle": "공유 계정에 대한 로그인 링크를 생성하세요.", + "createLink": "링크 생성", + "noSharedAccounts": "공유 계정이 존재하지 않음", + "noSharedAccountsHint": "먼저 {usersPage}에서 공유 계정을 생성한 뒤 매직 링크를 생성하세요.", + "activeLinks": "활성화된 링크", + "inactiveLinks": "비활성화된 링크", + "paused": "일시 정지됨", + "deletedUser": "사용자가 삭제됨", + "expiredPrefix": "만료된 ", + "never": "활동 기록 없음", + "noExpiry": "유효기한 없음", + "expired": "만료", + "expiresOn": "{date} 만료", + "revokedOn": "{date} 폐기", + "expiredOn": "{date} 만료", + "usesCount": "{count, plural, =0 {미사용} one {1회 사용} other {#회 사용}}", + "copied": "복사되었습니다!", + "copyLink": "링크 복사", + "pause": "일시 정지", + "resume": "사용", + "revoke": "폐기", + "revoking": "폐기 중...", + "emptyState": "매직 링크가 아직 생성되지 않았습니다. 공유 가능한 로그인 URL을 생성하려면 \"{action}\"을(를) 클릭하세요.", + "columns": { + "label": "이름", + "account": "계정", + "createdBy": "생성자", + "expires": "만료", + "uses": "사용 횟수", + "created": "생성일", + "status": "상태", + "totalUses": "총 사용 횟수", + "actions": "작업" + }, + "createDialog": { + "title": "매직 링크 생성", + "description": "공유 계정용 로그인 URL을 생성합니다.", + "sharedAccount": "공유 계정", + "selectAccount": "공유 계정을 선택하세요", + "label": "이름", + "labelPlaceholder": "예시: 데모 체험용 링크", + "expiresAt": "만료일시", + "optional": "(선택)", + "create": "생성", + "creating": "생성 중..." + }, + "revokeDialog": { + "title": "매직 링크를 폐기하시겠습니까?", + "description": "매직 링크가 즉시 폐기되며, 연결된 계정의 모든 활성 세션이 종료됩니다." + }, + "errors": { + "create": "생성에 실패했습니다.", + "copy": "매직 링크 복사에 실패했습니다.", + "update": "매직 링크 업데이트에 실패했습니다.", + "revoke": "폐기에 실패했습니다." + }, + "usersPage": "사용자 페이지", + "emptyTitle": "매직 링크가 아직 생성되지 않음", + "emptyHint": "\"{action}\"을(를) 클릭하여 공유 로그인 URL을 생성하세요.", + "noActiveTitle": "활성화된 매직 링크 없음", + "noActiveHint": "모든 매직 링크가 만료되었거나 폐기되었습니다.", + "copyLinkAria": "{label}의 링크를 복사합니다.", + "pauseAria": "{label}의 사용을 일시 정지합니다.", + "resumeAria": "{label}을(를) 다시 사용할 수 있도록 합니다.", + "revokeAria": "{label}을(를) 폐기합니다.", + "lastUsedLabel": "{date} 최종 사용" + }, + "oidc": { + "title": "OIDC / SSO", + "subtitle": "SSO(Single Sign-On) 기능을 위한 OpenID Connect 인증 제공자를 관리하세요.", + "providers": "제공자", + "addProvider": "제공자 추가", + "editProvider": "제공자 편집", + "configureNew": "새로운 OIDC 인증 제공자를 구성하세요.", + "editing": "{slug} 편집 중", + "enabled": "활성화됨", + "disabled": "비활성화됨", + "empty": { + "title": "제공자가 추가되지 않음", + "description": "사용자들이 SSO를 적용할 수 있도록 하려면 OIDC 인증 제공자를 추가하세요." + }, + "form": { + "status": "상태", + "enableProvider": "제공자 활성화", + "enableProviderHint": "로그인 페이지에 이 제공자 표시", + "identity": "제공자 정보", + "slug": "식별자", + "slugHint": "고유 식별자 (소문자, 하이픈만 허용. 추후 변경 불가)", + "displayName": "표시 이름", + "displayNameHint": "로그인 버튼에 표시되는 텍스트", + "iconUrl": "아이콘 URL", + "iconUrlHint": "로그인 버튼 옆에 표시될 로고 (선택)", + "iconPreviewAlt": "아이콘 미리보기", + "connection": "연결", + "issuerUri": "제공자 URI", + "issuerUriHint": "제공자 연결을 위한 Issuer URL", + "test": "테스트", + "testing": "테스트 중...", + "clientId": "클라이언트 ID", + "clientSecret": "클라이언트 시크릿", + "clientSecretPlaceholder": "기존 값을 그대로 사용하려면 비워두세요", + "scopes": "스코프", + "claimMapping": "클레임 매핑", + "previewClaims": "클레임 미리보기", + "redirecting": "리디렉션 중...", + "mappedClaims": "매핑된 클레임", + "rawClaims": "Raw 클레임", + "usernameClaim": "Username 클레임", + "nameClaim": "Name 클레임", + "emailClaim": "Email 클레임", + "groupsClaim": "Groups 클레임", + "autoProvisioning": "자동 프로비저닝", + "autoProvisionUsers": "사용자 자동 프로비저닝", + "autoProvisionUsersHint": "사용자가 존재하지 않을 경우, 최초 OIDC 로그인 시 자동으로 계정 생성", + "allowLocalLinking": "로컬 계정 연동 허용", + "allowLocalLinkingHint": "OIDC 신원을 사용자 이름이 일치하는 기존 로컬 계정에 연결", + "defaultPermissions": "기본 권한", + "defaultPermissionsHint": "최초 OIDC 로그인 시 신규 사용자에게 부여될 권한 설정", + "createProvider": "제공자 생성", + "saveChanges": "변경 사항 저장", + "saving": "저장 중...", + "deleteProvider": "제공자 삭제", + "deleting": "삭제 중..." + }, + "test": { + "connected": "연결됨 - {issuer}", + "connectionFailed": "연결 실패", + "privateIssuerAddress": "제공자 URL이 사설 또는 로컬 네트워크 주소로 판단되어 서버가 연결을 거부했습니다. 이를 허용하려면 BookOrbit 서버에서 OIDC_ALLOW_LOCAL_ISSUERS=true 환경 변수를 설정해 주세요.", + "hide": "숨기기", + "details": "상세 정보", + "supported": "지원됨", + "notSupported": "지원되지 않음" + }, + "groupMappings": { + "title": "그룹 매핑", + "noPermission": "권한 없음", + "empty": "그룹 매핑이 구성되지 않았습니다.", + "addMapping": "매핑 추가", + "claimPlaceholder": "OIDC 그룹 클레임 (예시: admins)", + "add": "추가", + "adding": "추가 중..." + }, + "toasts": { + "providerCreated": "제공자가 생성되었습니다.", + "providerSaved": "제공자 설정이 저장되었습니다.", + "providerDeleted": "제공자가 삭제되었습니다.", + "mappingAdded": "그룹 매핑이 추가되었습니다.", + "mappingRemoved": "그룹 매핑이 제거되었습니다." + }, + "errors": { + "loadProvider": "제공자 로드에 실패했습니다.", + "createProvider": "제공자 생성에 실패했습니다.", + "save": "저장에 실패했습니다.", + "delete": "삭제에 실패했습니다.", + "deleteProvider": "제공자 삭제에 실패했습니다.", + "requestFailed": "요청에 실패했습니다.", + "previewState": "미리보기 상태를 생성할 수 없습니다.", + "startPreview": "미리보기 시작에 실패했습니다.", + "addMapping": "매핑 추가에 실패했습니다.", + "removeMapping": "그룹 매핑 제거에 실패했습니다." + } + }, + "admin": { + "title": "관리자", + "subtitle": "사용자 및 인증 설정을 관리하세요.", + "system": { + "title": "시스템", + "subtitle": "파일 구성, 데이터 수집, 및 유지보수 설정" + }, + "maintenance": { + "title": "유지보수", + "subtitle": "백그라운드 작업, 시스템 인덱스, 유지보수 작업을 진행하세요.", + "importGroup": "가져오기", + "recommendationsGroup": "추천", + "achievementsGroup": "업적", + "updatesGroup": "업데이트", + "bookloreImportConfigured": "Booklore 가져오기 설정 완료", + "importLibraryData": "라이브러리 데이터 가져오기", + "migrationConfigured": "마이그레이션 소스 구성 완료", + "migrationRunning": "마이그레이션 실행 중", + "migrationCompleted": "마이그레이션 완료", + "migrationFailed": "마이그레이션 실패", + "importDescription": "이전에 사용하던 Booklore 설치본에서 책, 메타데이터, 독서 진행도 가져오기.", + "migrationDescription": "다른 라이브러리 애플리케이션에서 도서, 메타데이터, 독서 진행도 가져오기.", + "configuredDescription": "소스: {name}. 아직 마이그레이션이 실행되지 않음 - 가져오기를 진행하려면 설정을 계속 진행해 주세요.", + "runningDescription": "단계: {stage} - {started} 시작", + "completedDescription": "소스: {name} - {date} 완료", + "migrationErrorGeneric": "마이그레이션 작업 중 오류가 발생했습니다.", + "stageInitializing": "초기화 중", + "recently": "최근", + "getStarted": "시작하기", + "continueSetup": "이어서 작업", + "viewDetails": "상세 보기", + "refreshRecommendationIndex": "추천 인덱스 갱신", + "refreshRecommendationHint": "최신 라이브러리 변경 사항을 반영하여 추천 엔진을 업데이트하세요. 이 작업은 백그라운드에서 실행됩니다.", + "booksQueuedForProcessing": "{count, plural, =0 {처리 대기 중인 책 없음} one {책 #권 처리 대기 중} other {책 #권 처리 대기 중}}", + "run": "실행", + "running": "처리 중...", + "backfillAchievements": "업적 재평가", + "backfillAchievementsHint": "모든 사용자의 업적 달성을 재평가합니다.", + "backfillResult": "사용자 {users}명 처리, {awards}개 업적 수여.", + "runBackfill": "재평가 실행", + "checkForUpdates": "업데이트 확인", + "checkForUpdatesHint": "프로그램 시작 시 GitHub에서 새로운 릴리스가 있는지 자동으로 확인하고, 만약 있다면 사이드바에 표시합니다.", + "updateChecksEnabled": "업데이트 확인이 활성화되었습니다.", + "updateChecksDisabled": "업데이트 확인이 비활성화되었습니다.", + "updateSettingFailed": "설정 업데이트에 실패했습니다.", + "booksQueuedForEmbedding": "{count, plural, =0 {임베딩 대기 중인 책이 없음} one {책 #권 임베딩 대기 중} other {책 #권 임베딩 대기 중}}", + "failed": "실패", + "unknownError": "알 수 없는 오류", + "rebuildEmbeddingsFailed": "임베딩 재구축 실패: {error}", + "achievementBackfillConfirm": "모든 사용자/모든 업적에 대한 업적 재평가를 실행하시겠습니까? 이 작업은 시간이 다소 걸릴 수 있습니다.", + "achievementBackfillComplete": "업적 재평가 완료: {count}개 업적 수여", + "backfillRunFailed": "재평가 작업 실행에 실패했습니다.", + "achievementBackfillFailed": "업적 재평가 실행 실패: {error}", + "uploadsGroup": "업로드", + "maxUploadSize": "파일 업로드 최대 크기 제한", + "maxUploadSizeHint": "시스템 전체의 파일 업로드 최대 크기 제한을 설정합니다.", + "save": "저장", + "uploadSizeInvalid": "업로드 크기 제한은 0보다 커야 합니다.", + "uploadSizeUpdated": "업로드 크기 제한이 업데이트되었습니다." + }, + "migration": { + "title": "마이그레이션", + "subtitle": "일회성 Booklore 가져오기: 소스 연결, 사용자 매핑, 모의 테스트, 마이그레이션 시작, 보고서 내보내기.", + "genericSubtitle": "일회성 라이브러리 가져오기: 소스 연결, 사용자 매핑, 모의 테스트, 마이그레이션 시작, 보고서 내보내기.", + "progress": "진행도", + "stepSourceConnection": "소스 연결", + "stepUserPathMapping": "사용자 및 경로 매핑", + "stepDryRun": "모의 테스트", + "stepDryRunTitle": "모의 점검 및 테스트 운영", + "stepRunMigration": "마이그레이션 실행", + "stepReport": "보고서", + "stepReportTitle": "마이그레이션 보고서", + "subtitleSource": "소스 Booklore 인스턴스에 대한 데이터베이스 연결을 설정합니다.", + "genericSubtitleSource": "소스 라이브러리 애플리케이션에 대한 연결을 설정합니다.", + "subtitleMappings": "소스 사용자를 타겟 사용자에 매핑하고 파일 경로를 변환합니다.", + "subtitleDryRun": "실제 마이그레이션을 실행하기 전에, 가져오게 될 내용을 미리 확인하세요.", + "subtitleRun": "실시간 가져오기 작업을 시작하고 진행 상황을 모니터링하세요.", + "subtitleReport": "가져온 내용을 검토하고 상세 보고서를 출력합니다.", + "continueToMappings": "매핑 단계로 계속", + "continueToDryRun": "테스트 단계로 계속", + "continueToMigration": "마이그레이션 단계로 계속", + "viewReport": "보고서 보기", + "badgeValidated": "검증됨", + "badgeSaved": "저장됨", + "badgeUpToDate": "최신", + "badgeCompleted": "완료", + "badgeRunning": "실행 중", + "badgeFailed": "실패", + "mediaPathRequired": "책 표지 마이그레이션에 필요합니다.", + "mediaPathAbsolute": "반드시 절대 경로(예시: /books)를 사용하세요. 상대 경로는 지원되지 않습니다.", + "mediaPathConfigured": "표지 가져오기 경로가 설정되었습니다. 테스트 연결을 사용하여 접근 권한과 Booklore 이미지 폴더 구조를 확인하세요.", + "issueSaveSource": "소스 연결 설정 저장", + "issueValidateSource": "소스 연결 검증", + "issueSaveMappings": "사용자 및 경로 매핑 저장", + "issueSavePathMappings": "경로 매핑 저장 및 검증", + "issueFreshDryRun": "새로운 모의 테스트 실행", + "issueResolveDuplicates": "모의 테스트에서 발견된 소스-타겟 중복 도서 처리", + "issueWaitActiveRun": "현재 실행 중인 작업이 완료될 때까지 대기", + "sourceRecordId": "소스 레코드 ID #{id}", + "byAuthorWithId": "{author} 작성 (ID: {id})", + "filePathWithId": "{path} (ID: {id})", + "bookloreSourceId": "Booklore 소스 ID: {id}", + "libraryBookNum": "라이브러리 책 #{id}", + "errorInitialize": "마이그레이션 설정을 초기화하는 데 실패했습니다.", + "errorLoadSourceTypes": "지원되는 마이그레이션 소스 유형을 불러오는 데 실패했습니다.", + "errorLoadTargetUsers": "타겟 사용자를 불러오는 데 실패했습니다.", + "errorLoadLibraryFolders": "타겟 라이브러리 폴더를 불러오는 데 실패했습니다.", + "noSourceUsersReturned": "소스 사용자를 불러오지 못했습니다.", + "userMappingSuggestionsLoaded": "사용자 매핑 제안을 불러왔습니다.", + "errorLoadSuggestions": "사용자 매핑 제안을 불러오는 데 실패했습니다.", + "requiredFields": "호스트, 사용자, 데이터베이스, 소스 이름은 필수 항목입니다.", + "connectionTestPassedWithWarnings": "경고와 함께 연결 테스트를 통과했습니다.", + "connectionTestPassedWithCount": "연결 테스트를 통과했으나 {count}개의 경고가 발생했습니다. 오류: {first}", + "connectionTestPassed": "연결 테스트를 통과했습니다.", + "connectionOkMissingTables": "연결 상태는 정상이지만 {count}개의 필수 테이블이 누락되었습니다.", + "cannotTestMediaPathActiveRun": "작업이 진행 중인 동안에는 미디어 경로를 테스트할 수 없습니다.", + "mediaRootPathRequiredCover": "표지를 가져오려면 미디어 루트 경로가 반드시 지정되어야 합니다.", + "useAbsolutePath": "절대 경로를 사용하세요 (예시: /books).", + "mediaPathVerified": "미디어 경로가 확인되었습니다.", + "mediaPathValidReadable": "미디어 경로가 유효하며 읽기가 가능합니다.", + "mediaPathValidationFailed": "미디어 경로 유효성 검사에 실패했습니다.", + "connectionFailedBeforeMediaPath": "연결 테스트에 실패하여 미디어 경로 유효성 검사를 완료하지 못했습니다.", + "cannotModifySourceActiveRun": "작업이 진행 중인 동안에는 소스를 수정할 수 없습니다.", + "sourceSavedValidatedWarnings": "소스 저장 및 유효성 검사가 완료되었으나, {count}개의 경고가 발생했습니다.", + "sourceSavedValidated": "소스 저장 및 유효성 검사를 완료했습니다.", + "errorSaveValidateSource": "소스 저장 또는 유효성 검사에 실패했습니다.", + "cannotSaveMappingsActiveRun": ".", + "saveSourceFirst": "소스를 먼저 저장하세요.", + "mapAtLeastOneUser": "소스 사용자 1명 이상을 타겟 사용자에게 매핑하세요.", + "mapEveryUser": "저장하기 전에 모든 소스 사용자를 매핑하세요.", + "pathValidationFailedProfileSaved": "경로 유효성 검사에 실패했으나, 프로필은 저장됩니다.", + "mappingsSaved": "매핑이 저장되었습니다.", + "errorSaveMappings": "매핑 저장에 실패했습니다.", + "cannotRunDryRunActiveRun": "실행 중인 작업이 있는 동안에는 모의 테스트를 실행할 수 없습니다.", + "saveMappingsFirst": "매핑을 먼저 저장하세요.", + "dryRunCompleted": "모의 테스트 완료: {matched} 일치, {unresolved} 미해결", + "dryRunFailed": "모의 테스트에 실패했습니다.", + "selectSourceForAllGroups": "{count}개 중복 그룹에 대한 소스 도서를 선택하세요.", + "duplicatesResolved": "중복 항목이 해결되었습니다.", + "errorResolveDuplicates": "중복 제거에 실패했습니다.", + "preflightNotReady": "마이그레이션 사전 점검이 미완료 상태입니다.", + "runDryRunFirst": "먼저 모의 테스트를 실행하세요.", + "runStarted": "마이그레이션이 시작되었습니다.", + "errorStartMigration": "마이그레이션 시작에 실패했습니다.", + "runCancelled": "마이그레이션이 취소되었습니다.", + "errorCancelMigration": "마이그레이션 취소에 실패했습니다.", + "runRetried": "마이그레이션을 재시도합니다. (마지막 완료 단계부터 재개)", + "errorRetryMigration": "마이그레이션 재시도에 실패했습니다.", + "errorLoadRunProgress": "진행 상황 불러오기에 실패했습니다.", + "startMigrationFirst": "먼저 마이그레이션을 시작하세요.", + "reportRefreshed": "갱신된 보고서 실행", + "errorLoadReport": "실행 보고서 불러오기에 실패했습니다.", + "reportExported": "{format} 형식으로 보고서를 내보냈습니다.", + "errorExportReport": "마이그레이션 보고서 내보내기에 실패했습니다.", + "reasonNoTitleAuthorMatch": "제목이나 저자가 일치하는 책을 찾을 수 없음", + "reasonNoFilePathMatch": "파일 경로가 라이브러리 내의 어떤 책과도 일치하지 않음", + "reasonNoFileHashMatch": "파일 해시가 라이브러리 내의 어떤 책과도 일치하지 않음", + "reasonNoIsbnMatch": "ISBN이 라이브러리 내의 어떤 책과도 일치하지 않음", + "reasonNoAsinMatch": "ASIN이 라이브러리 내의 어떤 책과도 일치하지 않음", + "reasonInsufficientSourceData": "매칭을 시도하기 위한 메타데이터가 충분하지 않음", + "reasonAmbiguousIsbnMatch": "다수의 책이 동일한 ISBN을 가짐", + "reasonAmbiguousAsinMatch": "다수의 책이 동일한 ASIN을 가짐", + "reasonAmbiguousFileHashMatch": "다수의 책이 동일한 파일 해시를 가짐", + "reasonAmbiguousFilePathMatch": "다수의 책이 동일한 파일 경로를 가짐", + "reasonAmbiguousTitleAuthorMatch": "다수의 책이 같은 제목과 저자를 가짐", + "reasonUnknown": "원인을 파악할 수 없음", + "strategyIsbn": "ISBN 일치", + "strategyAsin": "ASIN 일치", + "strategyFileHash": "파일 해시 일치", + "strategyPathMapping": "매핑된 파일 경로 일치", + "strategyTitleAuthor": "제목 및 저자 일치", + "strategyUnavailable": "매칭 전략 없음", + "userPreviewCounts": "{statuses}개 상태, {progress}개 진행 항목, {bookmarks}개 북마크, {annotations}개 메모, {collections}개 컬렉션 항목", + "connErrorUnreachable": "데이터베이스 서버에 연결할 수 없습니다. 호스트와 포트를 확인해 주세요.", + "connErrorAuth": "인증에 실패했습니다. 사용자 이름과 비밀번호를 확인해 주세요.", + "connErrorUnknownDatabase": "데이터베이스를 찾을 수 없습니다. 데이터베이스 이름을 확인해 주세요.", + "connErrorTimeout": "연결 시간 초과입니다. 호스트 및 방화벽 설정을 확인하세요.", + "connErrorGeneric": "연결 테스트 실패", + "sourceType": "소스 유형", + "sourceName": "소스 이름", + "host": "호스트", + "port": "포트", + "user": "사용자", + "password": "비밀번호", + "passwordSavedPlaceholder": "저장됨 - 변경 없음", + "passwordEmptyPlaceholder": "비밀번호가 설정되지 않음", + "database": "데이터베이스", + "mediaRootPath": "미디어 루트 경로", + "pathOk": "경로 정상", + "pathIssue": "경로 문제", + "testPath": "테스트 경로", + "useTls": "TLS/SSL 사용", + "testConnection": "연결 테스트", + "saveAndValidate": "저장 및 유효성 검사", + "sourceValidatedWithWarnings": "소스 유효성 검사가 완료되었으나 일부 경고가 발생했습니다.", + "lastValidationSnapshot": "마지막 유효성 검사 스냅샷", + "sourceVersion": "소스 버전: {version}", + "unknown": "알 수 없음", + "missingRequiredTables": "필수 테이블 누락: {tables}", + "suggestionsAutoLoad": "소스 유효성 검사가 완료되면 사용자 제안이 자동으로 로드됩니다.", + "refresh": "새로고침", + "sourceUser": "소스 사용자", + "targetUser": "타겟 사용자", + "doNotImport": "이 사용자는 가져오지 않음", + "noSourceUsersLoaded": "로드된 소스 사용자가 없습니다.", + "noActiveTargetUsers": "활성 타겟 사용자를 찾을 수 없습니다. 매핑을 수행하기 전에 BookOrbit 사용자를 생성하거나 다시 활성화하세요.", + "pathPrefixMappings": "경로 접두사 매핑", + "addMapping": "매핑 추가", + "pathMappingsHelp1": "경로 매핑은 파일 위치를 기준으로 도서를 매칭할 수 있도록 원본 파일 경로를 대상 경로로 변환합니다. 예를 들어, 기존 Booklore 라이브러리가", + "pathMappingsHelp2": "아래에 파일을 저장했는데 동일한 파일이 현재", + "pathMappingsHelp3": "아래에 위치해 있다면, 여기에 해당 매핑을 추가하세요. 도서는 경로 매핑과 관계없이 ISBN, 파일 해시, 제목/저자를 통해서도 매칭됩니다. 경로 매핑은 4가지 매칭 전략 중 하나일 뿐이며, 마이그레이션에 포함되는 원본 도서를 제한하지 않습니다.", + "noPrefixesFound": "접두사 없음 - 소스 유효성 검사를 먼저 진행하세요", + "selectSourcePrefix": "소스 접두사 선택...", + "selectTargetFolder": "타겟 폴더 선택...", + "remove": "삭제", + "pathValidation": "경로 유효성 검사", + "pathValidationMapped": "총 {total}권의 원본 도서 중 {mapped}권이 매핑 경로를 가지고 있음", + "pathValidationUnmatched": "{count}개의 매핑 경로가 디스크에서 발견되지 않음 - 해당 도서들은 ISBN / 제목 매칭으로 대체됨", + "pathValidationAllMatched": "총 {count}개의 매핑 경로가 디스크에서 발견됨", + "saveMappings": "매핑 저장", + "runDryRun": "모의 테스트 실행", + "matched": "일치 항목:", + "unresolved": "미해결 항목:", + "duplicateMatches": "중복 항목:", + "unresolvedSummary": "미해결 항목 요약", + "resolveDuplicateMatches": "중복 타겟 매칭 해결", + "resolveDuplicateHint": "각 타겟 도서별로 보존할 소스 도서 하나를 선택하세요. 가장 유력한 매칭이 하나일 경우, 추천 선택지는 미리 선택되어 있습니다.", + "remainingGroups": "남은 그룹:", + "ofCount": "(전체 {count}개)", + "targetBookNum": "타겟 도서 #{id}", + "recommended": "추천", + "resolveDuplicatesButton": "{count, plural, =0 {#개 중복 해결} one {#개 중복 해결} other {#개 중복 해결}}", + "preflightChecks": "사전 점검", + "allChecksPassed": "모든 점검 통과 - 마이그레이션 준비 완료", + "checkSourceValidated": "소스 유효성 검사 완료", + "checkSaveValidateSource": "소스 연결 저장 및 유효성 검사", + "checkValidateSource": "소스 연결 검증", + "checkMappingsSaved": "매핑 저장 완료", + "checkSaveMappings": "사용자 및 경로 매핑 저장", + "checkPathMappingsValidated": "경로 매핑 유효성 검사 완료", + "checkSavePathMappings": "유효성 검사를 위해 경로 매핑 저장", + "checkDryRunUpToDate": "모의 테스트가 최신 상태인지 확인", + "checkFreshDryRun": "새로운 모의 테스트 진행", + "startConfirmPrompt": "이 작업은 실제 마이그레이션을 시작합니다. 정말 진행하시겠습니까?", + "confirmStart": "실행 확인", + "startMigration": "마이그레이션 시작", + "cancelRun": "실행 취소", + "refreshStatus": "상태 새로고침", + "statusPollingStopped": "상태 폴링이 오류로 인해 중지되었습니다.", + "retry": "재시도", + "stageLabel": "단계: {stage}", + "stageInitializing": "초기화 중", + "endedLabel": "{date}에 종료됨", + "stageCompleted": "완료됨", + "stageInit": "초기화 중", + "stageSharedOverlays": "메타데이터 가져오는 중", + "stageBookCovers": "표지 데이터 가져오는 중", + "stageUserState": "사용자 데이터 가져오는 중", + "noRunYet": "아직 마이그레이션이 실행되지 않았습니다. 시작하려면 위의 단계를 완료해 주세요.", + "runNum": "#{id} 실행", + "notStarted": "시작되지 않음", + "reloadReport": "보고서 다시 불러오기", + "loadFullReport": "전체 보고서 불러오기", + "exportJson": "JSON 내보내기", + "exportCsv": "CSV 내보내기", + "migrationFailed": "마이그레이션 실패", + "retryFromLastStage": "마지막 완료 단계부터 재시도", + "booksCard": "책", + "metadataOverlaysApplied": "메타데이터 오버레이 적용됨", + "authorMappingsReplaced": "저자 매핑이 교체됨", + "narratorMappingsReplaced": "내레이터 매핑이 교체됨", + "genreMappingsReplaced": "장르 매핑이 교체됨", + "tagMappingsReplaced": "태그 매핑이 교체됨", + "coversImported": "표지 데이터가 이관됨", + "coverImportSkipped": "표지 데이터 이관이 취소됨 - 소스 미디어 루트 경로가 설정되어 있지 않음", + "couldNotMatch": "매칭을 진행할 수 없음", + "userDataCard": "사용자 데이터", + "readingStatuses": "독서 상태", + "readingProgressEntries": "독서 진행도 기록", + "audiobookProgressEntries": "오디오북 진행도 기록", + "bookmarksLabel": "책갈피", + "annotationsLabel": "필기", + "collectionEntries": "컬렉션 항목", + "loadFullReportHint": "\"전체 보고서 불러오기\"를 클릭하여 보고서를 내보낼 때 모의 테스트 매칭 요약을 포함할 수 있습니다.", + "completedNoIssues": "미해결된 책이나 오류 없이 마이그레이션이 완료되었습니다.", + "matchedBooksHeading": "매칭된 책 ({count})", + "matchedBooksHint": "이 모의 테스트 매칭들은 어떤 라이브러리 도서들에 외부 데이터를 적용할지 결정하는 데 사용되었습니다.", + "sourceBookFallback": "소스 도서 {id}", + "libraryBookFallback": "라이브러리 도서 {id}", + "unresolvedBooksHeading": "미해결된 도서 ({count})", + "unresolvedBooksHint": "이 책들은 소스에는 존재하지만, 사용자의 라이브러리에 있는 어떤 책과도 일치하는 항목을 찾을 수 없었습니다.", + "mappedUsersHeading": "매핑된 사용자 ({count})", + "mappedUsersHint": "사용자별 총계는 마이그레이션 계획과 함께 캐시된 모의 테스트 미리보기에서 가져옵니다.", + "coverImportsFailed": "{count}개의 표지를 가져오지 못했습니다. 상세 실패 내역은 저장되지 않습니다.", + "backToSetup": "설정으로 돌아가기" + }, + "libraries": { + "title": "라이브러리", + "subtitle": "미디어 라이브러리를 관리하고 콘텐츠 스캔을 실행하세요.", + "scanAll": "전체 스캔", + "scanning": "스캔 중...", + "addLibrary": "라이브러리 추가", + "scan": "스캔", + "editLibrary": "라이브러리 편집", + "refreshCovers": "표지 새로고침", + "syncMetadataToFiles": "메타데이터를 파일에 동기화", + "deleteLibrary": "라이브러리 삭제", + "bookCount": "{count, plural, =0 {책 없음} one {책 #권} other {책 #권}}", + "booksUnit": "{count, plural, one {권} other {권}}", + "folderCount": "{count, plural, =0 {폴더 없음} one {폴더 #개} other {폴더 #개}}", + "fileMode": "파일 모드", + "folderMode": "폴더 모드", + "emptyTitle": "아직 라이브러리가 없습니다", + "emptyHint": "책 정리를 시작하려면 라이브러리를 추가하세요.", + "addFirstLibrary": "첫 번째 라이브러리를 추가하세요", + "deleteConfirmTitle": "\"{name}\"을(를) 삭제하시겠습니까?", + "deleteConfirmBody": "이 라이브러리에 있는 모든 도서, 메타데이터, 독서 진행도, 북마크, 필기를 영구적으로 삭제합니다. 이 작업은 되돌릴 수 없습니다.", + "deleteConfirmTypeName": "계속하려면 라이브러리 이름을 입력하세요:", + "deleting": "삭제 중...", + "deleteLibraryButton": "라이브러리 삭제", + "syncConfirmTitle": "메타데이터를 파일에 동기화하시겠습니까?", + "syncFiles": "파일 동기화", + "metadataSynced": "\"{name}\" 라이브러리 내 파일들에 메타데이터가 동기화되었습니다.", + "fileWriteNotEnabled": "이 라이브러리에서는 메타데이터 파일 쓰기가 활성화되어 있지 않습니다. 라이브러리 설정에서 활성화해 주세요.", + "fileSyncFailed": "\"{name}\" 라이브러리 내 파일들을 대상으로 메타데이터 동기화에 실패했습니다.", + "scanStarted": "\"{name}\" 라이브러리의 스캔이 시작되었습니다.", + "scanStartFailed": "\"{name}\" 라이브러리의 스캔을 시작하는 데 실패했습니다.", + "refreshCoversFailed": "\"{name}\" 라이브러리의 표지를 새로고침하는 데 실패했습니다.", + "scanStartedAll": "모든 라이브러리를 대상으로 스캔이 시작되었습니다.", + "librariesFailedToStart": "{count, plural, =0 {스캔 시작 실패 라이브러리 없음} one {#개 라이브러리 스캔 시작 실패} other {#개 라이브러리 스캔 시작 실패}}", + "scansStartFailed": "스캔 작업 시작에 실패했습니다.", + "libraryCreated": "\"{name}\" 라이브러리가 생성됐습니다.", + "libraryUpdated": "\"{name}\" 라이브러리가 업데이트됐습니다.", + "libraryDeleted": "\"{name}\"이(가) 삭제되었습니다.", + "deleteFailed": "라이브러리 삭제에 실패했습니다.", + "refreshingCovers": "{pct}% 표지 새로고침됨 ({processed}/{total})", + "coversRefreshed": "표지가 새로고침되었습니다 ({count}개 항목 처리)", + "onDiskUnit": "디스크 점유량 {size}", + "noFilesIndexed": "인덱싱된 파일 없음", + "formatEntry": "{format} {count}", + "formatOverflow": "{count, plural, one {+#개 포맷} other {+#개 포맷}}", + "extraFolders": "{count, plural, one {+#개 폴더} other {+#개 폴더}}", + "openLibrary": "{name} 열기", + "moreActions": "{name}에 대한 추가 작업", + "statsFailed": "라이브러리 카운트를 로드할 수 없습니다. 이 페이지의 다른 모든 기능은 여전히 정상적으로 작동합니다.", + "filterLabel": "라이브러리 필터", + "filterPlaceholder": "이름 또는 경로로 필터링", + "filterClear": "필터 지우기", + "sortLabel": "정렬", + "noMatchesTitle": "해당 필터에 맞는 라이브러리가 없음", + "noMatchesHint": "\"{query}\"에 일치하는 이름 또는 폴더 경로가 없습니다.", + "totalLibraries": "{count, plural, one {라이브러리 #개} other {라이브러리 #개}}", + "neverScanned": "스캔 이력 없음", + "neverScannedHint": "스캔을 실행하여 폴더를 인덱싱하세요", + "scanFailedAt": "실패 {time}", + "scanningPercent": "스캔 중 {pct}%", + "scanCounting": "파일 카운팅 중", + "scanCounts": "{processed} / {total}", + "scanAdded": "{count, plural, one {+#개 추가됨} other {+#개 추가됨}}", + "scanUpdated": "{count, plural, one {#개 업데이트됨} other {#개 업데이트됨}}", + "scanMissing": "{count, plural, one {#개 누락됨} other {#개 누락됨}}", + "scanNoChange": "변경 없음", + "outcomeSeparator": ", ", + "scanOutcome": "{trigger} - {outcome}", + "syncConfirmBody": "이 작업은 {name} 내의 모든 지원 대상 파일의 내부 메타데이터를 덮어씁니다. 이 작업은 되돌릴 수 없습니다.", + "columns": { + "library": "라이브러리", + "contents": "내용", + "onDisk": "디스크 점유량", + "automation": "자동화", + "lastScan": "마지막 스캔", + "actions": "작업" + }, + "sort": { + "default": "기본 순서", + "name": "이름순", + "books": "책 권수순", + "size": "디스크 점유량순", + "lastScan": "최근 스캔순" + }, + "trigger": { + "manual": "수동", + "watcher": "감시", + "schedule": "일정" + }, + "capability": { + "watch": "폴더 감시", + "schedule": "주기적 스캔", + "fileWrite": "파일에 쓰기", + "fileRename": "파일 이름 바꾸기", + "on": "{name}: on", + "off": "{name}: off", + "legendHint": "점선은 꺼짐을 의미합니다" + }, + "stateOn": "켜짐", + "stateOff": "꺼짐", + "toggleDetail": "{name} 상세 정보 보기", + "durationMs": "{ms}ms", + "durationSeconds": "{seconds}초", + "durationMinutes": "{minutes}분 {seconds}초", + "history": { + "when": "일시", + "trigger": "트리거", + "duration": "기간", + "result": "결과", + "status": "상태", + "statusValue": { + "running": "실행 중", + "completed": "완료", + "failed": "실패" + } + }, + "detail": { + "foldersTitle": "폴더 및 레이아웃", + "metadataTitle": "메타데이터 및 읽기", + "accessTitle": "접근", + "historyTitle": "스캔 히스토리", + "path": "경로 {index}개", + "organization": "구성", + "excludePatterns": "제외 패턴", + "precedence": "소스 우선순위", + "allowedFormats": "허용 포맷", + "countsAsStarted": "독서 시작 임계값", + "countsAsFinished": "독서 완료 임계값", + "peopleWithAccess": "접근 권한을 가진 사용자", + "added": "추가됨", + "coverShape": "표지 모양", + "coverShapeValue": { + "portrait": "2:3 장방형", + "square": "1:1 정방형" + }, + "none": "없음", + "allSupported": "모두 지원됨", + "patternCount": "{count, plural, one {#개 패턴} other {#개 패턴}}", + "peopleCount": "{count, plural, =0 {명시적 할당 없음} one {#명} other {#명}}", + "historyEmpty": "이 라이브러리는 스캔된 적이 없습니다.", + "historyFailed": "이 라이브러리의 스캔 히스토리를 로드할 수 없습니다." + }, + "scannedAt": "{time}에 스캔됨", + "detailRegion": "{name}의 상세 정보" + }, + "authorEnrichment": { + "configuration": "설정", + "saving": "저장 중...", + "running": "처리 중...", + "runEligibleShort": "자동 탐색 및 실행", + "runAllShort": "모두 실행", + "enableTitle": "저자 정보 자동 보강 활성화", + "enableHint": "책이 추가되거나 업데이트되면 저자 약력 및 프로필 사진을 자동으로 불러오기", + "triggerOnImportTitle": "가져오기 시 트리거", + "triggerOnImportHint": "책이 라이브러리에 처음 추가될 때 해당 책의 저자를 정보 보강 대기열에 추가", + "eligibilityTitle": "자동 탐색 조건", + "eligibilityHint": "저자가 활성화된 조건 중 어느 하나라도 부합하면 자동 탐색됨", + "neverEnrichedTitle": "보강 이력이 없을 시", + "neverEnrichedHint": "해당 저자에게 한 번도 보강 작업이 이뤄지지 않았을 경우 보강", + "missingBioTitle": "약력 누락 시", + "missingBioHint": "저자 약력이 없는 경우 보강", + "missingPhotoTitle": "사진 누락 시", + "missingPhotoHint": "저자 프로필 사진이 없을 경우 보강", + "runForEligibleAuthors": "자동 탐색 및 실행", + "eligibleCount": "~{count}명", + "runForAllAuthors": "전체 저자를 대상으로 실행", + "saved": "저자 정보 보강 설정이 저장되었습니다.", + "saveFailed": "저자 정보 보강 설정 저장에 실패했습니다.", + "noEligibleAuthors": "자동 탐색된 저자가 없습니다.", + "noAuthorsToEnrich": "정보를 보강할 저자가 없습니다.", + "queueFailed": "저자 정보 보강 작업을 큐에 등록하지 못했습니다.", + "fields": { + "description": "약력", + "photo": "사진", + "birthDate": "출생", + "deathDate": "사망", + "website": "웹사이트", + "genres": "장르", + "influences": "영향" + }, + "metadataPreferences": { + "title": "필드 소스", + "hint": "각 필드를 채울 데이터를 공급받을 순서를 설정합니다. 데이터가 있는 첫 번째 제공자의 정보가 우선됩니다.", + "noProviders": "사용 가능한 제공자가 없습니다", + "saved": "필드 소스가 저장되었습니다.", + "saveFailed": "필드 소스를 저장할 수 없었습니다.", + "limitedProviders": "{providers}은(는) 약력과 사진만 제공합니다.", + "addProvider": "{provider}을(를) 소스로 추가" + } + }, + "scoreWeights": { + "groupLabel": "점수 가중치", + "assignHintPrefix": "각 필드에 가중치를 부여하세요. 총 가중치:", + "areYouSure": "정말 진행하시겠습니까?", + "resetToDefaultsButton": "기본값으로 초기화", + "recalculateAll": "전체 재계산", + "confirmReset": "초기화 확인", + "resetDialog": { + "title": "모든 가중치를 기본값으로 초기화하시겠습니까?", + "description": "24개의 필드 전체가 BookOrbit이 기본으로 제공하는 가중치 값으로 돌아갑니다. 저장 또는 재계산 전까지는 저장되지 않습니다." + }, + "reset": "재설정", + "recalculate": "재계산", + "subtotal": "합계: {count}", + "savedRecalculating": "점수 가중치가 저장되었습니다. 라이브러리 점수를 재계산하는 중입니다...", + "saveFailed": "점수 가중치 저장에 실패했습니다.", + "recalcStarted": "점수 재계산 작업이 백그라운드에서 시작되었습니다.", + "recalcFailed": "재계산에 실패했습니다.", + "resetToDefaults": "가중치가 기본값으로 초기화됩니다. 적용하려면 저장하세요.", + "howItWorks": { + "title": "어떻게 동작하나요?", + "summary": "모든 책은 메타데이터의 완성도에 따라 100점 만점으로 계산된 점수를 받습니다. 가중치는 다른 값들과 상대적일 때에만 의미가 있으므로, 아래의 각 필드는 자신이 차지하는 최종 점수에서의 비중을 보여줍니다. 모든 가중치를 두 배로 늘린다면 아무 변화도 일어나지 않습니다." + }, + "readOnly": "점수가 어떻게 계산되는지는 확인할 수 있지만, 가중치를 변경하려면 앱 설정 권한이 필요합니다.", + "compositionTitle": "점수 계산 방식", + "compositionHint": "백분율의 합계는 항상 100이 됩니다.", + "searchFields": "필드 필터", + "clearSearch": "검색 초기화", + "noMatches": "해당 검색어와 일치하는 필드가 없습니다.", + "totalSummary": "필드 {scoring}개 / 24개가 점수에 반영됨, 총 {total}포인트", + "countGroups": "점수 계산에 포함됨", + "notScored": "점수 미포함", + "notScoredHeading": "점수 미포함 ({count})", + "notScoredHint": "값이 0인 필드라도 총계에 반영되므로, 해당 필드가 누락되더라도 감점 처리되지 않습니다.", + "decreaseWeight": "{field} 가중치 감소", + "increaseWeight": "{field} 가중치 증가", + "revertField": "{field}을(를) 저장된 가중치로 복원", + "table": { + "field": "필드", + "weight": "가중치", + "share": "점수 비율", + "versusDefault": "변경" + }, + "groups": { + "core": "핵심", + "publishing": "출판", + "classification": "분류", + "enrichment": "정보 보강", + "providers": "제공자 ID" + }, + "rules": { + "text": "값이 비어있지 않을 때 카운트됨", + "positive": "값이 0보다 클 때 카운트됨", + "count": "최소 한 개 이상의 값이 설정되었을 때 카운트됨", + "cover": "표지 이미지가 저장되었을 때 카운트됨", + "providerId": "ID가 저장되었을 때 카운트됨", + "seriesIndex": "0보다 클 때 카운트됨" + }, + "rail": { + "title": "책이 배치되는 곳", + "description": "독자가 책 카드에서 볼 수 있는 배지 색상입니다.", + "bandsLabel": "배지 색상 범위", + "bands": { + "poor": "50 미만", + "fair": "50~69", + "good": "70~89", + "great": "90 이상" + }, + "median": "중앙값", + "belowFifty": "50 미만", + "ninetyPlus": "90 이상", + "noBooks": "아직 점수가 산정된 책이 없습니다. 라이브러리 가져오기가 완료되면 점수 재계산을 진행해 주세요.", + "scopeNote": "접근 가능한 라이브러리 내의 책 {count, plural, one {#권} other {#권}}에 대해, 현재 저장된 가중치로 점수가 매겨집니다." + }, + "progress": { + "running": "라이브러리 점수 재계산 중", + "failed": "점수 재계산 실패", + "count": "책 {processed}권 처리됨", + "countOf": "책 {total}권 중 {processed}권 처리됨", + "failedCount": "({count}권 실패)", + "safeToLeave": "이 페이지를 나가도 안전합니다.", + "dismiss": "닫기" + }, + "save": { + "upToDate": "모든 변경사항이 저장되었습니다.", + "unsaved": "{count, plural, one {#개 필드 변경됨} other {#개 필드 변경됨}}", + "totalShift": "총 {from}점에서 {to}점으로 변동됨", + "rescores": "책 {count, plural, one {#권} other {#권}}에 대한 점수 재계산을 백그라운드에서 진행하는 중입니다.", + "rescoresUnknown": "라이브러리 점수 재계산을 백그라운드에서 진행하는 중입니다.", + "action": "저장 및 점수 재계산", + "discard": "취소", + "leaveWarning": "저장되지 않은 가중치 변경 내용이 있습니다. 페이지를 닫으면 내용을 잃어버립니다. 계속하시겠습니까?" + } + }, + "tabs": { + "users": "사용자", + "account-activity": "계정 활동", + "magic-links": "매직 링크", + "oidc": "OIDC / SSO", + "server-fonts": "서버 폰트" + }, + "serverFonts": { + "title": "서버 폰트", + "subtitle": "사용자가 일일이 자체적으로 업로드할 필요 없이, 모든 사용자가 전자책 리더에서 사용할 수 있는 폰트를 업로드합니다.", + "listLabel": "서버 폰트", + "noFontsYet": "아직 서버 폰트가 없습니다", + "noFontsHint": "이곳에 추가하는 폰트는 모든 사용자의 리더에서 표시됩니다." + } + }, + "common": { + "nav": { + "libraries": "라이브러리", + "display": "디스플레이", + "reader": "리더", + "metadata": "메타데이터", + "email": "이메일", + "opds": "OPDS", + "kobo": "Kobo", + "koreader": "KOReader", + "integrations": "통합", + "hardcover": "Hardcover", + "admin": "관리자", + "system": "시스템", + "account": "계정" + } + }, + "integrations": { + "title": "통합", + "subtitle": "외부 서비스와 연결하여 독서 데이터 및 하이라이트를 동기화하세요.", + "noPermission": "외부 통합 기능을 사용할 권한이 없습니다.", + "tabs": { + "hardcover": "Hardcover", + "readwise": "Readwise", + "storygraph": "StoryGraph" + }, + "providerSubtitles": { + "readwise": "하이라이트를 Readwise에 자동으로 전송하세요.", + "storygraph": "독서 진행도 및 상태를 StoryGraph와 동기화하세요." + } + }, + "metadata": { + "title": "메타데이터", + "subtitle": "메타데이터 제공자, 매칭 규칙, 자동화 및 저자 정보 보강을 설정합니다.", + "noPermission": "현재 사용자에게는 메타데이터 설정을 관리할 권한이 없습니다.", + "fields": { + "title": "제목", + "subtitle": "부제목", + "description": "설명", + "cover": "표지", + "authors": "저자", + "publisher": "출판사", + "publishedYear": "출판 연도", + "language": "언어", + "pageCount": "페이지 수", + "communityRating": "커뮤니티 평점", + "seriesName": "시리즈 이름", + "seriesIndex": "시리즈 번호", + "genres": "장르", + "narrators": "내레이터", + "duration": "길이", + "abridged": "축약 여부", + "tags": "태그", + "isbn13": "ISBN-13", + "isbn10": "ISBN-10", + "googleBooksId": "구글 북스 ID", + "goodreadsId": "Goodreads ID", + "amazonId": "Amazon ID", + "hardcoverId": "Hardcover ID", + "openLibraryId": "Open Library ID", + "itunesId": "iTunes ID", + "koboId": "Kobo ID", + "aladinId": "알라딘 ID" + }, + "mergeStrategy": { + "fillMissing": { + "label": "빈 값 채우기", + "description": "필드가 비어 있을 때만 작성합니다.", + "short": "비었을 때" + }, + "mergeExisting": { + "label": "기존 항목과 병합", + "description": "저장된 장르를 유지하고 신규 공급자 장르를 추가합니다", + "short": "병합" + }, + "overwriteIfProvided": { + "label": "제공 시 덮어쓰기", + "description": "제공자가 값을 반환했을 경우에만 덮어씁니다.", + "short": "값 반환 시" + }, + "overwrite": { + "label": "항상 덮어쓰기", + "description": "항상 기존 값을 덮어씁니다.", + "short": "항상" + } + }, + "autoFetch": { + "globalSettings": "전역 설정", + "perLibraryOverrides": "라이브러리별 재정의", + "saving": "저장 중...", + "running": "처리 중...", + "runNow": "즉시 실행", + "runForEligible": "자동 탐색 및 실행", + "enable": { + "label": "자동 가져오기 활성화", + "hint": "탐색 조건과 일치하는 도서의 메타데이터를 자동으로 가져오기" + }, + "triggerOnImport": { + "label": "가져오기 시 트리거", + "hint": "책이 라이브러리에 처음 추가될 때 조건이 일치한다면 해당 책을 대기열에 추가" + }, + "status": { + "inQueuePaused": "{count}개 항목 대기 중 - 일시 정지됨", + "remaining": "{count}개 남음", + "eligible": "~{count}권" + }, + "trigger": { + "queued": "{count, plural, one {책 #권 대기 중} other {책 #권 대기 중}}", + "noneFound": "조건에 맞는 책이 없습니다." + }, + "lastRun": { + "justNow": "방금", + "minutesAgo": "{count}분 전", + "hoursAgo": "{count}시간 전", + "yesterday": "어제", + "daysAgo": "{count, plural, one {#일 전} other {#일 전}}", + "label": "마지막 실행: {when}", + "labelQueued": "마지막 실행: {when} - 책 {count}권 책 대기 중", + "labelNoneEligible": "마지막 실행: {when} - 자동 탐색된 도서 없음" + }, + "conditions": { + "title": "자동 탐색 조건", + "hint": "책이 활성화된 조건 중 어느 하나라도 부합하면 자동 탐색됨", + "noneEnabled": "활성화된 조건 없음", + "neverFetched": { + "label": "조회 이력이 없을 시", + "hint": "메타데이터 조회 시도가 없었던 책들을 가져오기", + "summary": "조회 이력이 없을 시" + }, + "scoreThreshold": { + "label": "메타데이터 점수가 낮을 시", + "hint": "메타데이터 점수가 임계값보다 낮은 경우에 가져오기", + "scoreBelow": "점수 미만", + "summary": "점수 < {threshold}" + }, + "missingFields": { + "label": "필드 누락 시", + "hint": "선택된 필드 중 어느 하나라도 비어 있다면 가져오기", + "summary": "{count, plural, one {#개 필드 누락 시} other {#개 필드 누락 시}}" + } + }, + "library": { + "inheritingGlobal": "전역 기본값을 상속받음", + "inheritFromGlobal": "전역 기본값 상속", + "usingGlobalDefaults": "전역 기본값을 사용합니다.", + "saveOverride": "재정의 값 저장" + } + }, + "providers": { + "availableSources": "이용 가능한 제공자", + "saveChanges": "변경 사항 저장", + "discard": "닫기", + "configure": "설정", + "test": "테스트", + "testing": "테스트 중...", + "testHint": "라이브 서비스를 대상으로 이 자격 증명들을 확인합니다. 설정 값이 저장되지는 않습니다.", + "enabled": "활성화됨", + "retryIn": "{duration} 후에 다시 시도하세요.", + "runTestBeforeEnabling": "활성화하기 전에 테스트를 실행하세요.", + "hardcoverEnableHint": "현재 토큰으로 테스트를 실행하여 활성화 스위치의 잠금을 해제하세요.", + "searchPlaceholder": "소스 필터", + "sourcesEnabled": "총 {total}개 소스 중 {enabled}개 활성화됨", + "groupEnabled": "총 {total}개 그룹 중 {enabled}개 활성화됨", + "unsavedChanges": "{count, plural, one {저장되지 않은 변경사항 #개} other {저장되지 않은 변경사항 #개}}", + "noMatches": "해당 필터와 일치하는 소스가 없습니다.", + "clearFilters": "필터 초기화", + "filter": { + "label": "상태별 소스 필터링", + "all": "전체", + "enabled": "활성화됨", + "needsSetup": "설정 필요" + }, + "groups": { + "books": "일반 도서 카탈로그", + "audiobooks": "오디오북", + "comics": "만화 및 라이트 노벨", + "regional": "국가별 카탈로그" + }, + "badge": { + "setupRequired": "설정 필요", + "throttled": "사용량 제한됨", + "ready": "준비됨", + "active": "활성화됨" + }, + "fields": { + "apiKey": "API 키", + "region": "지역", + "cookie": "쿠키", + "coverResolution": "표지 해상도", + "country": "국가", + "language": "언어", + "ttbKey": "TTB 키" + }, + "helpers": { + "googleApiKey": "구글 클라우드에서 발급한 구글 북스 API 키" + }, + "hints": { + "google": "구글의 도서 색인을 통해 광범위한 커버리지를 제공합니다. 이제 구글 북스 제공자를 활성화하려면 API 키가 필요합니다.", + "amazon": "세션 쿠키 사용을 권장합니다. 쿠키 값만 붙여넣어 주세요. (\"Cookie:\" 접두사 제외)", + "goodreads": "영미권 최대 규모의 독서 커뮤니티. 추가 설정은 필요하지 않습니다.", + "hardcover": "Goodreads의 현대적인 대안입니다. hardcover.app/account/api에서 토큰을 받으세요. \"Bearer\" 접두사는 선택 사항입니다.", + "openLibrary": "인터넷 아카이브가 제공하는 무료 도서 카탈로그. 추가 설정은 필요하지 않습니다.", + "itunes": "애플의 디지털 도서 카탈로그. 표지를 고해상도로 가져올지 표준 해상도로 가져올지 선택하세요.", + "kobo": "Kobo의 공개 도서 페이지를 스크랩합니다. 국가 및 언어는 Kobo URL 경로와 일치해야 하며, 봇 방지 기능으로 인해 요청이 차단될 수 있습니다.", + "audible": "Audible에서 오디오북 메타데이터를 가져옵니다. 추가 설정은 필요하지 않습니다.", + "audnexus": "커뮤니티 기반 오디오북 메타데이터. 추가 설정은 필요하지 않습니다.", + "librofm": "DRM-free 오디오북 카탈로그 메타데이터. 정식 문서화되지 않은 Libro.fm 엔드포인트를 사용하며, 기본적으로 비활성화되어 있습니다.", + "comicvine": "ComicVine에서 제공되는 만화책 메타데이터. comicvine.gamespot.com에서 발급한 무료 API 키가 필요합니다.", + "ranobedb": "RanobeDB에서 제공하는 일본 라이트 노벨 메타데이터. 추가 설정은 필요하지 않습니다.", + "lubimyczytac": "폴란드 도서 카탈로그(lubimyczytac.pl). 공개 도서 페이지를 스크래핑합니다. 추가 설정은 필요하지 않습니다.", + "aladin": "알라딘에서 제공하는 한국 도서 메타데이터. aladin.co.kr에서 발급한 TTB 키가 필요합니다." + }, + "blocked": { + "google": "Google Books 제공자를 활성화하려면 API 키가 필요합니다.", + "hardcover": "Hardcover 제공자를 활성화하려면 API 키가 필요합니다.", + "hardcoverTest": "Hardcover 토큰은 활성화 전에 테스트를 통과해야 합니다.", + "comicvine": "ComicVine 제공자를 활성화하려면 API 키가 필요합니다.", + "aladin": "Aladin 제공자를 활성화하려면 TTB Key가 필요합니다." + } + }, + "fieldRules": { + "clearAllProviders": "모든 제공자 지우기", + "clearAll": "모두 지우기", + "resetToDefault": "기본값으로 재설정", + "reset": "재설정", + "dragProvidersHint": "이곳에서 제공자를 드래그하여 필드에 추가할 수 있습니다", + "dragProviderHere": "이곳에 제공자를 드래그하세요", + "howItWorks": { + "title": "필드 규칙 작동 방식", + "priorityOrder": { + "title": "우선순위", + "body": "각 제공자를 드래그해서 우선순위를 조정하세요. 가장 상위에 위치한 제공자가 해당 필드의 주 제공자가 됩니다." + }, + "mergeStrategy": { + "title": "병합 전략", + "fillMissingTerm": "빈 값 채우기:", + "fillMissingBody": "현재 값이 비어 있는 경우에만 작성합니다.", + "overwriteTerm": "덮어쓰기:", + "overwriteBody": "제공자가 데이터를 반환할 때만 덮어씁니다." + }, + "summary": "데이터 제공 요청은 위에서 아래로 순차적으로 시도되며, 데이터를 반환한 첫 번째 제공자의 값이 적용됩니다. 병합 전략은 외부에서 가져온 값으로 기존 값을 대체할 지에 대한 여부를 결정합니다. 여기에서 기본값을 설정한 다음, 라이브러리별로 개별 필드를 재정의하세요." + }, + "libraryOverrides": { + "title": "라이브러리 재정의", + "hint": "개별 필드를 사용자 정의하려면 라이브러리를 펼치세요. 재정의되지 않은 필드는 전역 기본값을 상속받습니다." + }, + "global": { + "title": "전역 기본값", + "hint": "기본 규칙은 모든 라이브러리에 적용됩니다. 라이브러리별 재정의는 아래에서 설정하세요.", + "saveDefaults": "기본값 저장", + "clearAllConfirm": "모든 필드에서 모든 활성 제공자를 제거하시겠습니까? 이 작업은 즉시 저장되며 되돌릴 수 없습니다.", + "resetConfirm": "모든 전역 필드 규칙을 시스템 기본값으로 재설정하시겠습니까? 이 작업은 현재 설정을 덮어씁니다." + }, + "advanced": { + "title": "고급 가져오기 동작", + "combineGenres": { + "label": "모든 제공자로부터 얻은 장르를 병합", + "hint": "장르 필드에 할당된 모든 제공자로부터 장르 정보를 수집하고 중복을 제거합니다. 첫 번째 제공자에서 멈추지 않고 이후 제공자까지 모두 조회합니다." + }, + "maxGenres": { + "label": "도서당 최대 장르 수", + "hint": "작품 제외 및 중복 항목 제거 후에 적용됩니다. 무제한으로 설정하려면 빈 값으로 두세요. 이는 향후 메타데이터 가져오기에 영향을 미칩니다.", + "unlimited": "무제한", + "error": "1에서 {max} 사이의 정수를 입력하거나, 필드를 비워두세요." + }, + "storeProviderIds": { + "label": "도서별 제공자 ID 저장", + "hint": "메타데이터를 가져올 때, 추후 더 정확한 조회를 위해 반환된 제공자 ID(ISBN, ASIN, Goodreads ID 등)를 도서 기록에 저장합니다." + } + }, + "library": { + "primary": "주요 포맷:", + "overrideCount": "{count, plural, one {#개 필드 재정의} other {#개 필드 재정의}}", + "unsavedSuffix": "저장되지 않음", + "unsavedChanges": "저장되지 않은 변경 사항", + "globalDefaults": "전역 기본값", + "overriding": "재정의된 항목: {fields}", + "inheritingAll": "모든 글로벌 메타데이터 규칙이 상속됨", + "subHint": "재정의되지 않은 필드는 전역 기본값을 상속받습니다.", + "resetTooltip": "모든 재정의 값을 제거하고 전역 기본값을 상속받기", + "clearAllConfirm": "\"{library}\"의 모든 필드에서 모든 활성 제공자를 제거하시겠습니까?", + "resetConfirm": "\"{library}\"(을)를 전역 기본값으로 초기화하시겠습니까? 모든 라이브러리 재정의 설정이 제거됩니다." + }, + "groups": { + "core": "주요", + "contributors": "기여자", + "publication": "출판 정보", + "series": "시리즈", + "classification": "분류", + "audiobook": "오디오북" + }, + "groupSummary": { + "base": "{fields}개 필드 · {enabled}개 활성화됨", + "withOverrides": "{base} · {overrides}개 재정의됨", + "enabledOf": "총 {fields}개 항목 중 {enabled}개가 활성화됨" + }, + "table": { + "field": "필드", + "activeProviders": "활성 제공자 (우선순위순 정렬)", + "mergeStrategy": "병합 전략", + "status": "상태", + "noMatches": "해당 필터와 일치하는 필드가 없습니다." + }, + "field": { + "noProviders": "활성화되었으나 제공자가 존재하지 않습니다.", + "empty": "빈 값", + "config": "설정", + "custom": "커스텀", + "default": "기본값", + "resetToDefault": "기본값으로 초기화", + "toggle": "메타데이터 갱신 중 {field} 가져오기", + "configure": "{field} 설정하기", + "add": "추가", + "addHint": "새 항목이 맨 끝에 추가되었습니다. 칩을 드래그하여 위치를 앞쪽으로 옮길 수 있습니다.", + "addProviderTo": "{field}에 프로바이더 추가", + "removeProvider": "{provider} 제거", + "noProvidersYet": "아직 제공자가 없습니다", + "skippedCount": "{count, plural, one {#개 항목 건너뜀} other {#개 항목 건너뜀}}", + "unsaved": "저장되지 않음", + "override": "재정의됨", + "inherited": "상속됨", + "morePreview": "+{count}개 항목" + }, + "reservoir": { + "disabled": "{provider} - 비활성화됨", + "notConfigured": "{provider} - 구성되지 않음", + "dragToAssign": "{provider}(을)를 필드에 드래그하여 할당하세요." + }, + "sheet": { + "subtitle": "탭하여 제공자를 할당하고, 방향키를 사용하여 순서를 변경하세요.", + "enableField": "새로고침 시 이 필드를 활성화하세요.", + "providers": "제공자", + "statusDisabled": "비활성화됨", + "statusNotConfigured": "설정되지 않음", + "done": "완료" + }, + "scope": { + "label": "규칙 범위", + "global": "전역 기본값", + "overrideCount": "{count, plural, one {#개 필드가 재정의됨} other {#개 필드가 재정의됨}}", + "unsavedMarker": "저장되지 않은 변경 사항 있음" + }, + "toolbar": { + "searchFields": "필드 검색", + "clearSearch": "검색 초기화", + "provider": "제공자", + "anyProvider": "모두", + "providerMenuTitle": "제공자별 필터링 및 일괄 편집", + "usedIn": "{count, plural, =0 {미사용됨} one {#개 필드} other {#개 필드}}", + "showOnlyThese": "이 항목을 사용하는 필드만 표시", + "bulkLabel": "이 항목을 사용하는 필드 총 {count}개에 적용", + "makeFirst": "모든 곳에서 첫 번째로 만들기", + "makeLast": "모든 곳에서 마지막으로 만들기", + "removeEverywhere": "모든 필드에서 제거", + "allFields": "모든 필드", + "overridesOnly": "재정의된 필드만", + "clearFilters": "필터 초기화" + }, + "providerState": { + "disabled": "비활성화됨", + "notConfigured": "설정되지 않음", + "disabledDetail": "{provider}이(가) 비활성화되었으므로, 기존 순서는 유지되지만 건너뛰게 됩니다.", + "notConfiguredDetail": "{provider}는 아직 자격 증명이 없으므로 순서는 유지되지만 건너뛰게 됩니다." + }, + "detail": { + "priority": "제공자 우선순위", + "priorityHint": "데이터를 반환하는 첫 번째 제공자가 우선됩니다.", + "moveUp": "{provider}을(를) 앞으로 이동", + "moveDown": "{provider}을(를) 뒤로 이동", + "result": "결과", + "resultHint": "다음 갱신 시 이 필드는 다음 순서대로 값이 결정됩니다:", + "noUsableProviders": "사용 가능한 제공자 없음 - 이 필드는 채워지지 않습니다.", + "skippedSummary": "{count, plural, one {{providers}은(는) 순서상에 있지만 건너뛰어집니다.} other {{providers}은(는) 순서상에 있지만 건너뛰어집니다.}}", + "appliesTo": "{scope}에 적용됩니다.", + "inheritGlobal": "전역 규칙 상속", + "inheritingGlobal": "전역 규칙 상속 중.", + "collapse": "접기" + }, + "save": { + "upToDate": "저장되지 않은 변경 사항 없음", + "unsaved": "{scope}에 {count, plural, one {#개의 저장되지 않은 변경 사항} other {#개의 저장되지 않은 변경 사항}} 존재", + "discard": "닫기", + "action": "{scope} 저장" + }, + "confirm": { + "clearProviders": { + "title": "모든 제공자를 제거하시겠습니까?", + "description": "이 작업은 {scope} 내의 필드 총 16개의 제공자 리스트를 초기화합니다. 저장 버튼을 클릭하기 전까지는 아무것도 저장되지 않습니다." + }, + "resetScope": { + "title": "기본값으로 재설정하시겠습니까?", + "globalDescription": "이 작업은 사용자님의 전역 필드 규칙을 시스템 기본값으로 대체하고 즉시 저장합니다.", + "libraryDescription": "이 작업은 {scope}에 설정된 모든 재정의를 제거하여 전역 규칙을 다시 상속받게 하며 즉시 저장됩니다." + }, + "removeProvider": { + "title": "모든 필드에서 {provider}을(를) 제거하시겠습니까?", + "description": "이 작업은 {scope}의 모든 필드에서 제공자 순서에 있는 {provider}을(를) 제거합니다. 저장 버튼을 클릭하기 전까지는 아무것도 저장되지 않습니다." + } + } + }, + "genreBlocklist": { + "heading": "글로벌 장르 차단 목록", + "hint": "메타데이터에 작성되기 전, 이 목록에 있는 장르 값들은 제공자 조회 결과에서 제거됩니다.", + "saving": "저장", + "genreValueLabel": "장르 값", + "addPlaceholder": "장르 값을 추가하세요. (예시: 오디오북)", + "duplicate": "이 장르는 이미 차단되었습니다.", + "add": "추가", + "filterPlaceholder": "차단 목록 필터", + "entryCount": "{count, plural, one {#개 항목} other {#개 항목}}", + "filteredCount": "{shown} / {total}", + "noFilterMatch": "현재 필터와 일치하는 차단 장르가 없습니다.", + "emptyTitle": "차단된 장르 없음", + "emptyHint": "'오디오북'이나 '성인물'과 같이 정확한 값들을 추가하여 해당 값들이 조회된 메타데이터에서 제외되도록 하세요.", + "removeLabel": "{genre} 제거" + }, + "customFields": { + "label": "이름", + "labelPlaceholder": "예시: 원제", + "labelTooLong": "이름 길이는 255자 이하여야 합니다", + "labelDuplicate": "이 이름을 가진 필드가 이미 존재합니다.", + "type": "종류", + "usage": "{count, plural, one {책 #권에서 사용됨} other {책 #권에서 사용됨}}", + "newField": { + "title": "새로운 필드", + "hint": "커스텀 메타데이터 필드를 정의하고 해당 필드를 사용할 라이브러리를 선택하세요." + }, + "previewToggle": "책을 편집할 때 이 필드가 어떻게 표시되는지 미리보기", + "untitledField": "이름 없는 필드", + "addField": "필드 추가", + "fields": "필드 목록", + "fieldsHint": "드래그하여 순서를 변경하거나, 이름을 편집하거나, 라이브러리를 재선택하거나, 더 이상 필요하지 않은 필드를 보관할 수 있습니다.", + "searchPlaceholder": "필드 검색", + "searchAriaLabel": "커스텀 필드 검색", + "emptyTitle": "아직 커스텀 필드가 없습니다", + "emptyHint": "위 양식을 사용하여 첫 번째 커스텀 메타데이터 필드를 정의하세요.", + "noMatchTitle": "\"{query}\"와(과) 일치하는 필드가 없습니다.", + "noMatchHint": "다른 이름, 키, 형식으로 검색해 보세요.", + "clearSearchToReorder": "검색 초기화 및 재정렬", + "dragToReorder": "드래그하여 순서 변경", + "dragToReorderField": "드래그하여 필드 순서 변경", + "unsaved": "저장되지 않음", + "archive": "보관", + "archivedFields": "보관된 필드", + "archivedSummary": "{count, plural, one {#개의 보관된 필드 존재 - 복원하거나 영구적으로 삭제하세요} other {#개의 보관된 필드 존재 - 복원하거나 영구적으로 삭제하세요}}", + "archivedAt": "{when}에 보관됨", + "restore": "복원", + "deleteForever": "영구 삭제", + "deleteDialog": { + "title": "필드 영구 삭제", + "bodyBefore": "이 작업은 시스템에서", + "bodyMiddle": "을(를) 영구히 제거하고 이 필드에 저장된 값들을", + "bodyAfter": "에서 제거합니다. 이 작업은 되돌릴 수 없습니다.", + "confirmBefore": "계속하려면 '", + "confirmAfter": "'을(를) 입력하세요", + "confirmPlaceholder": "필드 이름을 입력하여 계속하세요." + }, + "preview": "미리보기", + "sampleValue": "샘플 값", + "enabledLibraries": "활성화된 라이브러리", + "countOf": "{selected}개 중 {total}개", + "selectAll": "전체 선택", + "clear": "선택 해제", + "noLibraries": "현재 이용 가능한 라이브러리가 없습니다.", + "allLibraries": "모든 라이브러리" + }, + "tabs": { + "providers": "제공자", + "field-rules": "필드 규칙", + "custom-fields": "커스텀 필드", + "genre-blocklist": "장르 차단 목록", + "score": "점수", + "auto-fetch": "책", + "authors": "저자" + }, + "tabTitles": { + "providers": "제공자", + "field-rules": "필드 규칙", + "custom-fields": "커스텀 메타데이터", + "genre-blocklist": "장르 차단 목록", + "score": "신뢰도 점수", + "auto-fetch": "책 자동 가져오기", + "authors": "저자 자동 가져오기" + }, + "tabSubtitles": { + "providers": "외부 메타데이터 제공자를 활성화하고 자격 증명을 설정하세요.", + "field-rules": "각 메타데이터 필드의 값을 어떤 제공자로부터 가져올지, 그리고 라이브러리 전반에 걸쳐 값들이 어떻게 병합될지 제어하세요.", + "custom-fields": "사용자 지정 메타데이터 필드를 정의하고, 해당 필드를 사용할 라이브러리를 선택하세요.", + "genre-blocklist": "원치 않는 제공자 장르 값이 책에 기록되는 것을 방지하세요.", + "score": "메타데이터 필드에 가중치를 부여하여 가져온 결과의 신뢰도를 계산합니다.", + "auto-fetch": "라이브러리에 새 책이 추가되면 표지, 설명 및 기타 세부 정보를 자동으로 가져옵니다.", + "authors": "라이브러리에 새로운 저자가 추가되면, 약력과 프로필 사진을 자동으로 가져옵니다." + }, + "preferences": { + "toast": { + "saved": "메타데이터 설정이 저장되었습니다.", + "saveFailed": "메타데이터 설정을 저장할 수 없습니다. 연결 상태를 확인하신 후 다시 시도해 주세요.", + "globalReset": "전역 필드 규칙이 시스템 기본값으로 재설정됩니다.", + "libraryReset": "라이브러리가 전역 규칙으로 재설정되었습니다.", + "resetFailed": "메타데이터 설정을 초기화할 수 없습니다. 연결 상태를 확인하고 다시 시도해 주십시오." + } + } + }, + "reader": { + "resetToDefaults": "기본 설정으로 초기화", + "all": { + "title": "리더", + "subtitle": "모든 독서 모드의 기본 설정을 한 곳에서 설정하세요." + }, + "general": { + "title": "독서", + "subtitle": "모든 리더 유형에 적용되는 공통 동작", + "storageLabel": "리더 설정 저장 위치", + "deviceOnly": "이 기기에만", + "deviceOnlyHint": "설정이 브라우저에 저장됩니다. 이 기기에서만 이용하거나, 기기별로 다른 설정을 원하는 경우에 가장 적합합니다.", + "myAccount": "내 계정에", + "myAccountHint": "설정이 계정에 저장됩니다. 여러 기기에서 로그인하여 어디서든 일관된 경험을 원하는 경우에 가장 적합합니다.", + "active": "사용 중", + "notAvailable": "사용 불가", + "demoCannotChangeStorage": "데모 전용 계정은 설정 저장 모드를 변경할 수 없습니다.", + "preferencesSynced": "이제 설정이 동기화됩니다.", + "preferencesLocal": "설정이 이 기기에 저장됩니다.", + "storageUpdateFailed": "저장 모드 업데이트에 실패했습니다.", + "storageUpdateError": "저장 모드 업데이트 중 오류가 발생했습니다." + }, + "ebook": { + "title": "전자책 리더", + "subtitle": "EPUB, MOBI, FB2, 및 TXT 파일을 열 때 적용되는 기본 설정.", + "newBooks": "새로운 책", + "applySettings": "새 책에 내 설정 적용", + "applySettingsHint": "기본적으로 새 책은 출판사 고유의 글꼴과 레이아웃으로 열립니다. 사용자 설정은 리더 내에서 설정을 변경할 때만 적용됩니다.", + "layout": "레이아웃", + "readingFlow": "독서 흐름", + "readingFlowHint": "전통적인 페이지 방식과 연속적으로 볼 수 있는 스크롤 방식", + "paginated": "페이지", + "scrolled": "스크롤", + "fixedLayoutSpread": "고정 레이아웃 페이지 펼침", + "fixedLayoutSpreadHint": "만화, 이미지 기반 EPUB에 사용될 기본값", + "bookDefault": "책 기본값", + "singlePage": "단일 페이지", + "columns": "열", + "columnsHint": "페이지당 텍스트 열 개수", + "theme": "테마", + "darkMode": "다크 모드", + "darkModeHint": "선택된 테마의 다크 버전 사용", + "typography": "타이포그래피", + "font": "폰트", + "fontHint": "본문 텍스트에 사용되는 폰트", + "fontStyle": "폰트 스타일", + "fontStyleHint": "본문 텍스트의 굵기와 기울임꼴. 책에 직접 적용된 굵기 및 기울임꼴은 반대로 작동.", + "builtInFonts": "내장 폰트", + "yourFonts": "사용자 폰트", + "fontSize": "폰트 크기", + "fontSizeHint": "기본 텍스트 크기 (픽셀)", + "lineHeight": "행간", + "lineHeightHint": "세로 줄 간격", + "justify": "텍스트 양쪽 맞춤", + "justifyHint": "양쪽 여백에 맞춰 텍스트 정렬", + "hyphenation": "하이픈 처리", + "hyphenationHint": "긴 단어를 하이픈을 이용해서 자동으로 분리", + "advanced": "고급", + "maxContentWidth": "최대 콘텐츠 너비", + "maxContentWidthHint": "텍스트 영역의 최대 너비 (픽셀)", + "columnGap": "열 간격", + "columnGapHint": "텍스트 영역의 좌우 여백" + }, + "pdf": { + "title": "PDF 리더", + "subtitle": "PDF 파일을 열 때 적용되는 기본 설정.", + "layout": "레이아웃", + "scrollMode": "스크롤 모드", + "scrollModeHint": "전통적인 페이지 방식과 모든 페이지를 연속적으로 볼 수 있는 스크롤 방식", + "page": "페이지", + "scrolled": "스크롤", + "pageSpread": "페이지 쌍", + "pageSpreadHint": "2페이지 보기에서 오른쪽에 표시되는 페이지 번호", + "spreadNone": "없음", + "spreadOdd": "홀수", + "spreadEven": "짝수", + "zoom": "확대", + "defaultFit": "기본 맞춤", + "defaultFitHint": "PDF를 열 때 페이지 배율을 결정하는 방법", + "fitPage": "페이지 맞춤", + "fitWidth": "폭 맞춤", + "custom": "커스텀", + "zoomLevel": "확대 수준", + "zoomLevelHint": "사용자 지정 확대 배율 수준" + }, + "comics": { + "title": "만화 뷰어", + "subtitle": "CBZ, CBR, CB7 파일을 열 때 적용되는 기본 설정.", + "view": "보기", + "readingMode": "보기 모드", + "readingModeHint": "페이지 탐색 방식 - 웹툰의 경우 \"무한(간격 없음)\"를 사용하세요", + "paginated": "페이지", + "infiniteSpaced": "무한(간격 있음)", + "infiniteNoGaps": "무한(간격 없음)", + "pageView": "페이지 보기", + "pageViewHint": "한 개 또는 두 개의 페이지를 출력", + "single": "1페이지", + "twoPage": "2페이지", + "fitMode": "맞춤", + "fitModeHint": "페이지를 화면에 맞게 조정하는 방식", + "fitPage": "페이지", + "fitWidth": "폭", + "fitHeight": "높이", + "fitActual": "실제", + "readingDirection": "읽기 방향", + "readingDirectionHint": "서양 만화는 LTR, 일본 만화는 RTL 사용", + "ltr": "LTR", + "rtl": "RTL", + "spreadAlignment": "페이지 쌍 정렬", + "spreadAlignmentHint": "페이지 순서에 문제가 있을 때, 표지 이후부터 페이지 쌍을 한 페이지씩 조정할지에 대한 여부", + "alignmentNormal": "일반", + "alignmentShifted": "조정", + "spreadGap": "페이지 쌍 간격", + "spreadGapHint": "2페이지 보기에서의 페이지 간 간격", + "spreadGapValue": "{value}px", + "widePageHandling": "와이드 페이지 처리", + "widePageHandlingHint": "2페이지 모드에서 와이드 스캔을 자동으로 단독 표시", + "widePageAuto": "자동", + "widePageDisable": "비활성화", + "forceTwoPage": "작은 화면에서 2페이지 보기 강제 적용", + "forceTwoPageHint": "2 페이지 모드가 선택되었을 때 모바일 환경에서의 자동 비활성화 우회 여부", + "off": "끄기", + "on": "켜기", + "display": "디스플레이", + "backgroundColor": "배경색", + "backgroundColorHint": "페이지 뒤의 배경 색상", + "bgBlack": "검은색", + "bgGray": "회색", + "bgWhite": "흰색" + }, + "audio": { + "title": "오디오북 플레이어", + "subtitle": "M4B, MP3 및 기타 오디오 형식을 재생할 때 적용되는 기본 설정.", + "playback": "재생", + "playbackSpeed": "기본 재생 속도", + "playbackSpeedHint": "새 오디오북을 열 때 적용되는 재생 속도 배율", + "volume": "기본 음량", + "volumeHint": "초기 음량 수준 (0~100%)", + "skipControls": "건너뛰기 조작", + "skipBack": "되감기 길이", + "skipBackHint": "되감기 버튼 클릭 시 되감을 시간", + "skipForward": "건너뛰기 길이", + "skipForwardHint": "건너뛰기 버튼 클릭 시 건너뛸 시간" + }, + "fonts": { + "title": "폰트", + "subtitle": "전자책 리더에서 사용할 사용자 폰트를 업로드하세요.", + "uploadFonts": "폰트 업로드", + "notAvailableDemo": "데모 계정에서는 이용할 수 없습니다.", + "uploading": "업로드 중...", + "dropFilesHere": "여기에 파일을 놓으세요", + "dragFontsPrefix": "폰트 파일을 이곳에 끌어다 놓거나,", + "browse": "탐색하기", + "fileTypesHint": "TTF, OTF, WOFF, WOFF2 (파일 당 최대 50 MB)", + "yourFonts": "사용자 폰트", + "fontsUsed": "{count} / {max} 사용", + "noFontsYet": "아직 폰트가 업로드되지 않았습니다", + "noFontsHint": "위쪽에 폰트 파일을 드래그하여 시작하세요.", + "fileCount": "{count, plural, =0 {파일 없음} one {#개 파일} other {#개 파일}}", + "pangram": "참나무 타는 소리와 야경만큼 밤의 여유를 표현해 주는 것도 없다", + "renameFamily": "패밀리 이름 변경", + "deleteFamily": "패밀리 삭제", + "editVariant": "굵기/스타일 편집", + "deleteVariant": "종류 삭제", + "styleNormal": "일반", + "styleItalic": "기울임", + "weightItalicOf": "{weight} 기울임꼴", + "variableRange": "{min}-{max} 가변 크기", + "variableStyles": "{count, plural, one {#개 스타일} other {#개 스타일}}", + "weightThin": "매우 얇음", + "weightExtraLight": "얇음", + "weightLight": "약간 얇음", + "weightRegular": "일반", + "weightMedium": "중간", + "weightSemiBold": "약간 굵음", + "weightBold": "굵음", + "weightExtraBold": "매우 굵음", + "weightBlack": "가장 굵음", + "renameFamilyFailed": "폰트 패밀리 이름 변경에 실패했습니다.", + "renamedTo": "\"{name}\"으로 이름이 변경되었습니다.", + "updateVariantFailed": "폰트 종류 업데이트에 실패했습니다.", + "deleteFontFailed": "폰트 삭제에 실패했습니다.", + "deleteFamilyFailed": "폰트 패밀리 삭제에 실패했습니다.", + "demoCannotManage": "데모 전용 계정은 폰트를 관리할 수 없습니다.", + "fileAdded": "\"{name}\"이(가) 추가되었습니다.", + "uploadFailed": "업로드에 실패했습니다.", + "serverFontsTitle": "서버 폰트 (관리자에 의해 공유됨)", + "serverFontsHint": "이 폰트들은 서버 관리자로부터 제공되었습니다. 리더에서 제외하려면 비활성화하세요.", + "serverFontsShown": "총 {total}개 항목 중 {count}개 표시됨", + "serverFontsAllHidden": "모든 서버 폰트가 숨겨져 있습니다. 사용자의 리더는 내장 폰트와 커스텀 폰트만 사용 가능합니다.", + "serverFontVisibilityFailed": "서버 폰트 표시 여부 업데이트에 실패했습니다." + }, + "bookDock": { + "title": "책 창고", + "subtitle": "책 창고에 파일이 추가되었을 때 처리되는 방식을 설정하세요.", + "dropFolder": "창고 폴더", + "containerPath": "컨테이너 경로", + "containerPathHint": "책 파일을 이 폴더에 복사하거나 이동시키면, 시스템이 자동으로 이를 감지하여 처리합니다. 하위 디렉터리도 지원됩니다.", + "changePathPrefix": "이 경로를 변경하려면", + "changePathMiddle": "환경변수를 설정하세요.", + "changePathSuffix": "파일에서 설정할 수 있습니다.", + "metadata": "메타데이터", + "autoFetch": "제공자로부터 메타데이터 자동 가져오기", + "autoFetchHint": "파일이 책 창고에 추가되면 설정된 제공업체(Google Books, iTunes, Open Library 등)로부터 메타데이터를 자동으로 가져옵니다.", + "autoFinalize": "자동 확정", + "enableAutoFinalize": "자동 확정 활성화", + "enableAutoFinalizeHint": "메타데이터 신뢰도 점수가 임계값 이상인 파일이 자동으로 확정됩니다.", + "confidenceThreshold": "신뢰도 임계값: {value}%", + "thresholdIgnored": "(내장 데이터 전용 모드에서는 무시됨)", + "destinationLibrary": "대상 라이브러리", + "selectLibrary": "라이브러리를 선택하세요...", + "metadataMode": "메타데이터 모드", + "metadataModeSafeMerge": "안전 병합 (권장)", + "metadataModeFetchedOnly": "외부 데이터 사용", + "metadataModeEmbeddedOnly": "내장 데이터 사용", + "destinationFolder": "대상 폴더", + "selectFolder": "폴더를 선택하세요...", + "saveSettingFailed": "설정 저장에 실패했습니다.", + "updateSettingFailed": "설정 업데이트에 실패했습니다.", + "autoFetchEnabled": "자동 가져오기가 활성화되었습니다.", + "autoFetchDisabled": "자동 가져오기가 비활성화되었습니다.", + "autoFinalizeEnabled": "자동 확정이 활성화되었습니다.", + "autoFinalizeDisabled": "자동 확정이 비활성화되었습니다.", + "destinationLibraryUpdated": "대상 라이브러리가 업데이트되었습니다.", + "destinationFolderUpdated": "대상 폴더가 업데이트되었습니다.", + "confidenceThresholdUpdated": "신뢰도 임계값이 업데이트되었습니다.", + "metadataModeUpdated": "메타데이터 모드가 업데이트되었습니다." + }, + "fileNaming": { + "title": "파일 이름 명명", + "subtitle": "자리표시자 토큰을 사용하여 파일이 업로드될 때 디스크에 어떻게 저장되는지, 그리고 다운로드될 때 어떻게 이름이 지정되는지를 제어합니다.", + "copy": "복사", + "previewLabel": "미리보기:", + "globalDefaults": "전역 기본값", + "crossPlatform": "크로스 플랫폼 경로 호환", + "crossPlatformHint": "사용할 수 없는 문자 및 예약된 이름을 대체하고 후행 마침표와 공백을 제거하여 Windows에서 생성된 파일 및 폴더 이름을 안전하게 만듭니다. 해당 문자를 의도적으로 유지하는 Linux 시스템 전용으로 사용할 경우에만 비활성화합니다.", + "fileAsBookDefault": "파일을 책으로 모드 기본값", + "fileAsBookDefaultHint": "'파일을 책으로' 모드를 사용하는 라이브러리를 위한 업로드 패턴입니다. 각 파일은 하나의 책으로 간주됩니다.", + "folderAsBookDefault": "폴더를 책으로 모드 기본값", + "folderAsBookDefaultHint": "'폴더를 책으로' 모드를 사용하는 라이브러리를 위한 업로드 패턴입니다. 각 책은 반드시 개별 폴더에 포함되어야 합니다.", + "downloadPattern": "다운로드 패턴", + "downloadPatternHint": "단일 파일 다운로드 및 ZIP 파일로 내보내기 시 내부 파일에 적용될 기본 파일명", + "libraryOverrides": "라이브러리 재정의", + "noLibraries": "라이브러리가 구성되지 않았습니다. 커스텀 명명 패턴을 설정하려면 라이브러리 설정에서 새 라이브러리를 생성하세요.", + "badgeCustom": "커스텀", + "badgeDefault": "기본값", + "orgFolderAsBook": "폴더를 책으로", + "orgFileAsBook": "파일을 책으로", + "resetToDefault": "기본값으로 초기화", + "tokens": "토큰", + "clickTokenHint": "토큰을 클릭하면 클립보드에 복사됩니다.", + "copyValue": "{value} 복사", + "modifiers": "제어자", + "modifiersExplain": "토큰 내부에 제어자를 추가하여 값을 변환합니다:", + "modFirst": "첫 번째 값만", + "modSort": "성, 이름으로 형식화", + "modInitial": "첫 글자만", + "modFixed2": "소수점 둘째 자리까지", + "folderOnlyPrefix": "패턴을", + "folderOnlySuffix": "로 끝낸다면 이는 폴더까지만 나타냈음을 의미합니다. 원래 파일 이름은 해당 폴더 내에 보존됩니다.", + "conditionalLogic": "조건 로직", + "conditionalPart1": "만약 부등호 블록", + "conditionalPart2": "안의 토큰이 빈 값을 반환한다면 해당 블록을 건너뜁니다.", + "conditionalPart3": "을(를) 이용하여 기본값을 설정할 수 있습니다.", + "examples": "예시", + "exCalibre": "Calibre 기본 스타일", + "exSeriesReader": "시리즈 도서", + "exCleanDownload": "깔끔한 다운로드용 파일명", + "exAlphabetical": "알파벳 순 그룹화와 동시에 시리즈 분류", + "exSeriesFallback": "시리즈 또는 단편으로 자동 설정", + "exOptionalSubtitle": "부제목을 포함하는 다운로드용 파일명", + "exMultilingual": "다국어 라이브러리", + "exPublisher": "출판사별로 정리", + "exStacked": "선택적 폴더 스택", + "exFolderDrop": "이름별 정렬과 함께 폴더명만 설정", + "caseWithYear": "연도 있음", + "caseNoYear": "연도 없음", + "caseInSeries": "시리즈 있음", + "caseStandalone": "단권", + "caseNoSeries": "시리즈 없음", + "caseFull": "전체 항목", + "caseMinimal": "최소 항목", + "caseWithLanguage": "언어 있음", + "caseNoLanguage": "언어 없음", + "caseWithPublisher": "출판사 있음", + "caseNoPublisher": "출판사 없음", + "caseAllSet": "전부 설정됨", + "copiedToClipboard": "{value}이(가) 클립보드에 복사되었습니다.", + "copyTokenFailed": "토큰 복사에 실패했습니다.", + "patternCopied": "패턴이 클립보드에 복사되었습니다.", + "copyPatternFailed": "패턴 복사에 실패했습니다.", + "labelCopied": "{label}이(가) 클립보드에 복사되었습니다.", + "copyLabelFailed": "{label} 복사에 실패했습니다.", + "patternHelp": "패턴 도움말", + "patternHelpDescription": "토큰, 제어자, 그리고 준비된 패턴 템플릿을 모든 필드에 복사할 수 있습니다.", + "copyPreview": "{label} 복사", + "copyExample": "{label} 패턴 복사", + "invalidCharacters": "패턴에 사용할 수 없는 문자가 포함되어 있습니다.", + "fileAsBookSaved": "파일을 책으로 모드 기본값이 저장되었습니다.", + "folderAsBookSaved": "폴더를 책으로 모드 기본값이 저장되었습니다.", + "downloadPatternSaved": "다운로드 패턴이 저장되었습니다.", + "savePatternFailed": "패턴 저장에 실패했습니다.", + "saveDownloadPatternFailed": "다운로드 패턴 저장에 실패했습니다.", + "crossPlatformEnabled": "크로스 플랫폼 경로 호환이 활성화되었습니다.", + "crossPlatformDisabled": "크로스 플랫폼 경로 호환이 비활성화되었습니다.", + "crossPlatformSaveFailed": "크로스 플랫폼 경로 호환 설정을 저장하지 못했습니다.", + "librarySaved": "{name}의 패턴이 저장되었습니다.", + "librarySaveFailed": "라이브러리 패턴 저장에 실패했습니다.", + "saveLibraryPattern": "{name}의 패턴을 저장했습니다.", + "resetLibraryPattern": "{name}을(를) 기본 패턴으로 재설정합니다.", + "tokenTitle": "책 제목", + "tokenSubtitle": "책 부제목", + "tokenAuthors": "저자 목록(쉼표로 구분)", + "tokenYear": "출판 연도", + "tokenSeries": "시리즈 이름", + "tokenSeriesIndex": "시리즈 번호(0으로 패딩됨)", + "tokenPublisher": "출판사", + "tokenIsbn": "ISBN-13", + "tokenLanguage": "언어", + "tokenLibrary": "라이브러리 이름", + "tokenOriginalFilename": "원본 파일명(확장자 제외)", + "tokenExtension": "파일 확장자(점 제외)", + "patternHelpIntro": "패턴은 {titleToken} 및 {authorsToken}와(과) 같은 토큰, 그리고 제어자와 조건부 블록으 구성됩니다.", + "browseTokensAndExamples": "토큰 및 예시 둘러보기", + "subtitleShort": "저장된 파일에 대한 폴더 및 파일 이름 패턴.", + "rule": { + "fileAsBook": "파일을 책으로 기본값", + "folderAsBook": "폴더를 책으로 기본값", + "download": "다운로드 파일명" + }, + "howItWorks": { + "title": "경로가 선택되는 방식.", + "summary": "고유 재정의 패턴을 가진 라이브러리 외 다른 모든 라이브러리는 사용 중인 구성 방식의 전역 기본값을 따릅니다. 패턴을 변경한다고 해서 이미 디스크에 저장된 책들이 이동하지는 않으며, 다음 업로드부터 해당 패턴을 따르게 됩니다." + }, + "filterRules": "규칙 필터", + "librariesGroup": "라이브러리", + "customCount": "{custom}/{total} 커스텀 규칙", + "noRuleMatches": "\"{query}\"와(과) 일치하는 규칙이 없습니다.", + "unsavedMarker": "저장되지 않은 변경 사항 있음", + "backToRules": "명명 규칙으로 돌아가기", + "appliesToLibraries": "{count, plural, =0 {이 기본값을 사용하는 라이브러리가 존재하지 않습니다} one {#개의 라이브러리에 적용됩니다} other {#개의 라이브러리에 적용됩니다}}", + "downloadScope": "다운로드 및 ZIP 파일로 내보내기", + "badgeInherits": "기본값 상속", + "badgeUnsaved": "저장되지 않음", + "patternLabel": "패턴", + "readOnlyFromGlobal": "읽기 전용, 전역 기본값에서 가져옴", + "useGlobalDefault": "전역 기본값 사용", + "resetToShipped": "시스템 기본값으로 초기화", + "addOverride": "재정의 추가", + "inheritsNotice": "본 라이브러리는 {base}을(를) 따릅니다. 자체 패턴을 지정하려면 새로운 재정의를 추가하세요.", + "libraryRuleHint": "이 라이브러리에 대해서만 {base}을(를) 재정의합니다.", + "scopeLibrary": "{name}(으)로 업로드하는 경우에만 적용됩니다.", + "scopeDownload": "다운로드 및 내보내기 시 단일 파일 및 ZIP 파일 내부의 모든 파일에 적용됩니다.", + "scopeGlobal": "{count, plural, one {자체 패턴이 없는 #개의 라이브러리에 적용됩니다.} other {자체 패턴이 없는 #개의 라이브러리에 적용됩니다.}}", + "scopeGlobalNone": "현재 이 기본값을 사용하는 라이브러리가 존재하지 않습니다. 이 모드의 모든 라이브러리는 자체적인 패턴을 가지고 있습니다.", + "unbalancedOptional": "조건부 그룹에 닫는 부등호가 누락되었습니다", + "unbalancedToken": "토큰에 닫는 중괄호가 누락되었습니다", + "structure": "구조", + "paletteOptional": "조건부 그룹(optional group)", + "paletteOptionalHint": "부등호로 블록을 감싸면 내부 토큰이 비었을 때 해당 블록이 삭제됩니다.", + "paletteFallback": "기본값(fallback)", + "paletteFallbackHint": "조건부 그룹에서, 왼쪽 부분의 값이 비었을 때 사용되는 텍스트입니다.", + "paletteSeparator": "폴더", + "paletteSeparatorHint": "새로운 폴더 단계를 시작합니다.", + "modUpper": "대문자", + "modLower": "소문자", + "recipesLabel": "또는 미리 만들어 둔 레시피로 시작하세요", + "recipe": { + "seriesShelf": "시리즈 선반", + "calibre": "Calibre 스타일", + "alphabetical": "알파벳순", + "flat": "폴더 없는 플랫 스타일", + "originalName": "원본 파일 이름", + "authorTitle": "저자 및 제목", + "titleOnly": "제목만", + "seriesOrdered": "시리즈 순서" + }, + "resultPanel": "해석 결과", + "resultFor": "결과: {rule}", + "copyResult": "해석 결과 복사", + "resultCopied": "해석 결과가 클립보드에 복사되었습니다.", + "resultCopyFailed": "해석 결과를 복사하는 데 실패했습니다.", + "sampleBookNote": "모든 미리 보기에 사용될 샘플 책", + "missingMetadata": "메타데이터가 누락된 경우", + "caseNoSeriesLabel": "시리즈 없음", + "caseNoYearLabel": "연도 없음", + "caseNoAuthorLabel": "저자 없음", + "previewEmpty": "이 패턴은 빈 값으로 해석되므로, 원래 파일 이름이 대신 사용됩니다.", + "previewEmptyShort": "빈 값으로 해석됨", + "crossPlatformShortHint": "윈도우에서 사용할 수 없는 문자를 대체합니다. 미리보기는 이 설정을 반영합니다.", + "rulesSaved": "{count, plural, one {#개의 명명 규칙이 저장되었습니다.} other {#개의 명명 규칙이 저장되었습니다.}}", + "rulesSaveFailed": "{count, plural, one {#개의 명명 규칙을 저장하는 데 실패했습니다.} other {#개의 명명 규칙을 저장하는 데 실패했습니다.}}", + "rulesPartiallySaved": "{saved}개 항목 저장됨, {failed}개 항목 실패. 실패한 규칙들은 저장되지 않았습니다.", + "save": { + "unsaved": "{count, plural, one {저장되지 않은 변경 사항 #개} other {저장되지 않은 변경 사항 #개}}", + "upToDate": "저장되지 않은 변경 사항 없음", + "discard": "취소", + "action": "변경 사항 저장", + "blocked": "저장하기 전에 유효하지 않은 패턴을 수정하세요" + }, + "examplesDescription": "레시피에서 다루지 않는 예시 구문 모음입니다. 슬래시(/)로 끝나는 패턴은 폴더로 간주되며, 업로드된 파일 이름을 그 안에 유지합니다.", + "examplesApply": "적용", + "examplesApplyAria": "{label} 패턴 적용", + "examplesUploadOnly": "이 항목들은 업로드 패턴이며, 참고용으로 이곳에 표시됩니다. 이 중 하나를 적용하려면 '파일을 책으로' 또는 '폴더를 책으로' 규칙으로 전환하세요.", + "examplesFileModeOnly": "폴더를 책으로 모드에서는 자체적인 파일 이름 블록이 필요하므로, 이 규칙은 파일을 책으로 모드를 사용하는 라이브러리에만 적용됩니다.", + "example": { + "seriesOrStandalone": "시리즈 폴더 또는 단편 폴더", + "optionalSubtitle": "조건부 부제목 표시", + "languageFolder": "언어별 폴더", + "publisherFolder": "출판사별 폴더", + "stackedOptional": "중첩된 조건부 폴더", + "folderDrop": "폴더 유지 및 업로드된 파일 이름 보존" + }, + "exampleCase": { + "complete": "완료", + "noSeries": "시리즈 없음", + "noSubtitle": "부제목 없음", + "noLanguage": "언어 없음", + "noPublisher": "출판사 없음" + }, + "unknownModifier": "알 수 없는 제어자 \"{modifier}\"이(가) 사용되었습니다. 이 제어자는 무시되며, 값이 변경되지 않습니다." + }, + "kobo": { + "title": "Kobo 동기화", + "subtitle": "Kobo 기기를 연결하여 라이브러리를 동기화하세요.", + "copy": "복사", + "never": "없음", + "justNow": "방금", + "minutesAgo": "{count}분 전", + "hoursAgo": "{count}시간 전", + "daysAgo": "{count}일 전", + "loadFailed": "로드에 실패했습니다.", + "devicePaired": "기기 페어링 성공", + "devicePairedHint": "Kobo 설정을 위한 준비가 완료되었습니다.. 아래 안내를 따라주세요.", + "syncUrl": "동기화 URL", + "urlNotShownAgain": "이 URL은 다시 확인할 수 없습니다. 안전한 곳에 저장해 주세요.", + "registeredDevices": "등록된 기기", + "addDevice": "기기 추가", + "deviceName": "기기 이름", + "deviceNamePlaceholder": "예시: 내 Kobo Libra", + "creating": "생성 중...", + "createDevice": "기기 생성", + "createDeviceFailed": "기기 생성에 실패했습니다.", + "deviceRegistered": "기기 \"{name}\"이(가) 등록되었습니다.", + "noDevicesYet": "아직 기기가 없습니다.", + "noDevicesHint": "Kobo와 책을 동기화하려면 기기를 추가하세요.", + "lastSync": "마지막 동기화: {time}", + "renameDevice": "기기 이름 변경", + "revokeAccess": "접근 권한 회수", + "deviceRenamed": "기기 이름이 변경되었습니다.", + "renameDeviceFailed": "기기 이름 변경에 실패했습니다.", + "revokeConfirm": "\"{name}\"의 접근 권한을 회수하시겠습니까? 해당 기기는 다시 페어링되기 전까지 동기화할 수 없습니다.", + "accessRevoked": "\"{name}\"의 접근 권한을 회수했습니다.", + "revokeFailed": "접근 권한 회수에 실패했습니다.", + "syncUrlCopied": "동기화 URL이 클립보드에 복사되었습니다.", + "syncUrlCopyFailed": "동기화 URL 복사에 실패했습니다.", + "syncPreferences": "동기화 설정", + "twoWaySync": "양방향 진행도 동기화", + "twoWaySyncHint": "BookOrbit과 Kobo 간의 독서 진행도 동기화 기능은 정확한 위치 판단과 신뢰성 있는 페이지 복원을 위해 KEPUB 전송을 요구합니다.", + "syncHighlights": "BookOrbit의 하이라이트를 Kobo와 동기화", + "syncHighlightsHint": "BookOrbit 또는 KOReader에서 만든 하이라이트를 Kobo로 전송합니다. 이 기능이 꺼져 있어도 Kobo의 하이라이트는 BookOrbit으로 전송됩니다. 연결된 필기 데이터는 수정 및 삭제 내용을 양방향으로 동기화합니다. KEPUB 전송을 요구하며, Kobo 기기의 책은 BookOrbit에서 다운로드한 KEPUB이어야 합니다.", + "storeSync": "Kobo 스토어 작품 포함", + "storeSyncHint": "Kobo 계정의 Kobo Plus 작품 및 구매 작품을 BookOrbit 라이브러리에 전송합니다. 이 기능이 꺼져 있으면 BookOrbit 도서만 기기로 전달됩니다. 또한, 스토어 작품이 Kobo에서 직접 다운로드되며 BookOrbit 라이브러리에 추가되지 않습니다.", + "convertKepub": "KEPUB으로 변환", + "convertKepubHint": "EPUB 파일을 KEPUB으로 변환하여 전송합니다. 진행도 동기화 또는 하이라이트 동기화 기능이 켜진 상태라면 이 기능은 강제로 활성화됩니다. 활성화 이후 Kobo 동기화 시 책들은 KEPUB 다운로드로 다시 제공됩니다. Kobo가 계속해서 기존 책을 열려고 시도하는 경우에는 기존 EPUB 사본을 삭제하세요.", + "forceHyphenation": "강제 하이픈 처리", + "forceHyphenationHint": "일관된 텍스트 맞춤을 보장합니다. 이 작업은 캐시된 KEPUB 파일들을 재생성합니다.", + "progressThresholds": "진행도 기준값", + "progressThresholdsHint": "Kobo 독서 진행도가 라이브러리 상태를 업데이트하는 기준을 설정하세요.", + "markAsReading": "독서 시작", + "markAsReadingHint": "책을 \"읽는 중\" 상태로 전환하기 위한 최소 퍼센트 값", + "markAsFinished": "독서 완료", + "markAsFinishedHint": "책을 \"읽음\" 상태로 표시하기 위한 퍼센트 값", + "kepubLimit": "KEPUB 변환 제한", + "kepubLimitHint": "이 용량 제한을 초과하는 도서는 일반 EPUB 형식으로 전송되므로, BookOrbit이 해당 책의 독서 위치를 Kobo로 동기화하지 않습니다.", + "changesMustBeSaved": "변경 사항은 저장해야 적용됩니다.", + "saving": "저장 중...", + "saveSyncSettings": "동기화 설정 저장", + "thresholdOrderError": "독서 시작 기준값은 독서 완료 기준값보다 작아야 합니다.", + "saveSettingsFailed": "설정 저장에 실패했습니다.", + "settingsSaved": "Kobo 동기화 설정이 저장되었습니다.", + "saveFailed": "저장에 실패했습니다.", + "activity": { + "waitingForActivity": "활동 대기 중", + "needsAttention": "주의 필요", + "syncHealthy": "동기화 정상", + "never": "없음", + "none": "없음", + "unknown": "알 수 없음", + "failureCount": "{count, plural, one {#개 실패} other {#개 실패}}", + "noActivityRecorded": "Kobo 동기화 활동 기록이 없습니다.", + "lastSuccess": "마지막 성공 {time}", + "lastFailure": "마지막 실패 {time}", + "noFailedActivity": "최근 Kobo 활동 실패 사례가 없습니다.", + "noActivityYet": "Kobo 활동이 아직 없습니다.", + "event": { + "librarySync": "라이브러리 업데이트 확인됨", + "bookDownload": "책 다운로드됨", + "progressUpdate": "독서 위치 업데이트됨", + "annotationsPull": "하이라이트 정보가 Kobo로 전송됨", + "annotationsPush": "Kobo에서 하이라이트 정보를 수신함" + }, + "outcome": { + "failed": "실패", + "noUpdates": "업데이트 없음", + "noChanges": "변경 없음", + "pending": "대기 중", + "completed": "완료됨", + "downloaded": "다운로드됨", + "updated": "업데이트됨", + "sent": "전송됨", + "imported": "가져옴" + }, + "failure": { + "librarySync": "라이브러리 확인이 완료되지 않았습니다.", + "bookDownload": "다운로드가 완료되지 않았습니다.", + "progressUpdate": "독서 위치가 업데이트되지 않았습니다.", + "annotationsPull": "하이라이트가 전송되지 않았습니다.", + "annotationsPush": "하이라이트를 가져오지 못했습니다." + }, + "chip": { + "morePending": "대기 중인 항목", + "noUpdatesPending": "업데이트할 내용 없음", + "bookCount": "{count, plural, one {#권} other {#권}}", + "deletedAnnotations": "{count}개 주석 삭제됨", + "deviceAlreadyCurrent": "기기가 이미 최신 상태임", + "freshHighlightData": "하이라이트 데이터가 최신 상태임", + "created": "{count}개 생성됨", + "updated": "{count}개 업데이트됨", + "deleted": "{count}개 삭제됨", + "unchanged": "{count}개 변화 없음" + }, + "readingPositionSyncedTitle": "독서 위치 동기화됨: {title}", + "readingPositionSynced": "독서 위치 동기화됨", + "labelWithTitle": "{label}: {title}", + "updateCount": "{count, plural, one {#개 업데이트} other {#개 업데이트}}", + "directionToKobo": "BookOrbit -> Kobo", + "directionToBookOrbit": "Kobo -> BookOrbit", + "twoWaySyncEnabled": "양방향 동기화 활성화됨", + "deviceProgressSaved": "기기 진행도 저장됨", + "summary": { + "noLibraryUpdatesPending": "이 기기에는 대기 중인 라이브러리 업데이트가 없음", + "libraryUpdatesPrepared": "{count, plural, one {기기를 대상으로 #건의 라이브러리 업데이트가 준비됨} other {기기를 대상으로 #건의 라이브러리 업데이트가 준비됨}}", + "bookDownloadedBy": "{title}이(가) {device}에서 다운로드됨", + "booksDownloaded": "{count, plural, one {책 #권 다운로드됨} other {책 #권 다운로드됨}}", + "progressUpdatesSyncedFor": "{count, plural, one {#건의 진행도 업데이트가 {title}에 동기화됨} other {#건의 진행도 업데이트가 {title}에 동기화됨}}", + "progressUpdatesSynced": "{count, plural, one {#건의 진행도 업데이트가 동기화됨} other {#건의 진행도 업데이트가 동기화됨}}", + "newReadingPositionFor": "Kobo가 {title}에 대한 새로운 독서 위치를 보고함", + "newReadingPosition": "Kobo가 새로운 독서 위치를 보고함", + "noHighlightChangesNeededFor": "{title}에 대한 하이라이트 변경 사항 없음", + "noHighlightChangesNeeded": "하이라이트 변경 사항 없음", + "highlightsSentToKoboFor": "{count, plural, one {{title}의 하이라이트 #개가 Kobo로 전송됨} other {{title}의 하이라이트 #개가 Kobo로 전송됨}}", + "highlightsSentToKobo": "{count, plural, one {하이라이트 #개가 Kobo로 전송됨} other {하이라이트 #개가 Kobo로 전송됨}}", + "noKoboHighlightChangesFor": "{title}에 대한 Kobo 하이라이트 변경 사항 없음", + "noKoboHighlightChanges": "Kobo 하이라이트 변경 사항 없음", + "highlightsImportedFromKoboFor": "{count, plural, one {{title}의 하이라이트 #개를 Kobo에서 가져옴} other {{title}의 하이라이트 #개를 Kobo에서 가져옴}}", + "highlightsImportedFromKobo": "{count, plural, one {하이라이트 #개를 Kobo에서 가져옴} other {하이라이트 #개를 Kobo에서 가져옴}}" + }, + "timeRange": "{from}부터 {to}까지", + "eventsGrouped": "{count, plural, one {#개 이벤트가 그룹화됨} other {#개 이벤트가 그룹화됨}}", + "removedDevice": "제거된 기기", + "loadMoreFailed": "더 많은 기록을 불러오는 데 실패했습니다.", + "historyRefreshed": "Kobo 동기화 기록이 새로고침되었습니다.", + "refreshFailed": "기록 새로 고침에 실패했습니다.", + "recentActivity": "최근 Kobo 활동", + "filterAll": "모두", + "filterFailures": "실패", + "refresh": "새로고침", + "loadingActivity": "Kobo 활동 로딩 중...", + "noActivityHint": "페어링된 Kobo가 BookOrbit에 연결된 후에 최근 동기화 활동이 표시됩니다.", + "error": "오류", + "loading": "로딩 중...", + "loadMore": "더 많은 활동 내역 불러오기" + }, + "howBooksSynced": { + "title": "책 동기화 방법", + "body": "책을 사용자의 Kobo 기기로 보내려면, 해당 책들이 포함된 컬렉션에서 {syncToKobo}를 활성화해야 합니다. 사이드바에서 아무 컬렉션이나 열고, 아이콘 편집을 클릭한 다음, {syncToKobo}를 활성화하세요. 활성화되지 않은 컬렉션에 속한 책은 동기화되지 않습니다." + }, + "nextSteps": { + "title": "다음 단계", + "step1": "1. 상단의 동기화 URL을 이용하여 Kobo 기기를 동기화하세요.", + "step2": "2. BookOrbit에서 사이드바에서 아무 컬렉션이나 연 후, 편집 아이콘을 클릭하고 {syncToKobo}를 활성화하세요. 동기화가 활성화된 컬렉션의 책만 기기에 다운로드됩니다." + }, + "syncToKobo": "Kobo와 동기화", + "tabs": { + "syncSettings": "동기화 설정", + "activityLog": "활동 기록" + } + }, + "koreader": { + "title": "KOReader 동기화", + "subtitle": "KOReader에서 BookOrbit 카탈로그를 둘러보고 진행 상황, 독서 활동, 하이라이트, 필기 변경 사항을 동기화하세요.", + "tabs": { + "sync": "동기화 설정", + "fileNaming": "파일명" + }, + "fileNaming": { + "accountTitle": "계정 기본 KOReader 패턴", + "accountDescription": "KOReader 계정용 BookOrbit 다운로드 플러그인에서 사용되는 기본 상대 폴더 및 파일 이름을 설정합니다. 기기별 규칙은 아래에서 재정의할 수 있습니다.", + "defaultPattern": "기본 도서 경로 패턴", + "accountHelp": "기기에 사용자 지정 규칙이 없는 경우에 사용될 기본 KOReader 다운로드 플러그인 패턴입니다.", + "accountHint": "별도의 사용자 재정의가 없는 KOReader 기기에서 사용됩니다.", + "preview": "미리보기", + "saveAccount": "계정 기본값 저장", + "deviceTitle": "KOReader 기기 재정의", + "deviceDescription": "기본, 시리즈, 단편 등 모든 경우의 경로 조합을 사용자 정의할 수 있습니다. 만약 비어 있다면 계정 기본 KOReader 패턴 또는 기기 기본값을 상속받습니다.", + "noDevices": "BookOrbit과 동기화되면 기기들이 이곳에 표시됩니다.", + "customOrganization": "커스텀 정리 설정", + "usingAccountDefault": "계정 기본값 사용 중", + "deviceDefaultHelp": "이 기기의 기본값입니다. 향후 변경 사항을 자동으로 상속받으려면 계정 기본값과 동일하게 유지하세오.", + "seriesBooks": "시리즈가 있는 책", + "seriesHelp": "시리즈 메타데이터가 있는 책에만 적용되는 선택적 경로입니다. 비워 두면 이 기기의 기본 경로 패턴을 사용합니다.", + "standaloneBooks": "시리즈가 없는 책", + "standaloneHelp": "시리즈 메타데이터가 없는 책에만 적용되는 선택적 경로입니다. 비워 두면 이 기기의 기본 경로 패턴을 사용합니다.", + "inheritPlaceholder": "공백으로 두면 이 기기의 기본 패턴이 사용됩니다", + "useAccount": "계정 기본값 사용", + "saveOverride": "재정의 저장", + "loadFailed": "파일 정리 설정을 불러오는 데 실패했습니다.", + "accountRequired": "저장하기 전에 기본 책 경로 패턴을 입력하세요.", + "accountSaved": "계정 기본 KOReader 패턴이 저장되었습니다.", + "accountSaveFailed": "파일 정리 설정을 저장하는 데 실패했습니다.", + "deviceUsesAccount": "기기가 이제 계정 기본 KOReader 패턴을 사용합니다.", + "deviceSaved": "기기 조직 재정의가 저장되었습니다.", + "deviceSaveFailed": "기기 재정의 저장에 실패했습니다.", + "deviceResetFailed": "기기 재정의 초기화에 실패했습니다." + }, + "loadingSettings": "KOReader 설정 로드 중...", + "loadFailed": "KOReader 설정을 불러오는 데 실패했습니다.", + "never": "없음", + "justNow": "방금", + "minutesAgo": "{count}분 전", + "hoursAgo": "{count}시간 전", + "daysAgo": "{count}일 전", + "unknown": "알 수 없음", + "updateAvailable": "업데이트 가능", + "manualUpdateRequired": "수동 업데이트 필요", + "manualUpdateExplanation": "이 버전의 플러그인은 스스로 업데이트를 설치할 수 없습니다. 플러그인을 다운로드하여 bookorbit.koplugin 파일을 기기의 koreader/plugins/ 경로에 복사하세요.", + "upToDate": "최신 상태", + "versionUnknown": "알 수 없는 버전", + "latestPlugin": "최신 플러그인: v{version}", + "latestPluginUnavailable": "최신 플러그인 사용 불가", + "notConfigured": "KOReader 동기화가 설정되지 않았습니다", + "notConfiguredHint": "동기화 인증 정보 하나를 생성한 다음, BookOrbit KOReader 플러그인을 통해 탐색, 다운로드, 진행도 확인, 독서 이벤트, 하이라이트, 삭제 등의 기능을 사용하세요.", + "createCredentials": "인증 정보 생성", + "createFormTitle": "KOReader 동기화 인증 정보 생성", + "createFormHint": "이 인증 정보는 KOReader 기기를 BookOrbit에 인증합니다.", + "username": "사용자 이름", + "usernamePlaceholder": "예시: myreader", + "password": "비밀번호", + "passwordPlaceholder": "최소 6자", + "changeCredentials": { + "action": "인증 정보 변경", + "title": "KOReader 인증 정보 변경", + "description": "모든 BookOrbit 계정에는 하나의 KOReader 인증 정보만 존재합니다. 여기서 동기화 데이터를 삭제 없이 인증 정보를 변경하세요.", + "newPassword": "새 비밀번호", + "usernameInvalid": "사용자 이름은 3자에서 100자 사이여야 합니다.", + "passwordPlaceholder": "기존 비밀번호를 유지하려면 이 칸을 비워두세요", + "passwordHint": "기존 비밀번호를 유지하려면 이 칸을 비워두세요.", + "passwordInvalid": "비밀번호는 6자에서 128자 사이여야 합니다.", + "deviceNotice": "이전 로그인 정보를 사용하는 기기는 재연결하거나, 새로 다운로드한 플러그인 패키지로 업데이트해야 합니다.", + "showPassword": "새 비밀번호 보기", + "hidePassword": "새 비밀번호 숨기기", + "save": "인증 정보 저장", + "saving": "저장 중...", + "updated": "KOReader 인증 정보가 업데이트되었습니다.", + "updateFailed": "KOReader 인증 정보 업데이트에 실패했습니다." + }, + "creating": "생성 중...", + "create": "생성", + "credentialsCreated": "KOReader 동기화 인증 정보가 생성되었습니다.", + "createCredentialsFailed": "인증 정보 생성에 실패했습니다.", + "status": "KOReader 상태", + "refresh": "새로고침", + "progressSync": "진행도 동기화", + "progressSyncHint": "KOReader 기기가 진행도, 독서 활동, 하이라이트, 필기 삭제 등을 BookOrbit과 동기화하도록 허용합니다.", + "lastSync": "최종 동기화 일시", + "syncedBooks": "동기화된 도서", + "bookCount": "{count, plural, =0 {없음} one {#권} other {#권}}", + "devices": "기기", + "deviceCount": "{count, plural, =0 {없음} one {#개 기기} other {#개 기기}}", + "credentialsCreatedLabel": "인증 정보 생성일", + "setup": "설정", + "pluginServerUrl": "플러그인 서버 URL", + "syncUrl": "KOReader 동기화 URL", + "syncUrlHint": "BookOrbit 플러그인 및 KOReader 기본 진행도 동기화 기능에 사용됩니다.", + "copied": "복사 완료", + "copyUrl": "URL 복사", + "preconfiguredPlugin": "사전 구성된 BookOrbit 플러그인", + "preconfiguredPluginHintPrefix": "서버 URL과 동기화 로그인 정보가 이미 설정된 zip 파일을 다운로드하세요. 이 플러그인은 카탈로그 탐색 기능과 동기화 기능을 포함합니다. 폴더를", + "preconfiguredPluginHintSuffix": "에 복사하고 KOReader를 재시작하세요.", + "latestPluginNote": "{label}. 기기 업데이트는 KOReader의 BookOrbit 메뉴에서 실행할 수 있습니다.", + "preparing": "준비 중...", + "downloadPlugin": "플러그인 다운로드", + "noDevicesSynced": "아직 동기화된 기기가 없습니다.", + "noDevicesSyncedHint": "전체 동기화를 위해서는 BookOrbit 플러그인을 설치하고, 진행도만 업데이트하려면 KOReader의 기본 진행도 동기화 기능을 설정하세요.", + "lastSyncLabel": "마지막 동기화:", + "lastBookLabel": "마지막으로 본 책:", + "noneYet": "아직 없음", + "pluginActivity": "플러그인 활동", + "noPluginActivity": "아직 보고된 플러그인 활동이 없습니다.", + "lastFullSync": "마지막 전체 동기화: {time}", + "latestPluginSuffix": "- 최신 플러그인 v{version}", + "matchedBooks": "매칭된 책", + "readingEvents": "독서 이벤트", + "highlights": "하이라이트", + "syncedTotals": "동기화 합계", + "trashedHighlights": "삭제된 하이라이트", + "pendingDeletes": "{count, plural, =0 {삭제된 하이라이트가 KOReader 플러그인 확인을 기다리는 항목 없음.} one {#개의 삭제된 하이라이트가 KOReader 플러그인 확인을 기다립니다.} other {#개의 삭제된 하이라이트가 KOReader 플러그인 확인을 기다립니다.}}", + "failedPositions": "{count, plural, =0 {하이라이트 위치에 주의할 부분이 없습니다.} one {# 개의 하이라이트 위치에 주의가 필요합니다.} other {# 개의 하이라이트 위치에 주의가 필요합니다.}}", + "setupGuide": "설치 가이드", + "setupSteps": "KOReader 설정 단계", + "setupStepsHint": "카탈로그 탐색, 다운로드, 진행도, 독서 이벤트, 하이라이트 기능을 사용하려면 BookOrbit 플러그인을 사용하세요. 진행도 추적 기능만 사용하려면 기본 탑재 플러그인을 사용하세요.", + "pluginGuideTitle": "BookOrbit 플러그인", + "pluginStep1": "상단의 사전 설정된 플러그인을 다운로드하세요.", + "pluginStep2Prefix": "압축을 해제하고", + "pluginStep2Middle": "을(를) 기기의", + "pluginStep2Suffix": "(으)로 복사하세요.", + "pluginStep3": "KOReader를 재시작하세요. 서버 정보와 로그인은 자동으로 설정됩니다.", + "pluginStep4Prefix": "동기화하려는 책을 검색하고 다운로드하려면", + "pluginStep4Suffix": "을(를) 열어 주세요.", + "stockGuideTitle": "기본 탑재 동기화 플러그인", + "stockStep1Prefix": "KOReader 기기에서 ", + "stockStep1Suffix": "(으)로 이동하세요.", + "stockStep2": "커스텀 동기화 서버를 상단에 표시된 URL로 설정하세요.", + "stockStep2InlineUrl": "커스텀 동기화 서버를 다음 URL로 설정하세요:", + "stockStep3": "생성했던 사용자 이름과 비밀번호를 입력하신 후, 로그인을 누르세요.", + "locationNote": "BookOrbit은 웹 리더에서 KOReader 호환 EPUB 독서 위치를 저장합니다. 정확한 줄 배치는 리더와 EPUB 레이아웃에 따라 달라질 수 있지만, 대부분의 경우 비슷한 위치로 복구됩니다.", + "dangerZone": "위험 구역", + "deleteCredentials": "KOReader 인증 정보 삭제", + "deleteCredentialsHint": "동기화 인증 정보를 제거하고 모든 기기와의 연결을 해제합니다. 독서 진행도는 보존됩니다.", + "credentialsDeleted": "KOReader 인증 정보가 삭제되었습니다.", + "deleteCredentialsFailed": "인증 정보 삭제에 실패했습니다.", + "deleteConfirmTitle": "KOReader 인증 정보를 삭제하시겠습니까?", + "deleteConfirmBody": "이 작업은 동기화 인증 정보를 제거하고 모든 KOReader 기기와의 연결을 해제합니다. 기존 진행도 데이터는 유지됩니다.", + "syncEnabled": "KOReader 동기화가 활성화되었습니다.", + "syncDisabled": "KOReader 동기화 비활성화되었습니다.", + "toggleSyncFailed": "동기화 여부 변경에 실패했습니다.", + "syncUrlCopied": "동기화 URL이 클립보드에 복사되었습니다.", + "syncUrlCopyFailed": "동기화 URL 복사에 실패했습니다.", + "statusRefreshed": "동기화 상태가 새로고침되었습니다.", + "refreshFailed": "새로고침에 실패했습니다.", + "pluginDownloaded": "플러그인 다운로드가 완료되었습니다. zip 파일 내부의 bookorbit.koplugin을 기기의 koreader/plugins/ 폴더로 복사해 주세요.", + "pluginDownloadFailed": "플러그인 다운로드에 실패했습니다.", + "hashLinks": { + "unmatchedTitle": "매칭되지 않은 KOReader 책", + "unmatchedBooks": "매칭되지 않은 책", + "manualTitle": "수동 KOReader 연결", + "refresh": "새로고침", + "link": "연결", + "change": "변경", + "unlink": "연결 해제", + "hash": "해시:", + "lastOpened": "마지막 열기:", + "firstSeen": "첫 번째 읽기:", + "lastSeen": "마지막 읽기:", + "linked": "연결:", + "updated": "업데이트:", + "linkedTo": "{title}와(과) 연결됨", + "loadingUnmatched": "매칭되지 않은 책 로딩 중...", + "loadingManual": "수동 해시 연결 로딩 중...", + "noUnmatched": "매칭되지 않은 KOReader 책이 없습니다.", + "noManual": "수동 KOReader 연결이 없습니다.", + "pageOf": "전체 {total}페이지 중 {page}페이지", + "showingRange": "전체 {total}개 중 {start}부터 {end}까지", + "unknownFile": "알 수 없는 KOReader 파일 {hash}", + "unknownAuthor": "알 수 없는 저자", + "noTitleOrAuthor": "제목이나 저자가 보고되지 않음", + "bookNumber": "BookOrbit 책 #{id}", + "toast": { + "unmatchedRefreshed": "매칭되지 않은 책이 새로고침되었습니다.", + "unmatchedRefreshFailed": "매칭되지 않은 책 새로고침에 실패했습니다/", + "manualRefreshed": "수동 해시 연결이 새로고침되었습니다.", + "manualRefreshFailed": "수동 해시 연결 새로 고침에 실패했습니다.", + "bookLinked": "책이 연결되었습니다.", + "linkUpdated": "연결이 업데이트되었습니다.", + "linkFailed": "책 연결에 실패했습니다.", + "linkRemoved": "연결이 제거되었습니다.", + "unlinkFailed": "책 연결 해제에 실패했습니다.", + "unmatchedDismissed": "매칭되지 않은 도서를 제거했습니다.", + "dismissFailed": "매칭되지 않은 책을 제거하는 데 실패했습니다.", + "allDismissed": "{count, plural, =0 {매칭되지 않은 책 제거됨} one {#권의 매칭되지 않은 책 제거됨} other {#권의 매칭되지 않은 책 제거됨}}", + "dismissAllFailed": "매칭되지 않은 책 전체를 제거하는 데 실패했습니다." + }, + "modal": { + "linkTitle": "KOReader 책 연결", + "changeTitle": "KOReader 연결 변경", + "bookOrbitBook": "BookOrbit 책", + "searchPlaceholder": "BookOrbit 라이브러리 검색", + "minChars": "최소 2자 이상 입력하세요.", + "searching": "검색 중...", + "noBooksFound": "검색된 책이 없습니다.", + "untitledBook": "제목 없는 책", + "selected": "선택됨", + "select": "선택", + "loadMore": "더보기", + "confirmTitle": "KOReader 연결 확인", + "koreader": "KOReader", + "bookOrbit": "BookOrbit", + "bookId": "책 ID: {id}", + "syncedStatsNote": "이미 동기화된 통계는 해당 BookOrbit 도서에 유지됩니다.", + "chooseDifferent": "다른 것을 선택하세요", + "saving": "저장 중...", + "confirmLink": "연결 확인", + "unlinkTitle": "KOReader 책 연결을 해제하시겠습니까?", + "unlinkBody": "이 해시가 향후 다시 연결될 때까지 {title}(으)로 동기화되지 않습니다. 이미 동기화된 통계는 BookOrbit 도서에 유지됩니다.", + "unlinking": "연결 해제 중..." + }, + "dismiss": "제거", + "dismissAll": "모두 제거", + "dismissing": "제거 중...", + "unlinking": "연결 해제 중...", + "unlinkConfirmTitle": "KOReader 책 연결을 해제하시겠습니까?", + "unlinkConfirmBody": "이 해시가 향후 다시 연결될 때까지 {title}(으)로 동기화되지 않습니다. 이미 동기화된 통계는 BookOrbit 도서에 유지됩니다.", + "dismissConfirmTitle": "{title}을(를) 제거하시겠습니까?", + "dismissConfirmBody": "이 작업은 해당 항목을 사용자의 매칭되지 않은 책 목록에서 제거합니다. 만약 다른 기기에서 이 해시가 다시 보고되면, 새로운 항목으로 다시 표시됩니다.", + "dismissAllConfirmTitle": "{count, plural, =0 {매칭되지 않은 책 없음} one {매칭되지 않은 책 #권을 모두 제거하시겠습니까?} other {매칭되지 않은 책 #권을 모두 제거하시겠습니까?}}", + "dismissAllConfirmBody": "이 기능은 현재 페이지뿐만 아니라 모든 '매칭되지 않은 책 목록'을 초기화합니다. 만약 다른 기기에서 이 해시 값들 중 하나가 다시 보고되면, 새로운 항목으로 다시 표시됩니다.", + "changeLinkTitle": "KOReader 연결 변경", + "linkBookTitle": "KOReader 책 연결", + "bookOrbitBook": "BookOrbit 책", + "searchLibraryPlaceholder": "BookOrbit 라이브러리 검색", + "enterMinChars": "최소 2자 이상 입력하세요.", + "searching": "검색 중...", + "noBooksFound": "검색된 책이 없습니다.", + "untitledBook": "제목 없는 책", + "selected": "선택됨", + "select": "선택", + "loadMore": "더보기", + "loadingMore": "로딩 중...", + "confirmLinkTitle": "KOReader 연결 확인", + "bookId": "책 ID: {id}", + "syncedStatsNote": "이미 동기화된 통계는 해당 BookOrbit 도서에 유지됩니다.", + "chooseDifferent": "다른 것을 선택하세요", + "saving": "저장 중...", + "confirmLink": "링크 확인" + }, + "remove": "삭제", + "removing": "삭제 중...", + "unmatchedBooks": "매칭되지 않은 도서", + "deviceRemoved": "기기 제거됨", + "removeDeviceFailed": "기기 제거 실패", + "removeDeviceConfirmTitle": "{device}을(를) 제거하시겠습니까?", + "removeDeviceConfirmBody": "이 작업은 이 기기에 동기화된 진행도, 독서 이벤트, 그리고 다른 기기에서 더 이상 보고되지 않는 모든 매칭되지 않은 책들을 영구적으로 삭제합니다. 나중에 기기가 다시 동기화되면, 해당 항목은 새로운 항목으로 다시 표시됩니다.", + "deleteDeviceDataConfirmTitle": "{device}에서 동기화 데이터를 삭제하시겠습니까?", + "deleteDeviceDataConfirmBody": "이 작업은 이 기기의 동기화된 진행도, 페이지별 독서 활동, 그리고 다른 기기에서 더 이상 보고되지 않는 매칭되지 않은 책들을 영구적으로 삭제합니다. 이미 통계에 반영된 독서 기록은 유지됩니다. 나중에 기기가 다시 동기화되면, 해당 항목은 새로운 항목으로 다시 표시됩니다.", + "devicesHint": "기기를 비활성화하면 해당 기기는 숨겨지지만 동기화된 모든 데이터는 유지됩니다. 기기 동기화 데이터 삭제는 되돌릴 수 없습니다.", + "retire": "비활성화", + "retiring": "비활성화 중...", + "restore": "복원", + "restoring": "복원 중...", + "deleteSyncedData": "데이터 삭제", + "deletingSyncedData": "삭제 중...", + "deviceRetired": "기기 비활성화됨", + "deviceRestored": "기기 복원됨", + "retireDeviceFailed": "기기 비활성화에 실패했습니다.", + "restoreDeviceFailed": "기기 복원에 실패했습니다.", + "retiredDevices": "{count, plural, one {비활성화된 기기 #개} other {비활성화된 기기 #개}}", + "retiredOnLabel": "비활성화됨" + }, + "opds": { + "title": "OPDS", + "subtitle": "OPDS와 호환되는 독서 앱 (KOReader, Thorium Reader 등)을 라이브러리에 연동하세요.", + "copy": "복사", + "loadFailed": "로드에 실패했습니다.", + "server": "서버", + "catalogServer": "OPDS 카탈로그 서버", + "catalogServerHint": "OPDS 클라이언트가 책을 탐색하고 다운로드할 수 있도록 허용", + "endpoint": "엔드포인트", + "accounts": "OPDS 계정", + "add": "추가", + "addAccount": "계정 추가", + "username": "사용자 이름", + "usernameLabel": "사용자 이름", + "usernamePlaceholder": "예: koreader", + "password": "비밀번호", + "passwordPlaceholder": "최소 8자", + "defaultSort": "기본 정렬", + "sortLabel": "정렬", + "creating": "생성 중...", + "create": "생성", + "noAccounts": "아직 생성된 OPDS 계정이 없습니다. OPDS 클라이언트를 사용하려면 계정을 생성해 주세요.", + "hideDetails": "상세 정보 숨기기", + "showDetails": "상세 정보 보기", + "copyUsername": "사용자 이름 복사", + "notes": "OPDS 주의사항", + "notesBody": "리더 앱에서 OPDS 계정을 사용하세요. 계정을 비공개로 유지하고, 실수로 공유된 경우 비밀번호를 변경하세요.", + "deleteConfirmTitle": "OPDS 계정을 삭제하시겠습니까?", + "deleteConfirmBody": "\"{username}\"을(를) 삭제합니다. 이 작업은 되돌릴 수 없습니다.", + "sortRecent": "최신순", + "sortTitleAsc": "제목 (A-Z)", + "sortTitleDesc": "제목 (Z-A)", + "sortAuthorAsc": "저자 (A-Z)", + "sortAuthorDesc": "저자 (Z-A)", + "sortSeriesAsc": "시리즈 (A-Z)", + "sortSeriesDesc": "시리즈 (Z-A)", + "serverEnabled": "OPDS 서버가 활성화되었습니다.", + "serverDisabled": "OPDS 서버가 비활성화되었습니다.", + "updateSettingsFailed": "OPDS 설정 업데이트에 실패했습니다.", + "urlCopied": "OPDS URL이 클립보드에 복사되었습니다.", + "urlCopyFailed": "OPDS URL 복사에 실패했습니다.", + "createUserFailed": "OPDS 사용자 생성에 실패했습니다.", + "userCreated": "OPDS 사용자 \"{username}\"이(가) 생성되었습니다.", + "sortOrderUpdated": "\"{username}\"의 정렬 순서가 업데이트되었습니다.", + "updateSortFailed": "정렬 순서 업데이트에 실패했습니다.", + "userDeleted": "OPDS 사용자 \"{username}\"이(가) 삭제되었습니다.", + "deleteUserFailed": "OPDS 사용자 삭제에 실패했습니다.", + "labelCopied": "{label} 복사 완료", + "copyLabelFailed": "{label} 복사 실패" + }, + "tabs": { + "general": "일반", + "ebook": "전자책", + "pdf": "PDF", + "comics": "만화", + "audio": "오디오북", + "fonts": "폰트" + } + }, + "system": { + "tabs": { + "file-naming": "파일 이름 명명", + "book-dock": "책 창고", + "maintenance": "유지보수", + "audit-log": "감사 로그" + } + }, + "nav": { + "title": "설정", + "ariaLabel": "설정 섹션 목록", + "searchPlaceholder": "설정 검색", + "clearSearch": "검색 초기화", + "noResults": "{query}와 일치하는 설정 항목 없음", + "shortcutHint": "설정으로 이동하려면 Cmd K 단축키를 눌러주세요", + "groups": { + "you": "개인", + "library": "라이브러리", + "devices": "기기 및 동기화", + "server": "서버" + }, + "descriptions": { + "profile": "이름, 이메일, 비밀번호 활성 세션 설정.", + "appearanceTheme": "테마, 강조색, 배경, 모서리 곡률 설정.", + "appearanceBookCovers": "표지 그림자, 책등 효과, 기본 표지 설정.", + "appearanceIcons": "앱 전체에서 사용되는 아이콘 스타일 선택.", + "appearanceLayout": "기본 라이브러리 보기, 밀도, 간격 설정.", + "appearanceBehavior": "탐색 및 정렬 시 라이브러리의 동작 방식 설정.", + "appearanceLanguage": "인터페이스 언어 및 지역별 포매팅 설정.", + "readerEbook": "전자책을 위한 폰트, 간격 및 페이지 동작 설정.", + "readerPdf": "렌더링, 배율, PDF 페이지 맞춤 설정.", + "readerComics": "만화 읽기 방향, 페이지 쌍 보기 방식 설정.", + "readerAudio": "재생 속도, 건너뛰기 간격, 수면 타이머 설정.", + "readerFonts": "독서 시 사용 가능한 폰트 설정.", + "readerGeneral": "모든 읽기 모드가 공유하는 기본값.", + "notifications": "BookOrbit 알림 및 알림 발생 위치 확인.", + "privacy": "독서 인사이트, 공유 링크, 활동 표시 여부 설정.", + "restrictions": "내 계정의 연령 등급 및 숨김 콘텐츠 설정.", + "libraries": "스캔 경로, 감시 폴더, 및 수집 규칙 설정.", + "fileNaming": "저장된 파일의 폴더 및 파일명 패턴 설정.", + "maintenance": "재스캔, 중복 항목, 고립된 데이터, 캐시 재구축.", + "kobo": "동기화 엔드포인트, 스토어 프록시, 선반 매핑.", + "koreader": "진행도 동기화, 문서 매칭.", + "opds": "서드파티 리딩 앱을 위한 카탈로그 피드.", + "email": "SMTP 전송, 기기 전송용 주소.", + "hardcover": "Hardcover와 독서 상태 및 리뷰 동기화.", + "users": "계정, 역할, 권한, 초대.", + "accountActivity": "사용자별 독서 기록, 세션 활동.", + "magicLinks": "비밀번호 없는 공유 및 로그인 링크", + "oidc": "SSO 제공자, 클레임, 프로비저닝.", + "serverFonts": "서버의 모든 리더에 적용되는 폰트.", + "bookDock": "책 페이지에 표시되는 빠른 작업.", + "auditLog": "누가 무엇을 언제 변경했는지 확인." + }, + "backToApp": "라이브러리로 돌아가기" + } + }, + "achievements": { + "title": "업적", + "tiersCount": "{earned} / {total} 티어", + "loadFailed": "업적 로드에 실패했습니다.", + "tryAgain": "다시 시도해보세요", + "noMatchFilter": "해당 필터에 맞는 업적이 없습니다.", + "secretAchievement": "비밀 업적", + "earnedOn": "{date} 획득", + "whileReading": "\"{title}\"을(를) 읽으면서", + "tierProgress": "{earned} / {total} 티어", + "progressToNext": "{current} / {threshold} 충족 시 {name} 달성", + "rarity": { + "common": "일반", + "rare": "희귀", + "epic": "특급", + "legendary": "전설" + }, + "filter": { + "all": "전체", + "earned": "획득 ({count})", + "inProgress": "진행 중 ({count})", + "locked": "잠김 ({count})" + } + }, + "adminFeature": { + "accountActivity": { + "title": "계정 활동", + "subtitle": "독서 기록을 제외한 계정 인증 활동을 검토하세요.", + "privacyNotice": "이 페이지는 로그인 및 인증 업데이트 기록만을 보고합니다. 독서 기록, 도서 진행도, 라이브러리 활동은 제공되지 않습니다.", + "privacyLabel": "계정 활동 개인정보 보호에 대해", + "never": "없음", + "openInsightsFor": "{name}의 공유 독서 인사이트 열기", + "permissionLabel": "사용자 활동 보기", + "states": { + "recent": "최근 활동 기록 있음", + "dormant": "휴면 상태", + "never": "활동 기록 없음", + "disabled": "비활성화 됨" + }, + "filters": { + "search": "계정 검색", + "searchPlaceholder": "이름 또는 사용자 이름 검색", + "state": "활동 상태", + "allStates": "모든 활동 상태", + "provisioning": "인증 방법", + "allMethods": "모든 인증 방법", + "sort": "계정 정렬", + "mostRecent": "활동일 최신순", + "leastRecent": "활동일 오래된 순", + "lastLogin": "최근 로그인한 순", + "newest": "최신 계정순", + "oldest": "오래된 계정순", + "name": "이름", + "apply": "적용", + "clear": "초기화" + }, + "methods": { + "local": "로컬", + "manual": "관리자 생성", + "oidc": "OIDC / SSO", + "shared": "공유 매직 링크" + }, + "columns": { + "user": "사용자", + "state": "계정 상태", + "lastLogin": "최근 로그인", + "lastAuthenticated": "최근 인증 방법", + "created": "생성일", + "readingInsights": "독서 인사이트" + }, + "sharing": { + "private": "공유되지 않음", + "summary": "일부 공유", + "detailed": "상세 공유" + }, + "empty": { + "title": "계정이 없습니다", + "description": "필터를 변경하거나 초기화해 보세요." + }, + "pagination": { + "label": "계정 활동 페이지", + "page": "{page} / {totalPages} 페이지" + }, + "errors": { + "load": "계정 활동 내역을 불러오는 데 실패했습니다." + } + }, + "sharedInsights": { + "title": "공유된 독서 인사이트", + "subtitle": "본 사용자가 자발적으로 공유하기로 선택한 정보입니다.", + "auditNotice": "이 프로필에 대한 접근 내역은 기록되며 사용자에게 표시됩니다.", + "period": "보고 기간", + "periodDays": "지난 {count}일", + "durationMinutes": "{count, plural, one {#분} other {#분}}", + "durationHours": "{count, plural, one {#시간} other {#시간}}", + "metrics": { + "sessions": "세션", + "readingTime": "독서 시간", + "activeDays": "활동일", + "started": "읽기 시작한 도서", + "completed": "전부 읽은 도서" + }, + "trend": "일일 독서 트렌드", + "emptyTitle": "해당 기간에 대한 독서 활동 기록이 없습니다.", + "noData": "해당 기간에 대한 측정 데이터가 없습니다.", + "sourceNames": { + "web": "웹 리더", + "koreader": "KOReader", + "manual": "수동", + "kobo": "Kobo", + "unknown": "알 수 없음" + }, + "formats": "포맷", + "genres": "장르", + "broadGenres": { + "science_fiction": "SF", + "fantasy": "판타지", + "mystery_thriller": "미스터리 및 스릴러", + "romance": "로맨스", + "horror": "공포", + "history_biography": "역사/전기/자서전", + "science_technology": "과학/기술", + "business_economics": "경영/경제", + "self_development": "자기계발", + "society_culture": "사회/문화", + "children_young_adult": "아동/청소년", + "comics_graphic_novels": "만화/그래픽 노블", + "poetry": "시", + "other": "기타" + }, + "sources": "데이터 소스", + "topBooks": "가장 많이 읽은 책", + "recentBooks": "최근 읽음", + "unknownTitle": "제목 없는 책", + "top": { + "authors": "좋아하는 작가", + "genres": "좋아하는 장르", + "series": "좋아하는 시리즈", + "narrators": "좋아하는 내레이터" + }, + "errors": { + "READING_INSIGHTS_PRIVATE": "이 사용자는 독서 인사이트를 공유하고 있지 않습니다.", + "READING_INSIGHTS_SUMMARY_ONLY": "이 사용자는 일부 인사이트만 공유합니다.", + "READING_INSIGHTS_VIEW_SESSION_REQUIRED": "프로필 보기 세션이 필요합니다.", + "READING_INSIGHTS_VIEW_SESSION_INVALID": "이 프로필 보기 세션이 만료되었거나 유효하지 않습니다.", + "LOAD_FAILED": "공유 독서 인사이트가 로드되지 않았습니다.", + "cleared": "이전에 로드된 프로필 정보가 표시되지 않습니다." + } + }, + "resetLink": { + "title": "비밀번호 재설정 링크", + "description": "사용자에게 이 링크를 공유해 주세요. 이 링크는 15분 후에 만료됩니다.", + "copy": "복사", + "copied": "복사되었습니다!", + "copyFailed": "복사 실패", + "notShownAgain": "이 링크는 다시 표시되지 않습니다." + }, + "userForm": { + "editUser": "사용자 편집", + "createUser": "사용자 생성", + "createSharedAccount": "공유 계정 생성", + "sharedBadge": "공유", + "active": "활성", + "suspended": "정지", + "tabs": { + "general": "일반", + "access": "접근", + "restrictions": "제한" + }, + "sharedAccount": "공유 계정", + "sharedAccountHint": "비밀번호가 필요하지 않습니다. 오직 매직 링크를 통해서만 접근이 가능합니다.", + "sharedAccountManageHint": "매직 링크 페이지에서 로그인 링크를 관리하세요.", + "username": "사용자 이름", + "fullName": "이름", + "email": "이메일", + "optional": "(선택)", + "libraryAccess": "라이브러리 접근 권한", + "noLibrariesSelected": "라이브러리가 선택되지 않았습니다. 사용자가 책을 열람할 수 없습니다.", + "permissions": "권한", + "presetStandard": "표준", + "presetAdmin": "관리자", + "presetClearAll": "초기화", + "permissionGroups": { + "content": "콘텐츠", + "devicesAccess": "기기 및 접근", + "email": "이메일", + "administration": "관리", + "notifications": "알림", + "restrictions": "제한" + }, + "superuserTarget": "슈퍼유저", + "superuserTargetHint": "슈퍼유저에게는 콘텐츠 제한을 적용할 수 없습니다.", + "noRestrictions": "콘텐츠 제한 없음", + "noRestrictionsHint": "이 사용자는 할당된 라이브러리의 모든 책에 대한 전체 접근 권한을 가집니다.", + "addRestrictions": "+ 콘텐츠 제한 추가", + "contentRestrictions": "콘텐츠 제한", + "remove": "삭제", + "includeTags": "포함 태그", + "includeTagsHint": "(이 태그가 포함된 책들만 표시합니다)", + "excludeTags": "제외 태그", + "excludeTagsHint": "(이 태그를 가진 책들을 숨깁니다)", + "includeGenres": "포함 장르", + "includeGenresHint": "(이 장르가 포함된 책들만 표시합니다)", + "excludeGenres": "제외 장르", + "excludeGenresHint": "(이 장르를 가진 책들을 숨깁니다)", + "searchTagsPlaceholder": "태그 검색...", + "searchGenresPlaceholder": "장르 검색...", + "saving": "저장 중...", + "errors": { + "updateUser": "사용자 업데이트에 실패했습니다.", + "updatePermissions": "권한 업데이트에 실패했습니다.", + "updateLibraryAccess": "라이브러리 접근 업데이트에 실패했습니다.", + "updateContentFilters": "콘텐츠 필터 업데이트에 실패했습니다.", + "emailRequired": "이메일이 필요합니다.", + "createSharedAccount": "공유 계정 생성에 실패했습니다.", + "createUser": "사용자 생성에 실패했습니다." + } + }, + "usersPage": { + "usersTitle": "사용자", + "usersSubtitle": "사용자 계정 및 권한 할당을 관리합니다.", + "createUser": "사용자 생성", + "columns": { + "name": "이름", + "username": "사용자 이름", + "email": "이메일", + "access": "접근 권한", + "status": "상태", + "actions": "작업", + "user": "사용자", + "libraries": "라이브러리", + "lastActive": "최근 활동" + }, + "adminBadge": "관리자", + "permissionCount": "{count, plural, =0 {권한 없음} one {1개 권한} other {#개 권한}}", + "filteredBadge": "필터링됨", + "contentRestrictionsActive": "콘텐츠 제한 활성화됨", + "statusActive": "활성", + "statusInactive": "비활성", + "lockedBadge": "잠김", + "unlockAccount": "계정 잠금 해제", + "unlockHint": "로그인 제한 해제", + "unlockAria": "{name} 잠금 해제", + "resetPassword": "비밀번호 재설정", + "resetPasswordOidcHint": "OIDC 사용자는 자신이 사용하는 인증 제공자에서 비밀번호를 재설정해야 합니다", + "resetPasswordSharedHint": "공유 계정에는 비밀번호가 없습니다", + "resetPasswordOidcHintFull": "OIDC 사용자는 자신이 사용하는 인증 제공자에서 비밀번호를 재설정해야 합니다.", + "resetPasswordSharedHintFull": "공유 계정에는 비밀번호가 없습니다.", + "deleteUserAction": "사용자 삭제", + "deleteDialogTitle": "사용자를 삭제하시겠습니까?", + "deleteDialogBody": "사용자 \"{username}\"을(를) 삭제합니다. 이 작업은 되돌릴 수 없습니다.", + "deleting": "삭제 중...", + "errors": { + "load": "로드에 실패했습니다.", + "deleteUser": "사용자 삭제에 실패했습니다.", + "resetPassword": "비밀번호 재설정 링크를 생성하는 데 실패했습니다.", + "unlock": "계정 잠금 해제에 실패했습니다." + }, + "selfRegistration": { + "title": "자유 회원가입", + "subtitle": "방문자가 자유롭게 계정을 생성할 수 있는지에 대한 여부를 제어합니다.", + "label": "자유 회원가입 허용", + "hint": "활성화 시 로그인 페이지에 계정 생성 페이지로 향하는 링크가 표시됩니다.", + "enabledNotice": "신규 계정은 아래의 기본 라이브러리 접근 권한만 가진 채 생성되며, 다른 권한은 없습니다. 보호된 기능을 사용하려면 권한을 부여해야 합니다.", + "loadError": "자유 회원가입 설정을 불러오는 데 실패했습니다.", + "saveError": "자유 회원가입 설정 업데이트에 실패했습니다." + }, + "defaultLibraryAccess": { + "title": "기본 라이브러리 접근 권한", + "subtitle": "자체 등록 사용자 및 OIDC를 통해 프로비저닝된 사용자에게 부여될 뷰어 접근 권한입니다.", + "description": "신규 사용자에게 자동으로 할당될 라이브러리를 선택하세요.", + "noLibraries": "라이브러리 없음.", + "save": "기본값 저장", + "saving": "저장 중...", + "saveError": "기본 라이브러리 접근 권한 저장에 실패했습니다." + }, + "filters": { + "search": "사용자 검색", + "searchPlaceholder": "이름, 사용자 이름, 이메일 검색", + "sort": "사용자 정렬", + "clear": "초기화", + "state": "사용자 필터", + "allUsers": "모든 사용자", + "admins": "관리자", + "active": "활성", + "inactive": "비활성" + }, + "empty": { + "title": "아직 사용자가 없습니다", + "description": "시작하려면 첫 번째 계정을 생성하세요.", + "filtered": "현재 검색어 및 필터 조건과 일치하는 사용자가 없습니다." + }, + "pagination": { + "label": "사용자 페이지네이션", + "page": "{page} / {totalPages} 페이지", + "showing": "총 {total}개의 계정 중 {shown}개 표시 중" + }, + "editUserAria": "{name} 편집", + "resetPasswordAria": "{name}의 비밀번호 재설정", + "deleteUserAria": "{name} 삭제", + "moreActionsAria": "{name}에 대한 추가 작업", + "headerSummary": "{count, plural, =0 {계정 없음} one {계정 #개} other {계정 #개}} · 관리자 권한 보유자 {admins}명", + "noEmail": "주소 없음", + "editAccount": "계정 편집", + "cardMeta": "{access} · {libraries} · {lastActive}", + "accessTier": { + "superuser": "슈퍼유저", + "admin": "관리자", + "standard": "표준", + "custom": "커스텀", + "none": "권한 없음" + }, + "libraries": { + "all": "총 {total}개", + "some": "총 {total}개 중 {granted}개" + }, + "statusLocked": "잠김", + "status": { + "never": "사용한 적 없음", + "neverSignedIn": "로그인한 적 없음", + "defaultPassword": "기본 비밀번호 사용 중", + "contentFiltered": "일부 콘텐츠 필터링됨", + "unlocksIn": "{when}에 잠금 해제됨" + }, + "attention": { + "title": "주의 필요", + "count": "{count, plural, one {#개 계정} other {#개 계정}}", + "filter": "{count, plural, one {#개 경고} other {#개 경고}}", + "more": "{count} 항목 추가 표시", + "reason": { + "locked": "{name}은(는) 너무 많은 로그인 실패로 인해 잠금 처리되었습니다.", + "neverSignedIn": "{name}은(는) 로그인 이력이 없습니다.", + "defaultPassword": "{name}은(는) 계정 생성 시 사용했던 비밀번호를 계속해서 사용하고 있습니다." + }, + "detail": { + "unlocksIn": "{when}에 자동 잠금 해제됨", + "created": "{when}에 생성됨", + "linkExpired": "{when}에 생성됨 · 로그인 링크가 만료되었습니다", + "linkValid": "{when}에 생성됨 · 로그인 링크는 {expiry}까지 유효합니다" + }, + "action": { + "unlock": "지금 잠금 해제", + "sendResetLink": "재설정 링크 보내기", + "sendNewLink": "새 링크 보내기" + }, + "collapse": "숨기기", + "expand": "보기" + }, + "defaults": { + "title": "신규 계정 기본값", + "appliesTo": "자유 회원가입 및 OIDC에 적용됩니다", + "startingLibraries": "시작 라이브러리", + "startingLibrariesHint": "모든 새 계정에 뷰어 접근 권한이 자동으로 부여됩니다." + } + } + }, + "annotations": { + "unknownBook": "알 수 없는 책", + "styles": { + "highlight": "하이라이트", + "underline": "밑줄", + "strike": "취소선", + "squiggle": "물결표", + "invert": "반전" + }, + "combobox": { + "filterByBook": "도서별 필터", + "allBooks": "모든 책", + "clearBookFilter": "책 필터 초기화", + "searching": "검색 중...", + "noBooksFound": "책이 없습니다" + }, + "bulk": { + "countSelected": "{count, plural, one {#개 선택됨} other {#개 선택됨}}", + "pageSelected": "페이지 선택됨", + "selectPage": "페이지 선택", + "clear": "초기화", + "recolorTo": "{color}(으)로 색상 변경", + "restyleTo": "{style}(으)로 스타일 변경" + }, + "chips": { + "active": "활성:", + "removeFilter": "{label} 필터 제거", + "clearAll": "전체 초기화" + }, + "filters": { + "colors": "색상", + "dateRange": "날짜 범위", + "fromDate": "시작일", + "toDate": "종료일", + "to": "~", + "clearDateRange": "날짜 범위 초기화", + "clearAll": "전체 초기화" + }, + "pagination": { + "showing": "전체 {total}개 항목 중 {start}-{end} 표시", + "pageOf": "{page} / {totalPages} 페이지", + "firstPage": "첫 페이지", + "previousPage": "이전 페이지", + "nextPage": "다음 페이지", + "lastPage": "마지막 페이지" + }, + "sync": { + "loading": "동기화 상세 정보 로딩 중", + "positions": "위치", + "devices": "기기", + "retryConversion": "변환 재시도", + "noStoredPositions": "저장된 위치 없음.", + "notSynced": "아직 기기와 동기화되지 않았습니다.", + "upToDate": "최신 상태", + "pendingVersion": "v{version} 대기 중", + "syncedAt": "{date}에 동기화됨", + "format": { + "webReader": "웹 리더", + "koreader": "KOReader", + "pdf": "PDF", + "kobo": "Kobo" + }, + "status": { + "exact": "정상", + "repaired": "복구됨", + "failed": "실패", + "pending": "대기 중" + } + }, + "toolbar": { + "searchPlaceholder": "텍스트 및 메모 검색", + "filters": "필터", + "sortOrder": "정렬 순서", + "switchToCompact": "모아 보기로 전환", + "switchToComfortable": "편하게 보기로 전환", + "compactView": "모아 보기", + "comfortableView": "편하게 보기" + }, + "listItem": { + "pageNumber": "p. {page}", + "chapterNumber": "{chapter}장", + "selectAnnotation": "필기 선택", + "collapse": "접기", + "expand": "펼치기", + "hideSyncDetail": "동기화 상세 정보 숨기기", + "showSyncDetail": "동기화 상세 정보 보기", + "exactPositionUnavailable": "정확한 리더 위치 정보 없음", + "saving": "저장", + "bookDetails": "도서 상세 정보", + "openInReader": "리더에서 열기", + "restore": "복원", + "deleteForever": "영구 삭제", + "editNote": "메모 편집", + "addNote": "메모 추가", + "colorAndStyle": "색상 및 스타일", + "copied": "복사됨", + "copyText": "텍스트 복사", + "trash": "휴지통", + "moveToTrash": "휴지통으로 옮기기" + }, + "hub": { + "title": "필기", + "totalCount": "총 {count}개", + "bookCount": "{count, plural, =0 {책 없음} one {책 #권} other {책 #권}}", + "noteCount": "{count, plural, =0 {메모 없음} one {메모 #개} other {메모 #개}}", + "export": "내보내기", + "exportMarkdown": "마크다운", + "exportCsv": "CSV", + "exportJson": "JSON", + "notesOnly": "메모만 보기", + "style": "스타일", + "source": "출처", + "bulkTrash": "휴지통", + "bulkRestore": "복원", + "tabs": { + "highlights": "하이라이트", + "trash": "쓰레기" + }, + "empty": { + "noMatch": "설정하신 필터에 맞는 하이라이트가 없습니다.", + "resetFilters": "필터 초기화", + "trashEmpty": "휴지통이 비어 있습니다", + "noAnnotations": "아직 필기가 없습니다. 웹 리더 또는 전자책 리더에서 생성한 하이라이트가 여기에 표시됩니다." + }, + "toast": { + "movedToTrash": "휴지통으로 이동되었습니다.", + "annotationRestored": "필기가 복원되었습니다.", + "annotationDeletedForever": "필기가 영구 삭제되었습니다.", + "failedToDelete": "삭제에 실패했습니다.", + "bulkTrashed": "{count, plural, =0 {0개 필기를 휴지통으로 이동했습니다.} one {#개 필기를 휴지통으로 이동했습니다.} other {#개 필기를 휴지통으로 이동했습니다.}}", + "bulkRestored": "{count, plural, =0 {0개 필기를 복원했습니다.} one {#개 필기를 복원했습니다.} other {#개 필기를 복원했습니다.}}", + "bulkRecolored": "{count, plural, =0 {0개 필기의 색상을 변경했습니다.} one {#개 필기의 색상을 변경했습니다.} other {#개 필기의 색상을 변경했습니다.}}", + "bulkRestyled": "{count, plural, =0 {0개 필기의 스타일을 변경했습니다.} one {#개 필기의 스타일을 변경했습니다.} other {#개 필기의 스타일을 변경했습니다.}}" + } + } + }, + "audit": { + "pageTitle": "감사 로그", + "pageSubtitle": "시스템 전반에서 수행된 관리자 중요 작업 기록", + "filters": "필터", + "noActiveFilters": "활성화된 필터 없음", + "clear": "초기화", + "empty": "감사 로그 없음", + "showMore": "더 보기", + "showLess": "접기", + "details": "상세 정보", + "hideDetails": "상세 정보 숨기기", + "refresh": "감사 로그 새로고침", + "loadError": "감사 이벤트를 로드할 수 없습니다.", + "removeFilter": "{value} 필터 제거", + "allActions": "모든 활동", + "allEventTypes": "모든 이벤트 유형", + "allActors": "모든 작업자", + "noActionsFound": "일치하는 작업이 없음", + "noActorsFound": "일치하는 작업자가 없음", + "noResourcesFound": "일치하는 대상 유형 없음", + "unknownAction": "알 수 없는 작업", + "unknownResource": "기타 대상 유형", + "allResources": "모든 자원", + "allTargetTypes": "모든 대상 유형", + "quickDates": "빠른 날짜 지정", + "today": "오늘", + "sevenDays": "7일", + "thirtyDays": "30일", + "userId": "사용자 #{id}", + "userIdCompact": "#{id}", + "targetAdditional": "and {count, plural, one {#개의 추가 대상} other {#개의 추가 대상}}", + "bookImpact": "{count, plural, one {책 #권} other {책 #권}}", + "entryDetailsLabel": "감사 이벤트 #{id}의 상세 정보", + "detailEventId": "이벤트 ID", + "detailOccurredAt": "발생일시", + "detailActor": "작업자", + "detailCategory": "카테고리", + "detailActionLabel": "작업", + "detailEventTypeLabel": "이벤트 유형", + "detailIpLabel": "IP 주소", + "detailResourceLabel": "자원", + "detailResourceIdLabel": "자원 ID", + "detailTargetTypeLabel": "대상 유형", + "detailTargetIdLabel": "대상 ID", + "detailAction": "작업: {value}", + "detailIp": "IP: {value}", + "detailResource": "자원: {value}", + "detailResourceId": "자원 ID: {value}", + "deletedBooks": "삭제된 책", + "deletedBookDetail": "{title} (책 #{id})", + "untitledBook": "제목 없음", + "deletedBooksOmitted": "{count, plural, one {# 추가된 책 1권이 누락되었습니다} other {# 추가된 책들 #권이 누락되었습니다}}", + "showing": "전체 {total}개 항목 중 {from}-{to} 표시 중", + "prev": "이전", + "chips": { + "search": "검색: {value}", + "action": "작업: {value}", + "eventType": "이벤트 유형: {value}", + "actor": "작업자: {value}", + "resource": "자원: {value}", + "targetType": "대상 유형: {value}", + "user": "사용자: {value}", + "from": "시작일: {value}", + "to": "종료일: {value}" + }, + "filterLabels": { + "search": "이벤트 검색", + "action": "작업", + "eventType": "이벤트 유형 (발생한 내용)", + "actor": "작업자", + "resource": "자원", + "targetType": "대상 유형 (영향을 받은 대상)", + "userId": "사용자 ID", + "from": "시작일", + "to": "종료일" + }, + "filterPlaceholders": { + "search": "설명, 작업자, 대상, ID", + "actor": "사용자 이름", + "action": "예시: auth.login", + "userId": "예시: 1" + }, + "columns": { + "when": "일시", + "actor": "작업자", + "event": "이벤트", + "target": "대상", + "impact": "영향", + "user": "사용자", + "action": "작업", + "description": "설명", + "ip": "IP" + }, + "categories": { + "authentication": "인증", + "books": "책", + "users": "사용자", + "libraries": "라이브러리", + "collections": "컬렉션", + "integrations": "통합", + "settings": "설정", + "other": "기타" + }, + "resourceLabels": { + "User": "사용자", + "Library": "라이브러리", + "Book": "책", + "Collection": "컬렉션", + "SmartScope": "스마트 스코프", + "BookDockFile": "책 창고 파일", + "Author": "작성자", + "AppSettings": "애플리케이션 설정", + "Genre": "장르", + "Tag": "태그", + "KoboDevice": "Kobo 기기", + "EmailProvider": "이메일 제공자", + "EmailTemplate": "이메일 템플릿", + "EmailRecipient": "이메일 수신자", + "EmailRecipientGroup": "이메일 수신자 그룹", + "Narrator": "내레이터", + "Publisher": "출판사", + "Language": "언어", + "Series": "시리즈", + "OidcIdentity": "OIDC 인증", + "MagicLinkToken": "매직 링크", + "ReadingInsightsProfile": "독서 인사이트 프로필" + }, + "actionLabels": { + "AuthRegister": "계정 등록", + "AuthLogin": "로그인", + "AuthLoginFailed": "로그인 실패", + "AuthLogout": "로그아웃", + "AuthPasswordChange": "비밀번호 변경", + "AuthPasswordResetRequest": "비밀번호 재설정 요청", + "AuthPasswordReset": "비밀번호 재설정", + "AuthPasswordAdminReset": "사용자 비밀번호 재설정", + "AuthSessionRevoke": "세션 만료", + "MagicLinkCreate": "매직 링크 생성", + "MagicLinkLogin": "매직 링크로 로그인", + "MagicLinkRevoke": "매직 링크 제거", + "MagicLinkActivate": "매직 링크 활성화", + "MagicLinkDeactivate": "매직 링크 비활성화", + "OidcLogin": "OIDC로 로그인", + "OidcUserProvisioned": "OIDC 사용자 프로비저닝", + "OidcIdentityLinked": "OIDC 인증 연결", + "OidcIdentityUnlinked": "OIDC 인증 연결 해제", + "UserCreate": "사용자 생성", + "UserUpdate": "사용자 업데이트", + "UserSelfUpdate": "프로필 업데이트", + "UserDelete": "사용자 삭제", + "UserPermissionSet": "사용자 권한 업데이트", + "UserSuperuserEnable": "슈퍼유저 권한 활성화", + "UserSuperuserDisable": "슈퍼유저 권한 비활성화", + "UserContentFiltersSet": "콘텐츠 필터 업데이트", + "UserUnlock": "계정 잠금 해제", + "ReadingInsightsSharingUpdate": "인사이트 공유 업데이트", + "ReadingInsightsProfileView": "공유 인사이트 확인", + "LibraryCreate": "라이브러리 생성", + "LibraryUpdate": "라이브러리 업데이트", + "LibraryDelete": "라이브러리 삭제", + "LibraryFolderAdd": "라이브러리 폴더 추가", + "LibraryFolderRemove": "라이브러리 폴더 제거", + "LibraryAccessGrant": "라이브러리 접근 권한 부여", + "LibraryAccessUpdate": "라이브러리 접근 권한 업데이트", + "LibraryAccessRevoke": "라이브러리 접근 권한 제거", + "LibraryWriteMetadataToFiles": "파일에 메타데이터 작성", + "LibraryBulkRename": "라이브러리 파일 이름 변경", + "BookUpload": "책 업로드", + "BookMetadataUpdate": "책 메타데이터 업데이트", + "BookMetadataLocksUpdate": "메타데이터 잠금 업데이트", + "BookDelete": "책 삭제", + "BookBulkMetadataRefresh": "책 메타데이터 갱신", + "BookBulkDelete": "책 삭제", + "BookBulkCoverReextract": "책 표지 재추출", + "BookBulkSetStatus": "책 상태 설정", + "BookBulkSetRating": "책 평점 설정", + "BookBulkSetMetadata": "책 메타데이터 설정", + "BookBulkUpdateTags": "책 태그 업데이트", + "BookBulkSetMetadataLock": "메타데이터 잠금 설정", + "BookBulkEditMetadata": "책 메타데이터 수정", + "BookBulkMoveLibrary": "책을 다른 라이브러리로 이동", + "BookReadingStateReset": "독서 상태 초기화", + "BookWriteAndRename": "메타데이터 작성 및 파일 이름 변경", + "CollectionCreate": "컬렉션 생성", + "CollectionUpdate": "컬렉션 업데이트", + "CollectionDelete": "컬렉션 삭제", + "CollectionBooksAdd": "컬렉션에 책 추가", + "CollectionBooksRemove": "컬렉션에서 도서 제거", + "SmartScopeCreate": "스마트 스코프 생성", + "SmartScopeUpdate": "스마트 스코프 업데이트", + "SmartScopeDelete": "스마트 스코프 삭제", + "BookDockFinalize": "책 창고 파일 확정", + "AuthorUpdate": "저자 업데이트", + "AuthorDelete": "저자 삭제", + "AuthorMerge": "저자 병합", + "AuthorEnrichmentConfigUpdate": "저자 정보 보강 업데이트", + "AuthorEnrichmentPause": "저자 정보 보강 일시 중지", + "AuthorEnrichmentResume": "저자 정보 보강 재개", + "AuthorEnrichmentCancel": "저자 정보 보강 취소", + "EntityManagerMerge": "개체 병합", + "EntityManagerRename": "개체 이름 변경", + "EntityManagerDelete": "개체 삭제", + "EntityManagerSplit": "개체 분할", + "EntityManagerDismiss": "중복 제거", + "EntityManagerUndismiss": "중복 제거 되돌리기", + "AppSettingsUpdate": "앱 설정 업데이트", + "KoboDeviceRegister": "Kobo 기기 등록", + "KoboDeviceRename": "Kobo 기기 이름 변경", + "KoboDeviceRemove": "Kobo 기기 제거", + "EmailProviderCreate": "이메일 제공자 생성", + "EmailProviderUpdate": "이메일 제공자 업데이트", + "EmailProviderDelete": "이메일 제공자 삭제", + "EmailProviderSetDefault": "기본 이메일 제공자 설정", + "EmailProviderSetSystem": "시스템 이메일 제공자 설정", + "EmailProviderClearSystem": "시스템 이메일 제공자 삭제", + "EmailTemplateCreate": "이메일 템플릿 생성", + "EmailTemplateUpdate": "이메일 템플릿 업데이트", + "EmailTemplateDelete": "이메일 템플릿 삭제", + "EmailTemplateSetDefault": "기본 이메일 템플릿 설정", + "EmailRecipientCreate": "이메일 수신자 생성", + "EmailRecipientUpdate": "이메일 수신자 업데이트", + "EmailRecipientDelete": "이메일 수신자 삭제", + "EmailRecipientGroupCreate": "수신자 그룹 생성", + "EmailRecipientGroupUpdate": "수신자 그룹 업데이트", + "EmailRecipientGroupDelete": "수신자 그룹 삭제", + "EmailRecipientGroupMemberAdd": "그룹에 수신자 추가", + "EmailRecipientGroupMemberRemove": "그룹에서 수신자 제거" + } + }, + "auth": { + "backToSignIn": "로그인 화면으로 돌아가기", + "themePicker": { + "switchToLight": "라이트 모드로 전환", + "switchToDark": "다크 모드로 전환", + "changeRadius": "모서리 곡률 변경", + "changeBackground": "배경 변경", + "changeAccent": "강조색 변경" + }, + "fields": { + "username": "사용자 이름", + "password": "비밀번호", + "email": "이메일", + "emailAddress": "이메일 주소", + "fullName": "이름", + "newPassword": "새 비밀번호", + "confirmPassword": "비밀번호 확인", + "confirmNewPassword": "새 비밀번호 확인", + "currentPassword": "현재 비밀번호", + "passwordHint": "최소 8자 이상, 대문자, 소문자, 숫자 포함해야 함" + }, + "errors": { + "generic": "오류가 발생했습니다. 다시 시도해 주세요.", + "passwordsDoNotMatch": "비밀번호가 일치하지 않습니다" + }, + "login": { + "subtitle": "사용자 계정으로 로그인하세요", + "signIn": "로그인", + "signingIn": "로그인 중...", + "orDivider": "또는", + "forgotPassword": "비밀번호를 잊어버리셨나요?", + "noAccount": "계정이 없으신가요?", + "signUp": "회원가입", + "registeredNotice": "계정이 생성되었습니다. 계속 진행하려면 로그인하세요. 라이브러리에 접근하려면 관리자가 권한을 부여해 주어야 합니다.", + "errors": { + "invalidCredentials": "사용자 이름 또는 비밀번호가 유효하지 않습니다", + "tooManyAttempts": "로그인 시도 횟수를 초과했습니다. 1분 뒤에 다시 시도해 주세요.", + "accountLocked": "비밀번호는 일치하지만, 너무 많은 로그인 실패 시도로 인해 이 계정이 일시적으로 잠겼습니다. {minutes, plural, one {#분} other {#분}} 후에 다시 시도하거나, 비밀번호를 재설정하여 잠금을 해제하세요." + } + }, + "oidc": { + "loginFailed": "OIDC 로그인 실패", + "redirecting": "리디렉션 중...", + "signInWith": "{provider}(으)로 로그인", + "completingSignIn": "로그인 작업을 완료하는 중...", + "tryAgain": "재시도", + "errors": { + "stateExpired": "로그인 세션이 만료되었습니다. 다시 로그인해 주세요.", + "tokenExchangeFailed": "인증 제공자를 통한 로그인에 실패했습니다. 다시 시도하거나 관리자에게 문의해 주세요.", + "userNotProvisioned": "계정이 설정되지 않았습니다. 접근을 위해서는 관리자에게 문의해 주세요.", + "userInactive": "사용자의 계정이 비활성화되었습니다. 관리자에게 연락해 주세요.", + "providerError": "인증 제공자에서 오류가 발생했습니다. 다시 시도해 주세요.", + "missingCodeOrState": "코드 또는 상태 매개변수 누락" + }, + "providerErrors": { + "accessDenied": "인증 제공자에 의해 접근이 거부되었습니다.", + "loginRequired": "인증이 필요합니다. 다시 로그인해 주세요.", + "interactionRequired": "추가적인 사용자 상호 작용이 필요합니다." + } + }, + "forgotPassword": { + "subtitle": "비밀번호 재설정", + "submitted": "해당하는 이메일 주소로 재설정 링크가 전송되었습니다. 받은 편지함을 확인해 주세요.", + "sending": "전송 중...", + "sendResetLink": "재설정 링크 보내기", + "errors": { + "emailUnavailable": "이메일을 통한 비밀번호 재설정 기능을 사용할 수 없습니다. 관리자에게 문의하세요." + } + }, + "resetPassword": { + "subtitle": "비밀번호 재설정", + "saving": "저장 중...", + "setNewPassword": "새 비밀번호 설정", + "errors": { + "invalidLink": "유효하지 않은 재설정 링크입니다. 새 링크를 요청해 주세요.", + "invalidOrExpired": "재설정 링크가 유효하지 않거나 만료되었습니다. 새 링크를 요청해 주세요." + } + }, + "register": { + "title": "계정 생성", + "subtitle": "시작하려면 가입해 주세요.", + "createAccount": "계정 생성", + "creatingAccount": "계정 생성 중...", + "haveAccount": "이미 계정이 있으신가요?", + "signIn": "로그인", + "errors": { + "closed": "이 서버에서는 자유 회원가입이 열려 있지 않습니다.", + "taken": "해당 사용자 이름 또는 이메일은 이미 사용 중입니다.", + "invalid": "입력하신 정보를 확인하고 다시 시도해 주세요.", + "tooManyAttempts": "시도 횟수가 너무 많습니다. 잠시 기다린 후 다시 시도해 주세요.", + "failed": "계정 생성에 실패했습니다.", + "username": { + "unsafeCharacters": "사용자 이름에는 숨겨진 문자나 텍스트 방향 문자가 포함될 수 없습니다.", + "untrimmed": "사용자 이름은 공백으로 시작하거나 끝날 수 없습니다." + }, + "name": { + "unsafeCharacters": "이름에는 숨겨진 문자 또는 텍스트 방향 문자가 포함될 수 없습니다.", + "untrimmed": "이름은 공백으로 시작하거나 끝날 수 없습니다." + } + } + }, + "setup": { + "title": "초기 설정", + "subtitle": "최초 관리자 계정을 생성하세요.", + "setupToken": "설치 토큰", + "setupTokenHint": "(프로덕션 환경에서 필수)", + "creatingAccount": "계정 생성 중...", + "createAccount": "관리자 계정 생성", + "errors": { + "failed": "설정 완료에 실패했습니다." + } + }, + "changePassword": { + "title": "비밀번호 변경", + "saving": "저장 중...", + "forcedNotice": "계속 진행하려면 새 비밀번호를 설정해야 합니다.", + "errors": { + "failed": "비밀번호 변경에 실패했습니다." + } + }, + "magicLink": { + "signingIn": "로그인 중...", + "loginFailed": "로그인 실패", + "goToLogin": "로그인 페이지로 이동", + "errors": { + "noToken": "토큰이 제공되지 않았습니다." + } + } + }, + "author": { + "card": { + "portraitAlt": "{name} 프로필 사진", + "viewDetails": "저자 상세 정보 보기", + "refreshMetadata": "메타데이터 갱신", + "deleteAuthor": "저자 삭제" + }, + "listRow": { + "noRecentAdditions": "최근 추가된 항목 없음", + "portraitAlt": "{name} 초상화" + }, + "filters": { + "title": "저자 필터", + "clearAll": "전체 초기화", + "allLibraries": "모든 라이브러리", + "allAuthors": "모든 저자", + "hasPhoto": "이미지 있음", + "missingPhoto": "이미지 없음", + "minBooks": "최소 권수", + "anyPlaceholder": "없음" + }, + "header": { + "never": "없음", + "portraitAlt": "{name} 프로필 사진", + "actions": "작업", + "editAuthor": "저자 편집", + "mergeAuthors": "저자 병합", + "refreshing": "갱신 중...", + "refreshMetadata": "메타데이터 갱신", + "deleteAuthor": "저자 삭제", + "showLess": "접기", + "showMore": "더 보기", + "lookingUpMetadata": "저자 메타데이터를 불러오는 중...", + "noBiography": "약력 정보가 없습니다. 메뉴에서 메타데이터를 갱신해 주세요.", + "previewFrom": "{provider} 데이터 미리보기. 유지하려면 메타데이터를 저장하세요.", + "booksLabel": "책", + "lastAdded": "마지막 추가일시", + "born": "출생", + "died": "사망", + "website": "웹사이트", + "genres": "장르", + "influences": "영향" + }, + "list": { + "title": "저자", + "showControlsAria": "저자 컨트롤 보기", + "searchPlaceholder": "저자 검색", + "sortButton": "정렬", + "sortBy": "정렬 기준", + "ascending": "오름차순", + "descending": "내림차순", + "asc": "오름차순", + "desc": "내림차순", + "filters": "필터", + "clear": "초기화", + "allLoaded": "저자 {total}명 로드 완료", + "sort": { + "name": "이름", + "sortName": "정렬 기준", + "bookCount": "도서 수", + "recentAdditions": "최근 추가된 항목", + "lastEnriched": "마지막 보강일시" + }, + "empty": { + "title": "저자 없음", + "hint": "검색어, 정렬, 라이브러리 필터를 변경해 보세요." + }, + "deleteDialog": { + "titleOne": "저자를 삭제하시겠습니까?", + "titleMany": "{count}명의 저자를 삭제하시겠습니까?", + "descriptionOne": "이 작업은 저자를 카탈로그에서 제거하고 관련 도서들과의 연결을 해제합니다. 이 작업은 되돌릴 수 없습니다.", + "descriptionMany": "이 작업은 선택된 저자들을 카탈로그에서 제거하고 관련 도서들과의 연결을 해제합니다. 이 작업은 되돌릴 수 없습니다." + }, + "selection": { + "selectVisible": "표시된 항목 선택", + "refreshMetadata": "메타데이터 갱신", + "refreshingMetadata": "메타데이터 갱신 중...", + "deleteSelected": "선택된 항목 삭제", + "deleting": "삭제 중...", + "exitSelection": "선택 취소", + "confirmDeleteCount": "{count, plural, =0 {저자 0명을 삭제하시겠습니까?} one {저자 #명을 삭제하시겠습니까?} other {저자 #명을 삭제하시겠습니까?}}" + }, + "toast": { + "refreshed": "저자 메타데이터를 갱신했습니다.", + "refreshedNoImage": "메타데이터를 갱신했지만, 저자 이미지는 찾지 못했습니다.", + "refreshFailed": "저자 메타데이터 갱신에 실패했습니다.", + "bulkRefreshPartial": "저자 {updated}명 갱신, {failed}명 실패", + "bulkRefreshSuccess": "저자 {updated}명의 메타데이터를 갱신했습니다.", + "bulkRefreshFailed": "선택된 저자들을 갱신하는 데 실패했습니다.", + "deleteSuccess": "{count, plural, =0 {저자 #명이 삭제되어, 책 {books}권이 영향을 받았습니다.} one {저자 #명이 삭제되어, 책 {books}권이 영향을 받았습니다.} other {저자 #명이 삭제되어, 책 {books}권이 영향을 받았습니다.}}", + "deleteFailed": "저자 삭제에 실패했습니다." + } + }, + "detail": { + "pageTitle": "저자", + "pageTitleNamed": "저자 · {name}", + "pageTitleId": "저자 #{id}", + "entityName": "저자", + "loadingAuthor": "저자 로딩 중...", + "previewError": "현재 외부 저자 미리보기 메타데이터를 로드할 수 없습니다.", + "edit": { + "name": "이름", + "sortName": "정렬 기준", + "description": "설명", + "image": "이미지", + "uploading": "업로드 중...", + "replaceImage": "이미지 교체", + "uploadImage": "이미지 업로드", + "removing": "삭제 중...", + "removeImage": "이미지 삭제", + "imageHint": "PNG/JPEG/WEBP/GIF/BMP (최대 {size} MB)", + "saving": "저장 중..." + }, + "merge": { + "searchPlaceholder": "이 저자에 통합할 저자 검색", + "searching": "검색 중...", + "bookCount": "{count, plural, =0 {책 없음} one {책 #권} other {책 #권}}", + "selectedSummary": "저자 {count}명 선택됨, 책 {books}권에 영향을 줄 것이라 예측됨.", + "merging": "병합 중...", + "mergeSelected": "선택된 항목 병합", + "confirmLabel": "병합" + }, + "mergeDialog": { + "title": "{count}명의 저자를 \"{name}\"에 병합하시겠습니까?", + "titleFallback": "선택된 저자를 통합하시겠습니까?", + "description": "선택된 저자들을 현재 저자와 병합하고 관련된 도서들을 재연결합니다. 이 작업은 되돌릴 수 없습니다.", + "descriptionEmpty": "이 작업은 되돌릴 수 없습니다." + }, + "deleteDialog": { + "title": "저자를 삭제하시겠습니까?", + "description": "이 작업은 저자를 카탈로그에서 제거하고 관련 도서들과의 연결을 해제합니다. 이 작업은 되돌릴 수 없습니다." + }, + "books": { + "heading": "도서", + "allLibraries": "모든 라이브러리", + "asc": "오름차순", + "desc": "내림차순", + "ascending": "오름차순", + "descending": "내림차순", + "allLoaded": "도서 총 {total}권 로드 완료", + "sort": { + "recentlyAdded": "최신순", + "title": "제목", + "publishedYear": "출판 연도" + }, + "empty": { + "title": "해당 저자의 도서가 없습니다", + "hint": "정렬/순서 설정을 변경하거나 다른 라이브러리를 선택해 보세요." + } + }, + "toast": { + "refreshed": "저자 메타데이터가 갱신되었습니다.", + "refreshedNoImage": "메타데이터는 갱신되었지만, 저자 이미지를 찾지 못했습니다.", + "refreshFailed": "저자 메타데이터 갱신에 실패했습니다.", + "nameRequired": "저자 이름이 필요합니다.", + "updated": "저자가 업데이트되었습니다.", + "updateFailed": "저자 업데이트에 실패했습니다.", + "imageUpdated": "저자 이미지가 업데이트되었습니다.", + "imageUploadFailed": "저자 이미지 업로드에 실패했습니다.", + "imageRemoved": "저자 이미지가 제거되었습니다.", + "imageRemoveFailed": "저자 이미지 제거에 실패했습니다.", + "mergeSuccess": "저자 {count}명을 병합하여, 책 {books}권에 영향을 미쳤습니다.", + "mergeFailed": "저자 병합에 실패했습니다.", + "deleteSuccess": "저자를 삭제하여, 책 {books}권에 영향을 미쳤습니다.", + "deleteFailed": "작성자 삭제에 실패했습니다." + } + } + }, + "book": { + "untitled": "제목 없음", + "unknownFormat": "알 수 없음", + "collapsedSeries": { + "label": "시리즈", + "bookCount": "{count, plural, =0 {책 없음} one {책 #권} other {책 #권}}", + "readCount": "{count}권 읽음" + }, + "card": { + "missing": "누락" + }, + "file": { + "primary": "기본", + "audiobook": "오디오북" + }, + "actions": { + "read": "읽기", + "listen": "듣기", + "peek": "미리보기", + "quickView": "빠른 보기", + "details": "상세 정보", + "bookDetails": "책 정보", + "download": "다운로드", + "metadata": "메타데이터", + "editMetadata": "메타데이터 수정", + "refreshMetadata": "메타데이터 갱신", + "regenerateCover": "표지 재생성", + "addToCollection": "컬렉션에 추가", + "setStatus": "상태 설정", + "sendViaEmail": "이메일로 보내기", + "rate": "평점 {star} 주기", + "openAs": "{format}(으)로 열기" + }, + "readStatus": { + "unread": "읽지 않음", + "wantToRead": "읽고 싶음", + "reading": "읽는 중", + "onHold": "보류 중", + "rereading": "다시 읽는 중", + "read": "읽음", + "skimmed": "훑어봄", + "abandoned": "버려짐" + }, + "download": { + "action": "다운로드", + "audiobookZip": "오디오북 (ZIP)", + "allFormatsZip": "모든 형식 (ZIP)", + "primaryOnlyZip": "기본 파일만 (ZIP)" + }, + "sort": { + "moveUp": "위로 이동", + "moveDown": "아래로 이동", + "ascending": "오름차순", + "descending": "내림차순", + "fields": { + "author": "저자", + "title": "제목", + "series": "시리즈", + "seriesIndex": "시리즈 번호", + "addedAt": "추가된 날짜", + "updatedAt": "업데이트 날짜", + "publishedDate": "출판일", + "publishedYear": "출판 연도", + "pageCount": "페이지 수", + "rating": "평점", + "publisher": "출판사", + "fileSize": "파일 크기", + "readProgress": "독서 진행도", + "readStatus": "독서 상태", + "format": "포맷", + "lastReadAt": "마지막 독서일시", + "startedAt": "시작일시", + "finishedAt": "완료일시", + "random": "랜덤", + "language": "언어", + "metadataScore": "메타데이터 점수", + "collectionOrder": "순서가 추가되었습니다." + }, + "customFieldsGroup": "커스텀 필드", + "customFieldFallback": "커스텀 필드", + "remove": "삭제", + "emptyState": "정렬 설정이 없습니다. 제목 오름차순으로 적용됩니다.", + "addLevel": "정렬 단계 추가" + }, + "filter": { + "match": "다음 규칙들 중", + "all": "전부", + "any": "일부", + "ofFollowingRules": "가 일치하는 경우", + "fields": { + "title": "제목", + "publisher": "출판사", + "language": "언어", + "series": "시리즈", + "seriesIndex": "시리즈 번호", + "publishedDate": "출판일", + "publishedYear": "출판 연도", + "pageCount": "페이지 수", + "author": "저자", + "genre": "장르", + "tag": "태그", + "collection": "컬렉션", + "library": "라이브러리", + "format": "포맷", + "addedAt": "추가된 날짜", + "startedAt": "시작일", + "finishedAt": "완료일", + "fileAvailability": "파일 사용 가능 여부", + "rating": "평점", + "communityRating": "커뮤니티 평점", + "readProgress": "독서 진행도", + "readStatus": "독서 상태", + "description": "설명", + "isbn": "ISBN", + "metadataScore": "메타데이터 점수", + "cover": "표지", + "lockStatus": "잠금 상태", + "seriesStatus": "시리즈 상태" + }, + "operators": { + "contains": "포함", + "notContains": "미포함", + "startsWith": "다음 텍스트로 시작", + "endsWith": "다음 텍스트로 종료", + "eq": "같다", + "notEq": "같지 않음", + "isEmpty": "비어 있음", + "isNotEmpty": "비어 있지 않음", + "gt": "초과", + "gte": "이상", + "lt": "미만", + "lte": "이하", + "between": "사이", + "includesAny": "다음 항목 중 일부 포함", + "includesAll": "다음 항목 중 전체 포함", + "excludesAll": "다음 항목 중 전체 미포함", + "before": "이전", + "after": "이후", + "withinLast": "특정 기간 내", + "isMissing": "누락됨", + "isPresent": "존재함", + "isUnread": "읽지 않음", + "isInProgress": "읽는 중", + "isFinished": "읽음", + "isLocked": "잠김", + "isUnlocked": "잠금 해제됨", + "isUpNext": "다음 권 존재", + "isTrue": "참", + "isFalse": "거짓" + }, + "customFieldsGroup": "커스텀 필드", + "customFieldFallback": "커스텀 필드", + "anyProvider": "모든 제공자", + "communityRatingProvider": "커뮤니티 평점 제공자", + "loadingLibraries": "라이브러리 로딩 중...", + "noLibrariesAvailable": "사용 가능한라이브러리 없음", + "selectLibrary": "라이브러리 선택...", + "selectStatus": "상태 선택...", + "withinLastPlaceholder": "예시: 7", + "unit": { + "days": "일", + "weeks": "주", + "months": "개월" + }, + "scorePreset": { + "outstanding": "탁월", + "good": "우수", + "fair": "적합", + "poor": "불량" + }, + "scoreRangePlaceholder": "0-100", + "valuePlaceholder": "값", + "maxPlaceholder": "최대", + "to": "~", + "group": "그룹", + "addRule": "규칙 추가", + "addGroup": "그룹 추가", + "typeToSearch": "검색어 입력..." + }, + "deleteDialog": { + "title": "책을 삭제하시겠습니까?", + "description": "이 책과 모든 메타데이터, 파일, 독서 진행 상황, 북마크를 영구적으로 삭제합니다. 이 작업은 되돌릴 수 없습니다." + }, + "bulkEdit": { + "title": "{count, plural, =0 {메타데이터 편집 - 책 #권} one {메타데이터 편집 - 책 #권} other {메타데이터 편집 - 책 #권}}", + "instructions": "편집할 필드를 선택한 다음, 값을 지정하세요. 선택된 필드만 변경됩니다.", + "invalidYear": "유효한 연도를 입력하세요.", + "clearWarning": "선택된 도서에서 모든 {field}를 제거합니다.", + "searchPlaceholder": "{field} 검색...", + "enterPlaceholder": "{field} 입력", + "yearPlaceholder": "예시: 2024", + "leaveEmptyHint": "선택된 책 전체에 적용하려면 이 필드를 비워두세요.", + "applying": "적용 중...", + "apply": "적용", + "mode": { + "add": "추가", + "remove": "삭제", + "replace": "교체", + "clear": "지우기" + } + }, + "export": { + "title": "메타데이터 내보내기", + "scope": "범위", + "selectedRows": "선택된 행", + "currentlySelected": "{count}개 선택됨", + "allMatchingRows": "모든 일치하는 행", + "rowsInResult": "현재 결과에 {count}개 행 존재", + "format": "형식", + "csvDescription": "스프레드시트 친화적, UTF-8 BOM 포함", + "jsonDescription": "메타데이터 컨텍스트를 포함한 구조화된 데이터", + "columns": "열", + "canonicalSchema": "안정적인 표준 스키마", + "visibleColumns": "현재 표시된 열", + "options": "옵션", + "includePersonalData": "개인 독서 기록 포함", + "includeFilePaths": "파일 경로 포함 (고급)", + "includeContextMeta": "컨텍스트 메타데이터 포함", + "preflight": "사전 점검", + "scopeLabel": "범위: {summary}", + "calculatingSize": "추출 데이터 크기 계산 중...", + "estimatedSize": "예상 크기:", + "fileLabel": "파일: {fileName}", + "exportAction": "내보내기", + "selectedRowsSummary": "{count, plural, =0 {#개의 선택된 행} one {#개의 선택된 행} other {#개의 선택된 행}}", + "matchingRowsSummary": "{count, plural, =0 {#개의 일치하는 행} one {#개의 일치하는 행} other {#개의 일치하는 행}}", + "prepareFailed": "내보내기 준비에 실패했습니다.", + "exportStarted": "메타데이터 내보내기 시작: {fileName}", + "exportFailed": "메타데이터 내보내기에 실패했습니다." + }, + "columnPanel": { + "columnsHeading": "열", + "reset": "재설정", + "tableDensity": "테이블 밀도", + "density": { + "compact": "좁게", + "comfortable": "편안하게", + "roomy": "넓게" + }, + "presets": "프리셋", + "exportBackup": "프리셋 및 저장된 보기 내보내기", + "importBackup": "프리셋 및 저장된 보기 가져오기", + "rename": "이름 바꾸기", + "renamePrompt": "새 이름 입력", + "builtIn": "내장", + "saveCurrentPreset": "현재 프리셋 저장", + "savedViews": "저장된 보기", + "savedViewsEmpty": "정렬, 레이아웃, 그리고 보기별 필터를 저장하여 빠르게 재사용할 수 있습니다.", + "saveCurrentView": "현재 보기 저장", + "pinnedLeft": "좌측 고정", + "pinnedRight": "우측 고정", + "columns": { + "cover": "표지", + "read": "독서", + "actions": "작업" + } + }, + "shortcuts": { + "title": "키보드 단축키", + "navigation": { + "title": "내비게이션", + "moveFocusVertical": "위/아래 포커스 이동", + "moveFocusHorizontal": "좌/우 포커스 이동", + "jumpFirstColumn": "첫 번째 열로 이동", + "jumpLastColumn": "마지막 열로 이동", + "jumpFirstRow": "첫 번째 행으로 이동", + "jumpLastRow": "마지막 행으로 이동" + }, + "actions": { + "title": "작업", + "editCell": "포커싱된 셀 편집", + "cancelEditing": "편집 취소 / 오버레이 닫기", + "toggleRowSelection": "행 선택 변경", + "copyCell": "셀 값 복사", + "copyRow": "선택된 행 복사" + }, + "general": { + "title": "일반", + "toggleHelp": "이 도움말 오버레이를 토글합니다" + } + }, + "jumpRail": { + "jumpToSection": "섹션으로 이동", + "jumpTo": "{label}(으)로 이동", + "unknownDate": "알 수 없는 날짜", + "unknownValue": "알 수 없는 값" + }, + "quickView": { + "title": "책 빠른 보기", + "titleFor": "{title} 빠른 보기", + "description": "책 상세 정보 미리보기 및 빠른 작업 실행", + "openIn": "{provider}에서 열기", + "pages": "{count, plural, =0 {#페이지} one {#페이지} other {#페이지}}", + "primaryFile": "기본 파일", + "fileNumber": "파일 #{id}", + "showLess": "접기", + "showMore": "더 보기", + "collections": "컬렉션", + "noDescription": "설명 없음.", + "openMetadataEditor": "메타데이터 편집기 열기", + "coverPreview": "책 표지 미리보기", + "coverPreviewFor": "{title} 표지 미리보기", + "coverPreviewDescription": "확대 커버 이미지 미리보기 대화 상자" + }, + "tableView": { + "openBookDetails": "책 상세 정보 열기", + "openSeries": "시리즈 열기", + "metadataRefreshFailed": "메타데이터 갱신 실패", + "booksSelected": "{count, plural, =0 {책 #권 선택됨} one {책 #권 선택됨} other {책 #권 선택됨}}", + "loadingMoreBooks": "추가 도서 불러오는 중", + "sort": "정렬", + "refreshingMetadata": "메타데이터 갱신 중 {processed} / {total}", + "failedCount": "{count}개 실패", + "remainingCount": "{count}개 남음", + "readOnlyNotice": "테이블 편집 기능은 작은 화면에서는 사용할 수 없습니다. 더 빠르고 편리한 작업을 위해 목록 또는 그리드 보기로 전환해 주세요.", + "fetching": "로딩 중...", + "updated": "업데이트됨", + "failed": "실패", + "noBooks": "표시할 책이 없음", + "scrollToTop": "맨 위로 스크롤", + "selectedStatus": "{count}개 항목 선택됨", + "filtered": "필터링됨", + "loadedStatus": "{loaded} / {total} 로드됨", + "bookCount": "{count, plural, =0 {#권} one {#권} other {#권}}", + "keyboardShortcutsTitle": "키보드 단축키 (?)", + "showKeyboardShortcuts": "테이블 키보드 단축키 보기", + "copyHint": "셀 복사: Ctrl/Cmd+C · 행 복사: Ctrl/Cmd+Shift+C" + }, + "detail": { + "authorBooks": { + "alsoByAuthor": "같은 저자가 쓴 작품", + "alsoByAuthors": "같은 저자들이 쓴 작품" + }, + "header": { + "previousBook": "이전 책", + "nextBook": "다음 책" + }, + "tabs": { + "details": "상세 정보", + "editMetadata": "메타데이터 수정", + "files": "파일", + "readingLog": "독서 기록", + "highlights": "하이라이트" + }, + "discover": { + "moreInSeries": "시리즈의 다른 작품", + "byAuthor": "저자의 다른 작품", + "similarBooks": "유사한 작품" + }, + "recommended": { + "moreLikeThis": "비슷한 작품" + }, + "series": { + "moreInSeries": "{series} 시리즈의 다른 작품" + }, + "writeRename": { + "written": "{count, plural, =0 {작성된 필드 없음} one {작성됨 (1개 필드)} other {작성됨 (#개 필드)}}", + "writeFailed": "쓰기 실패", + "skipped": "건너뜀", + "renamedTo": "{name}(으)로 이름 변경", + "fileRenamed": "파일 이름이 변경되었습니다.", + "renameFailed": "이름 변경 실패", + "autoWriteAndRenameDisabled": "라이브러리 설정에서 자동 쓰기 및 자동 이름 변경 기능이 비활성화되어 있습니다. 따라서 향후 저장 시 변경 사항이 자동으로 동기화되지 않습니다.", + "autoWriteDisabled": "라이브러리 설정에서 자동 쓰기 기능이 비활성화되어 있습니다. 따라서 향후 저장 시 변경 사항이 자동으로 동기화되지 않습니다.", + "autoRenameDisabled": "라이브러리 설정에서 자동 이름 변경 기능이 비활성화되어 있습니다. 따라서 향후 저장 시 변경 사항이 자동으로 동기화되지 않습니다.", + "writeLabel": "작성:", + "renameLabel": "이름 변경:" + }, + "addFile": { + "uploading": "업로드 중...", + "uploadComplete": "업로드 완료", + "title": "파일 추가", + "dropzone": { + "title": "이곳에 파일을 끌어다 놓거나, 클릭하여 탐색하세요", + "hint": "epub, pdf, mobi, cbz, m4b 등 (파일당 최대 {size} MB)" + }, + "addMore": "파일 추가", + "fileCount": "{count, plural, =0 {파일 없음} one {파일 1개} other {파일 #개}}", + "clearAll": "전체 지우기", + "done": "완료", + "retry": "재시도", + "filesAdded": "{count, plural, =0 {추가된 파일 없음} one {파일 1개 추가됨} other {파일 #개 추가됨}}", + "uploadedFailed": "{done} 업로드됨, {failed} 실패", + "uploadingProgress": "{done} / {total} 업로드 중...", + "renameAfter": "업로드 후 모든 책 파일 이름 변경", + "uploadCount": "({count})개 업로드", + "upload": "업로드" + }, + "addSession": { + "errors": { + "invalidDate": "유효한 날짜와 시간을 선택해 주세요.", + "future": "기록은 미래에 시작할 수 없습니다.", + "duration": "기간은 1분부터 1440분 사이여야 합니다.", + "endProgress": "최종 진행도 값은 0부터 100 사이의 범위여야 합니다." + }, + "title": "독서 기록 추가", + "startedAt": "시작일시", + "duration": "독서 시간 (분)", + "endProgress": "최종 진행도 %", + "optional": "선택", + "format": "포맷", + "noFormat": "포맷 지정 없음", + "saving": "저장 중...", + "submit": "기록 추가" + }, + "coverEditor": { + "unlockCover": "표지 잠금 해제", + "lockCover": "표지 잠금", + "fileTab": "파일", + "urlTab": "URL", + "chooseImage": "이미지 선택...", + "findCoverOnline": "온라인에서 표지 찾기", + "saving": "저장 중...", + "saveCover": "표지 저장", + "revertToOriginal": "원본으로 되돌리기", + "regenerateCover": "표지 재생성" + }, + "coverSearch": { + "title": "온라인 검색", + "subtitle": "책 표지 검색", + "titleField": "제목", + "authorField": "저자", + "sourceField": "소스", + "allSources": "모든 소스", + "audiobookCovers": "오디오북 표지", + "squareHint": "(정사각형)", + "searching": "검색 중", + "findCovers": "표지 찾기", + "selectCover": "표지 선택", + "noResultsTitle": "검색 결과 없음", + "noResultsHint": "검색어를 조정해 보세요", + "readyTitle": "검색 준비 완료", + "readyHint": "제목과 저자를 위에 입력해 주세요", + "resolutionTip": "팁: 고해상도 커버는 초록색으로 표시되어 있습니다." + }, + "details": { + "by": "저자:", + "narratedBy": "내레이터:", + "ratingLocked": "평점 잠김", + "rateStar": "{star}점 주기", + "listen": "듣기", + "read": "읽기", + "chooseFormat": "포맷 선택", + "audiobook": "오디오북", + "primary": "기본", + "peek": "미리보기", + "sendViaEmail": "이메일로 보내기", + "personalReview": { + "title": "개인 리뷰", + "toggleAria": "개인 리뷰 토글", + "editAria": "개인 리뷰 수정", + "placeholder": "비공개 리뷰", + "clearAria": "개인 리뷰 지우기", + "cancelEditAria": "개인 리뷰 수정 취소" + }, + "editCover": "표지 편집", + "finished": "완료됨", + "resetFileProgress": "파일 진행도 초기화", + "resetting": "초기화 중...", + "resetProgressConfirm": "{label}의 독서 진행도를 초기화하시겠습니까?", + "moreCount": "+{count}개 항목", + "untitled": "제목 없음", + "metadataScore": "메타데이터 점수", + "primaryFormat": "기본 포맷", + "openIn": "{provider}에서 열기", + "showLess": "접기", + "showMore": "더 보기", + "publisher": "출판사", + "published": "출판일", + "language": "언어", + "pages": "페이지", + "duration": "길이", + "edition": "판본", + "abridged": "축약됨", + "unabridged": "축약되지 않음", + "isbn": "ISBN", + "fileSize": "파일 크기", + "library": "라이브러리", + "added": "추가일시", + "cancelDateAddedEdit": "추가일시 수정 취소", + "editDateAdded": "추가일시 수정", + "dateStarted": "시작일", + "saving": "저장 중...", + "cancelDateStartedEdit": "시작일 수정 취소", + "editDateStarted": "시작일 수정", + "dateFinished": "완료일", + "cancelDateFinishedEdit": "완료일 수정 취소", + "editDateFinished": "완료일 수정", + "customMetadata": "커스텀 메타데이터", + "synopsis": "줄거리", + "noDescription": "설명 없음.", + "dateStartedFutureError": "시작일은 미래일 수 없습니다.", + "dateAddedRequiredError": "추가일시는 필수 항목입니다.", + "dateAddedFutureError": "추가일시는 미래일 수 없습니다.", + "dateFinishedFutureError": "완료일은 미래일 수 없습니다.", + "dateFinishedBeforeStartedError": "완료일은 시작일보다 같거나 이후여야 합니다.", + "dateFinishedBeforeStartedErrorWithDate": "완료일은 시작일({date})과 같거나 그 이후여야 합니다.", + "saveReadingDatesError": "독서 날짜 저장에 실패했습니다.", + "saveAddedDateError": "추가일시 저장에 실패했습니다.", + "koboPendingDelete": "기기에서 제거 대기 중", + "koboPendingDeleteTooltip": "Kobo가 다음 동기화 시 대상을 제거합니다.", + "koboRemovedByDevice": "기기에서 제거됨", + "koboRemovedByDeviceTooltip": "Kobo에서 이 책이 삭제되었다고 보고했습니다.", + "koboNotSynced": "동기화되지 않음", + "koboNotSyncedTooltip": "다음 Kobo 동기화를 위해 대기 중입니다.", + "filesNotFound": "파일을 찾을 수 없습니다.", + "filesNotFoundDescription": "해당 책의 파일이 더 이상 디스크에서 검색되지 않습니다. 메타데이터는 여전히 이용 가능합니다. 확인을 위해 라이브러리 스캔을 실행하거나, 이 항목을 삭제하세요.", + "resetHoldNotice": "{device}은(는) 여전히 이전 위치({percent})에 있습니다", + "resetHoldRelease": "이 기기의 독서 위치 사용", + "resetHoldReleasing": "적용 중...", + "resetHoldReleaseFailed": "해당 위치를 사용할 수 없습니다. 다시 시도해 주세요." + }, + "editMetadata": { + "fieldCount": "{count, plural, =0 {필드 없음} one {1개 필드} other {#개 필드}}", + "bookFilesTarget": "책 파일", + "formatFilesTarget": "{formats} 파일", + "noPrimaryFile": "기본 파일 없음", + "formatNotSupported": "이 파일 포맷은 다시 쓰기를 지원하지 않습니다.", + "formatDisabled": "이 포맷에서는 다시 쓰기 기능이 비활성화되어 있습니다.", + "fileExceedsSizeLimit": "해당 파일이 다시 쓰기 크기 제한을 초과했습니다.", + "writing": "작성 중...", + "saveInProgress": "진행도 저장", + "writeManualLibraryDisabled": "파일에 메타데이터를 기록하고 디스크에서 이름을 변경합니다. 이 라이브러리에서는 자동 다시 쓰기 기능이 비활성화되어 있습니다.", + "writeManualTooltip": "{fields}을(를) {target} 내부에 작성하고 디스크에서 이름을 변경합니다.", + "skippedLockedFields": "{count, plural, =0 {잠긴 필드 0개 건너뜀} one {잠긴 필드 #개 건너뜀} other {잠긴 필드 #개 건너뜀}}", + "updatedFields": "{count, plural, =0 {0개 필드 업데이트됨} one {1개 필드 업데이트됨} other {#개 필드 업데이트됨}}", + "wroteFieldsToFile": "{fields}을(를) 파일에 작성했습니다.", + "fileWriteFailedReason": "파일 쓰기 실패: {reason}", + "fileWriteFailed": "파일 쓰기에 실패했습니다.", + "fileWriteSkippedReason": "파일 쓰기 건너뜀: {reason}", + "fileWriteSkipped": "파일 쓰기를 건너뛰었습니다.", + "metadataSaved": "메타데이터가 저장되었습니다.", + "metadataWrittenToFile": "메타데이터가 파일에 작성되었습니다.", + "savedButWriteFailedReason": "메타데이터는 저장되었으나, 파일 쓰기에 실패했습니다: {reason}", + "savedButWriteFailed": "메타데이터는 저장되었으나, 파일 쓰기에 실패했습니다.", + "savedWriteSkippedReason": "메타데이터는 저장되었으나, 파일 쓰기를 건너뛰었습니다: {reason}", + "savedWriteSkipped": "메타데이터는 저장되었으나, 파일 쓰기를 건너뛰었습니다.", + "saveFailed": "변경 사항을 저장할 수 없습니다.", + "saveFailedWithStatus": "변경 사항을 저장할 수 없습니다. (HTTP {status})", + "loadFromFileFailed": "파일에서 메타데이터 로드에 실패했습니다.", + "loadedFieldsFromFile": "{count, plural, =0 {파일에서 0개 필드를 로드함} one {파일에서 1개 필드를 로드함} other {파일에서 #개 필드를 로드함}}", + "noMetadataInFile": "파일에서 메타데이터를 찾을 수 없습니다.", + "loadFromFile": "파일에서 불러오기", + "loadFromFileTooltip": "기본 책 파일에서 메타데이터 로드", + "writeToFile": "파일에 쓰기", + "autoFill": "자동 채우기", + "fetchingMetadata": "메타데이터를 불러오는 중...", + "allFieldsLocked": "모든 필드가 잠겨 있습니다", + "autoFillTooltip": "사용자의 메타데이터 설정을 사용하여 필드를 자동으로 채우기", + "lockAll": "모두 잠금", + "lockAllTooltip": "모든 필드 잠금", + "unlockAll": "모두 잠금 해제", + "unlockAllTooltip": "모든 필드 잠금 해제", + "saving": "저장 중...", + "fileWriteBackDetails": "파일 다시 쓰기 상세 정보", + "fileWriteBack": "파일 다시 쓰기", + "enabled": "활성화됨", + "saveWritesMetadata": "'저장' 버튼을 누르면 메타데이터를 {target}에 기록합니다.", + "formats": "포맷", + "bookFiles": "책 파일", + "supportedFields": "지원 필드", + "titleLabel": "제목", + "subtitleLabel": "부제목", + "authorsLabel": "저자", + "narratorsLabel": "내레이터", + "genresLabel": "장르", + "tagsLabel": "태그", + "ratingLabel": "평점", + "rateStar": "{star}점 주기", + "clear": "지우기", + "communityRatingsLabel": "커뮤니티 평점", + "noProviderRatings": "제공자 평점 없음", + "seriesLabel": "시리즈", + "publisherLabel": "출판사", + "languageLabel": "언어", + "yearLabel": "연도", + "pageCountLabel": "페이지 수", + "isbn13Label": "ISBN-13", + "isbn10Label": "ISBN-10", + "durationLabel": "길이 (초)", + "abridgedLabel": "축약 여부", + "providerIds": "제공자 ID", + "comicDetails": "만화 상세 정보", + "comicIssueNumberLabel": "호번", + "comicVolumeLabel": "권번", + "comicStoryArcsLabel": "스토리 아크", + "comicPencillersLabel": "콘티", + "comicInkersLabel": "선화", + "comicColoristsLabel": "채색", + "comicLetterersLabel": "식자", + "comicCoverArtistsLabel": "표지", + "comicCharactersLabel": "등장인물", + "comicTeamsLabel": "조직 및 단체", + "comicLocationsLabel": "장소", + "customMetadata": "커스텀 메타데이터", + "descriptionLabel": "설명", + "unlockField": "{field} 잠금 해제", + "lockField": "{field} 잠금", + "diffPanel": { + "untitled": "제목 없음", + "noFieldsSelected": "선택된 필드 없음", + "fieldsSelected": "{count, plural, =0 {0개 필드 선택됨} one {1개 필드 선택됨} other {#개 필드 선택됨}}", + "results": "결과", + "providerMatches": "{provider} 일치", + "selectedOf": "총 {total}개 항목 중 {selected}개 선택됨", + "yearUnknown": "연도 미상", + "indexOf": "{index} / {total}", + "switchedResult": "값이 교환되었습니다. 해당 제공자의 이전 값은 제거되었습니다.", + "selectFieldsToApply": "적용할 필드를 선택하세요.", + "copyMissing": "누락된 항목 복사", + "copyAll": "모두 복사", + "hideUnchanged": "미변경된 항목 숨기기", + "showUnchanged": "미변경된 항목 보기", + "current": "현재", + "noMetadata": "이 소스의 메타데이터를 사용할 수 없습니다.", + "noChangedFields": "변경되거나 누락된 필드가 없습니다. 모든 내용을 검토하려면 '미변경된 항목 보기'를 사용하세요.", + "applyToForm": "적용" + }, + "diff": { + "locked": "잠김", + "previewAlt": "미리보기", + "currentCoverAlt": "현재 표지", + "newCoverAlt": "새 표지", + "pickCoverFromProvider": "다른 제공자로부터 표지 선택", + "pickCoverSource": "표지 소스 선택", + "pickFromProvider": "다른 제공자로부터 선택", + "pickSource": "소스 선택", + "genreWriteMode": { + "label": "장르 적용 방법", + "merge": "병합", + "replace": "교체" + }, + "empty": "없음", + "showLess": "접기", + "showMore": "더 보기", + "coverPreviewAlt": "표지 미리보기" + }, + "searchDrawer": { + "searchTitle": "메타데이터 검색", + "compareTitle": "메타데이터 비교", + "searchSubtitle": "이 도서에 가장 적합한 제공자 데이터를 찾으세요.", + "compareSubtitle": "차이점을 검토한 뒤, 원하는 부분만 적용하세요." + }, + "searchPanel": { + "untitledQuery": "제목 없는 쿼리", + "titlePlaceholder": "제목", + "authorPlaceholder": "저자", + "isbnPlaceholder": "ISBN", + "searching": "검색 중...", + "activeQuery": "활성화된 쿼리", + "searchScope": "검색 범위", + "allEnabled": "모두 활성화됨", + "all": "모두", + "fieldRules": "필드 규칙", + "custom": "커스텀", + "providerNotInFieldRules": "{provider}은(는) 활성화되어 있지만 필드 규칙에 포함되어 있지 않습니다.", + "notInFieldRulesLabel": "필드 규칙에 포함되어 있지 않습니다:", + "notInFieldRulesText": "{providers}. 검색 범위가 '모두'인 수동 검색에는 포함되지만, 자동 메타데이터 가져오기에서는 사용되지 않습니다.", + "noResults": "검색 결과 없음", + "noResultsHint": "제목이나 저자 검색어를 조정해 보세요.", + "searchInterrupted": "검색이 완료되지 않았습니다", + "searchIncomplete": "일부 결과가 누락되었을 수 있습니다", + "providerTimedOut": "{provider}이(가) 응답하는 데 시간이 너무 오래 걸립니다.", + "providerThrottled": "{provider}이(가) 요청 한도를 초과했습니다. 잠시 기다린 후 다시 시도해 주세요.", + "providerFailed": "{provider}에 접근할 수 없습니다.", + "searchInterruptedHint": "다시 시도하거나 검색 범위를 좁혀보세요.", + "searchPrompt": "위에서 검색한 뒤, 결과를 클릭하여 메타데이터 비교를 시작하세요." + }, + "writeAndRename": "파일에 쓰기 및 이름 변경", + "writeAndRenameShort": "쓰기 및 이름 변경" + }, + "files": { + "title": "책 파일", + "fileCount": "{count, plural, =0 {파일 없음} one {#개 파일} other {#개 파일}}", + "synced": "{time} 동기화됨", + "sortAria": "파일 정렬", + "syncHistory": "동기화 기록", + "metadataWriteBack": "메타데이터 다시 쓰기", + "relative": { + "seconds": "{value}초 전", + "minutes": "{value}분 전", + "hours": "{value}시간 전", + "days": "{value}일 전" + }, + "renameFailed": "파일 이름 변경에 실패했습니다.", + "deleteFailed": "파일 삭제에 실패했습니다.", + "addFile": "파일 추가", + "lastSynced": "마지막 동기화: {time}", + "sort": { + "label": "정렬:", + "name": "이름", + "format": "포맷", + "size": "크기", + "date": "날짜" + }, + "hidePaths": "경로 숨기기", + "showPaths": "경로 보기", + "hideLog": "로그 숨기기", + "viewSyncLog": "동기화 로그 보기", + "noWriteHistory": "쓰기 기록이 아직 없습니다.", + "fieldsWritten": "{count, plural, =0 {필드 없음} one {1개 필드} other {#개 필드}}", + "track": "트랙 {number}", + "primary": "기본", + "read": "읽기", + "play": "재생", + "peek": "미리보기", + "download": "다운로드", + "moreActions": "추가 작업", + "rename": "이름 바꾸기", + "empty": { + "title": "첨부된 파일 없음", + "description": "이 책에는 관련 파일이 없습니다." + }, + "renameModal": { + "title": "파일 이름 바꾸기", + "description": "디스크상의 물리 파일 이름을 변경합니다.", + "placeholder": "새 파일 이름" + }, + "saving": "저장 중...", + "deleteModal": { + "title": "파일을 삭제하시겠습니까?", + "description": "\"{filename}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다." + }, + "deleting": "삭제 중..." + }, + "highlights": { + "note": { + "placeholder": "메모 추가", + "saving": "저장 중" + }, + "export": { + "trigger": "내보내기", + "plainText": "일반 텍스트", + "page": "페이지 내보내기", + "selected": "선택 항목 내보내기" + }, + "sort": { + "position": "위치", + "newest": "최신순", + "oldest": "오래된 순" + }, + "summary": { + "highlights": "{count, plural, =0 {\"하이라이트 없음\"} one {\"1개 하이라이트\"} other {\"#개 하이라이트\"}}", + "notes": "{count, plural, =0 {메모 없음} one {1개 메모} other {#개 메모}}", + "chapters": "{count, plural, =0 {챕터 없음} one {1개 챕터} other {#개 챕터}}" + }, + "filterByChapter": "챕터별 필터", + "allChapters": "모든 챕터", + "untitled": "제목 없음", + "trash": "휴지통", + "empty": { + "noMatch": "설정한 필터에 맞는 하이라이트가 없습니다.", + "resetFilters": "필터 초기화", + "none": "아직 하이라이트가 없습니다", + "hint": "독서 중 텍스트를 선택하여 하이라이트를 기록하세요." + }, + "uncategorized": "미분류", + "paginationUnit": "하이라이트" + }, + "readingLog": { + "moreActionsAria": "독서 기록 작업", + "export": { + "button": "내보내기" + }, + "weekdays": { + "sun": "일", + "mon": "월", + "tue": "화", + "wed": "수", + "thu": "목", + "fri": "금", + "sat": "토" + }, + "months": { + "jan": "1월", + "feb": "2월", + "mar": "3월", + "apr": "4월", + "may": "5월", + "jun": "6월", + "jul": "7월", + "aug": "8월", + "sep": "9월", + "oct": "10월", + "nov": "11월", + "dec": "12월" + }, + "heatmap": { + "minutesUnit": "분", + "title": "활동", + "empty": "이 섹션에 표시할 읽기 활동이 없습니다.", + "emptyHint": "이곳에 기록된 내용을 통해 사용자의 꾸준함 정도를 파악할 수 있습니다." + }, + "hero": { + "summaryAria": "독서 요약", + "notSet": "설정되지 않음", + "relative": { + "seconds": "{count}초 전", + "minutes": "{count}분 전", + "hours": "{count}시간 전", + "days": "{count}일 전", + "months": "{count, plural, =0 {#개월 전} one {#개월 전} other {#개월 전}}", + "years": "{count, plural, =0 {#년 전} one {#년 전} other {#년 전}}" + }, + "noSessions": "기록 없음", + "dateErrors": { + "startFuture": "시작일은 미래 날짜일 수 없습니다.", + "finishFuture": "완료일은 미래 날짜일 수 없습니다.", + "finishBeforeStart": "완료일은 시작일과 같거나 그 이후여야 합니다.", + "finishBeforeStartWithDate": "완료일은 시작일({date})과 같거나 그 이후여야 합니다.", + "saveFailed": "읽기 날짜 저장에 실패했습니다." + }, + "eta": { + "max": "완료까지 99시간 이상", + "minutes": "완료까지 ~{m}분", + "hours": "완료까지 ~{h}시간", + "hoursMinutes": "완료까지 ~{h}시간 {m}분" + }, + "momentum": { + "none": "지난 2주 동안 활동 없음", + "new": "이번 주에 새로운 활동이 있었음", + "up": "지난 7일 대비 +{pct}%", + "down": "지난 7일 대비 {pct}%", + "flat": "지난 7일 대비 변화 없음" + }, + "stats": { + "totalTime": "총 시간", + "sessions": "기록", + "avgSession": "평균 기록", + "lastRead": "최근 읽음" + }, + "firstRead": "처음 읽음", + "lastRead": "최근 읽음", + "dateStarted": "시작일", + "dateFinished": "완료일", + "addSession": "기록 추가" + }, + "journey": { + "tooltipProgress": "진행도", + "tooltipReading": "독서", + "minutesUnit": "분", + "title": "진행도 기록", + "empty": "이 섹션에 표시할 진행도 데이터가 없습니다.", + "emptyHint": "진행도는 독서 위치가 기록된 후에 표시됩니다." + }, + "sourceSplit": { + "title": "독서 소스", + "shortTitle": "소스" + }, + "untitled": "제목 없음", + "addSessionFailed": "기록 추가에 실패했습니다.", + "filters": { + "show": "보기", + "dateRangeAria": "독서 세션 날짜 범위", + "allTime": "모두", + "last30": "지난 30일", + "last90": "지난 90일", + "thisYear": "이번 년도", + "allFormats": "모든 포맷" + }, + "table": { + "title": "기록", + "sourceWeb": "웹", + "sourceManual": "수동", + "colDate": "날짜", + "colDateMobile": "날짜", + "colDuration": "기간", + "colDurationMobile": "기간", + "colProgressChange": "진행도 변화량", + "colProgressChangeMobile": "변화량", + "colEndProgress": "최종 진행도", + "colEndProgressMobile": "진행도", + "jumpToProgress": "{progress}%로 이동", + "empty": "아직 독서 기록이 없습니다.", + "emptyHint": "이 책의 독서 내역을 확인하려면 기록을 추가하세요.", + "colPace": "속도", + "colSource": "소스", + "colFormatMobile": "포맷", + "colFormat": "포맷", + "cancelDelete": "삭제 취소", + "cancelDeleteAria": "기록 삭제 취소", + "confirmDeleteTitle": "삭제하려면 다시 한 번 클릭하세요", + "confirmDeleteAria": "기록 삭제 확인", + "deleteAria": "기록 삭제", + "loadMore": "더 불러오기", + "showing": "총 {total}개 기록 중 {shown}개 표시됨" + } + }, + "richDescription": { + "linkProtocolError": "http, https 또는 mailto를 사용하세요.", + "bold": "두껍게", + "italic": "기울임", + "underline": "밑줄", + "strikethrough": "취소선", + "bulletList": "글머리 목록", + "numberedList": "번호 목록", + "outdentAria": "내어쓰기 리스트 아이템", + "outdent": "내어쓰기", + "indentAria": "들여쓰기 리스트 아이템", + "indent": "들여쓰기", + "quote": "인용문", + "editLink": "링크 수정", + "link": "링크", + "removeLink": "링크 제거", + "undo": "되돌리기", + "redo": "다시 실행", + "clearFormatting": "서식 제거", + "previewDescription": "미리보기 설명", + "preview": "미리보기", + "linkUrlLabel": "링크 URL", + "applyLink": "링크 적용", + "apply": "적용", + "cancelLink": "링크 취소", + "noDescription": "설명 없음." + }, + "seriesMembership": { + "addSeries": "시리즈 추가", + "seriesPlaceholder": "시리즈", + "moveUp": "위로 이동", + "moveDown": "아래로 이동", + "removeSeries": "시리즈 제거", + "seriesIndexLabel": "시리즈 번호", + "invalidSeriesIndex": "5.10과 같이 소수점이 최대 한 자리인 숫자를 입력하십시오.", + "totalLabel": "시리즈 도서 수", + "totalPlaceholder": "/", + "totalHint": "이 시리즈의 총 도서 수입니다. 이 시리즈를 보유한 모든 사용자에게 공유됩니다." + } + }, + "table": { + "actions": { + "quickView": "빠른 보기", + "bookDetails": "책 상세 정보", + "editMetadata": "메타데이터 수정", + "refreshMetadata": "메타데이터 갱신", + "addToCollection": "컬렉션에 추가", + "sendToDevice": "기기로 전송" + }, + "boolean": { + "ariaNotSet": "미설정 - 참으로 설정하려면 클릭", + "ariaTrue": "참 - 거짓으로 설정하려면 클릭", + "ariaFalse": "거짓 - 클릭하여 초기화" + }, + "chips": { + "addPlaceholder": "추가..." + }, + "cover": { + "previewDescription": "책 표지 미리보기", + "editDescription": "책 표지 편집", + "editTitle": "표지 편집", + "editCover": "표지 편집", + "view": "표지 보기" + }, + "date": { + "justNow": "방금" + }, + "format": { + "unknown": "알 수 없음" + }, + "header": { + "sortAscending": "오름차순 정렬", + "sortDescending": "내림차순 정렬", + "clearSort": "정렬 초기화", + "hideColumn": "열 숨기기", + "pinLeft": "좌측 고정", + "pinRight": "우측 지정", + "unpinColumn": "열 고정 해제", + "autoFitWidth": "너비 자동 맞춤", + "autoFitAllColumns": "모든 열 자동 맞춤", + "selectAllBooks": "모든 책 선택", + "shiftClickSecondarySort": "'Shift+클릭'으로 보조 정렬 추가", + "clickToSort": "클릭하여 정렬" + }, + "locks": { + "lockAll": "모든 필드 잠금", + "unlockAll": "모든 필드 잠금 해제", + "lockField": "필드 잠금", + "unlockField": "필드 잠금 해제", + "clickToLock": "클릭하여 잠금", + "clickToUnlock": "클릭하여 잠금 해제" + }, + "progress": { + "complete": "{percent}% 완료" + }, + "rating": { + "label": "평점", + "remove": "평점 삭제", + "rate": "5점 만점에 {star}점으로 평가" + }, + "read": { + "play": "재생", + "read": "읽기", + "primary": "기본", + "peekFormat": "{format} 미리보기", + "chooseFormat": "읽거나 재생할 형식을 선택하세요", + "fileFallback": "파일" + }, + "readStatus": { + "unread": "읽지 않음" + }, + "series": { + "bookCount": "{count, plural, =0 {(책 없음)} one {(책 #권)} other {(책 #권)}}", + "readOfCount": "{read} / {total}" + }, + "text": { + "openDetails": "상세 정보 열기" + } + }, + "move": { + "title": "{count, plural, one {책 #권 이동} other {책 #권 이동}}", + "subtitle": "파일을 디스크상에서 대상 라이브러리로 이동합니다. 이 작업으로 인해 해당 책들을 볼 수 없게 되는 사용자가 생길 수 있습니다.", + "searchPlaceholder": "라이브러리 검색", + "currentLibrary": "현재", + "folderCount": "{count, plural, one {폴더 #개} other {폴더 #개}}", + "continue": "계속", + "back": "뒤로", + "confirm": "{count, plural, one {책 #권 이동} other {책 #권 이동}}", + "action": "라이브러리로 이동", + "review": { + "ready": "{count}개 항목 준비됨", + "collisions": "{count, plural, one {이름 충돌 #건} other {이름 충돌 #건}}", + "ineligible": "{count}개 항목은 이동할 수 없습니다.", + "alreadyThere": "{count}개 항목이 이미 존재합니다.", + "collisionsHeading": "이름 충돌", + "ineligibleHeading": "이동 불가", + "moreCollisions": "+ {count}개 항목" + }, + "policy": { + "suggested": "추천 선택지 사용", + "keep_both": "둘 다 유지", + "merge": "병합", + "skip": "건너뛰기" + }, + "collision": { + "folder_path": "이미 이 폴더 이름을 사용하고 있는 책이 있습니다.", + "file_path": "이미 이 경로를 사용하고 있는 파일이 있습니다.", + "hash_duplicate": "동일한 사본이 이미 이 라이브러리에 존재합니다." + }, + "ineligible": { + "book_not_present": "해당 책의 파일이 누락되었습니다.", + "no_content_file": "이 책에는 읽을 수 있는 파일이 없습니다.", + "multi_file_target_per_file": "목적지 라이브러리는 단일 파일을 하나의 책으로 저장하지만, 이 책은 {detail}개의 파일을 가지고 있습니다.", + "no_source_access": "이 책이 속한 라이브러리는 편집할 수 없습니다.", + "pattern_unresolved": "대상 라이브러리에 사용할 수 있는 명명 패턴이 없습니다.", + "path_too_long": "목적지 경로가 너무 깁니다.", + "path_outside_target_root": "목적지 경로가 라이브러리 폴더 외부에 있습니다." + }, + "warning": { + "accessLoss": "더 이상 {user}님은 이 책들 중 {count}권을 볼 수 없게 됩니다", + "koboImpact": "{count}권의 책이 다음 동기화 시 {user}님의 Kobo에서 제거됩니다.", + "layout": { + "wrap_into_folder": "{count}권의 책이 각각 별도의 폴더에 배치됩니다.", + "dissolve_folder": "{count}개의 책 폴더가 단일 파일로 해체됩니다." + }, + "crossDevice": "파일이 다른 드라이브로 이동되므로 복사 후 무결성 검사가 완료된 뒤 파일이 제거됩니다." + }, + "progress": { + "label": "{library}(으)로 책 이동 중", + "failed": "{count}개 항목 실패" + }, + "done": { + "summary": "책 {count}권이 {library}(으)로 이동됨", + "merged": "{count}개 항목이 이미 존재하는 사본들과 병합됨", + "skipped": "{count}개 항목을 건너뜀", + "failed": "{count}개 항목 실패" + }, + "toast": { + "success": "{count}권의 책을 {library}(으)로 이동했습니다.", + "partial": "{moved}권 이동, {failed}건 실패" + } + } + }, + "bookMetadataFetch": { + "book": { + "title": "메타데이터 가져오기" + }, + "author": { + "title": "저자 정보 보강" + }, + "stats": { + "queued": "대기 중", + "processing": "처리 중", + "rateLimited": "사용량 제한", + "failed": "실패" + }, + "actions": { + "pause": "일시 정지", + "resume": "재개", + "cancelQueued": "대기 취소", + "dismissBookStatus": "메타데이터 가져오기 취소", + "dismissAuthorStatus": "저자 정보 보강 취소" + }, + "cancel": { + "processingWillFinish": "항목 처리가 진행 중이며 곧 완료될 예정입니다.", + "confirm": "취소", + "keepRunning": "계속 실행" + }, + "viewFailed": "{count, plural, one {1개 보기 실패} other {#개 보기 실패}}", + "card": { + "fetchingMetadata": "메타데이터 가져오는 중", + "enrichingAuthors": "저자 정보 보강 중", + "metadataFetchFinished": "메타데이터 가져오기 완료됨", + "authorEnrichmentFinished": "저자 정보 보강 완료됨" + }, + "label": { + "paused": "일시 정지됨", + "remaining": "{count}개 남음", + "processing": "{count}개 처리됨", + "failed": "{count}개 실패", + "rateLimited": "{count}개 사용량 제한에 걸림" + }, + "report": { + "bookTitle": "메타데이터 가져오기 실패", + "authorTitle": "저자 정보 보강 실패", + "noFailedItems": "실패 항목 없음.", + "retryAllFailed": "실패한 항목 모두 재시도", + "bookFallback": "책 #{id}", + "authorFallback": "저자 #{id}", + "columns": { + "title": "제목", + "library": "라이브러리", + "author": "저자", + "error": "오류", + "http": "HTTP" + } + }, + "toast": { + "failedToPause": "일시 정지에 실패했습니다.", + "failedToResume": "재개에 실패했습니다.", + "failedToCancel": "취소에 실패했습니다.", + "failedToRetry": "재시도에 실패했습니다.", + "failedItemsRequeued": "실패 항목이 대기열에 다시 추가되었습니다.", + "bookComplete": "메타데이터 가져오기 완료 - 책 {done}개 업데이트", + "bookDoneWithFailures": "메타데이터 가져오기 완료 - 책 {done}개 처리, {failed}개 실패", + "authorComplete": "저자 정보 보강 완료 - 저자 {done}명 업데이트", + "authorDoneWithFailures": "저자 정보 보강 완료 - 저자 {done}명 처리, {failed}명 실패" + } + }, + "bookDock": { + "apply": "적용", + "done": "완료", + "discard": "취소", + "deselect": "선택 해제", + "finalize": "확정", + "rescan": "재스캔", + "uploadAction": "업로드", + "uploading": "업로드 중...", + "searchPlaceholder": "파일 검색...", + "setDestinationAction": "목적지 설정", + "bulkEditAction": "일괄 편집", + "applyFetched": "가져온 데이터 적용", + "retryErrors": "실패한 항목 재시도", + "discardDialog": { + "title": "{count, plural, =0 {삭제할 파일이 없습니까?} one {선택한 파일을 삭제하시겠습니까?} other {선택한 #개 파일을 삭제하시겠습니까?}}", + "description": "{count, plural, =0 {선택한 파일이 없습니다.} one {선택한 파일을 디스크에서 삭제합니다. 이 작업은 되돌릴 수 없습니다.} other {선택한 #개 파일을 디스크에서 삭제합니다. 이 작업은 되돌릴 수 없습니다.}}", + "confirm": "{count, plural, one {파일 삭제} other {#개 파일 삭제}}", + "failed": "선택한 파일을 삭제하지 못했습니다. 다시 시도하십시오." + }, + "commaSeparated": "쉼표로 구분된 항목", + "destinationLibrary": "목적지 라이브러리", + "destinationFolder": "목적지 폴더", + "nFailed": "{count}개 실패", + "updatedOfFiles": "총 {total}개 파일 중 {updated}개 업데이트됨", + "errorStatus": "오류 {status}", + "invalidSeriesIndex": "5.10과 같이 소수점이 최대 한 자리인 숫자를 입력하십시오.", + "tab": { + "all": "모두", + "pending": "대기 중", + "ready": "준비됨", + "error": "오류" + }, + "status": { + "pending": "대기 중", + "extracting": "추출 중", + "fetching": "가져오는 중", + "ready": "준비됨", + "error": "오류" + }, + "field": { + "title": "제목", + "subtitle": "부제목", + "authors": "저자", + "authorsCommaSeparated": "저자 (쉼표로 구분)", + "publisher": "출판사", + "publishedDate": "출판일", + "year": "연도", + "language": "언어", + "isbn13": "ISBN-13", + "isbn10": "ISBN-10", + "series": "시리즈", + "seriesIndex": "시리즈 #", + "genres": "장르", + "genresCommaSeparated": "장르 (쉼표로 구분)", + "description": "설명" + }, + "upload": { + "nDone": "{count}개 완료", + "nFailed": "{count}개 실패", + "nTotal": "총 {count}개" + }, + "fileList": { + "emptyTitle": "책 창고에 파일이 존재하지 않음", + "emptyMessageDefault": "파일을 업로드하거나 책 창고 폴더에 복사하세요.", + "colCurrent": "현재", + "colNew": "신규", + "colFile": "파일", + "colSize": "크기", + "colFormat": "포맷", + "colMatch": "일치", + "colApply": "적용", + "colStatus": "상태", + "applyFetchedMetadata": "가져온 메타데이터 적용", + "coverPreview": "표지 미리보기", + "coverPreviewDescription": "확대된 표지 이미지 미리보기 대화 상자", + "currentCoverAlt": "{title}의 현재 표지", + "newCoverAlt": "{title}의 새로운 표지", + "unknownLibrary": "알 수 없는 라이브러리", + "unassigned": "미지정됨", + "targetPath": "대상: {library} · {path}", + "targetUnassigned": "대상: 미지정됨", + "targetUnknownPath": "대상: {library} · 알 수 없는 목적지 경로" + }, + "sheet": { + "saved": "저장됨", + "providerMetadataFound": "제공자 메타데이터 발견", + "providerMetadataFoundEdited": "제공자 메타데이터 확인됨 - 일괄 적용 시 이 파일은 건너뜁니다.", + "review": "검토", + "added": "{date} 추가됨", + "searchMetadata": "메타데이터 검색", + "results": "결과" + }, + "bulkEdit": { + "title": "{count, plural, =0 {0개 파일 일괄 편집} one {#개 파일 일괄 편집} other {#개 파일 일괄 편집}}", + "resultTitle": "일괄 편집 결과", + "instructions": "업데이트할 필드를 선택하세요. 활성화된 필드만 적용됩니다.", + "mergeArrays": "목록 병합 (값을 덮어쓰지 않고 기존 값에 추가함)", + "failed": "일괄 편집에 실패했습니다." + }, + "setDestination": { + "title": "{count, plural, =0 {0개 파일에 대한 목적지 설정} one {#개 파일에 대한 목적지 설정} other {#개 파일에 대한 목적지 설정}}", + "resultTitle": "목적지가 업데이트되었습니다.", + "failed": "목적지 설정에 실패했습니다." + }, + "finalizeDialog": { + "title": "{count, plural, =0 {파일 없음} one {#개 파일 완료} other {#개 파일 완료}}", + "resultTitle": "결과 확정", + "needDestination": "{count, plural, =0 {선택된 파일 #개 중 {without}개에 목적지 설정이 필요합니다} one {선택된 파일 #개 중 {without}개에 목적지 설정이 필요합니다} other {선택된 파일 #개 중 {without}개에 목적지 설정이 필요합니다}}", + "allHaveDestination": "선택된 모든 파일에 이미 목적지가 설정되어 있습니다.", + "defaultDestinationLibrary": "기본 목적지 라이브러리", + "defaultDestinationFolder": "기본 목적지 폴더", + "renamePreview": "이름 변경 미리보기", + "moreFiles": "+{count}개 파일", + "start": "시작", + "filesFinalized": "{total}개 파일 중 {succeeded}개 완료", + "checking": "선택된 파일을 확인하는 중...", + "readyCount": "{count, plural, =0 {0개 파일 준비됨} one {#개 파일 준비됨} other {#개 파일 준비됨}}", + "duplicateCount": "{count, plural, =0 {0개 항목이 라이브러리에 이미 존재함} one {#개 항목이 라이브러리에 이미 존재함} other {#개 항목이 라이브러리에 이미 존재함}}", + "conflictCount": "{count, plural, =0 {파일명 충돌 없음} one {#개 파일명 충돌} other {#개 파일명 충돌}}", + "missingDestinationCount": "{count, plural, =0 {누락된 목적지 없음} one {#개 목적지 누락됨} other {#개 목적지 누락됨}}", + "blockedCount": "{count, plural, =0 {차단된 파일 없음} one {#개 파일 차단됨} other {#개 파일 차단됨}}", + "moreDuplicates": "+{count}개 이상의 항목이 라이브러리에 이미 존재함", + "discardDuplicates": "중복 제거", + "failedCount": "{count, plural, =0 {실패한 파일 없음} one {#개 파일 처리 실패} other {#개 파일 처리 실패}}", + "failedWithDuplicates": "{count, plural, =0 {{failed}개 처리 실패 (#개 중복 항목)} one {{failed}개 처리 실패 (#개 중복 항목)} other {{failed}개 처리 실패 (#개 중복 항목)}}", + "view": "보기", + "viewExisting": "기존 항목 보기", + "hide": "숨기기", + "details": "세부 정보", + "alreadyExistsSaveAs": "이미 존재하는 항목 - 다른 이름으로 저장:", + "renamePlaceholder": "예시: {name} (2)", + "import": "가져오기" + }, + "layout": { + "pause": "일시 중지", + "resume": "재개", + "pauseUpdateFailed": "업데이트 일시 중지 실패", + "clearSearch": "검색 지우기", + "filter": { + "all": "전체", + "needsReview": "검토 필요", + "pending": "대기 중", + "ready": "준비됨", + "error": "오류" + }, + "working": { + "label": "{count}개 작동 중" + }, + "row": { + "select": "{title} 선택", + "setDestination": "목적지 설정", + "file": "파일", + "match": "{percent}% 일치", + "noAuthor": "아직 저자가 없습니다", + "proposedChanges": "제안된 변경 사항", + "noChanges": "아직 메타데이터를 불러오지 못했습니다", + "editDetails": "상세 정보 편집", + "noMatch": "매칭 없음", + "applied": "적용됨", + "refetch": "메타데이터 다시 가져오기", + "clickToZoom": "표지를 클릭하여 확대하세요", + "changedFields": "{count, plural, one {#개 필드} other {#개 필드}}", + "needMore": "제공자를 검색하거나 다른 필드를 편집하시겠습니까?" + }, + "selection": { + "fileToLibrary": "{count, plural, =0 {파일을 라이브러리로} one {파일 #개를 라이브러리로} other {파일 #개를 라이브러리로}}", + "nSelected": "{count}개 항목 선택됨", + "nReadyToFile": "{count}개 파일 준비됨" + }, + "empty": { + "nothingToReview": "검토할 항목이 없습니다. 준비된 모든 파일이 목적지와 정확한 매칭을 가지고 있습니다.", + "dropHint": "또는 이 페이지의 아무 곳에나 파일을 끌어다 놓으세요." + }, + "selectAllOnPage": "이 페이지의 모든 파일 선택", + "showingOf": "총 {total}개 항목 중 {shown}개", + "keyboardHint": "J / K로 이동 · Space로 선택 · Enter로 확장", + "allOnPageSelected": "이 페이지의 항목 총 {count}개가 선택되었습니다.", + "selectAllMatching": "{count}개의 일치 항목 모두 선택", + "allMatchingSelected": "일치 항목 총 {count}개가 선택되었습니다.", + "sort": { + "label": "정렬 기준", + "attention": "주의 필요", + "createdAt": "최근 추가된 순", + "fileName": "파일 이름순", + "fileSize": "크기순", + "format": "포맷순", + "status": "상태순" + }, + "conflict": { + "duplicate": "중복", + "destination_conflict": "경로 존재", + "invalid_target": "잘못된 대상", + "access_denied": "접근 불가", + "invalid_format": "포맷 오류", + "error": "실패" + } + } + }, + "collection": { + "dialog": { + "name": "이름", + "icon": "아이콘", + "iconPlaceholder": "아이콘을 선택하세요...", + "nameRequired": "이름이 필요합니다", + "iconRequired": "아이콘을 선택하세요", + "creating": "생성 중...", + "createFailed": "컬렉션 생성에 실패했습니다." + }, + "createDialog": { + "title": "새로운 컬렉션", + "namePlaceholder": "예시: 즐겨찾기" + }, + "editDialog": { + "title": "컬렉션 편집", + "syncToKobo": "Kobo와 동기화", + "syncToKoboHint": "이 컬렉션의 책들은 Kobo 기기에 표시됩니다", + "deleteCollection": "컬렉션 삭제", + "confirmDelete": "진행하시겠습니까?", + "deleting": "삭제 중...", + "saving": "저장 중...", + "deleted": "\"{name}\"이(가) 삭제되었습니다. ", + "updateFailed": "컬렉션 업데이트에 실패했습니다.", + "deleteFailed": "컬렉션 삭제에 실패했습니다." + }, + "addToSheet": { + "title": "컬렉션 관리", + "selectedCount": "{count, plural, =0 {선택된 책 없음} one {책 1권 선택됨} other {책 #권 선택됨}}", + "newCollection": "신규 컬렉션", + "namePlaceholder": "컬렉션 이름", + "create": "생성", + "collections": "컬렉션", + "empty": "컬렉션이 아직 없습니다. 상단 버튼을 클릭해 새로 만들어 주세요.", + "done": "완료", + "added": "추가됨", + "allAdded": "총 {total}개 추가됨", + "inCollection": "이 컬렉션에서", + "allInCollection": "이 컬렉션의 항목 총 {total}개", + "partialInCollection": "이 컬렉션의 항목 총 {total}개 중 {partial}개", + "bookCount": "{count, plural, =0 {책 없음} one {책 1권} other {책 #권}}", + "loadFailed": "컬렉션 로드에 실패했습니다.", + "createdAndAdded": "{count, plural, =0 {\"{name}\"을(를) 생성하고 0개의 책을 추가했습니다.} one {\"{name}\"을(를) 생성하고 1개의 책을 추가했습니다.} other {\"{name}\"을(를) 생성하고 #개의 책을 추가했습니다.}}", + "createdButAddFailed": "\"{name}\"을(를) 생성했으나 책 추가에 실패했습니다.", + "createFailed": "컬렉션 생성에 실패했습니다.", + "addedNewWithExisting": "{count, plural, =0 {\"{name}\"에 새 책 한 권이 추가되었습니다 ({alreadyHad}개 이미 존재함)} one {\"{name}\"에 새 책 한 권이 추가되었습니다 ({alreadyHad}개 이미 존재함)} other {\"{name}\"에 새 책 #권이 추가되었습니다 ({alreadyHad}개 이미 존재함)}}", + "addedToCollection": "{count, plural, =0 {\"{name}\"에 책 0권을 추가했습니다.} one {\"{name}\"에 책 1권을 추가했습니다.} other {\"{name}\"에 책 #권을 추가했습니다.}}", + "addFailed": "컬렉션에 추가하는 데 실패했습니다.", + "removedFromCollection": "{count, plural, =0 {\"{name}\"에서 책 0권을 제거했습니다.} one {\"{name}\"에서 책 1권을 제거했습니다.} other {\"{name}\"에서 책 #권을 제거했습니다.}}", + "removeFailed": "컬렉션에서 제거하는 데 실패했습니다" + } + }, + "components": { + "appHeader": { + "searchAllBooks": "전체 도서 검색...", + "searching": "검색 중...", + "noResults": "검색 결과 없음", + "loadingMore": "로딩 중...", + "loadMore": "더 불러오기 ({loaded}/{total})", + "allMatchesShown": "{count, plural, =0 {총 1개 항목 표시} one {총 1개 항목 표시} other {총 #개 항목 표시}}", + "bookCount": "{count, plural, =0 {책 없음} one {책 #권} other {책 #권}}", + "fileCount": "{count, plural, =0 {파일 없음} one {파일 #개} other {파일 #개}}", + "uploadedToast": "{uploaded}이(가) 업로드되었습니다.", + "uploadFailedToast": "{failed} 업로드에 실패했습니다.", + "uploadPartialToast": "{uploaded} 업로드됨, {failed} 실패", + "bookDock": "책 창고", + "statistics": "통계", + "achievements": "업적", + "annotations": "필기", + "uploadBooks": "책 업로드", + "appearance": "외형", + "appearanceDescription": "테마, 강조색, 모서리 곡률, 표면, 배경 옵션을 선택하세요.", + "theme": "테마", + "accent": "강조색", + "radius": "곡률", + "background": "배경", + "settings": "설정", + "whatsNew": "신규 기능", + "documentation": "문서", + "help": "도움말", + "starOnGithub": "GitHub 스타", + "new": "새로운 기능", + "newReleaseNotes": "새 릴리스 노트가 공개되었습니다", + "account": "계정", + "changePassword": "비밀번호 변경", + "signOut": "로그아웃", + "githubStar": { + "title": "BookOrbit 이용에 만족하시나요?", + "body": "BookOrbit이 라이브러리 관리에 도움이 되었다면, GitHub에서 이 프로젝트에 '스타'를 부탁드립니다. 이는 더 많은 사람이 앱을 발견하도록 돕고 지속적인 개발을 지원하는 데 도움이 됩니다.", + "cta": "GitHub에서 BookOrbit에 스타 주기" + }, + "surfaceOpacity": "표면 불투명도", + "surfaceOpacityValue": "{value}%", + "surfaceBrightnessValue": "{value}%" + }, + "sidebar": { + "dashboard": "대시보드", + "authors": "저자", + "series": "시리즈", + "tools": "도구", + "libraries": "라이브러리", + "newLibrary": "새 라이브러리", + "scanProgress": "{processed} / {total}", + "smartScopes": "스마트 스코프", + "newSmartScope": "새 스마트 스코프", + "noSmartScopes": "아직 스마트 스코프가 없습니다", + "collections": "컬렉션", + "newCollection": "신규 컬렉션", + "noCollections": "아직 컬렉션이 없습니다", + "newReleaseNotes": "새 릴리스 노트가 공개되었습니다", + "support": "BookOrbit 지원", + "supportAria": "BookOrbit을 Ko-fi에서 후원해 주세요", + "sectionHeader": { + "add": "추가", + "showAll": "모두 표시", + "showCount": "{count}개 항목 표시", + "rowsShown": "표시된 행", + "menuAria": "{section}에 대한 구역 옵션", + "reorder": "재정렬", + "doneReordering": "재정렬 완료" + }, + "noLibraries": "아직 라이브러리가 없습니다", + "clearFilter": "필터 지우기", + "filterSummary": "총 {total}개 항목 중 {shown}개 항목 표시됨", + "filterLibraries": "라이브러리 필터", + "filterLibrariesPlaceholder": "라이브러리 필터링...", + "filterSmartScopes": "스마트 스코프 필터링", + "filterSmartScopesPlaceholder": "스마트 스코프 필터...", + "filterCollections": "컬렉션 필터", + "filterCollectionsPlaceholder": "컬렉션 필터...", + "seeAllLibraries": "모든 라이브러리 보기 ({count})", + "seeAllSmartScopes": "모든 스마트 스코프 보기 ({count})", + "seeAllCollections": "모든 컬렉션 보기 ({count})", + "updateAvailable": "{version}(으)로 업데이트", + "updateTooltip": "{version} 업데이트 사용 가능", + "openUpdateRelease": "GitHub에서 {version} 릴리스 열기", + "zones": { + "browse": "탐색" + }, + "reorder": { + "gripAria": "{name} 재정렬", + "lifted": "{name}이(가) {position}/{total} 위치로 올라갔습니다. 옮기려면 화살표 키를 사용하세요.", + "moved": "{name}, {position}/{total} 위치", + "dropped": "{name}이(가) {position}/{total} 위치로 내려갔습니다.", + "cancelled": "재정렬 취소됨. {name}이(가) {position}/{total} 위치로 돌아갔습니다.", + "filteredHint": "필터를 초기화하려면 재정렬하세요" + } + }, + "selectionActionBar": { + "setReadingStatus": "독서 상태 설정", + "setRating": "평점 설정", + "openMetadataEditor": "메타데이터 편집기 열기", + "editIndividually": "개별 도서 편집", + "addToCollection": "컬렉션에 추가", + "removeFromCollection": "컬렉션에서 제거", + "sendViaEmail": "이메일로 보내기", + "downloadFilesZip": "ZIP 파일로 다운로드", + "moreActions": "추가 작업", + "setField": "필드 설정", + "refreshMetadata": "메타데이터 갱신", + "reExtractCover": "표지 재추출", + "metadataLock": "메타데이터 잠금", + "lockAll": "전체 잠금", + "unlockAll": "전체 잠금 해제", + "exportMetadata": "메타데이터 내보내기", + "deleteSelected": "선택 항목 삭제", + "exitSelection": "선택 취소", + "downloadFilesZipLabel": "ZIP 파일로 다운로드:", + "primaryOnly": "기본 포맷만", + "allFormats": "모든 포맷", + "audioOnly": "오디오만", + "setRatingLabel": "평점 설정:", + "clear": "지우기", + "setFieldLabel": "필드 설정:", + "apply": "적용", + "fieldPlaceholder": "공란으로 두면 초기화됩니다", + "fieldPlaceholderArray": "쉼표로 구분된 값 (공란으로 두면 초기화됨)", + "deleteConfirm": "{count, plural, =0 {책 #권을 삭제하시겠습니까?} one {책 #권을 삭제하시겠습니까?} other {책 #권을 삭제하시겠습니까?}}", + "typeDelete": "DELETE를 입력하세요" + }, + "viewHeader": { + "select": "선택", + "display": "표시", + "displayDescription": "표지 크기, 그리드 간격, 보기 디스플레이 옵션을 조정하세요.", + "columnVisibilityHint": "테이블 헤더의 열 표시 여부 패널에서 열을 표시하거나 숨길 수 있습니다.", + "columnVisibilityMobileHint": "테이블 헤더에서 열의 표시 여부를 설정할 수 있습니다.", + "searchPlaceholder": "제목, 저자, 시리즈, 내레이터 등 검색...", + "mobileSearch": { + "description": "제목, 저자, 시리즈, 내레이터별로 항목 검색.", + "done": "완료" + }, + "mobileMenu": { + "grid": "그리드", + "list": "목록", + "select": "선택", + "exitSelect": "선택 종료" + }, + "displayControls": { + "display": "디스플레이", + "coverSize": "표지 크기", + "gridGap": "그리드 간격", + "showJumpRails": "점프 레일 표시", + "columnsHint": "테이블 헤더의 열 표시 여부 패널을 사용하여 열을 표시하거나 숨길 수 있습니다.", + "coverShape": "표지 모양", + "circle": "원형", + "square": "정사각형" + } + }, + "iconPicker": { + "clearSelectionAria": "선택된 아이콘 지우기", + "searchLucide": "Lucide 아이콘 검색...", + "searchCustom": "커스텀 아이콘 검색...", + "chooseIcon": "아이콘을 선택하세요...", + "selectIcon": "아이콘 선택", + "customTab": "커스텀", + "searching": "검색 중...", + "noIconsMatch": "\"{query}\"와(과) 일치하는 아이콘 없음", + "typeToSearch": "전체 아이콘 검색", + "noCustomIcons": "커스텀 아이콘 없음", + "noIconsAvailable": "아이콘 없음" + }, + "entityNotFound": { + "title": "{entity}을(를) 찾을 수 없습니다", + "description": "이 {entity}은(는) 존재하지 않거나 삭제되었습니다.", + "goBack": "뒤로 가기" + }, + "themePicker": { + "light": "라이트", + "dark": "다크", + "system": "시스템" + }, + "radiusPicker": { + "sharp": "각진 모서리", + "default": "기본 모서리", + "rounded": "둥근 모서리", + "pill": "캡슐형 모서리" + }, + "languagePicker": { + "searchPlaceholder": "언어 검색", + "suggested": "추천", + "all": "모든 언어", + "results": "결과", + "empty": "\"{query}\"와(과) 일치하는 언어 없음" + }, + "userAvatar": { + "profilePicture": "프로필 사진", + "profilePictureOf": "{name} 프로필 사진" + }, + "ui": { + "sidebar": { + "title": "사이드바", + "mobileDescription": "모바일 사이드바를 표시합니다.", + "toggle": "사이드바 토글" + }, + "chipInput": { + "typeAndEnter": "추가하려면 내용을 입력하고 엔터 키를 누르세요", + "pressEnter": "추가하려면 엔터 키를 누르세요" + } + }, + "entityIndex": { + "sortBy": "정렬 기준", + "sort": { + "custom": "커스텀 순서", + "name": "이름", + "bookCount": "책 개수" + }, + "ascending": "오름차순", + "descending": "내림차순", + "clearSearch": "검색 초기화", + "resultCount": "{shown} / {total}", + "noMatches": "일치하는 항목 없음", + "noMatchesHint": "다른 검색어를 사용해 보세요.", + "bookCount": "책 개수: {count}개", + "librariesEmptyHint": "책을 추가하려면 라이브러리를 만들어 주세요.", + "smartScopesEmptyHint": "스마트 스코프는 자주 사용하는 필터를 기억합니다.", + "collectionsEmptyHint": "컬렉션은 사용자가 직접 고른 책들을 그룹화합니다." + } + }, + "customIcons": { + "dialogTitle": "커스텀 아이콘 업로드", + "dialogDescription": "라이브러리에 추가하기 전 이름을 확인해 주세요.", + "readingFiles": "파일 읽는 중...", + "dropPrompt": "SVG 파일을 끌어다 놓거나, 이곳을 클릭하여 탐색하세요", + "fileLimit": "최대 {max}개 파일, 파일당 128KB까지 허용", + "namePlaceholder": "이름", + "nameRequired": "이름이 필요합니다", + "invalidSvg": "유효하지 않은 SVG", + "invalidSvgFile": "유효하지 않은 SVG 파일", + "identicalTo": "\"{name}\"와(과) 동일함", + "uploadAnyway": "계속 업로드", + "skipThisOne": "이 항목은 건너뛰기", + "readyToUpload": "{count}개 항목 업로드 준비 완료", + "noIconsStaged": "아직 준비된 아이콘이 없음", + "uploading": "업로드 중...", + "upload": "업로드", + "uploadCount": "{count}개 항목 업로드", + "onlySvgSupported": "SVG 파일만 지원됩니다.", + "maxStaged": "한 번에 최대 {max}개의 아이콘을 불러올 수 있습니다.", + "onlyMoreCanStage": "{count, plural, =0 {더 이상 아이콘을 불러올 수 없습니다.} one {#개의 아이콘만 추가로 불러올 수 있습니다.} other {#개의 아이콘만 추가로 불러올 수 있습니다.}}", + "readFailed": "SVG 파일을 읽는 데 실패했습니다.", + "uploadedCount": "{count, plural, =0 {업로드된 아이콘이 없습니다.} one {#개 아이콘을 업로드했습니다.} other {#개 아이콘을 업로드했습니다.}}", + "uploadedPartial": "{created}개 업로드됨, {failed}개 실패", + "noIconsUploaded": "아이콘이 업로드되지 않았습니다.", + "uploadFailed": "아이콘 업로드에 실패했습니다.", + "uploadFailedEntry": "업로드에 실패했습니다." + }, + "dashboard": { + "common": { + "failedToLoad": "로드에 실패했습니다.", + "retry": "재시도", + "untitled": "제목 없음", + "cover": "표지", + "bookCover": "책 표지" + }, + "libraryLoad": { + "errorTitle": "라이브러리를 로드할 수 없습니다", + "errorDescription": "BookOrbit에서 사용자님의 라이브러리를 불러오는데 실패했습니다. 라이브러리 데이터는 삭제되지 않았습니다." + }, + "scroller": { + "failedToLoad": "로드에 실패했습니다.", + "empty": { + "continueReading": "현재 읽고 있는 책이 없습니다. 책을 읽기 시작하면 이곳에 표시됩니다.", + "continueListening": "현재 듣고 있는 오디오북이 없습니다. 오디오북을 재생하시면 이곳에 표시됩니다.", + "wantToRead": "아직 '읽고 싶음'으로 표시된 책이 없습니다.", + "upNextInSeries": "아직 표시할 시리즈 후권이 없습니다. 현재 권을 다 읽은 뒤에 다음 권이 표시됩니다.", + "recentlyAdded": "아직 라이브러리에 책이 없습니다.", + "smartScope": "이 스마트 스코프와 일치하는 책이 없습니다.", + "default": "검색된 책이 없습니다." + } + }, + "settings": { + "title": "대시보드 사용자 정의", + "tabs": { + "widgets": "위젯", + "shelves": "선반" + }, + "widgetNames": { + "readingStreak": "출석", + "currentlyReading": "읽고 있는 책", + "readingGoal": "독서 목표", + "readingDna": "독서 DNA", + "monthlyChallenge": "월간 챌린지", + "highlightOfTheDay": "오늘의 하이라이트", + "neglectedGems": "빛 바랜 보석", + "readingRhythm": "독서 리듬", + "diversityScore": "다양성 점수", + "libraryOverview": "라이브러리 요약", + "yearProjection": "연간 전망", + "longWait": "기다리는 책" + }, + "shelfNames": { + "recentlyAdded": "최근 추가된 책", + "continueReading": "이어서 읽기", + "continueListening": "이어서 듣기", + "wantToRead": "읽고 싶은 책", + "upNextInSeries": "시리즈의 다음 이야기", + "random": "새로운 책 찾아보기", + "smartScope": "스마트 스코프" + }, + "shelfLayout": { + "title": "선반 레이아웃", + "description": "넓은 화면에서 선반이 어떻게 배열될지 선택하세요.", + "wide": "넓은 행", + "wideDescription": "행당 하나의 선반을 표시합니다.", + "twoColumns": "2개 열", + "twoColumnsDescription": "행당 2개의 선반을 표시합니다." + }, + "libraryScope": { + "title": "대시보드 라이브러리", + "description": "이 대시보드에 책과 독서 데이터를 제공할 라이브러리를 선택하세요.", + "allLibraries": "접근 가능한 모든 라이브러리", + "summaryNone": "선택된 라이브러리 없음", + "summaryCount": "{count, plural, one {#개 라이브러리} other {#개 라이브러리}}", + "required": "최소 한 개 이상의 라이브러리를 선택하세요." + }, + "shelfRows": { + "label": "책 행 개수", + "option": "{count, plural, one {1줄로 나열} other {#줄로 나열}}", + "hint": "각 선반에 표시할 책의 행 개수를 설정합니다. 좁은 화면에서는 최대 두 개만 표시됩니다." + }, + "reorderHintWidget": "드래그하여 순서를 변경하세요. 위젯을 표시하거나 숨기려면 토글하세요.", + "reorderHintShelf": "드래그하여 순서를 변경하세요. 선반을 표시하거나 숨기려면 토글하세요.", + "smartScope": "스마트 스코프", + "noSmartScopes": "스마트 스코프가 아직 없습니다. 사이드바에서 새로 생성해 주세요.", + "addShelf": "선반 추가", + "resetToDefaults": "기본값으로 초기화" + }, + "welcome": { + "emptyTitle": "라이브러리가 비었습니다.", + "noLibrariesTitle": "아직 라이브러리가 없음", + "emptyDescription": "책을 정리하고 독서를 시작하려면 라이브러리를 만들어 주세요. 폴더만 지정하면 나머지는 자동으로 처리됩니다.", + "noLibrariesDescription": "아직 관리자가 라이브러리 설정을 완료하지 않았습니다. 시작하려면 관리자님께 문의해 주시기 바랍니다.", + "createFirstLibrary": "첫 라이브러리 만들기" + }, + "widgets": { + "currentlyReading": { + "title": "읽고 있는 책", + "empty": "읽고 있는 책이 없습니다. 책을 읽기 시작하면 이곳에 표시됩니다.", + "continueReading": "이어서 읽기" + }, + "diversityScore": { + "title": "다양성 점수", + "notEnoughData": "다양성 점수를 확인하려면 최소 3권의 책을 읽어 주세요.", + "booksAnalyzed": "{count, plural, =0 {분석된 책 없음} one {#권의 책이 분석됨} other {#권의 책이 분석됨}}", + "subScores": { + "genre": "장르", + "author": "저자", + "era": "시대", + "language": "언어" + } + }, + "highlightOfTheDay": { + "title": "오늘의 하이라이트", + "empty": "책을 읽으며 추가한 하이라이트를 여기서 확인하실 수 있습니다." + }, + "libraryOverview": { + "title": "라이브러리 요약", + "empty": "라이브러리가 비어 있습니다. 책을 추가해서 시작해 보세요.", + "addedThisYear": "올해 책 {count}권이 추가됨", + "stats": { + "books": "책", + "authors": "저자", + "series": "시리즈", + "storage": "저장 공간" + } + }, + "longWait": { + "title": "기다리는 책", + "empty": "기다리는 책이 없습니다. 이미 모두 읽기 시작하셨어요!", + "daysWaiting": "일째 기다리는 중", + "pages": "{count, plural, =0 {페이지 없음} one {#페이지} other {#페이지}}", + "startReading": "독서 시작" + }, + "monthlyChallenge": { + "title": "월간 챌린지", + "complete": "완료!" + }, + "neglectedGems": { + "title": "빛 바랜 보석", + "empty": "사용자님의 최고 평점 도서들을 모두 읽었습니다!", + "rating": "{rating}/5", + "daysWaiting": "{count}일째 기다리는 중", + "queued": "대기 중", + "addToQueue": "대기열에 추가", + "shuffle": "섞기" + }, + "readingDna": { + "title": "독서 DNA", + "notEnoughData": "독서 DNA를 해제하려면 최소 5권의 책을 읽어 주세요.", + "basedOn": "{count, plural, =0 {0개 도서 기반} one {#개 도서 기반} other {#개 도서 기반}}", + "traits": { + "length": "길이", + "variety": "다양성", + "rhythm": "리듬", + "time": "시간", + "speed": "속도" + } + }, + "readingGoal": { + "title": "{year}년 독서 목표", + "setGoalPrompt": "진행 상황을 추적하기 전에 우선 독서 목표를 설정하세요.", + "setGoal": "목표 설정", + "booksPerYear": "연간 도서 수", + "ofGoal": "{goal}권 목표", + "percentComplete": "{percentage}% 완료", + "editGoal": "목표 수정" + }, + "readingRhythm": { + "title": "독서 리듬", + "empty": "독서 리듬을 확인하려면 독서를 시작해 보세요.", + "activeDays": "{count, plural, =0 {활동일 없음} one {# 활동일} other {# 활동일}}", + "consistency": "{activeDays} · 꾸준함 {percent}%", + "avgPerDay": "평균 {time}/일" + }, + "readingStreak": { + "title": "출석", + "empty": "오늘의 독서를 시작하면 출석이 표시됩니다.", + "streakLabel": "{count, plural, =0 {일 연속 출석} one {일 연속 출석} other {N일 연속 출석}}", + "best": "{count, plural, =0 {최고 기록: 0일} one {최고 기록: #일} other {최고 기록: #일}}", + "lastSevenDays": "지난 7일" + }, + "yearProjection": { + "title": "연간 전망", + "books": "책", + "trendUp": "상승세", + "trendDown": "하락세", + "trendSteady": "꾸준한 속도", + "pages": "페이지", + "hours": "시간", + "readCount": "{count}권 읽음", + "daysLeft": "{count}일 남음" + } + } + }, + "email": { + "title": "이메일", + "subtitle": "이메일을 통해 전자책 리더기로 책을 전송하세요.", + "loadFailed": "로드에 실패했습니다.", + "saveFailed": "저장에 실패했습니다.", + "deleteFailed": "삭제에 실패했습니다.", + "setDefaultFailed": "기본값 설정에 실패했습니다.", + "setAsDefault": "기본값으로 설정", + "saving": "저장 중...", + "update": "업데이트", + "create": "생성", + "deleteConfirm": "\"{name}\"을(를) 삭제합니다. 이 작업은 되돌릴 수 없습니다.", + "badge": { + "default": "기본값", + "shared": "공유됨", + "system": "시스템" + }, + "tabs": { + "providers": "제공자", + "recipients": "수신자", + "groups": "그룹", + "templates": "템플릿", + "preferences": "설정", + "history": "히스토리" + }, + "providers": { + "heading": "SMTP 제공자", + "add": "제공자 추가", + "newTitle": "새 제공자", + "editTitle": "제공자 편집", + "name": "이름", + "namePlaceholder": "예시: Gmail", + "host": "호스트", + "port": "포트", + "username": "사용자 이름", + "password": "비밀번호", + "passwordEdit": "비밀번호 (공란으로 두면 현재값이 유지됨)", + "fromName": "발신자 이름", + "fromNamePlaceholder": "내 라이브러리", + "fromAddress": "발신자 주소", + "authentication": "인증", + "verifyTls": "TLS 인증서 확인", + "tlsWarning": "TLS 인증이 비활성화되었습니다. 서버 인증서가 검증되지 않으므로 신뢰할 수 있는 내부 서버에서만 사용하세요.", + "noFromAddress": "발신 주소 없음", + "emptyManage": "제공업체가 없습니다. 이메일 전송을 시작하려면 SMTP 제공자를 추가해 주세요.", + "emptyReadonly": "이용 가능한 제공자가 없습니다. 관리자에게 추가해 달라고 요청해 주세요.", + "setSystemTooltip": "시스템 메일 제공자로 설정", + "removeSystemTooltip": "시스템 메일 제공자 해제", + "testTooltip": "연결 테스트", + "toggleSharing": "공유 여부 변경", + "removeSystemBeforeDelete": "삭제하기 전에 시스템 제공자 지정을 해제하세요.", + "notesHeading": "제공자 메모", + "notesBody": "{system} 제공자(슈퍼유저 전용)는 비밀번호 재설정 이메일에 사용됩니다. 명시적인 제공자가 설정 없이 책을 보낼 때는 {defaultProvider} 제공자가 사용됩니다. {shared}(으)로 표시된 제공자는 모든 사용자가 이용할 수 있습니다.", + "deleteTitle": "제공자를 삭제하시겠습니까?", + "nameHostRequired": "이름과 호스트가 필요합니다", + "created": "제공자가 생성되었습니다.", + "updated": "제공자가 업데이트되었습니다.", + "deleted": "\"{name}\"이(가) 삭제되었습니다.", + "setDefaultSuccess": "\"{name}\"이(가) 기본값으로 설정되었습니다.", + "unshared": "제공자가 비공유 처리되었습니다.", + "sharedWithAll": "제공자가 모든 사용자에게 공유됩니다.", + "updateSharingFailed": "공유 업데이트에 실패했습니다.", + "systemRemoved": "\"{name}\"이(가) 시스템 메일 제공자에서 해제되었습니다.", + "systemSet": "\"{name}\"이(가) 시스템 메일 제공자로 설정되었습니다.", + "updateSystemFailed": "시스템 제공자 업데이트에 실패했습니다.", + "connectionSuccess": "연결 성공", + "connectionFailed": "연결 실패", + "testFailed": "테스트 실패" + }, + "recipients": { + "heading": "수신자", + "add": "수신자 추가", + "newTitle": "새 수신자", + "editTitle": "수신자 편집", + "name": "이름", + "namePlaceholder": "내 Kindle 기기", + "emailAddress": "이메일 주소", + "deviceType": "기기 유형", + "deviceNone": "없음", + "deviceOther": "기타", + "preferredFormat": "선호 포맷", + "formatAuto": "자동", + "defaultTemplate": "기본 템플릿", + "useAccountDefault": "계정 기본값 사용", + "kindleNote": "Kindle 수신자는 포맷 변환을 트리거하기 위해 제목이 \"convert\"인 이메일을 자동으로 수신합니다.", + "empty": "아직 수신자가 없습니다.", + "prefersFormat": "{format} 선호", + "deleteTitle": "수신자를 삭제하시겠습니까?", + "nameEmailRequired": "이름과 이메일 주소가 필요합니다", + "created": "수신자가 생성되었습니다.", + "updated": "수신자가 업데이트되었습니다.", + "deleted": "\"{name}\"이(가) 삭제되었습니다.", + "setDefaultSuccess": "\"{name}\"이(가) 기본값으로 설정되었습니다." + }, + "groups": { + "heading": "수신 그룹", + "create": "그룹 생성", + "newTitle": "새 그룹", + "name": "그룹 이름", + "namePlaceholder": "예시: 독서 동아리", + "creating": "생성 중...", + "empty": "아직 그룹이 없습니다. 여러 수신자에게 한 번에 전송하려면 그룹을 만들어 주세요.", + "memberCount": "{count, plural, =0 {멤버 없음} one {멤버 1명} other {멤버 #명}}", + "deleteTooltip": "그룹 삭제", + "noMembers": "아직 멤버가 없습니다.", + "removeMember": "삭제", + "selectRecipient": "수신자 선택...", + "add": "추가", + "addMember": "멤버 추가", + "allRecipientsInGroup": "수신자 전원이 이미 이 그룹에 속해 있습니다.", + "deleteTitle": "그룹을 삭제하시겠습니까?", + "created": "그룹이 생성되었습니다.", + "createFailed": "그룹 생성에 실패했습니다.", + "deleted": "\"{name}\"이(가) 삭제되었습니다.", + "memberAdded": "멤버가 추가되었습니다.", + "addMemberFailed": "멤버 추가에 실패했습니다.", + "memberRemoved": "멤버가 삭제되었습니다.", + "removeMemberFailed": "멤버 삭제에 실패했습니다." + }, + "templates": { + "heading": "이메일 템플릿", + "new": "새 템플릿", + "newTitle": "새 템플릿", + "editTitle": "템플릿 편집", + "name": "이름", + "namePlaceholder": "기본값", + "subject": "제목", + "body": "본문", + "availableVariables": "사용 가능한 변수 목록", + "editTemplate": "템플릿 편집", + "empty": "아직 템플릿이 없습니다.", + "notesHeading": "템플릿 참고 사항", + "notesBody": "시스템 템플릿은 삭제할 수 없으며 관리자만 편집할 수 있습니다. 제목과 본문에는 {variable}과 같은 변수를 사용하세요. 이 변수들은 전송 시점에 책 상세 정보로 대체됩니다.", + "deleteTitle": "템플릿을 삭제하시겠습니까?", + "nameSubjectRequired": "이름과 제목이 필요합니다", + "created": "템플릿이 생성되었습니다.", + "updated": "템플릿이 업데이트되었습니다.", + "deleted": "\"{name}\"이(가) 삭제되었습니다.", + "setDefaultSuccess": "\"{name}\"이(가) 기본값으로 설정되었습니다." + }, + "preferences": { + "heading": "이메일 설정", + "defaultProvider": "기본 제공자", + "defaultProviderHint": "제공자가 지정되지 않았을 때 사용됩니다. 비어 있는 경우, 계정 기본값이 사용됩니다.", + "noneAccountDefault": "없음 (계정 기본값 사용)", + "defaultRecipient": "기본 수신자", + "defaultRecipientHint": "빠른 전송 용도로 사용됩니다. 책 카드에서 빠른 전송 기능을 사용하려면 이 항목을 설정해야 합니다.", + "none": "없음", + "defaultTemplate": "기본 템플릿", + "defaultTemplateHint": "템플릿이 지정되지 않은 경우 사용됩니다. 비어있을 경우 시스템 기본값으로 대체됩니다.", + "noneSystemDefault": "없음 (시스템 기본값 사용)", + "save": "설정 저장", + "saved": "설정이 저장되었습니다." + }, + "history": { + "heading": "전송 히스토리", + "empty": "아직 전송된 이메일이 없습니다.", + "noSubject": "제목 없음", + "loadMore": "더 보기", + "resend": "재전송", + "deleteTitle": "히스토리 항목을 삭제하시겠습니까?", + "entryDeleted": "항목이 삭제되었습니다.", + "queuedForResend": "재전송 대기열에 추가되었습니다.", + "resendFailed": "재전송에 실패했습니다.", + "statusSent": "전송됨", + "statusFailed": "실패", + "statusQueued": "대기 중", + "statusPending": "보류 중" + }, + "send": { + "title": "이메일로 보내기", + "bookCount": "{count, plural, =0 {책 0권} one {책 1권} other {책 #권}}", + "recipients": "수신자", + "noRecipients": "수신자가 설정되지 않았습니다. 이메일 설정에서 추가해 주세요.", + "groups": "그룹", + "options": "옵션", + "fileFormat": "파일 포맷", + "autoRecipientPreference": "자동 (수신자 설정 사용)", + "unknownFormat": "알 수 없음", + "primarySuffix": "(기본)", + "provider": "제공자", + "template": "템플릿", + "default": "기본값", + "send": "전송", + "sending": "전송 중...", + "queued": "{count, plural, =0 {대기 중인 이메일이 없음} one {1개 이메일 대기 중} other {#개 이메일 대기 중}}", + "failed": "전송에 실패했습니다." + } + }, + "hardcover": { + "settings": { + "subtitle": "독서 진행도, 상태, 평점을 Hardcover와 동기화하세요." + }, + "bookSync": { + "label": "Hardcover 동기화", + "toggleAriaLabel": "이 책을 Hardcover와 동기화", + "syncNow": "지금 동기화" + }, + "connection": { + "title": "연결", + "description": "독서 데이터 동기화를 위해 Hardcover 계정을 연결하세요.", + "connected": "연결됨", + "apiToken": "API 토큰", + "tokenPlaceholder": "Hardcover API 토큰을 붙여넣으세요", + "show": "보기", + "hide": "숨기기", + "findTokenAt": "다음 페이지에서 토큰을 확인하세요:", + "validateToken": "토큰 유효성 검사", + "valid": "유효 ({username})", + "invalidToken": "유효하지 않은 토큰", + "syncOptions": "동기화 옵션", + "syncInfo": "동기화는 이미 한 번 이상 읽은 경우에만 실행됩니다. 이 규칙은 상태, 진행도, 평점 트리거에 적용됩니다. 이는 동기화가 실행되는 시점에 제어권을 전환합니다.", + "syncScope": { + "title": "책 동기화 범위", + "allEligible": { + "label": "모든 대상 책", + "description": "제외 처리되지 않은 모든 책을 동기화합니다." + }, + "selectedOnly": { + "label": "선택한 책만", + "description": "명시적으로 선택한 책만 동기화합니다." + } + }, + "enableSync": { + "title": "동기화 활성화", + "description": "연결 해제 없이 모든 Hardcover 동기화를 일시 중지합니다." + }, + "syncOnStatus": { + "title": "상태 변경 시 동기화", + "description": "책의 상태를 '읽는 중', '읽음' 등으로 표시하면 변경 정보를 전송합니다." + }, + "syncOnProgress": { + "title": "진행도 변경 시 동기화", + "description": "BookOrbit 또는 KOReader의 진행도가 변경되었을 때 독서 진행도과 일시를 전송합니다." + }, + "syncOnRating": { + "title": "평점 변경 시 동기화", + "description": "평점 변동을 Hardcover에 전송합니다." + }, + "privacy": { + "title": "개인 정보", + "description": "Hardcover와 동기화된 책들의 기본 표시 여부", + "public": "공개", + "followersOnly": "팔로워만", + "private": "비공개" + }, + "disconnect": "연결 해제", + "toast": { + "enterToken": "Hardcover API 토큰을 먼저 입력해 주세요.", + "saved": "Hardcover 설정이 저장되었습니다.", + "saveFailed": "설정 저장에 실패했습니다.", + "disconnected": "Hardcover 연결이 해제되었습니다." + } + }, + "sync": { + "title": "수동 동기화", + "description": "{scope}을(를) Hardcover에 전송합니다.", + "scope": { + "selected": "선택된 책", + "eligible": "모든 대상 책" + }, + "checkingPending": "보류된 항목 확인 중...", + "pendingOf": "{total}권 중 {pending}권 보류됨", + "noBooksInScope": "동기화 범위에 포함되는 책 없음.", + "allSynced": "모든 책들이 이미 동기화되었습니다.", + "lastSyncedLabel": "마지막 동기화 시간", + "lastSuccessfulSync": "마지막 동기화 성공", + "syncing": "동기화 중...", + "progressCount": "{synced} / {total} 권", + "unavailable": { + "permissionDenied": "Hardcover 동기화를 사용할 권한이 없습니다.", + "userDisabled": "Hardcover 설정에서 동기화가 일시 중지되었습니다." + }, + "button": { + "unavailable": "동기화 사용 불가", + "syncNow": "지금 동기화", + "syncNowCount": "지금 동기화 ({count})" + }, + "lastSynced": { + "justNow": "방금", + "minutesAgo": "{count}분 전", + "hoursAgo": "{count, plural, =0 {#시간 전} one {#시간 전} other {#시간 전}}", + "daysAgo": "{count, plural, =0 {#일 전} one {#일 전} other {#일 전}}" + } + }, + "import": { + "title": "독서 상태 가져오기", + "description": "BookOrbit 책에 상태를 적용하기 전에 Hardcover와의 매칭을 미리 확인하세요.", + "clear": "초기화", + "preview": "미리보기", + "importProgress": "가져오기 진행", + "reviewMatches": "매칭 검토", + "importReady": "가져오기 준비 완료", + "exactMatches": "{count, plural, =0 {검토 없이 가져올 수 있는 정확히 일치하는 항목이 없습니다} one {정확히 일치하는 항목 #개를 검토 없이 가져올 수 있습니다} other {정확히 일치하는 항목 #개를 검토 없이 가져올 수 있습니다}}", + "progressAvailable": "{count, plural, =0 {진행도 업데이트 없음} one {#개의 진행도 업데이트 존재} other {#개의 진행도 업데이트 존재}}", + "progressConflicts": "{count, plural, =0 {충돌 없음} one {#개 충돌} other {#개 충돌}}", + "unavailable": { + "permissionDenied": "Hardcover 동기화를 사용할 권한이 없습니다.", + "missingToken": "가져오기 전 Hardcover와 연결이 필요합니다.", + "userDisabled": "Hardcover 설정에서 동기화가 일시 중지되었습니다." + }, + "summary": { + "ready": "준비됨", + "review": "검토됨", + "conflicts": "충돌", + "unmatched": "매칭 없음", + "skipped": "건너뜀" + }, + "result": { + "summary": "{applied}개 항목 가져오기 완료{progress}, {failed}개 실패", + "progressUpdated": "{count}개 항목 진행도 업데이트됨" + }, + "toast": { + "importFailed": "Hardcover 독서 상태 가져오기에 실패했습니다.", + "imported": "{count, plural, =0 {독서 상태를 가져오지 못했습니다{progress}} one {독서 상태 #개를 가져왔습니다{progress}} other {독서 상태 #개를 가져왔습니다{progress}}}", + "progressUpdates": "{count, plural, =0 {진행도 업데이트 없음} one {#개 진행도 업데이트} other {#개 진행도 업데이트}}" + } + }, + "review": { + "title": "Hardcover 리뷰 가져오기", + "subtitle": "Hardcover 책 {total}권, {matched}개 매칭됨.", + "closeAriaLabel": "가져오기 검토 닫기", + "searchPlaceholder": "제목 또는 저자로 검색", + "importProgress": "가져오기 진행", + "untitled": "제목 없음", + "blank": "공백", + "noRows": "현재 필터와 일치하는 항목이 없습니다.", + "selectRowAriaLabel": "{title} 선택", + "selectionSummary": "{count}개 선택됨: {ready}개 항목 준비됨, {reviewed}개 항목 검토됨.", + "selectedProgress": "{count, plural, =0 {진행도 업데이트 없음} one {진행도 업데이트 #건} other {#개 진행도 업데이트}}", + "selectReady": "준비된 항목 선택", + "selectPage": "페이지 선택", + "clearPage": "페이지 해제", + "clearSelection": "선택 해제", + "importSelected": "선택 항목 가져오기", + "previousPage": "이전 페이지", + "nextPage": "다음 페이지", + "pageRange": "총 {total}개 항목 중 {start}-{end}", + "tabs": { + "all": "전체", + "ready": "준비됨", + "review": "검토됨", + "conflicts": "충돌", + "unmatched": "매칭 없음", + "skipped": "건너뜀" + }, + "summary": { + "ready": "준비됨", + "review": "검토됨", + "conflicts": "충돌", + "unmatched": "매칭 없음", + "skipped": "건너뜀" + }, + "matchOptions": { + "all": "모든 매칭 유형" + }, + "matchMethod": { + "hardcoverId": "Hardcover ID", + "isbn": "ISBN", + "titleAuthor": "제목 + 저자" + }, + "outcome": { + "ready": "준비됨", + "review": "검토됨", + "conflict": "충돌", + "unmatched": "매칭 없음", + "skipped": "건너뜀" + }, + "column": { + "progress": "진행도" + } + }, + "linkedBooks": { + "title": "연결된 책", + "description": "현재 읽고 있는 책을 표시합니다. 책이 Hardcover에 연결되면, 여기서 다른 판본(인쇄본, 전자책, 오디오북)을 선택하여 독서 진행 상황을 동기화할 대상을 변경할 수 있습니다.", + "loading": "책 로딩 중...", + "loadError": "책을 불러오는 데 실패했습니다.", + "retry": "재시도", + "empty": "현재 읽고 있는 책이 없습니다.", + "untitled": "제목 없음", + "unknownAuthor": "알 수 없는 저자", + "matchMethod": { + "isbn": "ISBN", + "title": "제목", + "cached": "캐시", + "manual": "수동", + "metadata_id": "메타데이터 매칭" + }, + "status": { + "error": "오류: {error}", + "linked": "연결됨", + "linkedWithMethod": "연결됨 ({method})", + "notLinked": "아직 연결되지 않음" + }, + "unmatchedHint": "이 도서는 아직 Hardcover에 연결되지 않았습니다. 다음에 동기화될 때 자동으로 매칭됩니다.", + "editionsLoadError": "판본 정보를 불러오는 데 실패했습니다.", + "viewEditions": "판본 보기", + "noEditionsFound": "판본을 찾을 수 없습니다.", + "booksTruncated": "현재 읽고 있는 책 중 처음 {count}권 표시 중.", + "editionsTruncated": "수집된 판본들 중 처음 {count}개 표시 중.", + "pages": "{count, plural, one {#페이지} other {#페이지}}", + "isbn": "ISBN {isbn}", + "current": "현재", + "useThis": "이 판본 사용", + "toast": { + "switched": "{format}(으)로 전환되었습니다.", + "switchFailed": "판본 전환에 실패했습니다." + } + } + }, + "library": { + "creator": { + "createTitle": "라이브러리 생성", + "editTitle": "수정: {name}", + "stepOf": "{current} / {total} 단계", + "unsaved": "저장되지 않음", + "required": "필수", + "closeAria": "라이브러리 생성기 닫기", + "progressAria": "라이브러리 생성 진행도", + "sectionsAria": "라이브러리 설정 섹션", + "loadingAria": "라이브러리 설정 로드 중", + "sections": { + "details": "상세 정보", + "folders": "폴더", + "scanner": "스캐너", + "metadata": "메타데이터", + "fileWrite": "파일 작성", + "reading": "독서", + "schedule": "일정", + "access": "접근" + }, + "actions": { + "saving": "저장 중...", + "saveChanges": "변경 사항 저장", + "creating": "생성 중...", + "createLibrary": "라이브러리 생성" + }, + "details": { + "libraryName": "라이브러리 이름", + "namePlaceholder": "내 라이브러리", + "coverStyle": { + "title": "표지 스타일", + "portrait": "장방형", + "square": "정방형", + "hint": "일반 전자책 또는 혼합 라이브러리에는 장방형을 사용하고, 오디오북 전용 라이브러리에는 정방형을 사용하세요." + }, + "icon": { + "label": "아이콘", + "placeholder": "아이콘을 선택하세요...", + "selected": "선택됨" + } + }, + "folders": { + "title": "폴더 스캔", + "description": "책 파일을 스캔할 디렉토리를 하나 이상 추가해 주세요.", + "browseAdd": "폴더 탐색 및 추가", + "browseTitle": "서버 폴더 탐색", + "browseDescription": "브라우저를 벗어나지 않고 하나 이상의 폴더를 선택하세요.", + "selectedTitle": "선택된 폴더", + "addFolders": "폴더 추가", + "manualEntry": "경로 수동 입력", + "absolutePath": "서버 절대 경로", + "addFolder": "폴더 추가", + "removeFolder": "{folder} 삭제", + "manualCheckHint": "수동 경로는 나머지 선택 폴더들과 함께 테스트됩니다.", + "pathPlaceholder": "/path/to/books", + "test": "테스트", + "add": "추가", + "pathNotAccessible": "서버에서 경로에 접근할 수 없습니다.", + "pathAccessible": "사용 가능한 경로입니다.", + "pathNotAccessibleShort": "경로에 접근할 수 없습니다.", + "overlapsWith": "\"{library}\"와(과) 중복됩니다.", + "noneAdded": "폴더가 아직 추가되지 않았습니다.", + "runPrescanHint": "저장하기 전에 경로 유효성 검사를 위해 사전 스캔을 실행하세요.", + "scanning": "스캔 중…", + "prescan": "사전 스캔" + }, + "scanner": { + "scanMode": { + "title": "스캔 모드", + "lockedAria": "구성 모드가 잠겨 있습니다", + "lockTooltip": "구성 모드는 라이브러리 생성 후에는 고정됩니다. 모드를 변경할 경우 중복되거나 누락된 도서가 생길 수 있기 때문입니다. 다른 모드를 사용하려면 새 라이브러리를 생성하고 다시 스캔하세요.", + "recommended": "추천", + "folderAsBook": { + "title": "폴더를 책으로", + "hint": "폴더 내의 모든 파일이 하나의 책으로 그룹화됩니다. EPUB, MOBI 등 여러 포맷을 함께 보관할 때 특히 유용합니다." + }, + "fileAsBook": { + "title": "파일을 책으로", + "hint": "모든 파일을 개별 책으로 취급합니다. 작품당 하나의 포맷만을 가진 라이브러리에 가장 적합하며, 오디오북이 여러 파일로 분할되어 있는 경우에는 사용하지 마세요." + } + }, + "allowedFormats": { + "title": "허용 포맷", + "allowAll": "전체 허용", + "allAllowed": "모든 포맷이 허용됩니다.", + "onlySelected": "선택된 포맷만 가져오게 됩니다.", + "warning": "라이브러리에 이미 존재하는 다른 포맷의 책들은 다음 스캔 시 누락 처리됩니다." + }, + "excludePatterns": { + "title": "제외 패턴", + "hintBefore": "스캔 중 자동 건너뛰기에 사용될 Glob 패턴 (예시:", + "hintAfter": ").", + "add": "추가", + "empty": "추가된 패턴 없음." + } + }, + "metadata": { + "sourcePrecedence": { + "title": "소스 우선순위", + "hint": "여러 소스가 사용 가능할 경우, 목록에서 가장 상위에 있는 소스를 사용합니다." + }, + "formatPriority": { + "title": "포맷 우선순위", + "hint": "책이 여러 포맷으로 제공될 경우, 목록에서 가장 상위에 있는 형식이 사용됩니다." + } + }, + "fileWrite": { + "maxFileSizeMb": "최대 파일 크기 (MB)", + "formatLimits": "포맷 제한", + "rename": { + "title": "메타데이터 변경 시 파일 이름 변경", + "hint": "제목, 저자, 시리즈, 또는 연도가 변경될 경우, 라이브러리 명명 패턴을 사용하여 실제 파일의 이름을 변경합니다." + }, + "write": { + "title": "파일에 메타데이터 쓰기", + "hint": "활성화하면 메타데이터를 저장하는 과정에서 변경 사항이 디스크 내 실제 파일에도 다시 기록됩니다." + }, + "cover": { + "title": "표지 이미지 포함", + "hint": "지원되는 파일 포맷을 대상으로 변경된 표지를 다시 저장합니다." + }, + "epub": { + "title": "EPUB", + "hint": "EPUB 아카이브 내부에 있는 OPF 파일에 메타데이터를 작성합니다.", + "toggleAria": "EPUB 메타데이터 작성" + }, + "fb2": { + "title": "FictionBook (FB2)", + "hint": "FB2 파일 내부에 있는 설명 블록을 재작성합니다. 본문 텍스트는 변경하지 않습니다.", + "toggleAria": "FB2 메타데이터 작성" + }, + "pdf": { + "title": "PDF", + "hint": "PDF Info 딕셔너리 및 XMP 스트림에 메탸데이터를 삽입합니다.", + "toggleAria": "PDF 메타데이터 작성" + }, + "cbx": { + "title": "만화 아카이브 (CBX)", + "hint": "ComicInfo.xml 파일을 CBZ 및 CB7 아카이브에 작성합니다.", + "toggleAria": "만화 아카이브 메타데이터 작성" + }, + "kindle": { + "title": "Kindle (MOBI, AZW3)", + "hint": "MOBI, AZW3, AZW 파일의 EXTH 헤더에 메타데이터를 작성합니다.", + "toggleAria": "Kindle 메타데이터 작성" + }, + "audio": { + "title": "오디오", + "hint": "변경된 커버를 M4B, M4A, MP3, FLAC 파일에 삽입합니다.", + "toggleAria": "오디오 커버 작성" + } + }, + "reading": { + "readingStart": { + "title": "독서 시작", + "hint": "이 진행도에 도달하면 책은 \"읽는 중\"으로 표시됩니다." + }, + "markAsFinished": { + "title": "독서 완료", + "hint": "이 진행도에 도달하면 책은 자동으로 \"읽음\"으로 표시됩니다." + } + }, + "schedule": { + "fileWatching": "파일 감시", + "autoScanSchedule": "자동 스캔 일정", + "timezoneHint": "일정은 서버의 시간 정보를 기준으로 실행됩니다.", + "cronExpression": "Cron 표현식", + "cronInvalid": "유효하지 않은 cron 표현식.", + "cronFormat": "형식: 분 시 일 월 요일", + "watchFolders": { + "title": "감시할 폴더", + "hint": "라이브러리 폴더에 추가된 새 파일을 자동으로 탐지합니다." + }, + "presets": { + "never": "없음", + "hourly": "매 시간마다", + "every6Hours": "6시간마다", + "every12Hours": "12시간마다", + "daily": "매일", + "weekly": "매주", + "custom": "커스텀" + }, + "human": { + "disabled": "자동 스캔 비활성화됨", + "invalid": "미리보기를 확인하려면 유효한 일정을 입력해 주세요", + "hourly": "매 시간", + "every6Hours": "6시간마다", + "every12Hours": "12시간마다", + "dailyMidnight": "매일 자정", + "weeklyMonday": "매주 월요일 자정", + "cron": "Cron: {cron}" + } + }, + "access": { + "title": "접근 제어", + "description": "슈퍼유저는 항상 전체 접근 권한을 가집니다. 아래 사용자에 대한 접근 권한을 부여하세요.", + "notYetCreated": "라이브러리가 생성된 후에 접근 권한을 설정할 수 있습니다.", + "selectUser": "사용자를 선택하세요…", + "grant": "부여", + "empty": "아직 사용자에게 접근 권한이 부여되지 않았습니다.", + "loading": "접근 설정 로딩 중...", + "userSelectAria": "접근 권한을 부여할 사용자", + "levelSelectAria": "부여할 접근 권한", + "levels": { + "viewer": "독자", + "editor": "편집자", + "owner": "소유자" + }, + "columns": { + "user": "사용자", + "accessLevel": "접근 수준" + }, + "errors": { + "grant": "접근 권한을 부여할 수 없습니다.", + "updateLevel": "접근 권한 업데이트에 실패했습니다.", + "revoke": "접근 권한 회수에 실패했습니다." + } + } + }, + "folderPicker": { + "title": "서버 폴더 탐색", + "description": "이 라이브러리에 사용할 폴더를 하나 이상 선택하세요.", + "closeAria": "폴더 브라우저 닫기", + "currentFolderAria": "현재 폴더", + "parentFolder": "상위 폴더로 이동", + "newFolder": "새 폴더", + "goUp": "올라가기", + "filterPlaceholder": "폴더 필터…", + "clearFilterAria": "폴더 필터 지우기", + "newFolderNamePlaceholder": "새 폴더 이름", + "create": "생성", + "loading": "폴더 로딩 중...", + "selectCurrent": "현재 폴더 선택", + "noMatches": "일치하는 폴더 없음", + "noMatchesHint": "다른 필터를 적용해 보세요.", + "empty": "이 폴더는 비어 있습니다", + "emptyHint": "현재 폴더를 선택하거나 새 폴더를 만들 수 있습니다.", + "openFolderAria": "{name} 열기", + "selectedCount": "{count, plural, =0 {선택된 폴더 없음} one {폴더 #개 선택됨} other {폴더 #개 선택됨}}", + "noFolders": "폴더를 찾을 수 없음", + "selectFolder": "이 폴더 선택", + "errors": { + "readDirectory": "디렉터리를 읽을 수 없습니다.", + "connect": "연결할 수 없습니다.", + "invalidName": "슬래시(/)나 선행 점(.)이 없는 단일 폴더 이름을 입력하세요.", + "createFolder": "폴더를 생성할 수 없습니다." + } + }, + "upload": { + "library": "라이브러리", + "selectLibrary": "라이브러리를 선택하세요...", + "targetFolder": "대상 폴더", + "addMoreFiles": "파일 추가", + "clearAll": "전체 지우기", + "done": "완료", + "retry": "재시도", + "upload": "업로드", + "uploadWithCount": "업로드 ({count})", + "viewInLibrary": "라이브러리에서 보기", + "fileCount": "{count, plural, =0 {파일 없음} one {파일 #개} other {파일 #개}}", + "booksAdded": "{count, plural, =0 {책이 추가되지 않음} one {#권의 책이 추가됨} other {#권의 책이 추가됨}}", + "uploadedFailed": "{done}개 항목 업로드됨, {failed}개 항목 실패", + "progress": "{done} / {total} 업로드 중...", + "header": { + "uploading": "업로드 중...", + "complete": "업로드 완료", + "uploadTo": "{library}에 업로드", + "uploadBooks": "책 업로드" + }, + "dropzone": { + "title": "이곳에 파일을 끌어다 놓거나, 클릭하여 탐색하세요", + "hint": "{formats} - 파일당 최대 {size} MB" + } + } + }, + "metadataScore": { + "missingFields": "{count, plural, =0 {필드 누락 없음 - 메타데이터 편집} one {#개 필드 누락됨 - 메타데이터 편집} other {#개 필드 누락됨 - 메타데이터 편집}}" + }, + "migration": { + "sidebarTitle": "Booklore 가져오기", + "importTitle": "라이브러리 가져오기", + "status": { + "done": "완료", + "saved": "저장됨", + "running": "실행 중", + "failed": "실패" + }, + "badge": { + "validated": "검증됨", + "upToDate": "최신", + "completed": "완료됨" + }, + "steps": { + "source": { + "short": "소스 연결", + "title": "소스 연결", + "subtitle": "소스 Booklore 인스턴스에 대한 데이터베이스 연결을 설정합니다.", + "genericSubtitle": "소스 라이브러리 애플리케이션에 대한 연결을 설정합니다." + }, + "mappings": { + "short": "사용자 및 경로 매핑", + "title": "사용자 및 경로 매핑", + "subtitle": "소스 사용자를 타겟 사용자에 매핑하고 파일 경로를 변환합니다." + }, + "dryRun": { + "short": "모의 점검 및 테스트 운영", + "title": "모의 점검 및 테스트 운영", + "subtitle": "실제 마이그레이션을 실행하기 전에, 가져오게 될 내용을 미리 확인하세요." + }, + "migration": { + "short": "마이그레이션 실행", + "title": "마이그레이션 실행", + "subtitle": "실시간 가져오기 작업을 시작하고 진행 상황을 모니터링하세요." + }, + "report": { + "short": "보고서", + "title": "마이그레이션 보고서", + "subtitle": "가져온 내용을 검토하고 상세 보고서를 출력합니다" + } + }, + "footer": { + "continueToMappings": "매핑 단계로 계속", + "continueToDryRun": "테스트 단계로 계속", + "continueToMigration": "마이그레이션 단계로 계속", + "viewReport": "보고서 보기", + "resetSetup": "설정 초기화", + "stepOf": "{current} / {total} 단계", + "backToSetup": "설정으로 돌아가기" + }, + "stages": { + "init": "초기화 중", + "sharedOverlays": "메타데이터 가져오는 중", + "bookCovers": "표지 데이터 가져오는 중", + "userState": "사용자 데이터 가져오는 중" + }, + "source": { + "testConnection": "연결 테스트", + "saveAndValidate": "저장 및 유효성 검사", + "validatedWithWarnings": "소스 유효성 검사가 완료되었으나 일부 경고가 발생했습니다.", + "types": { + "booklore": "Booklore", + "grimmory": "Grimmory", + "audiobookshelf": "Audiobookshelf", + "calibreWebAutomated": "Calibre-Web Automated" + }, + "fields": { + "type": "소스 유형", + "name": "소스 이름", + "namePlaceholder": "라이브러리 가져오기", + "host": "호스트", + "port": "포트", + "user": "사용자", + "password": "비밀번호", + "passwordSaved": "저장됨 - 변경 없음", + "passwordNotSet": "비밀번호가 설정되지 않음", + "showSecret": "시크릿 보기", + "hideSecret": "시크릿 숨기기", + "database": "데이터베이스", + "mediaRootPath": "미디어 루트 경로", + "ssl": "TLS/SSL 사용", + "connectionMode": "연결 모드", + "apiMode": "실제 API", + "backupMode": "백업 파일", + "baseUrl": "Audiobookshelf URL", + "apiToken": "API 토큰", + "apiTokenPlaceholder": "관리자 API 토큰을 입력하세요", + "secretSaved": "저장됨 - 변경되지 않음", + "allowPrivateNetwork": "사설 네트워크 접근 허용", + "allowPrivateNetworkHint": "Audiobookshelf가 신뢰할 수 있는 로컬 또는 사설 네트워크에 호스팅되었을 경우에만 활성화하세요.", + "backupPath": "백업 파일 경로", + "backupPathHint": "구성된 마이그레이션 가져오기 디렉토리의 서버 절대 경로를 입력하세요.", + "cwaAppDatabasePath": "Calibre-Web Automated app.db 스냅샷", + "cwaAppDatabasePathPlaceholder": "/imports/calibre-web-automated/app.db", + "cwaMetadataDatabasePath": "Calibre metadata.db 스냅샷", + "cwaMetadataDatabasePathPlaceholder": "/imports/calibre-web-automated/metadata.db" + }, + "validation": { + "nameRequired": "소스 이름이 필요합니다.", + "databaseFieldsRequired": "호스트, 사용자, 데이터베이스, 소스 이름은 필수 항목입니다.", + "apiFieldsRequired": "Audiobookshelf URL, API 토큰, 소스 이름은 필수 항목입니다.", + "baseUrlInvalid": "Audiobookshelf URL은 추가 경로가 없는 순수한 HTTP/HTTPS 호스트여야 합니다.", + "backupPathRequired": "백업 파일 경로와 소스 이름은 필수 항목입니다.", + "backupPathAbsolute": "백업 파일 경로는 절대 경로여야 합니다.", + "cwaAppDatabasePathRequired": "Calibre-Web Automated app.db 스냅샷 경로가 필요합니다.", + "cwaAppDatabasePathAbsolute": "Calibre-Web Automated app.db 스냅샷 경로는 절대 경로여야 합니다.", + "cwaMetadataDatabasePathRequired": "Calibre metadata.db 스냅샷 경로가 필요합니다.", + "cwaMetadataDatabasePathAbsolute": "Calibre metadata.db 스냅샷 경로는 절대 경로여야 합니다." + }, + "cwa": { + "snapshotTitle": "스냅샷 모드가 중지되었습니다", + "stoppedWarning": "두 데이터베이스를 복사하기 전에 Calibre-Web Automated를 종료하세요. BookOrbit이 두 스냅샷이 정확히 같은 시점에 복사되었는지 보장할 수 없습니다.", + "importRootGuidance": "두 스냅샷 파일은 모두 설정된 MIGRATION_IMPORT_ROOT 디렉토리 아래에 위치한 읽기 가능한 서버 경로여야 합니다.", + "logicalRootGuidance": "도서 경로 매핑은 이 데이터베이스 스냅샷들을 포함하는 호스트 폴더가 아니라, app.db에 저장된 논리적 Calibre 라이브러리 루트를 사용합니다.", + "compatibilityNote": "스키마 동작은 Calibre-Web Automated v4.0.6을 기준으로 검증되었습니다. 해당 제품의 데이터베이스는 신뢰할 수 있는 애플리케이션 릴리스 버전을 제공하지 않습니다." + }, + "mediaPath": { + "hintRequired": "책 표지 마이그레이션에 필요합니다.", + "hintAbsolute": "반드시 절대 경로(예시: /books)를 사용하세요. 상대 경로는 지원되지 않습니다.", + "hintConfigured": "표지 가져오기 경로가 설정되었습니다. 테스트 연결을 사용하여 접근 권한과 Booklore 이미지 폴더 구조를 확인하세요.", + "buttonOk": "경로 정상", + "buttonIssue": "경로 문제", + "buttonTest": "경로 테스트" + }, + "compatibility": { + "title": "호환성 테스트 정보", + "verifiedAgainst": "테스트 대상:", + "note": "후속 버전은 호환될 가능성이 높지만, 아직 검증되지 않았습니다. 실제 작업 전에 먼저 모의 테스트를 실행하여 확인하세요." + }, + "snapshot": { + "title": "마지막 유효성 검사 스냅샷", + "sourceVersion": "소스 버전: {version}", + "unknown": "알 수 없음", + "missingTables": "필수 테이블 누락: {tables}" + } + }, + "mappings": { + "suggestionsAutoLoad": "소스 유효성 검사가 완료되면 사용자 제안이 자동으로 로드됩니다.", + "refresh": "새로고침", + "sourceUser": "소스 사용자", + "targetUser": "타겟 사용자", + "doNotImport": "이 사용자는 가져오지 않음", + "noSourceUsersLoaded": "로드된 소스 사용자가 없습니다.", + "noActiveTargetUsers": "활성 타겟 사용자를 찾을 수 없습니다. 매핑을 수행하기 전에 BookOrbit 사용자를 생성하거나 다시 활성화하세요.", + "pathPrefixMappings": "경로 접두사 매핑", + "addMapping": "매핑 추가", + "pathMappingsExplanation": "경로 매핑은 파일 위치를 기준으로 도서를 매칭할 수 있도록 원본 파일 경로를 대상 경로로 변환합니다. 도서는 경로 매핑과 관계없이 ISBN, 파일 해시, 제목/저자를 통해서도 매칭됩니다.", + "noPrefixesFound": "접두사 없음 - 소스 유효성 검사를 먼저 진행하세요", + "selectSourcePrefix": "소스 접두사 선택...", + "selectTargetFolder": "타겟 폴더 선택...", + "remove": "삭제", + "saveMappings": "매핑 저장", + "pathValidation": { + "title": "경로 유효성 검사", + "mappedSummary": "총 {total}권의 원본 도서 중 {mapped}권이 매핑 경로를 가지고 있음", + "unmatched": "{count}개의 매핑 경로가 디스크에서 발견되지 않음", + "allMatched": "총 {count}개의 매핑 경로가 디스크에서 발견됨" + } + }, + "dryRun": { + "run": "모의 테스트 실행", + "matched": "일치 항목:", + "unresolved": "미해결 항목:", + "duplicates": "중복 항목:", + "unresolvedSummary": "미해결 항목 요약" + }, + "duplicates": { + "title": "중복 타겟 매칭 해결", + "explanation": "각 타겟 도서별로 보존할 소스 도서 하나를 선택하세요. 가장 유력한 매칭이 하나일 경우, 추천 선택지는 미리 선택되어 있습니다.", + "remainingGroups": "남은 그룹:", + "targetBookId": "타겟 도서 #{id}", + "recommended": "추천", + "resolveButton": "{count, plural, =0 {#개 중복 해결} one {#개 중복 해결} other {#개 중복 해결}}", + "sourceRecordId": "소스 레코드 ID #{id}", + "byAuthor": "{author} 작성 (ID: {id})", + "byFilePath": "{filePath} (ID: {id})", + "bookloreSourceId": "Booklore 소스 ID: {id}", + "libraryBookId": "라이브러리 책 #{id}" + }, + "preflight": { + "title": "사전 점검", + "allPassed": "모든 점검 통과 - 마이그레이션 준비 완료", + "sourceValidated": "소스 유효성 검사 완료", + "saveAndValidateSource": "소스 연결 저장 및 유효성 검사", + "validateSourceConnection": "소스 연결 검증", + "mappingsSaved": "매핑 저장 완료", + "saveUserAndPathMappings": "사용자 및 경로 매핑 저장", + "pathMappingsValidated": "경로 매핑 유효성 검사 완료", + "savePathMappingsToValidate": "유효성 검사를 위해 경로 매핑 저장", + "dryRunUpToDate": "모의 테스트가 최신 상태인지 확인", + "runFreshDryRun": "새로운 모의 테스트 진행", + "issues": { + "saveSource": "소스 연결 설정 저장", + "validateSource": "소스 연결 검증", + "saveMappings": "사용자 및 경로 매핑 저장", + "savePathMappings": "경로 매핑 저장 및 검증", + "freshDryRun": "새로운 모의 테스트 실행", + "resolveDuplicates": "모의 테스트에서 발견된 소스-타겟 중복 도서 처리", + "waitForRun": "현재 실행 중인 작업이 완료될 때까지 대기" + } + }, + "run": { + "confirmPrompt": "이 작업은 실제 마이그레이션을 시작합니다. 정말 진행하시겠습니까?", + "confirmStart": "실행 확인", + "startMigration": "마이그레이션 시작", + "cancelRun": "실행 취소", + "refreshStatus": "상태 새로고침", + "pollingStopped": "상태 폴링이 오류로 인해 중지되었습니다.", + "retry": "재시도", + "stage": "단계: {stage}", + "initializing": "초기화 중", + "ended": "{time}에 종료됨" + }, + "report": { + "noRunYet": "아직 마이그레이션이 실행되지 않았습니다. 시작하려면 위의 단계를 완료해 주세요.", + "runNumber": "#{id} 실행", + "notStarted": "시작되지 않음", + "reloadReport": "보고서 다시 불러오기", + "loadFullReport": "전체 보고서 불러오기", + "exportJson": "JSON 내보내기", + "exportCsv": "CSV 내보내기", + "migrationFailed": "마이그레이션 실패", + "retryFromLastStage": "마지막 완료 단계부터 재시도", + "booksSection": "책", + "metadataOverlays": "메타데이터 오버레이 적용됨", + "authorMappings": "저자 매핑 교체됨", + "narratorMappings": "내레이터 매핑이 교체됨", + "genreMappings": "장르 매핑이 교체됨", + "tagMappings": "태그 매핑이 교체됨", + "coversImported": "표지 데이터가 이관됨", + "coverImportSkipped": "표지 데이터 이관이 취소됨 - 소스 미디어 루트 경로가 설정되어 있지 않음", + "couldNotMatch": "매칭을 진행할 수 없음", + "userDataSection": "사용자 데이터", + "readingStatuses": "독서 상태", + "readingProgressEntries": "독서 진행도 기록", + "audiobookProgressEntries": "오디오북 진행도 기록", + "readingSessions": "독서 시간", + "bookmarks": "책갈피", + "annotations": "필기", + "collectionEntries": "컬렉션 항목", + "loadFullReportHint": "\"전체 보고서 불러오기\"를 클릭하여 보고서를 내보낼 때 모의 테스트 매칭 요약을 포함할 수 있습니다.", + "completedNoIssues": "미해결된 책이나 오류 없이 마이그레이션이 완료되었습니다.", + "matchedBooks": "매칭된 책 ({count})", + "matchedBooksExplanation": "이 모의 테스트 매칭들은 어떤 라이브러리 도서들에 외부 데이터를 적용할지 결정하는 데 사용되었습니다.", + "sourceBook": "소스 도서 {id}", + "libraryBook": "라이브러리 도서 {id}", + "unresolvedBooks": "미해결된 도서 ({count})", + "unresolvedBooksExplanation": "이 책들은 소스에는 존재하지만, 사용자의 라이브러리에 있는 어떤 책과도 일치하는 항목을 찾을 수 없었습니다.", + "mappedUsers": "매핑된 사용자 ({count})", + "mappedUsersExplanation": "사용자별 총계는 마이그레이션 계획과 함께 캐시된 모의 테스트 미리보기에서 가져옵니다.", + "coverFailures": "{count}개의 표지를 가져오지 못했습니다. 상세 실패 내역은 저장되지 않습니다." + }, + "unresolvedReason": { + "noTitleAuthorMatch": "제목이나 저자가 일치하는 책을 찾을 수 없음", + "noFilePathMatch": "파일 경로가 라이브러리 내의 어떤 책과도 일치하지 않음", + "noFileHashMatch": "파일 해시가 라이브러리 내의 어떤 책과도 일치하지 않음", + "noIsbnMatch": "ISBN이 라이브러리 내의 어떤 책과도 일치하지 않음", + "noAsinMatch": "ASIN이 라이브러리 내의 어떤 책과도 일치하지 않음", + "insufficientSourceData": "매칭을 시도하기 위한 메타데이터가 충분하지 않음", + "ambiguousIsbnMatch": "다수의 책이 동일한 ISBN을 가짐", + "ambiguousAsinMatch": "다수의 책이 동일한 ASIN을 가짐", + "ambiguousFileHashMatch": "다수의 책이 동일한 파일 해시를 가짐", + "ambiguousFilePathMatch": "다수의 책이 동일한 파일 경로를 가짐", + "ambiguousTitleAuthorMatch": "다수의 책이 같은 제목과 저자를 가짐", + "unknown": "원인을 파악할 수 없음" + }, + "matchStrategy": { + "isbn": "ISBN 일치", + "asin": "ASIN 일치", + "fileHash": "파일 해시 일치", + "pathMapping": "매핑된 파일 경로 일치", + "titleAuthor": "제목 및 저자 일치", + "unavailable": "매칭 전략 없음" + }, + "connectionError": { + "unreachable": "데이터베이스 서버에 연결할 수 없습니다. 호스트와 포트를 확인해 주세요.", + "authFailed": "인증에 실패했습니다. 사용자 이름과 비밀번호를 확인해 주세요.", + "databaseNotFound": "데이터베이스를 찾을 수 없습니다. 데이터베이스 이름을 확인해 주세요.", + "timeout": "연결 시간 초과입니다. 호스트 및 방화벽 설정을 확인하세요.", + "generic": "연결 테스트 실패" + }, + "userSelect": { + "placeholder": "사용자를 선택하세요", + "noUsersFound": "사용자를 찾을 수 없음" + }, + "toast": { + "initFailed": "마이그레이션 설정을 초기화하는 데 실패했습니다.", + "loadSupportedTypesFailed": "지원되는 마이그레이션 소스 유형을 불러오는 데 실패했습니다", + "loadTargetUsersFailed": "타겟 사용자를 불러오는 데 실패했습니다.", + "loadTargetFoldersFailed": "타겟 라이브러리 폴더를 불러오는 데 실패했습니다.", + "noSourceUsers": "소스 사용자를 불러오지 못했습니다.", + "suggestionsLoaded": "사용자 매핑 제안을 불러왔습니다.", + "loadSuggestionsFailed": "사용자 매핑 제안을 불러오는 데 실패했습니다.", + "sourceFieldsRequired": "호스트, 사용자, 데이터베이스, 소스 이름은 필수 항목입니다.", + "connectionPassedWithWarnings": "경고와 함께 연결 테스트를 통과했습니다.", + "connectionPassedWithWarningCount": "연결 테스트를 통과했으나 {count}개의 경고가 발생했습니다. 오류: {warning}", + "connectionPassed": "연결 테스트를 통과했습니다.", + "connectionMissingTables": "연결 상태는 정상이지만 {count}개의 필수 테이블이 누락되었습니다.", + "cannotTestMediaWhileRunning": "작업이 진행 중인 동안에는 미디어 경로를 테스트할 수 없습니다.", + "mediaPathRequired": "표지를 가져오려면 미디어 루트 경로가 반드시 지정되어야 합니다.", + "mediaPathAbsolute": "절대 경로를 사용하세요 (예시: /books).", + "mediaPathVerified": "미디어 경로가 확인되었습니다.", + "mediaPathValid": "미디어 경로가 유효하며 읽기가 가능합니다.", + "mediaPathValidationFailed": "미디어 경로 유효성 검사에 실패했습니다.", + "connectionFailedBeforeMedia": "연결 테스트에 실패하여 미디어 경로 유효성 검사를 완료하지 못했습니다.", + "cannotModifySourceWhileRunning": "작업이 진행 중인 동안에는 소스를 수정할 수 없습니다.", + "sourceSavedWithWarnings": "소스 저장 및 유효성 검사가 완료되었으나, {count}개의 경고가 발생했습니다.", + "sourceSaved": "소스 저장 및 유효성 검사를 완료했습니다.", + "saveSourceFailed": "소스 저장 또는 유효성 검사에 실패했습니다.", + "cannotSaveMappingsWhileRunning": "작업이 진행 중인 동안에는 매핑을 저장할 수 없습니다.", + "saveSourceFirst": "소스를 먼저 저장하세요.", + "mapAtLeastOneUser": "소스 사용자 1명 이상을 타겟 사용자에게 매핑하세요.", + "mapEveryUser": "저장하기 전에 모든 소스 사용자를 매핑하세요.", + "pathValidationFailedButSaved": "경로 유효성 검사에 실패했으나, 프로필은 저장됩니다.", + "mappingsSaved": "매핑이 저장되었습니다.", + "saveMappingsFailed": "매핑 저장에 실패했습니다.", + "cannotDryRunWhileRunning": "실행 중인 작업이 있는 동안에는 모의 테스트를 실행할 수 없습니다.", + "saveMappingsFirst": "매핑을 먼저 저장하세요.", + "dryRunCompleted": "모의 테스트 완료: {matched} 일치, {unresolved} 미해결", + "dryRunFailed": "모의 테스트에 실패했습니다.", + "selectSourceForDuplicates": "{count}개 중복 그룹에 대한 소스 도서를 선택하세요.", + "duplicatesResolved": "중복 항목이 해결되었습니다.", + "resolveDuplicatesFailed": "중복 제거에 실패했습니다.", + "preflightNotReady": "마이그레이션 사전 점검이 미완료 상태입니다.", + "runDryRunFirst": "먼저 모의 테스트를 실행하세요.", + "runStarted": "마이그레이션이 시작되었습니다.", + "startFailed": "마이그레이션 시작에 실패했습니다.", + "runCancelled": "마이그레이션이 취소되었습니다.", + "cancelFailed": "마이그레이션 취소에 실패했습니다.", + "runRetried": "마이그레이션을 재시도합니다. (마지막 완료 단계부터 재개)", + "retryFailed": "마이그레이션 재시도에 실패했습니다.", + "loadProgressFailed": "진행 상황 불러오기에 실패했습니다.", + "startMigrationFirst": "먼저 마이그레이션을 시작하세요.", + "reportRefreshed": "갱신된 보고서 실행", + "loadReportFailed": "실행 보고서 불러오기에 실패했습니다.", + "reportExported": "{format} 형식으로 보고서를 내보냈습니다.", + "exportFailed": "마이그레이션 보고서 내보내기에 실패했습니다." + } + }, + "notifications": { + "title": "알림", + "description": "알림을 확인하고 관리하세요.", + "markAllRead": "모두 읽음 처리", + "clear": "지우기", + "empty": "아직 알림이 없습니다", + "loadMore": "알림 더보기", + "preferences": { + "title": "알림", + "subtitle": "받아보길 원하는 알림의 카테고리를 선택하세요.", + "saving": "저장 중...", + "unsavedChanges": "저장되지 않은 변경 사항 있음", + "saved": "알림 설정이 저장되었습니다.", + "saveFailed": "설정 저장에 실패했습니다.", + "savePreferenceFailed": "설정 저장에 실패했습니다.", + "whatsNewToggle": "업데이트 후 \"새로운 기능\" 표시", + "whatsNewToggleHint": "앱 업데이트 후 새로운 기능을 알리는 팝업이 표시됩니다. 아카이브는 어떤 경우에도 계속 확인할 수 있습니다.", + "groups": { + "library": "라이브러리", + "files": "파일", + "integrations": "통합", + "personal": "개인", + "app": "앱 업데이트" + }, + "enabledCount": "{total} / {enabled} 활성화됨", + "categories": { + "scanning": { + "label": "라이브러리 스캐닝", + "description": "라이브러리 스캔이 완료되었거나, 실패했거나, 또는 누락된 책을 발견했을 때." + }, + "metadata": { + "label": "메타데이터 가져오기", + "description": "도서의 메타데이터 조회가 완료되었거나 실패했을 때." + }, + "authorEnrichment": { + "label": "저자 정보 풍부화", + "description": "저자 약력 및 사진 가져오기가 완료되었을 때." + }, + "fileWriteBack": { + "label": "파일 다시 쓰기", + "description": "수정된 메타데이터가 디스크상의 책 파일에 다시 쓰여졌을 때." + }, + "fileRename": { + "label": "파일명 변경", + "description": "단일 책 파일이 사용자의 명명 패턴에 맞춰 이름이 변경되었을 때." + }, + "bulkRename": { + "label": "일괄 이름 변경", + "description": "여러 권의 책에 대한 일괄 이름 변경이 완료되었거나 실패했을 때." + }, + "migration": { + "label": "데이터 마이그레이션", + "description": "다른 라이브러리 앱으로부터의 가져오기가 완료되었거나 실패했을 때." + }, + "bookDock": { + "label": "책 창고", + "description": "창고에 들어온 파일을 검토하고 확정 할 준비가 되었을 때." + }, + "koboSync": { + "label": "Kobo 동기화", + "description": "Kobo 기기가 라이브러리와 동기화를 완료했을 때." + }, + "email": { + "label": "이메일 전송", + "description": "이메일 주소로의 책 전송이 성공하거나 실패했을 때" + }, + "achievements": { + "label": "업적", + "description": "새로운 독서 업적을 달성했을 때." } } } + }, + "reader": { + "retry": "재시도", + "pdf": { + "openError": "이 PDF를 열 수 없음", + "preparing": "PDF 리더를 준비하는 중", + "opening": "PDF를 여는 중" + }, + "loadingBook": "책 로딩 중...", + "failedToLoadBook": "책을 불러오는 데 실패했습니다.", + "chapterNumber": "챕터 {number}", + "peek": { + "badge": "미리보기", + "startReading": "읽기 시작하기" + }, + "toast": { + "linkedHighlightError": "연결된 하이라이트 위치를 열 수 없었습니다.", + "resumed": "{pct}% 지점에서 재시작 - {label}" + }, + "header": { + "goBack": "뒤로 가기", + "tableOfContents": "목차", + "toggleBookmark": "책갈피 토글", + "cycleFooterMode": "하단 바 정보 모드 변경", + "keyboardShortcutsHint": "키보드 단축키 (?)", + "enterFullscreen": "전체 화면으로 전환", + "exitFullscreen": "전체 화면 종료", + "footerMode": { + "pageProgress": "하단 바 정보: 페이지 + 진행도", + "sessionTimeLeft": "하단 바 정보: 독서 기록, 남은 시간", + "chapterTimeLeft": "하단 바 정보: 챕터 + 남은 챕터 시간" + } + }, + "footer": { + "previousSection": "이전 섹션", + "nextSection": "다음 섹션", + "goToPlaceholder": "45 또는 p123", + "jumpToLocation": "특정 위치로 이동", + "jumpTooltip": "% 또는 페이지로 이동 (예시: 45 또는 p123)", + "go": "가라" + }, + "settings": { + "title": "설정", + "ariaLabel": "리더 설정", + "close": "설정 닫기", + "reset": "기본값으로 재설정", + "modeLabel": "색상 모드", + "mode": { + "light": "라이트", + "dark": "다크" + }, + "textSize": "텍스트 크기", + "textSizeSmaller": "텍스트 축소", + "textSizeLarger": "텍스트 확대", + "pixels": "{value} px", + "percent": "{value}%", + "pageColor": "페이지 색상", + "font": "폰트", + "fontBuiltIn": "내장 폰트", + "fontServer": "서버 폰트", + "fontYours": "사용자 폰트", + "fontStyle": "스타일", + "fontStyleItalicOf": "{style} 기울임꼴", + "lineSpacing": "줄 간격", + "pageWidth": "페이지 너비", + "pageWidthNarrow": "좁게", + "pageWidthMedium": "중간", + "pageWidthWide": "와이드", + "pageWidthFull": "전체", + "readingFlow": "읽기 흐름", + "flow": { + "paginated": "페이지", + "scrolled": "스크롤" + }, + "pageSpreads": "페이지 쌍", + "pageSpreadsHint": "이 이미지 기반 EPUB의 페이지를 묶을 방식을 선택하세요.", + "spread": { + "bookDefault": "책 기본값", + "singlePage": "단일 페이지" + }, + "advanced": "고급 레이아웃", + "columns": "열", + "columnsFewer": "열 제거", + "columnsMore": "열 추가", + "columnGap": "열 간격", + "justifyText": "텍스트 양쪽 맞춤", + "hyphenation": "하이픈 처리", + "themes": { + "default": "기본", + "gray": "그레이", + "sepia": "세피아", + "crimson": "크림슨", + "meadow": "매도우", + "rosewood": "로즈우드", + "azure": "애저", + "dawnlight": "던라이트", + "ember": "엠버", + "aurora": "오로라", + "ocean": "오션", + "mist": "미스트", + "amoled": "아몰레드" + }, + "fonts": { + "bookDefault": "책 기본값", + "serif": "명조", + "sansSerif": "고딕", + "monospace": "고정폭 " + } + }, + "search": { + "placeholder": "책에서 검색 (최소 {min}자 이상)...", + "searching": "검색 중...", + "tooShort": "최소 {min}자 이상 입력하세요", + "noResults": "검색 결과가 없습니다", + "prompt": "검색어를 입력하세요", + "resultCount": "{count, plural, =0 {결과 없음} one {#건의 결과} other {#건의 결과}}" + }, + "sidebar": { + "tabs": { + "chapters": "챕터", + "bookmarks": "책갈피", + "highlights": "하이라이트", + "toc": "목차", + "tocShort": "목차", + "marksShort": "책갈피", + "notesShort": "필기" + }, + "pin": "사이드바 고정", + "unpin": "사이드바 고정 해제", + "close": "사이드바 닫기", + "noChapters": "챕터가 없습니다", + "noBookmarks": "아직 책갈피가 없습니다", + "noBookmarksMatch": "필터 조건에 맞는 책갈피가 없습니다", + "noHighlights": "아직 하이라이트가 없습니다", + "noHighlightsMatch": "필터 조건에 맞는 하이라이트가 없습니다", + "searchBookmarks": "책갈피 검색...", + "searchHighlights": "하이라이트 검색...", + "bookmarkFallback": "책갈피", + "locationUnavailable": "위치를 파악할 수 없음", + "customColor": "커스텀 ({color})", + "allColors": "모든 색상", + "allChapters": "모든 챕터", + "notesOnly": "메모만", + "deleteBookmark": "책갈피 삭제", + "deleteHighlight": "하이라이트 삭제", + "approximatePosition": "기기에서 동기화되었습니다. 정확한 위치를 알 수 없어 챕터로 이동합니다", + "sort": { + "readingOrder": "읽은 순", + "newest": "최신순", + "oldest": "오래된 순" + } + }, + "selection": { + "copy": "복사", + "copied": "복사되었습니다!", + "highlight": "하이라이트", + "translate": "번역", + "define": "정의", + "deleteAnnotation": "필기 삭제", + "apply": "적용" + }, + "note": { + "title": "메모 추가", + "placeholder": "메모를 작성하세요..." + }, + "dictionary": { + "noDefinition": "정의를 찾을 수 없습니다", + "loadError": "정의를 불러올 수 없습니다." + }, + "translation": { + "original": "원문", + "translation": "번역문", + "translating": "번역 중...", + "noTranslation": "아직 번역이 없습니다", + "viaProvider": "- {provider}", + "copyTranslation": "번역 복사" + }, + "shortcuts": { + "title": "단축키", + "groups": { + "panels": "패널", + "reading": "독서", + "actions": "행동" + }, + "toggleToc": "목차 보기/숨기기", + "toggleSearch": "검색창 보기/숨기기", + "toggleHelp": "도움말 보기/숨기기", + "closePanel": "패널 닫기", + "prevNextPage": "이전/다음 페이지", + "goToStart": "책의 처음으로 이동", + "goToEnd": "책의 끝으로 이동", + "toggleBookmark": "책갈피 보기/숨기기", + "toggleFullscreen": "전체 화면 전환", + "cycleFooterMode": "하단 바 정보 모드 변경" + }, + "cbz": { + "fitMode": "맞춤 모드", + "background": "배경", + "scrollMode": "스크롤 모드", + "scrollModeHint": "웹툰 및 세로형 배치에는 \"간격 없음\"을 사용하세요.", + "readingDirection": "읽기 방향", + "pageView": "페이지 보기", + "twoPagePagedOnly": "두 페이지 보기는 페이지 모드에서만 표시됩니다.", + "spreadSection": "페이지 쌍", + "spreadFallbackHint": "이 화면은 두 페이지를 담기에 너무 좁아, 단일 페이지로 표시됩니다.", + "spreadAlignmentLabel": "페이지 쌍 정렬", + "spreadGap": "페이지 쌍 간격", + "spreadGapValue": "{value}px", + "forceTwoPage": "2페이지 강제", + "widePages": "넓은 페이지", + "firstPage": "첫 페이지", + "lastPage": "마지막 페이지", + "zoomControls": "배율 조정", + "zoomOut": "축소", + "zoomIn": "확대", + "fit": { + "page": "페이지 맞춤", + "width": "페이지 폭", + "height": "페이지 높이", + "actual": "실제 크기" + }, + "view": { + "single": "1페이지", + "twoPage": "2페이지" + }, + "scroll": { + "paged": "페이지", + "infinite": "무한(간격 있음)", + "noGaps": "무한(간격 없음)" + }, + "direction": { + "ltr": "LTR", + "rtl": "RTL" + }, + "spreadAlignment": { + "normal": "일반", + "shifted": "이동했다" + }, + "widePage": { + "auto": "자동", + "inSpreads": "페이지 쌍" + }, + "bg": { + "black": "검은색", + "gray": "회색", + "white": "흰색" + } + }, + "audiobook": { + "untitled": "제목 없음", + "loading": "오디오북 로딩 중...", + "loadError": "오디오북 로드에 실패했습니다.", + "noAudioFiles": "이 책에 대한 오디오 파일을 찾을 수 없습니다.", + "speed": "속도", + "chapters": "챕터", + "bookmarks": "책갈피", + "volume": "볼륨", + "muted": "음소거됨", + "sleep": "수면", + "chapterAbbrev": "Ch.", + "sleepTimer": "수면 타이머", + "minutes": "{count, plural, one {#분} other {#분}}", + "endOfChapter": "챕터 끝", + "noChaptersAvailable": "챕터가 없습니다", + "extend15": "+ 15분", + "timeLeft": "({time} 남음)", + "playbackSpeed": "재생 속도", + "noChapters": "챕터가 없습니다.", + "noBookmarks": "아직 책갈피가 없습니다.", + "noBookmarksHint": "상단에 있는 책갈피 아이콘을 클릭하여 현재 위치를 저장하세요.", + "playerSettings": "플레이어 설정", + "skipBack": "되감기", + "skipForward": "빨리 감기" + } + }, + "scanner": { + "filesProgress": "{processed}/{total} 파일", + "booksFound": "{count, plural, =0 {책을 찾지 못했습니다} one {#권의 책을 찾았습니다} other {#권의 책을 찾았습니다}}" + }, + "series": { + "completion": { + "readOfTotal": "{read} / {total} 읽음 ({percentage}%)" + }, + "ownership": { + "label": "라이브러리 현황", + "ownedOfExpected": "라이브러리에 전체 {expected}권 중 {owned}권 보유 중" + }, + "gaps": { + "label": "가능한 간격:" + }, + "filters": { + "title": "시리즈 필터", + "clearAll": "전체 초기화", + "allLibraries": "모든 라이브러리", + "allCompletion": "모든 완료 항목", + "notStarted": "시작하지 않음", + "inProgress": "진행 중", + "complete": "완료" + }, + "list": { + "title": "시리즈", + "showControlsAria": "시리즈 컨트롤 표시", + "searchPlaceholder": "시리즈 또는 저자 검색", + "sortButton": "정렬", + "sortBy": "정렬 기준", + "ascending": "오름차순", + "descending": "내림차순", + "ascShort": "오름차순", + "descShort": "내림차순", + "filters": "필터", + "clear": "초기화", + "noMatch": "필터 조건에 맞는 시리즈가 없습니다.", + "empty": "라이브러리에서 시리즈를 찾을 수 없습니다.", + "sort": { + "name": "이름", + "bookCount": "도서 수", + "recentAdditions": "최근 추가된 순", + "readingProgress": "독서 진행도순" + } + }, + "detail": { + "pageTitle": "시리즈", + "pageTitleNamed": "시리즈 · {name}", + "pageTitleWithId": "시리즈 #{id}", + "entityName": "시리즈", + "bookCount": "{count, plural, =0 {책 없음} one {책 #권} other {책 #권}}", + "byAuthors": "by {authors}", + "moreAuthors": "+{count}명", + "preparingEditor": "편집기를 준비하는 중...", + "editMetadata": "메타데이터 편집", + "firstInSeries": "시리즈 첫 번째 작품", + "untitled": "제목 없음", + "loadingFirstBook": "첫 번째 작품 미리보기 로딩 중...", + "showLess": "접기", + "showMore": "더 보기", + "moreGenres": "+{count}개", + "synopsis": "줄거리", + "noDescription": "설명 없음.", + "updatingPreview": "미리보기를 업데이트하는 중...", + "noBooksToPreview": "미리보기 가능한 도서가 없습니다.", + "loadingSeries": "시리즈 로딩 중...", + "booksHeading": "책", + "allLibraries": "모든 라이브러리", + "groupByMedia": "미디어별 그룹화", + "noBooksFound": "이 시리즈에 포함된 책을 찾을 수 없습니다.", + "trySelectingLibrary": "다른 라이브러리를 선택해 보세요.", + "allBooksLoaded": "총 {count}권의 책을 불러왔습니다.", + "leadBookLoadError": "첫 번째 책의 상세 정보를 불러오는 데 실패했습니다.", + "noBooksToEdit": "이 시리즈에는 편집할 책이 없습니다.", + "loadFullSeriesError": "편집을 위해 전체 시리즈 로드하는 데 실패했습니다.", + "sort": { + "seriesOrder": "시리즈순", + "title": "제목순", + "recentlyAdded": "최근 추가된 순" + }, + "order": { + "ascending": "오름차순", + "descending": "내림차순" + } + } + }, + "smartScope": { + "syncToKobo": "Kobo와 동기화", + "syncToKoboHint": "이 스코프에 일치하는 도서는 Kobo 기기에 표시됩니다.", + "visibleToAll": "모든 사용자에게 표시", + "visibleToAllHint": "모든 사용자가 이 스마트 스코프를 보고 사용할 수 있습니다", + "dialog": { + "name": "이름", + "namePlaceholder": "예시: 읽지 않은 SF 소설", + "icon": "아이콘", + "iconPlaceholder": "아이콘을 선택하세요...", + "nameRequired": "이름이 필요합니다", + "iconRequired": "아이콘을 선택하세요", + "create": "생성", + "creating": "생성 중...", + "saving": "저장 중..." + }, + "createDialog": { + "title": "새 스마트 스코프", + "createFailed": "스마트 스코프 생성에 실패했습니다." + }, + "saveAsDialog": { + "title": "스마트 스코프로 저장", + "save": "스마트 스코프 저장", + "saveFailed": "스마트 스코프 저장에 실패했습니다." + }, + "editorPanel": { + "untitled": "이름 없는 스마트 스코프", + "subtitle": "스마트 스코프 설정 구성", + "counting": "계산 중...", + "bookCount": "{count, plural, =0 {책 없음} one {책 1권} other {책 #권}}", + "identity": "인증", + "filters": "필터", + "noFilters": "필터가 설정되지 않았습니다. 접근 가능한 모든 도서가 이 스마트 스코프에 포함됩니다.", + "buildFromScratch": "처음부터 구축", + "replaceWithTemplate": "템플릿으로 대체:", + "defaultSort": "기본 정렬", + "saveChanges": "변경 사항 저장", + "saveFailed": "저장에 실패했습니다.", + "templates": { + "hasSeries": "시리즈 보유", + "addedRecently": "최근 추가된 항목", + "pdfOnly": "PDF 단독", + "noGenres": "장르 없음", + "epubOnly": "EPUB 단독" + } + } + }, + "statistics": { + "tabs": { + "library": "라이브러리 통계", + "user": "내 독서 기록" + }, + "filter": { + "allLibraries": "모든 라이브러리", + "librarySelection": "총 {total}개 라이브러리 중 {count}개" + }, + "config": { + "button": "설정", + "title": "차트 설정", + "description": "드래그하여 순서 변경, 토글하여 보이기/숨기기", + "reset": "기본값으로 초기화" + }, + "summary": { + "books": "책", + "authors": "저자", + "series": "시리즈", + "publishers": "출판사", + "storage": "저장 공간", + "genres": "장르", + "languages": "언어", + "published": "출판 기간", + "thisYear": "올해", + "started": "읽기 시작", + "inProgress": "읽는 중", + "completed": "읽기 완료", + "avgProgress": "평균 진행도" + }, + "card": { + "loadError": "데이터 로드에 실패했습니다.", + "emptyTitle": "아직 데이터가 없음", + "emptyDescription": "해당 차트를 위한 데이터가 없습니다", + "unknownField": "{count, plural, =0 {이 필드에 데이터가 없습니다} one {#권의 책이 이 필드를 위한 데이터를 가지고 있지 않습니다} other {#권의 책이 이 필드를 위한 데이터를 가지고 있지 않습니다}}" + }, + "breakdown": { + "ariaLabel": "소스 또는 포맷별로 분류" + }, + "empty": { + "notEnoughData": "아직 데이터가 충분하지 않습니다" + }, + "charts": { + "acquisitionLag": { + "title": "출판-등록 간극" + }, + "booksAddedOverTime": { + "title": "기간별 추가된 도서 수", + "monthly": "월간", + "yearly": "연간", + "allTime": "전체", + "last5Years": "지난 5년간", + "lastYear": "작년" + }, + "formatDistribution": { + "title": "포맷 분포" + }, + "formatShareOverTime": { + "title": "기간별 포맷 비율" + }, + "genreCooccurrence": { + "title": "장르 동시 출현" + }, + "genreDistribution": { + "title": "장르 분포" + }, + "languageDistribution": { + "title": "언어 분포" + }, + "largestBooks": { + "title": "Top 50 분량" + }, + "libraryIntegrity": { + "title": "라이브러리 무결성" + }, + "libraryMetadataCompleteness": { + "title": "라이브러리 메타데이터 완전성" + }, + "metadataCompleteness": { + "title": "메타데이터 완전성" + }, + "metadataFreshness": { + "title": "메타데이터 최신성" + }, + "metadataScoreDistribution": { + "title": "메타데이터 점수 분포" + }, + "pageCountDistribution": { + "title": "페이지 수 분포" + }, + "publicationDecade": { + "title": "출판 연대" + }, + "publicationYearTimeline": { + "title": "출판 연도 타임라인" + }, + "storageByFormat": { + "title": "포맷 별 저장 공간 점유율" + }, + "topAuthors": { + "title": "Top 25 저자" + }, + "topSeries": { + "title": "Top 50 시리즈" + }, + "booksCompleted": { + "title": "완독 도서", + "notEnoughData": "이 차트를 보려면 최소 {count}권의 책을 완독해야 합니다." + }, + "completionLatency": { + "title": "완독 시간", + "notEnoughData": "이 차트를 보려면 최소 {count}권의 책을 완독해야 합니다." + }, + "completionTimeline": { + "title": "완독 타임라인", + "notEnoughData": "이 차트를 보려면 최소 {count}권의 책을 완독해야 합니다." + }, + "favoriteReadingDays": { + "title": "선호하는 독서일", + "notEnoughData": "이 차트를 보려면 최소 {count}개의 독서 이벤트가 필요합니다." + }, + "genreReadingTime": { + "title": "장르별 독서 시간", + "notEnoughData": "이 차트를 보려면 최소 {count}개의 독서 이력이 있는 장르가 필요합니다." + }, + "goalTrajectory": { + "title": "속도 vs 목표", + "noCompletedTitle": "아직 완독한 책이 없습니다", + "noCompletedDescription": "이 기간 동안 책 한 권을 완독하여, 연간 목표 대비 자신의 진도를 비교해 보세요.", + "notEnoughData": "이 차트를 보려면 최소 {count}권의 책을 완독해야 합니다." + }, + "peakReadingHours": { + "title": "독서 피크 시간", + "notEnoughData": "이 차트를 보려면 최소 {count}개의 독서 이벤트가 필요합니다." + }, + "progressFunnel": { + "title": "진행도 전환율", + "modePercent": "백분율", + "modeCounts": "카운트", + "modeDropoff": "하차 지점", + "started": "{count}개 시작됨", + "notEnoughData": "이 차트를 보려면 최소 {count}권의 읽기 시작한 책이 필요합니다.", + "noDropOffTitle": "하차된 책이 관찰되지 않았습니다", + "noDropOffDescription": "이 기간 동안 읽기 시작한 모든 도서는 모든 단계를 거쳐 완독되었습니다." + }, + "readingClock": { + "title": "독서 시계", + "notEnoughData": "이 차트를 보려면 최소 {count}개의 독서 기록이 필요합니다." + }, + "readingHeatmap": { + "title": "독서 히트맵", + "notEnoughData": "이 차트를 보려면 최소 {count}일 동안의 활동 기록이 필요합니다." + }, + "readingPace": { + "title": "독서 속도", + "notEnoughData": "이 차트를 보려면 진행도 데이터가 포함된 최소 {count}개의 독서 기록이 필요합니다." + }, + "readingSessionTimeline": { + "title": "독서 기록 타임라인", + "dragOn": "드래그: 켜짐", + "dragOff": "드래그: 꺼짐", + "prev": "이전", + "next": "다음", + "week": "{week}주차", + "dragHint": "기록을 이동하려면 바를 드래그하세요. 기간은 고정되어 있으며, 중복되는 기록은 거부됩니다.", + "noSessionsTitle": "현재 주차에는 기록이 없습니다", + "noSessionsDescription": "이전/다음 버튼 또는 주차 선택기를 사용하여 다른 주를 확인하세요.", + "overlapError": "이 시간 범위 내에서 기록이 다른 기록과 중복됩니다.", + "moveError": "기록 이동에 실패했습니다." + }, + "sessionArchetypes": { + "title": "기록 분석" + }, + "sourceDistribution": { + "title": "독서 기기", + "emptyTitle": "아직 독서 활동이 없습니다", + "emptyDescription": "웹 또는 KOReader, Kobo 기기에서 독서 후 소스 분포를 확인해 보세요." + } + } + }, + "tools": { + "header": { + "entityManager": "개체 관리자", + "bulkRename": "일괄 이름 변경", + "duplicateBooks": "중복 도서" + }, + "entityTypes": { + "authors": "저자", + "genres": "장르", + "tags": "태그", + "narrators": "내레이터", + "publishers": "출판사", + "languages": "언어", + "series": "시리즈" + }, + "bulkRename": { + "previewToolbar": "이름 변경 미리보기", + "renameSettings": "이름 변경 설정", + "library": "라이브러리", + "selectLibraryPlaceholder": "라이브러리를 선택하세요...", + "noEligibleLibraries": "파일 이름 변경 기능이 활성화된 라이브러리가 없습니다. 라이브러리 설정에서 활성화해 주세요.", + "refresh": "새로고침", + "applyRename": "이름 변경 적용", + "showFullPaths": "전체 경로 표시", + "columnsMenu": "열", + "renamingInProgress": "파일 이름 변경 중 - 언제든지 취소할 수 있습니다.", + "executionFailed": "일괄 이름 변경에 실패했습니다.", + "previewFailed": "미리보기를 불러오는 데 실패했습니다.", + "noBooksMatch": "현재 필터와 일치하는 책이 없습니다.", + "openBookDetails": "책 상세 정보 열기", + "columns": { + "title": "제목", + "currentPath": "현재 경로", + "newPath": "새 경로", + "status": "상태" + }, + "status": { + "willRename": "이름 변경 예정", + "unchanged": "변화 없음", + "collision": "충돌", + "noPattern": "패턴 없음", + "error": "오류" + }, + "filter": { + "all": "모두" + }, + "summary": { + "label": "요약", + "toRename": "{count}개 이름 변경", + "unchanged": "{count} 변화 없음", + "collisions": "{count, plural, =0 {#개 충돌} one {#개 충돌} other {#개 충돌}}", + "errors": "{count, plural, =0 {#개 오류} one {#개 오류} other {#개 오류}}" + }, + "empty": { + "title": "작업할 라이브러리를 선택하세요", + "description": "위에서 라이브러리를 선택하여 이름 변경 사항을 미리 확인하고, 상태별로 필터링하고, 일괄 이름 변경을 실행할 수 있습니다.", + "chooseLibrary": "라이브러리 선택" + }, + "completed": { + "title": "일괄 이름 변경 완료", + "stats": "{succeeded}개 항목 이름 변경됨, {failed}개 실패, {skipped}개 건너뜀 (총 {processed}개 항목)" + }, + "pagination": { + "showing": "총 {total}개 항목 중 {from}-{to} 표시" + }, + "confirmDialog": { + "title": "일괄 이름 변경 확인", + "body": "{count, plural, =0 {이 작업은 디스크 내 #개 파일의 이름을 변경합니다. 충돌이나 오류가 있는 파일은 건너뜁니다. 이 작업은 되돌릴 수 없습니다.} one {이 작업은 디스크 내 #개 파일의 이름을 변경합니다. 충돌이나 오류가 있는 파일은 건너뜁니다. 이 작업은 되돌릴 수 없습니다.} other {이 작업은 디스크 내 #개 파일의 이름을 변경합니다. 충돌이나 오류가 있는 파일은 건너뜁니다. 이 작업은 되돌릴 수 없습니다.}}", + "renameButton": "{count, plural, =0 {#권 이름 변경} one {#권 이름 변경} other {#권 이름 변경}}" + } + }, + "bookDuplicates": { + "scanSettings": "스캔 설정", + "title": "중복 도서", + "description": "잠재적인 중복 레코드를 찾기 위해 파일과 메타데이터를 스캔합니다. 스캔 과정 중에는 아무것도 삭제되지 않습니다.", + "scope": "라이브러리 범위", + "allLibraries": "접근 가능한 모든 라이브러리", + "similarity": "제목 유사도 임계값", + "explainSimilarity": "제목 유사도 임계값 설명", + "similarityHelp": "유사 제목 및 저자 매칭에만 적용됩니다. 최소한 하나 이상의 저자, 도서 유형이 일치해야 합니다. 수치가 낮을수록 더 많은 중복 항목이 탐색되고, 높을수록 보다 유사한 제목을 요구합니다. 동일 파일 여부, ISBN/메타데이터 일치 여부는 별도로 확인됩니다.", + "runScan": "스캔 실행", + "rescan": "재스캔", + "status": { + "queued": "스캔 대기 중", + "running": "도서 스캔 중" + }, + "groupsFound": "{count, plural, =0 {중복 그룹 없음} one {중복 그룹 1개} other {중복 그룹 #개}}", + "filter": "매칭 유형", + "allReasons": "모든 매칭 유형", + "reasons": { + "file_hash": "동일 파일", + "isbn": "동일 ISBN", + "exact_metadata": "동일한 제목 및 저자", + "fuzzy_metadata": "유사한 제목 및 저자" + }, + "similarityValue": "제목 유사도 {percent}%", + "notDuplicates": "중복 도서가 아님", + "keepThis": "이 책 유지하기", + "discardThis": "이 책 버리기", + "selectKeeperFirst": "유지하려는 책을 먼저 선택하세요", + "noDirectMatch": "유지하려는 책과 일치하는 요소가 없습니다", + "moreFiles": "+{count}개", + "showDetails": "상세 정보 보기", + "hideDetails": "상세 정보 숨기기", + "deleteSelected": "선택된 {count}개 항목 삭제", + "openBook": "{title} 상세 정보 열기", + "unknownAuthor": "알 수 없는 저자", + "unknown": "알 수 없음", + "none": "없음", + "accessDenied": "중복 도서 도구를 사용할 권한이 없습니다.", + "pairDetails": "일치 내역 상세", + "pairLabel": "{first} 및 {second}", + "fields": { + "library": "라이브러리", + "isbn": "ISBN", + "formats": "포맷", + "fileLocation": "파일", + "files": "파일", + "readingStatus": "독서 상태", + "progress": "진행도", + "path": "라이브러리 경로", + "collections": "컬렉션", + "added": "추가일시", + "updated": "수정일시" + }, + "initial": { + "title": "중복 책 찾기", + "description": "라이브러리 범위와 유사도 수준을 선택한 다음 스캔을 실행하세요. 직접 삭제하기 전까지는 책이 변경되지 않습니다." + }, + "empty": { + "title": "중복 그룹이 없습니다", + "description": "현재 범위, 유사도 수준, 및 매칭 필터와 일치하는 책이 없습니다." + }, + "deleteDialog": { + "title": "중복 도서를 영구적으로 삭제하시겠습니까?", + "warning": "메타데이터, 컬렉션, 독서 데이터 및 기기 상태는 유지되는 책으로 전송되지 않습니다. 다른 사용자의 관련 데이터도 제거됩니다.", + "confirm": "{count, plural, =0 {책 #권 삭제} one {책 #권 삭제} other {책 #권 삭제}}", + "success": "{count, plural, =0 {삭제된 책이 없습니다.} one {중복 도서 #권이 삭제되었습니다.} other {중복 도서 #권이 삭제되었습니다.}}" + }, + "errors": { + "start": "중복 스캔을 시작할 수 없습니다.", + "status": "스캔 진행 상황을 불러올 수 없습니다.", + "scan": "중복 스캔에 실패했습니다. 다시 시도해 주세요.", + "results": "중복 그룹을 로드할 수 없습니다.", + "delete": "선택된 중복 도서를 삭제할 수 없었습니다." + }, + "pagination": { + "label": "중복 그룹 페이지", + "page": "총 {total}페이지 중 {page}페이지" + } + }, + "entityManager": { + "unknown": "알 수 없음", + "bookCount": "{count, plural, =0 {책 없음} one {책 #권} other {책 #권}}", + "sortPrefix": "· 정렬: {sortName}", + "selectTargetToKeep": "유지할 대상을 선택하세요", + "writeToFiles": "파일에 작성", + "writeChangesToFiles": "파일에 변경 사항 작성", + "mergeIntoTarget": "{count}개 항목을 대상에 병합", + "modes": { + "browse": "탐색 및 관리", + "duplicates": "중복 항목 찾기" + }, + "actions": { + "rename": "이름 바꾸기", + "split": "분할" + }, + "duplicates": { + "similarity": "유사도:", + "scan": "스캔", + "scanning": "스캔 중...", + "computing": "후보 계산 중...", + "computedAt": "후보 계산 일시 {date}", + "recompute": "재계산", + "noneComputed": "후보가 아직 계산되지 않았습니다.", + "computeNow": "지금 계산", + "emptyTitle": "중복 개체 찾기", + "emptyDescription": "유사도 임계값을 조정하고 스캔을 클릭하여 잠재적인 중복 항목을 탐지하세요.", + "noneFoundTitle": "중복 항목을 찾지 못했습니다", + "noneFoundDescription": "현재 설정으로는 잠재적인 중복 데이터가 감지되지 않았습니다.", + "clustersFound": "{count, plural, =0 {클러스터 미발견} one {#개 클러스터 발견} other {#개 클러스터 발견}}", + "plusOthers": "{count, plural, =0 {+ #개 항목} one {+ #개 항목} other {+ #개 항목}}", + "percentSimilar": "{percent}% 유사", + "pairDetails": "개체 쌍 상세 정보", + "dismissEntityTitle": "이 개체에 연결된 모든 쌍 제거", + "dismissPairTitle": "이 쌍 제거" + }, + "dismissed": { + "loading": "제거된 쌍 로딩 중...", + "empty": "제거된 쌍 없음", + "restore": "복원", + "restoreTitle": "이 쌍 복원", + "hidePairs": "제거된 쌍 숨기기", + "showPairs": "제거된 쌍 보기" + }, + "browse": { + "searchPlaceholder": "검색...", + "emptyOnly": "빈 항목만", + "clear": "지우기", + "noEntities": "개체를 찾을 수 없습니다", + "mergeCount": "병합 ({count}개)", + "deleteCount": "삭제 ({count}개)", + "totalCount": "총 {count}개", + "sortLabel": "정렬: {sortName}", + "sort": { + "nameAsc": "이름 A-Z", + "nameDesc": "이름 Z-A", + "fewestBooks": "도서 적은 순", + "mostBooks": "도서 많은 순" + } + }, + "deleteMode": { + "label": "삭제 모드", + "softTitle": "논리적 삭제", + "softDescription": "모든 책과의 연결을 해제하되, 개체 레코드는 유지합니다.", + "softDescriptionPlural": "모든 책과의 연결을 해제하되, 개체 레코드는 유지합니다.", + "hardTitle": "영구 삭제", + "hardDescription": "개체와 그 모든 연관 관계를 영구적으로 제거합니다.", + "hardDescriptionPlural": "개체와 그 모든 연관 관계를 영구적으로 제거합니다." + }, + "renameModal": { + "title": "개체 이름 변경", + "currentName": "현재 이름", + "newName": "새 이름" + }, + "deleteModal": { + "title": "개체 삭제", + "confirm": "정말로 {name}을(를) 삭제하시겠습니까?" + }, + "splitModal": { + "title": "개체 분할", + "splitting": "분할하는 중", + "newNames": "새 이름 (최소 2개)", + "namePlaceholder": "이름을 입력하세요...", + "addAnother": "항목 추가" + }, + "bulkDeleteModal": { + "title": "일괄 삭제", + "confirm": "{count, plural, =0 {정말 선택된 #개의 개체를 삭제하시겠습니까?} one {정말 선택된 #개의 개체를 삭제하시겠습니까?} other {정말 선택된 #개의 개체를 삭제하시겠습니까?}}", + "deleteButton": "{count}개 항목 삭제" + }, + "mergeModal": { + "title": "개체 병합", + "description": "유지할 개체를 선택하세요. 나머지 개체들은 선택된 개체에 병합된 후 제거됩니다." + } + } + }, + "views": { + "entity": { + "book": "책", + "collection": "컬렉션", + "library": "라이브러리", + "smartScope": "스마트 스코프" + }, + "common": { + "retry": "재시도" + }, + "bookView": { + "sort": "정렬", + "sortOn": "기준값", + "resetSort": "정렬 기준 초기화", + "filters": "필터", + "clear": "초기화", + "clearAllFilters": "모든 필터 초기화", + "expandSeries": "시리즈 펼치기", + "collapseSeries": "시리즈 접기", + "collapseLockedWhileSelecting": "선택하는 동안 시리즈가 확장된 상태를 유지합니다", + "expanded": "펼침", + "exportMetadata": "메타데이터 내보내기", + "showControlsAria": "라이브러리 컨트롤 표시", + "export": "내보내기", + "searchPlaceholder": "제목, 저자, 시리즈, 내레이터 검색...", + "allBooksLoaded": "총 {count}권의 책이 로드되었습니다." + }, + "notFound": { + "title": "페이지를 찾을 수 없음", + "description": "요청하신 페이지가 존재하지 않습니다.", + "goHome": "홈" + }, + "dashboard": { + "customize": "대시보드 커스터마이징", + "allShelvesHidden": "모든 선반이 숨겨져 있습니다.", + "greeting": { + "night": "안녕하세요,", + "morning": "좋은 아침이에요,", + "afternoon": "안녕하세요,", + "evening": "안녕하세요,", + "fallbackName": "사용자님" + } + }, + "bookDetail": { + "title": "책", + "titleWithId": "책 #{id}", + "pageTitle": { + "book": "책 · {base}", + "editMetadata": "메타데이터 편집 · {base}", + "edit": "편집 · {base}", + "files": "파일 · {base}", + "readingLog": "독서 기록 · {base}", + "highlights": "하이라이트 · {base}" + } + }, + "bookDock": { + "title": "책 창고", + "newFilesDetected": "새 파일이 감지되었습니다.", + "reconnecting": "재연결 중", + "rescanFailed": "재스캔에 실패했습니다.", + "totalInDock": "책 창고 내 {size}", + "dropFiles": "파일을 책 창고에 끌어다 놓으세요", + "supportedFormats": "지원 포맷: {formats}", + "empty": { + "noSearchMatch": "\"{query}\"와(과) 일치하는 파일 없음", + "noStatusFiles": "{status} 상태인 파일 없음", + "uploadPrompt": "파일을 업로드하거나 책 창고 폴더에 복사하세요" + }, + "retry": { + "noneToRetry": "재시도할 오류 파일 없음", + "retrying": "{count, plural, =0 {1개 파일 재시도 중} one {1개 파일 재시도 중} other {#개의 파일 재시도 중}}" + }, + "applyFetched": { + "applied": "{count, plural, =0 {0개 파일에 적용되었습니다.} one {1개 파일에 적용되었습니다.} other {#개 파일에 적용되었습니다.}}", + "skippedEdited": "{count, plural, =0 {수동 편집 내역이 존재하여 건너뛴 파일이 없습니다.} one {수동 편집 내역이 존재하여 1개의 파일을 건너뛰었습니다.} other {수동 편집 내역이 존재하여 #개의 파일을 건너뛰었습니다.}}", + "skippedNoMetadata": "{count, plural, =0 {외부 메타데이터가 없는 파일 1개를 건너뛰었습니다.} one {외부 메타데이터가 없는 파일 1개를 건너뛰었습니다.} other {외부 메타데이터가 없는 파일 #개를 건너뛰었습니다.}}", + "noneApplied": "적용된 파일이 없습니다. 사유: {reasons}", + "noneSelected": "선택된 파일이 없습니다." + } + }, + "collection": { + "title": "컬렉션", + "pageTitle": "컬렉션 · {name}", + "pageTitleWithId": "컬렉션 #{id}", + "editCollection": "컬렉션 편집", + "showControlsAria": "컬렉션 컨트롤 표시", + "loadError": "이 컬렉션을 불러올 수 없습니다.", + "toast": { + "removed": "{count, plural, =0 {컬렉션에서 책 0권을 제거했습니다.} one {컬렉션에서 책 1권을 제거했습니다.} other {컬렉션에서 책 #권을 제거했습니다.}}", + "removeFailed": "컬렉션에서 책을 제거하는 데 실패했습니다." + }, + "empty": { + "noSearchMatch": "이 검색어와 일치하는 책이 없습니다", + "noSearchMatchHint": "다른 검색어를 사용하거나 검색 기록을 지워보세요.", + "noBooks": "아직 컬렉션에 도서가 없습니다", + "noBooksHint": "라이브러리에서 책을 선택하여 이곳에 추가해 주세요." + } + }, + "library": { + "title": "라이브러리", + "pageTitle": "라이브러리 · {name}", + "pageTitleWithId": "라이브러리 #{id}", + "filterRules": "필터 규칙", + "saveAsSmartScope": "스마트 스코프로 저장", + "saveScope": "스코프 저장", + "saveAsSmartScopeTooltip": "이 필터를 이름이 지정된 스마트 스코프로 저장합니다.", + "saved": "저장되었습니다.", + "saveFilter": "필터 저장", + "filterSaved": "필터가 저장되었습니다.", + "saveFilterTooltip": "이 라이브러리용 필터 저장", + "removeSavedFilter": "저장된 필터 제거", + "empty": { + "noFilterMatch": "적용한 필터 조건에 맞는 책이 없습니다.", + "noFilterMatchHint": "더 많은 책을 보려면 필터를 조정하거나 초기화해 보세요.", + "clearFilters": "필터 초기화", + "scanning": "라이브러리 스캔 중...", + "scanningHint": "책이 발견되는 대로 이곳에 표시됩니다.", + "emptyLibrary": "라이브러리가 비었습니다", + "emptyLibraryHint": "라이브러리에 책을 추가하면 이곳에 표시됩니다." + }, + "querySelection": { + "loadedSelected": "로드된 책 총 {total}권 중 {selected}권이 선택됨.", + "selectAllMatching": "총 {total}권의 모든 일치 도서 선택" + } + }, + "smartScope": { + "title": "스마트 스코프", + "pageTitle": "스마트 스코프 · {name}", + "pageTitleWithId": "스마트 스코프 #{id}", + "defaultName": "스마트 스코프", + "filter": "필터", + "edit": "스마트 스코프 편집", + "koboSync": { + "label": "내 Kobo와 동기화", + "enabledHint": "이 공유 스마트 스코프의 책은 사용자의 Kobo 기기로 동기화됩니다. 동기화를 중지하려면 기능을 꺼 주세요.", + "disabledHint": "이 공유 스마트 스코프의 책을 사용자의 Kobo 기기로 동기화하려면 켜 주세요." + }, + "showControlsAria": "스마트 스코프 컨트롤 보기", + "hideFilter": "필터 숨기기", + "showFilter": "필터 보기", + "confirmDelete": "진행하시겠습니까?", + "loadError": "이 스마트 스코프를 로드할 수 없습니다.", + "toast": { + "deleted": "\"{name}\"이(가) 삭제되었습니다.", + "deleteFailed": "\"{name}\" 삭제에 실패했습니다.", + "koboSyncEnabled": "이제 \"{name}\"이(가) Kobo와 동기화됩니다.", + "koboSyncDisabled": "\"{name}\"은(는) 더 이상 Kobo와 동기화되지 않습니다.", + "koboSyncFailed": "\"{name}\"의 Kobo 동기화 업데이트에 실패했습니다" + }, + "empty": { + "noRules": "규칙이 구성되지 않았습니다", + "noRulesHint": "편집기를 열어 필터와 정렬 규칙을 사용하여 이 스마트 스코프에 표시될 책을 구성하세요.", + "configure": "스마트 스코프 구성", + "noMatch": "스마트 스코프와 일치하는 책이 없습니다", + "noMatchHint": "필터 규칙을 조정해 보세요.", + "edit": "스마트 스코프 편집" + } + } + }, + "whatsNew": { + "title": "새로운 기능", + "subtitle": "새로 추가된 기능들을 최신순으로 확인하세요.", + "versionPrefix": "버전 {version}", + "newUpdates": "{count, plural, =0 {새 업데이트 없음} one {새 업데이트 1개} other {새 업데이트 #개}}", + "remindLater": "나중에 다시 보기", + "gotIt": "확인", + "latest": "최신", + "fullChangelog": "전체 변경 내역", + "seeAllReleases": "모든 릴리스 보기", + "versions": "버전", + "currentVersion": "현재 버전", + "youreHere": "오셨군요", + "searchPlaceholder": "릴리스 검색...", + "noReleasesFound": "릴리스를 찾을 수 없습니다.", + "noHighlights": "이번 릴리스에는 특별히 강조할 만한 내용이 없습니다.", + "showChangelog": "전체 변경 내역 보기", + "hideChangelog": "전체 변경 내역 숨기기", + "openOnGitHub": "GitHub에서 열기", + "loadMore": "더 보기", + "loadingMore": "로딩 중...", + "loadFailed": "릴리스 로드에 실패했습니다.", + "loadMoreFailed": "추가 릴리스를 불러올 수 없습니다. 다시 시도해 주세요.", + "loadErrorHint": "릴리스를 불러오는 데 실패했습니다. 연결 상태를 확인하신 후 다시 시도해 주세요.", + "retry": "재시도", + "imageViewer": "이미지 뷰어", + "closeImage": "이미지 닫기", + "previousImage": "이전 이미지", + "nextImage": "다음 이미지" + }, + "titles": { + "dashboard": "대시보드", + "libraries": "라이브러리", + "opds": "OPDS", + "koboSync": "Kobo 동기화", + "koreaderSync": "KOReader 동기화", + "bookDock": "책 창고", + "whatsNew": "새로운 기능", + "annotations": "필기", + "achievements": "업적", + "statistics": "통계", + "authors": "저자", + "series": "시리즈", + "entityManager": "개체 관리자", + "bulkRename": "일괄 이름 변경", + "duplicateBooks": "중복 도서", + "notFound": "찾을 수 없음", + "signIn": "로그인", + "initialSetup": "초기 설정", + "register": "계정 생성", + "forgotPassword": "비밀번호 찾기", + "resetPassword": "비밀번호 재설정", + "completingSignIn": "로그인 완료 처리 중", + "magicLinkLogin": "매직 링크 로그인", + "readPrefix": "읽기", + "emailSuffix": "이메일", + "library": "라이브러리", + "smartScope": "스마트 스코프", + "collection": "컬렉션", + "author": "저자", + "book": "책", + "seriesItem": "시리즈", + "appearance": { + "theme": "디스플레이", + "book-covers": "책 표지", + "icons": "아이콘", + "layout": "디스플레이 레이아웃", + "behavior": "라이브러리 동작", + "language": "언어" + }, + "reader": { + "general": "리더 설정", + "ebook": "전자책 리더", + "pdf": "PDF 리더", + "comics": "만화 리더", + "audio": "오디오북 플레이어", + "fonts": "리더 폰트" + }, + "email": { + "providers": "제공자", + "recipients": "수신자", + "groups": "그룹", + "templates": "템플릿", + "preferences": "설정", + "history": "히스토리" + }, + "metadata": { + "providers": "제공자", + "field-rules": "필드별 규칙", + "custom-fields": "커스텀 메타데이터", + "genre-blocklist": "장르 차단 목록", + "score": "신뢰도 점수", + "auto-fetch": "책 자동 가져오기", + "authors": "저자 자동 가져오기" + }, + "admin": { + "users": "사용자", + "account-activity": "계정 활동", + "magic-links": "매직 링크", + "oidc": "OIDC / SSO", + "server-fonts": "서버 폰트" + }, + "system": { + "file-naming": "파일 이름 명명", + "book-dock": "책 창고", + "maintenance": "유지보수", + "audit-log": "감사 로그" + }, + "account": { + "profile": "계정", + "privacy": "개인 정보 보호 및 공유", + "notifications": "알림", + "restrictions": "콘텐츠 제한" + }, + "smartScopes": "스마트 스코프", + "collections": "컬렉션" } } diff --git a/client/src/locales/nl.json b/client/src/locales/nl.json index 42b01f9f7..f2a4a1593 100644 --- a/client/src/locales/nl.json +++ b/client/src/locales/nl.json @@ -959,9 +959,9 @@ "syncMetadataToFiles": "Metadata naar bestanden synchroniseren", "deleteLibrary": "Bibliotheek verwijderen", "bookCount": "{count, plural, =0 {geen boeken} one {# boek} other {# boeken}}", + "folderCount": "{count, plural, =0 {geen mappen} one {# map} other {# mappen}}", "fileMode": "Bestandsmodus", "folderMode": "Mapmodus", - "folderCount": "{count, plural, =0 {geen mappen} one {# map} other {# mappen}}", "emptyTitle": "Nog geen bibliotheken", "emptyHint": "Voeg een bibliotheek toe om je boeken te ordenen.", "addFirstLibrary": "Voeg je eerste bibliotheek toe", diff --git a/client/src/locales/pl.json b/client/src/locales/pl.json index 3cf55da56..46605b37c 100644 --- a/client/src/locales/pl.json +++ b/client/src/locales/pl.json @@ -1043,9 +1043,9 @@ "syncMetadataToFiles": "Synchronizuj metadane z plikami", "deleteLibrary": "Usuń bibliotekę", "bookCount": "{count, plural, =0 {żadnych książek} one {# książka} other {# książki} few {# książki} many {# książek}}", + "folderCount": "{count, plural, =0 {żadnych folderów} one {# folderze} other {# foldery} few {# foldery} many {# folderów}}", "fileMode": "Tryb plików", "folderMode": "Tryb folderu", - "folderCount": "{count, plural, =0 {żadnych folderów} one {# folderze} other {# foldery} few {# foldery} many {# folderów}}", "emptyTitle": "Nie ma jeszcze bibliotek", "emptyHint": "Dodaj bibliotekę, aby rozpocząć porządkowanie książek.", "addFirstLibrary": "Dodaj swoją pierwszą bibliotekę", diff --git a/client/src/locales/pt.json b/client/src/locales/pt.json index 70d52aef2..38413b8b0 100644 --- a/client/src/locales/pt.json +++ b/client/src/locales/pt.json @@ -731,6 +731,7 @@ "test": { "connected": "Conectado - {issuer}", "connectionFailed": "Falha na conexão", + "privateIssuerAddress": "A URL do emissor resolve um endereço de rede privado ou local, então o servidor recusou-se a se conectar. Definir OIDC_ALLOW_LOCAL_ISSUERS=true no servidor da BookOrbit para permitir.", "hide": "Ocultar", "details": "Detalhes", "supported": "suportado", @@ -1075,9 +1076,9 @@ "syncMetadataToFiles": "Sincronizar metadados para os arquivos", "deleteLibrary": "Excluir biblioteca", "bookCount": "{count, plural, =0 {nenhum livro} one {# livro} many {# livros} other {# livros}}", + "folderCount": "{count, plural, =0 {nenhuma pasta} one {# pasta} many {# pastas} other {# pastas}}", "fileMode": "Modo por arquivo", "folderMode": "Modo por pasta", - "folderCount": "{count, plural, =0 {nenhuma pasta} one {# pasta} many {# pastas} other {# pastas}}", "emptyTitle": "Nenhuma biblioteca ainda", "emptyHint": "Adicione uma biblioteca para começar a organizar seus livros.", "addFirstLibrary": "Adicione sua primeira biblioteca", @@ -1599,6 +1600,8 @@ "typography": "Tipografia", "font": "Fonte", "fontHint": "Tipo de letra usado no corpo do texto", + "fontStyle": "Tamanho da fonte", + "fontStyleHint": "Peso e aspecto do texto corporal. Negrito e itálico no livro permaneçam relativos a isso.", "builtInFonts": "Fontes embutidas", "yourFonts": "Suas Fontes", "fontSize": "Tamanho da fonte", @@ -1718,6 +1721,9 @@ "deleteVariant": "Excluir variante", "styleNormal": "Normal", "styleItalic": "Itálico", + "weightItalicOf": "{weight} Italic", + "variableRange": "Variável {min}-{max}", + "variableStyles": "{count, plural, one {# field} other {# fields}}", "weightThin": "Fino (Thin)", "weightExtraLight": "Extra Leve", "weightLight": "Leve", @@ -3884,6 +3890,7 @@ "dateAddedFutureError": "A Data de Início não pode ser no futuro.", "dateFinishedFutureError": "A Data de Término não pode ser no futuro.", "dateFinishedBeforeStartedError": "A Data de Término deve ser igual ou posterior à Data de Início.", + "dateFinishedBeforeStartedErrorWithDate": "A data de término deve ser igual ou porterior a data de início ({date}).", "saveReadingDatesError": "Falha ao salvar datas de leitura.", "saveAddedDateError": "Falha ao salvar a data adicionada.", "koboPendingDelete": "Exclusão pendente no dispositivo", @@ -4043,6 +4050,12 @@ "notInFieldRulesText": "{providers}. Incluídos na busca manual com Todos ativados, mas não utilizados na busca automática de metadados.", "noResults": "Nenhum resultado encontrado", "noResultsHint": "Tente ajustar o título ou autor", + "searchInterrupted": "A busca não terminou", + "searchIncomplete": "Alguns resultados podem estar ausentes", + "providerTimedOut": "{provider} demorou muito para responder.", + "providerThrottled": "{provider} atingiu seu limite de transferências. Aguarde um momento e tente novamente.", + "providerFailed": "{provider} não pôde ser alcançado.", + "searchInterruptedHint": "Tente novamente, ou restrinja o escopo de pesquisa.", "searchPrompt": "Busque acima, então clique em um resultado para começar a comparar os metadados." }, "writeAndRename": "Gravar no Arquivo & Renomear", @@ -4186,6 +4199,7 @@ "startFuture": "A data de início não pode ser no futuro.", "finishFuture": "A data de término não pode ser no futuro.", "finishBeforeStart": "A data de término deve ser igual ou posterior à data de início.", + "finishBeforeStartWithDate": "Data de término deve ser igual ou posterior a data de início ({date}).", "saveFailed": "Falha ao salvar datas de leitura." }, "eta": { @@ -6352,6 +6366,8 @@ "fontBuiltIn": "Internas", "fontServer": "Fontes do servidor", "fontYours": "Suas fontes", + "fontStyle": "Estilo", + "fontStyleItalicOf": "{style} Itálico", "lineSpacing": "Espaçamento entre linhas", "pageWidth": "Largura da página", "pageWidthNarrow": "Estreito", diff --git a/client/src/locales/ru.json b/client/src/locales/ru.json index be9904336..d90a7bc23 100644 --- a/client/src/locales/ru.json +++ b/client/src/locales/ru.json @@ -1063,9 +1063,9 @@ "syncMetadataToFiles": "Синхронизировать метаданные с файлами", "deleteLibrary": "Удалить библиотеку", "bookCount": "{count, plural, =0 {нет книг} one {# книга} few {# книги} many {# книги} other {# книги}}", + "folderCount": "{count, plural, =0 {Нет папок} one {# папок} few {# папок} many {# папок} other {# папок}}", "fileMode": "Режим файла", "folderMode": "Режим папки", - "folderCount": "{count, plural, =0 {Нет папок} one {# папок} few {# папок} many {# папок} other {# папок}}", "emptyTitle": "Нет библиотек", "emptyHint": "Добавьте библиотеку, чтобы начать организацию книг.", "addFirstLibrary": "Добавьте вашу первую библиотеку", diff --git a/client/src/locales/sl.json b/client/src/locales/sl.json index d10d7b558..25e1944da 100644 --- a/client/src/locales/sl.json +++ b/client/src/locales/sl.json @@ -1075,9 +1075,9 @@ "syncMetadataToFiles": "Sinhroniziraj metapodatke z datotekami", "deleteLibrary": "Izbriši knjižnico", "bookCount": "{count, plural, =0 {ni knjig} one {# knjiga} two {# knjig} few {# knjig} other {# knjig}}", + "folderCount": "{count, plural, =0 {ni map} one {# mapa} two {# map} few {# map} other {# map}}", "fileMode": "Način datotek", "folderMode": "Način map", - "folderCount": "{count, plural, =0 {ni map} one {# mapa} two {# map} few {# map} other {# map}}", "emptyTitle": "Še ni knjižnic", "emptyHint": "Dodajte knjižnico, da začnete organizirati svoje knjige.", "addFirstLibrary": "Dodajte svojo prvo knjižnico", diff --git a/client/src/locales/sv.json b/client/src/locales/sv.json index 4df8871f6..0e11b64de 100644 --- a/client/src/locales/sv.json +++ b/client/src/locales/sv.json @@ -1037,9 +1037,9 @@ "syncMetadataToFiles": "Synkronisera metadata till filer", "deleteLibrary": "Ta bort bibliotek", "bookCount": "{count, plural, =0 {inga böcker} one {# bok} other {# böcker}}", + "folderCount": "{count, plural, =0 {inga mappar} one {# mapp} other {# mappar}}", "fileMode": "Fil läge", "folderMode": "Mappläge", - "folderCount": "{count, plural, =0 {inga mappar} one {# mapp} other {# mappar}}", "emptyTitle": "Inga bibliotek ännu", "emptyHint": "Lägg till ett bibliotek för att börja organisera dina böcker.", "addFirstLibrary": "Lägg till ditt första bibliotek", diff --git a/client/src/locales/tr.json b/client/src/locales/tr.json index 0967ef424..ecfd1428a 100644 --- a/client/src/locales/tr.json +++ b/client/src/locales/tr.json @@ -1 +1,144 @@ -{} +{ + "common": { + "resetSortAria": "Sıralamayı varsayılana sıfırla", + "save": "Kaydet", + "cancel": "İptal Et", + "delete": "Sil", + "edit": "Düzenle", + "close": "Kapat", + "confirm": "Onayla", + "loading": "Yükleniyor...", + "search": "Ara", + "back": "Geri", + "next": "Sıradaki", + "previous": "Önceki", + "retry": "Tekrar Dene", + "yes": "Evet", + "no": "Hayır" + }, + "settings": { + "privacySharing": { + "title": "Gizlilik & Paylaşım", + "subtitle": "Yöneticilerin okuma etkinliğinizin tanımlanabilir bir özetini görüp göremeyeceğini kontrol edin.", + "levelLegend": "Okuma içgörüleri paylaşım düzeyi", + "current": "Mevcut ayar", + "levels": { + "private": { + "title": "Özel", + "description": "Sadece sen okuma istatistiklerini görebilirsin." + }, + "summary": { + "title": "Özeti paylaş", + "description": "Kitap adları, yazarlar, seriler veya seslendirenler olmaksızın toplu alışkanlıkları paylaşın." + }, + "detailed": { + "title": "Detaylı analiz paylaş", + "description": "Ayrıca son ve en iyi kitapları, yazarları, serileri, türleri ve anlatıcıları paylaşın." + } + }, + "fields": { + "frequency": "Okuma sıklığı ve aktif günler", + "completion": "Başlanan ve tamamlanan toplam kitap sayısı", + "formats": "Tür dağılımı", + "genres": "Geniş tür dağılımı", + "trend": "Genel okuma eğilimi", + "books": "Güncel, yeni ve en çok okunan kitaplar", + "authors": "En iyi yazarlar", + "series": "En iyi seriler", + "narrators": "En iyi anlatıcılar" + }, + "confirm": { + "shareTitle": "{level} aktif edilsin mi?", + "shareDescription": "İzin sahibi olan yöneticiler aşağıdaki bilgileri görebileceklerdir.", + "stopTitle": "Okuma analizlerini paylaşmayı bırak?", + "stopDescription": "Yönetici erişimi derhal engellenecektir. Mevcut erişim kayıtları geçmişinizde kalmaya devam eder.", + "recordedNotice": "Her yönetici profili görüntülemesi kaydedilir ve erişim geçmişinizde görünür." + }, + "preview": { + "title": "Paylaşılan profilinizi önizleyin", + "description": "Yetkili yöneticilerin erişimine açık olan mevcut bilgileri görüntüleyin.", + "action": "Önizlemeyi yükle", + "readingTime": "Okuma süresi", + "activeDays": "Aktif günler", + "started": "Başlanılan kitaplar", + "completed": "Bitirilen kitaplar", + "topBooks": "En iyi kitaplar" + }, + "history": { + "title": "Profil erişim geçmişi", + "description": "Paylaşılan okuma profilinizin yakın zamandaki yönetici görüntülemeleri.", + "empty": "Hiçbir yönetici paylaşılan okuma profilinizi görüntülemedi." + } + }, + "appearance": { + "theme": { + "accents": { + "fuchsia": "Fuşya", + "raspberry": "Ahududu", + "pink": "Pembe", + "white": "Beyaz", + "rosewater": "Gül Suyu", + "salmon": "Yavru Ağzı", + "coral": "Mercan", + "sand": "Kum", + "peach": "Şeftali", + "pear": "Armut", + "flax": "Keten", + "sprout": "Filiz", + "butter": "Tereyağı", + "aloe": "Aloe Vera", + "lemon": "Limon", + "foam": "Köpük", + "aqua": "Deniz Mavisi", + "celadon": "Seladon", + "sage": "Adaçayı", + "pistachio": "Antep Fıstığı", + "mint": "Nane", + "seafoam": "Deniz Köpüğü", + "baby-blue": "Bebek Mavisi", + "powder": "Pudra", + "sea-glass": "Deniz Camı", + "bluebell": "Cançiçeği", + "cornflower": "Peygamber Çiçeği", + "thistle": "Devedikeni", + "periwinkle": "Menekşe", + "wisteria": "Mor Salkım", + "lavender": "Lavanta", + "mauve": "Eflatun", + "orchid": "Orkide", + "rose-quartz": "Pembe Kuvars", + "blush": "Kırmızı" + }, + "accentColor": { + "label": "Vurgu rengi" + }, + "cornerRadius": { + "label": "Köşe yuvarlaklığı", + "hint": "Kartların ve arayüz öğelerinin yuvarlaklığı" + }, + "surfaceBrightness": { + "label": "Yüzey parlaklığı", + "hint": "Karanlık mod yüzeylerini aydınlat", + "reset": "Sıfırla" + }, + "libraryBackground": { + "title": "Kütüphane Arkaplanı", + "pattern": { + "label": "Arkaplan deseni", + "hint": "Kitap ızgarasının arkasında gözüken desen" + } + }, + "backgroundGroups": { + "fundamental": "Temeller", + "structural": "Yapısal", + "ambient": "Ambiyans", + "refractive": "Kırılma" + } + }, + "storage": { + "title": "Görünüş tercihlerini kaydetme yeri", + "active": "Aktif" + } + } + } +} diff --git a/client/src/locales/uk.json b/client/src/locales/uk.json index 0ee3b5486..985f57831 100644 --- a/client/src/locales/uk.json +++ b/client/src/locales/uk.json @@ -81,6 +81,7 @@ }, "appearance": { "language": { + "title": "Мова", "description": "Виберіть мову, яка використовується в інтерфейсі.", "label": "Мова інтерфейсу", "loadError": "Не вдалося завантажити вибрану мову", @@ -88,6 +89,7 @@ }, "pageTitle": "Відображати", "pageSubtitle": "Контрольні теми, обкладинки, розмітки та те, як представлена ваша бібліотека.", + "mobileSummary": "Тема {theme} • Акцент: {accent} • Фон: {background}", "themeMode": { "light": "Світла", "dark": "Темна", @@ -251,6 +253,17 @@ "label": "Показати хребет у коміксах", "hint": "Застосовуйте ефект хребета та світлотіння для комічних обкладинок (cbz, cb7)" }, + "detailCoverTint": { + "off": { + "label": "Вимк" + }, + "single": { + "label": "Один колір" + }, + "duotone": { + "label": "Два кольори" + } + }, "shadow": { "title": "Сила тіні обкладинки", "hint": "Контролює глибину під покриттям сітки, списку, таблиці і ескізи панелі керування", @@ -445,7 +458,8 @@ "book-covers": "Забронювати обкладинки", "icons": "Іконки", "layout": "Макет", - "behavior": "Поведінка" + "behavior": "Поведінка", + "language": "Мова" } }, "account": { @@ -638,6 +652,7 @@ "noActiveHint": "Всі згенеровані магічні посилання для цієї сторінки закінчилися або були відкликані.", "copyLinkAria": "Скопіювати посилання на {label}", "pauseAria": "Призупинити {label}", + "resumeAria": "Продовжити {label}", "revokeAria": "Revoke {label}", "lastUsedLabel": "Востаннє використано {date}" }, @@ -648,6 +663,7 @@ "addProvider": "Постачальник", "editProvider": "Редагувати постачальника", "configureNew": "Налаштування нового постачальника OIDC.", + "editing": "Редагування {slug}", "enabled": "Увімкнено", "disabled": "Вимкнено", "empty": { @@ -921,6 +937,7 @@ "refresh": "Оновити", "sourceUser": "Початковий користувач", "targetUser": "Цільовий користувач", + "doNotImport": "Не імпортувати цього користувача", "noSourceUsersLoaded": "Ще не завантажено жодного вихідного користувача.", "noActiveTargetUsers": "Не знайдено активних користувачів поблизу. Створіть або повторно увімкніть користувача BookOrbit перед зіставленням.", "pathPrefixMappings": "Відповідність префіксів шляху", @@ -1023,12 +1040,13 @@ "syncMetadataToFiles": "Синхронізувати метадані у файли", "deleteLibrary": "Видалити бібліотеку", "bookCount": "{count, plural, =0 {жодної книги} one {# книга} few {# книг} many {# книг} other {# книг}}", + "folderCount": "{count, plural, =0 {папок немає} one {# папка} few {# папки} many {# папки} other {# папки}}", "fileMode": "Режим файлу", "folderMode": "Режим теки", - "folderCount": "{count, plural, =0 {папок немає} one {# папка} few {# папки} many {# папки} other {# папки}}", "emptyTitle": "Немає бібліотек", "emptyHint": "Додайте бібліотеку, щоб почати організовувати свої книжки.", "addFirstLibrary": "Додайте вашу першу бібліотеку", + "deleteConfirmTitle": "Видалити \"{name}\"?", "deleteConfirmBody": "Це остаточно видалить всі книги, метадата, операції читання, закладки та анотації в цій бібліотеці. Цю дію неможливо скасувати.", "deleteConfirmTypeName": "Введіть ім'я бібліотеки для підтвердження:", "deleting": "Видалення...", @@ -1075,7 +1093,15 @@ "saveFailed": "Не вдалося зберегти параметри збагачення автора", "noEligibleAuthors": "Не знайдено доступних авторів", "noAuthorsToEnrich": "Немає авторів для збагачення", - "queueFailed": "Не вдалося повернути автор черги" + "queueFailed": "Не вдалося повернути автор черги", + "fields": { + "description": "Біографія", + "photo": "Світлина", + "birthDate": "Народився", + "deathDate": "Помер", + "website": "Вебсайт", + "genres": "Жанри" + } }, "scoreWeights": { "groupLabel": "Вага за результатами", @@ -1097,7 +1123,12 @@ "users": "Спільноти", "account-activity": "Активність облікового запису", "magic-links": "Магічні посилання", - "oidc": "OIDC / SSO" + "oidc": "OIDC / SSO", + "server-fonts": "Шрифти сервера" + }, + "serverFonts": { + "title": "Шрифти сервера", + "listLabel": "Шрифти сервера" } }, "common": { @@ -1110,12 +1141,16 @@ "opds": "OPDS", "kobo": "Kobo", "koreader": "KOReader", + "integrations": "Інтеграції", "hardcover": "Палітурка", "admin": "Адмін", "system": "Система", "account": "Обліковий запис" } }, + "integrations": { + "title": "Інтеграції" + }, "metadata": { "title": "Метадані", "noPermission": "Ви не маєте дозволу для керування параметрами метаданих.", @@ -1127,6 +1162,7 @@ "authors": "Автори", "publisher": "Автор", "publishedYear": "Рік публікації", + "language": "Мова", "pageCount": "Кількість сторінок", "communityRating": "Рейтинг спільноти", "seriesName": "Назва серії", @@ -1176,6 +1212,8 @@ }, "lastRun": { "justNow": "прямо зараз", + "minutesAgo": "{count}хв тому", + "hoursAgo": "{count}год тому", "yesterday": "вчора", "daysAgo": "{count, plural, one {# день тому} few {# днів тому} many {# днів тому} other {# днів тому}}", "label": "Останній запуск: {when}", @@ -1216,6 +1254,7 @@ "test": "Тест", "testing": "Тестування...", "enabled": "Увімкнено", + "retryIn": "Повторити через {duration}", "runTestBeforeEnabling": "Запустіть тестове тестування перед увімкненням", "hardcoverEnableHint": "Запустити тест з поточним токеном щоб розблокувати перемикач включення.", "badge": { @@ -1229,6 +1268,7 @@ "cookie": "Печиво", "coverResolution": "Роздільна здатність обкладинки", "country": "Країна", + "language": "Мова", "ttbKey": "TTB ключ" }, "helpers": { @@ -1294,6 +1334,10 @@ "label": "Комбінувати жанри від усіх вибраних провайдерів", "hint": "Збирайте та перекладайте жанри від кожного провайдера, призначеного для поля Жанрів, а не припиняйте на перший результат." }, + "maxGenres": { + "label": "Максимум жанрів на книгу", + "unlimited": "Необмежено" + }, "storeProviderIds": { "label": "Ідентифікатори провайдера магазину у книгах" } @@ -1339,6 +1383,7 @@ }, "reservoir": { "disabled": "{provider} - вимкнено", + "notConfigured": "{provider} - не налаштований", "dragToAssign": "Перетягніть, щоб призначити {provider} для поля" }, "sheet": { @@ -1394,6 +1439,7 @@ "archive": "Архів", "archivedFields": "Архівні поля", "archivedSummary": "{count, plural, one {# archived field - restore or permanently delete.} few {# archived fields - restore or permanently delete.} many {# archived fields - restore or permanently delete.} other {# archived fields - restore or permanently delete.}}", + "archivedAt": "Архивовано {when}", "restore": "Відновити", "deleteForever": "Видалити назавжди", "deleteDialog": { @@ -1487,6 +1533,7 @@ "typography": "Типографія", "font": "Font", "fontHint": "Ящик для тексту тіла", + "fontStyle": "Шрифт", "builtInFonts": "Вбудовані шрифти", "yourFonts": "Ваші шрифти", "fontSize": "Font size", @@ -1606,6 +1653,7 @@ "deleteVariant": "Видалити варіант", "styleNormal": "Нормальний", "styleItalic": "Italic", + "variableRange": "Змінна {min}-{max}", "weightThin": "Тонкий", "weightExtraLight": "Дуже Легкий", "weightLight": "Світла", @@ -1622,7 +1670,8 @@ "deleteFamilyFailed": "Не вдалося вилучити сімейство шрифтів", "demoCannotManage": "Обмежений доступ до демо-ліміту не можна керувати шрифтами", "fileAdded": "\"{name}\" додано", - "uploadFailed": "Не вдалося завантажити" + "uploadFailed": "Не вдалося завантажити", + "serverFontsShown": "{count} з {total} показано" }, "bookDock": { "title": "Книга док", @@ -1740,6 +1789,7 @@ "crossPlatformSaveFailed": "Не вдалося зберегти крос-платформенне розташування", "librarySaved": "Шаблон збережено для {name}", "librarySaveFailed": "Не вдалося зберегти шаблон бібліотеки", + "saveLibraryPattern": "Зберегти шаблон для {name}", "resetLibraryPattern": "Скинути шаблон {name} на типовий", "tokenTitle": "Назва книги", "tokenSubtitle": "Підзаголовок книги", @@ -1748,6 +1798,8 @@ "tokenSeriesIndex": "Індекс серії (0 відкладено)", "tokenPublisher": "Автор", "tokenIsbn": "ІСБН-13", + "tokenLanguage": "Мова", + "tokenLibrary": "Назва бібліотеки", "tokenOriginalFilename": "Початкове ім'я файлу (без розширення)", "tokenExtension": "Розширення файлу (без крапки)", "patternHelpIntro": "Шаблони використовують токени типу {titleToken} і {authorsToken}, плюс модифікатори та додаткові сегменти.", @@ -1759,6 +1811,8 @@ "copy": "Копія", "never": "Ніколи", "justNow": "Щойно", + "minutesAgo": "{count}хв тому", + "hoursAgo": "{count}год тому", "daysAgo": "{count}d тому", "loadFailed": "Не вдалося завантажити", "devicePaired": "Пристрій успішно сформовано", @@ -1775,6 +1829,7 @@ "deviceRegistered": "Пристрій \" зареєстровано{name}\"", "noDevicesYet": "У вас ще немає пристроїв", "noDevicesHint": "Додайте пристрій, щоб розпочати синхронізацію ваших книг до вашого Кобо.", + "lastSync": "Остання синхронізація: {time}", "renameDevice": "Перейменувати пристрій", "revokeAccess": "Скасувати доступ", "deviceRenamed": "Пристрій перейменовано", @@ -1789,6 +1844,7 @@ "twoWaySyncHint": "Синхронізація позиції читання між BookOrbit і Kobo. Для точного відновлення сторінки потрібна доставка KEPUB.", "syncHighlights": "Синхронізувати закладки з Кобо", "syncHighlightsHint": "Відмітини надсилаються в BookOrbit або KOReader до вашого Kobo. Відмітки Kobo імпортуються в BookOrbit навіть якщо це вимкнено. Пов'язані анотації синхронізації змін і видалення обох способів. Потребує доставку KEPUB; книга про Кобо повинна бути KEPUB, завантаженим з BookOrbit.", + "storeSync": "Включали назви з магазину Kobo", "convertKepub": "Перетворити на KEPUB", "convertKepubHint": "Надсилати доступні EPUBs у якості KEPUB. Це залишається увімкненим при курсі синхронізації прогресів і BookOrbit-to-Kobo виділення. При наступній синхронізації Кобо розглянуті книги знову будуть запропоновані як завантаження KEPUB; видаляти будь-яку стару копію EPUB, якщо Кобо продовжить її відкривати.", "forceHyphenation": "Широкомовний режим", @@ -1855,7 +1911,8 @@ "freshHighlightData": "Дані свіжого підсвічування", "created": "Створено {count}", "updated": "{count} оновлено", - "deleted": "Видалено {count}" + "deleted": "Видалено {count}", + "unchanged": "{count} без змін" }, "readingPositionSyncedTitle": "Читання синхронізовано: {title}", "readingPositionSynced": "Читання позиції синхронізоване", @@ -1867,6 +1924,7 @@ "summary": { "noLibraryUpdatesPending": "Немає оновлень бібліотеки для цього пристрою", "libraryUpdatesPrepared": "{count, plural, one {# оновлення бібліотеки підготовлене для пристрою} few {# оновлення бібліотек, які підготувалися до пристрою} many {# оновлення бібліотек, які підготувалися до пристрою} other {# оновлення бібліотек, які підготувалися до пристрою}}", + "bookDownloadedBy": "{title} було завантажено {device}", "booksDownloaded": "{count, plural, one {# книг завантажена} few {# книг завантажені} many {# книг завантажені} other {# книг завантажені}}", "progressUpdatesSyncedFor": "{count, plural, one {#поступ синхронізоване для {title}} few {# оновлення поступу синхронізоване для {title}} many {# оновлення поступу синхронізоване для {title}} other {# оновлення поступу синхронізоване для {title}}}", "progressUpdatesSynced": "{count, plural, one {#поступ синхронізовано} few {# оновлення поступу синхронізовано} many {# оновлення поступу синхронізовано} other {# оновлення поступу синхронізовано}}", @@ -1952,9 +2010,12 @@ "loadFailed": "Не вдалося завантажити параметри KOReader", "never": "Ніколи", "justNow": "Щойно", + "minutesAgo": "{count}хв тому", + "hoursAgo": "{count}год тому", "daysAgo": "{count}d тому", "unknown": "Не вказано", "updateAvailable": "Доступне оновлення", + "manualUpdateRequired": "Потрібне ручне оновлення", "upToDate": "Актуальні дані", "versionUnknown": "Версія невідома", "latestPlugin": "Останній плагін: v{version}", @@ -1968,6 +2029,14 @@ "usernamePlaceholder": "напр. myreader", "password": "Пароль", "passwordPlaceholder": "Мінімум 6 символів", + "changeCredentials": { + "newPassword": "Новий пароль", + "showPassword": "Показати новий пароль", + "hidePassword": "Приховати новий пароль", + "save": "Зберегти облікові дані", + "saving": "Збереження...", + "updated": "Облікові дані KOReader оновлено" + }, "creating": "Створюю...", "create": "Створити", "credentialsCreated": "Створено облікові дані синхронізації KOReader", @@ -2135,7 +2204,16 @@ "deviceRemoved": "Пристрій видалено", "removeDeviceFailed": "Не вдалося вилучити пристрій", "removeDeviceConfirmTitle": "Видалити {device}?", - "removeDeviceConfirmBody": "Ця остаточно видаляє процес синхронізації на цьому пристрої, активність на читанні та всі невідповідні записи з книги, про які більше не повідомляється інший пристрій. Якщо пізніше пристрій синхронізується, він з'явиться знову як новий запис." + "removeDeviceConfirmBody": "Ця остаточно видаляє процес синхронізації на цьому пристрої, активність на читанні та всі невідповідні записи з книги, про які більше не повідомляється інший пристрій. Якщо пізніше пристрій синхронізується, він з'явиться знову як новий запис.", + "retire": "Відкликати", + "retiring": "Відкликання...", + "restore": "Відновити", + "restoring": "Відновлення...", + "deleteSyncedData": "Видалити дані", + "deletingSyncedData": "Видалення...", + "deviceRetired": "Пристрій відкликано", + "deviceRestored": "Пристрій відновлено", + "retiredOnLabel": "Відкликаний" }, "opds": { "title": "OPDS", @@ -2180,8 +2258,10 @@ "urlCopyFailed": "Не вдалося скопіювати URL-адреси OPDS", "createUserFailed": "Не вдалося створити користувача OPDS", "userCreated": "Створено OPDS користувач \"{username}\"", + "sortOrderUpdated": "Порядок сортування оновлено для \"{username}\"", "updateSortFailed": "Не вдалося оновити порядок сортування", "deleteUserFailed": "Не вдалося видалити користувача OPDS", + "labelCopied": "{label} скопійовано", "copyLabelFailed": "Не вдалося скопіювати {label}" }, "tabs": { @@ -2200,6 +2280,21 @@ "maintenance": "Ремонт", "audit-log": "Журнал аудиту" } + }, + "nav": { + "title": "Налаштування", + "ariaLabel": "Розділи налаштувань", + "searchPlaceholder": "Налаштування пошуку", + "clearSearch": "Очистити пошук", + "groups": { + "you": "Ви", + "library": "Бібліотека", + "devices": "Пристрої та синхронізація", + "server": "Сервер" + }, + "descriptions": { + "profile": "Ваше ім'я, електронна пошта, пароль та активні сесії." + } } }, "achievements": { @@ -2482,6 +2577,7 @@ "page": "Сторінка {page} з {totalPages}" }, "editUserAria": "Редагувати {name}", + "resetPasswordAria": "Скинути пароль для {name}", "deleteUserAria": "Видалити {name}", "moreActionsAria": "Додаткові дії для {name}" } @@ -2565,6 +2661,7 @@ "comfortableView": "Комфортний перегляд" }, "listItem": { + "pageNumber": "с. {page}", "chapterNumber": "глава {chapter}", "selectAnnotation": "Вибрати анотацію", "collapse": "Згорнути", @@ -2663,6 +2760,7 @@ "detailResourceIdLabel": "ID Ресурсу", "detailTargetTypeLabel": "Target type", "detailTargetIdLabel": "Target ID", + "detailAction": "Дія: {value}", "detailIp": "IP: {value}", "detailResource": "Ресурс: {value}", "deletedBooks": "Видалені книги", @@ -2673,9 +2771,12 @@ "prev": "Попередня", "chips": { "search": "Пошук: {value}", + "action": "Дія: {value}", + "eventType": "Тип події: {value}", "resource": "Ресурс: {value}", "targetType": "Target type: {value}", "user": "Користувач: {value}", + "from": "Від: {value}", "to": "До: {value}" }, "filterLabels": { @@ -2734,6 +2835,7 @@ "EmailRecipientGroup": "Група одержувача електронною поштою", "Narrator": "Оповідач", "Publisher": "Автор", + "Language": "Мова", "Series": "Серія", "OidcIdentity": "Ідентичність OIDC", "MagicLinkToken": "Магічне посилання", @@ -2766,6 +2868,7 @@ "UserSuperuserEnable": "Дозволити доступ суперкористувача", "UserSuperuserDisable": "Вимкнути суперкористувацький доступ", "UserContentFiltersSet": "Оновити фільтри вмісту", + "UserUnlock": "Розблокувати акаунт", "ReadingInsightsSharingUpdate": "Оновити обмін інформацією", "ReadingInsightsProfileView": "Перегляд спільних порад", "LibraryCreate": "Створити бібліотеку", @@ -2791,6 +2894,7 @@ "BookBulkUpdateTags": "Оновити теги книги", "BookBulkSetMetadataLock": "Призначені блоки метаданих", "BookBulkEditMetadata": "Редагувати метадані книги", + "BookBulkMoveLibrary": "Перемістити книги в іншу бібліотеку", "BookReadingStateReset": "Скинути статус читання", "BookWriteAndRename": "Записати метадані і перейменувати файл", "CollectionCreate": "Створити колекцію", @@ -2870,6 +2974,8 @@ "signingIn": "Входимо...", "orDivider": "або", "forgotPassword": "Забули пароль?", + "noAccount": "Не маєте облікового запису?", + "signUp": "Реєстрація", "errors": { "invalidCredentials": "Невірне ім'я користувача або пароль", "tooManyAttempts": "Занадто багато спроб входу. Будь ласка, зачекайте хвилину і повторіть спробу." @@ -2878,6 +2984,7 @@ "oidc": { "loginFailed": "Помилка входу OIDC", "redirecting": "Перенаправлення...", + "signInWith": "Увійти з {provider}", "completingSignIn": "Завершення входу...", "tryAgain": "Спробуйте ще раз", "errors": { @@ -2912,6 +3019,13 @@ "invalidOrExpired": "Невірне або прострочене посилання. Будь ласка, запитайте нове." } }, + "register": { + "title": "Створення акаунту", + "createAccount": "Створити акаунт", + "creatingAccount": "Створюємо акаунт...", + "haveAccount": "Вже маєте акаунт?", + "signIn": "Увійти" + }, "setup": { "title": "Первинне налаштування", "subtitle": "Створити перший обліковий запис адміністратора.", @@ -2976,7 +3090,11 @@ "noBiography": "Немає доступної біографії. Використовуйте меню для оновлення метаданих.", "previewFrom": "Попередній перегляд з {provider}. Збережіть метадані для продовження.", "booksLabel": "Книжки", - "lastAdded": "Останні додані" + "lastAdded": "Останні додані", + "born": "Народився", + "died": "Помер", + "website": "Вебсайт", + "genres": "Жанри" }, "list": { "title": "Автори", @@ -3170,6 +3288,7 @@ "startedAt": "Дата початку", "finishedAt": "Дата завершення", "random": "Випадковий", + "language": "Мова", "metadataScore": "Оцінка метаданих" }, "customFieldsGroup": "Додаткові поля", @@ -3186,6 +3305,7 @@ "fields": { "title": "Найменування", "publisher": "Автор", + "language": "Мова", "series": "Серія", "seriesIndex": "Індекс серії", "publishedDate": "Дата публікації", @@ -3641,6 +3761,7 @@ "noProviderRatings": "Немає рейтингу провайдера", "seriesLabel": "Серія", "publisherLabel": "Автор", + "languageLabel": "Мова", "yearLabel": "Рік", "pageCountLabel": "Кількість сторінок", "isbn13Label": "ІСБН-13", @@ -3729,16 +3850,20 @@ "files": { "title": "Файли книги", "fileCount": "{count, plural, =0 {Немає файлів} one {# файл} few {# файл} many {# файл} other {# файл}}", + "synced": "Синхронізовано {time}", "sortAria": "Сортування файлів", "syncHistory": "Історія синхронізації", "metadataWriteBack": "Метадані запису-назад", "relative": { "seconds": "{value}s тому", + "minutes": "{value}хв тому", + "hours": "{value}год тому", "days": "{value}d тому" }, "renameFailed": "Не вдалося перейменувати файл", "deleteFailed": "Не вдалося вилучити файл", "addFile": "Додати файл", + "lastSynced": "Остання синхронізація: {time}", "sort": { "label": "Сортувати:", "name": "Ім'я", @@ -3848,6 +3973,8 @@ "notSet": "Не задано", "relative": { "seconds": "{count}s тому", + "minutes": "{count}хв тому", + "hours": "{count}год тому", "days": "{count}d тому", "months": "{count, plural, =0 {# місяць тому} one {# місяць тому} few {# місяців тому} many {# місяців тому} other {# місяців тому}}", "years": "{count, plural, =0 {# рік тому} one {# рік тому} few {# роки тому} many {# роки тому} other {# роки тому}}" @@ -3966,7 +4093,8 @@ "seriesPlaceholder": "Серія", "moveUp": "Посунути вгору", "moveDown": "Посунути вниз", - "removeSeries": "Видалити послідовність" + "removeSeries": "Видалити послідовність", + "totalPlaceholder": "з" } }, "table": { @@ -4050,10 +4178,23 @@ }, "move": { "title": "{count, plural, one {Move # book} few {Move # books} many {Move # books} other {Move # books}}", + "currentLibrary": "Поточний", "folderCount": "{count, plural, one {# folder} few {# folders} many {# folders} other {# folders}}", + "continue": "Продовжити", + "back": "Назад", "confirm": "{count, plural, one {Move # book} few {Move # books} many {Move # books} other {Move # books}}", + "action": "Перемістити в бібліотеку", "review": { "collisions": "{count, plural, one {# name conflict} few {# name conflicts} many {# name conflicts} other {# name conflicts}}" + }, + "policy": { + "keep_both": "Залишити обидва", + "merge": "Об'єднати", + "skip": "Пропустити" + }, + "collision": { + "folder_path": "Книга вже використовує ім'я цієї папки", + "file_path": "Файл вже використовує цей шлях" } } }, @@ -4242,6 +4383,25 @@ "alreadyExistsSaveAs": "Вже існує - зберегти як:", "renamePlaceholder": "напр. {name} (2)", "import": "Імпорт" + }, + "layout": { + "resume": "Продовжити", + "row": { + "file": "Файл", + "noAuthor": "Ще немає автора", + "proposedChanges": "Запропоновані зміни", + "editDetails": "Редагувати деталі" + }, + "sort": { + "fileSize": "Розмір", + "format": "Формат", + "status": "Статус" + }, + "conflict": { + "duplicate": "Дублікат", + "access_denied": "Немає доступу", + "invalid_format": "Невірний формат" + } } }, "collection": { @@ -4466,6 +4626,11 @@ "dark": "Темна", "system": "Система" }, + "languagePicker": { + "suggested": "Пропоновані", + "all": "Усі мови", + "results": "Результати" + }, "userAvatar": { "profilePicture": "Зображення профілю" }, @@ -4493,6 +4658,7 @@ "resultCount": "{shown} {total}", "noMatches": "Збігів немає", "noMatchesHint": "Спробуйте інший пошуковий термін.", + "bookCount": "Книги: {count}", "librariesEmptyHint": "Створіть бібліотеку, щоб почати додавати книги.", "smartScopesEmptyHint": "Розумні області зберігають набір фільтрів, які ви часто використовуєте.", "collectionsEmptyHint": "Колекції згрупованих книг, які ви обираєте вручну." @@ -5048,11 +5214,17 @@ "column": { "progress": "Прогрес" } + }, + "linkedBooks": { + "retry": "Повторити", + "untitled": "Без назви", + "unknownAuthor": "Невідомий автор" } }, "library": { "creator": { "createTitle": "Створити бібліотеку", + "editTitle": "Редагувати: {name}", "stepOf": "Крок {current} з {total}", "unsaved": "Не збережено", "required": "Обов'язково", @@ -5073,6 +5245,7 @@ "actions": { "saving": "Збереження…", "saveChanges": "Зберегти зміни", + "creating": "Створення…", "createLibrary": "Створити бібліотеку" }, "details": { @@ -5112,6 +5285,7 @@ "overlapsWith": "Перекривається на \"{library}\"", "noneAdded": "Немає папок ще не додано", "runPrescanHint": "Запустити прес-сервер для перевірки шляхів перед збереженням.", + "scanning": "Сканування…", "prescan": "Прескан" }, "scanner": { @@ -5243,6 +5417,7 @@ "title": "Контроль доступу", "description": "Суперкористувачі завжди мають повний доступ. Надайте доступ іншим користувачам нижче.", "notYetCreated": "Доступ можна налаштувати після створення бібліотеки.", + "selectUser": "Оберіть користувача…", "grant": "Грант", "empty": "Користувачів ще не надано доступ.", "loading": "Завантаження параметрів доступу...", @@ -5324,6 +5499,7 @@ }, "migration": { "sidebarTitle": "Імпорт Booklore", + "importTitle": "Імпорт бібліотеки", "status": { "done": "Виконано", "saved": "Збережено", @@ -5723,22 +5899,47 @@ "settings": { "title": "Налаштування", "ariaLabel": "Параметри читання", + "close": "Закрити налаштування", "mode": { "light": "Світла", "dark": "Темна" }, + "textSize": "Розмір тексту", + "textSizeSmaller": "Менший текст", + "textSizeLarger": "Більший текст", + "font": "Шрифт", "fontBuiltIn": "Вбудована тема", + "fontServer": "Шрифти сервера", "fontYours": "Ваші шрифти", + "fontStyle": "Стиль", + "lineSpacing": "Міжрядковий інтервал", + "pageWidth": "Ширина сторінки", + "pageWidthNarrow": "Вузька", + "pageWidthMedium": "Середня", + "pageWidthWide": "Широка", + "pageWidthFull": "Весь екран", "readingFlow": "Потік читання", + "flow": { + "paginated": "Сторінки", + "scrolled": "Прокрутка" + }, "pageSpreads": "Розгортання сторінки", "pageSpreadsHint": "Виберіть, як відображаються сторінки пар на основі зображень.", "spread": { "bookDefault": "Книга за замовчуванням", "singlePage": "Одна сторінка" }, + "columns": "Колонки", + "columnsFewer": "Менше колонок", + "columnsMore": "Більше колонок", "columnGap": "Розрив стовпчика", "justifyText": "По ширині тексту", - "hyphenation": "Дефікація" + "hyphenation": "Дефікація", + "themes": { + "default": "За замовчуванням", + "gray": "Сіра", + "sepia": "Сепія" + } }, "search": { "placeholder": "Пошук у книзі (min {min} символів)...", diff --git a/client/src/locales/zh.json b/client/src/locales/zh.json index 233c6f907..0c8103bd5 100644 --- a/client/src/locales/zh.json +++ b/client/src/locales/zh.json @@ -1072,9 +1072,9 @@ "syncMetadataToFiles": "同步元数据到文件", "deleteLibrary": "删除库", "bookCount": "{count, plural, =0 {没有书籍} one {# 书} other {# 书}}", + "folderCount": "{count, plural, =0 {没有文件夹} one {# 文件夹} other {# 文件夹}}", "fileMode": "文件模式", "folderMode": "文件夹模式", - "folderCount": "{count, plural, =0 {没有文件夹} one {# 文件夹} other {# 文件夹}}", "emptyTitle": "还没有库", "emptyHint": "添加一个库来开始组织您的书籍。", "addFirstLibrary": "添加您的第一个库", @@ -3853,7 +3853,7 @@ "showLess": "显示更少", "showMore": "显示更多", "publisher": "出版社", - "published": "已发布", + "published": "出版日期", "language": "语言", "pages": "页数", "duration": "阅读时长", @@ -3863,7 +3863,7 @@ "isbn": "ISBN", "fileSize": "文件大小", "library": "书库", - "added": "已添加", + "added": "添加日期", "cancelDateAddedEdit": "取消添加日期编辑", "editDateAdded": "编辑添加日期", "dateStarted": "开始日期",