diff --git a/client/src/locales/de.json b/client/src/locales/de.json index 76ed67e07..4e214f1ae 100644 --- a/client/src/locales/de.json +++ b/client/src/locales/de.json @@ -104,23 +104,68 @@ "accents": { "grey": "Grau", "scarlet": "Scharlachrot", - "rose": "Rose", + "vermilion": "Zinnoberrot", + "rose": "Rosé", "copper": "Kupfer", "orange": "Orange", + "chartreuse": "Grüngelb", + "marigold": "Ringelblume", "wasabi": "Wasabi", + "amber": "Bernstein", + "malachite": "Malachit", "yellow": "Gelb", + "viridian": "Grünerde", "turquoise": "Türkis", + "lime": "Lindgrün", "green": "Grün", + "acid-green": "Säuregrün", + "emerald": "Smaragd", + "teal": "Aquamarin", + "electric-blue": "Elektrisch Blau", "cyan": "Cyan", + "jade": "Jade", + "ultramarine": "Ultramarin", + "iris": "Iris", "purple": "Lila", "blue": "Blau", + "indigo": "Indigoblau", "violet": "Violett", + "amethyst": "Amethyst", + "fuchsia": "Fuchsia", "raspberry": "Himbeere", "pink": "Pink", "white": "Weiß", + "rosewater": "Rosenwasser", + "salmon": "Lachs", + "coral": "Koralle", + "sand": "Sand", + "peach": "Pfirsich", + "pear": "Birne", + "flax": "Flachs", + "sprout": "Rosenkohl", + "butter": "Butter", + "aloe": "Aloe", + "lemon": "Zitrone", + "foam": "Schaum", + "aqua": "Wasser", + "celadon": "Blassgrün", + "sage": "Salbei", + "pistachio": "Pistazie", "mint": "Minzgrün", + "seafoam": "Meerschaum", "baby-blue": "Babyblau", - "lavender": "Lavendel" + "powder": "Pulver", + "sea-glass": "Meeresglas", + "bluebell": "Glockenblume", + "cornflower": "Kornblume", + "thistle": "Distel", + "periwinkle": "Immergrün", + "wisteria": "Blauregen", + "lavender": "Lavendel", + "mauve": "Mauve", + "orchid": "Orchidee", + "rose-quartz": "Rosenquarz", + "blush": "Rötlich" }, "accentColor": { "label": "Akzentfarbe", @@ -174,7 +219,10 @@ "bookCovers": { "title": "Buchcover", "coverSearch": { - "label": "Standard Titelbild Suchmaschine" + "label": "Standard Titelbild Suchmaschine", + "hint": "Wählen Sie die Quelle aus, wenn die Cover-Suche öffnet. Gespeichert für den Account, für jedes Gerät.", + "loadError": "Fehler beim Laden des Standard-Cover-Suchanbieters", + "saveError": "Fehler beim Speichern des Standard-Cover-Suchanbieters" }, "displayMode": { "title": "Cover-Anzeigemodus", @@ -212,6 +260,22 @@ "label": "Buchrücken bei Comics anzeigen", "hint": "Buchrücken- und Glanzeffekt auf Comic-Covern anwenden (cbz, cbr, cb7)" }, + "detailCoverTint": { + "title": "Buchdetails Cover Färbung", + "hint": "Färbung basierend auf dem Cover des Kunstwerkes und Titel der Buchdetails", + "off": { + "label": "Aus", + "hint": "Einfacher Kartenhintergrund" + }, + "single": { + "label": "Eine Farbe", + "hint": "Nur die dominierende Farbe des Covers" + }, + "duotone": { + "label": "Zwei Farben", + "hint": "Fügt die Akzentfarbe des Covers hinzu, wenn es eine eindeutige Farbe hat" + } + }, "shadow": { "title": "Stärke des Cover-Schattens", "hint": "Steuert die Tiefe unter Covern in Raster-, Listen-, Tabellen- und Dashboard-Miniaturansichten", @@ -406,7 +470,8 @@ "book-covers": "Buchcover", "icons": "Icons", "layout": "Layout", - "behavior": "Verhalten" + "behavior": "Verhalten", + "language": "Sprache" } }, "account": { @@ -424,7 +489,8 @@ "notice": "Demo-eingeschränktes Konto: Das Bearbeiten von Profil, Passwort, Avatar und verknüpften Identitäten ist deaktiviert." }, "feedback": { - "unsavedChanges": "Nicht gespeicherte Änderungen" + "unsavedChanges": "Nicht gespeicherte Änderungen", + "discard": "Verwerfen" }, "profile": { "securityHeading": "Profil & Sicherheit", @@ -444,7 +510,8 @@ "updated": "Profil aktualisiert", "usernameHint": "Ihr Benutzername kann nicht geändert werden.", "passwordHint": "Ändern Sie das Passwort, das Sie zum Anmelden verwenden.", - "passwordHintOidc": "Ihr Passwort wird von Ihrem Identitätsanbieter verwaltet." + "passwordHintOidc": "Ihr Passwort wird von Ihrem Identitätsanbieter verwaltet.", + "passwordHintShared": "Gemeinsame Konten melden Sie sich durch einen magischen Link an und haben kein Passwort." }, "readingPreferences": { "title": "Leseeinstellungen", @@ -452,7 +519,10 @@ "timezone": "Zeitzone", "save": "Einstellungen speichern", "enableAchievements": "Erfolge aktivieren", - "enableAchievementsHint": "Verfolge den Fortschritt bei Erfolgen und zeige die zugehörige Benutzeroberfläche an. Benachrichtigungen für Erfolge können separat unter Benachrichtigungen verwaltet werden." + "enableAchievementsHint": "Verfolge den Fortschritt bei Erfolgen und zeige die zugehörige Benutzeroberfläche an. Benachrichtigungen für Erfolge können separat unter Benachrichtigungen verwaltet werden.", + "achievementsEnabled": "Erfolge aktiviert", + "achievementsDisabled": "Erfolge deaktiviert", + "achievementsSaveFailed": "Fehler beim Aktualisieren der Erfolgseinstellung" }, "preferences": { "saveFailed": "Einstellungen konnten nicht gespeichert werden", @@ -494,7 +564,9 @@ "title": "Verknüpfung mit {provider}-Identität aufheben?", "description": "Geben Sie Ihr Passwort zur Bestätigung ein. Sie können sich mit diesem Anbieter nicht mehr anmelden.", "currentPassword": "Aktuelles Passwort" - } + }, + "description": "Melden Sie sich mit einem externen Identitätsanbieter an, der mit diesem Konto verknüpft ist.", + "unlinkAria": "{provider} entfernen" }, "tour": { "title": "Geführte Tour", @@ -523,6 +595,11 @@ "title": "Blockierte Genres", "description": "Bücher mit einem dieser Genres werden für Sie ausgeblendet." } + }, + "groups": { + "profile": "Profil", + "preferences": "Einstellungen", + "security": "Sicherheit & Zugriff" } }, "magicLinks": { @@ -558,7 +635,8 @@ "uses": "Verwendungen", "created": "Erstellt", "status": "Status", - "totalUses": "Gesamtverwendungen" + "totalUses": "Gesamtverwendungen", + "actions": "Aktionen" }, "createDialog": { "title": "Magic Link erstellen", @@ -586,7 +664,12 @@ "emptyTitle": "Es wurden noch keine Magic Links erstellt", "emptyHint": "Klicken Sie auf \"{action}\", um eine teilbare Anmelde-URL zu generieren.", "noActiveTitle": "Keine aktiven Magic Links", - "noActiveHint": "Alle generierten Magic Links für diese Seite sind abgelaufen oder wurden widerrufen." + "noActiveHint": "Alle generierten Magic Links für diese Seite sind abgelaufen oder wurden widerrufen.", + "copyLinkAria": "Kopiere den Link für {label}", + "pauseAria": "{label} pausieren", + "resumeAria": "{label} fortsetzen", + "revokeAria": "{label} widerrufen", + "lastUsedLabel": "Zuletzt verwendet am {date}" }, "oidc": { "title": "OIDC / SSO", @@ -648,6 +731,7 @@ "test": { "connected": "Verbunden - {issuer}", "connectionFailed": "Verbindung fehlgeschlagen", + "privateIssuerAddress": "Die ISSUER-URL wurde an eine private oder lokale Netzwerkadresse aufgelöst, der Server hat die Verbindung verweigert. Legen Sie OIDC_ALLOW_LOCAL_ISSUERS=true auf dem BookOrbit-Server fest, um dies zu erlauben.", "hide": "Ausblenden", "details": "Details", "supported": "unterstützt", @@ -699,10 +783,13 @@ "updatesGroup": "Updates", "importFromBooklore": "Aus Booklore importieren", "bookloreImportConfigured": "Booklore-Import konfiguriert", + "importLibraryData": "Importiere Bibliotheksdaten", + "migrationConfigured": "Migrationsquelle konfiguriert", "migrationRunning": "Migration läuft", "migrationCompleted": "Migration abgeschlossen", "migrationFailed": "Migration fehlgeschlagen", "importDescription": "Einmaliger Import von Büchern, Metadaten und Lesefortschritt aus einer vorherigen Booklore-Installation.", + "migrationDescription": "Einmaliger Import von Büchern, Metadaten und Lesefortschritten aus einer anderen Bibliotheks-Anwendung.", "configuredDescription": "Quelle: {name}. Noch keine Migration durchgeführt - Setup fortsetzen, um den Import zu starten.", "runningDescription": "Phase: {stage} - gestartet {started}", "completedDescription": "Von {name} - abgeschlossen {date}", @@ -744,6 +831,7 @@ "migration": { "title": "Migration", "subtitle": "Einmaliger Booklore-Import: Quelle verbinden, Benutzer zuordnen, Testlauf durchführen, Migration starten und Bericht exportieren.", + "genericSubtitle": "Einmal-Bibliotheksimporte: Verbinden Sie eine Quelle, Kartenbenutzer, führen Sie einen Testlauf aus, starten Sie die Migration und exportieren Sie einen Bericht.", "progress": "Fortschritt", "stepSourceConnection": "Quellverbindung", "stepUserPathMapping": "Benutzer- und Pfadzuordnung", @@ -753,6 +841,7 @@ "stepReport": "Bericht", "stepReportTitle": "Migrationsbericht", "subtitleSource": "Konfigurieren Sie die Datenbankverbindung zu Ihrer Booklore-Quellinstanz.", + "genericSubtitleSource": "Konfigurieren Sie die Verbindung zu Ihrer Quellbibliothek-Anwendung.", "subtitleMappings": "Ordnen Sie Quellbenutzer den Zielbenutzern zu und übersetzen Sie Dateipfade.", "subtitleDryRun": "Vorschau dessen, was importiert wird, bevor die eigentliche Migration ausgeführt wird.", "subtitleRun": "Starten Sie den eigentlichen Import und überwachen Sie den Fortschritt.", @@ -837,13 +926,16 @@ "reasonNoFilePathMatch": "Der Dateipfad stimmte mit keinem Buch in dieser Bibliothek überein", "reasonNoFileHashMatch": "Der Datei-Hash stimmte mit keinem Buch in dieser Bibliothek überein", "reasonNoIsbnMatch": "Die ISBN stimmte mit keinem Buch in dieser Bibliothek überein", + "reasonNoAsinMatch": "ASIN entspricht keinem Buch in dieser Bibliothek", "reasonInsufficientSourceData": "Nicht genügend Metadaten für einen Abgleichsversuch", "reasonAmbiguousIsbnMatch": "Mehrere Bücher stimmten mit derselben ISBN überein", + "reasonAmbiguousAsinMatch": "Mehrere Bücher stimmen mit der gleichen ASIN überein", "reasonAmbiguousFileHashMatch": "Mehrere Bücher stimmten mit demselben Datei-Hash überein", "reasonAmbiguousFilePathMatch": "Mehrere Bücher stimmten mit demselben Dateipfad überein", "reasonAmbiguousTitleAuthorMatch": "Mehrere Bücher stimmten mit demselben Titel und Autor überein", "reasonUnknown": "Grund konnte nicht ermittelt werden", "strategyIsbn": "Abgeglichen nach ISBN", + "strategyAsin": "Über ASIN ermittelt", "strategyFileHash": "Abgeglichen nach Datei-Hash", "strategyPathMapping": "Abgeglichen nach zugeordnetem Dateipfad", "strategyTitleAuthor": "Abgeglichen nach Titel und Autor", @@ -879,6 +971,7 @@ "refresh": "Aktualisieren", "sourceUser": "Quellbenutzer", "targetUser": "Zielbenutzer", + "doNotImport": "Diesen Benutzer nicht importieren", "noSourceUsersLoaded": "Noch keine Quellbenutzer geladen.", "noActiveTargetUsers": "Keine aktiven Zielbenutzer gefunden. Erstellen oder reaktivieren Sie einen BookOrbit-Benutzer vor der Zuordnung.", "pathPrefixMappings": "Pfadpräfix-Zuordnungen", @@ -892,8 +985,8 @@ "remove": "Entfernen", "pathValidation": "Pfadvalidierung", "pathValidationMapped": "{mapped} von {total} Quellbüchern haben einen zugeordneten Pfad", - "pathValidationUnmatched": "{count} zugeordnete Pfade wurden auf der Festplatte nicht gefunden - diese Bücher werden per ISBN-/Titelabgleich behandelt", - "pathValidationAllMatched": "Alle {count} zugeordneten Pfade wurden auf der Festplatte gefunden", + "pathValidationUnmatched": "{count} zugeordnete Pfade wurden auf dem Datenträger nicht gefunden - diese Bücher werden per ISBN-/Titelabgleich behandelt", + "pathValidationAllMatched": "Alle {count} zugeordneten Pfade wurden auf dem Datenträger gefunden", "saveMappings": "Zuordnungen speichern", "runDryRun": "Testlauf ausführen", "matched": "Übereinstimmend:", @@ -983,6 +1076,7 @@ "syncMetadataToFiles": "Metadaten mit Dateien synchronisieren", "deleteLibrary": "Bibliothek löschen", "bookCount": "{count, plural, =0 {keine Bücher} one {# Buch} other {# Bücher}}", + "booksUnit": "{count, plural, one {Buch} other {Bücher}}", "folderCount": "{count, plural, =0 {keine Ordner} one {# Ordner} other {# Ordner}}", "fileMode": "Dateimodus", "folderMode": "Ordnermodus", @@ -1010,7 +1104,110 @@ "libraryDeleted": "\"{name}\" gelöscht", "deleteFailed": "Löschen der Bibliothek fehlgeschlagen", "refreshingCovers": "Cover werden aktualisiert {pct}% ({processed}/{total})", - "coversRefreshed": "Cover aktualisiert ({count} verarbeitet)" + "coversRefreshed": "Cover aktualisiert ({count} verarbeitet)", + "onDiskUnit": "{size} auf der Festplatte", + "noFilesIndexed": "Keine Dateien indiziert", + "formatEntry": "{format} {count}", + "formatOverflow": "{count, plural, one {+# zusätzliches Format} other {+# weitere Formate}}", + "extraFolders": "{count, plural, one {# Ordner} other {# Ordner}}", + "openLibrary": "{name} öffnen", + "moreActions": "Weitere Aktionen für {name}", + "statsFailed": "Die Anzahl der Bibliotheken konnte nicht geladen werden. Alles andere auf dieser Seite funktioniert weiterhin.", + "filterLabel": "Bibliotheken filtern", + "filterPlaceholder": "Nach Namen oder Pfad filtern", + "filterClear": "Filter zurücksetzen", + "sortLabel": "Sortieren", + "noMatchesTitle": "Keine Bibliotheken mit diesem Filter gefunden", + "noMatchesHint": "Keine Ergebnisse für {query} nach Name oder Ordnerpfad.", + "totalLibraries": "{count, plural, one {# Bibliothek} other {# Bibliotheken}}", + "neverScanned": "Nie gescannt", + "neverScannedHint": "Scan starten, um Ordner zu indizieren", + "scanFailedAt": "Fehlgeschlagen: {time}", + "scanningPercent": "Durchsuche {pct}%", + "scanCounting": "Dateien zählen", + "scanCounts": "{processed} von {total}", + "scanAdded": "{count, plural, one {+# hinzugefügt} other {+# hinzugefügt}}", + "scanUpdated": "{count, plural, one {# aktualisiert} other {# aktualisiert}}", + "scanMissing": "{count, plural, one {# Fehlend} other {# Fehlende}}", + "scanNoChange": "keine Änderungen", + "outcomeSeparator": ", ", + "scanOutcome": "{trigger} - {outcome}", + "syncConfirmBody": "Dies überschreibt die Metadaten innerhalb jeder unterstützten Datei in {name} direkt auf dem Datenträger. Dies kann nicht rückgängig gemacht werden.", + "columns": { + "library": "Bibliothek", + "contents": "Inhalt", + "onDisk": "Auf dem Datenträger", + "automation": "Automatisierung", + "lastScan": "Letzter Scan", + "actions": "Aktionen" + }, + "sort": { + "default": "Standardsortierung", + "name": "Name", + "books": "Bücher", + "size": "Größe auf Datenträger:", + "lastScan": "Letzter Scan" + }, + "trigger": { + "manual": "Manuell", + "watcher": "Überwacher", + "schedule": "Zeitplan" + }, + "capability": { + "watch": "Ordner überwachen", + "schedule": "Geplanter Scan", + "fileWrite": "In Datei schreiben", + "fileRename": "Dateien umbenennen", + "on": "{name}: Ein", + "off": "{name}: Aus", + "legendHint": "Gestrichtet bedeutet aus" + }, + "stateOn": "Ein", + "stateOff": "Aus", + "toggleDetail": "Details für {name} anzeigen", + "durationMs": "{ms} ms", + "durationSeconds": "{seconds}s", + "durationMinutes": "{minutes}m {seconds}s", + "history": { + "when": "Wann", + "trigger": "Auslöser", + "duration": "Dauer", + "result": "Ergebnis", + "status": "Status", + "statusValue": { + "running": "Läuft", + "completed": "Abgeschlossen", + "failed": "Fehlgeschlagen" + } + }, + "detail": { + "foldersTitle": "Ordner & Layout", + "metadataTitle": "Metadaten & Lesen", + "accessTitle": "Zugriff", + "historyTitle": "Scanverlauf", + "path": "Pfad {index}", + "organization": "Organisation", + "excludePatterns": "Muster ausschließen", + "precedence": "Quellenpriorität", + "allowedFormats": "Zulässige Formate", + "countsAsStarted": "Zählt als begonnen", + "countsAsFinished": "Zählt als beendet", + "peopleWithAccess": "Personen mit Zugriff", + "added": "Hinzugefügt", + "coverShape": "Cover-Form", + "coverShapeValue": { + "portrait": "2:3 Porträt", + "square": "1:1 Quadrat" + }, + "none": "Keine", + "allSupported": "Alle unterstützt", + "patternCount": "{count, plural, one {# Muster} other {# Muster}}", + "peopleCount": "{count, plural, =0 {Keine expliziten Zugriff} one {# Person} other {# Personen}}", + "historyEmpty": "Diese Bibliothek wurde noch nie gescannt.", + "historyFailed": "Der Scanverlauf für diese Bibliothek konnte nicht geladen werden." + }, + "scannedAt": "{time} gescannt", + "detailRegion": "Details für {name}" }, "authorEnrichment": { "configuration": "Konfiguration", @@ -1037,7 +1234,25 @@ "saveFailed": "Speichern der Einstellungen zur Autorenanreicherung fehlgeschlagen", "noEligibleAuthors": "Keine berechtigten Autoren gefunden", "noAuthorsToEnrich": "Keine Autoren zum Anreichern", - "queueFailed": "Einreihen des Autoren-Backfills fehlgeschlagen" + "queueFailed": "Einreihen des Autoren-Backfills fehlgeschlagen", + "fields": { + "description": "Biografie", + "photo": "Foto", + "birthDate": "Geboren", + "deathDate": "Gestorben", + "website": "Webseite", + "genres": "Genres", + "influences": "Beeinflusst" + }, + "metadataPreferences": { + "title": "Quellfelder", + "hint": "Legen Sie die Reihenfolge fest, mit der jedes Feld gefüllt wird. Der erste Anbieter mit einem Wert gewinnt.", + "noProviders": "Keine Anbieter verfügbar", + "saved": "Quellfelder gespeichert", + "saveFailed": "Konnte Quellfelder nicht speichern", + "limitedProviders": "{providers} liefert nur Biografien und Fotos.", + "addProvider": "{provider} als Quelle hinzufügen" + } }, "scoreWeights": { "groupLabel": "Bewertungsgewichte", @@ -1046,6 +1261,10 @@ "resetToDefaultsButton": "Auf Standard zurücksetzen", "recalculateAll": "Alle neu berechnen", "confirmReset": "Zurücksetzen bestätigen", + "resetDialog": { + "title": "Jedes Gewicht auf seine Standardwerte zurücksetzen?", + "description": "Alle 24 Felder werde zu den BookOrbit-Standardwerten zurückgesetzt. Nichts wird gespeichert, bis Sie sich zum speichern und neubewerten entscheiden." + }, "reset": "Zurücksetzen", "recalculate": "Neu berechnen", "subtotal": "Zwischensumme: {count}", @@ -1053,13 +1272,95 @@ "saveFailed": "Speichern der Bewertungsgewichte fehlgeschlagen", "recalcStarted": "Neuberechnung der Bewertung im Hintergrund gestartet", "recalcFailed": "Neuberechnung fehlgeschlagen", - "resetToDefaults": "Gewichte auf Standard zurückgesetzt. Zum Anwenden speichern." + "resetToDefaults": "Gewichte auf Standard zurückgesetzt. Zum Anwenden speichern.", + "howItWorks": { + "title": "Wie es funktioniert.", + "summary": "Jedes Buch erhält eine Punktzahl von 0 bis 100 für die Vollständigkeit seiner Metadaten. Das Gewicht ist nur in Relation zu anderen Feldern relevant, sodass eine Verdopplung aller Gewichte keine Änderung bewirkt." + }, + "readOnly": "Sie können sehen, wie die Punktzahlen berechnet werden, aber das Ändern der Gewichte benötigt die Berechtigung der App-Einstellungen.", + "compositionTitle": "Woher die Punktzahl kommt", + "compositionHint": "Prozentwerte summieren sich immer zu 100.", + "searchFields": "Felder für Filter", + "clearSearch": "Suche zurücksetzen", + "noMatches": "Keine Felder stimmen mit dieser Suche überein.", + "totalSummary": "{scoring} von 24 Feldern, {total} Punkte insgesamt", + "countGroups": "Zählt zur Punkte-Bewertung", + "notScored": "Nicht mit Punkten bewertet", + "notScoredHeading": "({count}) ohne Bewertung", + "notScoredHint": "Ein Feld mit Null hinterlässt so auch die Gesamtsumme, so dass die fehlenden Bücher nicht angezeigt werden.", + "decreaseWeight": "Verringere das Gewicht von {field}", + "increaseWeight": "Erhöhe das Gewicht von {field}", + "revertField": "{field} auf das gespeicherte Gewicht zurücksetzen", + "table": { + "field": "Feld", + "weight": "Gewicht", + "share": "Aufteilung der Gewichte", + "versusDefault": "Ändern" + }, + "groups": { + "core": "Kern", + "publishing": "Veröffentlichung", + "classification": "Klassifizierung", + "enrichment": "Anreicherung", + "providers": "Anbieter-IDs" + }, + "rules": { + "text": "Zählt, wenn es nicht leer ist", + "positive": "Zählt, wenn er über 0 liegt", + "count": "Zählt, wenn mindestens eine Regel gesetzt ist", + "cover": "Zählt, wenn ein Titelbild gespeichert ist", + "providerId": "Zählt, wenn die ID gespeichert ist", + "seriesIndex": "Zählt, wenn über 0 ist, sodass die Lautstärke 0 nie sein kann" + }, + "rail": { + "title": "Wo Ihre Bücher landen", + "description": "Die Abzeichenfarbe, die ein Leser auf einer Buchkarte für jedes heutige Buch sieht.", + "bandsLabel": "Abzeichenfarbe für Bänder", + "bands": { + "poor": "UNTER 50", + "fair": "50-69", + "good": "70-89", + "great": "90+" + }, + "median": "Median", + "belowFifty": "Unter 50", + "ninetyPlus": "90 und höher", + "noBooks": "Noch keine bewerteten Bücher. Führen Sie eine Neugewichtung aus, sobald Ihre Bibliothek fertig importiert wurde.", + "scopeNote": "Über {count, plural, one {# Buch} other {# Bücher}} in den Bibliotheken, auf die du zugreifen kannst, mit den aktuell gespeicherten Gewichten." + }, + "progress": { + "running": "Neugewichtung der Bibliothek", + "failed": "Neugewichtung fehlgeschlagen", + "count": "{processed} Bücher verarbeitet", + "countOf": "{processed} von {total} Büchern", + "failedCount": "({count} fehlgeschlagen)", + "safeToLeave": "Sicher, um diese Seite zu verlassen.", + "dismiss": "Verwerfen" + }, + "save": { + "upToDate": "Alle Änderungen gespeichert.", + "unsaved": "{count, plural, one {# Feld geändert} other {# Felder geändert!}}", + "totalShift": "Insgesamt {from} bis {to} Punkte", + "rescores": "Speichere Gewichtung von {count, plural, one {# Buch} other {# Bücher}} im Hintergrund.", + "rescoresUnknown": "Speichere Gewichtung der Bibliothek im Hintergrund.", + "action": "Speichern und neu gewichten", + "discard": "Verwerfen", + "leaveWarning": "Sie haben nicht gespeicherte Gewichtsänderungen. Verwerfen und Seite verlassen?" + } }, "tabs": { "users": "Benutzer", "account-activity": "Kontoaktivität", "magic-links": "Magic Links", - "oidc": "OIDC / SSO" + "oidc": "OIDC / SSO", + "server-fonts": "Server-Schriftarten" + }, + "serverFonts": { + "title": "Server-Schriftarten", + "subtitle": "Hochladen von Schriftarten, die jeder Benutzer im eBook-Reader auswählen kann, ohne eigene hochzuladen.", + "listLabel": "Server-Schriftarten", + "noFontsYet": "Noch keine Server-Schriftarten", + "noFontsHint": "Schriftarten, die Sie hier hinzufügen, erscheinen in jedem Reader des Benutzers." } }, "common": { @@ -1072,14 +1373,30 @@ "opds": "OPDS", "kobo": "Kobo", "koreader": "KOReader", + "integrations": "Integrationen", "hardcover": "Hardcover", "admin": "Admin", "system": "System", "account": "Konto" } }, + "integrations": { + "title": "Integrationen", + "subtitle": "Verbinden Sie externe Dienste, um Ihre Lesedaten und Hervorhebungen zu synchronisieren.", + "noPermission": "Sie haben keine Berechtigung um Integrationen zu verwenden.", + "tabs": { + "hardcover": "Hardcover", + "readwise": "Readweise", + "storygraph": "StoryGraph" + }, + "providerSubtitles": { + "readwise": "Senden Sie Ihre Hervorhebung automatisch an Readwise.", + "storygraph": "Synchronisiere deinen Lesefortschritt und Status mit The StoryGraph." + } + }, "metadata": { "title": "Metadaten", + "subtitle": "Konfigurieren Sie Metadatenanbieter, passende Regeln, Automatisierung und Autorenanreicherung.", "noPermission": "Sie haben keine Berechtigung, die Metadaten-Einstellungen zu verwalten.", "fields": { "title": "Titel", @@ -1097,20 +1414,39 @@ "genres": "Genres", "narrators": "Sprecher", "duration": "Dauer", - "abridged": "Gekürzt" + "abridged": "Gekürzt", + "tags": "Tags", + "isbn13": "ISBN-13", + "isbn10": "ISBN-10", + "googleBooksId": "Google Books-ID", + "goodreadsId": "Goodreads-ID", + "amazonId": "Amazon ID", + "hardcoverId": "Hardcover-ID", + "openLibraryId": "Open Library-ID", + "itunesId": "iTunes-ID", + "koboId": "Kobo-ID", + "aladinId": "Aladin-ID" }, "mergeStrategy": { "fillMissing": { "label": "Fehlendes ergänzen", - "description": "Nur schreiben, wenn das Feld derzeit leer ist" + "description": "Nur schreiben, wenn das Feld derzeit leer ist", + "short": "Lücken füllen" + }, + "mergeExisting": { + "label": "Mit vorhandenem zusammenführen", + "description": "Behalte gespeicherte Genres und füge neue Provider-Genres hinzu", + "short": "Zusammenführen" }, "overwriteIfProvided": { "label": "Überschreiben, falls vorhanden", - "description": "Schreiben, wenn der Anbieter einen Wert zurückgegeben hat" + "description": "Schreiben, wenn der Anbieter einen Wert zurückgegeben hat", + "short": "Wenn vorhanden" }, "overwrite": { "label": "Immer überschreiben", - "description": "Vorhandenen Wert immer ersetzen" + "description": "Vorhandenen Wert immer ersetzen", + "short": "Immer" } }, "autoFetch": { @@ -1178,16 +1514,38 @@ "providers": { "availableSources": "Verfügbare Quellen", "saveChanges": "Änderungen speichern", + "discard": "Verwerfen", + "configure": "Konfigurieren", "test": "Test", "testing": "Wird getestet ...", + "testHint": "Überprüft diese Zugangsdaten zum Live-Dienst. Es wird nichts gespeichert.", "enabled": "Aktiviert", "retryIn": "Erneuter Versuch in {duration}", "runTestBeforeEnabling": "Vor dem Aktivieren Test ausführen", "hardcoverEnableHint": "Führen Sie den Test mit dem aktuellen Token aus, um den Aktivierungsschalter freizuschalten.", + "searchPlaceholder": "Filtere Quellen", + "sourcesEnabled": "{enabled} von {total} Quellen aktiviert", + "groupEnabled": "{enabled} der {total} aktiv", + "unsavedChanges": "{count, plural, one {# ungespeicherte Änderung} other {# ungespeicherte Änderungen}}", + "noMatches": "Keine Quellen entsprechen diesem Filter.", + "clearFilters": "Filter zurücksetzen", + "filter": { + "label": "Quellen nach Status filtern", + "all": "Alle", + "enabled": "Aktiviert", + "needsSetup": "Benötigt Einrichtung" + }, + "groups": { + "books": "Allgemeine Buchkataloge", + "audiobooks": "Audiobücher", + "comics": "Comics & Graphic Novels", + "regional": "Regionale Kataloge" + }, "badge": { "setupRequired": "Einrichtung erforderlich", "throttled": "Gedrosselt", - "ready": "Bereit" + "ready": "Bereit", + "active": "Aktiv" }, "fields": { "apiKey": "API-Schlüssel", @@ -1211,6 +1569,7 @@ "kobo": "Ruft Daten von Kobos öffentlichen Buchseiten ab. Land und Sprache müssen den URL-Pfaden von Kobo entsprechen; ein Bot-Schutz kann Anfragen blockieren.", "audible": "Ruft Hörbuch-Metadaten von Audible ab. Keine zusätzliche Einrichtung erforderlich.", "audnexus": "Von der Community gepflegte Hörbuch-Metadaten. Keine Einrichtung erforderlich.", + "librofm": "DRM-freie Audio-Katalog-Metadaten. Verwendet einen undokumentierten Libro.fm-Endpunkt und ist standardmäßig deaktiviert.", "comicvine": "Comic-Metadaten von ComicVine. Ein kostenloser API-Schlüssel von comicvine.gamespot.com ist erforderlich.", "ranobedb": "Metadaten japanischer Light Novels von RanobeDB. Keine Einrichtung erforderlich.", "lubimyczytac": "Polnischer Buchkatalog (lubimyczytac.pl). Ruft Daten von öffentlichen Buchseiten ab. Keine Einrichtung erforderlich.", @@ -1243,7 +1602,8 @@ "fillMissingBody": "Nur schreiben, wenn der aktuelle Wert leer ist.", "overwriteTerm": "Überschreiben:", "overwriteBody": "Ersetzen, sobald ein Anbieter Daten liefert." - } + }, + "summary": "Anbieter werden von oben nach unten probiert, der erste mit einem Wert zurückgibt wird ausgewählt. Die Merge-Strategie entscheidet, ob der Wert, den das Buch bereits hat, ersetzt wird; Genres können auch neue eindeutige Werte anhängen. Setzen Sie hier die Standardwerte und überschreiben Sie dann einzelne Felder pro Bibliothek." }, "libraryOverrides": { "title": "Bibliotheksüberschreibungen", @@ -1262,6 +1622,12 @@ "label": "Genres aller ausgewählten Anbieter kombinieren", "hint": "Genres von jedem dem Feld Genres zugewiesenen Anbieter sammeln und Duplikate entfernen, anstatt beim ersten Ergebnis zu stoppen." }, + "maxGenres": { + "label": "Anzahl maximaler Genres pro Buch", + "hint": "Wird nach Ausschlüssen und doppelter Entfernung angewendet. Leer lassen für unbegrenzt. Dies wirkt sich auf zukünftige Metadaten abfragen aus.", + "unlimited": "Unbegrenzt", + "error": "Geben Sie eine ganze Zahl von 1 bis {max} ein, oder lassen Sie das Feld leer." + }, "storeProviderIds": { "label": "Anbieter-IDs bei Büchern speichern", "hint": "Beim Abrufen von Metadaten die zurückgegebenen Anbieter-IDs (ISBN, ASIN, Goodreads-ID usw.) im Buchdatensatz speichern, für genauere zukünftige Suchen." @@ -1290,13 +1656,15 @@ }, "groupSummary": { "base": "{fields} Felder · {enabled} aktiviert", - "withOverrides": "{base} · {overrides} Überschreibungen" + "withOverrides": "{base} · {overrides} Überschreibungen", + "enabledOf": "{enabled} von {fields} aktiviert" }, "table": { "field": "Feld", "activeProviders": "Aktive Anbieter (nach Priorität geordnet)", "mergeStrategy": "Zusammenführungsstrategie", - "status": "Status" + "status": "Status", + "noMatches": "Keine Felder entsprechen diesen Filtern." }, "field": { "noProviders": "Aktiviert, aber ohne Anbieter", @@ -1304,7 +1672,19 @@ "config": "Konfiguration", "custom": "Benutzerdefiniert", "default": "Standard", - "resetToDefault": "Auf Standard zurücksetzen" + "resetToDefault": "Auf Standard zurücksetzen", + "toggle": "Abrufen von {field} beim Aktualisieren von Metadaten", + "configure": "{field} konfigurieren", + "add": "Hinzufügen", + "addHint": "Am Ende der Reihenfolge hinzugefügt. Sie können den Chip nach vorne ziehen.", + "addProviderTo": "Anbieter zu {field} hinzufügen", + "removeProvider": "{provider} entfernen", + "noProvidersYet": "Noch keine Anbieter", + "skippedCount": "{count, plural, one {# Übersprungen} other {# Übersprungen}}", + "unsaved": "Ungespeichert", + "override": "Überschreiben", + "inherited": "Geerbt", + "morePreview": "+{count} weitere" }, "reservoir": { "disabled": "{provider} - deaktiviert", @@ -1318,6 +1698,69 @@ "statusDisabled": "deaktiviert", "statusNotConfigured": "nicht konfiguriert", "done": "Fertig" + }, + "scope": { + "label": "Regelbereich", + "global": "Globale Standardwerte", + "overrideCount": "{count, plural, one {# überschriebenes Feld} other {# überschriebene Felder}}", + "unsavedMarker": "Nicht gespeicherte Änderungen" + }, + "toolbar": { + "searchFields": "Felder durchsuchen", + "clearSearch": "Suche löschen", + "provider": "Anbieter", + "anyProvider": "Beliebig", + "providerMenuTitle": "Filter und Massenbearbeitung nach Anbieter", + "usedIn": "{count, plural, =0 {Unbenutzt} one {# Feld} other {# Felder}}", + "showOnlyThese": "Nur Felder mit Verwendung anzeigen", + "bulkLabel": "Auf alle {count} Felder anwenden, die es verwenden", + "makeFirst": "Setze überall an erster Stelle", + "makeLast": "Setze überall an letzter Stelle", + "removeEverywhere": "Aus allen Feldern entfernen", + "allFields": "Alle Felder", + "overridesOnly": "Nur Überschriebene", + "clearFilters": "Filter zurücksetzen" + }, + "providerState": { + "disabled": "Deaktiviert", + "notConfigured": "Nicht konfiguriert", + "disabledDetail": "{provider} ist ausgeschaltet. Er bleibt in der Reihenfolge erhalten und wird übersprungen.", + "notConfiguredDetail": "{provider} hat noch keine Anmeldedaten. Er bleibt in der Reihenfolge erhalten und wird übersprungen." + }, + "detail": { + "priority": "Anbieter-Priorität", + "priorityHint": "Der erste Anbieter, der einen Wert zurückgibt, gewinnt.", + "moveUp": "Verschiebe {provider} nach vorne", + "moveDown": "Verschiebe {provider} nach hinten", + "result": "Ergebnis", + "resultHint": "Beim nächsten Aktualisieren wird dieses Feld in dieser Reihenfolge aufgelöst:", + "noUsableProviders": "Kein verwendbarer Anbieter - dieses Feld wird nicht ausgefüllt.", + "skippedSummary": "{count, plural, one {{providers} ist in der Reihenfolge, wird aber übersprungen.} other {{providers} sind in Reihenfolge, werden aber übersprungen.}}", + "appliesTo": "Gilt für {scope}.", + "inheritGlobal": "Globale Regel erben", + "inheritingGlobal": "Vererbung der globalen Regel.", + "collapse": "Einklappen" + }, + "save": { + "upToDate": "Keine ungespeicherten Änderungen", + "unsaved": "{count, plural, one {# ungespeicherte Änderung} other {# ungespeicherte Änderungen}}in {scope}", + "discard": "Verwerfen", + "action": "{scope} speichern" + }, + "confirm": { + "clearProviders": { + "title": "Alle Anbieter entfernen?", + "description": "Dies leert die Anbieterliste auf allen 16 Feldern in {scope}. Nichts wird gespeichert, bis Sie Speichern." + }, + "resetScope": { + "title": "Auf Standardwerte zurücksetzen?", + "globalDescription": "Dies ersetzt Ihre globalen Feldregeln durch die Standardwerte des Systems und speichert sofort.", + "libraryDescription": "Dies entfernt jede Überschreibung auf {scope}, sodass es die globalen Regeln wieder erbt und sofort speichert." + }, + "removeProvider": { + "title": "{provider} aus jedem Feld entfernen?", + "description": "Hierdurch wird {provider} in jedem Feld in {scope} aus der Anbieter-Reihenfolge entfernt. Nichts wird gespeichert, bis Speichern ausgewählt wird." + } } }, "genreBlocklist": { @@ -1412,6 +1855,15 @@ "score": "Weisen Sie Metadatenfeldern Gewichtungen zu, um zu berechnen, wie sehr abgerufenen Ergebnissen vertraut werden soll.", "auto-fetch": "Rufen Sie automatisch Cover, Beschreibungen und weitere Details ab, wenn neue Bücher zu Ihrer Bibliothek hinzugefügt werden.", "authors": "Rufen Sie automatisch Biografien und Profilfotos ab, wenn neue Autoren in Ihrer Bibliothek erscheinen." + }, + "preferences": { + "toast": { + "saved": "Metadaten-Einstellungen gespeichert", + "saveFailed": "Metadaten-Einstellungen konnten nicht gespeichert werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "globalReset": "Globale Feldregeln auf Standardeinstellungen zurückgesetzt", + "libraryReset": "Bibliothek auf die globalen Regeln zurücksetzen", + "resetFailed": "Konnte die Metadaten-Einstellungen nicht zurücksetzen. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut." + } } }, "reader": { @@ -1459,6 +1911,8 @@ "typography": "Typografie", "font": "Schriftart", "fontHint": "Für den Fließtext verwendete Schriftart", + "fontStyle": "Schrift-Stil", + "fontStyleHint": "Gewicht und Neigung des Textkörpers. Fett und kursiv im Buch bleiben relativ dazu.", "builtInFonts": "Integrierte Schriftarten", "yourFonts": "Ihre Schriftarten", "fontSize": "Schriftgröße", @@ -1524,12 +1978,17 @@ "spreadAlignmentHint": "Paarung nach dem Cover um eine Seite verschieben bei versetzten Scans", "alignmentNormal": "Normal", "alignmentShifted": "Verschoben", + "spreadGap": "Abstandsgröße", + "spreadGapHint": "Abstand zwischen Seiten in Zwei-Seiten-Ansicht", + "spreadGapValue": "{value}px", "widePageHandling": "Umgang mit breiten Seiten", "widePageHandlingHint": "Automatisch zeigt breite Scans allein im zweiseitigen seitenweisen Modus an", "widePageAuto": "Automatisch", "widePageDisable": "Deaktivieren", "forceTwoPage": "Zweiseitig auf kleinen Bildschirmen erzwingen", "forceTwoPageHint": "Automatischen Mobil-Fallback umgehen, wenn der seitenweise Zweiseitenmodus ausgewählt ist", + "autoAdvance": "Automatisch zum nächsten Buch springen", + "autoAdvanceHint": "Blättere auf letzter Seite um, um das nächste Buch zu öffnen", "off": "Aus", "on": "An", "display": "Anzeige", @@ -1575,6 +2034,9 @@ "deleteVariant": "Variante löschen", "styleNormal": "Normal", "styleItalic": "Kursiv", + "weightItalicOf": "{weight} Kursiv", + "variableRange": "Bereich {min}-{max}", + "variableStyles": "{count, plural, one {# Stil} other {# Stile}}", "weightThin": "Dünn", "weightExtraLight": "Extra Leicht", "weightLight": "Leicht", @@ -1591,7 +2053,12 @@ "deleteFamilyFailed": "Löschen der Schriftfamilie fehlgeschlagen", "demoCannotManage": "Demo-eingeschränktes Konto kann Schriftarten nicht verwalten", "fileAdded": "\"{name}\" hinzugefügt", - "uploadFailed": "Hochladen fehlgeschlagen" + "uploadFailed": "Hochladen fehlgeschlagen", + "serverFontsTitle": "Server-Schriftarten (geteilt von Admin)", + "serverFontsHint": "Diese Schriftarten kommen von Ihrem Server-Administrator. Einzelne Schriftarten ausschalten, um sie vom Reader fernzuhalten.", + "serverFontsShown": "{count} von {total} angezeigt", + "serverFontsAllHidden": "Alle Server-Schriftarten sind versteckt. Ihr Reader bietet nur eingebaute und eigene Schriften an.", + "serverFontVisibilityFailed": "Fehler beim Aktualisieren der Schriftart-Sichtbarkeit" }, "bookDock": { "title": "Book Dock", @@ -1631,7 +2098,7 @@ }, "fileNaming": { "title": "Dateibenennung", - "subtitle": "Steuern Sie, wie Dateien beim Hochladen auf der Festplatte organisiert und beim Herunterladen mithilfe von Platzhalter-Tokens benannt werden.", + "subtitle": "Steuern Sie, wie Dateien beim Hochladen auf dem Datenträger organisiert und beim Herunterladen mithilfe von Platzhalter-Tokens benannt werden.", "copy": "Kopieren", "previewLabel": "Vorschau:", "globalDefaults": "Globale Standardeinstellungen", @@ -1659,6 +2126,7 @@ "modSort": "Format \"Nachname, Vorname\"", "modInitial": "Nur Anfangsbuchstabe", "modFixed2": "Zwei Dezimalstellen", + "modMax3": "Bis zu drei Werte, sonst keine", "folderOnlyPrefix": "Beenden Sie ein Muster mit", "folderOnlySuffix": "um nur einen Ordner anzugeben. Der ursprüngliche Dateiname bleibt darin erhalten.", "conditionalLogic": "Bedingte Logik", @@ -1693,7 +2161,122 @@ "patternCopied": "Muster in die Zwischenablage kopiert", "copyPatternFailed": "Muster konnte nicht kopiert werden", "labelCopied": "{label} in die Zwischenablage kopiert", - "copyLabelFailed": "{label} konnte nicht kopiert werden" + "copyLabelFailed": "{label} konnte nicht kopiert werden", + "patternHelp": "Muster-Hilfe", + "patternHelpDescription": "Token, Modifizierungen und fertige Muster können in jedes Feld kopiert werden.", + "copyPreview": "{label} kopieren", + "copyExample": "Kopiere das {label} Muster", + "invalidCharacters": "Muster enthält ungültige Zeichen", + "fileAsBookSaved": "Datei als Buch-Standard gespeichert", + "folderAsBookSaved": "Ordner als Buch-Standard gespeichert", + "downloadPatternSaved": "Download-Muster gespeichert", + "savePatternFailed": "Muster konnte nicht kopiert werden", + "saveDownloadPatternFailed": "Download-Muster konnte nicht gespeichert werden", + "crossPlatformEnabled": "Plattformübergreifende Pfadbereinigung aktiv", + "crossPlatformDisabled": "Plattformübergreifende Pfadbereinigung deaktiviert", + "crossPlatformSaveFailed": "Fehler beim Speichern der plattformübergreifenden Pfadbereinigung", + "librarySaved": "Muster gespeichert für {name}", + "librarySaveFailed": "Fehler beim Speichern des Bibliotheksmusters", + "saveLibraryPattern": "Muster speichern für {name}", + "resetLibraryPattern": "{name} auf das Standardmuster zurücksetzen", + "tokenTitle": "Buchtitel", + "tokenSubtitle": "Buchuntertitel", + "tokenAuthors": "Autore(n), durch Komma getrennt", + "tokenNarrators": "Erzähler, durch Kommas getrennt", + "tokenYear": "Jahr der Veröffentlichung", + "tokenSeries": "Serienname", + "tokenSeriesIndex": "Serien-Index (Führende Null)", + "tokenPublisher": "Verlag", + "tokenIsbn": "ISBN-13", + "tokenLanguage": "Sprache", + "tokenLibrary": "Bibliotheksname", + "tokenOriginalFilename": "Ursprünglicher Dateiname (ohne Erweiterung)", + "tokenExtension": "Dateiendung (ohne Punkt)", + "patternHelpIntro": "Muster verwenden Token wie {titleToken} und {authorsToken}, plus Modifikatoren und optionale Segmente.", + "browseTokensAndExamples": "Token und Beispiele durchsuchen", + "subtitleShort": "Ordner- und Dateinamen-Muster für gespeicherte Dateien.", + "rule": { + "fileAsBook": "Standard für Datei als Buch", + "folderAsBook": "Standard für Ordner als Buch", + "download": "Dateiname herunterladen" + }, + "howItWorks": { + "title": "Wie ein Pfad gewählt wird.", + "summary": "Eine Bibliothek mit einem eigenen Muster gewinnt. Jede andere Bibliothek folgt dem globalen Standard für ihren Organisationsmodus. Das Ändern eines Musters verschiebt die Bücher nicht bereits auf dem Datenträger; Erst neue Uploads folgen dem neuen Muster." + }, + "filterRules": "Filterregeln", + "librariesGroup": "Bibliotheken", + "customCount": "{custom}/{total} Benutzerdefiniert", + "noRuleMatches": "Keine Regeln entsprechen \"{query}\".", + "unsavedMarker": "Hat ungespeicherte Änderungen", + "backToRules": "Zurück zu Namensregeln", + "appliesToLibraries": "{count, plural, =0 {Keine Bibliotheken verwenden diesen Standard} one {Gilt für # Bibliothek} other {Gilt für # Bibliotheken}}", + "downloadScope": "Downloads und Exportiere ZIPs", + "badgeInherits": "Vererbt Standard", + "badgeUnsaved": "Ungespeichert", + "patternLabel": "Muster", + "readOnlyFromGlobal": "Nur lesen, vom globalen Standard", + "useGlobalDefault": "Verwendet globale Standardwerte", + "resetToShipped": "Auf Standard zurücksetzen", + "addOverride": "Überschreibung hinzufügen", + "inheritsNotice": "Diese Bibliothek folgt dem {base}. Fügen Sie eine Überschreibung hinzu, um ihr ein eigenes Muster zu geben.", + "libraryRuleHint": "Überschreibt den {base} nur für diese Bibliothek.", + "scopeLibrary": "Gilt nur für Uploads in {name}.", + "scopeDownload": "Gilt für jeden Download mit einer einzigen Datei und jede Datei innerhalb einer exportierten ZIP.", + "scopeGlobal": "{count, plural, one {Gilt für # Bibliothek, die kein eigenes Muster hat.} other {Gilt für # Bibliotheken, die keine eigenen Muster haben.}}", + "scopeGlobalNone": "Keine Bibliothek verwendet diese Voreinstellung im Moment, jede Bibliothek in diesem Modus hat ein eigenes Muster.", + "unbalancedOptional": "Einer optionalen Gruppe fehlt die schließende Spitze Klammer", + "unbalancedToken": "Ein Token fehlt die schließende Klammer", + "structure": "Struktur", + "paletteOptional": "optional", + "paletteOptionalHint": "Ummantelt ein Segment, so dass es fallen gelassen wird, wenn ein Token darin leer ist", + "paletteFallback": "Fallback", + "paletteFallbackHint": "In einer optionalen Gruppe wird der Text verwendet, wenn die linke Seite nicht gefüllt werden kann", + "paletteSeparator": "Ordner", + "paletteSeparatorHint": "Startet eine neue Ordnerebene", + "modUpper": "GROSSBUCHSTABEN", + "modLower": "kleinbuchstaben", + "recipesLabel": "Oder beginnen Sie mit einem Rezept", + "recipe": { + "seriesShelf": "Serien-Regal", + "calibre": "Calibre Stil", + "alphabetical": "Alphabetisch", + "flat": "Flach, keine Ordner", + "originalName": "Original-Dateiname", + "authorTitle": "Autor und Titel", + "titleOnly": "Nur Titel", + "seriesOrdered": "Serie sortiert" + }, + "resultPanel": "Aufgelöstes Ergebnis", + "resultFor": "Ergebnis: {rule}", + "copyResult": "Das gefundene Ergebnis kopieren", + "resultCopied": "Gefundenes Ergebnis in Zwischenablage kopiert", + "resultCopyFailed": "Fehler beim Kopieren des gefundenen Ergebnisses", + "sampleBookNote": "Beispielbuch für jede Vorschau verwendet", + "missingMetadata": "Wenn Metadaten fehlen", + "caseNoSeriesLabel": "Ohne Reihe", + "caseNoYearLabel": "Ohne Jahr", + "caseNoAuthorLabel": "Kein Autor", + "previewEmpty": "Dieses Muster konnte nicht aufgelöst werden, daher wird der ursprüngliche Dateiname verwendet.", + "previewEmptyShort": "Kann nicht aufgelöst werden", + "crossPlatformShortHint": "Ersetzt Zeichen, die Windows ablehnt. Vorschau zeigt Ergebnis.", + "rulesSaved": "{count, plural, one {# Namensregel gespeichert} other {# Namensregeln gespeichert}}", + "rulesSaveFailed": "{count, plural, one {Fehler beim Speichern der # Namensregel} other {Fehler beim Speichern # Namensregeln}}", + "rulesPartiallySaved": "{saved} gespeichert, {failed} fehlgeschlagen. Die fehlgeschlagenen Regeln haben noch ungespeicherte Änderungen.", + "save": { + "unsaved": "{count, plural, one {# ungespeicherte Änderung} other {# ungespeicherte Änderungen}}", + "upToDate": "Keine ungespeicherten Änderungen", + "discard": "Verwerfen", + "action": "Änderungen speichern", + "blocked": "Das ungültige Muster vor dem Speichern korrigieren" + }, + "examplesApply": "Anwenden", + "examplesApplyAria": "{label} Muster anwenden", + "example": { + "seriesOrStandalone": "Reihe oder eigenständiger Ordner", + "optionalSubtitle": "Optionaler Untertitel", + "languageFolder": "Sprach-Verzeichnis" + } }, "kobo": { "title": "Kobo-Synchronisierung", @@ -2407,7 +2990,13 @@ "deleting": "Wird gelöscht ...", "errors": { "load": "Laden fehlgeschlagen", - "deleteUser": "Löschen des Benutzers fehlgeschlagen" + "deleteUser": "Löschen des Benutzers fehlgeschlagen", + "unlock": "Fehler beim Entsperren des Kontos" + }, + "selfRegistration": { + "title": "Selbstregistrierung", + "subtitle": "Legen Sie fest, ob Besucher ihre eigenen Konten erstellen dürfen.", + "label": "Selbstregistrierung erlaubt" }, "defaultLibraryAccess": { "title": "Standard-Bibliothekszugriff", @@ -2417,6 +3006,26 @@ "save": "Standardwerte speichern", "saving": "Wird gespeichert...", "saveError": "Speichern des Standard-Bibliothekszugriffs fehlgeschlagen" + }, + "filters": { + "search": "Benutzer durchsuchen", + "searchPlaceholder": "Suche nach Name, Username oder E-Mail", + "sort": "Benutzer sortieren", + "clear": "Zurücksetzen", + "state": "Benutzer filtern", + "allUsers": "Alle Benutzer", + "admins": "Administratoren", + "active": "Aktiv", + "inactive": "Inaktiv" + }, + "empty": { + "title": "Noch keine Benutzer", + "description": "Erstelle den ersten Account, um loszulegen.", + "filtered": "Keine Benutzer stimmen mit der aktuellen Suche und den Filtern überein." + }, + "pagination": { + "label": "Benutzer-Seitennavigation", + "page": "Seite {page} von {totalPages}" } } }, @@ -3260,7 +3869,7 @@ "koboNotSynced": "Nicht synchronisiert", "koboNotSyncedTooltip": "Für die nächste Kobo-Synchronisierung vorgemerkt.", "filesNotFound": "Dateien nicht gefunden", - "filesNotFoundDescription": "Die Datei(en) für dieses Buch können auf der Festplatte nicht mehr gefunden werden. Die Metadaten sind weiterhin verfügbar. Führen Sie einen Bibliotheks-Scan durch, um dies zu bestätigen, oder entfernen Sie den Eintrag." + "filesNotFoundDescription": "Die Datei(en) für dieses Buch können auf dem Datenträger nicht mehr gefunden werden. Die Metadaten sind weiterhin verfügbar. Führen Sie einen Bibliotheks-Scan durch, um dies zu bestätigen, oder entfernen Sie den Eintrag." }, "editMetadata": { "fieldCount": "{count, plural, =0 {keine Felder} one {ein Feld} other {# Felder}}", @@ -3272,8 +3881,8 @@ "fileExceedsSizeLimit": "Diese Datei überschreitet das Größenlimit für das Zurückschreiben", "writing": "Wird geschrieben...", "saveInProgress": "Speichern läuft", - "writeManualLibraryDisabled": "Metadaten in Datei schreiben und auf der Festplatte umbenennen; automatisches Zurückschreiben ist für diese Bibliothek deaktiviert", - "writeManualTooltip": "{fields} in {target} schreiben und auf der Festplatte umbenennen", + "writeManualLibraryDisabled": "Metadaten in Datei schreiben und auf dem Datenträger umbenennen; automatisches Zurückschreiben ist für diese Bibliothek deaktiviert", + "writeManualTooltip": "{fields} in {target} schreiben und auf dem Datenträger umbenennen", "applyResult": "{skipped}, {updated}", "skippedLockedFields": "{count, plural, =0 {Keine gesperrten Felder übersprungen} one {Ein gesperrtes Feld übersprungen} other {# gesperrte Felder übersprungen}}", "updatedFields": "{count, plural, =0 {keine Felder aktualisiert} one {ein Feld aktualisiert} other {# Felder aktualisiert}}", @@ -3453,7 +4062,7 @@ }, "renameModal": { "title": "Datei umbenennen", - "description": "Benennen Sie die physische Datei auf der Festplatte um.", + "description": "Benennen Sie die physische Datei auf dem Datenträger um.", "placeholder": "Neuer Dateiname" }, "saving": "Wird gespeichert ...", @@ -4801,7 +5410,7 @@ }, "write": { "title": "Metadaten in Dateien schreiben", - "hint": "Wenn aktiviert, werden beim Speichern von Metadaten die Änderungen auch in die physische Datei auf der Festplatte zurückgeschrieben." + "hint": "Wenn aktiviert, werden beim Speichern von Metadaten die Änderungen auch in die physische Datei auf dem Datenträger zurückgeschrieben." }, "cover": { "title": "Cover-Bild einschließen", @@ -5062,8 +5671,8 @@ "pathValidation": { "title": "Pfadvalidierung", "mappedSummary": "{mapped} von {total} Quellbüchern haben einen zugeordneten Pfad", - "unmatched": "{count} zugeordnete Pfade wurden nicht auf der Festplatte gefunden", - "allMatched": "Alle {count} zugeordneten Pfade wurden auf der Festplatte gefunden" + "unmatched": "{count} zugeordnete Pfade wurden nicht auf dem Datenträger gefunden", + "allMatched": "Alle {count} zugeordneten Pfade wurden auf dem Datenträger gefunden" } }, "dryRun": { @@ -5852,7 +6461,7 @@ }, "confirmDialog": { "title": "Massenumbenennung bestätigen", - "body": "{count, plural, =0 {Dadurch werden # Bücher auf der Festplatte umbenannt. Dateien mit Konflikten oder Fehlern werden übersprungen. Diese Aktion kann nicht rückgängig gemacht werden.} one {Dadurch wird # Buch auf der Festplatte umbenannt. Dateien mit Konflikten oder Fehlern werden übersprungen. Diese Aktion kann nicht rückgängig gemacht werden.} other {Dadurch werden # Bücher auf der Festplatte umbenannt. Dateien mit Konflikten oder Fehlern werden übersprungen. Diese Aktion kann nicht rückgängig gemacht werden.}}", + "body": "{count, plural, =0 {Dadurch werden # Bücher auf dem Datenträger umbenannt. Dateien mit Konflikten oder Fehlern werden übersprungen. Diese Aktion kann nicht rückgängig gemacht werden.} one {Dadurch wird # Buch auf dem Datenträger umbenannt. Dateien mit Konflikten oder Fehlern werden übersprungen. Diese Aktion kann nicht rückgängig gemacht werden.} other {Dadurch werden # Bücher auf der Festplatte umbenannt. Dateien mit Konflikten oder Fehlern werden übersprungen. Diese Aktion kann nicht rückgängig gemacht werden.}}", "renameButton": "{count, plural, =0 {# Buch umbenennen} one {# Buch umbenennen} other {# Bücher umbenennen}}" } }, diff --git a/client/src/locales/es.json b/client/src/locales/es.json index 1390bd13d..e314e1e44 100644 --- a/client/src/locales/es.json +++ b/client/src/locales/es.json @@ -1272,7 +1272,81 @@ "saveFailed": "No se pudieron guardar los pesos de puntuación", "recalcStarted": "El nuevo cálculo de la puntuación se inició en segundo plano.", "recalcFailed": "El recálculo falló", - "resetToDefaults": "Los pesos se restablecen a los valores predeterminados. Guardar para aplicar." + "resetToDefaults": "Los pesos se restablecen a los valores predeterminados. Guardar para aplicar.", + "howItWorks": { + "title": "Cómo funciona esto.", + "summary": "Cada libro recibe una puntuación sobre 100 según lo completa que esté su información (metadatos). Un peso solo tiene sentido en relación con los demás, por lo que cada campo que aparece a continuación muestra qué proporción de la puntuación final le corresponde. Duplicar todos los pesos no cambia nada." + }, + "readOnly": "Puedes ver cómo se calculan las puntuaciones, pero el cambio de pesos necesita el permiso de configuración de la aplicación.", + "compositionTitle": "De donde proviene una puntuación", + "compositionHint": "Los porcentajes siempre suman 100.", + "searchFields": "Campos de filtro", + "clearSearch": "Limpiar búsqueda", + "noMatches": "Ningún campo coincide con esa búsqueda.", + "totalSummary": "{scoring} de 24 campos de puntuación, {total} puntos en total", + "countGroups": "Cuenta para la puntuación", + "notScored": "Sin puntuación", + "notScoredHeading": "Sin puntuación ({count})", + "notScoredHint": "Un campo con valor cero no afecta al total, por lo que los libros que carecen de él no reciben una penalización.", + "decreaseWeight": "Disminuye el peso de {field}", + "increaseWeight": "Aumenta el peso de {field}", + "revertField": "Revertir {field} al peso guardado.", + "table": { + "field": "Campo", + "weight": "Peso", + "share": "Compartir puntuación", + "versusDefault": "Cambio" + }, + "groups": { + "core": "Núcleo", + "publishing": "Publicación", + "classification": "Clasificación", + "enrichment": "Enriquecimiento", + "providers": "ID de proveedor" + }, + "rules": { + "text": "Cuenta cuando no está vacío", + "positive": "Cuenta cuando está por encima de cero", + "count": "Cuenta cuando al menos uno está establecido", + "cover": "Cuenta cuando se almacena una imagen de portada", + "providerId": "Cuenta cuando el ID se almacena", + "seriesIndex": "Cuenta cuando está por encima de cero, así que el volumen 0 nunca cuenta" + }, + "rail": { + "title": "Donde aterrizan tus libros", + "description": "El color de la insignia que verá el lector en la tarjeta de cada libro que puedas ver hoy.", + "bandsLabel": "Bandas de colores de la insignia", + "bands": { + "poor": "POR DEBAJO DE 50.", + "fair": "50-69", + "good": "70-89", + "great": "90+" + }, + "median": "Mediana", + "belowFifty": "Menos de 50", + "ninetyPlus": "90 y más", + "noBooks": "Todavía no hay libros puntuados. Ejecuta una nueva puntuación cuando termine de importarse tu biblioteca.", + "scopeNote": "En {count, plural, one {# libro} other {# libros}} de las bibliotecas a las que tienes acceso, puntuados con los pesos guardados actualmente." + }, + "progress": { + "running": "Recalculando la puntuación de la biblioteca.", + "failed": "Error al recalcular la puntuación.", + "count": "{processed} libros procesados", + "countOf": "{processed} de {total} libros", + "failedCount": "({count} fallidos)", + "safeToLeave": "Seguro salir de esta página.", + "dismiss": "Descartar" + }, + "save": { + "upToDate": "Todos los cambios guardados.", + "unsaved": "{count, plural, one {# campo cambiado} other {# campos cambiados}}", + "totalShift": "total {from} a {to} puntos", + "rescores": "Guardando las nuevas puntuaciones de {count, plural, one {# libro} other {# libros}} en segundo plano.", + "rescoresUnknown": "Guardando las nuevas puntuaciones de tu biblioteca en segundo plano.", + "action": "Guardar y recodificar", + "discard": "Descartar", + "leaveWarning": "Tienes cambios de peso sin guardar. ¿Dejar la página y perderlos?" + } }, "tabs": { "users": "Usuarios", @@ -1340,20 +1414,39 @@ "genres": "Géneros", "narrators": "Narradores", "duration": "Duración", - "abridged": "Abreviado" + "abridged": "Abreviado", + "tags": "Etiquetas", + "isbn13": "ISBN-13", + "isbn10": "ISBN-10", + "googleBooksId": "ID de Google Books.", + "goodreadsId": "ID de Goodreads", + "amazonId": "ID de Amazon", + "hardcoverId": "ID de Hardcover", + "openLibraryId": "ID de Open Library", + "itunesId": "ID de iTunes", + "koboId": "ID de Kobo", + "aladinId": "ID de Aladin" }, "mergeStrategy": { "fillMissing": { "label": "Falta llenar", - "description": "Escribe solo si el campo está actualmente vacío" + "description": "Escribe solo si el campo está actualmente vacío", + "short": "Rellenar huecos" + }, + "mergeExisting": { + "label": "Combinar con uno existente", + "description": "Mantener los géneros almacenados y añadir nuevos géneros de proveedores", + "short": "Combinar" }, "overwriteIfProvided": { "label": "Sobrescribir si se proporciona", - "description": "Escribir si el proveedor devolvió un valor" + "description": "Escribir si el proveedor devolvió un valor", + "short": "Si es proporcionado" }, "overwrite": { "label": "Sobrescribir siempre", - "description": "Reemplace siempre el valor existente" + "description": "Reemplace siempre el valor existente", + "short": "Siempre" } }, "autoFetch": { @@ -1421,16 +1514,38 @@ "providers": { "availableSources": "Fuentes disponibles", "saveChanges": "Guardar cambios", + "discard": "Descartar", + "configure": "Configurar", "test": "Prueba", "testing": "Probando...", + "testHint": "Comprueba estas credenciales con el servicio en tiempo real. No se guarda nada.", "enabled": "Habilitado", "retryIn": "Reintentar en {duration}", "runTestBeforeEnabling": "Ejecutar prueba antes de habilitar", "hardcoverEnableHint": "Ejecute la prueba con el token actual para desbloquear el interruptor de habilitación.", + "searchPlaceholder": "Filtrar fuentes", + "sourcesEnabled": "{enabled} de {total} fuentes habilitadas.", + "groupEnabled": "{enabled} de {total} activadas.", + "unsavedChanges": "{count, plural, one {# cambio sin guardar} other {# cambios sin guardar}}", + "noMatches": "Ninguna fuente coincide con este filtro.", + "clearFilters": "Limpiar filtros", + "filter": { + "label": "Filtrar fuentes por estado", + "all": "Todos", + "enabled": "Habilitado", + "needsSetup": "Necesita configuración" + }, + "groups": { + "books": "Catálogos generales de libros", + "audiobooks": "Audiolibros", + "comics": "Cómics y novelas gráficas", + "regional": "Catálogos regionales" + }, "badge": { "setupRequired": "Configuración requerida", "throttled": "Restringido", - "ready": "Listo" + "ready": "Listo", + "active": "Activo" }, "fields": { "apiKey": "API Clave", @@ -1454,6 +1569,7 @@ "kobo": "Elimina las páginas del libro público de Kobo. El país y el idioma deben coincidir con las rutas Kobo URL; La protección contra bots puede bloquear solicitudes.", "audible": "Extrae metadatos de audiolibros de Audible. No se requiere configuración adicional.", "audnexus": "Metadatos de audiolibros impulsados por la comunidad. No se requiere configuración.", + "librofm": "Metadatos de catálogos de audiolibros sin DRM. Utiliza un endpoint no documentado de Libro.fm y está deshabilitado de forma predeterminada.", "comicvine": "Metadatos de cómics de ComicVine. Se requiere una clave API gratuita de comicvine.gamespot.com.", "ranobedb": "Metadatos de novelas ligeras japonesas de RanobeDB. No se requiere configuración.", "lubimyczytac": "Catálogo de libros polacos (lubimyczytac.pl). Raspa páginas de libros públicos. No se requiere configuración.", @@ -1486,7 +1602,8 @@ "fillMissingBody": "Escriba solo si el valor actual está vacío.", "overwriteTerm": "Sobrescribir:", "overwriteBody": "Reemplazar cada vez que un proveedor tenga datos." - } + }, + "summary": "Los proveedores se prueban de arriba abajo y gana el primero que devuelve un valor. La estrategia de combinación determina si ese valor puede reemplazar lo que el libro ya tiene; los géneros también pueden añadir valores nuevos y únicos. Establece aquí los valores predeterminados y, después, sobrescribe campos individuales para cada biblioteca." }, "libraryOverrides": { "title": "Anulaciones de biblioteca", @@ -1539,13 +1656,15 @@ }, "groupSummary": { "base": "{fields} campos · {enabled} habilitado", - "withOverrides": "{base} · {overrides} anula" + "withOverrides": "{base} · {overrides} anula", + "enabledOf": "{enabled} de {fields} activado" }, "table": { "field": "Campo", "activeProviders": "Proveedores activos (ordenados por prioridad)", "mergeStrategy": "Estrategia de fusión", - "status": "Estado" + "status": "Estado", + "noMatches": "Ningún campo coincide con estos filtros." }, "field": { "noProviders": "Habilitado pero no tiene proveedores.", @@ -1553,7 +1672,19 @@ "config": "Configuración", "custom": "Personalizado", "default": "Predeterminado", - "resetToDefault": "Restablecer los valores predeterminados" + "resetToDefault": "Restablecer los valores predeterminados", + "toggle": "Obtener {field} al actualizar los metadatos.", + "configure": "Configurar {field}", + "add": "Añadir", + "addHint": "Añadido al final del orden. Arrastra una etiqueta para moverla antes.", + "addProviderTo": "Añadir un proveedor a {field}", + "removeProvider": "Eliminar {provider}", + "noProvidersYet": "Todavía no hay proveedores", + "skippedCount": "{count, plural, one {# omitido} other {# omitidos}}", + "unsaved": "Sin guardar", + "override": "Sobrescribir", + "inherited": "Heredado", + "morePreview": "+{count} más" }, "reservoir": { "disabled": "{provider} - deshabilitado", @@ -1567,6 +1698,69 @@ "statusDisabled": "deshabilitado", "statusNotConfigured": "no configurado", "done": "Hecho" + }, + "scope": { + "label": "Ámbito de la regla", + "global": "Predeterminados globales", + "overrideCount": "{count, plural, one {# campo sobrescrito} other {# campos sobrescritos}}", + "unsavedMarker": "Hay cambios sin guardar" + }, + "toolbar": { + "searchFields": "Campos de búsqueda", + "clearSearch": "Limpiar búsqueda", + "provider": "Proveedor", + "anyProvider": "Cualquiera", + "providerMenuTitle": "Filtrar y editar en bloque por proveedor.", + "usedIn": "{count, plural, =0 {sin usar} one {# campo} other {# campos}}", + "showOnlyThese": "Mostrar sólo los campos que lo utilizan", + "bulkLabel": "Aplicar a todos los campos {count} que lo usen", + "makeFirst": "Hacer primero en todas partes", + "makeLast": "Hacer la última en todas partes", + "removeEverywhere": "Eliminar de todos los campos", + "allFields": "Todos los campos", + "overridesOnly": "Sobrescribir sólo", + "clearFilters": "Limpiar filtros" + }, + "providerState": { + "disabled": "Deshabilitado", + "notConfigured": "No configurado", + "disabledDetail": "{provider} está desactivado, por lo que permanece en el orden, pero se omite.", + "notConfiguredDetail": "{provider} aún no tiene credenciales, por lo que permanece en el orden, pero se omite." + }, + "detail": { + "priority": "Prioridad del proveedor", + "priorityHint": "El primer proveedor que devuelva un valor gana.", + "moveUp": "Mover {provider} antes", + "moveDown": "Mover {provider} después", + "result": "Resultado", + "resultHint": "En la próxima actualización, este campo se resolverá en este orden:", + "noUsableProviders": "No hay ningún proveedor disponible; este campo no se rellenará.", + "skippedSummary": "{count, plural, one {{providers} está en el orden, pero se omitirá.} other {{providers} están en el orden, pero se omitirán.}}", + "appliesTo": "Aplica a {scope}.", + "inheritGlobal": "Heredar regla global", + "inheritingGlobal": "Heredar la regla global.", + "collapse": "Contraer" + }, + "save": { + "upToDate": "Sin cambios guardados.", + "unsaved": "{count, plural, one {# cambio sin guardar} other {# cambios sin guardar}} en {scope}", + "discard": "Descartar", + "action": "Guardar {scope}" + }, + "confirm": { + "clearProviders": { + "title": "¿Eliminar todos los proveedores?", + "description": "Esto vacía la lista de proveedores de los 16 campos de {scope}. No se guarda nada hasta que selecciones Guardar." + }, + "resetScope": { + "title": "Restablecer valores predeterminados?", + "globalDescription": "Esto reemplaza tus reglas globales de campos por las reglas predeterminadas del sistema y se guarda inmediatamente.", + "libraryDescription": "Esto elimina todas las sobrescrituras de {scope}, por lo que vuelve a heredar las reglas globales, y se guarda inmediatamente." + }, + "removeProvider": { + "title": "¿Eliminar {provider} de todos los campos?", + "description": "Esto elimina {provider} del orden de proveedores de todos los campos de {scope}. No se guarda nada hasta que selecciones Guardar." + } } }, "genreBlocklist": { @@ -1661,6 +1855,15 @@ "score": "Asigne pesos a los campos de metadatos para calcular en qué medida confiar en los resultados obtenidos.", "auto-fetch": "Obtenga automáticamente portadas, descripciones y otros detalles cuando se agreguen libros nuevos a su biblioteca.", "authors": "Obtenga automáticamente biografías y fotos de perfil cuando aparezcan nuevos autores en su biblioteca." + }, + "preferences": { + "toast": { + "saved": "Preferencias de metadatos guardadas", + "saveFailed": "No se han podido guardar las preferencias de metadatos. Comprueba tu conexión e inténtalo de nuevo.", + "globalReset": "Las reglas globales de campos se han restablecido a las predeterminadas del sistema.", + "libraryReset": "La biblioteca se restablece a las reglas globales", + "resetFailed": "No se pudo restablecer las preferencias de metadatos. Comprueba tu conexión e inténtalo de nuevo." + } } }, "reader": { @@ -1784,6 +1987,8 @@ "widePageDisable": "Desactivar", "forceTwoPage": "Forzar dos páginas en pantallas pequeñas", "forceTwoPageHint": "Omitir el modo alternativo automático para móviles cuando se selecciona el modo paginado de dos páginas", + "autoAdvance": "Avanzar automáticamente al siguiente libro", + "autoAdvanceHint": "Pasa la última página para abrir el siguiente libro de la serie.", "off": "Desactivado", "on": "Activado", "display": "Visualización", @@ -1921,6 +2126,7 @@ "modSort": "Formato Apellido, Nombre", "modInitial": "Solo la primera letra", "modFixed2": "Dos decimales", + "modMax3": "Hasta tres valores, en caso contrario nada", "folderOnlyPrefix": "Termine un patrón con", "folderOnlySuffix": "para especificar solo una carpeta. El nombre del archivo original se conservará en su interior.", "conditionalLogic": "Lógica condicional", @@ -1976,6 +2182,7 @@ "tokenTitle": "Título del libro", "tokenSubtitle": "Subtítulo del libro", "tokenAuthors": "Autor(es), separados por comas", + "tokenNarrators": "Narrador(es), separados por comas", "tokenYear": "Año de publicación", "tokenSeries": "Nombre de la serie", "tokenSeriesIndex": "Índice de la serie (con ceros a la izquierda)", @@ -1986,7 +2193,104 @@ "tokenOriginalFilename": "Nombre de archivo original (sin extensión)", "tokenExtension": "Extensión de archivo (sin punto)", "patternHelpIntro": "Los patrones usan tokens como {titleToken} y {authorsToken}, además de modificadores y segmentos opcionales.", - "browseTokensAndExamples": "Explorar tokens y ejemplos" + "browseTokensAndExamples": "Explorar tokens y ejemplos", + "subtitleShort": "Patrones de carpetas y nombres de archivo para los archivos almacenados.", + "rule": { + "fileAsBook": "Archivo como libro predeterminado", + "folderAsBook": "Carpeta como libro predeterminado", + "download": "Descargar nombre de archivo" + }, + "howItWorks": { + "title": "Cómo se elige una ruta.", + "summary": "Una biblioteca con un patrón propio tiene prioridad. Todas las demás bibliotecas siguen el valor predeterminado global para su modo de organización. Cambiar un patrón no mueve los libros que ya están en el disco; las nuevas subidas seguirán el nuevo patrón a partir de la siguiente subida." + }, + "filterRules": "Reglas de filtrado", + "librariesGroup": "Bibliotecas", + "customCount": "{custom}/{total} personalizado", + "noRuleMatches": "Ninguna regla coincide con \"{query}\".", + "unsavedMarker": "Hay cambios sin guardar", + "backToRules": "Volver a las reglas de nombres", + "appliesToLibraries": "{count, plural, =0 {Ninguna biblioteca usa este valor predeterminado} one {Se aplica a # biblioteca} other {Se aplica a # bibliotecas}}", + "downloadScope": "Descargas y exportación de ZIPs", + "badgeInherits": "Hereda el valor predeterminado.", + "badgeUnsaved": "Sin guardar", + "patternLabel": "Patrón", + "readOnlyFromGlobal": "Solo lectura, según el valor predeterminado global.", + "useGlobalDefault": "Usando valores predeterminados globales", + "resetToShipped": "Restablecer al valor predeterminado original", + "addOverride": "Añadir una sobrescritura", + "inheritsNotice": "Esta biblioteca sigue {base}. Añade una sobrescritura para asignarle su propio patrón.", + "libraryRuleHint": "Sobrescribe el {base} solo para esta biblioteca.", + "scopeLibrary": "Solo se aplica a las subidas a {name}.", + "scopeDownload": "Se aplica a cada descarga de un solo archivo y a cada archivo dentro de un ZIP de exportación.", + "scopeGlobal": "{count, plural, one {Se aplica a # biblioteca que no tiene su propio patrón.} other {Se aplica a # bibliotecas que no tienen su propio patrón.}}", + "scopeGlobalNone": "Ninguna biblioteca utiliza actualmente este valor predeterminado; todas las bibliotecas de este modo tienen su propio patrón.", + "unbalancedOptional": "A un grupo opcional le falta el corchete angular de cierre", + "unbalancedToken": "A un token le falta la llave de cierre", + "structure": "Estructura", + "paletteOptional": "opcional", + "paletteOptionalHint": "Agrupa un segmento para que se omita cuando un token que contiene está vacío", + "paletteFallback": "alternativa de respaldo", + "paletteFallbackHint": "Dentro de un grupo opcional, el texto que se utiliza cuando no se puede completar el lado izquierdo", + "paletteSeparator": "carpeta", + "paletteSeparatorHint": "Inicia un nuevo nivel de carpeta", + "modUpper": "MAYÚSCULAS", + "modLower": "minúsculas", + "recipesLabel": "O empieza desde una receta", + "recipe": { + "seriesShelf": "Estantería de series", + "calibre": "Estilo Calibre", + "alphabetical": "Alfabético", + "flat": "Plano, sin carpetas", + "originalName": "Nombre de archivo original", + "authorTitle": "Autor y título", + "titleOnly": "Sólo título", + "seriesOrdered": "Series ordenadas" + }, + "resultPanel": "Resultado resuelto", + "resultFor": "Resultado: {rule}", + "copyResult": "Copiar el resultado resuelto", + "resultCopied": "Resultado resuelto copiado al portapapeles.", + "resultCopyFailed": "Error al copiar el resultado resuelto", + "sampleBookNote": "Libro de ejemplo usado para cada vista previa", + "missingMetadata": "Si faltan metadatos", + "caseNoSeriesLabel": "Ninguna serie", + "caseNoYearLabel": "Sin año", + "caseNoAuthorLabel": "Sin autor", + "previewEmpty": "Este patrón no produce ningún resultado, por lo que se utilizará el nombre de archivo original.", + "previewEmptyShort": "No produce ningún resultado", + "crossPlatformShortHint": "Reemplaza los caracteres que Windows no admite. Las vistas previas reflejan esta configuración.", + "rulesSaved": "{count, plural, one {# regla de nomenclatura guardada} other {# reglas de nomenclatura guardadas}}", + "rulesSaveFailed": "{count, plural, one {No se ha podido guardar # regla de nomenclatura} other {No se han podido guardar # reglas de nomenclatura}}", + "rulesPartiallySaved": "Guardadas {saved}; errores {failed}. Las reglas que no se pudieron guardar todavía tienen cambios sin guardar.", + "save": { + "unsaved": "{count, plural, one {# cambio sin guardar} other {# cambios sin guardar}}", + "upToDate": "No hay cambios sin guardar", + "discard": "Descartar", + "action": "Guardar cambios", + "blocked": "Arreglar el patrón no válido antes de guardar" + }, + "examplesDescription": "Giros o convenciones que las recetas no abarcan. Un patrón que termina con una barra diagonal se resuelve como una carpeta y conserva el nombre del archivo cargado dentro de ella.", + "examplesApply": "Aplicar", + "examplesApplyAria": "Aplica el patrón {label}", + "examplesUploadOnly": "Estos son patrones de carga, que se muestran aquí a modo de referencia. Cambie a una regla de tipo Archivo como libro o Carpeta como libro para aplicar uno de ellos.", + "examplesFileModeOnly": "La opción Carpeta como libro requiere su propio segmento de nombre de archivo, por lo que esta modalidad solo se aplica a las bibliotecas de tipo Archivo como libro.", + "example": { + "seriesOrStandalone": "Serie o carpeta independiente", + "optionalSubtitle": "Subtítulo opcional", + "languageFolder": "Carpeta de idioma", + "publisherFolder": "Carpeta del editor", + "stackedOptional": "Carpetas opcionales apiladas", + "folderDrop": "Solo carpeta, mantener el nombre del archivo subido" + }, + "exampleCase": { + "complete": "Completo", + "noSeries": "Ninguna serie", + "noSubtitle": "Sin subtítulos", + "noLanguage": "Sin idioma", + "noPublisher": "Sin editorial" + }, + "unknownModifier": "Modificador desconocido \"{modifier}\". Se ignorará, dejando el valor sin cambios." }, "kobo": { "title": "Kobo Sincronización", @@ -2769,7 +3073,10 @@ "email": "Correo electrónico", "access": "Acceso", "status": "Estado", - "actions": "Acciones" + "actions": "Acciones", + "user": "Usuario", + "libraries": "Bibliotecas", + "lastActive": "Último activo" }, "adminBadge": "Administrador", "permissionCount": "{count, plural, =0 {sin permisos} one {un permiso} other {# permisos} many {# permisos}}", @@ -2832,12 +3139,66 @@ }, "pagination": { "label": "Paginación de usuarios", - "page": "Página {page} de {totalPages}" + "page": "Página {page} de {totalPages}", + "showing": "Mostrando {shown} de {total} cuentas" }, "editUserAria": "Editar {name}", "resetPasswordAria": "Restablecer la contraseña de {name}", "deleteUserAria": "Eliminar {name}", - "moreActionsAria": "Más acciones para {name}" + "moreActionsAria": "Más acciones para {name}", + "headerSummary": "{count, plural, =0 {Sin cuentas} one {# cuenta} other {# cuentas}} · {admins} con acceso de administrador", + "noEmail": "Sin dirección", + "editAccount": "Editar cuenta", + "cardMeta": "{access} · {libraries} · {lastActive}", + "accessTier": { + "superuser": "Superusuario", + "admin": "Administrador", + "standard": "Estándar", + "custom": "Personalizado", + "none": "Sin acceso" + }, + "libraries": { + "all": "Todos {total}", + "some": "{granted} de {total}" + }, + "statusLocked": "Bloqueado", + "status": { + "never": "Nunca", + "neverSignedIn": "Nunca ha iniciado sesión", + "defaultPassword": "Contraseña por defecto", + "contentFiltered": "Contenido filtrado", + "unlocksIn": "Desbloquear {when}" + }, + "attention": { + "title": "Requiere atención", + "count": "{count, plural, one {# cuenta} other {# cuentas}}", + "filter": "{count, plural, one {# necesita atención} other {# necesita atención}}", + "more": "{count} más no se muestran aquí", + "reason": { + "locked": "{name} está bloqueado después de demasiados intentos fallidos de inicio", + "neverSignedIn": "{name} nunca ha iniciado sesión", + "defaultPassword": "{name} sigue utilizando la contraseña con la que fue creada la cuenta" + }, + "detail": { + "unlocksIn": "Desbloquea {when} automáticamente", + "created": "Creado {when}", + "linkExpired": "Creado {when} · el enlace de inicio de sesión ha caducado", + "linkValid": "Creado {when} · enlace de inicio de sesión válido hasta {expiry}" + }, + "action": { + "unlock": "Desbloquear ahora", + "sendResetLink": "Enviar enlace de reinicio", + "sendNewLink": "Enviar un nuevo enlace" + }, + "collapse": "Ocultar", + "expand": "Mostrar" + }, + "defaults": { + "title": "Por defecto para nuevas cuentas", + "appliesTo": "Se aplica al auto-registro y OIDC", + "startingLibraries": "Iniciando bibliotecas", + "startingLibrariesHint": "Acceso al visor concedido automáticamente a cada nueva cuenta." + } } }, "annotations": { @@ -2962,7 +3323,16 @@ "noMatch": "Ningún resaltado coincide con tus filtros.", "resetFilters": "Restablecer filtros", "trashEmpty": "La papelera esta vacia", - "noAnnotations": "Aún no hay anotaciones. Los aspectos destacados que crea en la web o en su lector electrónico aparecen aquí." + "noAnnotations": "Aún no hay anotaciones. Los aspectos destacados que crea en la web o en su lector electrónico aparecen aquí.", + "noMatchHint": "Pruebe una frase más corta, o limpie el color y los filtros de libros.", + "noAnnotationsBody": "Todo lo que marcas, en cualquier libro y en cualquier dispositivo, se recoge aquí.", + "readHere": "Leer aquí", + "readHereBody": "Seleccione el texto en el lector y escoja un color.", + "syncKobo": "Sincronizar con Kobo", + "syncKoboBody": "Las marcas hechas en el dispositivo llegan en la siguiente sincronización.", + "syncKoreader": "Sincronizar KOReader", + "syncKoreaderBody": "El plugin carga anotaciones con sus posiciones.", + "goToLibrary": "Ir a la biblioteca" }, "toast": { "movedToTrash": "Movido a la papelera", @@ -2972,8 +3342,70 @@ "bulkTrashed": "{count, plural, =0 {No se movieron anotaciones a la papelera} one {movido # anotación a la papelera} other {movido # anotaciones a la papelera} many {movido # anotaciones a la papelera}}", "bulkRestored": "{count, plural, =0 {Restaurado sin anotaciones} one {Restaurado # anotación} other {Restaurado # anotaciones} many {Restaurado # anotaciones}}", "bulkRecolored": "{count, plural, =0 {Recoloreado sin anotaciones} one {recoloreado # anotación} other {recoloreado # anotaciones} many {recoloreado # anotaciones}}", - "bulkRestyled": "{count, plural, =0 {Rediseñado sin anotaciones} one {rediseñado # anotación} other {rediseñado # anotaciones} many {rediseñado # anotaciones}}" - } + "bulkRestyled": "{count, plural, =0 {Rediseñado sin anotaciones} one {rediseñado # anotación} other {rediseñado # anotaciones} many {rediseñado # anotaciones}}", + "noteSaved": "Nota guardada" + }, + "railTitle": "{marks} marcas · {books} libros", + "lastTwelveMonths": "Últimos 12 meses", + "colour": "Color", + "whereFrom": "De dónde vienen", + "theShelf": "La estantería", + "devices": "Dispositivos", + "allBooks": "Todos los libros {count}", + "behindCount": "{count, plural, one {# detrás} other {# detrás}}", + "busiestWeek": "Semana más ocupada", + "longestQuiet": "El período más tranquilo", + "mostMarked": "Más marcado", + "weekCount": "{count, plural, one {# semana} other {# semanas}}", + "anchorsUnplaced": "{count, plural, one {# anclaje no se pudo colocar} other {# anclajes no se pudieron colocar}}", + "reviewThem": "Revísalos", + "anchorLost": "Ancla perdida", + "anchorRepaired": "Reparado", + "notes": "Notas", + "review": "Revisión", + "viewLabel": "Agrupar y ordenar", + "views": { + "newest": "El más nuevo primero", + "oldest": "El más antiguo primero", + "book": "Por libro", + "color": "Por color", + "source": "Por fuente" + }, + "matchCount": "{shown} de {total}", + "moreActions": "Más acciones", + "loadMore": "{count, plural, one {Carga 1 más} other {Carga # más}}", + "openBook": "Libro abierto", + "noteLabel": "Nota", + "yourNote": "Tu nota", + "notePlaceholder": "Explica por qué esto era importante.", + "openAtThisPage": "Abrir en esta página", + "positionAndSync": "Posición y sincronización", + "loadFailed": "No se pudo cargar tus resaltados. Inténtalo de nuevo en un momento.", + "chips": { + "dateBetween": "{from} a {to}", + "dateFrom": "Desde {from}", + "dateUntil": "Hasta {to}" + }, + "activitySummary": "{count, plural, one {# resaltado entre {from} y {to}} other {# resaltados entre {from} y {to}}}", + "book": "Libro", + "needsReview": "Necesita revisión" + }, + "sources": { + "web": "Sitio web", + "koreader": "KOReader", + "kobo": "Kobo" + }, + "colors": { + "yellow": "Amarillo", + "green": "Verde", + "blue": "Azul", + "pink": "Rosa", + "orange": "Naranja", + "red": "Rojo", + "olive": "Oliva", + "cyan": "Cian", + "purple": "Púrpura", + "gray": "Gris" } }, "audit": { @@ -3202,7 +3634,10 @@ "EmailRecipientGroupUpdate": "Actualizar grupo de destinatarios", "EmailRecipientGroupDelete": "Eliminar grupo de destinatarios", "EmailRecipientGroupMemberAdd": "Agregar destinatario al grupo", - "EmailRecipientGroupMemberRemove": "Eliminar destinatario del grupo" + "EmailRecipientGroupMemberRemove": "Eliminar destinatario del grupo", + "MaintenanceMissingBooksClean": "Libros faltantes limpiados", + "MaintenanceBrokenCoversClean": "Limpieza de portadas rotas", + "MaintenanceOrphanedCoversClean": "Carpetas de portada huérfanas limpias" } }, "auth": { @@ -3342,7 +3777,15 @@ "deleteAuthor": "Eliminar autor" }, "filters": { - "allLibraries": "Todas las bibliotecas" + "allLibraries": "Todas las bibliotecas", + "chips": { + "groupLabel": "Filtrar autores", + "all": "Todos", + "noPortrait": "Sin retrato", + "multipleBooks": "2+ libros", + "recentlyAdded": "Añadido esta semana", + "noSortName": "Sin nombre de ordenación" + } }, "header": { "never": "nunca", @@ -3489,6 +3932,16 @@ "deleteSuccess": "Autor eliminado; {books} libros afectados", "deleteFailed": "No se pudo eliminar el autor" } + }, + "portrait": { + "fromTheirBook": "Portada de uno de sus libros; no hay ningún retrato disponible" + }, + "index": { + "bookCount": "{count, plural, =0 {ningún libro} one {# libro} other {# libros}}", + "rowLabel": "{name}, {count, plural, =0 {ningún libro} one {# libro} other {# libros}}", + "actionsFor": "Acciones para {name}", + "refreshing": "Refrescando metadatos para {name}", + "deleting": "Eliminando {name}" } }, "book": { @@ -3954,7 +4407,7 @@ "moreCount": "+{count} más", "untitled": "Sin título", "metadataScore": "Puntuación de metadatos", - "primaryFormat": "formato primario", + "primaryFormat": "Formato Principal", "openIn": "Abrir en {provider}", "showLess": "Mostrar menos", "showMore": "Mostrar más", @@ -4001,7 +4454,33 @@ "resetHoldNotice": "{device} todavía tiene la posición antigua ({percent})", "resetHoldRelease": "Usar la posición de este dispositivo", "resetHoldReleasing": "Liberando...", - "resetHoldReleaseFailed": "No se pudo usar esta posición. Inténtelo de nuevo." + "resetHoldReleaseFailed": "No se pudo usar esta posición. Inténtelo de nuevo.", + "editions": "Ediciones", + "editionsSummary": "{count} · {size}", + "moreFormats": "+{count} más", + "filesOnDisk": "Archivos en disco", + "yourReading": "Tu lectura", + "lastRead": "última lectura {when}", + "notStarted": "no comenzado", + "noSessionsYet": "No hay sesiones de lectura todavía. Abrir este libro en el lector registra el tiempo, el ritmo de lectura y el progreso en cada dispositivo.", + "activitySessions": "Sesiones", + "activityTime": "Tiempo", + "activityAverage": "Media", + "activityProgress": "Progreso", + "activityDayTooltip": "{day}: {minutes} min", + "activityReached": "{percent} alcanzado", + "durationS": "{seconds}s", + "durationM": "{minutes}m", + "durationHm": "{hours} h {minutes}m", + "yourReview": "Tu reseña", + "reviewNotWritten": "No escrito aún", + "writeReview": "Escribe", + "collections": "Colecciones", + "noCollections": "Ninguno", + "onDisk": "En disco", + "detailsHeading": "Detalles", + "percentUnderOne": "<1%", + "percentOverNinetyNine": ">99%" }, "editMetadata": { "fieldCount": "{count, plural, =0 {sin campos} one {un campo} other {# campos} many {# campos}}", @@ -4119,6 +4598,11 @@ "pickCoverSource": "Elija la fuente de la portada", "pickFromProvider": "Elija de otro proveedor", "pickSource": "Elegir fuente", + "genreWriteMode": { + "label": "Cómo aplicar géneros", + "merge": "Fusionar", + "replace": "Reemplazar" + }, "empty": "vacío", "showLess": "Mostrar menos", "showMore": "Mostrar más", @@ -4156,7 +4640,22 @@ "searchPrompt": "Busque arriba y luego haga clic en un resultado para comenzar a comparar metadatos." }, "writeAndRename": "Escribir en archivo y cambiar nombre", - "writeAndRenameShort": "Escribir y cambiar nombre" + "writeAndRenameShort": "Escribir y cambiar nombre", + "identityCard": "Identidad", + "catalogCard": "Catálogo", + "sourceCard": "Fuente", + "score": "Puntuación", + "scoreTooltip": "Puntuación de metadatos {score} de 100", + "emptyFields": "{count, plural, one {campo vacío} other {campos vacíos}}", + "emptyFieldsTooltip": "Aún no se han rellenado: {fields}. Búscalos en Internet para consultarlos.", + "libraryRow": "Biblioteca", + "primaryRow": "Principal", + "writeBackRow": "Escritura de vuelta", + "writeBackOff": "Apagado", + "lastWrittenRow": "Última escritura", + "neverWritten": "Nunca", + "fileCount": "{count, plural, =0 {ningún archivo} one {un archivo} other {# archivos}}", + "unknownFormat": "Desconocido" }, "files": { "title": "Archivos de libros", @@ -4210,7 +4709,93 @@ "title": "¿Eliminar archivo?", "description": "¿Está seguro de que desea eliminar \"{filename}\"? Esta acción no se puede deshacer." }, - "deleting": "Eliminando..." + "deleting": "Eliminando...", + "folderAria": "Ubicación de carpeta", + "folderContents": "Contenido de la carpeta", + "inspectorAria": "Archivo seleccionado", + "libraryRoot": "raíz de la biblioteca", + "onDisk": "En disco", + "missing": "Faltante", + "backToFolder": "Volver a la carpeta", + "copyPath": "Copiar ruta completa", + "pathCopied": "Ruta copiada al portapapeles", + "resume": "Continuar", + "audiobook": "Audiolibro", + "writeTarget": "Objetivo de escritura", + "enabled": "Activado", + "disabled": "Apagado", + "notSet": "no establecido", + "sortAdded": "Añadido", + "formatCount": "{count, plural, one {# formato} other {# formatos}}", + "trackCount": "{count, plural, one {# pista} other {# pistas}}", + "formatsInFolder": "{count, plural, one {# formato aquí} other {# formatos aquí}}", + "compositionAria": "Compartir tamaño de carpeta por formato", + "percentRead": "{percent} leídos", + "trackOf": "Rastrear {track} de {total}", + "groups": { + "ebook": "E-book", + "document": "Documento", + "comic": "Cómic", + "audio": "Audio", + "extras": "Extras" + }, + "roles": { + "primary": "Principal", + "content": "Alternativo", + "supplement": "Suplemento", + "cover": "Portada" + }, + "reader": { + "none": "Sin lector", + "ebook": "Lector de Ebook", + "document": "Lector de PDF", + "comic": "Lector de cómics", + "audio": "Reproductor de audio" + }, + "spec": { + "format": "Formato", + "role": "Rol", + "size": "Tamaño", + "length": "Duración", + "added": "Añadido", + "indexed": "Indexado", + "opensIn": "Abierto en", + "writeBack": "Escritura de vuelta", + "track": "Pista", + "targetFile": "Archivo de destino", + "notWritten": "No escrito" + }, + "duration": { + "hoursMinutes": "{hours} h {minutes}m", + "minutes": "{minutes}m", + "minutesSeconds": "{minutes}m {seconds}s", + "seconds": "{seconds}s" + }, + "positionHeading": "Tu posición en esta copia", + "copiesStarted": "{started} de copias {total} iniciadas", + "nothingStarted": "Nada iniciado todavía", + "throughFile": "{percent} a través de este archivo", + "notOpened": "Aún no se ha abierto", + "lastRead": "Última lectura {time}", + "noPosition": "No hay posición de lectura almacenada", + "trackPositionHeading": "Dónde se encuentra esta pista", + "totalRuntime": "{duration} total", + "startsAt": "Comienza en {time}", + "trackLength": "{duration} de duración", + "switchFileHeading": "Cambiar archivo", + "writeBackHeading": "Escribir en este archivo", + "fieldsWithValue": "{filled} de {total} campos tienen un valor", + "lastRun": "Última ejecución {time}", + "neverRun": "Nunca ejecutarse", + "historyHeading": "Historial", + "timeline": { + "written": "Metadatos escritos en {format}", + "writtenMany": "Metadatos escritos en {format} ×{count}", + "writeDetail": "{count, plural, one {# campo} other {# campos}} · {ms}ms · {trigger}", + "failed": "Error de escritura", + "indexed": "{name} indexado", + "indexedMany": "{count} {format} archivos indexados" + } }, "highlights": { "note": { @@ -4244,9 +4829,247 @@ "hint": "Seleccione texto mientras lee para crear momentos destacados" }, "uncategorized": "Sin categoría", - "paginationUnit": "aspectos más destacados" + "paginationUnit": "aspectos más destacados", + "rail": { + "title": "Marcas", + "unit": "{count, plural, one {resaltado} other {resaltados}}", + "withNotes": "llevar una nota", + "chaptersMarked": "capítulos marcados", + "ofChaptersMarked": "de {total} capítulos marcados", + "colour": "Color", + "showOnly": "Mostrar solo {colour}", + "source": "De dónde vienen", + "health": "Estado de la posición", + "needsAttention": "{count, plural, one {# necesita atención} other {# necesita atención}}", + "anchorLost": "{count, plural, one {uno perdió su anclaje cuando cambió el archivo} other {# perdieron su anclaje cuando cambió el archivo}}", + "reAnchored": "{count, plural, one {uno se volvió a anclar automáticamente} other {# se volvieron a anclar automáticamente}}", + "reviewPositions": "Revisar posiciones", + "span": "Ampliar", + "firstMark": "Primera marca", + "lastMark": "Última marca", + "markingDays": "Marcando días", + "exportCount": "Exportar {count}" + }, + "row": { + "select": "Seleccionar este resaltado", + "showMore": "Mostrar más", + "showLess": "Mostrar menos", + "note": "Nota", + "addNote": "Añade una nota", + "page": "pág. {page}", + "anchorLost": "Ancla perdida", + "reAnchored": "Re-anclado" + }, + "stream": { + "title": "La transmisión", + "searchPlaceholder": "Buscar {count} resaltados y notas", + "all": "Todos", + "notes": "Notas", + "review": "Revisión", + "density": "Cambiar entre filas cómodas y compactas", + "matchCount": "{shown} de {total} mostrados", + "textChip": "texto “{query}”", + "marks": "{count, plural, one {# pista} other {# pistas}}", + "loadingMore": "Cargando más" + }, + "bulk": { + "selected": "{count} seleccionados", + "selectAll": "Seleccionar todo ({count})", + "recolour": "Cambiar el color de la selección", + "recolourTo": "Cambiar el color a {colour}", + "clear": "Borrar la selección" + }, + "index": { + "title": "Índice", + "groupBy": "Agrupar la transmisión por", + "byChapter": "Capítulos", + "byColour": "Colores", + "byDay": "Días" + }, + "activity": { + "title": "Marcando actividad", + "days": "{count, plural, one {# día} other {# días}}", + "showAll": "Mostrar todos los {count} días", + "showFewer": "Mostrar menos" + }, + "inspector": { + "title": "Resaltar detalle", + "back": "Volver al índice", + "counter": "Marcar {position} de {total}", + "previous": "Marca anterior", + "next": "Siguiente marca", + "notePrompt": "¿Por qué era importante esto? Las notas se pueden buscar y se incluyen en la exportación.", + "style": "Estilo", + "position": "Posición y sincronización", + "openHere": "Abrir aquí" + }, + "band": { + "title": "Dónde están las marcas", + "subtitle": "cada capítulo marcado en orden de lectura, coloreado como lo marcaste", + "barTitle": "{chapter}, {count} marcas", + "start": "Empezar", + "densest": "Más denso", + "marks": "{count, plural, one {# pista} other {# pistas}}", + "longestGap": "Racha más larga sin una marca”", + "chapters": "{count, plural, one {# capítulo} other {# capítulos}}", + "end": "Fin" + }, + "emptyStage": { + "title": "No hay resaltados en {title} aún", + "body": "Los resaltados llegan de tres lugares y esta página los reúne todos en un solo eje.", + "openReader": "Abrir el lector", + "web": { + "title": "Léelo aquí", + "body": "Seleccione el texto en el lector y escoja un color." + }, + "kobo": { + "title": "Sincronizar con Kobo", + "body": "Los resaltados realizados en el dispositivo se transfieren en la próxima sincronización." + }, + "koreader": { + "title": "Sincronizar KOReader", + "body": "El plugin carga anotaciones con sus posiciones exactas." + } + }, + "shortcuts": { + "title": "Teclado", + "description": "Atajos de teclado para la lista de resaltados.", + "move": "Siguiente / marca previa", + "open": "Abrir el inspector", + "back": "Volver al índice", + "search": "Buscar", + "note": "Escribe una nota", + "recolour": "Cambiar el color", + "select": "Seleccionar esta marca", + "regroup": "Reagrupar la transmisión", + "copy": "Copiar la cita", + "reader": "Abrir en el lector" + }, + "railTitle": "{marks} marcas · {chapters} capítulos", + "whenMarked": "Cuando fueron marcados", + "chapters": "Capítulos", + "noChapter": "Sin capítulos", + "views": { + "position": "En orden de lectura", + "newest": "El más nuevo primero", + "oldest": "El más antiguo primero", + "colour": "Por color", + "source": "Por fuente" + } }, "readingLog": { + "resetReadingState": "Restablecer el estado de lectura", + "vitals": { + "aria": "Resumen de lectura", + "notSet": "No establecido", + "started": "Comenzado", + "finished": "Terminado", + "editStarted": "Edita la fecha en la que comenzaste este libro", + "editFinished": "Edita la fecha en la que terminaste este libro", + "totalTime": "Tiempo total", + "sessions": "Sesiones", + "avgSession": "Sesión media", + "activeDays": "Días activos", + "activeDaysOf": "{active} de {total}", + "pace": "Ritmo", + "pacePerHour": "{percent}%/h", + "lastRead": "Última lectura", + "whereYouRead": "Donde lo has leído", + "addSession": "Agregar sesión", + "durationHm": "{hours} h {minutes}m", + "durationM": "{minutes}m", + "durationS": "{seconds}s" + }, + "ledger": { + "title": "Sesiones", + "none": "ninguno", + "colDay": "Día", + "colTime": "Tiempo", + "colLength": "Duración", + "colChange": "Cambiar", + "colPosition": "Posición en el libro", + "colReached": "Alcanzado", + "colSource": "Fuente", + "colFormat": "Formato", + "gapDays": "{count, plural, one {# día sin leer} other {# días sin leer}}", + "attemptBegan": "Intento {index} iniciado", + "attemptOutsideAny": "Fuera de todo intento", + "empty": "Aún no hay sesiones grabadas", + "emptyHint": "Abra el libro en el lector, sincronice un dispositivo o añada una sesión a mano." + }, + "attempts": { + "title": "Intentos", + "none": "ninguno", + "ordinal": "Intento {index}", + "addPast": "Añadir un intento pasado", + "reread": "Releídos", + "rereadPrompt": "¿Iniciar un nuevo intento de lectura?", + "rereadResetProgress": "Restablece la posición de lectura al principio. Los dispositivos sincronizados pueden recibir este reinicio.", + "rereadConfirm": "Iniciar una nueva lectura", + "fieldStarted": "Comenzado", + "fieldEnded": "Finalizado", + "fieldOutcome": "Resultado", + "outcome": { + "completed": "Completado", + "skimmed": "Leído por encima", + "abandoned": "Abandonado", + "inProgress": "En progreso" + }, + "spanRange": "{from} a {to}", + "spanSince": "desde {from}", + "spanEnded": "finalizado {to}", + "spanUnknown": "No hay fechas grabadas", + "sessionCount": "{count, plural, one {# sesión} other {# sesiones}}", + "endBeforeStart": "La fecha de finalización debe ser igual o posterior a la fecha de inicio.", + "editAria": "Editar este intento", + "deleteAria": "Eliminar este intento", + "cancelDeleteAria": "Cancelar la eliminación de este intento", + "confirmDeleteAria": "Confirmar la eliminación de este intento", + "empty": "No hay intentos grabados", + "emptyHint": "Inicia una nueva lectura o añade un intento que terminaste antes de que existiera esta biblioteca." + }, + "records": { + "title": "Grabaciones", + "longestSession": "Sesión más larga", + "bestDay": "Mejor día", + "longestStreak": "Racha más larga", + "streakDays": "{count, plural, one {# día} other {# días}}", + "pace": "Ritmo de lectura", + "jumpedBack": "Salto atrás", + "jumpedBackTimes": "{count, plural, one {# vez} other {# veces}}", + "firstOpened": "Primero Abierto", + "empty": "Los registros aparecen una vez que este libro tenga sesiones." + }, + "band": { + "curve": "Curva", + "trace": "Traza", + "switchAria": "Vista de gráfico", + "curveTitle": "Progreso en el tiempo", + "traceTitle": "Donde estabas en el libro", + "curveSubDays": "{active} días activos en {total}", + "curveSubSitting": "una sentada, sesión por sesión", + "traceSub": "cada barra representa el tramo que cubrió una sesión.", + "traceSubWithBacktracks": "{count, plural, one {cada barra representa una sesión, # retrocedió} other {cada barra representa una sesión, # retrocedieron}}", + "legendPosition": "Posición alcanzada", + "legendMinutes": "Lectura de minutos", + "legendBacktrack": "Salto atrás", + "traceEmpty": "Aún no hay rastro", + "traceEmptyHint": "Cuando haya sesiones, esto mostrará el tramo del libro que cubrió cada una y dónde volviste atrás.", + "tooltipCovered": "Cubrió del {from}% al {to}%", + "tooltipMinutes": "{minutes} min" + }, + "emptyStage": { + "title": "Aún no hay nada registrado para este libro", + "description": "El registro de lectura se crea a partir de sesiones. BookOrbit registra una cada vez que lees en el lector web y obtiene las demás de los dispositivos que sincronizas.", + "readerTitle": "Léelo aquí", + "readerBody": "Cada minuto que pasas en el lector de BookOrbit se registra automáticamente.", + "koreaderTitle": "Sincronizar KOReader", + "koreaderBody": "El plugin empuja cada sesión hacia atrás, con la página a la que llegó.", + "koboTitle": "Sincronizar con Kobo", + "koboBody": "Conecta el dispositivo y BookOrbit lee su propio contador de lecturas.", + "addSession": "Añadir una sesión a mano", + "recordPast": "Grabar una lectura anterior" + }, "moreActionsAria": "Más acciones de registro de lectura", "export": { "button": "Exportar" @@ -4359,6 +5182,7 @@ "colProgressChangeMobile": "Delta", "colEndProgress": "Finalizar progreso", "colEndProgressMobile": "Fin", + "jumpToProgress": "Saltar a {progress}%", "empty": "Aún no se han registrado sesiones de lectura.", "emptyHint": "Agregue una sesión para comenzar a construir el historial de lectura de este libro.", "colPace": "Ritmo", @@ -4408,6 +5232,7 @@ "moveDown": "Bajar", "removeSeries": "Quitar serie", "seriesIndexLabel": "Posición en serie", + "invalidSeriesIndex": "Introduzca dígitos con un máximo de un punto decimal, como 5.10.", "totalLabel": "Libros en serie", "totalPlaceholder": "de", "totalHint": "Total de libros en esta serie. Compartido con todos los que tienen esta serie." @@ -4626,6 +5451,7 @@ "apply": "Aplicar", "done": "Hecho", "discard": "Descartar", + "deselect": "Desmarcar", "finalize": "Finalizar", "rescan": "Volver a escanear", "uploadAction": "Subir", @@ -4635,12 +5461,19 @@ "bulkEditAction": "Edición masiva", "applyFetched": "Aplicar recuperado", "retryErrors": "Errores de reintento", + "discardDialog": { + "title": "{count, plural, =0 {¿No descartar ningún archivo?} one {¿Descartar el archivo seleccionado?} other {¿Descartar los # archivos seleccionados?}}", + "description": "{count, plural, =0 {No se ha seleccionado ningún archivo.} one {Esto elimina permanentemente el archivo seleccionado del disco. Esta acción no se puede deshacer.} other {Esto elimina permanentemente los # archivos seleccionados del disco. Esta acción no se puede deshacer.}}", + "confirm": "{count, plural, one {Eliminar archivo} other {Eliminar # archivos}}", + "failed": "No se pudieron eliminar los archivos seleccionados. Inténtelo de nuevo." + }, "commaSeparated": "separados por comas", "destinationLibrary": "Biblioteca de destino", "destinationFolder": "Carpeta de destino", "nFailed": "{count} falló", "updatedOfFiles": "Actualizado {updated} de {total} archivos", "errorStatus": "Error {status}", + "invalidSeriesIndex": "Introduzca dígitos con un máximo de un punto decimal, como 5.10.", "tab": { "all": "Todos", "pending": "Pendiente", @@ -5018,7 +5851,17 @@ "columnsHint": "Utilice el panel de visibilidad de columnas en el encabezado de la tabla para mostrar u ocultar columnas.", "coverShape": "Forma de la cubierta", "circle": "Círculo", - "square": "cuadrado" + "square": "cuadrado", + "rowDensity": "Altura de las filas", + "densityCompact": "Compacto", + "densityComfortable": "Acogedor", + "densityRoomy": "Espacioso", + "coverFallback": "Usar portadas de libros para los retratos que faltan" + }, + "viewModes": { + "grid": "Vista de cuadrícula", + "list": "Vista de lista", + "table": "Vista de tabla" } }, "iconPicker": { @@ -5180,6 +6023,14 @@ "twoColumns": "Dos columnas", "twoColumnsDescription": "Mostrar dos estantes por fila." }, + "libraryScope": { + "title": "Bibliotecas de paneles", + "description": "Selecciona qué bibliotecas aportan libros y datos de lectura a este panel.", + "allLibraries": "Todas las bibliotecas accesibles", + "summaryNone": "Ninguna biblioteca seleccionada", + "summaryCount": "{count, plural, one {# librería} other {# librerías}}", + "required": "Seleccione al menos una biblioteca." + }, "shelfRows": { "label": "Filas de libros", "option": "{count, plural, one {Una fila de libros} many {# de filas de libros} other {# filas de libros}}", @@ -5256,7 +6107,7 @@ "notEnoughData": "Lee al menos 5 libros para desbloquear tu ADN de lectura", "basedOn": "{count, plural, =0 {Basado en ningún libro} one {Basado en # libro} other {Basado en # libros} many {Basado en # libros}}", "traits": { - "length": "Longitud", + "length": "Duración", "variety": "Variedad", "rhythm": "Ritmo", "time": "Tiempo", @@ -6337,6 +7188,9 @@ "clear": "Borrar", "empty": "Aún no hay notificaciones", "loadMore": "Cargar más notificaciones", + "dismiss": "Descartar notificación", + "occurrences": "Se ha aplicado {count} veces", + "occurrencesShort": "x{count}", "preferences": { "title": "Notificaciones", "subtitle": "Elija qué categorías de notificaciones desea recibir.", @@ -6355,6 +7209,20 @@ "app": "Actualizaciones de la aplicación" }, "enabledCount": "{enabled} de {total} habilitados", + "levels": { + "off": { + "short": "Apagado", + "description": "Nunca me notifiques sobre esto." + }, + "problems": { + "short": "Problemas", + "description": "Notificarme solamente cuando algo falla o necesita atención." + }, + "all": { + "short": "Todos", + "description": "Notificarme cada vez, incluyendo los éxitos." + } + }, "categories": { "scanning": { "label": "Escaneo de la biblioteca", @@ -6603,6 +7471,9 @@ "scrollMode": "Modo de desplazamiento", "scrollModeHint": "Utilice \"Sin espacios\" para webtoons y tiras verticales.", "readingDirection": "dirección de lectura", + "autoAdvance": "Avance automático", + "autoAdvanceHint": "Al pasar la última página, se abre el siguiente libro de la serie.", + "autoAdvancePagedOnly": "El avance automático solo se aplica en el modo paginado.", "pageView": "Vista de página", "twoPagePagedOnly": "Dos páginas se muestran solo en modo paginado.", "spreadSection": "Distribución de dos páginas", @@ -6648,6 +7519,14 @@ "black": "Negro", "gray": "Gris", "white": "Blanco" + }, + "nextIssue": { + "eyebrow": "Siguiente en la serie", + "action": "Leer siguiente", + "open": "Leer a continuación: {title}", + "numbered": "#{index}: {title}", + "untitled": "Sin título", + "autoAdvanceHint": "Volver a la página para continuar" } }, "audiobook": { @@ -6690,7 +7569,10 @@ "ownedOfExpected": "{owned} de {expected} en la biblioteca" }, "gaps": { - "label": "Posibles lagunas:" + "label": "Posibles lagunas:", + "missingCount": "{count, plural, one {# falta} other {# falta}}", + "missingList": "Faltan {list}", + "previewMore": "{shown} +{count}" }, "filters": { "title": "Filtros de serie", @@ -6720,7 +7602,10 @@ "bookCount": "Conteo de libros", "recentAdditions": "Adiciones recientes", "readingProgress": "Progreso de lectura" - } + }, + "clearSearch": "Limpiar búsqueda", + "noMatchHint": "Prueba otra biblioteca, o limpia lo que está establecido.", + "emptyHint": "La serie aparece una vez que sus libros llevan metadatos de serie." }, "detail": { "pageTitle": "Serie", @@ -6761,6 +7646,66 @@ "ascending": "Ascendente", "descending": "Descendente" } + }, + "authorsPlus": "{authors} +{count}", + "track": { + "readCount": "{count, plural, one {# leído} other {# leído}}", + "readingCount": "{count, plural, one {# en progreso} other {# en progreso}}", + "unreadCount": "{count, plural, one {# sin leer} other {# sin leer}}", + "missingCount": "{count, plural, one {# faltante} other {# faltante}}", + "slotMissing": "{number} no esta en la biblioteca", + "untitled": "Sin título" + }, + "legend": { + "read": "Leer", + "reading": "Leyendo", + "unread": "En la biblioteca", + "missing": "Faltante" + }, + "status": { + "label": "Filtrar series por estado de lectura", + "all": "Todos", + "reading": "Leyendo", + "unread": "Sin leer", + "complete": "Completado", + "gaps": "Saltos", + "read": "Leído", + "inProgress": "En progreso", + "hasGaps": "Tiene saltos", + "notStarted": "No comenzado" + }, + "index": { + "columnSeries": "Serie", + "columnVolumes": "Volumen", + "columnRead": "Leer", + "columnNext": "Siguiente", + "columnAdded": "Añadido", + "percent": "{value}%", + "captionReading": "{base} · {count, plural, one {# en progreso} other {# en progreso}}", + "finished": "Leído de principio a fin”", + "reading": "Leyendo", + "next": "Siguiente", + "start": "Empezar" + }, + "grouping": { + "label": "Agrupar por", + "none": "Sin agrupar", + "letter": "Por letra", + "library": "Por biblioteca", + "status": "Por estado" + }, + "libraries": { + "more": "+{count}" + }, + "card": { + "oneVolume": "Un volumen", + "oneVolumeShort": "1 vol", + "volumeCount": "{count, plural, one {# volumen} other {# volúmenes}}", + "readSummary": "{base} · {read} leído", + "publishedOf": "{owned} de {total} publicado", + "complete": "Completado", + "moreVolumes": "{count, plural, one {# volumen más} other {# volúmenes más}}", + "label": "{name}, {read} de {total} volúmenes leídos" } }, "smartScope": { @@ -6994,7 +7939,8 @@ "header": { "entityManager": "Gerente de entidad", "bulkRename": "Cambio de nombre masivo", - "duplicateBooks": "Libros duplicados" + "duplicateBooks": "Libros duplicados", + "missingResources": "Faltan recursos" }, "entityTypes": { "authors": "Autores", @@ -7236,6 +8182,77 @@ "title": "Fusionar entidades", "description": "Seleccione qué entidad conservar. Los demás se fusionarán con él y se eliminarán." } + }, + "missingResources": { + "title": "Faltan recursos", + "accessDenied": "No tienes permiso para limpiar los recursos que faltan.", + "categoriesLabel": "Limpiar categoría", + "untitled": "Sin título", + "clearSelection": "Borrar selección", + "cleanSelected": "Eliminar {count} seleccionado", + "selectAllMatching": "Seleccionar todas las {count} entradas coincidentes", + "allSelected": "Se han seleccionado todas las {count} entradas coincidentes.", + "sweep": { + "title": "Comprobación de portada", + "description": "Verifica cada libro que declara tener una portada comparándolo con los archivos del disco y busca carpetas de portadas que hayan quedado tras la eliminación de libros. No se elimina nada durante la comprobación.", + "run": "Ejecutar comprobación", + "running": "Comprobando", + "progress": "Revisados ​​{processed} de {total} libros", + "lastRun": "Última comprobación {at}", + "truncated": "Solo se muestran los primeros resultados. Límpielos y vuelva a ejecutar la comprobación para ver el resto." + }, + "categories": { + "missing_books": "Libros perdidos", + "broken_covers": "Portadas rotas", + "orphaned_cover_dirs": "Carpetas de portada huérfanas" + }, + "found": { + "missing_books": "{count, plural, =0 {Ningún libro con archivos faltantes} one {Un libro con archivos faltantes} other {# libros con archivos faltantes}}", + "broken_covers": "{count, plural, =0 {Sin referencias de portada rotas} one {Una referencia de portada rota} other {# referencias de portada rotas}}", + "orphaned_cover_dirs": "{count, plural, =0 {Sin carpetas de portada huérfanas} one {Una carpeta de portada huérfana} other {# carpetas de portada huérfanas}}" + }, + "empty": { + "missing_books": "No hay libros perdidos", + "broken_covers": "No hay referencias de portada rotas", + "orphaned_cover_dirs": "No hay carpetas de portada huérfanas", + "description": "Todo en esta categoría está contabilizado." + }, + "needsSweep": { + "title": "Ejecutar primero la comprobación de portada", + "description": "Los resultados de las portadas provienen de una comprobación de disco. Ejecútalo para ver referencias rotas y carpetas huérfanas." + }, + "coverSource": { + "extracted": "Extraído", + "custom": "Personalizado" + }, + "table": { + "selectPage": "Selecciona todo en esta página", + "coverFolder": "Carpeta de portada del libro #{bookId}", + "fileCount": "{count, plural, one {# archivo} other {# archivos}}" + }, + "confirm": { + "title": "¿Limpiar los recursos que faltan?", + "action": "Limpiar", + "missing_books": "{count, plural, one {Elimina el registro de la base de datos de un libro cuyos archivos se han perdido. Se eliminan el libro, sus metadatos, el progreso de lectura y la portada. Esta acción no se puede deshacer.} other {Elimina los registros de la base de datos de # libros cuyos archivos se han perdido. Se eliminan los libros, sus metadatos, el progreso de lectura y las portadas. Esta acción no se puede deshacer.}}", + "broken_covers": "{count, plural, one {Elimina la referencia de portada de un libro para que aparezca sin portada. Los metadatos no se modifican de ninguna otra manera.} other {Elimina las referencias de portada de # libros para que aparezcan sin portada. Los metadatos no se modifican de ninguna otra manera.}}", + "orphaned_cover_dirs": "{count, plural, one {Elimina una carpeta de portada del disco. Su libro ya no está en la base de datos. Esta acción no se puede deshacer.} other {Elimina # carpetas de portada del disco. Sus libros ya no están en la base de datos. Esta acción no se puede deshacer.}}" + }, + "cleaned": { + "missing_books": "{count, plural, =0 {Nada que limpiar} one {Se eliminó un libro faltante} other {Se eliminaron # libros faltantes}}", + "broken_covers": "{count, plural, =0 {Nada que limpiar} one {Se eliminó una referencia de portada rota} other {Se eliminaron # referencias de portada rotas}}", + "orphaned_cover_dirs": "{count, plural, =0 {Nada que limpiar} one {Se eliminó una carpeta de portada huérfana} other {Se eliminaron # carpetas de portada huérfanas}}" + }, + "pagination": { + "label": "Falta páginas de recursos", + "page": "Página {page} de {total}" + }, + "errors": { + "summary": "No se pudo cargar el resumen de recursos faltante.", + "sweepStart": "No se pudo iniciar la comprobación de portada.", + "sweep": "La comprobación de portada ha fallado.", + "list": "No se han podido cargar estas entradas.", + "clean": "Error de limpieza." + } } }, "views": { @@ -7252,6 +8269,9 @@ "sort": "Ordenar", "sortOn": "Encendido", "resetSort": "Restablecer la clasificación a la predeterminada", + "shuffle": "Aleatorio", + "shuffleAria": "Mezclar el orden del libro", + "shuffleHint": "Dibujar un nuevo orden aleatorio", "filters": "Filtros", "clear": "Borrar", "clearAllFilters": "Limpiar todos los filtros", @@ -7512,6 +8532,7 @@ "restrictions": "Restricciones de contenido" }, "smartScopes": "Alcances Inteligentes", - "collections": "Colecciones" + "collections": "Colecciones", + "missingResources": "Faltan recursos" } } diff --git a/client/src/locales/fr.json b/client/src/locales/fr.json index c0aedcafa..0fcc607b5 100644 --- a/client/src/locales/fr.json +++ b/client/src/locales/fr.json @@ -131,7 +131,7 @@ "indigo": "Indigo", "violet": "Violette", "amethyst": "Améthyste", - "fuchsia": "Fushia", + "fuchsia": "Fuchsia", "raspberry": "Framboise", "pink": "Rose", "white": "Blanc", @@ -164,7 +164,7 @@ "lavender": "Lavande", "mauve": "Mauve", "orchid": "Orchidée", - "rose-quartz": "Quartz Rose", + "rose-quartz": "Quartz rose", "blush": "Fard à joues" }, "accentColor": { @@ -304,12 +304,12 @@ "hint": "Indicateur de nombre d'étoiles en bas à gauche" }, "readStatus": { - "label": "Lire l'état", + "label": "Statut de lecture", "hint": "Icône de couleur affichant l'état de lecture actuel en haut à gauche" }, "seriesPosition": { "label": "Numéro de série", - "hint": "Badge indiquant la position du livre dans sa série en haut à droite (e.g. #3, #1.5)" + "hint": "Badge indiquant la position du livre dans sa série en haut à droite (p. ex. #3, #1,5)" }, "lockStatus": { "label": "Statut de verrouillage", @@ -354,7 +354,7 @@ "off": "Désactivé" }, "primaryCardLabel": { - "label": "Etiquette de la carte principale", + "label": "Étiquette de la carte principale", "hint": "Texte affiché sous chaque couverture de livre (première ligne)" }, "secondaryCardLabel": { @@ -422,8 +422,8 @@ }, "icons": { "title": "Icônes personnalisées", - "uploadIcons": "Télécharger des icônes", - "uploadedCount": "{count, plural, =0 {aucune icône téléchargée} one {# icône téléchargée} other {# icônes téléchargées} many {# icônes téléchargées}}", + "uploadIcons": "Envoyer des icônes", + "uploadedCount": "{count, plural, =0 {aucune icône envoyée} one {# icône envoyée} other {# icônes envoyées} many {# icônes envoyées}}", "searchPlaceholder": "Icônes de recherche", "sort": { "newest": "Le plus récent", @@ -434,7 +434,7 @@ "deleteSelected": "Supprimer la sélection", "loading": "Chargement des icônes...", "emptySearch": "Aucune icône ne correspond à votre recherche.", - "emptyNoIcons": "Aucune icône personnalisée n'a encore été téléchargée.", + "emptyNoIcons": "Aucune icône personnalisée n'a encore été envoyée.", "namePlaceholder": "Nom", "checkingUsage": "Vérification de l'utilisation...", "usedBy": "Utilisé par {count}", @@ -447,8 +447,8 @@ "smartScopes": "{count, plural, =0 {aucune portée intelligente} one {# portée intelligente} other {# portées intelligentes} many {# portées intelligentes}}" }, "confirm": { - "deleteOne": "Supprimer \"{name}\" ? Les utilisations existantes reviendront à leur icône par défaut.", - "deleteMany": "{count, plural, =0 {Supprimer aucune icône ?} one {Supprimer # icône ? Les utilisations existantes reviendront à leur icône par défaut.} other {Supprimer # des icônes ? Les utilisations existantes reviendront à leur icône par défaut.} many {Supprimer # des icônes ? Les utilisations existantes reviendront à leur icône par défaut.}}" + "deleteOne": "Supprimer « {name} » ? Les utilisations existantes reviendront à leur icône par défaut.", + "deleteMany": "{count, plural, =0 {Ne supprimer aucune icône ?} one {Supprimer # icône ? Les utilisations existantes reviendront à leur icône par défaut.} other {Supprimer # icônes ? Les utilisations existantes reviendront à leur icône par défaut.} many {Supprimer # icônes ? Les utilisations existantes reviendront à leur icône par défaut.}}" }, "toasts": { "saved": "Icône enregistrée", @@ -519,7 +519,7 @@ "timezone": "Fuseau horaire", "save": "Enregistrer les préférences", "enableAchievements": "Activer les réalisations", - "enableAchievementsHint": "Suivez la progression des réalisations et affichez l’interface liée aux réalisations. Gérez les notifications de réussite séparément dans Notifications.", + "enableAchievementsHint": "Suivez la progression des réalisations et affichez l'interface liée aux réalisations. Gérez les notifications de réussite séparément dans Notifications.", "achievementsEnabled": "Réalisations activées", "achievementsDisabled": "Réalisations désactivées", "achievementsSaveFailed": "Échec de la mise à jour de la préférence de réalisations" @@ -531,14 +531,14 @@ "avatar": { "title": "Photo de profil", "unknownUser": "Utilisateur inconnu", - "formatHint": "PNG/JPEG/WEBP jusqu'à {size} Mo", - "upload": "Télécharger une photo", + "formatHint": "PNG/JPEG/WEBP jusqu'à {size} Mo", + "upload": "Envoyer une photo", "replace": "Remplacer l'image", - "uploading": "Téléchargement...", + "uploading": "Envoi en cours...", "remove": "Supprimer l'image", "removing": "Suppression...", "updated": "Photo de profil mise à jour", - "uploadFailed": "Échec du téléchargement de la photo de profil", + "uploadFailed": "Échec de l'envoi de la photo de profil", "removed": "Photo de profil supprimée", "removeFailed": "Échec de la suppression de la photo de profil", "removeConfirm": { @@ -585,7 +585,7 @@ }, "blockedTags": { "title": "Balises bloquées", - "description": "Les livres comportant l’une de ces balises vous sont masqués." + "description": "Les livres comportant l'une de ces balises vous sont masqués." }, "allowedGenres": { "title": "Genres autorisés", @@ -593,7 +593,7 @@ }, "blockedGenres": { "title": "Genres bloqués", - "description": "Les livres appartenant à l’un de ces genres vous sont cachés." + "description": "Les livres appartenant à l'un de ces genres vous sont cachés." } }, "groups": { @@ -620,13 +620,13 @@ "revokedOn": "Révoqué {date}", "expiredOn": "{date} expiré", "usesCount": "{count, plural, =0 {aucune utilisation} one {une utilisation} other {# utilise} many {# utilise}}", - "copied": "Copié!", + "copied": "Copié !", "copyLink": "Copier le lien", "pause": "Pause", "resume": "Reprendre", "revoke": "Révoquer", "revoking": "Révoquer...", - "emptyState": "Aucun lien magique n'a encore été créé. Cliquez sur \"{action}\" pour générer une connexion partageable URL.", + "emptyState": "Aucun lien magique n'a encore été créé. Cliquez sur « {action} » pour générer une connexion partageable URL.", "columns": { "label": "Étiquette", "account": "Compte", @@ -662,18 +662,18 @@ }, "usersPage": "Page des utilisateurs", "emptyTitle": "Aucun lien magique n'a encore été créé", - "emptyHint": "Cliquez sur \"{action}\" pour générer une connexion partageable URL.", + "emptyHint": "Cliquez sur « {action} » pour générer une connexion partageable URL.", "noActiveTitle": "Aucun lien magique actif", "noActiveHint": "Tous les liens magiques générés pour cette page ont expiré ou ont été révoqués.", "copyLinkAria": "Copier le lien pour {label}", "pauseAria": "Suspendre {label}", "resumeAria": "Reprendre {label}", "revokeAria": "Révoquer {label}", - "lastUsedLabel": "Dernière utilisation : {date}" + "lastUsedLabel": "Dernière utilisation : {date}" }, "oidc": { "title": "OIDC / SSO", - "subtitle": "Gérez les fournisseurs OpenID Connect pour l’authentification unique.", + "subtitle": "Gérez les fournisseurs OpenID Connect pour l'authentification unique.", "providers": "Fournisseurs", "addProvider": "Ajouter un fournisseur", "editProvider": "Modifier le fournisseur", @@ -731,6 +731,7 @@ "test": { "connected": "Connecté - {issuer}", "connectionFailed": "La connexion a échoué", + "privateIssuerAddress": "L'URL de l'émetteur résout à une adresse de réseau privé ou local, donc le serveur a refusé de se connecter. Définissez OIDC_ALLOW_LOCAL_ISSUERS=true sur le serveur BookOrbit pour l'autoriser.", "hide": "Masquer", "details": "Détails", "supported": "pris en charge", @@ -771,7 +772,7 @@ "subtitle": "Gérez les utilisateurs et les paramètres d'authentification.", "system": { "title": "Système", - "subtitle": "Paramètres d’organisation, d’ingestion et de maintenance des fichiers." + "subtitle": "Paramètres d'organisation, d'ingestion et de maintenance des fichiers." }, "maintenance": { "title": "Entretien", @@ -820,18 +821,18 @@ "achievementBackfillComplete": "Remplissage des réalisations terminé : {count} récompenses accordées", "backfillRunFailed": "Échec de l'exécution du remplissage", "achievementBackfillFailed": "Échec de l'exécution du remplissage des réussites : {error}", - "uploadsGroup": "Téléchargements", - "maxUploadSize": "Limite maximale de taille de fichier de téléchargement", - "maxUploadSizeHint": "Configurez la limite de taille maximale pour les téléchargements de fichiers sur l'ensemble du système.", + "uploadsGroup": "Envois", + "maxUploadSize": "Limite maximale de taille de fichier d'envoi", + "maxUploadSizeHint": "Configurez la limite de taille maximale pour les envois de fichiers sur l'ensemble du système.", "save": "Enregistrer", - "uploadSizeInvalid": "La limite de taille de téléchargement doit être supérieure à 0", - "uploadSizeUpdated": "Limite de taille de téléchargement mise à jour" + "uploadSizeInvalid": "La limite de taille d'envoi doit être supérieure à 0", + "uploadSizeUpdated": "Limite de taille d'envoi mise à jour" }, "migration": { "title": "Migrations", "subtitle": "Importation unique de Booklore : connectez la source, cartographiez les utilisateurs, effectuez une exécution à sec, démarrez la migration et exportez un rapport.", - "genericSubtitle": "Importation unique de la bibliothèque : connecter une source, associer les utilisateurs, effectuer un test, lancer la migration et exporter un rapport.", - "progress": "Progrès", + "genericSubtitle": "Importation unique de la bibliothèque : connecter une source, associer les utilisateurs, effectuer un test, lancer la migration et exporter un rapport.", + "progress": "Progression", "stepSourceConnection": "Connexion source", "stepUserPathMapping": "Cartographie des utilisateurs et des chemins", "stepDryRun": "Simulation", @@ -842,8 +843,8 @@ "subtitleSource": "Configurez la connexion à la base de données à votre instance Booklore source.", "genericSubtitleSource": "Configurez la connexion à votre application de bibliothèque source.", "subtitleMappings": "Mappez les utilisateurs source avec les utilisateurs cibles et traduisez les chemins de fichiers.", - "subtitleDryRun": "Prévisualisez ce qui sera importé avant d’exécuter la migration en direct.", - "subtitleRun": "Démarrez l’importation en direct et suivez sa progression.", + "subtitleDryRun": "Prévisualisez ce qui sera importé avant d'exécuter la migration en direct.", + "subtitleRun": "Démarrez l'importation en direct et suivez sa progression.", "subtitleReport": "Vérifiez ce qui a été importé et exportez un rapport détaillé.", "continueToMappings": "Continuer vers les mappages", "continueToDryRun": "Continuer vers la simulation", @@ -857,7 +858,7 @@ "badgeFailed": "Échec", "mediaPathRequired": "Obligatoire pour la migration des couvertures de livres.", "mediaPathAbsolute": "Utilisez un chemin absolu (par exemple : /books). Les chemins relatifs ne sont pas pris en charge.", - "mediaPathConfigured": "Chemin d’importation de couverture configuré. Utilisez Test Connection pour vérifier l’accès et la structure des dossiers d’images Booklore.", + "mediaPathConfigured": "Chemin d'importation de couverture configuré. Utilisez Test Connection pour vérifier l'accès et la structure des dossiers d'images Booklore.", "issueSaveSource": "Enregistrer les paramètres de connexion source", "issueValidateSource": "Valider la connexion source", "issueSaveMappings": "Enregistrer les mappages d'utilisateurs et de chemins", @@ -879,18 +880,18 @@ "errorLoadSuggestions": "Échec du chargement des suggestions de mappage utilisateur", "requiredFields": "L'hôte, l'utilisateur, la base de données et le nom de la source sont requis", "connectionTestPassedWithWarnings": "Test de connexion réussi avec avertissements", - "connectionTestPassedWithCount": "Test de connexion réussi avec {count} avertissement(s). Premier : {first}", + "connectionTestPassedWithCount": "Test de connexion réussi. Nombre d'avertissements : {count}. Premier : {first}", "connectionTestPassed": "Test de connexion réussi", - "connectionOkMissingTables": "Connexion correcte, mais {count} table(s) requise(s) sont manquantes", + "connectionOkMissingTables": "Connexion établie, mais nombre de tables requises manquantes : {count}", "cannotTestMediaPathActiveRun": "Impossible de tester le chemin du support lorsqu'une exécution est active", - "mediaRootPathRequiredCover": "Le chemin racine du média est requis pour l’importation de la couverture.", + "mediaRootPathRequiredCover": "Le chemin racine du média est requis pour l'importation de la couverture.", "useAbsolutePath": "Utilisez un chemin absolu (par exemple : /books).", "mediaPathVerified": "Chemin du média vérifié.", "mediaPathValidReadable": "Le chemin du média est valide et lisible", "mediaPathValidationFailed": "La validation du chemin du média a échoué.", "connectionFailedBeforeMediaPath": "Le test de connexion a échoué avant que la validation du chemin du support ne puisse être terminée.", "cannotModifySourceActiveRun": "Impossible de modifier la source lorsqu'une exécution est active", - "sourceSavedValidatedWarnings": "Source enregistrée et validée avec {count} avertissement(s)", + "sourceSavedValidatedWarnings": "Source enregistrée et validée. Nombre d'avertissements : {count}", "sourceSavedValidated": "Source enregistrée et validée", "errorSaveValidateSource": "Échec de l'enregistrement ou de la validation de la source", "cannotSaveMappingsActiveRun": "Impossible d'enregistrer les mappages lorsqu'une exécution est active", @@ -993,7 +994,7 @@ "duplicateMatches": "Correspondances en double :", "unresolvedSummary": "Résumé non résolu", "resolveDuplicateMatches": "Résoudre les correspondances de cibles en double", - "resolveDuplicateHint": "Pour chaque livre cible, choisissez un livre source à conserver. Les choix recommandés sont présélectionnés lorsqu’il existe une seule correspondance la plus forte.", + "resolveDuplicateHint": "Pour chaque livre cible, choisissez un livre source à conserver. Les choix recommandés sont présélectionnés lorsqu'il existe une seule correspondance la plus forte.", "remainingGroups": "Groupes restants :", "ofCount": "de {count}", "targetBookNum": "Livre cible #{id}", @@ -1010,7 +1011,7 @@ "checkSavePathMappings": "Enregistrez les mappages de chemin pour les valider", "checkDryRunUpToDate": "Le test à sec est à jour", "checkFreshDryRun": "Exécutez un nouvel essai à sec", - "startConfirmPrompt": "Cela lancera la migration en direct. Es-tu sûr?", + "startConfirmPrompt": "Cela lancera la migration en direct. Êtes-vous sûr ?", "confirmStart": "Confirmer le démarrage", "startMigration": "Démarrer la migration", "cancelRun": "Annuler l'exécution", @@ -1050,7 +1051,7 @@ "bookmarksLabel": "Signets", "annotationsLabel": "Annotations", "collectionEntries": "Entrées de collection", - "loadFullReportHint": "Cliquez sur « Charger le rapport complet » pour inclure le résumé des correspondances à sec dans le rapport exporté.", + "loadFullReportHint": "Cliquez sur « Charger le rapport complet » pour inclure le résumé des correspondances à sec dans le rapport exporté.", "completedNoIssues": "Migration terminée sans livres ni échecs non résolus.", "matchedBooksHeading": "Livres correspondants ({count})", "matchedBooksHint": "Ces correspondances à sec ont été utilisées pour décider quels livres de bibliothèque recevaient des données importées.", @@ -1060,7 +1061,7 @@ "unresolvedBooksHint": "Ces livres existent dans la source mais n'ont pu être associés à aucun livre de votre bibliothèque.", "mappedUsersHeading": "Utilisateurs mappés ({count})", "mappedUsersHint": "Les totaux par utilisateur proviennent de l'aperçu d'exécution à sec mis en cache avec le plan de migration.", - "coverImportsFailed": "{count} a échoué dans les importations de couverture. Les lignes de défaillance détaillées ne sont pas stockées.", + "coverImportsFailed": "Nombre d'échecs d'importation de couverture : {count}. Les détails des échecs ne sont pas conservés.", "backToSetup": "Retour à la configuration" }, "libraries": { @@ -1075,34 +1076,138 @@ "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}}", + "booksUnit": "{count, plural, 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", "emptyTitle": "Pas encore de bibliothèques", "emptyHint": "Ajoutez une bibliothèque pour commencer à organiser vos livres.", "addFirstLibrary": "Ajoutez votre première bibliothèque", - "deleteConfirmTitle": "Supprimer \"{name}\" ?", + "deleteConfirmTitle": "Supprimer « {name} » ?", "deleteConfirmBody": "Cela supprimera définitivement tous les livres, métadonnées, progression de la lecture, signets et annotations de cette bibliothèque. Cela ne peut pas être annulé.", "deleteConfirmTypeName": "Tapez le nom de la bibliothèque pour confirmer :", "deleting": "Suppression...", "deleteLibraryButton": "Supprimer la bibliothèque", "syncConfirmTitle": "Synchroniser les métadonnées avec les fichiers ?", "syncFiles": "Synchroniser les fichiers", - "metadataSynced": "Métadonnées synchronisées avec les fichiers pour \"{name}\"", + "metadataSynced": "Métadonnées synchronisées avec les fichiers pour « {name} »", "fileWriteNotEnabled": "L'écriture du fichier de métadonnées n'est pas activée pour cette bibliothèque. Activez-le dans les paramètres de la bibliothèque.", - "fileSyncFailed": "Échec de la synchronisation du fichier pour \"{name}\"", - "scanStarted": "Analyse lancée pour \"{name}\"", - "scanStartFailed": "Échec du démarrage de la recherche de \"{name}\"", - "refreshCoversFailed": "Échec de l'actualisation des couvertures pour \"{name}\"", + "fileSyncFailed": "Échec de la synchronisation du fichier pour « {name} »", + "scanStarted": "Analyse lancée pour « {name} »", + "scanStartFailed": "Échec du démarrage de la recherche de « {name} »", + "refreshCoversFailed": "Échec de l'actualisation des couvertures pour « {name} »", "scanStartedAll": "Analyse lancée pour toutes les bibliothèques", "librariesFailedToStart": "{count, plural, =0 {aucune bibliothèque n'a échoué à démarrer} one {# la bibliothèque n'a pas pu démarrer} other {# les bibliothèques n'ont pas pu démarrer} many {# les bibliothèques n'ont pas pu démarrer}}", "scansStartFailed": "Échec du démarrage des analyses", - "libraryCreated": "Bibliothèque \"{name}\" créée", - "libraryUpdated": "Bibliothèque \"{name}\" mise à jour", - "libraryDeleted": "\"{name}\" supprimé", + "libraryCreated": "Bibliothèque « {name} » créée", + "libraryUpdated": "Bibliothèque « {name} » mise à jour", + "libraryDeleted": "« {name} » supprimé", "deleteFailed": "Échec de la suppression de la bibliothèque", - "refreshingCovers": "Couvertures rafraîchissantes {pct}% ({processed}/{total})", - "coversRefreshed": "Couvertures actualisées ({count} traitées)" + "refreshingCovers": "Couvertures rafraîchissantes {pct} % ({processed}/{total})", + "coversRefreshed": "Couvertures actualisées ({count} traitées)", + "onDiskUnit": "{size} sur le disque", + "noFilesIndexed": "Aucun fichier indexé", + "formatEntry": "{format} {count}", + "formatOverflow": "{count, plural, one {+# format supplémentaire} other {+# formats supplémentaires} many {+# formats supplémentaires}}", + "extraFolders": "{count, plural, one {+# dossier supplémentaire} other {+# dossiers supplémentaires} many {+# dossiers supplémentaires}}", + "openLibrary": "Ouvrir {name}", + "moreActions": "Plus d'actions pour {name}", + "statsFailed": "Impossible de charger le nombre de bibliothèques. Tout le reste de cette page fonctionne encore.", + "filterLabel": "Filtrer les bibliothèques", + "filterPlaceholder": "Filtrer par nom ou chemin", + "filterClear": "Effacer le filtre", + "sortLabel": "Trier", + "noMatchesTitle": "Aucune bibliothèque ne correspond à ce filtre", + "noMatchesHint": "Aucun résultat ne correspond à « {query} » par son nom ou le chemin du dossier.", + "totalLibraries": "{count, plural, one {# bibliothèque} other {# bibliothèques}}", + "neverScanned": "Jamais analysée", + "neverScannedHint": "Lancez une analyse pour indexer ses dossiers", + "scanFailedAt": "Échec {time}", + "scanningPercent": "Analyse : {pct} %", + "scanCounting": "Comptage des fichiers", + "scanCounts": "{processed} sur {total}", + "scanAdded": "{count, plural, one {+# ajouté} other {+# ajoutés} many {+# ajoutés}}", + "scanUpdated": "{count, plural, one {# mis à jour} other {# mis à jour} many {# mis à jour}}", + "scanMissing": "{count, plural, one {# manquant} other {# manquants} many {# manquants}}", + "scanNoChange": "aucune modification", + "outcomeSeparator": ", ", + "scanOutcome": "{trigger} - {outcome}", + "syncConfirmBody": "Cette action remplacera directement sur le disque les métadonnées de chaque fichier pris en charge dans {name}. Cette action est irréversible.", + "columns": { + "library": "Bibliothèque", + "contents": "Contenu", + "onDisk": "Sur le disque", + "automation": "Automatisation", + "lastScan": "Dernière analyse", + "actions": "Actions" + }, + "sort": { + "default": "Ordre par défaut", + "name": "Nom", + "books": "Livres", + "size": "Taille sur le disque", + "lastScan": "Dernière analyse" + }, + "trigger": { + "manual": "Manuel", + "watcher": "Surveillance", + "schedule": "Planification" + }, + "capability": { + "watch": "Surveiller les dossiers", + "schedule": "Analyse planifiée", + "fileWrite": "Écrire dans le fichier", + "fileRename": "Renommer les fichiers", + "on": "{name} : activé", + "off": "{name} : désactivé", + "legendHint": "Les tirets signifient désactivé" + }, + "stateOn": "Activé", + "stateOff": "Désactivé", + "toggleDetail": "Afficher les détails de {name}", + "durationMs": "{ms} ms", + "durationSeconds": "{seconds} s", + "durationMinutes": "{minutes} min {seconds} s", + "history": { + "when": "Quand", + "trigger": "Déclencheur", + "duration": "Durée", + "result": "Résultat", + "status": "Statut", + "statusValue": { + "running": "En cours", + "completed": "Terminé", + "failed": "Échoué" + } + }, + "detail": { + "foldersTitle": "Dossiers et organisation", + "metadataTitle": "Métadonnées et lecture", + "accessTitle": "Accès", + "historyTitle": "Historique des analyses", + "path": "Chemin {index}", + "organization": "Organisation", + "excludePatterns": "Motifs d'exclusion", + "precedence": "Priorité des sources", + "allowedFormats": "Formats autorisés", + "countsAsStarted": "Compte comme commencé", + "countsAsFinished": "Compte comme terminé", + "peopleWithAccess": "Personnes ayant accès", + "added": "Ajouté", + "coverShape": "Forme de couverture", + "coverShapeValue": { + "portrait": "Portrait 2:3", + "square": "Carré 1:1" + }, + "none": "Aucun", + "allSupported": "Tous pris en charge", + "patternCount": "{count, plural, one {# motif} other {# motifs} many {# motifs}}", + "peopleCount": "{count, plural, =0 {Aucun accès explicite} one {# personne} other {# personnes} many {# personnes}}", + "historyEmpty": "Cette bibliothèque n'a jamais été analysée.", + "historyFailed": "Impossible de charger l'historique des analyses de cette bibliothèque." + }, + "scannedAt": "Analysé {time}", + "detailRegion": "Détails de {name}" }, "authorEnrichment": { "configuration": "Configuration", @@ -1115,9 +1220,9 @@ "triggerOnImportTitle": "Déclencheur à l'importation", "triggerOnImportHint": "Mettez les auteurs en file d'attente pour les enrichir lorsque les livres sont ajoutés pour la première fois à une bibliothèque.", "eligibilityTitle": "Conditions d'éligibilité", - "eligibilityHint": "Un auteur est éligible s’il répond à l’une des conditions activées.", + "eligibilityHint": "Un auteur est éligible s'il répond à l'une des conditions activées.", "neverEnrichedTitle": "Jamais enrichi", - "neverEnrichedHint": "Enrichissez les auteurs qui n’ont jamais eu d’enrichissement réussi.", + "neverEnrichedHint": "Enrichissez les auteurs qui n'ont jamais eu d'enrichissement réussi.", "missingBioTitle": "Biographie manquante", "missingBioHint": "Enrichir si l'auteur n'a pas de biographie.", "missingPhotoTitle": "Photo manquante", @@ -1151,19 +1256,97 @@ }, "scoreWeights": { "groupLabel": "Pondérations des scores", - "assignHintPrefix": "Attribuez un poids à chaque champ. Poids total :", - "areYouSure": "Êtes-vous sûr?", + "assignHintPrefix": "Attribuez un poids à chaque champ. Poids total :", + "areYouSure": "Êtes-vous sûr ?", "resetToDefaultsButton": "Réinitialiser aux valeurs par défaut", "recalculateAll": "Tout recalculer", "confirmReset": "Confirmer la réinitialisation", + "resetDialog": { + "title": "Réinitialiser toutes les pondérations à leur valeur par défaut ?", + "description": "Les 24 champs retrouvent les pondérations fournies par défaut avec BookOrbit. Rien n'est enregistré tant que vous n'avez pas choisi Enregistrer et recalculer." + }, "reset": "Réinitialiser", "recalculate": "Recalculer", "subtotal": "sous-total : {count}", - "savedRecalculating": "Score des poids enregistrés. Recalcul des scores de la bibliothèque...", + "savedRecalculating": "Pondérations enregistrées. Recalcul des scores de la bibliothèque...", "saveFailed": "Échec de l'enregistrement des pondérations des scores", "recalcStarted": "Le recalcul du score a démarré en arrière-plan", "recalcFailed": "Le recalcul a échoué", - "resetToDefaults": "Les poids sont réinitialisés aux valeurs par défaut. Enregistrez pour postuler." + "resetToDefaults": "Pondérations réinitialisées aux valeurs par défaut. Enregistrez pour appliquer les modifications.", + "howItWorks": { + "title": "Comment ça marche.", + "summary": "Chaque livre reçoit un score sur 100 selon l'exhaustivité de ses métadonnées. Une pondération n'a de sens que par rapport aux autres : chaque champ ci-dessous indique donc la part du score qu'il représente. Doubler toutes les pondérations ne change rien." + }, + "readOnly": "Vous pouvez voir comment les scores sont calculés, mais la modification des pondérations nécessite la permission Paramètres de l'application.", + "compositionTitle": "D'où vient un score", + "compositionHint": "Les pourcentages totalisent toujours 100.", + "searchFields": "Filtrer les champs", + "clearSearch": "Effacer la recherche", + "noMatches": "Aucun champ ne correspond à cette recherche.", + "totalSummary": "{scoring} champs sur 24 comptent dans le score, {total} points au total", + "countGroups": "Comptent dans le score", + "notScored": "Non pris en compte", + "notScoredHeading": "Non pris en compte ({count})", + "notScoredHint": "Un champ à zéro est aussi exclu du total : les livres qui ne le renseignent pas ne sont donc pas pénalisés.", + "decreaseWeight": "Diminuer la pondération de {field}", + "increaseWeight": "Augmenter la pondération de {field}", + "revertField": "Rétablir la pondération enregistrée de {field}", + "table": { + "field": "Champ", + "weight": "Pondération", + "share": "Part du score", + "versusDefault": "Modification" + }, + "groups": { + "core": "Essentiel", + "publishing": "Publication", + "classification": "Classification", + "enrichment": "Enrichissement", + "providers": "Identifiants des fournisseurs" + }, + "rules": { + "text": "Compte lorsqu'il n'est pas vide", + "positive": "Compte lorsqu'il est supérieur à zéro", + "count": "Compte lorsqu'au moins un est renseigné", + "cover": "Compte lorsqu'une image de couverture est enregistrée", + "providerId": "Compte lorsque l'identifiant est enregistré", + "seriesIndex": "Compte lorsqu'il est supérieur à zéro : le volume 0 ne compte donc jamais" + }, + "rail": { + "title": "Répartition de vos livres", + "description": "La couleur du badge qu'un lecteur voit sur une fiche livre, comparée à tous les livres que vous pouvez voir aujourd'hui.", + "bandsLabel": "Paliers de couleur du badge", + "bands": { + "poor": "MOINS DE 50", + "fair": "50-69", + "good": "70-89", + "great": "90+" + }, + "median": "Médiane", + "belowFifty": "Moins de 50", + "ninetyPlus": "90 et plus", + "noBooks": "Aucun livre noté pour le moment. Relancez le calcul des scores une fois l'importation de votre bibliothèque terminée.", + "scopeNote": "{count, plural, one {# livre} other {# livres} many {# livres}} dans les bibliothèques auxquelles vous avez accès, évalués avec les pondérations actuellement enregistrées." + }, + "progress": { + "running": "Recalcul des scores de la bibliothèque", + "failed": "Échec du recalcul du score", + "count": "{processed} livres traités", + "countOf": "{processed} livres sur {total}", + "failedCount": "({count} en échec)", + "safeToLeave": "Vous pouvez quitter cette page sans risque.", + "dismiss": "Fermer" + }, + "save": { + "upToDate": "Toutes les modifications sont enregistrées.", + "unsaved": "{count, plural, one {# champ modifié} other {# champs modifiés} many {# champs modifiés}}", + "totalShift": "total de {from} à {to} points", + "rescores": "L'enregistrement recalcule {count, plural, one {# livre} other {# livres} many {# livres}} en arrière-plan.", + "rescoresUnknown": "L'enregistrement relance le calcul des scores de votre bibliothèque en arrière-plan.", + "action": "Enregistrer et recalculer les scores", + "discard": "Ignorer", + "leaveWarning": "Des modifications de pondération ne sont pas enregistrées. Quitter la page et les perdre ?" + } }, "tabs": { "users": "Utilisateurs", @@ -1174,7 +1357,7 @@ }, "serverFonts": { "title": "Polices du serveur", - "subtitle": "Téléversez des polices directement disponibles pour tous les utilisateurs dans le lecteur d'eBook.", + "subtitle": "Envoyez des polices directement disponibles pour tous les utilisateurs dans le lecteur d'eBook.", "listLabel": "Polices du serveur", "noFontsYet": "Aucune police disponible sur le serveur pour le moment", "noFontsHint": "Les polices que vous ajoutez ici sont disponibles dans le lecteur de tous les utilisateurs." @@ -1228,23 +1411,42 @@ "communityRating": "Évaluation de la communauté", "seriesName": "Nom de la série", "seriesIndex": "Indice de série", - "genres": "Genre", + "genres": "Genres", "narrators": "Narrateurs", "duration": "Durée", - "abridged": "Abrégé" + "abridged": "Abrégé", + "tags": "Balises", + "isbn13": "ISBN-13", + "isbn10": "ISBN-10", + "googleBooksId": "Identifiant Google Books", + "goodreadsId": "Identifiant Goodreads", + "amazonId": "Identifiant Amazon", + "hardcoverId": "Identifiant Hardcover", + "openLibraryId": "ID Open Library", + "itunesId": "Identifiant iTunes", + "koboId": "Identifiant Kobo", + "aladinId": "Identifiant Aladin" }, "mergeStrategy": { "fillMissing": { "label": "Remplissage manquant", - "description": "N'écrire que si le champ est actuellement vide" + "description": "N'écrire que si le champ est actuellement vide", + "short": "Compléter les manques" + }, + "mergeExisting": { + "label": "Fusionner avec l'existant", + "description": "Conserver les genres enregistrés et ajouter les nouveaux genres du fournisseur", + "short": "Fusionner" }, "overwriteIfProvided": { "label": "Écraser si fourni", - "description": "Écrire si le fournisseur a renvoyé une valeur" + "description": "Écrire si le fournisseur a renvoyé une valeur", + "short": "Si renseigné" }, "overwrite": { "label": "Toujours écraser", - "description": "Remplacez toujours la valeur existante" + "description": "Remplacez toujours la valeur existante", + "short": "Toujours" } }, "autoFetch": { @@ -1274,7 +1476,7 @@ "lastRun": { "justNow": "juste maintenant", "minutesAgo": "il y a {count} m", - "hoursAgo": "il y a {count}h", + "hoursAgo": "il y a {count} h", "yesterday": "hier", "daysAgo": "{count, plural, one {il y a # jour} other {il y a # jours} many {il y a # jours}}", "label": "Dernière exécution : {when}", @@ -1283,7 +1485,7 @@ }, "conditions": { "title": "Conditions d'éligibilité", - "hint": "Un livre est éligible s’il répond à l’une des conditions activées.", + "hint": "Un livre est éligible s'il répond à l'une des conditions activées.", "noneEnabled": "Aucune condition activée", "neverFetched": { "label": "Jamais récupéré", @@ -1312,16 +1514,38 @@ "providers": { "availableSources": "Sources disponibles", "saveChanges": "Enregistrer les modifications", + "discard": "Ignorer", + "configure": "Configurer", "test": "Tester", "testing": "Test...", + "testHint": "Vérifie ces identifiants auprès du service en ligne. Rien n'est enregistré.", "enabled": "Activé", "retryIn": "Réessayez dans {duration}", "runTestBeforeEnabling": "Exécutez le test avant d'activer", "hardcoverEnableHint": "Exécutez le test avec le jeton actuel pour déverrouiller le commutateur d'activation.", + "searchPlaceholder": "Filtrer les sources", + "sourcesEnabled": "{enabled} sources activées sur {total}", + "groupEnabled": "{enabled} sur {total} activées", + "unsavedChanges": "{count, plural, one {# modification non enregistrée} other {# modifications non enregistrées} many {# modifications non enregistrées}}", + "noMatches": "Aucune source ne correspond à ce filtre.", + "clearFilters": "Effacer les filtres", + "filter": { + "label": "Filtrer les sources par état", + "all": "Toutes", + "enabled": "Activées", + "needsSetup": "À configurer" + }, + "groups": { + "books": "Catalogues généraux de livres", + "audiobooks": "Livres audio", + "comics": "Bandes dessinées et light novels", + "regional": "Catalogues régionaux" + }, "badge": { "setupRequired": "Configuration requise", "throttled": "Étranglé", - "ready": "Prêt" + "ready": "Prêt", + "active": "Active" }, "fields": { "apiKey": "Clé API", @@ -1339,12 +1563,13 @@ "google": "Large couverture de l'index des livres de Google. Google Books nécessite désormais une clé API avant que ce fournisseur puisse être activé.", "amazon": "Le cookie de session est recommandé. Collez uniquement la valeur du cookie (pas de « Cookie : »).", "goodreads": "La plus grande communauté de lecture sur le Web. Aucune configuration requise.", - "hardcover": "Une alternative moderne à Goodreads. Jeton de hardcover.app/account/api. Le préfixe \"Bearer\" est facultatif.", + "hardcover": "Une alternative moderne à Goodreads. Jeton de hardcover.app/account/api. Le préfixe « Bearer » est facultatif.", "openLibrary": "Le catalogue de livres gratuit d'Internet Archive. Aucune configuration requise.", "itunes": "Le catalogue de livres numériques d'Apple. Choisissez si vous souhaitez récupérer des couvertures haute résolution ou standard.", "kobo": "Gratte les pages du livre public de Kobo. Le pays et la langue doivent correspondre aux chemins Kobo URL ; la protection contre les robots peut bloquer les demandes.", - "audible": "Extrait les métadonnées du livre audio de Audible. Aucune configuration supplémentaire n’est requise.", + "audible": "Extrait les métadonnées du livre audio de Audible. Aucune configuration supplémentaire n'est requise.", "audnexus": "Métadonnées de livres audio gérées par la communauté. Aucune configuration requise.", + "librofm": "Métadonnées d'un catalogue de livres audio sans DRM. Utilise un point de terminaison Libro.fm non documenté et est désactivé par défaut.", "comicvine": "Métadonnées de bande dessinée de ComicVine. Une clé API gratuite est requise sur comicvine.gamespot.com.", "ranobedb": "Métadonnées du light novel japonais de RanobeDB. Aucune configuration requise.", "lubimyczytac": "Catalogue de livres polonais (lubimyczytac.pl). Gratte les pages des livres publics. Aucune configuration requise.", @@ -1377,7 +1602,8 @@ "fillMissingBody": "N'écrivez que si la valeur actuelle est vide.", "overwriteTerm": "Écraser :", "overwriteBody": "Remplacez chaque fois qu'un fournisseur dispose de données." - } + }, + "summary": "Les fournisseurs sont essayés de haut en bas et le premier à renvoyer une valeur l'emporte. La stratégie de fusion détermine si cette valeur peut remplacer celle que le livre possède déjà ; les genres peuvent aussi ajouter de nouvelles valeurs uniques. Définissez les valeurs par défaut ici, puis remplacez-les champ par champ, par bibliothèque." }, "libraryOverrides": { "title": "Remplacements de bibliothèque", @@ -1409,7 +1635,7 @@ }, "library": { "primary": "Principal :", - "overrideCount": "{count, plural, one {# Remplacer} other {# Remplacements} many {# Remplacements}}", + "overrideCount": "{count, plural, one {# remplacement} other {# remplacements} many {# remplacements}}", "unsavedSuffix": "(non enregistré)", "unsavedChanges": "Modifications non enregistrées", "globalDefaults": "Valeurs par défaut globales", @@ -1417,8 +1643,8 @@ "inheritingAll": "Héritage de toutes les règles globales de métadonnées", "subHint": "Les champs non remplacés héritent des valeurs par défaut globales.", "resetTooltip": "Supprimez tous les remplacements et héritez des valeurs par défaut globales", - "clearAllConfirm": "Supprimer tous les fournisseurs actifs de chaque champ dans « {library} » ?", - "resetConfirm": "Réinitialiser \"{library}\" aux valeurs par défaut globales ? Tous les remplacements de bibliothèque seront supprimés." + "clearAllConfirm": "Supprimer tous les fournisseurs actifs de chaque champ dans « {library} » ?", + "resetConfirm": "Réinitialiser « {library} » aux valeurs par défaut globales ? Tous les remplacements de bibliothèque seront supprimés." }, "groups": { "core": "Noyau", @@ -1430,13 +1656,15 @@ }, "groupSummary": { "base": "Champs {fields} · {enabled} activé", - "withOverrides": "{base} · {overrides} remplace" + "withOverrides": "{base} · {overrides} remplace", + "enabledOf": "{enabled} champs activés sur {fields}" }, "table": { "field": "Champ", "activeProviders": "Fournisseurs actifs (classés par priorité)", "mergeStrategy": "Stratégie de fusion", - "status": "Statut" + "status": "Statut", + "noMatches": "Aucun champ ne correspond à ces filtres." }, "field": { "noProviders": "Activé mais n'a aucun fournisseur", @@ -1444,7 +1672,19 @@ "config": "Configuration", "custom": "Personnalisé", "default": "Par défaut", - "resetToDefault": "Réinitialiser aux valeurs par défaut" + "resetToDefault": "Réinitialiser aux valeurs par défaut", + "toggle": "Récupérer {field} lors de l'actualisation des métadonnées", + "configure": "Configurer {field}", + "add": "Ajouter", + "addHint": "Ajouté à la fin de l'ordre. Faites glisser une étiquette pour la placer plus haut.", + "addProviderTo": "Ajouter un fournisseur à {field}", + "removeProvider": "Supprimer {provider}", + "noProvidersYet": "Aucun fournisseur pour le moment", + "skippedCount": "{count, plural, one {# ignoré} other {# ignorés} many {# ignorés}}", + "unsaved": "Non enregistré", + "override": "Remplacer", + "inherited": "Hérité", + "morePreview": "+{count} de plus" }, "reservoir": { "disabled": "{provider} - désactivé", @@ -1458,6 +1698,69 @@ "statusDisabled": "désactivé", "statusNotConfigured": "non configuré", "done": "Terminé" + }, + "scope": { + "label": "Portée de la règle", + "global": "Valeurs par défaut globales", + "overrideCount": "{count, plural, one {# champ remplacé} other {# champs remplacés} many {# champs remplacés}}", + "unsavedMarker": "Modifications non enregistrées" + }, + "toolbar": { + "searchFields": "Rechercher des champs", + "clearSearch": "Effacer la recherche", + "provider": "Fournisseur", + "anyProvider": "Tous", + "providerMenuTitle": "Filtrer et modifier en masse par fournisseur", + "usedIn": "{count, plural, =0 {non utilisé} one {# champ} other {# champs} many {# champs}}", + "showOnlyThese": "Afficher uniquement les champs qui l'utilisent", + "bulkLabel": "Appliquer aux {count} champs qui l'utilisent", + "makeFirst": "Placer en premier partout", + "makeLast": "Placer en dernier partout", + "removeEverywhere": "Supprimer de tous les champs", + "allFields": "Tous les champs", + "overridesOnly": "Remplacements uniquement", + "clearFilters": "Effacer les filtres" + }, + "providerState": { + "disabled": "Désactivé", + "notConfigured": "Non configuré", + "disabledDetail": "{provider} est désactivé ; il reste donc dans l'ordre, mais est ignoré.", + "notConfiguredDetail": "{provider} n'a pas encore d'identifiants ; il reste donc dans l'ordre, mais est ignoré." + }, + "detail": { + "priority": "Priorité des fournisseurs", + "priorityHint": "Le premier fournisseur qui renvoie une valeur est retenu.", + "moveUp": "Placer {provider} plus haut", + "moveDown": "Placer {provider} plus bas", + "result": "Résultat", + "resultHint": "Lors de la prochaine actualisation, ce champ est résolu dans cet ordre :", + "noUsableProviders": "Aucun fournisseur utilisable : ce champ ne sera pas renseigné.", + "skippedSummary": "{count, plural, one {{providers} est dans l'ordre mais sera ignoré.} other {{providers} sont dans l'ordre mais seront ignorés.} many {{providers} sont dans l'ordre mais seront ignorés.}}", + "appliesTo": "S'applique à {scope}.", + "inheritGlobal": "Hériter de la règle globale", + "inheritingGlobal": "Hérite de la règle globale.", + "collapse": "Réduire" + }, + "save": { + "upToDate": "Aucune modification non enregistrée", + "unsaved": "{count, plural, one {# modification non enregistrée} other {# modifications non enregistrées} many {# modifications non enregistrées}} dans {scope}", + "discard": "Ignorer", + "action": "Enregistrer {scope}" + }, + "confirm": { + "clearProviders": { + "title": "Supprimer tous les fournisseurs ?", + "description": "Cette action vide la liste des fournisseurs pour les 16 champs de {scope}. Rien n'est enregistré tant que vous n'avez pas choisi Enregistrer." + }, + "resetScope": { + "title": "Rétablir les valeurs par défaut ?", + "globalDescription": "Cette action remplace vos règles de champ globales par les valeurs par défaut du système et les enregistre immédiatement.", + "libraryDescription": "Cette action supprime toutes les substitutions de {scope} afin qu'il hérite à nouveau des règles globales, et les enregistre immédiatement." + }, + "removeProvider": { + "title": "Supprimer {provider} de tous les champs ?", + "description": "Cette action retire {provider} de l'ordre des fournisseurs pour chaque champ de {scope}. Rien n'est enregistré tant que vous n'avez pas choisi Enregistrer." + } } }, "genreBlocklist": { @@ -1496,7 +1799,7 @@ "searchAriaLabel": "Rechercher des champs personnalisés", "emptyTitle": "Pas encore de champs personnalisés", "emptyHint": "Utilisez le formulaire ci-dessus pour définir votre premier champ de métadonnées personnalisé.", - "noMatchTitle": "Aucun champ ne correspond à \"{query}\"", + "noMatchTitle": "Aucun champ ne correspond à « {query} »", "noMatchHint": "Essayez une autre étiquette, clé ou type.", "clearSearchToReorder": "Effacer la recherche pour réorganiser", "dragToReorder": "Faites glisser pour réorganiser", @@ -1531,7 +1834,7 @@ "field-rules": "Règles de terrain", "custom-fields": "Champs personnalisés", "genre-blocklist": "Liste de blocage des genres", - "score": "Score", + "score": "Score de confiance", "auto-fetch": "Livres", "authors": "Auteurs" }, @@ -1549,9 +1852,18 @@ "field-rules": "Contrôlez quel fournisseur fournit chaque champ de métadonnées et comment les valeurs sont fusionnées dans vos bibliothèques.", "custom-fields": "Définissez des champs de métadonnées personnalisés et choisissez les bibliothèques qui les utilisent.", "genre-blocklist": "Empêchez que les valeurs de genre indésirables du fournisseur soient écrites dans les livres.", - "score": "Attribuez des pondérations aux champs de métadonnées pour calculer le degré de confiance dans les résultats récupérés.", + "score": "Déterminez la contribution de chaque champ de métadonnées au score d'exhaustivité affiché pour chaque livre.", "auto-fetch": "Récupérez automatiquement des couvertures, des descriptions et d'autres détails lorsque de nouveaux livres sont ajoutés à votre bibliothèque.", "authors": "Récupérez automatiquement des biographies et des photos de profil lorsque de nouveaux auteurs apparaissent dans votre bibliothèque." + }, + "preferences": { + "toast": { + "saved": "Préférences de métadonnées enregistrées", + "saveFailed": "Impossible d'enregistrer les préférences de métadonnées. Vérifiez votre connexion et réessayez.", + "globalReset": "Règles de champ globales rétablies aux valeurs par défaut du système", + "libraryReset": "Bibliothèque réinitialisée aux règles globales", + "resetFailed": "Impossible de rétablir les préférences de métadonnées. Vérifiez votre connexion et réessayez." + } } }, "reader": { @@ -1562,7 +1874,7 @@ }, "general": { "title": "Lecture", - "subtitle": "Comportement général qui s’applique à tous les types de lecteurs.", + "subtitle": "Comportement général qui s'applique à tous les types de lecteurs.", "storageLabel": "Où enregistrer les préférences du lecteur", "deviceOnly": "Cet appareil uniquement", "deviceOnlyHint": "Les préférences restent dans votre navigateur. Idéal si vous lisez toujours sur cet appareil ou si vous souhaitez des paramètres différents par appareil.", @@ -1600,6 +1912,7 @@ "font": "Police", "fontHint": "Police utilisée pour le corps du texte", "fontStyle": "Style de police", + "fontStyleHint": "Graisse et inclinaison du texte courant. Le gras et l'italique du livre restent relatifs à ce réglage.", "builtInFonts": "Polices intégrées", "yourFonts": "Vos polices", "fontSize": "Taille de la police", @@ -1643,7 +1956,7 @@ "subtitle": "Paramètres par défaut appliqués lors de l'ouverture des fichiers CBZ, CBR et CB7.", "view": "Voir", "readingMode": "Mode lecture", - "readingModeHint": "Comment les pages sont parcourues - utilisez \"Infini (pas d'espaces)\" pour les webtoons", + "readingModeHint": "Comment les pages sont parcourues - utilisez « Infini (pas d'espaces) » pour les webtoons", "paginated": "Paginé", "infiniteSpaced": "Infini (espacé)", "infiniteNoGaps": "Infini (pas de lacunes)", @@ -1674,6 +1987,8 @@ "widePageDisable": "Désactiver", "forceTwoPage": "Forcer deux pages sur les petits écrans", "forceTwoPageHint": "Contourner le repli automatique mobile lorsque le mode paginé sur deux pages est sélectionné", + "autoAdvance": "Passer automatiquement au livre suivant", + "autoAdvanceHint": "Tournez après la dernière page pour ouvrir le livre suivant de la série", "off": "Désactivé", "on": "Sur", "display": "Affichage", @@ -1690,7 +2005,7 @@ "playbackSpeed": "Vitesse de lecture par défaut", "playbackSpeedHint": "Multiplicateur de vitesse appliqué lors de l'ouverture d'un nouveau livre audio", "volume": "Volume par défaut", - "volumeHint": "Niveau de volume initial (0 à 100%)", + "volumeHint": "Niveau de volume initial (0 à 100 %)", "skipControls": "Ignorer les contrôles", "skipBack": "Revenir en arrière sur la durée", "skipBackHint": "Secondes rembobinées lors d'une pression en arrière", @@ -1699,17 +2014,17 @@ }, "fonts": { "title": "Polices", - "subtitle": "Téléchargez des polices personnalisées à utiliser dans le lecteur de livres électroniques.", - "uploadFonts": "Télécharger des polices", + "subtitle": "Envoyez des polices personnalisées à utiliser dans le lecteur de livres électroniques.", + "uploadFonts": "Envoyer des polices", "notAvailableDemo": "Non disponible pour les comptes démo", - "uploading": "Téléchargement...", + "uploading": "Envoi en cours...", "dropFilesHere": "Déposez les fichiers ici", "dragFontsPrefix": "Faites glisser les fichiers de polices ici, ou", "browse": "parcourir", - "fileTypesHint": "TTF, OTF, WOFF, WOFF2 - maximum 10 Mo chacun", + "fileTypesHint": "TTF, OTF, WOFF et WOFF2 - 50 Mo maximum par fichier", "yourFonts": "Vos polices", "fontsUsed": "{count} / {max} utilisé", - "noFontsYet": "Aucune police téléchargée pour le moment", + "noFontsYet": "Aucune police envoyée pour le moment", "noFontsHint": "Faites glisser un fichier de police ci-dessus pour commencer.", "fileCount": "{count, plural, =0 {pas de fichiers} one {# fichier} other {# fichiers} many {# fichiers}}", "pangram": "Le renard brun rapide saute par-dessus le chien paresseux", @@ -1719,6 +2034,9 @@ "deleteVariant": "Supprimer la variante", "styleNormal": "Normale", "styleItalic": "Italique", + "weightItalicOf": "{weight} italique", + "variableRange": "Variable {min}-{max}", + "variableStyles": "{count, plural, one {# style} other {# styles} many {# styles}}", "weightThin": "Mince", "weightExtraLight": "Lumière supplémentaire", "weightLight": "Lumière", @@ -1729,13 +2047,13 @@ "weightExtraBold": "Extra audacieux", "weightBlack": "Noir", "renameFamilyFailed": "Échec du renommage de la famille de polices", - "renamedTo": "Renommé en \"{name}\"", + "renamedTo": "Renommé en « {name} »", "updateVariantFailed": "Échec de la mise à jour de la variante de police", "deleteFontFailed": "Échec de la suppression de la police", "deleteFamilyFailed": "Échec de la suppression de la famille de polices", "demoCannotManage": "Le compte restreint à la démo ne peut pas gérer les polices", - "fileAdded": "\"{name}\" ajouté", - "uploadFailed": "Échec du téléchargement", + "fileAdded": "« {name} » ajouté", + "uploadFailed": "Échec de l'envoi", "serverFontsTitle": "Polices du serveur (partagées par l'admin)", "serverFontsHint": "Ces polices proviennent de l'admin du serveur. Désactivez-en une pour qu'elle ne soit plus disponible dans votre lecteur.", "serverFontsShown": "{count} sur {total} disponibles", @@ -1747,13 +2065,13 @@ "subtitle": "Configurez la manière dont les fichiers sont traités lorsqu'ils entrent dans Book Dock.", "dropFolder": "Déposer le dossier", "containerPath": "Chemin du conteneur", - "containerPathHint": "Copiez ou déplacez les fichiers du livre dans ce dossier et ils seront automatiquement récupérés et traités par Book Dock. Les sous-répertoires sont pris en charge.", + "containerPathHint": "Copiez ou déplacez vos fichiers de livres dans ce dossier et ils seront automatiquement récupérés et traités par Book Dock. Les sous-répertoires sont pris en charge.", "changePathPrefix": "Pour modifier ce chemin, définissez", "changePathMiddle": "dans votre", "changePathSuffix": "fichier.", "metadata": "Métadonnées", "autoFetch": "Récupérer automatiquement les métadonnées des fournisseurs", - "autoFetchHint": "Récupérez automatiquement les métadonnées des fournisseurs configurés (Google Books, iTunes, Open Library, etc.) après l'ajout d'un fichier à Book Dock.", + "autoFetchHint": "Récupère automatiquement les métadonnées des fournisseurs configurés (Google Books, iTunes, Open Library, etc.) après l'ajout d'un fichier à Book Dock.", "autoFinalize": "Finalisation automatique", "enableAutoFinalize": "Activer la finalisation automatique", "enableAutoFinalizeHint": "Les fichiers dont le score de confiance des métadonnées est égal ou supérieur au seuil seront finalisés automatiquement.", @@ -1780,16 +2098,16 @@ }, "fileNaming": { "title": "Nommage des fichiers", - "subtitle": "Contrôlez l'organisation des fichiers sur le disque lors de leur importation et leur nom lors du téléchargement à l'aide de jetons de substitution.", + "subtitle": "Contrôlez l'organisation des fichiers sur le disque lors de leur envoi et leur nom lors du téléchargement à l'aide de jetons de substitution.", "copy": "Copier", "previewLabel": "Aperçu :", "globalDefaults": "Valeurs par défaut globales", "crossPlatform": "Normalisation multiplateforme des chemins", "crossPlatformHint": "Sécurisez les noms de fichiers et de dossiers générés sous Windows en remplaçant les caractères non valides et les noms réservés, et en supprimant les points et les espaces de fin. Désactivez uniquement pour les configurations Linux uniquement qui conservent intentionnellement ces caractères.", "fileAsBookDefault": "Fichier comme livre par défaut", - "fileAsBookDefaultHint": "Modèle d'importation des bibliothèques utilisant le mode Fichier comme livre. Chaque fichier est un livre.", + "fileAsBookDefaultHint": "Modèle d'envoi des bibliothèques utilisant le mode Fichier comme livre. Chaque fichier est un livre.", "folderAsBookDefault": "Dossier comme livre par défaut", - "folderAsBookDefaultHint": "Modèle d'importation des bibliothèques utilisant le mode Dossier comme livre. Chaque livre doit se trouver dans son propre dossier.", + "folderAsBookDefaultHint": "Modèle d'envoi des bibliothèques utilisant le mode Dossier comme livre. Chaque livre doit se trouver dans son propre dossier.", "downloadPattern": "Modèle de téléchargement", "downloadPatternHint": "Noms de fichiers suggérés pour les téléchargements de fichiers uniques et les fichiers dans les ZIP d'exportation.", "libraryOverrides": "Paramètres propres aux bibliothèques", @@ -1808,6 +2126,7 @@ "modSort": "Format Nom, Prénom", "modInitial": "Première lettre seulement", "modFixed2": "Deux décimales", + "modMax3": "Trois valeurs maximum, ne rien mettre sinon", "folderOnlyPrefix": "Terminez un modèle par", "folderOnlySuffix": "pour spécifier un dossier uniquement. Le nom du fichier original sera conservé à l'intérieur.", "conditionalLogic": "Logique conditionnelle", @@ -1848,8 +2167,8 @@ "copyPreview": "Copier {label}", "copyExample": "Copier le modèle {label}", "invalidCharacters": "Le modèle contient des caractères non valides", - "fileAsBookSaved": "Valeur par défaut Fichier comme livre enregistrée", - "folderAsBookSaved": "Valeur par défaut Dossier comme livre enregistrée", + "fileAsBookSaved": "Valeur par défaut du mode « Fichier comme livre » enregistrée", + "folderAsBookSaved": "Valeur par défaut du mode « Dossier comme livre » enregistrée", "downloadPatternSaved": "Modèle de téléchargement enregistré", "savePatternFailed": "Échec de l'enregistrement du modèle", "saveDownloadPatternFailed": "Échec de l'enregistrement du modèle de téléchargement", @@ -1862,7 +2181,8 @@ "resetLibraryPattern": "Réinitialiser {name} au modèle par défaut", "tokenTitle": "Titre du livre", "tokenSubtitle": "Sous-titre du livre", - "tokenAuthors": "Auteur(s), séparés par des virgules", + "tokenAuthors": "Auteurs, séparés par des virgules", + "tokenNarrators": "Narrateur(s), séparés par des virgules", "tokenYear": "Année de publication", "tokenSeries": "Nom de la série", "tokenSeriesIndex": "Index de la série (complété par des zéros)", @@ -1873,16 +2193,113 @@ "tokenOriginalFilename": "Nom de fichier d'origine (sans extension)", "tokenExtension": "Extension de fichier (sans point)", "patternHelpIntro": "Les modèles utilisent des jetons comme {titleToken} et {authorsToken}, ainsi que des modificateurs et des segments facultatifs.", - "browseTokensAndExamples": "Parcourir les jetons et les exemples" + "browseTokensAndExamples": "Parcourir les jetons et les exemples", + "subtitleShort": "Modèles de noms de dossiers et de fichiers pour les fichiers stockés.", + "rule": { + "fileAsBook": "Valeur par défaut du mode « Fichier comme livre »", + "folderAsBook": "Valeur par défaut du mode « Dossier comme livre »", + "download": "Nom de fichier de téléchargement" + }, + "howItWorks": { + "title": "Comment un chemin est choisi.", + "summary": "Une bibliothèque disposant de son propre modèle est prioritaire. Toute autre bibliothèque suit la valeur par défaut globale pour son mode d'organisation. Modifier un modèle ne déplace pas les livres déjà sur le disque ; les nouveaux envois le suivent dès le prochain envoi." + }, + "filterRules": "Filtrer les règles", + "librariesGroup": "Bibliothèques", + "customCount": "{custom}/{total} personnalisées", + "noRuleMatches": "Aucune règle ne correspond à « {query} ».", + "unsavedMarker": "Modifications non enregistrées", + "backToRules": "Retour aux règles de nommage", + "appliesToLibraries": "{count, plural, =0 {Aucune bibliothèque n'utilise cette valeur par défaut} one {S'applique à # bibliothèque} other {S'applique à # bibliothèques} many {S'applique à # bibliothèques}}", + "downloadScope": "Téléchargements et ZIP d'exportation", + "badgeInherits": "Hérite de la valeur par défaut", + "badgeUnsaved": "Non enregistré", + "patternLabel": "Modèle", + "readOnlyFromGlobal": "Lecture seule, depuis la valeur par défaut globale", + "useGlobalDefault": "Utiliser la valeur par défaut globale", + "resetToShipped": "Rétablir la valeur par défaut fournie", + "addOverride": "Ajouter une substitution", + "inheritsNotice": "Cette bibliothèque suit {base}. Ajoutez un remplacement pour lui donner un modèle qui lui est propre.", + "libraryRuleHint": "Remplace {base} pour cette bibliothèque uniquement.", + "scopeLibrary": "S'applique uniquement aux envois vers {name}.", + "scopeDownload": "S'applique à chaque téléchargement de fichier unique et à chaque fichier d'un ZIP d'exportation.", + "scopeGlobal": "{count, plural, one {S'applique à # bibliothèque qui n'a pas de modèle qui lui est propre.} other {S'applique à # bibliothèques qui n'ont pas de modèle qui leur est propre.} many {S'applique à # bibliothèques qui n'ont pas de modèle qui leur est propre.}}", + "scopeGlobalNone": "Aucune bibliothèque n'utilise cette valeur par défaut actuellement ; chaque bibliothèque de ce mode possède son propre modèle.", + "unbalancedOptional": "Il manque le crochet fermant d'un groupe facultatif", + "unbalancedToken": "Il manque l'accolade fermante d'un token", + "structure": "Structure", + "paletteOptional": "facultatif", + "paletteOptionalHint": "Entoure un segment afin qu'il soit supprimé lorsqu'un token qu'il contient est vide", + "paletteFallback": "remplacement", + "paletteFallbackHint": "Dans un groupe facultatif, texte utilisé lorsque le côté gauche ne peut pas être renseigné", + "paletteSeparator": "dossier", + "paletteSeparatorHint": "Commence un nouveau niveau de dossier", + "modUpper": "MAJUSCULES", + "modLower": "minuscules", + "recipesLabel": "Ou partez d'une recette", + "recipe": { + "seriesShelf": "Étagère de série", + "calibre": "Style Calibre", + "alphabetical": "Alphabétique", + "flat": "À plat, sans dossiers", + "originalName": "Nom de fichier d'origine", + "authorTitle": "Auteur et titre", + "titleOnly": "Titre uniquement", + "seriesOrdered": "Série ordonnée" + }, + "resultPanel": "Résultat résolu", + "resultFor": "Résultat : {rule}", + "copyResult": "Copier le résultat résolu", + "resultCopied": "Résultat résolu copié dans le presse-papiers", + "resultCopyFailed": "Impossible de copier le résultat résolu", + "sampleBookNote": "Livre exemple utilisé pour chaque aperçu", + "missingMetadata": "Si des métadonnées sont manquantes", + "caseNoSeriesLabel": "Aucune série", + "caseNoYearLabel": "Aucune année", + "caseNoAuthorLabel": "Aucun auteur", + "previewEmpty": "Ce modèle ne produit rien ; le nom de fichier d'origine serait donc utilisé à la place.", + "previewEmptyShort": "Ne produit rien", + "crossPlatformShortHint": "Remplace les caractères refusés par Windows. Les aperçus tiennent compte de ce réglage.", + "rulesSaved": "{count, plural, one {# règle de nommage enregistrée} other {# règles de nommage enregistrées} many {# règles de nommage enregistrées}}", + "rulesSaveFailed": "{count, plural, one {Impossible d'enregistrer # règle de nommage} other {Impossible d'enregistrer # règles de nommage} many {Impossible d'enregistrer # règles de nommage}}", + "rulesPartiallySaved": "{saved} enregistrées, {failed} en échec. Les règles en échec comportent encore des modifications non enregistrées.", + "save": { + "unsaved": "{count, plural, one {# modification non enregistrée} other {# modifications non enregistrées} many {# modifications non enregistrées}}", + "upToDate": "Aucune modification non enregistrée", + "discard": "Ignorer", + "action": "Enregistrer les modifications", + "blocked": "Corrigez le modèle invalide avant d'enregistrer" + }, + "examplesDescription": "Constructions que les recettes ne couvrent pas. Un modèle se terminant par une barre oblique produit un dossier et y conserve le nom de fichier envoyé.", + "examplesApply": "Appliquer", + "examplesApplyAria": "Appliquer le modèle {label}", + "examplesUploadOnly": "Il s'agit de modèles d'envoi, affichés ici à titre de référence. Basculez vers une règle Fichier comme livre ou Dossier comme livre pour en appliquer un.", + "examplesFileModeOnly": "Dossier comme livre nécessite son propre segment de nom de fichier ; cette construction s'applique donc uniquement aux bibliothèques Fichier comme livre.", + "example": { + "seriesOrStandalone": "Série ou dossier autonome", + "optionalSubtitle": "Sous-titre facultatif", + "languageFolder": "Dossier de langue", + "publisherFolder": "Dossier d'éditeur", + "stackedOptional": "Dossiers facultatifs imbriqués", + "folderDrop": "Dossier uniquement, conserver le nom de fichier envoyé" + }, + "exampleCase": { + "complete": "Complet", + "noSeries": "Aucune série", + "noSubtitle": "Aucun sous-titre", + "noLanguage": "Aucune langue", + "noPublisher": "Aucun éditeur" + }, + "unknownModifier": "Modificateur « {modifier} » inconnu. Il sera ignoré et la valeur restera inchangée." }, "kobo": { - "title": "Kobo Synchronisation", + "title": "Synchronisation Kobo", "subtitle": "Associez votre appareil Kobo pour synchroniser votre bibliothèque.", "copy": "Copier", "never": "Jamais", "justNow": "Juste maintenant", "minutesAgo": "il y a {count} m", - "hoursAgo": "il y a {count}h", + "hoursAgo": "il y a {count} h", "daysAgo": "Il y a {count}j", "loadFailed": "Échec du chargement", "devicePaired": "Appareil couplé avec succès", @@ -1896,7 +2313,7 @@ "creating": "Création...", "createDevice": "Créer un appareil", "createDeviceFailed": "Échec de la création de l'appareil", - "deviceRegistered": "Appareil \"{name}\" enregistré", + "deviceRegistered": "Appareil « {name} » enregistré", "noDevicesYet": "Aucun appareil pour l'instant", "noDevicesHint": "Ajoutez un appareil pour commencer à synchroniser vos livres avec votre Kobo.", "lastSync": "Dernière synchronisation : {time}", @@ -1904,8 +2321,8 @@ "revokeAccess": "Révoquer l'accès", "deviceRenamed": "Appareil renommé", "renameDeviceFailed": "Échec du renommage de l'appareil", - "revokeConfirm": "Révoquer l'accès pour \"{name}\" ? L'appareil ne pourra pas se synchroniser tant qu'il n'aura pas été réappairé.", - "accessRevoked": "Accès révoqué pour \"{name}\"", + "revokeConfirm": "Révoquer l'accès pour « {name} » ? L'appareil ne pourra pas se synchroniser tant qu'il n'aura pas été réappairé.", + "accessRevoked": "Accès révoqué pour « {name} »", "revokeFailed": "Échec de la révocation de l'accès", "syncUrlCopied": "Synchroniser URL copié dans le presse-papiers", "syncUrlCopyFailed": "Échec de la copie de la synchronisation URL", @@ -1915,6 +2332,7 @@ "syncHighlights": "Synchronisez les passages surlignés de BookOrbit avec Kobo", "syncHighlightsHint": "Envoyez les passages surlignés réalisés dans BookOrbit ou KOReader à votre Kobo. Les passages surlignés Kobo sont importées dans BookOrbit même lorsque cette option est désactivée. Les annotations liées synchronisent les modifications et les suppressions dans les deux sens. Nécessite la livraison KEPUB ; le livre sur Kobo doit être le KEPUB téléchargé depuis BookOrbit.", "storeSync": "Inclure les titres du magasin Kobo", + "storeSyncHint": "Envoyez aussi les livres de votre compte Kobo (y compris Kobo Plus et vos achats) en plus de votre bibliothèque BookOrbit. Sans cette option, seuls les livres BookOrbit sont envoyés vers l'appareil. Les titres du magasin sont téléchargés directement depuis Kobo et ne sont pas ajoutés à votre bibliothèque BookOrbit.", "convertKepub": "Convertir en KEPUB", "convertKepubHint": "Envoyez des EPUB éligibles en tant que KEPUB. Cela reste activé lorsque la synchronisation de la progression ou les passages surlignés de BookOrbit-to-Kobo sont activées. Lors de la prochaine synchronisation Kobo, les livres concernés sont à nouveau proposés en téléchargement KEPUB ; supprimez toute ancienne copie de EPUB si Kobo continue de l'ouvrir.", "forceHyphenation": "Forcer la césure", @@ -1988,8 +2406,8 @@ "readingPositionSynced": "Position de lecture synchronisée", "labelWithTitle": "{label} : {title}", "updateCount": "{count, plural, one {# mettre à jour} other {# mises à jour} many {# mises à jour}}", - "directionToKobo": "BookOrbit -> Kobo", - "directionToBookOrbit": "Kobo -> BookOrbit", + "directionToKobo": "BookOrbit → Kobo", + "directionToBookOrbit": "Kobo → BookOrbit", "twoWaySyncEnabled": "Synchronisation bidirectionnelle activée", "deviceProgressSaved": "Progression de l'appareil enregistrée", "summary": { @@ -2004,7 +2422,7 @@ "noHighlightChangesNeededFor": "Aucune modification des passages surlignés n'est nécessaire pour {title}", "noHighlightChangesNeeded": "Aucun changement des passages surlignés n'est nécessaire", "highlightsSentToKoboFor": "{count, plural, one {# Passage surligné envoyé à Kobo pour {title}} other {# Passages surlignés envoyés à Kobo pour {title}} many {# Passages surlignés envoyés à Kobo pour {title}}}", - "highlightsSentToKobo": "{count, plural, one {# Passage surlignéenvoyée à Kobo} other {# Passages surlignés envoyés à Kobo} many {# Passages surlignés envoyés à Kobo}}", + "highlightsSentToKobo": "{count, plural, one {# passage surligné envoyé à Kobo} other {# passages surlignés envoyés à Kobo} many {# passages surlignés envoyés à Kobo}}", "noKoboHighlightChangesFor": "Aucun nouveau passage surligné via Kobo pour {title}", "noKoboHighlightChanges": "Aucun nouveau passage surligné via Kobo", "highlightsImportedFromKoboFor": "{count, plural, one {# Passage surligné importé de Kobo pour {title}} other {# Passages surlignés importés depuis Kobo pour {title}} many {# Passages surlignés importés depuis Kobo pour {title}}}", @@ -2083,7 +2501,7 @@ "never": "Jamais", "justNow": "Juste maintenant", "minutesAgo": "il y a {count} m", - "hoursAgo": "il y a {count}h", + "hoursAgo": "il y a {count} h", "daysAgo": "Il y a {count}j", "unknown": "Inconnu", "updateAvailable": "Mise à jour disponible", @@ -2111,10 +2529,13 @@ "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.", + "deviceNotice": "Les appareils utilisant les anciens identifiants doivent être reconnectés ou mis à jour avec un nouveau paquet de plugin téléchargé.", "showPassword": "Afficher le nouveau mot de passe", "hidePassword": "Cacher le nouveau mot de passe", "save": "Enregistrer les identifiants", - "saving": "Sauvegarde en cours..." + "saving": "Sauvegarde en cours...", + "updated": "Identifiants KOReader mis à jour", + "updateFailed": "Échec de la mise à jour des identifiants KOReader" }, "creating": "Création...", "create": "Créer", @@ -2133,6 +2554,7 @@ "setup": "Configuration", "pluginServerUrl": "Serveur de plugins URL", "syncUrl": "URL de synchronisation KOReader", + "syncUrlHint": "Fonctionne avec le plugin BookOrbit et la synchronisation de progression intégrée à KOReader.", "copied": "Copié", "copyUrl": "Copier URL", "preconfiguredPlugin": "Plugin BookOrbit préconfiguré", @@ -2144,7 +2566,7 @@ "noDevicesSynced": "Aucun appareil n'a encore été synchronisé", "noDevicesSyncedHint": "Installez le plugin BookOrbit pour une synchronisation complète ou configurez la synchronisation de la progression des stocks de KOReader pour les mises à jour uniquement sur la progression.", "lastSyncLabel": "Dernière synchronisation :", - "lastBookLabel": "Dernier livre :", + "lastBookLabel": "Dernier livre :", "noneYet": "Aucun pour l'instant", "pluginActivity": "Activité du plugin", "noPluginActivity": "Aucune activité du plugin n'a encore été signalée.", @@ -2156,7 +2578,7 @@ "syncedTotals": "Totaux synchronisés", "trashedHighlights": "Passages surlignés mis à la corbeille", "pendingDeletes": "{count, plural, =0 {aucun passage surligné supprimé en attente de reconnaissance du plugin KOReader.} one {# passage surligné en attente de confirmation du plugin KOReader.} other {# passages surlignés supprimés en attente de reconnaissance du plugin KOReader.} many {# passages surlignés supprimés en attente de reconnaissance du plugin KOReader.}}", - "failedPositions": "{count, plural, =0 {aucune position de passage surligné ne nécessite d’attention.} one {# La position du passage surligné nécessite une attention particulière.} other {# des passages surlignés nécessitent une attention particulière.} many {# des passages surlignés nécessitent une attention particulière.}}", + "failedPositions": "{count, plural, =0 {aucune position de passage surligné ne nécessite d'attention.} one {# La position du passage surligné nécessite une attention particulière.} other {# des passages surlignés nécessitent une attention particulière.} many {# des passages surlignés nécessitent une attention particulière.}}", "setupGuide": "Guide de configuration", "setupSteps": "KOReader étapes de configuration", "setupStepsHint": "Utilisez le plugin BookOrbit pour la navigation dans le catalogue, les téléchargements, la progression, la lecture des événements et les passages surlignés. Utilisez le plugin stock pour progresser uniquement.", @@ -2172,7 +2594,7 @@ "stockStep1Prefix": "Sur votre appareil KOReader, accédez à", "stockStep1Suffix": ".", "stockStep2": "Définissez le serveur de synchronisation personnalisé sur URL indiqué ci-dessus.", - "stockStep2InlineUrl": "Définir le serveur de synchronisation personnalisé à l'URL suivante :", + "stockStep2InlineUrl": "Définir le serveur de synchronisation personnalisé à l'URL suivante :", "stockStep3": "Saisissez le nom d'utilisateur et le mot de passe que vous avez créés, puis appuyez sur Connexion.", "locationNote": "BookOrbit enregistre les emplacements EPUB compatibles KOReader à partir du lecteur Web. La restauration doit atterrir à proximité de la même position, bien que l'emplacement exact de la ligne puisse varier selon le lecteur et la disposition EPUB.", "dangerZone": "Zone dangereuse", @@ -2203,7 +2625,7 @@ "lastOpened": "Dernière ouverture :", "firstSeen": "Vu pour la première fois :", "lastSeen": "Vu pour la dernière fois :", - "linked": "En lien :", + "linked": "En lien :", "updated": "Mis à jour :", "linkedTo": "Lié à {title}", "loadingUnmatched": "Chargement des livres sans correspondance...", @@ -2215,7 +2637,7 @@ "unknownFile": "Fichier KOReader inconnu {hash}", "unknownAuthor": "Auteur inconnu", "noTitleOrAuthor": "Aucun titre ni auteur signalé", - "bookNumber": "BookOrbit livre n°{id}", + "bookNumber": "BookOrbit livre n° {id}", "toast": { "unmatchedRefreshed": "Livres sans correspondance actualisés", "unmatchedRefreshFailed": "Échec de l'actualisation des livres sans correspondance", @@ -2241,7 +2663,7 @@ "noBooksFound": "Aucun livre trouvé.", "untitledBook": "Livre sans titre", "selected": "Sélectionné", - "select": "Sélectionnez", + "select": "Sélectionner", "loadMore": "Charger plus", "confirmTitle": "Confirmer le lien KOReader", "koreader": "KOReader", @@ -2263,7 +2685,7 @@ "unlinkConfirmBody": "Les synchronisations futures pour ce hachage cesseront de se résoudre en {title} jusqu'à ce qu'il soit à nouveau lié. Les statistiques déjà synchronisées resteront sur leur livre BookOrbit actuel.", "dismissConfirmTitle": "Ignorer {title} ?", "dismissConfirmBody": "Cela le supprime de votre liste de livres sans correspondance. Si un appareil signale à nouveau ce hachage, il réapparaîtra en tant que nouvelle entrée.", - "dismissAllConfirmTitle": "{count, plural, =0 {Ignorer tous les livres sans correspondance ?} one {Ignorer # livre sans correspondance ?} other {Ignorer # livres sans correspondance ?} many {Ignorer # livres sans correspondance ?}}", + "dismissAllConfirmTitle": "{count, plural, =0 {Ignorer tous les livres sans correspondance ?} one {Ignorer # livre sans correspondance ?} other {Ignorer # livres sans correspondance ?} many {Ignorer # livres sans correspondance ?}}", "dismissAllConfirmBody": "Cela efface toute votre liste de livres sans correspondance, pas seulement la page actuelle. Si un appareil signale à nouveau l'un de ces hachages, il réapparaîtra sous la forme d'une nouvelle entrée.", "changeLinkTitle": "Modifier le lien KOReader", "linkBookTitle": "Lien vers le livre KOReader", @@ -2274,7 +2696,7 @@ "noBooksFound": "Aucun livre trouvé.", "untitledBook": "Livre sans titre", "selected": "Sélectionné", - "select": "Sélectionnez", + "select": "Sélectionner", "loadMore": "Charger plus", "loadingMore": "Chargement...", "confirmLinkTitle": "Confirmer le lien KOReader", @@ -2291,6 +2713,9 @@ "removeDeviceFailed": "Échec de la suppression de l'appareil", "removeDeviceConfirmTitle": "Supprimer {device} ?", "removeDeviceConfirmBody": "Cela supprime définitivement la progression synchronisée de cet appareil, l'activité de lecture et toutes les entrées de livre sans correspondance qui ne sont plus signalées par un autre appareil. Si l'appareil se synchronise à nouveau plus tard, il réapparaîtra en tant que nouvelle entrée.", + "deleteDeviceDataConfirmTitle": "Supprimer les données synchronisées de {device} ?", + "deleteDeviceDataConfirmBody": "Cette action supprime définitivement la progression synchronisée de cet appareil, l'activité de lecture page par page et les entrées de livres non appariés qui ne sont plus signalées par un autre appareil. Les sessions de lecture déjà enregistrées dans vos statistiques sont conservées. Si l'appareil se synchronise à nouveau plus tard, il réapparaîtra comme une nouvelle entrée.", + "devicesHint": "Retirer un appareil le masque tout en conservant tout ce qu'il a synchronisé. La suppression de ses données synchronisées est irréversible.", "retire": "Retirer", "retiring": "Retrait...", "restore": "Restaurer", @@ -2301,6 +2726,7 @@ "deviceRestored": "Périphérique restauré", "retireDeviceFailed": "Échec au retrait du périphérique", "restoreDeviceFailed": "Échec de restauration du périphérique", + "retiredDevices": "{count, plural, one {# appareil retiré} other {# appareils retirés} many {# appareils retirés}}", "retiredOnLabel": "Retiré" }, "opds": { @@ -2331,24 +2757,24 @@ "notes": "OPDS Remarques", "notesBody": "Utilisez les comptes OPDS dans les applications de lecture. Gardez les informations d'identification privées et alternez les mots de passe s'ils sont partagés accidentellement.", "deleteConfirmTitle": "Supprimer le compte OPDS ?", - "deleteConfirmBody": "Supprimez \"{username}\". Cette action ne peut pas être annulée.", + "deleteConfirmBody": "Supprimez « {username} ». Cette action ne peut pas être annulée.", "sortRecent": "Récemment ajouté", "sortTitleAsc": "Titre (A-Z)", "sortTitleDesc": "Titre (Z-A)", "sortAuthorAsc": "Auteur (A-Z)", "sortAuthorDesc": "Auteur (Z-A)", "sortSeriesAsc": "Série (A-Z)", - "sortSeriesDesc": "Série (ZA)", + "sortSeriesDesc": "Série (Z–A)", "serverEnabled": "Serveur OPDS activé", "serverDisabled": "Serveur OPDS désactivé", "updateSettingsFailed": "Échec de la mise à jour des paramètres OPDS", "urlCopied": "OPDS URL copié dans le presse-papiers", "urlCopyFailed": "Échec de la copie de OPDS URL", "createUserFailed": "Échec de la création de l'utilisateur OPDS", - "userCreated": "OPDS utilisateur \"{username}\" créé", - "sortOrderUpdated": "Ordre de tri mis à jour pour \"{username}\"", + "userCreated": "OPDS utilisateur « {username} » créé", + "sortOrderUpdated": "Ordre de tri mis à jour pour « {username} »", "updateSortFailed": "Échec de la mise à jour de l'ordre de tri", - "userDeleted": "OPDS utilisateur \"{username}\" supprimé", + "userDeleted": "OPDS utilisateur « {username} » supprimé", "deleteUserFailed": "Échec de la suppression de l'utilisateur OPDS", "labelCopied": "{label} copié", "copyLabelFailed": "Échec de la copie de {label}" @@ -2371,12 +2797,52 @@ } }, "nav": { - "title": "Réglages", - "ariaLabel": "Sections de réglages", - "searchPlaceholder": "Réglages de recherche", + "title": "Paramètres", + "ariaLabel": "Sections des paramètres", + "searchPlaceholder": "Rechercher des paramètres", + "clearSearch": "Effacer la recherche", + "noResults": "Aucun paramètre ne correspond à « {query} ».", + "shortcutHint": "Appuyez sur Cmd K pour accéder directement à un paramètre", "groups": { - "library": "Galerie" - } + "you": "Vous", + "library": "Bibliothèque", + "devices": "Appareils et synchronisation", + "server": "Serveur" + }, + "descriptions": { + "profile": "Votre nom, votre e-mail, votre mot de passe et vos sessions actives.", + "appearanceTheme": "Thème, couleur d'accent, arrière-plan et arrondi des angles.", + "appearanceBookCovers": "Ombres de couverture, effets de dos et visuels de remplacement.", + "appearanceIcons": "Choisissez le style d'icônes utilisé dans toute l'application.", + "appearanceLayout": "Vue, densité et espacement par défaut de la bibliothèque.", + "appearanceBehavior": "Comment la bibliothèque réagit lorsque vous parcourez et triez.", + "appearanceLanguage": "Langue de l'interface et formats régionaux.", + "readerEbook": "Polices, espacement et comportement des pages pour les ebooks.", + "readerPdf": "Rendu, zoom et ajustement des pages pour les PDF.", + "readerComics": "Sens de lecture et affichage en double page pour les bandes dessinées.", + "readerAudio": "Vitesse de lecture, intervalles de saut et minuterie de veille.", + "readerFonts": "Polices disponibles pendant la lecture.", + "readerGeneral": "Paramètres par défaut communs à tous les modes de lecture.", + "notifications": "Ce que BookOrbit vous signale, et où.", + "privacy": "Statistiques de lecture, liens partagés et visibilité de l'activité.", + "restrictions": "Classifications d'âge et contenu masqué pour ce compte.", + "libraries": "Chemins d'analyse, dossiers surveillés et règles d'importation.", + "fileNaming": "Modèles de noms de dossiers et de fichiers pour les fichiers stockés.", + "maintenance": "Réanalyses, doublons, orphelins et reconstruction du cache.", + "kobo": "Point de synchronisation, proxy boutique et correspondance des étagères.", + "koreader": "Synchronisation de la progression et correspondance des documents.", + "opds": "Flux de catalogue pour les applications de lecture tierces.", + "email": "Envoi SMTP et adresses d'envoi vers un appareil.", + "hardcover": "Synchronisez le statut de lecture et les avis avec Hardcover.", + "users": "Comptes, rôles, permissions et invitations.", + "accountActivity": "Activité de lecture et de session par utilisateur.", + "magicLinks": "Liens de partage et de connexion sans mot de passe.", + "oidc": "Fournisseur d'authentification unique (SSO), claims et provisionnement.", + "serverFonts": "Polices installées pour tous les lecteurs de ce serveur.", + "bookDock": "Actions rapides affichées sur les pages des livres.", + "auditLog": "Qui a modifié quoi, et quand." + }, + "backToApp": "Retour à la bibliothèque" } }, "achievements": { @@ -2387,7 +2853,7 @@ "noMatchFilter": "Aucune réalisation ne correspond à ce filtre", "secretAchievement": "Réalisation secrète", "earnedOn": "Vous avez gagné {date}", - "whileReading": "En lisant « {title} »", + "whileReading": "En lisant « {title} »", "tierProgress": "Niveau {earned} sur {total}", "progressToNext": "{current} / {threshold} à {name}", "rarity": { @@ -2406,8 +2872,8 @@ "adminFeature": { "accountActivity": { "title": "Activité du compte", - "subtitle": "Examinez l’activité d’authentification du compte sans exposer l’historique de lecture.", - "privacyNotice": "Cette page signale uniquement les connexions et les actualisations d’authentification. Il n'utilise pas l'historique de lecture, la progression du livre ou l'activité de la bibliothèque.", + "subtitle": "Examinez l'activité d'authentification du compte sans exposer l'historique de lecture.", + "privacyNotice": "Cette page signale uniquement les connexions et les actualisations d'authentification. Il n'utilise pas l'historique de lecture, la progression du livre ou l'activité de la bibliothèque.", "privacyLabel": "À propos de la confidentialité des activités du compte", "never": "Jamais", "openInsightsFor": "Ouvrir les informations de lecture partagées pour {name}", @@ -2485,14 +2951,14 @@ "emptyTitle": "Aucune activité de lecture pendant cette période", "noData": "Aucune donnée de lecture enregistrée pour cette période.", "sourceNames": { - "web": "Lecteur Web", + "web": "Lecteur web", "koreader": "KOReader", "manual": "Manuel", "kobo": "Kobo", "unknown": "Inconnu" }, "formats": "Formats", - "genres": "Genre", + "genres": "Genres", "broadGenres": { "science_fiction": "Science-fiction", "fantasy": "Fantaisie", @@ -2532,7 +2998,7 @@ "title": "Lien de réinitialisation du mot de passe", "description": "Partagez ce lien avec l'utilisateur. Il expire dans 15 minutes.", "copy": "Copier", - "copied": "Copié!", + "copied": "Copié !", "copyFailed": "Échec de la copie", "notShownAgain": "Ce lien ne sera plus affiché." }, @@ -2607,7 +3073,10 @@ "email": "Courriel", "access": "Accès", "status": "Statut", - "actions": "Actions" + "actions": "Actions", + "user": "Utilisateur", + "libraries": "Bibliothèques", + "lastActive": "Dernière activité" }, "adminBadge": "Administrateur", "permissionCount": "{count, plural, =0 {aucune autorisation} one {une autorisation} other {# autorisations} many {# autorisations}}", @@ -2626,7 +3095,7 @@ "resetPasswordSharedHintFull": "Les comptes partagés n'ont pas de mot de passe.", "deleteUserAction": "Supprimer un utilisateur", "deleteDialogTitle": "Supprimer l'utilisateur ?", - "deleteDialogBody": "Supprimez l'utilisateur \"{username}\". Cette action ne peut pas être annulée.", + "deleteDialogBody": "Supprimez l'utilisateur « {username} ». Cette action ne peut pas être annulée.", "deleting": "Suppression...", "errors": { "load": "Échec du chargement", @@ -2637,7 +3106,7 @@ "selfRegistration": { "title": "Auto-inscription", "subtitle": "Définir si les visiteurs peuvent créer leurs propres comptes.", - "label": "Autoriser l’auto-inscription", + "label": "Autoriser l'auto-inscription", "hint": "Lorsque cette option est activée, la page de connexion affiche un lien pour créer un compte.", "enabledNotice": "Les nouveaux comptes ont par défaut uniquement les accès à la bibliothèque ci-dessous. Définissez les permissions nécessaires pour qu'ils puissent utiliser des fonctionnalités protégées.", "loadError": "Échec du chargement des paramètres d'auto-inscription", @@ -2645,7 +3114,7 @@ }, "defaultLibraryAccess": { "title": "Accès à la bibliothèque par défaut", - "subtitle": "Accès de visualisation accordé aux utilisateurs auto-enregistrés et dotés de OIDC.", + "subtitle": "Accès en lecture seule accordé aux utilisateurs auto-enregistrés et provisionnés via OIDC.", "description": "Sélectionnez les bibliothèques attribuées automatiquement aux nouveaux utilisateurs.", "noLibraries": "Aucune bibliothèque disponible.", "save": "Enregistrer les valeurs par défaut", @@ -2670,12 +3139,66 @@ }, "pagination": { "label": "Pagination des utilisateurs", - "page": "Page {page} sur {totalPages}" + "page": "Page {page} sur {totalPages}", + "showing": "Affichage de {shown} comptes sur {total}" }, "editUserAria": "Modifier {name}", "resetPasswordAria": "Réinitialiser le mot de passe de {name}", "deleteUserAria": "Supprimer {name}", - "moreActionsAria": "Plus d'actions pour {name}" + "moreActionsAria": "Plus d'actions pour {name}", + "headerSummary": "{count, plural, =0 {Aucun compte} one {# compte} other {# comptes} many {# comptes}} · {admins} avec accès administrateur", + "noEmail": "Aucune adresse", + "editAccount": "Modifier le compte", + "cardMeta": "{access} · {libraries} · {lastActive}", + "accessTier": { + "superuser": "Superutilisateur", + "admin": "Administrateur", + "standard": "Standard", + "custom": "Personnalisé", + "none": "Aucun accès" + }, + "libraries": { + "all": "Les {total}", + "some": "{granted} sur {total}" + }, + "statusLocked": "Verrouillé", + "status": { + "never": "Jamais", + "neverSignedIn": "Jamais connecté", + "defaultPassword": "Mot de passe par défaut", + "contentFiltered": "Contenu filtré", + "unlocksIn": "Se déverrouille {when}" + }, + "attention": { + "title": "Nécessite une attention", + "count": "{count, plural, one {# compte} other {# comptes} many {# comptes}}", + "filter": "{count, plural, one {# nécessite une attention} other {# nécessitent une attention} many {# nécessitent une attention}}", + "more": "{count} de plus non affichés ici", + "reason": { + "locked": "{name} est verrouillé après trop de tentatives de connexion échouées", + "neverSignedIn": "{name} ne s'est jamais connecté", + "defaultPassword": "{name} utilise encore le mot de passe défini à la création du compte" + }, + "detail": { + "unlocksIn": "Se déverrouille automatiquement {when}", + "created": "Créé {when}", + "linkExpired": "Créé {when} · le lien de connexion a expiré", + "linkValid": "Créé {when} · lien de connexion valide jusqu'au {expiry}" + }, + "action": { + "unlock": "Déverrouiller maintenant", + "sendResetLink": "Envoyer un lien de réinitialisation", + "sendNewLink": "Envoyer un nouveau lien" + }, + "collapse": "Masquer", + "expand": "Afficher" + }, + "defaults": { + "title": "Valeurs par défaut pour les nouveaux comptes", + "appliesTo": "S'applique à l'auto-inscription et à OIDC", + "startingLibraries": "Bibliothèques de départ", + "startingLibrariesHint": "Accès en lecture seule accordé automatiquement à chaque nouveau compte." + } } }, "annotations": { @@ -2735,7 +3258,7 @@ "pendingVersion": "En attente de v{version}", "syncedAt": "synchronisé {date}", "format": { - "webReader": "Lecteur Web", + "webReader": "Lecteur web", "koreader": "KOReader", "pdf": "PDF", "kobo": "Kobo" @@ -2770,8 +3293,8 @@ "openInReader": "Ouvrir dans le lecteur", "restore": "Restaurer", "deleteForever": "Supprimer pour toujours", - "editNote": "Modifier la note", - "addNote": "Ajouter une note", + "editNote": "Modifier la remarque", + "addNote": "Ajouter une remarque", "colorAndStyle": "Couleur et style", "copied": "Copié", "copyText": "Copier le texte", @@ -2810,7 +3333,7 @@ "bulkTrashed": "{count, plural, =0 {Aucune annotation déplacée vers la corbeille} one {Déplacé # annotation à la corbeille} other {Déplacé # annotations à la corbeille} many {Déplacé # annotations à la corbeille}}", "bulkRestored": "{count, plural, =0 {Restauré sans annotations} one {Restauré # annotation} other {Restauré # annotations} many {Restauré # annotations}}", "bulkRecolored": "{count, plural, =0 {Recoloré sans annotations} one {Recoloré # annotation} other {Recoloré # annotations} many {Recoloré # annotations}}", - "bulkRestyled": "{count, plural, =0 {Restylé sans annotations} one {Restylé # annotation} other {Restylé # annotations} many {Restylé # annotations}}" + "bulkRestyled": "{count, plural, =0 {Aucune annotation restylée} one {# annotation restylée} other {# annotations restylées} many {# annotations restylées}}" } } }, @@ -2846,7 +3369,7 @@ "userIdCompact": "#{id}", "targetAdditional": "et {count, plural, one {# plus de cible} other {# plus de cibles} many {# plus de cibles}}", "bookImpact": "{count, plural, one {# livre} other {# livres} many {# livres}}", - "entryDetailsLabel": "Détails de l'événement d'audit n°{id}", + "entryDetailsLabel": "Détails de l'événement d'audit n° {id}", "detailEventId": "ID d'événement", "detailOccurredAt": "Survenu", "detailActor": "Acteur", @@ -2863,7 +3386,7 @@ "detailResource": "Ressource : {value}", "detailResourceId": "ID de ressource : {value}", "deletedBooks": "Livres supprimés", - "deletedBookDetail": "{title} (livre n°{id})", + "deletedBookDetail": "{title} (livre n° {id})", "untitledBook": "Sans titre", "deletedBooksOmitted": "{count, plural, one {# livre supplémentaire omis} other {# livres supplémentaires omis} many {# livres supplémentaires omis}}", "showing": "Affichage de {from}-{to} sur {total}", @@ -2927,7 +3450,7 @@ "Author": "Auteur", "AppSettings": "Paramètres de l'application", "Genre": "Genre", - "Tag": "Étiquette", + "Tag": "Balise", "KoboDevice": "Appareil Kobo", "EmailProvider": "Fournisseur de messagerie", "EmailTemplate": "Modèle d'e-mail", @@ -2981,7 +3504,7 @@ "LibraryAccessRevoke": "Révoquer l'accès à la bibliothèque", "LibraryWriteMetadataToFiles": "Écrire des métadonnées dans des fichiers", "LibraryBulkRename": "Renommer les fichiers de la bibliothèque", - "BookUpload": "Télécharger le livre", + "BookUpload": "Envoyer le livre", "BookMetadataUpdate": "Mettre à jour les métadonnées du livre", "BookMetadataLocksUpdate": "Mettre à jour les verrous des métadonnées", "BookDelete": "Supprimer le livre", @@ -3040,7 +3563,10 @@ "EmailRecipientGroupUpdate": "Mettre à jour le groupe de destinataires", "EmailRecipientGroupDelete": "Supprimer le groupe de destinataires", "EmailRecipientGroupMemberAdd": "Ajouter un destinataire au groupe", - "EmailRecipientGroupMemberRemove": "Supprimer le destinataire du groupe" + "EmailRecipientGroupMemberRemove": "Supprimer le destinataire du groupe", + "MaintenanceMissingBooksClean": "Livres manquants nettoyés", + "MaintenanceBrokenCoversClean": "Couvertures cassées nettoyées", + "MaintenanceOrphanedCoversClean": "Dossiers de couvertures orphelines nettoyés" } }, "auth": { @@ -3073,8 +3599,8 @@ "signIn": "Connectez-vous", "signingIn": "Connexion...", "orDivider": "ou", - "forgotPassword": "Mot de passe oublié ?", - "noAccount": "Vous n'avez pas de compte ?", + "forgotPassword": "Mot de passe oublié ?", + "noAccount": "Vous n'avez pas de compte ?", "signUp": "Inscrivez-vous", "registeredNotice": "Compte créé. Connectez-vous pour continuer. Un administrateur doit vous accorder les permissions nécessaires avant de pouvoir accéder à la bibliothèque.", "errors": { @@ -3126,7 +3652,7 @@ "subtitle": "Inscrivez-vous pour commencer.", "createAccount": "Créer un compte", "creatingAccount": "Création du compte...", - "haveAccount": "Vous avez déjà un compte ?", + "haveAccount": "Vous avez déjà un compte ?", "signIn": "Connectez-vous", "errors": { "closed": "L'auto-inscription n'est pas possible sur ce serveur.", @@ -3157,7 +3683,7 @@ }, "changePassword": { "title": "Changer le mot de passe", - "saving": "Sauvegarde…", + "saving": "Sauvegarde...", "forcedNotice": "Vous devez définir un nouveau mot de passe avant de continuer.", "errors": { "failed": "Échec de la modification du mot de passe" @@ -3174,7 +3700,7 @@ }, "author": { "card": { - "portraitAlt": "{name}portrait", + "portraitAlt": "{name} portrait", "viewDetails": "Afficher les détails de l'auteur", "refreshMetadata": "Actualiser les métadonnées", "deleteAuthor": "Supprimer l'auteur" @@ -3184,7 +3710,7 @@ }, "header": { "never": "Jamais", - "portraitAlt": "{name}portrait", + "portraitAlt": "{name} portrait", "actions": "Actions", "editAuthor": "Modifier l'auteur", "mergeAuthors": "Fusionner les auteurs", @@ -3197,7 +3723,12 @@ "noBiography": "Aucune biographie disponible. Utilisez le menu pour actualiser les métadonnées.", "previewFrom": "Aperçu à partir de {provider}. Enregistrez les métadonnées pour les conserver.", "booksLabel": "Livres", - "lastAdded": "Dernier ajout" + "lastAdded": "Dernier ajout", + "born": "Date de naissance", + "died": "Date de décès", + "website": "Site web", + "genres": "Genres", + "influences": "Influences" }, "list": { "title": "Auteurs", @@ -3236,16 +3767,16 @@ "deleteSelected": "Supprimer la sélection", "deleting": "Suppression...", "exitSelection": "Quitter la sélection", - "confirmDeleteCount": "{count, plural, =0 {Supprimer # auteur ?} one {Supprimer # auteur ?} other {Supprimer # des auteurs ?} many {Supprimer # des auteurs ?}}" + "confirmDeleteCount": "{count, plural, =0 {Supprimer # auteur ?} one {Supprimer # auteur ?} other {Supprimer # des auteurs ?} many {Supprimer # des auteurs ?}}" }, "toast": { "refreshed": "Métadonnées de l'auteur actualisées", "refreshedNoImage": "Métadonnées actualisées, mais aucune image d'auteur n'a été trouvée.", "refreshFailed": "Échec de l'actualisation des métadonnées de l'auteur", - "bulkRefreshPartial": "Auteur(s) {updated} actualisé(s), {failed} a échoué", - "bulkRefreshSuccess": "Métadonnées actualisées pour {updated} auteur(s)", + "bulkRefreshPartial": "Actualisation des auteurs - réussites : {updated} ; échecs : {failed}", + "bulkRefreshSuccess": "Auteurs dont les métadonnées ont été actualisées : {updated}", "bulkRefreshFailed": "Échec de l'actualisation des auteurs sélectionnés", - "deleteSuccess": "{count, plural, =0 {# auteurs supprimés ; {books} livres concernés} one {# auteur supprimé ; {books} livres concernés} other {# auteurs supprimés ; {books} livres concernés} many {# auteurs supprimés ; {books} livres concernés}}", + "deleteSuccess": "{count, plural, =0 {# auteurs supprimés ; {books} livres concernés} one {# auteur supprimé ; {books} livres concernés} other {# auteurs supprimés ; {books} livres concernés} many {# auteurs supprimés ; {books} livres concernés}}", "deleteFailed": "Échec de la suppression des auteurs" } }, @@ -3261,25 +3792,25 @@ "sortName": "Nom du tri", "description": "Descriptif", "image": "Images", - "uploading": "Téléchargement...", + "uploading": "Envoi en cours...", "replaceImage": "Remplacer l'image", - "uploadImage": "Télécharger une image", + "uploadImage": "Envoyer une image", "removing": "Suppression...", "removeImage": "Supprimer l'image", - "imageHint": "PNG/JPEG/WEBP/GIF/BMP jusqu'à {size} Mo", + "imageHint": "PNG/JPEG/WEBP/GIF/BMP jusqu'à {size} Mo", "saving": "Sauvegarde..." }, "merge": { "searchPlaceholder": "Rechercher des auteurs pour fusionner avec cet auteur", "searching": "Recherche...", "bookCount": "{count, plural, =0 {pas de livres} one {# livre} other {# livres} many {# livres}}", - "selectedSummary": "Auteur(s) {count} sélectionné(s), env. {books} livres concernés.", + "selectedSummary": "Sélection : {count} auteurs ; environ {books} livres concernés.", "merging": "Fusion...", "mergeSelected": "Fusionner la sélection", "confirmLabel": "Fusionner" }, "mergeDialog": { - "title": "Fusionner {count} auteur(s) dans \"{name}\" ?", + "title": "Fusionner la sélection ({count}) dans « {name} » ?", "titleFallback": "Fusionner les auteurs sélectionnés ?", "description": "Cela fusionnera les auteurs sélectionnés avec l'auteur actuel et reliera à nouveau les livres associés. Cette action ne peut pas être annulée.", "descriptionEmpty": "Cette action ne peut pas être annulée." @@ -3314,10 +3845,10 @@ "updated": "Auteur mis à jour", "updateFailed": "Échec de la mise à jour de l'auteur", "imageUpdated": "Image de l'auteur mise à jour", - "imageUploadFailed": "Échec du téléchargement de l'image de l'auteur", + "imageUploadFailed": "Échec de l'envoi de l'image de l'auteur", "imageRemoved": "Image de l'auteur supprimée", "imageRemoveFailed": "Échec de la suppression de l'image de l'auteur", - "mergeSuccess": "Auteur(s) {count} fusionné ; {books} livres concernés", + "mergeSuccess": "Fusion terminée - auteurs : {count} ; livres concernés : {books}", "mergeFailed": "Échec de la fusion des auteurs", "deleteSuccess": "Auteur supprimé ; {books} livres concernés", "deleteFailed": "Échec de la suppression de l'auteur" @@ -3341,8 +3872,8 @@ }, "actions": { "read": "Marquer comme lu", - "listen": "Ecoute", - "peek": "Coup d'oeil", + "listen": "Écoute", + "peek": "Coup d'œil", "quickView": "Aperçu rapide", "details": "Détails", "bookDetails": "Détails du livre", @@ -3388,18 +3919,19 @@ "publishedDate": "Date de publication", "publishedYear": "Année de publication", "pageCount": "Nombre de pages", - "rating": "Évaluation", + "rating": "Note", "publisher": "Éditeur", "fileSize": "Taille du fichier", "readProgress": "Progression de lecture", - "readStatus": "Statut", + "readStatus": "Statut de lecture", "format": "Format", "lastReadAt": "Dernière lecture", "startedAt": "Date de début", "finishedAt": "Date de fin", "random": "Aléatoire", "language": "Langue", - "metadataScore": "Score des métadonnées" + "metadataScore": "Score des métadonnées", + "collectionOrder": "Ordre d'ajout" }, "customFieldsGroup": "Groupe de champs personnalisés", "customFieldFallback": "Valeur par défaut des champs personnalisés", @@ -3474,7 +4006,7 @@ "isFalse": "est Faux" }, "customFieldsGroup": "Champs personnalisés", - "customFieldFallback": "Champ personalisé", + "customFieldFallback": "Champ personnalisé", "anyProvider": "N'importe quel fournisseur", "communityRatingProvider": "Fournisseur de notation communautaire", "loadingLibraries": "Chargement des bibliothèques...", @@ -3617,7 +4149,7 @@ "openIn": "Ouvrir dans {provider}", "pages": "{count, plural, =0 {# page} one {# page} other {# pages} many {# pages}}", "primaryFile": "Fichier principal", - "fileNumber": "Fichier n°{id}", + "fileNumber": "Fichier n° {id}", "showLess": "Afficher moins", "showMore": "Afficher plus", "collections": "Collections", @@ -3625,7 +4157,7 @@ "openMetadataEditor": "Ouvrir l'éditeur de métadonnées", "coverPreview": "Aperçu de la couverture du livre", "coverPreviewFor": "Aperçu de la couverture {title}", - "coverPreviewDescription": "Boîte de dialogue d’aperçu de l’image de couverture agrandie." + "coverPreviewDescription": "Boîte de dialogue d'aperçu de l'image de couverture agrandie." }, "tableView": { "openBookDetails": "Détails du livre ouvert", @@ -3688,16 +4220,16 @@ "autoWriteAndRenameDisabled": "L'écriture automatique et le renommage sont désactivés dans les paramètres de la bibliothèque. Les modifications ne seront pas automatiquement synchronisées lors des prochaines sauvegardes.", "autoWriteDisabled": "L'écriture automatique est désactivée dans les paramètres de la bibliothèque. Les modifications ne seront pas automatiquement synchronisées lors des prochaines sauvegardes.", "autoRenameDisabled": "Le renommage automatique est désactivé dans les paramètres de la bibliothèque. Les modifications ne seront pas automatiquement synchronisées lors des prochaines sauvegardes.", - "writeLabel": "Écrivez :", + "writeLabel": "Écrivez :", "renameLabel": "Renommer :" }, "addFile": { - "uploading": "Téléchargement...", - "uploadComplete": "Téléchargement terminé", + "uploading": "Envoi en cours...", + "uploadComplete": "Envoi terminé", "title": "Ajouter un fichier", "dropzone": { "title": "Déposez les fichiers ici ou cliquez pour parcourir", - "hint": "epub, pdf, mobi, cbz, m4b et plus - jusqu'à {size} Mo chacun" + "hint": "epub, pdf, mobi, cbz, m4b et plus - jusqu'à {size} Mo chacun" }, "addMore": "Ajouter plus de fichiers", "fileCount": "{count, plural, =0 {pas de fichiers} one {un fichier} other {# fichiers} many {# fichiers}}", @@ -3705,11 +4237,11 @@ "done": "Terminé", "retry": "Réessayer", "filesAdded": "{count, plural, =0 {aucun fichier ajouté} one {un fichier ajouté} other {# fichiers ajoutés} many {# fichiers ajoutés}}", - "uploadedFailed": "{done} téléchargé, {failed} a échoué", - "uploadingProgress": "{done} sur {total} en cours de téléchargement...", - "renameAfter": "Renommer tous les fichiers du livre après le téléchargement", - "uploadCount": "Télécharger ({count})", - "upload": "Télécharger" + "uploadedFailed": "{done} envoyé, {failed} a échoué", + "uploadingProgress": "{done} sur {total} en cours d'envoi...", + "renameAfter": "Renommer tous les fichiers du livre après l'envoi", + "uploadCount": "Envoyer ({count})", + "upload": "Envoyer" }, "addSession": { "errors": { @@ -3721,7 +4253,7 @@ "title": "Ajouter une séance de lecture", "startedAt": "Commencé à", "duration": "Durée (minutes)", - "endProgress": "Fin de la progression %", + "endProgress": "Fin de la progression %", "optional": "Facultatif", "format": "Format", "noFormat": "Pas de format spécifique", @@ -3768,7 +4300,7 @@ "chooseFormat": "Choisir le format", "audiobook": "Livre audio", "primary": "Principal", - "peek": "Coup d'oeil", + "peek": "Coup d'œil", "sendViaEmail": "Envoyer par e-mail", "personalReview": { "title": "Examen personnel", @@ -3819,6 +4351,7 @@ "dateAddedFutureError": "La date d'ajout ne peut pas être postérieure.", "dateFinishedFutureError": "La date de fin ne peut pas être postérieure.", "dateFinishedBeforeStartedError": "La date de fin doit être identique ou postérieure à la date de début.", + "dateFinishedBeforeStartedErrorWithDate": "La date de fin doit être égale ou postérieure à la date de début ({date}).", "saveReadingDatesError": "Échec de l'enregistrement des dates de lecture.", "saveAddedDateError": "Échec d'enregistrement de la date d'ajout.", "koboPendingDelete": "En attente de suppression de l'appareil", @@ -3828,7 +4361,37 @@ "koboNotSynced": "Non synchronisé", "koboNotSyncedTooltip": "En file d'attente pour la prochaine synchronisation Kobo.", "filesNotFound": "Fichiers introuvables", - "filesNotFoundDescription": "Le(s) fichier(s) de ce livre sont introuvables sur le disque. Les métadonnées sont toujours disponibles. Exécutez une analyse de la bibliothèque pour confirmer ou supprimer l'enregistrement." + "filesNotFoundDescription": "Les fichiers de ce livre sont introuvables sur le disque. Les métadonnées restent disponibles. Analysez la bibliothèque pour le confirmer ou supprimez l'enregistrement.", + "resetHoldNotice": "{device} conserve encore l'ancienne position ({percent})", + "resetHoldRelease": "Utiliser la position de cet appareil", + "resetHoldReleasing": "Application...", + "resetHoldReleaseFailed": "Impossible d'utiliser cette position. Réessayez.", + "editions": "Éditions", + "editionsSummary": "{count} · {size}", + "moreFormats": "+{count} de plus", + "filesOnDisk": "Fichiers sur le disque", + "yourReading": "Votre lecture", + "lastRead": "dernière lecture {when}", + "notStarted": "pas commencé", + "noSessionsYet": "Aucune session de lecture pour l'instant. Ouvrir ce livre dans le lecteur suit le temps, le rythme et la progression sur chaque appareil.", + "activitySessions": "Sessions", + "activityTime": "Durée", + "activityAverage": "Moy", + "activityProgress": "Progression", + "activityDayTooltip": "{day} : {minutes} min", + "activityReached": "{percent} atteint", + "durationS": "{seconds} s", + "durationM": "{minutes} min", + "durationHm": "{hours} h {minutes} min", + "yourReview": "Votre avis", + "reviewNotWritten": "Pas encore rédigé", + "writeReview": "Rédiger", + "collections": "Collections", + "noCollections": "Aucune", + "onDisk": "Sur le disque", + "detailsHeading": "Détails", + "percentUnderOne": "<1%", + "percentOverNinetyNine": ">99%" }, "editMetadata": { "fieldCount": "{count, plural, =0 {pas de champs} one {un champ} other {# champs} many {# champs}}", @@ -3839,7 +4402,7 @@ "formatDisabled": "La réécriture est désactivée pour ce format", "fileExceedsSizeLimit": "Ce fichier dépasse la taille limite de réécriture", "writing": "Écrire...", - "saveInProgress": "Sauvegarde en cours", + "saveInProgress": "Enregistrement en cours", "writeManualLibraryDisabled": "Écrivez les métadonnées dans un fichier et renommez-les sur le disque ; la réécriture automatique est désactivée pour cette bibliothèque", "writeManualTooltip": "Écrivez {fields} dans {target} et renommez-le sur le disque", "applyResult": "{skipped}, {updated}", @@ -3856,6 +4419,8 @@ "savedButWriteFailed": "Métadonnées enregistrées, mais l'écriture du fichier a échoué", "savedWriteSkippedReason": "Métadonnées enregistrées, écriture du fichier ignorée : {reason}", "savedWriteSkipped": "Métadonnées enregistrées, écriture du fichier ignorée", + "saveFailed": "Impossible d'enregistrer les modifications", + "saveFailedWithStatus": "Impossible d'enregistrer les modifications (HTTP {status})", "loadFromFileFailed": "Échec du chargement des métadonnées du fichier", "loadedFieldsFromFile": "{count, plural, =0 {Aucun champ chargé à partir du fichier} one {Chargé un champ du fichier} other {Chargé # champs du fichier} many {Chargé # champs du fichier}}", "noMetadataInFile": "Aucune métadonnée trouvée dans le fichier", @@ -3874,7 +4439,7 @@ "fileWriteBackDetails": "Détails de réécriture du fichier", "fileWriteBack": "Réécriture de fichier", "enabled": "Activé", - "saveWritesMetadata": "\"Enregistrer\" écrit les métadonnées dans {target}", + "saveWritesMetadata": "« Enregistrer » écrit les métadonnées dans {target}", "formats": "Formats", "bookFiles": "Fichiers de livres", "supportedFields": "Champs pris en charge", @@ -3882,7 +4447,7 @@ "subtitleLabel": "Sous-titre", "authorsLabel": "Auteurs", "narratorsLabel": "Narrateurs", - "genresLabel": "Genre", + "genresLabel": "Genres", "tagsLabel": "Balises", "ratingLabel": "Note", "rateStar": "Notez {star}", @@ -3896,7 +4461,7 @@ "pageCountLabel": "Nombre de pages", "isbn13Label": "ISBN-13", "isbn10Label": "ISBN-10", - "durationLabel": "Durée(s)", + "durationLabel": "Durée", "abridgedLabel": "Abrégé", "providerIds": "ID de fournisseur", "comicDetails": "Détails de la bande dessinée", @@ -3944,6 +4509,11 @@ "pickCoverSource": "Choisir la source de couverture", "pickFromProvider": "Choisissez auprès d'un autre fournisseur", "pickSource": "Choisir la source", + "genreWriteMode": { + "label": "Comment appliquer les genres", + "merge": "Fusionner", + "replace": "Remplacer" + }, "empty": "vide", "showLess": "Afficher moins", "showMore": "Afficher plus", @@ -3972,10 +4542,31 @@ "notInFieldRulesText": "{providers}. Inclus dans la recherche manuelle avec Tous activés, mais non utilisé par la récupération automatique des métadonnées.", "noResults": "Aucun résultat trouvé", "noResultsHint": "Essayez d'ajuster le titre ou l'auteur", + "searchInterrupted": "La recherche n'est pas terminée", + "searchIncomplete": "Certains résultats peuvent manquer", + "providerTimedOut": "{provider} a mis trop de temps à répondre.", + "providerThrottled": "{provider} a atteint sa limite de requêtes. Patientez un instant et réessayez.", + "providerFailed": "Impossible de joindre {provider}.", + "searchInterruptedHint": "Réessayez ou réduisez la portée de la recherche.", "searchPrompt": "Recherchez ci-dessus, puis cliquez sur un résultat pour commencer à comparer les métadonnées." }, "writeAndRename": "Écrire dans un fichier et renommer", - "writeAndRenameShort": "Écrire et renommer" + "writeAndRenameShort": "Écrire et renommer", + "identityCard": "Identifiant", + "catalogCard": "Catalogue", + "sourceCard": "Source", + "score": "Score", + "scoreTooltip": "Score des métadonnées : {score} sur 100", + "emptyFields": "{count, plural, one {champ vide} other {champs vides}}", + "emptyFieldsTooltip": "Pas encore renseigné : {fields}. Chercher en ligne pour les trouver.", + "libraryRow": "Bibliothèque", + "primaryRow": "Titre", + "writeBackRow": "4ᵉ de couverture", + "writeBackOff": "Désactiver", + "lastWrittenRow": "Dernière mise à jour", + "neverWritten": "Jamais", + "fileCount": "{count, plural, =0 {aucun fichier} one {un fichier} other {# fichiers}}", + "unknownFormat": "Inconnu" }, "files": { "title": "Fichiers de livres", @@ -3987,7 +4578,7 @@ "relative": { "seconds": "Il y a {value}s", "minutes": "il y a {value} m", - "hours": "il y a {value}h", + "hours": "il y a {value} h", "days": "Il y a {value}j" }, "renameFailed": "Échec du renommage du fichier", @@ -4027,9 +4618,35 @@ "saving": "Sauvegarde...", "deleteModal": { "title": "Supprimer le fichier ?", - "description": "Êtes-vous sûr de vouloir supprimer « {filename} » ? Cette action ne peut pas être annulée." + "description": "Êtes-vous sûr de vouloir supprimer « {filename} » ? Cette action ne peut pas être annulée." }, - "deleting": "Suppression..." + "deleting": "Suppression...", + "folderAria": "Emplacement du dossier", + "folderContents": "Contenu du dossier", + "inspectorAria": "Fichier sélectionné", + "libraryRoot": "racine de la bibliothèque", + "onDisk": "Sur le disque", + "missing": "Manquant", + "backToFolder": "Revenir au dossier", + "copyPath": "Copier le chemin complet", + "pathCopied": "Chemin copié dans le presse-papiers", + "totalRuntime": "{duration} totale", + "startsAt": "Commence à {time}", + "trackLength": "{duration} totale", + "switchFileHeading": "Changer de fichier", + "writeBackHeading": "Écrit dans ce fichier", + "fieldsWithValue": "{filled} champs sur {total} ont une valeur", + "lastRun": "Dernière exécution : {time}", + "neverRun": "Jamais exécuté", + "historyHeading": "Historique", + "timeline": { + "written": "Métadonnées écrites dans {format}", + "writtenMany": "Métadonnées écrites dans {format} ×{count}", + "writeDetail": "{count, plural, one {# champ} other {# champs}} · {ms}ms · {trigger}", + "failed": "Échec d'écriture", + "indexed": "{name} indexé", + "indexedMany": "Fichiers {count} {format} indexés" + } }, "highlights": { "note": { @@ -4066,6 +4683,41 @@ "paginationUnit": "passages surlignés" }, "readingLog": { + "resetReadingState": "Réinitialiser le statut de lecture", + "vitals": { + "aria": "Résumé de lecture", + "notSet": "Non défini", + "started": "Commencé", + "finished": "Terminé", + "editStarted": "Modifier la date à laquelle vous avez commencé ce livre", + "editFinished": "Modifier la date à laquelle vous avez fini ce livre", + "totalTime": "Durée totale", + "sessions": "Sessions", + "avgSession": "Session moyenne", + "activeDays": "Jours d'activité", + "activeDaysOf": "{active} sur {total}", + "pace": "Rythme", + "pacePerHour": "{percent}%/h", + "lastRead": "Dernière lecture", + "whereYouRead": "Où vous l'avez lu", + "addSession": "Ajouter une session", + "durationHm": "{hours} h {minutes} min", + "durationM": "{minutes} min", + "durationS": "{seconds} s" + }, + "ledger": { + "title": "Sessions", + "none": "aucune", + "colDay": "Jour", + "colTime": "Heure", + "colLength": "Durée", + "colChange": "Modifier", + "colPosition": "Position dans le livre", + "colReached": "Atteint", + "colSource": "Source", + "colFormat": "Format", + "gapDays": "{count, plural, one {# jour sans lire} other {# jours sans lire}}" + }, "moreActionsAria": "Plus d'actions de journal de lecture", "export": { "button": "Exporter" @@ -4105,7 +4757,7 @@ "relative": { "seconds": "Il y a {count}s", "minutes": "il y a {count} m", - "hours": "il y a {count}h", + "hours": "il y a {count} h", "days": "Il y a {count}j", "months": "{count, plural, =0 {# il y a un mois} one {# il y a un mois} other {# il y a des mois} many {# il y a des mois}}", "years": "{count, plural, =0 {# il y a un an} one {# il y a un an} other {# il y a des années} many {# il y a des années}}" @@ -4115,19 +4767,20 @@ "startFuture": "La date de début ne peut pas être postérieure.", "finishFuture": "La date de fin ne peut pas être postérieure.", "finishBeforeStart": "La date de fin doit être identique ou postérieure à la date de début.", + "finishBeforeStartWithDate": "La date de fin doit être égale ou postérieure à la date de début ({date}).", "saveFailed": "Échec de l'enregistrement des dates de lecture." }, "eta": { - "max": "99h+ pour terminer", + "max": "99 h+ pour terminer", "minutes": "~{m}m pour terminer", - "hours": "~{h}h pour terminer", - "hoursMinutes": "~{h}h {m}m pour terminer" + "hours": "~{h} h pour terminer", + "hoursMinutes": "~{h} h {m}m pour terminer" }, "momentum": { "none": "Aucune activité au cours des deux dernières semaines", "new": "Nouvelle activité cette semaine", - "up": "+{pct}% par rapport aux 7 jours précédents", - "down": "{pct}% par rapport aux 7 jours précédents", + "up": "+{pct} % par rapport aux 7 jours précédents", + "down": "{pct} % par rapport aux 7 jours précédents", "flat": "Inchangé par rapport aux 7 jours précédents" }, "stats": { @@ -4143,12 +4796,12 @@ "addSession": "Ajouter une séance" }, "journey": { - "tooltipProgress": "Progrès", + "tooltipProgress": "Progression", "tooltipReading": "Lecture", "minutesUnit": "min", - "title": "Parcours de progrès", + "title": "Parcours de progression", "empty": "Aucune donnée de progression dans cette fenêtre.", - "emptyHint": "La progression apparaîtra après qu’une session ait enregistré une position de lecture." + "emptyHint": "La progression apparaîtra après qu'une session ait enregistré une position de lecture." }, "sourceSplit": { "title": "Sources de lecture", @@ -4173,10 +4826,11 @@ "colDateMobile": "Date", "colDuration": "Durée", "colDurationMobile": "Durée", - "colProgressChange": "Changement de progrès", + "colProgressChange": "Changement de progression", "colProgressChangeMobile": "Delta", "colEndProgress": "Fin de la progression", "colEndProgressMobile": "Fin", + "jumpToProgress": "Aller à {progress} %", "empty": "Aucune séance de lecture enregistrée pour le moment.", "emptyHint": "Ajoutez une session pour commencer à créer l'historique de lecture de ce livre.", "colPace": "Rythme", @@ -4226,6 +4880,7 @@ "moveDown": "Descendre", "removeSeries": "Supprimer la série", "seriesIndexLabel": "Position dans les séries", + "invalidSeriesIndex": "Saisissez des chiffres avec au plus un point décimal, par exemple 5.10.", "totalLabel": "Livres dans la série", "totalPlaceholder": "sur", "totalHint": "Nombre de tomes dans cette série. Partagé avec tous ceux qui ont cette série." @@ -4317,7 +4972,7 @@ "currentLibrary": "Actuelle", "folderCount": "{count, plural, one {# folder} many {# folders} other {# folders}}", "continue": "Continuer", - "back": "Précédent", + "back": "Retour", "confirm": "{count, plural, one {Déplacer # book} many {Déplacer # books} other {Déplacer # books}}", "action": "Déplacer vers la bibliothèque", "review": { @@ -4356,7 +5011,7 @@ "wrap_into_folder": "{count} livres seront placés dans leur propre dossier", "dissolve_folder": "{count} dossiers de livres seront changés en fichiers uniques" }, - "crossDevice": "Les fichiers sont déplacés vers un autre lecteur : ils sont copiés, vérifiés, puis supprimés." + "crossDevice": "Les fichiers sont déplacés vers un autre lecteur : ils sont copiés, vérifiés, puis supprimés." }, "progress": { "label": "Déplacement des livres vers {library}", @@ -4418,7 +5073,7 @@ "authorTitle": "Enrichissements d'auteurs ayant échoué", "noFailedItems": "Aucun élément échoué.", "retryAllFailed": "Réessayer, tout a échoué", - "bookFallback": "Livre n°{id}", + "bookFallback": "Livre n° {id}", "authorFallback": "Auteur #{id}", "columns": { "title": "Titre", @@ -4444,21 +5099,29 @@ "apply": "Appliquer", "done": "Terminé", "discard": "Jeter", + "deselect": "Désélectionner", "finalize": "Finaliser", "rescan": "Nouvelle analyse", - "uploadAction": "Télécharger", - "uploading": "Téléchargement...", + "uploadAction": "Envoyer", + "uploading": "Envoi en cours...", "searchPlaceholder": "Rechercher des fichiers...", "setDestinationAction": "Définir la destination", "bulkEditAction": "Modification groupée", "applyFetched": "Appliquer récupéré", "retryErrors": "Erreurs de nouvelle tentative", + "discardDialog": { + "title": "{count, plural, =0 {Supprimer aucun fichier ?} one {Supprimer le fichier sélectionné ?} other {Supprimer les # fichiers sélectionnés ?} many {Supprimer les # fichiers sélectionnés ?}}", + "description": "{count, plural, =0 {Aucun fichier n'est sélectionné.} one {Cette action supprime définitivement le fichier sélectionné du disque. Cette action est irréversible.} other {Cette action supprime définitivement les # fichiers sélectionnés du disque. Cette action est irréversible.} many {Cette action supprime définitivement les # fichiers sélectionnés du disque. Cette action est irréversible.}}", + "confirm": "{count, plural, one {Supprimer le fichier} other {Supprimer # fichiers} many {Supprimer # fichiers}}", + "failed": "Impossible de supprimer les fichiers sélectionnés. Réessayez." + }, "commaSeparated": "séparés par des virgules", "destinationLibrary": "Bibliothèque de destinations", "destinationFolder": "Dossier de destination", "nFailed": "{count} a échoué", "updatedOfFiles": "Mise à jour de {updated} sur {total} fichiers", "errorStatus": "Erreur {status}", + "invalidSeriesIndex": "Saisissez des chiffres avec au plus un point décimal, par exemple 5.10.", "tab": { "all": "Tout", "pending": "En attente", @@ -4485,7 +5148,7 @@ "isbn10": "ISBN-10", "series": "Série", "seriesIndex": "Numéro de série", - "genres": "Genre", + "genres": "Genres", "genresCommaSeparated": "Genres (séparés par des virgules)", "description": "Descriptif" }, @@ -4496,7 +5159,7 @@ }, "fileList": { "emptyTitle": "Aucun fichier dans Book Dock", - "emptyMessageDefault": "Téléchargez des fichiers ou déposez-les dans le dossier Book Dock", + "emptyMessageDefault": "Envoyez des fichiers ou déposez-les dans le dossier Book Dock", "colCurrent": "Actuel", "colNew": "Nouveau", "colFile": "Fichier", @@ -4507,7 +5170,7 @@ "colStatus": "Statut", "applyFetchedMetadata": "Appliquer les métadonnées récupérées", "coverPreview": "Aperçu de la couverture", - "coverPreviewDescription": "Boîte de dialogue d’aperçu de l’image de couverture agrandie.", + "coverPreviewDescription": "Boîte de dialogue d'aperçu de l'image de couverture agrandie.", "currentCoverAlt": "{title} couverture actuelle", "newCoverAlt": "{title} nouvelle couverture", "unknownLibrary": "Bibliothèque inconnue", @@ -4540,7 +5203,7 @@ "finalizeDialog": { "title": "{count, plural, =0 {Ne finaliser aucun fichier} one {Finaliser # fichier} other {Finaliser # fichiers} many {Finaliser # fichiers}}", "resultTitle": "Finaliser les résultats", - "needDestination": "{count, plural, =0 {Sans destination : {without} sur # fichiers sélectionnés} one {Sans destination : {without} sur # fichier sélectionné} other {Sans destination : {without} sur # fichiers sélectionnés} many {Sans destination : {without} sur # fichiers sélectionnés}}", + "needDestination": "{count, plural, =0 {Sans destination : {without} sur # fichiers sélectionnés} one {Sans destination : {without} sur # fichier sélectionné} other {Sans destination : {without} sur # fichiers sélectionnés} many {Sans destination : {without} sur # fichiers sélectionnés}}", "allHaveDestination": "Tous les fichiers sélectionnés ont déjà une destination définie", "defaultDestinationLibrary": "Bibliothèque de destination par défaut", "defaultDestinationFolder": "Dossier de destination par défaut", @@ -4565,6 +5228,70 @@ "alreadyExistsSaveAs": "Existe déjà - enregistrer sous :", "renamePlaceholder": "par ex. {name} (2)", "import": "Importer" + }, + "layout": { + "pause": "Suspendre", + "resume": "Reprendre", + "pauseUpdateFailed": "Échec de la mise en pause", + "clearSearch": "Effacer la recherche", + "filter": { + "all": "Tous", + "needsReview": "À vérifier", + "pending": "En attente", + "ready": "Prêt", + "error": "Erreur" + }, + "working": { + "label": "{count} en cours" + }, + "row": { + "select": "Sélectionner {title}", + "setDestination": "Définir la destination", + "file": "Fichier", + "match": "{percent} % de correspondance", + "noAuthor": "Aucun auteur pour le moment", + "proposedChanges": "Modifications proposées", + "noChanges": "Aucune métadonnée récupérée pour le moment", + "editDetails": "Modifier les détails", + "noMatch": "Aucune correspondance", + "applied": "Appliqué", + "refetch": "Récupérer à nouveau les métadonnées", + "clickToZoom": "Cliquez sur une couverture pour l'agrandir", + "changedFields": "{count, plural, one {# champ} other {# champs} many {# champs}}", + "needMore": "Besoin de rechercher d'autres fournisseurs ou de modifier d'autres champs ?" + }, + "selection": { + "fileToLibrary": "{count, plural, =0 {Fichier vers la bibliothèque} one {Fichier # vers la bibliothèque} other {Fichier # vers la bibliothèque} many {Fichier # vers la bibliothèque}}", + "nSelected": "Éléments dans la sélection : {count}", + "nReadyToFile": "Éléments prêts à classer : {count}" + }, + "empty": { + "nothingToReview": "Rien à vérifier. Chaque fichier prêt a une destination et une correspondance fiable.", + "dropHint": "Ou déposez des fichiers n'importe où sur cette page." + }, + "selectAllOnPage": "Sélectionner tous les fichiers de cette page", + "showingOf": "{shown} sur {total}", + "keyboardHint": "J / K pour se déplacer · espace pour sélectionner · entrée pour développer", + "allOnPageSelected": "Les {count} éléments de cette page sont tous sélectionnés.", + "selectAllMatching": "Sélectionner les {count} correspondances", + "allMatchingSelected": "Les {count} fichiers correspondants sont tous sélectionnés", + "sort": { + "label": "Trier par", + "attention": "Nécessite une attention", + "createdAt": "Ajoutés récemment", + "fileName": "Nom du fichier", + "fileSize": "Taille", + "format": "Format", + "status": "Statut" + }, + "conflict": { + "duplicate": "Doublon", + "destination_conflict": "Chemin déjà utilisé", + "invalid_target": "Cible invalide", + "access_denied": "Accès refusé", + "invalid_format": "Format invalide", + "error": "Échouerait" + } } }, "collection": { @@ -4586,10 +5313,10 @@ "syncToKobo": "Synchroniser avec Kobo", "syncToKoboHint": "Les livres de cette collection apparaîtront sur votre appareil Kobo", "deleteCollection": "Supprimer la collection", - "confirmDelete": "Confirmer ?", + "confirmDelete": "Confirmer ?", "deleting": "Suppression...", "saving": "Sauvegarde...", - "deleted": "\"{name}\" supprimé", + "deleted": "« {name} » supprimé", "updateFailed": "Échec de la mise à jour de la collection", "deleteFailed": "Échec de la suppression de la collection" }, @@ -4629,15 +5356,16 @@ "allMatchesShown": "{count, plural, =0 {La correspondance est affichée} one {La correspondance est affichée} other {Les # correspondances sont affichées} many {Les # correspondances sont affichées}}", "bookCount": "{count, plural, =0 {pas de livres} one {# livre} other {# livres} many {# livres}}", "fileCount": "{count, plural, =0 {pas de fichiers} one {# fichier} other {# fichiers} many {# fichiers}}", - "uploadedToast": "{uploaded} téléchargé", - "uploadFailedToast": "Échec du téléchargement pour {failed}", - "uploadPartialToast": "{uploaded} téléchargé, {failed} a échoué", + "uploadedToast": "{uploaded} envoyé", + "uploadFailedToast": "Échec de l'envoi pour {failed}", + "uploadPartialToast": "{uploaded} envoyé, {failed} a échoué", "bookDock": "Book Dock", "statistics": "Statistiques", "achievements": "Réalisations", "annotations": "Annotations", - "uploadBooks": "Télécharger des livres", + "uploadBooks": "Envoyer des livres", "appearance": "Apparence", + "appearanceDescription": "Choisissez les options de thème, de couleur d'accent, d'arrondi des angles, de surface et d'arrière-plan.", "theme": "Thème", "accent": "Accent", "radius": "Rayon", @@ -4654,11 +5382,12 @@ "signOut": "Se déconnecter", "githubStar": { "title": "Vous appréciez BookOrbit ?", - "body": "Si BookOrbit vous aide avec votre bibliothèque, pensez à mettre le projet en vedette sur GitHub. Cela aide davantage de personnes à découvrir l’application et prend en charge le développement continu.", + "body": "Si BookOrbit vous aide avec votre bibliothèque, pensez à mettre le projet en vedette sur GitHub. Cela aide davantage de personnes à découvrir l'application et prend en charge le développement continu.", "cta": "Étoile BookOrbit sur GitHub" }, "surfaceOpacity": "Opacité de la surface", - "surfaceOpacityValue": "{value} %" + "surfaceOpacityValue": "{value} %", + "surfaceBrightnessValue": "{value} %" }, "sidebar": { "dashboard": "Tableau de bord", @@ -4699,6 +5428,8 @@ "seeAllSmartScopes": "Voir toutes les portées intelligentes ({count})", "seeAllCollections": "Voir toutes les collections ({count})", "updateAvailable": "Mettre à jour {version}", + "updateTooltip": "Mise à jour {version} disponible", + "openUpdateRelease": "Ouvrir la version {version} sur GitHub", "zones": { "browse": "Parcourir" }, @@ -4740,13 +5471,13 @@ "apply": "Appliquer", "fieldPlaceholder": "Laisser vide pour effacer", "fieldPlaceholderArray": "Séparés par des virgules (laisser vide pour effacer)", - "deleteConfirm": "{count, plural, =0 {Supprimer # livre ?} one {Supprimer # livre ?} other {Supprimer # des livres ?} many {Supprimer # des livres ?}}", + "deleteConfirm": "{count, plural, =0 {Supprimer # livre ?} one {Supprimer # livre ?} other {Supprimer # des livres ?} many {Supprimer # des livres ?}}", "typeDelete": "Tapez SUPPRIMER" }, "viewHeader": { - "select": "Sélectionnez", + "select": "Sélectionner", "display": "Affichage", - "displayDescription": "Ajustez la taille de la couverture, l’espacement de la grille et affichez les options d’affichage.", + "displayDescription": "Ajustez la taille de la couverture, l'espacement de la grille et affichez les options d'affichage.", "columnVisibilityHint": "Utilisez le panneau de visibilité des colonnes dans l'en-tête du tableau pour afficher ou masquer les colonnes.", "columnVisibilityMobileHint": "La visibilité des colonnes peut être gérée depuis l'en-tête du tableau.", "searchPlaceholder": "Rechercher un titre, un auteur, une série, un narrateur...", @@ -4757,8 +5488,8 @@ "mobileMenu": { "grid": "Grille", "list": "Liste", - "select": "Sélectionnez", - "exitSelect": "Quitter Sélectionner" + "select": "Sélectionner", + "exitSelect": "Quitter le mode de sélection" }, "displayControls": { "display": "Affichage", @@ -4779,21 +5510,34 @@ "selectIcon": "Sélectionner l'icône", "customTab": "Personnalisé", "searching": "Recherche...", - "noIconsMatch": "Aucune icône ne correspond à \"{query}\"", + "noIconsMatch": "Aucune icône ne correspond à « {query} »", "typeToSearch": "Tapez pour rechercher toutes les icônes", - "noCustomIcons": "Aucune icône personnalisée téléchargée", + "noCustomIcons": "Aucune icône personnalisée envoyée", "noIconsAvailable": "Aucune icône disponible" }, "entityNotFound": { "title": "{entity} introuvable", "description": "Ce {entity} n'existe pas ou a été supprimé.", - "goBack": "Précédent" + "goBack": "Retourner" }, "themePicker": { "light": "Clair", "dark": "Sombre", "system": "Système" }, + "radiusPicker": { + "sharp": "Angles nets", + "default": "Angles par défaut", + "rounded": "Angles arrondis", + "pill": "Angles en forme de pilule" + }, + "languagePicker": { + "searchPlaceholder": "Rechercher une langue", + "suggested": "Suggérées", + "all": "Toutes les langues", + "results": "Résultats", + "empty": "Aucune langue ne correspond à « {query} »" + }, "userAvatar": { "profilePicture": "Photo de profil", "profilePictureOf": "photo de profil {name}" @@ -4822,39 +5566,39 @@ "resultCount": "{shown} sur {total}", "noMatches": "Aucun résultat", "noMatchesHint": "Essayez un autre terme de recherche.", - "bookCount": "Livres : {count}", + "bookCount": "Livres : {count}", "librariesEmptyHint": "Créez une bibliothèque pour commencer à ajouter des livres.", "smartScopesEmptyHint": "Les portées intelligentes enregistrent un ensemble de filtres que vous utilisez souvent.", "collectionsEmptyHint": "Les collections regroupent les livres que vous choisissez à la main." } }, "customIcons": { - "dialogTitle": "Télécharger des icônes personnalisées", + "dialogTitle": "Envoyer des icônes personnalisées", "dialogDescription": "Vérifiez les noms avant de les ajouter à votre bibliothèque.", "readingFiles": "Lecture de fichiers...", "dropPrompt": "Déposez les fichiers SVG ou cliquez pour parcourir", - "fileLimit": "Jusqu'à {max} fichiers, 128 Ko chacun", + "fileLimit": "Jusqu'à {max} fichiers, 128 Ko chacun", "namePlaceholder": "Nom", "nameRequired": "Le nom est requis", "invalidSvg": "SVG invalide", "invalidSvgFile": "Fichier SVG invalide", - "identicalTo": "Identique à \"{name}\"", - "uploadAnyway": "Télécharger quand même", + "identicalTo": "Identique à « {name} »", + "uploadAnyway": "Envoyer quand même", "skipThisOne": "Passer celui-ci", - "readyToUpload": "{count} prêt à être téléchargé", + "readyToUpload": "{count} prêt à être envoyé", "noIconsStaged": "Aucune icône n'a encore été mise en scène", - "uploading": "Téléchargement...", - "upload": "Télécharger", - "uploadCount": "Téléchargez {count}", + "uploading": "Envoi en cours...", + "upload": "Envoyer", + "uploadCount": "Envoyer {count}", "onlySvgSupported": "Seuls les fichiers SVG sont pris en charge", "maxStaged": "Vous pouvez créer jusqu'à {max} icônes à la fois.", "onlyMoreCanStage": "{count, plural, =0 {Aucune autre icône ne peut être mise en scène} one {Seulement # plus d'icônes peuvent être mises en scène} other {Seulement # plus d'icônes peuvent être mises en scène} many {Seulement # plus d'icônes peuvent être mises en scène}}", "readFailed": "Échec de la lecture des fichiers SVG", - "uploadedCount": "{count, plural, =0 {Aucune icône téléchargée} one {Téléchargé # icône} other {Téléchargé # icônes} many {Téléchargé # icônes}}", - "uploadedPartial": "{created} téléchargé, {failed} a échoué", - "noIconsUploaded": "Aucune icône téléchargée", - "uploadFailed": "Échec du téléchargement des icônes", - "uploadFailedEntry": "Échec du téléchargement" + "uploadedCount": "{count, plural, =0 {Aucune icône envoyée} one {Envoyé # icône} other {Envoyé # icônes} many {Envoyé # icônes}}", + "uploadedPartial": "{created} envoyé, {failed} a échoué", + "noIconsUploaded": "Aucune icône envoyée", + "uploadFailed": "Échec de l'envoi des icônes", + "uploadFailedEntry": "Échec de l'envoi" }, "dashboard": { "common": { @@ -4873,7 +5617,7 @@ "empty": { "continueReading": "Aucun livre en cours pour le moment. Commencez à en lire un pour le voir ici.", "continueListening": "Aucun livre audio en cours pour le moment. Commencez à en écouter un pour le voir ici.", - "wantToRead": "Aucun livre marqué « Je veux lire » pour l'instant.", + "wantToRead": "Aucun livre marqué « Je veux lire » pour l'instant.", "upNextInSeries": "Pas encore de choix pour la prochaine série. Terminez un volume pour faire surface le suivant.", "recentlyAdded": "Aucun livre dans votre bibliothèque pour l'instant.", "smartScope": "Aucun livre ne correspond à ce smartScope.", @@ -4907,16 +5651,29 @@ "wantToRead": "À lire", "upNextInSeries": "Suite de la série", "random": "Découvrez quelque chose de nouveau", - "smartScope": "Collection Intelligente" + "smartScope": "Collection intelligente" }, "shelfLayout": { "title": "Disposition de l'étagère", "description": "Choisissez comment les étagères sont disposées sur des écrans plus grands.", - "wide": "Large rangées", + "wide": "Rangées larges", "wideDescription": "Afficher une étagère par ligne.", "twoColumns": "Deux colonnes", "twoColumnsDescription": "Afficher une étagère par ligne." }, + "libraryScope": { + "title": "Bibliothèques du tableau de bord", + "description": "Choisissez les bibliothèques qui alimentent ce tableau de bord en livres et en données de lecture.", + "allLibraries": "Toutes les bibliothèques accessibles", + "summaryNone": "Aucune bibliothèque sélectionnée", + "summaryCount": "{count, plural, one {# bibliothèque} other {# bibliothèques} many {# bibliothèques}}", + "required": "Sélectionnez au moins une bibliothèque." + }, + "shelfRows": { + "label": "Rangées de livres", + "option": "{count, plural, one {Une rangée de livres} other {# rangées de livres} many {# rangées de livres}}", + "hint": "Définissez le nombre de rangées de livres affichées par étagère. Les écrans étroits en affichent deux au maximum." + }, "reorderHintWidget": "Faites glisser pour réorganiser. Basculez pour afficher ou masquer un widget.", "reorderHintShelf": "Faites glisser pour réorganiser. Basculez pour afficher ou masquer une étagère.", "smartScope": "Portée intelligente", @@ -4965,7 +5722,7 @@ }, "longWait": { "title": "La longue attente", - "empty": "Pas de livres en attente. Vous avez tout commencé !", + "empty": "Pas de livres en attente. Vous avez tout commencé !", "daysWaiting": "jours d'attente", "pages": "{count, plural, =0 {pas de page} one {# page} other {# pages} many {# pages}}", "startReading": "Commencer la lecture" @@ -4978,7 +5735,7 @@ "title": "Joyaux négligés", "empty": "Tous vos livres les mieux notés ont été lus !", "rating": "{rating}/5", - "daysWaiting": "{count}d en attente", + "daysWaiting": "{count} j en attente", "queued": "En file d'attente", "addToQueue": "Ajouter à la file d'attente", "shuffle": "Mélanger" @@ -4997,11 +5754,11 @@ }, "readingGoal": { "title": "Objectif de lecture {year}", - "setGoalPrompt": "Fixez-vous un objectif de lecture pour suivre vos progrès", + "setGoalPrompt": "Fixez-vous un objectif de lecture pour suivre votre progression", "setGoal": "Fixer un objectif", "booksPerYear": "Livres par an", "ofGoal": "de {goal}", - "percentComplete": "{percentage}% terminé", + "percentComplete": "{percentage} % terminé", "editGoal": "Modifier l'objectif" }, "readingRhythm": { @@ -5042,7 +5799,7 @@ "saving": "Sauvegarde...", "update": "Mise à jour", "create": "Créer", - "deleteConfirm": "Supprimez \"{name}\". Cette action ne peut pas être annulée.", + "deleteConfirm": "Supprimez « {name} ». Cette action ne peut pas être annulée.", "badge": { "default": "Par défaut", "shared": "Partagé", @@ -5088,13 +5845,13 @@ "nameHostRequired": "Le nom et l'hôte sont requis", "created": "Fournisseur créé", "updated": "Fournisseur mis à jour", - "deleted": "\"{name}\" supprimé", - "setDefaultSuccess": "\"{name}\" défini par défaut", + "deleted": "« {name} » supprimé", + "setDefaultSuccess": "« {name} » défini par défaut", "unshared": "Fournisseur non partagé", "sharedWithAll": "Fournisseur partagé avec tous les utilisateurs", "updateSharingFailed": "Échec de la mise à jour du partage", - "systemRemoved": "\"{name}\" supprimé en tant que fournisseur de messagerie système", - "systemSet": "\"{name}\" défini comme fournisseur de messagerie système", + "systemRemoved": "« {name} » supprimé en tant que fournisseur de messagerie système", + "systemSet": "« {name} » défini comme fournisseur de messagerie système", "updateSystemFailed": "Échec de la mise à jour du fournisseur système", "connectionSuccess": "Connexion réussie", "connectionFailed": "La connexion a échoué", @@ -5115,15 +5872,15 @@ "formatAuto": "Automatique", "defaultTemplate": "Modèle par défaut", "useAccountDefault": "Utiliser le compte par défaut", - "kindleNote": "Les destinataires Kindle reçoivent automatiquement les e-mails avec le sujet « convertir » pour déclencher la conversion du format.", + "kindleNote": "Les destinataires Kindle reçoivent automatiquement les e-mails avec le sujet « convertir » pour déclencher la conversion du format.", "empty": "Aucun destinataire pour l'instant.", "prefersFormat": "préfère {format}", "deleteTitle": "Supprimer le destinataire ?", "nameEmailRequired": "Le nom et l'e-mail sont requis", "created": "Destinataire créé", "updated": "Destinataire mis à jour", - "deleted": "\"{name}\" supprimé", - "setDefaultSuccess": "\"{name}\" défini par défaut" + "deleted": "« {name} » supprimé", + "setDefaultSuccess": "« {name} » défini par défaut" }, "groups": { "heading": "Groupes de destinataires", @@ -5144,7 +5901,7 @@ "deleteTitle": "Supprimer le groupe ?", "created": "Groupe créé", "createFailed": "Échec de la création du groupe", - "deleted": "\"{name}\" supprimé", + "deleted": "« {name} » supprimé", "memberAdded": "Membre ajouté", "addMemberFailed": "Échec de l'ajout d'un membre", "memberRemoved": "Membre supprimé", @@ -5168,8 +5925,8 @@ "nameSubjectRequired": "Le nom et le sujet sont obligatoires", "created": "Modèle créé", "updated": "Modèle mis à jour", - "deleted": "\"{name}\" supprimé", - "setDefaultSuccess": "\"{name}\" défini par défaut" + "deleted": "« {name} » supprimé", + "setDefaultSuccess": "« {name} » défini par défaut" }, "preferences": { "heading": "Préférences de courrier électronique", @@ -5177,7 +5934,7 @@ "defaultProviderHint": "Utilisé lorsqu'aucun fournisseur n'est spécifié. S'il est vide, la valeur par défaut du compte est utilisée.", "noneAccountDefault": "Aucun (utiliser le compte par défaut)", "defaultRecipient": "Destinataire par défaut", - "defaultRecipientHint": "Utilisé pour un envoi rapide. Doit être configuré pour utiliser l’action d’envoi rapide sur les fiches de livre.", + "defaultRecipientHint": "Utilisé pour un envoi rapide. Doit être configuré pour utiliser l'action d'envoi rapide sur les fiches de livre.", "none": "Aucun", "defaultTemplate": "Modèle par défaut", "defaultTemplateHint": "Utilisé lorsqu'aucun modèle n'est spécifié. Revient à la valeur par défaut du système s'il est vide.", @@ -5225,7 +5982,7 @@ "subtitle": "Synchronisez votre progression de lecture, votre statut et vos notes avec Hardcover." }, "bookSync": { - "label": "Hardcover Synchronisation", + "label": "Synchronisation Hardcover", "toggleAriaLabel": "Synchronisez ce livre avec Hardcover", "syncNow": "Synchronisez maintenant" }, @@ -5242,7 +5999,7 @@ "valid": "Valide ({username})", "invalidToken": "Jeton invalide", "syncOptions": "Options de synchronisation", - "syncInfo": "La synchronisation s'exécute uniquement pour les livres qui ne sont pas non lus. Cela s’applique aux déclencheurs de statut, de progression et de notation. Ces commutateurs contrôlent le moment où une synchronisation s'exécute.", + "syncInfo": "La synchronisation s'exécute uniquement pour les livres qui ne sont pas non lus. Cela s'applique aux déclencheurs de statut, de progression et de notation. Ces commutateurs contrôlent le moment où une synchronisation s'exécute.", "syncScope": { "title": "Portée de la synchronisation des livres", "allEligible": { @@ -5346,7 +6103,7 @@ "toast": { "importFailed": "Échec de l'importation de l'état de lecture de Hardcover", "imported": "{count, plural, =0 {aucun statut de lecture importé{progress}} one {# lire le statut importé{progress}} other {# lire les statuts importés{progress}} many {# lire les statuts importés{progress}}}", - "progressUpdates": "{count, plural, =0 {aucune mise à jour des progrès} one {# mise à jour des progrès} other {# mises à jour des progrès} many {# mises à jour des progrès}}" + "progressUpdates": "{count, plural, =0 {aucune mise à jour de la progression} one {# mise à jour de la progression} other {# mises à jour de la progression} many {# mises à jour de la progression}}" } }, "review": { @@ -5360,7 +6117,7 @@ "noRows": "Aucune ligne ne correspond aux filtres actuels.", "selectRowAriaLabel": "Sélectionnez {title}", "selectionSummary": "{count} sélectionné : {ready} prêt, {reviewed} examiné.", - "selectedProgress": "{count, plural, =0 {aucune mise à jour des progrès} one {# mise à jour des progrès} other {# mises à jour des progrès} many {# mises à jour des progrès}}", + "selectedProgress": "{count, plural, =0 {aucune mise à jour de la progression} one {# mise à jour de la progression} other {# mises à jour de la progression} many {# mises à jour de la progression}}", "selectReady": "Sélectionnez prêt", "selectPage": "Sélectionner une page", "clearPage": "Effacer la page", @@ -5400,7 +6157,7 @@ "skipped": "Sauté" }, "column": { - "progress": "Progrès" + "progress": "Progression" } }, "linkedBooks": { @@ -5463,9 +6220,9 @@ "access": "Accès" }, "actions": { - "saving": "Sauvegarde…", + "saving": "Sauvegarde...", "saveChanges": "Enregistrer les modifications", - "creating": "Création…", + "creating": "Création...", "createLibrary": "Créer une bibliothèque" }, "details": { @@ -5502,10 +6259,10 @@ "pathNotAccessible": "Le chemin n'est pas accessible sur le serveur.", "pathAccessible": "Le chemin est accessible.", "pathNotAccessibleShort": "Le chemin n'est pas accessible", - "overlapsWith": "Chevauche avec \"{library}\"", + "overlapsWith": "Chevauche avec « {library} »", "noneAdded": "Aucun dossier ajouté pour l'instant", "runPrescanHint": "Exécutez une pré-analyse pour valider les chemins avant de les enregistrer.", - "scanning": "Analyse en cours…", + "scanning": "Analyse en cours...", "prescan": "Pré-numérisation" }, "scanner": { @@ -5528,7 +6285,7 @@ "allowAll": "Autoriser tout", "allAllowed": "Tous les formats sont autorisés.", "onlySelected": "Seuls les formats sélectionnés seront importés.", - "warning": "Les livres dans d’autres formats déjà présents dans la bibliothèque seront marqués comme manquants lors de la prochaine analyse." + "warning": "Les livres dans d'autres formats déjà présents dans la bibliothèque seront marqués comme manquants lors de la prochaine analyse." }, "excludePatterns": { "title": "Exclure les modèles", @@ -5597,16 +6354,17 @@ "reading": { "readingStart": { "title": "Début de lecture", - "hint": "Un livre est marqué comme « lecture » une fois ce pourcentage de progression atteint." + "hint": "Un livre est marqué comme « lecture » une fois ce pourcentage de progression atteint." }, "markAsFinished": { "title": "Marquer comme terminé", - "hint": "Un livre est automatiquement marqué comme « lu » lorsque ce pourcentage de progression est atteint." + "hint": "Un livre est automatiquement marqué comme « lu » lorsque ce pourcentage de progression est atteint." } }, "schedule": { "fileWatching": "Surveillance de fichiers", "autoScanSchedule": "Planification d'analyse automatique", + "timezoneHint": "Les planifications s'exécutent selon le fuseau horaire du serveur.", "cronExpression": "Expression Cron", "cronInvalid": "Expression cron invalide.", "cronFormat": "Format : minute heure jour mois jour de la semaine", @@ -5625,6 +6383,7 @@ }, "human": { "disabled": "Analyse automatique désactivée", + "invalid": "Saisissez une planification valide pour voir un aperçu", "hourly": "Toutes les heures", "every6Hours": "Toutes les 6 heures", "every12Hours": "Toutes les 12 heures", @@ -5635,16 +6394,16 @@ }, "access": { "title": "Contrôle d'accès", - "description": "Les superutilisateurs ont toujours un accès complet. Accordez l’accès aux autres utilisateurs ci-dessous.", + "description": "Les superutilisateurs ont toujours un accès complet. Accordez l'accès aux autres utilisateurs ci-dessous.", "notYetCreated": "L'accès peut être configuré après la création de la bibliothèque.", - "selectUser": "Sélectionnez un utilisateur…", + "selectUser": "Sélectionnez un utilisateur...", "grant": "Accorder", "empty": "Aucun utilisateur n'a encore obtenu l'accès.", "loading": "Chargement des paramètres d'accès...", "userSelectAria": "Utilisateur pour accorder l'accès", "levelSelectAria": "Niveau d'accès à accorder", "levels": { - "viewer": "Visionneuse", + "viewer": "Lecture seule", "editor": "Éditeur", "owner": "Propriétaire" }, @@ -5667,7 +6426,7 @@ "parentFolder": "Aller au dossier parent", "newFolder": "Nouveau dossier", "goUp": "Monter", - "filterPlaceholder": "Filtrer les dossiers…", + "filterPlaceholder": "Filtrer les dossiers...", "clearFilterAria": "Effacer le filtre de dossier", "newFolderNamePlaceholder": "Nouveau nom de dossier", "create": "Créer", @@ -5696,18 +6455,18 @@ "clearAll": "Tout effacer", "done": "Terminé", "retry": "Réessayer", - "upload": "Télécharger", - "uploadWithCount": "Télécharger ({count})", + "upload": "Envoyer", + "uploadWithCount": "Envoyer ({count})", "viewInLibrary": "Afficher dans la bibliothèque", "fileCount": "{count, plural, =0 {pas de fichiers} one {# fichier} other {# fichiers} many {# fichiers}}", "booksAdded": "{count, plural, =0 {aucun livre ajouté} one {# livre ajouté} other {# livres ajoutés} many {# livres ajoutés}}", - "uploadedFailed": "{done} téléchargé, {failed} a échoué", - "progress": "{done} sur {total} en cours de téléchargement...", + "uploadedFailed": "{done} envoyé, {failed} a échoué", + "progress": "{done} sur {total} en cours d'envoi...", "header": { - "uploading": "Téléchargement...", - "complete": "Téléchargement terminé", - "uploadTo": "Télécharger sur {library}", - "uploadBooks": "Télécharger des livres" + "uploading": "Envoi en cours...", + "complete": "Envoi terminé", + "uploadTo": "Envoyer vers {library}", + "uploadBooks": "Envoyer des livres" }, "dropzone": { "title": "Déposez les fichiers ici ou cliquez pour parcourir", @@ -5720,6 +6479,7 @@ }, "migration": { "sidebarTitle": "Importation de livres", + "importTitle": "Importation de bibliothèque", "status": { "done": "Terminé", "saved": "Enregistré", @@ -5735,7 +6495,8 @@ "source": { "short": "Connexion source", "title": "Connexion source", - "subtitle": "Configurez la connexion à la base de données à votre instance Booklore source." + "subtitle": "Configurez la connexion à la base de données à votre instance Booklore source.", + "genericSubtitle": "Configurez la connexion à votre application de bibliothèque source." }, "mappings": { "short": "Cartographie des utilisateurs et des chemins", @@ -5745,12 +6506,12 @@ "dryRun": { "short": "Simulation", "title": "Simulation", - "subtitle": "Prévisualisez ce qui sera importé avant d’exécuter la migration en direct." + "subtitle": "Prévisualisez ce qui sera importé avant d'exécuter la migration en direct." }, "migration": { "short": "Exécuter la migration", "title": "Exécuter la migration", - "subtitle": "Démarrez l’importation en direct et suivez sa progression." + "subtitle": "Démarrez l'importation en direct et suivez sa progression." }, "report": { "short": "Rapport", @@ -5777,23 +6538,66 @@ "testConnection": "Tester la connexion", "saveAndValidate": "Enregistrer et valider", "validatedWithWarnings": "Source validée avec avertissements", + "types": { + "booklore": "Booklore", + "grimmory": "Grimmory", + "audiobookshelf": "Audiobookshelf", + "calibreWebAutomated": "Calibre-Web Automated" + }, "fields": { "type": "Type de source", "name": "Nom de la source", + "namePlaceholder": "Importation de bibliothèque", "host": "Hôte", "port": "Port", "user": "Utilisateur", "password": "Mot de passe", "passwordSaved": "Enregistré - laisser inchangé", "passwordNotSet": "Aucun mot de passe défini", + "showSecret": "Afficher le secret", + "hideSecret": "Masquer le secret", "database": "Base de données", "mediaRootPath": "Chemin racine du média", - "ssl": "Utiliser TLS/SSL" + "ssl": "Utiliser TLS/SSL", + "connectionMode": "Mode de connexion", + "apiMode": "API en direct", + "backupMode": "Fichier de sauvegarde", + "baseUrl": "URL d'Audiobookshelf", + "apiToken": "Jeton API", + "apiTokenPlaceholder": "Saisissez un jeton API administrateur", + "secretSaved": "Enregistré - ne pas modifier", + "allowPrivateNetwork": "Autoriser l'accès au réseau privé", + "allowPrivateNetworkHint": "Activez cette option uniquement si Audiobookshelf est hébergé sur un réseau local ou privé de confiance.", + "backupPath": "Chemin du fichier de sauvegarde", + "backupPathHint": "Saisissez un chemin absolu du serveur dans le répertoire d'importation de migration configuré.", + "cwaAppDatabasePath": "Instantané app.db de Calibre-Web Automated", + "cwaAppDatabasePathPlaceholder": "/imports/calibre-web-automated/app.db", + "cwaMetadataDatabasePath": "Instantané metadata.db de Calibre", + "cwaMetadataDatabasePathPlaceholder": "/imports/calibre-web-automated/metadata.db" + }, + "validation": { + "nameRequired": "Le nom de la source est requis", + "databaseFieldsRequired": "L'hôte, l'utilisateur, la base de données et le nom de la source sont requis", + "apiFieldsRequired": "L'URL d'Audiobookshelf, le jeton API et le nom de la source sont requis", + "baseUrlInvalid": "L'URL d'Audiobookshelf doit être une origine HTTP ou HTTPS valide, sans chemin", + "backupPathRequired": "Le chemin du fichier de sauvegarde et le nom de la source sont requis", + "backupPathAbsolute": "Le chemin du fichier de sauvegarde doit être absolu", + "cwaAppDatabasePathRequired": "Le chemin de l'instantané app.db de Calibre-Web Automated est requis", + "cwaAppDatabasePathAbsolute": "Le chemin de l'instantané app.db de Calibre-Web Automated doit être absolu", + "cwaMetadataDatabasePathRequired": "Le chemin de l'instantané metadata.db de Calibre est requis", + "cwaMetadataDatabasePathAbsolute": "Le chemin de l'instantané metadata.db de Calibre doit être absolu" + }, + "cwa": { + "snapshotTitle": "Mode instantané à l'arrêt", + "stoppedWarning": "Arrêtez Calibre-Web Automated avant de copier les deux bases de données. BookOrbit ne peut pas vérifier que les deux instantanés ont été copiés exactement au même instant.", + "importRootGuidance": "Les deux fichiers instantanés doivent se trouver sur des chemins du serveur lisibles, sous le répertoire MIGRATION_IMPORT_ROOT configuré.", + "logicalRootGuidance": "Le mappage des chemins de livres utilise la racine logique de la bibliothèque Calibre stockée dans app.db, et non le dossier hôte contenant ces instantanés de base de données.", + "compatibilityNote": "Le comportement du schéma est vérifié avec Calibre-Web Automated v4.0.6. Ses bases de données n'exposent pas de version fiable de l'application." }, "mediaPath": { "hintRequired": "Obligatoire pour la migration des couvertures de livres.", "hintAbsolute": "Utilisez un chemin absolu (par exemple : /books). Les chemins relatifs ne sont pas pris en charge.", - "hintConfigured": "Chemin d’importation de couverture configuré. Utilisez Test Connection pour vérifier l’accès et la structure des dossiers d’images Booklore.", + "hintConfigured": "Chemin d'importation de couverture configuré. Utilisez Test Connection pour vérifier l'accès et la structure des dossiers d'images Booklore.", "buttonOk": "Chemin OK", "buttonIssue": "Problème de chemin", "buttonTest": "Chemin de test" @@ -5801,7 +6605,7 @@ "compatibility": { "title": "Compatibilité testée", "verifiedAgainst": "Vérifié par rapport à :", - "note": "Les versions ultérieures sont probablement compatibles mais n'ont pas été vérifiées. Exécutez d’abord un essai à sec pour confirmer avant de valider les données." + "note": "Les versions ultérieures sont probablement compatibles mais n'ont pas été vérifiées. Exécutez d'abord un essai à sec pour confirmer avant de valider les données." }, "snapshot": { "title": "Dernier instantané de validation", @@ -5815,6 +6619,7 @@ "refresh": "Actualiser", "sourceUser": "Utilisateur source", "targetUser": "Utilisateur cible", + "doNotImport": "Ne pas importer cet utilisateur", "noSourceUsersLoaded": "Aucun utilisateur source n'a encore été chargé.", "noActiveTargetUsers": "Aucun utilisateur cible actif trouvé. Créez ou réactivez un utilisateur BookOrbit avant le mappage.", "pathPrefixMappings": "Mappages de préfixes de chemin", @@ -5841,7 +6646,7 @@ }, "duplicates": { "title": "Résoudre les correspondances de cibles en double", - "explanation": "Pour chaque livre cible, choisissez un livre source à conserver. Les choix recommandés sont présélectionnés lorsqu’il existe une seule correspondance la plus forte.", + "explanation": "Pour chaque livre cible, choisissez un livre source à conserver. Les choix recommandés sont présélectionnés lorsqu'il existe une seule correspondance la plus forte.", "remainingGroups": "Groupes restants :", "ofCount": "de {total}", "targetBookId": "Livre cible #{id}", @@ -5876,7 +6681,7 @@ } }, "run": { - "confirmPrompt": "Cela lancera la migration en direct. Es-tu sûr?", + "confirmPrompt": "Cela lancera la migration en direct. Êtes-vous sûr ?", "confirmStart": "Confirmer le démarrage", "startMigration": "Démarrer la migration", "cancelRun": "Annuler l'exécution", @@ -5914,7 +6719,7 @@ "bookmarks": "Signets", "annotations": "Annotations", "collectionEntries": "Entrées de collection", - "loadFullReportHint": "Cliquez sur « Charger le rapport complet » pour inclure le résumé des correspondances à sec dans le rapport exporté.", + "loadFullReportHint": "Cliquez sur « Charger le rapport complet » pour inclure le résumé des correspondances à sec dans le rapport exporté.", "completedNoIssues": "Migration terminée sans livres ni échecs non résolus.", "matchedBooks": "Livres correspondants ({count})", "matchedBooksExplanation": "Ces correspondances à sec ont été utilisées pour décider quels livres de bibliothèque recevaient des données importées.", @@ -5924,7 +6729,7 @@ "unresolvedBooksExplanation": "Ces livres existent dans la source mais n'ont pu être associés à aucun livre de votre bibliothèque.", "mappedUsers": "Utilisateurs mappés ({count})", "mappedUsersExplanation": "Les totaux par utilisateur proviennent de l'aperçu d'exécution à sec mis en cache avec le plan de migration.", - "coverFailures": "{count} a échoué dans les importations de couverture. Les lignes de défaillance détaillées ne sont pas stockées.", + "coverFailures": "Nombre d'échecs d'importation de couverture : {count}. Les détails des échecs ne sont pas conservés.", "userPreviewCounts": "{statuses} statuts, {progress} entrées de progression, {sessions} sessions de lecture, {bookmarks} signets, {annotations} annotations, {collections} entrées de collection" }, "unresolvedReason": { @@ -5932,8 +6737,10 @@ "noFilePathMatch": "Le chemin du fichier ne correspond à aucun livre de cette bibliothèque", "noFileHashMatch": "Le hachage du fichier ne correspond à aucun livre de cette bibliothèque", "noIsbnMatch": "ISBN ne correspond à aucun livre de cette bibliothèque", + "noAsinMatch": "L'ASIN ne correspond à aucun livre de cette bibliothèque", "insufficientSourceData": "Pas assez de métadonnées pour tenter une correspondance", "ambiguousIsbnMatch": "Plusieurs livres correspondent au même ISBN", + "ambiguousAsinMatch": "Plusieurs livres correspondent au même ASIN", "ambiguousFileHashMatch": "Plusieurs livres correspondaient au même hachage de fichier", "ambiguousFilePathMatch": "Plusieurs livres correspondaient au même chemin de fichier", "ambiguousTitleAuthorMatch": "Plusieurs livres correspondaient au même titre et au même auteur", @@ -5941,6 +6748,7 @@ }, "matchStrategy": { "isbn": "Correspondant à ISBN", + "asin": "Correspondance par ASIN", "fileHash": "Correspondance par hachage de fichier", "pathMapping": "Correspondant au chemin du fichier mappé", "titleAuthor": "Assorti par titre et auteur", @@ -5967,18 +6775,18 @@ "loadSuggestionsFailed": "Échec du chargement des suggestions de mappage utilisateur", "sourceFieldsRequired": "L'hôte, l'utilisateur, la base de données et le nom de la source sont requis", "connectionPassedWithWarnings": "Test de connexion réussi avec avertissements", - "connectionPassedWithWarningCount": "Test de connexion réussi avec {count} avertissement(s). Premier : {warning}", + "connectionPassedWithWarningCount": "Test de connexion réussi. Nombre d'avertissements : {count}. Premier : {warning}", "connectionPassed": "Test de connexion réussi", - "connectionMissingTables": "Connexion correcte, mais {count} table(s) requise(s) sont manquantes", + "connectionMissingTables": "Connexion établie, mais nombre de tables requises manquantes : {count}", "cannotTestMediaWhileRunning": "Impossible de tester le chemin du support lorsqu'une exécution est active", - "mediaPathRequired": "Le chemin racine du média est requis pour l’importation de la couverture.", + "mediaPathRequired": "Le chemin racine du média est requis pour l'importation de la couverture.", "mediaPathAbsolute": "Utilisez un chemin absolu (par exemple : /books).", "mediaPathVerified": "Chemin du média vérifié.", "mediaPathValid": "Le chemin du média est valide et lisible", "mediaPathValidationFailed": "La validation du chemin du média a échoué.", "connectionFailedBeforeMedia": "Le test de connexion a échoué avant que la validation du chemin du support ne puisse être terminée.", "cannotModifySourceWhileRunning": "Impossible de modifier la source lorsqu'une exécution est active", - "sourceSavedWithWarnings": "Source enregistrée et validée avec {count} avertissement(s)", + "sourceSavedWithWarnings": "Source enregistrée et validée. Nombre d'avertissements : {count}", "sourceSaved": "Source enregistrée et validée", "saveSourceFailed": "Échec de l'enregistrement ou de la validation de la source", "cannotSaveMappingsWhileRunning": "Impossible d'enregistrer les mappages lorsqu'une exécution est active", @@ -6013,10 +6821,14 @@ }, "notifications": { "title": "Notifications", + "description": "Consultez et gérez vos notifications.", "markAllRead": "Marquer tout comme lu", "clear": "Effacer", "empty": "Aucune notification pour l'instant", "loadMore": "Charger plus de notifications", + "dismiss": "Ignorer la notification", + "occurrences": "Est arrivé {count} fois", + "occurrencesShort": "x {count}", "preferences": { "title": "Notifications", "subtitle": "Choisissez les catégories de notifications que vous souhaitez recevoir.", @@ -6025,7 +6837,7 @@ "saved": "Préférences de notification enregistrées", "saveFailed": "Échec de l'enregistrement des préférences", "savePreferenceFailed": "Échec de l'enregistrement des préférences", - "whatsNewToggle": "Afficher \"Quoi de neuf\" après les mises à jour", + "whatsNewToggle": "Afficher « Quoi de neuf » après les mises à jour", "whatsNewToggleHint": "Une fenêtre contextuelle mettant en évidence les nouvelles fonctionnalités après les mises à jour de l'application. Les archives restent disponibles dans tous les cas.", "groups": { "library": "Bibliothèque", @@ -6035,6 +6847,20 @@ "app": "Mises à jour de l'application" }, "enabledCount": "{enabled} sur {total} activés", + "levels": { + "off": { + "short": "Désactiver", + "description": "Ne me notifiez jamais à ce sujet." + }, + "problems": { + "short": "Problèmes", + "description": "Me notifier uniquement lorsqu'il y a un problème ou que mon attention est nécessaire." + }, + "all": { + "short": "Toutes", + "description": "Me notifier à chaque fois, même en cas de réussite." + } + }, "categories": { "scanning": { "label": "Analyse de la bibliothèque", @@ -6066,7 +6892,7 @@ }, "bookDock": { "label": "Book Dock", - "description": "Lorsque les fichiers déposés dans le dock sont prêts à être examinés ou finalisés." + "description": "Lorsque les fichiers déposés dans Book Dock sont prêts à être examinés ou finalisés." }, "koboSync": { "label": "Synchronisation Kobo", @@ -6090,16 +6916,16 @@ "preparing": "Préparation du lecteur PDF", "opening": "Ouverture PDF" }, - "loadingBook": "Chargement du livre…", + "loadingBook": "Chargement du livre...", "failedToLoadBook": "Échec du chargement du livre", "chapterNumber": "Chapitre {number}", "peek": { - "badge": "Jetant un coup d'oeil", + "badge": "Jetant un coup d'œil", "startReading": "Commencez à lire" }, "toast": { "linkedHighlightError": "Impossible d'ouvrir la position de surbrillance liée", - "resumed": "Reprise à {pct}% - {label}" + "resumed": "Reprise à {pct} % - {label}" }, "header": { "goBack": "Retourner", @@ -6120,12 +6946,13 @@ "nextSection": "Section suivante", "goToPlaceholder": "45 ou p123", "jumpToLocation": "Aller à l'emplacement", - "jumpTooltip": "Aller à % ou à la page (par exemple 45 ou p123)", + "jumpTooltip": "Aller à % ou à la page (par exemple 45 ou p123)", "go": "Allez" }, "settings": { "title": "Paramètres", "ariaLabel": "Paramètres du lecteur", + "close": "Fermer les paramètres", "reset": "Rétablir les valeurs par défaut", "modeLabel": "Style de couleur", "mode": { @@ -6136,12 +6963,14 @@ "textSizeSmaller": "Texte plus petits", "textSizeLarger": "Texte plus grand", "pixels": "{value} px", - "percent": "{value}%", + "percent": "{value} %", "pageColor": "Couleur de la page", "font": "Police", "fontBuiltIn": "Intégrée", "fontServer": "Polices du serveur", "fontYours": "Vos polices", + "fontStyle": "Style", + "fontStyleItalicOf": "{style} italique", "lineSpacing": "Interligne", "pageWidth": "Largeur de page", "pageWidthNarrow": "Étroite", @@ -6159,7 +6988,7 @@ "bookDefault": "Par défaut", "singlePage": "Page unique" }, - "advanced": "Mise en page Avancée", + "advanced": "Mise en page avancée", "columns": "Colonnes", "columnsFewer": "Moins de colonnes", "columnsMore": "Plus de colonnes", @@ -6184,13 +7013,13 @@ "fonts": { "bookDefault": "Police du livre par défaut", "serif": "Serif", - "sansSerif": "Sans Serif", + "sansSerif": "Sans empattement", "monospace": "Monospace" } }, "search": { "placeholder": "Rechercher dans le livre (min {min} caractères)...", - "searching": "Recherche…", + "searching": "Recherche...", "tooShort": "Saisissez au moins {min} caractères", "noResults": "Aucun résultat trouvé", "prompt": "Tapez pour rechercher", @@ -6200,7 +7029,7 @@ "tabs": { "chapters": "Chapitres", "bookmarks": "Signets", - "highlights": "Points forts", + "highlights": "Passages surlignés", "toc": "Table des matières", "tocShort": "Table des matières", "marksShort": "Marques", @@ -6215,7 +7044,7 @@ "noHighlights": "Pas encore de faits saillants", "noHighlightsMatch": "Aucun surlignage ne correspond à vos filtres", "searchBookmarks": "Rechercher des favoris...", - "searchHighlights": "Points forts de la recherche...", + "searchHighlights": "Rechercher dans les passages surlignés...", "bookmarkFallback": "Marque-page", "locationUnavailable": "Emplacement indisponible", "customColor": "Personnalisé ({color})", @@ -6233,7 +7062,7 @@ }, "selection": { "copy": "Copier", - "copied": "Copié!", + "copied": "Copié !", "highlight": "Mettre en surbrillance", "translate": "Traduire", "define": "Définir", @@ -6241,8 +7070,8 @@ "apply": "Appliquer" }, "note": { - "title": "Ajouter une note", - "placeholder": "Écrivez votre note…" + "title": "Ajouter une remarque", + "placeholder": "Écrivez votre remarque..." }, "dictionary": { "noDefinition": "Aucune définition trouvée", @@ -6278,8 +7107,11 @@ "fitMode": "Mode d'ajustement", "background": "Contexte", "scrollMode": "Mode défilement", - "scrollModeHint": "Utilisez \"Pas d'espaces\" pour les webtoons et les bandes verticales.", + "scrollModeHint": "Utilisez « Pas d'espaces » pour les webtoons et les bandes verticales.", "readingDirection": "Sens de lecture", + "autoAdvance": "Avance automatique", + "autoAdvanceHint": "Tourner après la dernière page ouvre le livre suivant de la série.", + "autoAdvancePagedOnly": "L'avance automatique ne s'applique qu'en mode paginé.", "pageView": "Affichage des pages", "twoPagePagedOnly": "Les double-pages ne sont affichées qu'en mode paginé.", "spreadSection": "Double-pages étendues", @@ -6325,6 +7157,14 @@ "black": "Noir", "gray": "Gris", "white": "Blanc" + }, + "nextIssue": { + "eyebrow": "Suivant dans la série", + "action": "Lire la suite", + "open": "Lire la suite : {title}", + "numbered": "#{index} {title}", + "untitled": "Sans titre", + "autoAdvanceHint": "Tournez à nouveau la page pour continuer" } }, "audiobook": { @@ -6360,7 +7200,7 @@ }, "series": { "completion": { - "readOfTotal": "{read} sur {total} lu ({percentage}%)" + "readOfTotal": "{read} sur {total} lu ({percentage} %)" }, "ownership": { "label": "Dans la bibliothèque", @@ -6508,7 +7348,7 @@ "series": "Série", "publishers": "Éditeurs", "storage": "Stockage", - "genres": "Genre", + "genres": "Genres", "languages": "Langues", "published": "Publié", "thisYear": "Cette année", @@ -6563,10 +7403,10 @@ "title": "Intégrité de la bibliothèque" }, "libraryMetadataCompleteness": { - "title": "exhaustivité des métadonnées de la bibliothèque" + "title": "Exhaustivité des métadonnées de la bibliothèque" }, "metadataCompleteness": { - "title": "exhaustivité des métadonnées" + "title": "Exhaustivité des métadonnées" }, "metadataFreshness": { "title": "Fraîcheur des métadonnées" @@ -6581,7 +7421,7 @@ "title": "Décennie des publications" }, "publicationYearTimeline": { - "title": "Chronologie de l’année de publication" + "title": "Chronologie de l'année de publication" }, "storageByFormat": { "title": "Stockage par format" @@ -6590,7 +7430,7 @@ "title": "Top 25 des auteurs" }, "topSeries": { - "title": "Séries Top 50" + "title": "50 meilleures séries" }, "booksCompleted": { "title": "Livres terminés", @@ -6609,7 +7449,7 @@ "notEnoughData": "Besoin d'au moins {count} événements de lecture pour ce graphique." }, "genreReadingTime": { - "title": "Genre Temps de lecture", + "title": "Temps de lecture par genre", "notEnoughData": "Il faut au moins {count} genres avec un temps de lecture pour ce graphique." }, "goalTrajectory": { @@ -6671,11 +7511,12 @@ "header": { "entityManager": "Gestionnaire d'entité", "bulkRename": "Renommer en masse", - "duplicateBooks": "Livres en double" + "duplicateBooks": "Livres en double", + "missingResources": "Ressources manquantes" }, "entityTypes": { "authors": "Auteurs", - "genres": "Genre", + "genres": "Genres", "tags": "Balises", "narrators": "Narrateurs", "publishers": "Éditeurs", @@ -6689,7 +7530,7 @@ "selectLibraryPlaceholder": "Sélectionnez une bibliothèque...", "noEligibleLibraries": "Aucune bibliothèque n'a activé le changement de nom de fichier. Activez-le dans les paramètres de la bibliothèque.", "refresh": "Actualiser", - "applyRename": "Appliquer Renommer", + "applyRename": "Appliquer le renommage", "showFullPaths": "Afficher les chemins complets", "columnsMenu": "Colonnes", "renamingInProgress": "Renommer des fichiers - vous pouvez annuler à tout moment.", @@ -6850,7 +7691,7 @@ "noneFoundDescription": "Aucun doublon potentiel n'a été détecté avec les paramètres actuels.", "clustersFound": "{count, plural, =0 {aucun cluster trouvé} one {# cluster trouvé} other {# clusters trouvés} many {# clusters trouvés}}", "plusOthers": "{count, plural, =0 {+ # autre} one {+ # autre} other {+ # d'autres} many {+ # d'autres}}", - "percentSimilar": "{percent}% de similarité", + "percentSimilar": "{percent} % de similarité", "pairDetails": "Détails de la paire", "dismissEntityTitle": "Ignorer toutes les paires pour cette entité", "dismissPairTitle": "Rejeter cette paire" @@ -6906,13 +7747,84 @@ }, "bulkDeleteModal": { "title": "Suppression groupée", - "confirm": "{count, plural, =0 {Etes-vous sûr de vouloir supprimer # entité sélectionnée ?} one {Etes-vous sûr de vouloir supprimer # entité sélectionnée ?} other {Etes-vous sûr de vouloir supprimer # entités sélectionnées ?} many {Etes-vous sûr de vouloir supprimer # entités sélectionnées ?}}", + "confirm": "{count, plural, =0 {Êtes-vous sûr de vouloir supprimer # entité sélectionnée ?} one {Êtes-vous sûr de vouloir supprimer # entité sélectionnée ?} other {Êtes-vous sûr de vouloir supprimer # entités sélectionnées ?} many {Êtes-vous sûr de vouloir supprimer # entités sélectionnées ?}}", "deleteButton": "Supprimer {count}" }, "mergeModal": { "title": "Fusionner des entités", "description": "Sélectionnez l'entité à conserver. Les autres y seront fusionnés et supprimés." } + }, + "missingResources": { + "title": "Ressources manquantes", + "accessDenied": "Vous n'avez pas la permission de nettoyer les ressources manquantes.", + "categoriesLabel": "Catégorie de nettoyage", + "untitled": "Sans titre", + "clearSelection": "Effacer la sélection", + "cleanSelected": "Nettoyer {count} sélectionnés", + "selectAllMatching": "Sélectionner les {count} entrées correspondantes", + "allSelected": "Les {count} entrées correspondantes sont toutes sélectionnées.", + "sweep": { + "title": "Vérification des couvertures", + "description": "Vérifie chaque livre indiquant une couverture par rapport aux fichiers présents sur le disque, et recherche les dossiers de couverture laissés par des livres supprimés. Rien n'est supprimé pendant la vérification.", + "run": "Lancer la vérification", + "running": "Vérification en cours", + "progress": "{processed} livres vérifiés sur {total}", + "lastRun": "Dernière vérification {at}", + "truncated": "Seuls les premiers résultats sont affichés. Nettoyez-les, puis relancez la vérification pour voir le reste." + }, + "categories": { + "missing_books": "Livres manquants", + "broken_covers": "Couvertures cassées", + "orphaned_cover_dirs": "Dossiers de couvertures orphelines" + }, + "found": { + "missing_books": "{count, plural, =0 {Aucun livre avec des fichiers manquants} one {Un livre avec des fichiers manquants} other {# livres avec des fichiers manquants} many {# livres avec des fichiers manquants}}", + "broken_covers": "{count, plural, =0 {Aucune référence de couverture cassée} one {Une référence de couverture cassée} other {# références de couverture cassées} many {# références de couverture cassées}}", + "orphaned_cover_dirs": "{count, plural, =0 {Aucun dossier de couverture orpheline} one {Un dossier de couverture orpheline} other {# dossiers de couverture orpheline} many {# dossiers de couverture orpheline}}" + }, + "empty": { + "missing_books": "Aucun livre manquant", + "broken_covers": "Aucune référence de couverture cassée", + "orphaned_cover_dirs": "Aucun dossier de couverture orpheline", + "description": "Tout est en ordre dans cette catégorie." + }, + "needsSweep": { + "title": "Lancez d'abord la vérification des couvertures", + "description": "Les résultats de couverture proviennent d'une vérification du disque. Lancez-la pour voir les références cassées et les dossiers orphelins." + }, + "coverSource": { + "extracted": "Extraite", + "custom": "Personnalisée" + }, + "table": { + "selectPage": "Sélectionner tout sur cette page", + "coverFolder": "Dossier de couverture du livre #{bookId}", + "fileCount": "{count, plural, one {# fichier} other {# fichiers} many {# fichiers}}" + }, + "confirm": { + "title": "Nettoyer les ressources manquantes ?", + "action": "Nettoyer", + "missing_books": "{count, plural, one {Supprime l'enregistrement en base de données d'un livre dont les fichiers ont disparu. Le livre, ses métadonnées, sa progression de lecture et sa couverture sont supprimés. Cette action est irréversible.} other {Supprime les enregistrements en base de données de # livres dont les fichiers ont disparu. Les livres, leurs métadonnées, leur progression de lecture et leurs couvertures sont supprimés. Cette action est irréversible.} many {Supprime les enregistrements en base de données de # livres dont les fichiers ont disparu. Les livres, leurs métadonnées, leur progression de lecture et leurs couvertures sont supprimés. Cette action est irréversible.}}", + "broken_covers": "{count, plural, one {Efface la référence de couverture d'un livre afin qu'il s'affiche sans couverture. Les autres métadonnées ne sont pas modifiées.} other {Efface les références de couverture de # livres afin qu'ils s'affichent sans couverture. Les autres métadonnées ne sont pas modifiées.} many {Efface les références de couverture de # livres afin qu'ils s'affichent sans couverture. Les autres métadonnées ne sont pas modifiées.}}", + "orphaned_cover_dirs": "{count, plural, one {Supprime un dossier de couverture du disque. Son livre n'est plus dans la base de données. Cette action est irréversible.} other {Supprime # dossiers de couverture du disque. Leurs livres ne sont plus dans la base de données. Cette action est irréversible.} many {Supprime # dossiers de couverture du disque. Leurs livres ne sont plus dans la base de données. Cette action est irréversible.}}" + }, + "cleaned": { + "missing_books": "{count, plural, =0 {Rien à nettoyer} one {Un livre manquant supprimé} other {# livres manquants supprimés} many {# livres manquants supprimés}}", + "broken_covers": "{count, plural, =0 {Rien à nettoyer} one {Une référence de couverture cassée effacée} other {# références de couverture cassées effacées} many {# références de couverture cassées effacées}}", + "orphaned_cover_dirs": "{count, plural, =0 {Rien à nettoyer} one {Un dossier de couverture orpheline supprimé} other {# dossiers de couverture orpheline supprimés} many {# dossiers de couverture orpheline supprimés}}" + }, + "pagination": { + "label": "Pages de ressources manquantes", + "page": "Page {page} sur {total}" + }, + "errors": { + "summary": "Impossible de charger le résumé des ressources manquantes.", + "sweepStart": "Impossible de lancer la vérification des couvertures.", + "sweep": "La vérification des couvertures a échoué.", + "list": "Impossible de charger ces entrées.", + "clean": "Échec du nettoyage." + } } }, "views": { @@ -6934,6 +7846,7 @@ "clearAllFilters": "Supprimer tous les filtres", "expandSeries": "Agrandir la série", "collapseSeries": "Réduire la série", + "collapseLockedWhileSelecting": "Les séries restent développées pendant la sélection", "expanded": "Élargi", "exportMetadata": "Exporter les métadonnées", "showControlsAria": "Afficher les contrôles de la bibliothèque", @@ -6944,7 +7857,7 @@ "notFound": { "title": "Page introuvable", "description": "La page que vous recherchez n'existe pas.", - "goHome": "Rentre chez toi" + "goHome": "Rentrez chez vous" }, "dashboard": { "customize": "Personnaliser le tableau de bord", @@ -6959,7 +7872,7 @@ }, "bookDetail": { "title": "Livre", - "titleWithId": "Livre n°{id}", + "titleWithId": "Livre n° {id}", "pageTitle": { "book": "Livre · {base}", "editMetadata": "Modifier les métadonnées · {base}", @@ -6978,9 +7891,9 @@ "dropFiles": "Déposez des fichiers dans Book Dock", "supportedFormats": "Pris en charge : {formats}", "empty": { - "noSearchMatch": "Aucun fichier ne correspond à \"{query}\"", + "noSearchMatch": "Aucun fichier ne correspond à « {query} »", "noStatusFiles": "Aucun fichier {status}", - "uploadPrompt": "Téléchargez des fichiers ou déposez-les dans le dossier Book Dock" + "uploadPrompt": "Envoyez des fichiers ou déposez-les dans le dossier Book Dock" }, "retry": { "noneToRetry": "Aucun fichier d'erreur à réessayer", @@ -7048,20 +7961,20 @@ "edit": "Modifier la portée intelligente", "koboSync": { "label": "Synchroniser avec Kobo", - "enabledHint": "Les livres de cette Collection Intelligente sont synchronisés avec votre appareil Kobo. Désactivez pour arrêter de les synchroniser.", - "disabledHint": "Activez pour synchroniser les livres de cette Collection Intelligente sur votre appareil Kobo." + "enabledHint": "Les livres de cette collection intelligente sont synchronisés avec votre appareil Kobo. Désactivez cette option pour arrêter leur synchronisation.", + "disabledHint": "Activez cette option pour synchroniser les livres de cette collection intelligente avec votre appareil Kobo." }, "showControlsAria": "Afficher les commandes Smart Scope", "hideFilter": "Masquer le filtre", "showFilter": "Afficher le filtre", - "confirmDelete": "Confirmer ?", + "confirmDelete": "Confirmer ?", "loadError": "Impossible de charger ce SmartScope", "toast": { - "deleted": "\"{name}\" supprimé", - "deleteFailed": "Échec de la suppression de \"{name}\"", - "koboSyncEnabled": "\"{name}\" se synchronise maintenant avec votre Kobo", - "koboSyncDisabled": "\"{name}\" ne se synchronise plus avec votre Kobo", - "koboSyncFailed": "Échec de mise à jour de la synchronisation Kobo pour \"{name}\"" + "deleted": "« {name} » supprimé", + "deleteFailed": "Échec de la suppression de « {name} »", + "koboSyncEnabled": "« {name} » se synchronise maintenant avec votre Kobo", + "koboSyncDisabled": "« {name} » ne se synchronise plus avec votre Kobo", + "koboSyncFailed": "Échec de mise à jour de la synchronisation Kobo pour « {name} »" }, "empty": { "noRules": "Aucune règle configurée", @@ -7085,15 +7998,15 @@ "seeAllReleases": "Voir toutes les versions", "versions": "Versions", "currentVersion": "Version actuelle", - "youreHere": "Tu es là", - "searchPlaceholder": "Rechercher des versions…", + "youreHere": "Vous êtes là", + "searchPlaceholder": "Rechercher des versions...", "noReleasesFound": "Aucune version trouvée.", "noHighlights": "Aucun fait marquant pour cette version.", "showChangelog": "Afficher le journal des modifications complet", "hideChangelog": "Masquer le journal des modifications complet", "openOnGitHub": "Ouvrir sur GitHub", "loadMore": "Charger plus", - "loadingMore": "Chargement…", + "loadingMore": "Chargement...", "loadFailed": "Échec du chargement des versions", "loadMoreFailed": "Impossible de charger d'autres versions. Veuillez réessayer.", "loadErrorHint": "Impossible de charger les versions. Vérifiez votre connexion et réessayez.", @@ -7122,7 +8035,7 @@ "notFound": "Introuvable", "signIn": "Connectez-vous", "initialSetup": "Configuration initiale", - "register": "Créer un Compte", + "register": "Créer un compte", "forgotPassword": "Mot de passe oublié", "resetPassword": "Réinitialiser le mot de passe", "completingSignIn": "Terminer la connexion", @@ -7140,7 +8053,8 @@ "book-covers": "Couvertures de livres", "icons": "Icônes", "layout": "Disposition de l'affichage", - "behavior": "Comportement de la bibliothèque" + "behavior": "Comportement de la bibliothèque", + "language": "Langue" }, "reader": { "general": "Paramètres du lecteur", @@ -7187,6 +8101,7 @@ "restrictions": "Restrictions de contenu" }, "smartScopes": "Portées intelligentes", - "collections": "Collections" + "collections": "Collections", + "missingResources": "Ressources manquantes" } } diff --git a/client/src/locales/ja.json b/client/src/locales/ja.json index 9ab2cbc78..04196c5d1 100644 --- a/client/src/locales/ja.json +++ b/client/src/locales/ja.json @@ -38,7 +38,7 @@ "fields": { "frequency": "読み込み頻度と有効日数", "completion": "集計ブックが開始および完了しました", - "formats": "分布の書式設定", + "formats": "ファイル形式の内訳", "genres": "幅広いジャンルの配布", "trend": "集計読書トレンド", "books": "現在、最新、および最も読まれた本のタイトル", @@ -1674,7 +1674,7 @@ "serverFontVisibilityFailed": "サーバーのフォント表示の更新に失敗しました" }, "bookDock": { - "title": "ブック・ドック", + "title": "Book Dock", "subtitle": "Book Dock に入ったときのファイルの処理方法を設定します。", "dropFolder": "フォルダをドロップ", "containerPath": "コンテナパス", @@ -2062,7 +2062,7 @@ "readingEvents": "イベントを読んでいます", "highlights": "ハイライト", "syncedTotals": "同期合計", - "trashedHighlights": "ゴミ箱のハイライト", + "trashedHighlights": "削除したハイライト", "setupGuide": "セットアップガイド", "setupSteps": "KOReader の設定手順", "setupStepsHint": "カタログの閲覧、ダウンロード、進行状況、イベントの読み取り、ハイライトにBookOrbitプラグインを使用します。進行状況のみにストックプラグインを使用します。", @@ -2217,7 +2217,7 @@ "notesBody": "リーダアプリでOPDSアカウントを使用してください。誤って共有された場合は、パスワードを非公開にしたり、回転させたりしてください。", "deleteConfirmTitle": "OPDS アカウントを削除しますか?", "deleteConfirmBody": "\"{username}\" を削除します。この操作は元に戻せません。", - "sortRecent": "最近追加したもの", + "sortRecent": "最近追加された項目", "sortTitleAsc": "タイトル (A-Z)", "sortTitleDesc": "Title (Z-A)", "sortAuthorAsc": "著者 (A-Z)", @@ -2250,7 +2250,7 @@ "system": { "tabs": { "file-naming": "ファイル名", - "book-dock": "ブック・ドック", + "book-dock": "Book Dock", "maintenance": "メンテナンス", "audit-log": "監査ログ" } @@ -2689,8 +2689,8 @@ "colorAndStyle": "色とスタイル", "copied": "コピーしました", "copyText": "テキストをコピー", - "trash": "ごみ箱に入れる", - "moveToTrash": "ゴミ箱に移動" + "trash": "ごみ箱", + "moveToTrash": "ごみ箱に移動" }, "hub": { "title": "注釈", @@ -2704,20 +2704,20 @@ "notesOnly": "ノートのみ", "style": "スタイル", "source": "ソース", - "bulkTrash": "ごみ箱に入れる", + "bulkTrash": "ごみ箱", "bulkRestore": "復元", "tabs": { "highlights": "ハイライト", - "trash": "ごみ箱に入れる" + "trash": "ごみ箱" }, "empty": { "noMatch": "フィルタに一致するハイライトはありません。", "resetFilters": "フィルターをリセット", - "trashEmpty": "ゴミ箱は空です", + "trashEmpty": "ごみ箱は空です", "noAnnotations": "まだ注釈はありません。Web上で作成したハイライトが表示されるか、eリーダーがここに表示されます。" }, "toast": { - "movedToTrash": "ゴミ箱に移動しました", + "movedToTrash": "ごみ箱に移動しました", "annotationRestored": "注釈が復元されました", "annotationDeletedForever": "注釈は永久に削除されました", "failedToDelete": "削除に失敗", @@ -3187,7 +3187,7 @@ "descending": "降順", "allLoaded": "すべての {total} 本が読み込まれました", "sort": { - "recentlyAdded": "最近追加したもの", + "recentlyAdded": "最近追加された項目", "title": "タイトル", "publishedYear": "出版年" }, @@ -3899,7 +3899,7 @@ "filterByChapter": "チャプターでフィルター", "allChapters": "すべての章", "untitled": "無題のタイトル", - "trash": "ごみ箱に入れる", + "trash": "ごみ箱", "empty": { "noMatch": "フィルタに一致するハイライトはありません。", "resetFilters": "フィルターをリセット", @@ -4442,7 +4442,7 @@ "sort": { "label": "並び替え", "attention": "注意が必要です", - "createdAt": "最近追加したもの", + "createdAt": "最近追加された項目", "fileName": "ファイル名", "fileSize": "サイズ", "format": "書式", @@ -4511,7 +4511,7 @@ "uploadedToast": "{uploaded} をアップロードしました", "uploadFailedToast": "{failed} のアップロードに失敗しました", "uploadPartialToast": "{uploaded}をアップロードしました。 {failed} に失敗しました", - "bookDock": "ブック・ドック", + "bookDock": "Book Dock", "statistics": "統計情報", "achievements": "実績", "annotations": "注釈", @@ -4767,11 +4767,11 @@ "shelves": "棚" }, "widgetNames": { - "readingStreak": "連続読み込み中", - "currentlyReading": "現在の読み込み中", + "readingStreak": "読書継続記録", + "currentlyReading": "読書中", "readingGoal": "読書目標", - "readingDna": "DNA を読んでいる", - "monthlyChallenge": "毎月のチャレンジ", + "readingDna": "読書DNA", + "monthlyChallenge": "月間チャレンジ", "highlightOfTheDay": "今日のハイライト", "neglectedGems": "無視された宝石", "readingRhythm": "リズムを読んでいる", @@ -4781,12 +4781,12 @@ "longWait": "The Long Wait" }, "shelfNames": { - "recentlyAdded": "最近追加したもの", + "recentlyAdded": "最近追加された項目", "continueReading": "読書を続ける", "continueListening": "リスニングを続ける", "wantToRead": "読みたい", "upNextInSeries": "次の系列を開く", - "random": "新しい何かを見つける", + "random": "新しい本を見つける", "smartScope": "スマートスコープ" }, "shelfLayout": { @@ -4818,8 +4818,8 @@ }, "widgets": { "currentlyReading": { - "title": "現在の読み込み中", - "empty": "進行中の本はありません。ここから読んでみてください。", + "title": "読書中", + "empty": "読書中の本はありません。本を読み始めると、ここに表示されます。", "continueReading": "続きを読む" }, "diversityScore": { @@ -4855,7 +4855,7 @@ "startReading": "読書を開始" }, "monthlyChallenge": { - "title": "毎月のチャレンジ" + "title": "月間チャレンジ" }, "neglectedGems": { "title": "無視された宝石", @@ -4865,8 +4865,8 @@ "shuffle": "シャッフル" }, "readingDna": { - "title": "DNA を読んでいる", - "notEnoughData": "読書のDNAをアンロックするには、少なくとも5冊の本を読んでください", + "title": "読書DNA", + "notEnoughData": "5冊以上読むと、あなたの「読書DNA」が解放されます", "basedOn": "{count, plural, =0 {本がないことに基づいています} one {#本に基づいて} other {#本に基づいています}}", "traits": { "length": "長さ", @@ -4876,8 +4876,8 @@ } }, "readingGoal": { - "title": "目標 {year} を読んでいます", - "setGoalPrompt": "あなたの進捗を追跡するために読書の目標を設定してください", + "title": "{year} 年の読書目標", + "setGoalPrompt": "読書目標を設定して、達成状況を記録しましょう", "setGoal": "目標を設定", "booksPerYear": "年間の本数", "ofGoal": "/ {goal}", @@ -4891,8 +4891,8 @@ "avgPerDay": "平均 {time}/日" }, "readingStreak": { - "title": "連続読み込み中", - "empty": "連続記録を開始するには、今日を読んでください", + "title": "読書継続記録", + "empty": "今日から読書を始めて、連続記録をつけましょう", "streakLabel": "{count, plural, =0 {日連続} one {日連続} other {日連続}}", "lastSevenDays": "過去 7 日間" }, @@ -5948,7 +5948,7 @@ "description": "他のライブラリツールからのインポートが完了または失敗した場合。" }, "bookDock": { - "label": "ブック・ドック", + "label": "Book Dock", "description": "ドックにドロップされたファイルは、確認または確定する準備ができています。" }, "koboSync": { @@ -6297,7 +6297,7 @@ "sort": { "seriesOrder": "系列順序", "title": "タイトル", - "recentlyAdded": "最近追加したもの" + "recentlyAdded": "最近追加された項目" }, "order": { "ascending": "昇順", @@ -6390,7 +6390,7 @@ }, "charts": { "acquisitionLag": { - "title": "取得遅延数" + "title": "出版から登録までの期間" }, "booksAddedOverTime": { "title": "時間の経過とともに追加された本", @@ -6401,10 +6401,10 @@ "lastYear": "昨年の" }, "formatDistribution": { - "title": "分布の書式設定" + "title": "ファイル形式の内訳" }, "formatShareOverTime": { - "title": "時間の経過とともに共有をフォーマット" + "title": "Format Share Over Time" }, "genreCooccurrence": { "title": "Gene Co-occurrent" @@ -6416,19 +6416,19 @@ "title": "言語の分布" }, "largestBooks": { - "title": "上位50冊の本" + "title": "ファイルサイズ上位50冊" }, "libraryIntegrity": { - "title": "ライブラリのインテグリティ" + "title": "ライブラリの健全性" }, "libraryMetadataCompleteness": { - "title": "ライブラリメタデータの完了" + "title": "ライブラリメタデータの完全性" }, "metadataCompleteness": { - "title": "メタデータの完了" + "title": "メタデータの完全性" }, "metadataScoreDistribution": { - "title": "メタデータスコア配布" + "title": "メタデータスコアの分布" }, "pageCountDistribution": { "title": "ページカウントの配布" @@ -6443,7 +6443,7 @@ "title": "フォーマットによるストレージ" }, "topAuthors": { - "title": "上位25人の著者" + "title": "著者 Top 25" }, "topSeries": { "title": "Top 50 series" @@ -6810,7 +6810,7 @@ } }, "bookDock": { - "title": "ブック・ドック", + "title": "Book Dock", "newFilesDetected": "新しいファイルが検出されました", "reconnecting": "再接続中", "rescanFailed": "再スキャンに失敗しました", @@ -6940,7 +6940,7 @@ "opds": "OPDS", "koboSync": "Kobo Sync", "koreaderSync": "KOReader 同期", - "bookDock": "ブック・ドック", + "bookDock": "Book Dock", "whatsNew": "新着情報", "annotations": "注釈", "achievements": "実績", @@ -7008,7 +7008,7 @@ }, "system": { "file-naming": "ファイル名", - "book-dock": "ブック・ドック", + "book-dock": "Book Dock", "maintenance": "メンテナンス", "audit-log": "監査ログ" }, diff --git a/client/src/locales/ko.json b/client/src/locales/ko.json index 9991ea8c5..5d7503118 100644 --- a/client/src/locales/ko.json +++ b/client/src/locales/ko.json @@ -1432,7 +1432,7 @@ }, "mergeExisting": { "label": "기존 항목과 병합", - "description": "저장된 장르를 유지하고 신규 공급자 장르를 추가합니다", + "description": "기존 장르를 유지하고 새로운 제공자 장르를 추가합니다", "short": "병합" }, "overwriteIfProvided": { @@ -1984,6 +1984,8 @@ "widePageDisable": "비활성화", "forceTwoPage": "작은 화면에서 2페이지 보기 강제 적용", "forceTwoPageHint": "2 페이지 모드가 선택되었을 때 모바일 환경에서의 자동 비활성화 우회 여부", + "autoAdvance": "자동으로 다음 책으로 넘어가기", + "autoAdvanceHint": "마지막 페이지를 넘겨 시리즈의 다음 책으로 넘어가세요", "off": "끄기", "on": "켜기", "display": "디스플레이", @@ -2121,6 +2123,7 @@ "modSort": "성, 이름으로 형식화", "modInitial": "첫 글자만", "modFixed2": "소수점 둘째 자리까지", + "modMax3": "최대 3개의 값 또는 비워두기", "folderOnlyPrefix": "패턴을", "folderOnlySuffix": "로 끝낸다면 이는 폴더까지만 나타냈음을 의미합니다. 원래 파일 이름은 해당 폴더 내에 보존됩니다.", "conditionalLogic": "조건 로직", @@ -2176,6 +2179,7 @@ "tokenTitle": "책 제목", "tokenSubtitle": "책 부제목", "tokenAuthors": "저자 목록(쉼표로 구분)", + "tokenNarrators": "내레이터(쉼표로 구분)", "tokenYear": "출판 연도", "tokenSeries": "시리즈 이름", "tokenSeriesIndex": "시리즈 번호(0으로 패딩됨)", @@ -3556,7 +3560,10 @@ "EmailRecipientGroupUpdate": "수신자 그룹 업데이트", "EmailRecipientGroupDelete": "수신자 그룹 삭제", "EmailRecipientGroupMemberAdd": "그룹에 수신자 추가", - "EmailRecipientGroupMemberRemove": "그룹에서 수신자 제거" + "EmailRecipientGroupMemberRemove": "그룹에서 수신자 제거", + "MaintenanceMissingBooksClean": "누락된 도서 정리", + "MaintenanceBrokenCoversClean": "비정상 표지 정리", + "MaintenanceOrphanedCoversClean": "미사용 표지 폴더 정리" } }, "auth": { @@ -4767,7 +4774,7 @@ "moveDown": "아래로 이동", "removeSeries": "시리즈 제거", "seriesIndexLabel": "시리즈 번호", - "invalidSeriesIndex": "5.10과 같이 소수점이 최대 한 자리인 숫자를 입력하십시오.", + "invalidSeriesIndex": "5.10과 같이 소수점을 하나만 넣어 숫자를 입력해주세요.", "totalLabel": "시리즈 도서 수", "totalPlaceholder": "/", "totalHint": "이 시리즈의 총 도서 수입니다. 이 시리즈를 보유한 모든 사용자에게 공유됩니다." @@ -4997,10 +5004,10 @@ "applyFetched": "가져온 데이터 적용", "retryErrors": "실패한 항목 재시도", "discardDialog": { - "title": "{count, plural, =0 {삭제할 파일이 없습니까?} one {선택한 파일을 삭제하시겠습니까?} other {선택한 #개 파일을 삭제하시겠습니까?}}", + "title": "{count, plural, =0 {0개 파일을 삭제하시겠습니까?} one {선택한 파일을 삭제하시겠습니까?} other {선택한 파일 #개를 삭제하시겠습니까?}}", "description": "{count, plural, =0 {선택한 파일이 없습니다.} one {선택한 파일을 디스크에서 삭제합니다. 이 작업은 되돌릴 수 없습니다.} other {선택한 #개 파일을 디스크에서 삭제합니다. 이 작업은 되돌릴 수 없습니다.}}", "confirm": "{count, plural, one {파일 삭제} other {#개 파일 삭제}}", - "failed": "선택한 파일을 삭제하지 못했습니다. 다시 시도하십시오." + "failed": "선택한 파일을 삭제하지 못했습니다. 다시 시도해 주세요." }, "commaSeparated": "쉼표로 구분된 항목", "destinationLibrary": "목적지 라이브러리", @@ -5008,7 +5015,7 @@ "nFailed": "{count}개 실패", "updatedOfFiles": "총 {total}개 파일 중 {updated}개 업데이트됨", "errorStatus": "오류 {status}", - "invalidSeriesIndex": "5.10과 같이 소수점이 최대 한 자리인 숫자를 입력하십시오.", + "invalidSeriesIndex": "5.10과 같이 소수점을 하나만 넣어 숫자를 입력해주세요.", "tab": { "all": "모두", "pending": "대기 중", @@ -6711,6 +6718,9 @@ "clear": "지우기", "empty": "아직 알림이 없습니다", "loadMore": "알림 더보기", + "dismiss": "알림 해제", + "occurrences": "{count}회 발생함", + "occurrencesShort": "{count}회", "preferences": { "title": "알림", "subtitle": "받아보길 원하는 알림의 카테고리를 선택하세요.", @@ -6729,6 +6739,20 @@ "app": "앱 업데이트" }, "enabledCount": "{total} / {enabled} 활성화됨", + "levels": { + "off": { + "short": "끄기", + "description": "관련 정보를 더 이상 알리지 않습니다." + }, + "problems": { + "short": "문제점만", + "description": "작업 실패 시 또는 주의가 필요한 사항이 발생했을 때 알립니다." + }, + "all": { + "short": "모두", + "description": "성공했을 때를 포함하여 항상 정보를 알립니다." + } + }, "categories": { "scanning": { "label": "라이브러리 스캐닝", @@ -6977,6 +7001,9 @@ "scrollMode": "스크롤 모드", "scrollModeHint": "웹툰 및 세로형 배치에는 \"간격 없음\"을 사용하세요.", "readingDirection": "읽기 방향", + "autoAdvance": "자동 넘어가기", + "autoAdvanceHint": "마지막 페이지를 넘겨 시리즈의 다음 책으로 넘어가세요.", + "autoAdvancePagedOnly": "자동 넘어가기 기능은 페이지 모드에서만 적용됩니다.", "pageView": "페이지 보기", "twoPagePagedOnly": "두 페이지 보기는 페이지 모드에서만 표시됩니다.", "spreadSection": "페이지 쌍", @@ -7022,6 +7049,14 @@ "black": "검은색", "gray": "회색", "white": "흰색" + }, + "nextIssue": { + "eyebrow": "시리즈의 다음 작품", + "action": "다음 책 읽기", + "open": "다음 책 읽기: {title}", + "numbered": "#{index} {title}", + "untitled": "제목 없음", + "autoAdvanceHint": "계속하려면 페이지를 다시 한 번 넘기세요" } }, "audiobook": { @@ -7368,7 +7403,8 @@ "header": { "entityManager": "개체 관리자", "bulkRename": "일괄 이름 변경", - "duplicateBooks": "중복 도서" + "duplicateBooks": "중복 도서", + "missingResources": "누락된 리소스" }, "entityTypes": { "authors": "저자", @@ -7609,6 +7645,77 @@ "title": "개체 병합", "description": "유지할 개체를 선택하세요. 나머지 개체들은 선택된 개체에 병합된 후 제거됩니다." } + }, + "missingResources": { + "title": "누락된 리소스", + "accessDenied": "현재 사용자에게는 누락된 리소스를 정리할 권한이 없습니다.", + "categoriesLabel": "카테고리 정리", + "untitled": "제목 없음", + "clearSelection": "선택 항목 지우기", + "cleanSelected": "선택 항목 {count}개 지우기", + "selectAllMatching": "일치하는 항목 {count}개 모두 선택", + "allSelected": "총 {count}개의 일치 항목이 선택되었습니다.", + "sweep": { + "title": "표지 검사", + "description": "디스크 파일과 대조하여 표지가 설정된 도서를 확인하고, 이미 삭제된 도서의 표지가 남아있는 폴더를 탐색합니다. 검사 과정에서는 파일이 삭제되지 않습니다.", + "run": "검사 시작", + "running": "검사 중", + "progress": "총 {total}개 도서 중 {processed}개 검사 완료", + "lastRun": "마지막 검사일시{at}", + "truncated": "첫 번째 결과만 표시되었습니다. 이 항목들을 정리한 후 검사를 다시 실행하여 나머지를 확인하세요." + }, + "categories": { + "missing_books": "누락된 책", + "broken_covers": "비정상 표지", + "orphaned_cover_dirs": "미사용 표지 폴더" + }, + "found": { + "missing_books": "{count, plural, =0 {누락된 파일이 있는 책 없음} one {책 1권의 파일이 누락됨} other {책 #권의 파일이 누락됨}}", + "broken_covers": "{count, plural, =0 {비정상적인 표지 참조 없음} one {비정상적인 표지 참조 1건} other {비정상적인 표지 참조 #건}}", + "orphaned_cover_dirs": "{count, plural, =0 {미사용 표지 폴더 없음} one {미사용 표지 폴더 1개} other {미사용 표지 폴더 #개}}" + }, + "empty": { + "missing_books": "누락된 책 없음", + "broken_covers": "비정상 표지 없음", + "orphaned_cover_dirs": "미사용 표지 없음", + "description": "이 카테고리의 모든 모든 항목이 확인되었습니다." + }, + "needsSweep": { + "title": "표지 검사를 먼저 진행해주세요", + "description": "표지 결과는 디스크 검사를 통해 확인됩니다. 검사를 실행하여 끊어진 참조와 미사용 폴더를 확인하세요." + }, + "coverSource": { + "extracted": "추출됨", + "custom": "커스텀" + }, + "table": { + "selectPage": "이 페이지의 모든 항목 선택", + "coverFolder": "책 #{bookId}의 표지 폴더", + "fileCount": "{count, plural, one {#개 파일} other {#개 파일}}" + }, + "confirm": { + "title": "누락된 리소스들을 정리하시겠습니까?", + "action": "지우기", + "missing_books": "{count, plural, one {파일이 손실된 도서 1권의 데이터베이스 기록을 삭제합니다. 해당 도서와 메타데이터, 독서 진행도, 표지가 모두 제거됩니다. 이 작업은 되돌릴 수 없습니다.} other {파일이 손실된 도서 #권의 데이터베이스 기록을 삭제합니다. 해당 도서와 메타데이터, 독서 진도, 표지가 모두 제거됩니다. 이 작업은 되돌릴 수 없습니다.}}", + "broken_covers": "{count, plural, one {도서 1권의 표지 참조를 지워 표지가 없는 것으로 표시합니다. 이 외의 메타데이터는 변경되지 않습니다.} other {도서 #권의 표지 참조를 지워 표지가 없는 것으로 표시합니다. 이 외의 메타데이터는 변경되지 않습니다.}}", + "orphaned_cover_dirs": "{count, plural, one {디스크에서 표지 폴더 1개를 삭제합니다. 해당 도서는 더 이상 데이터베이스에 존재하지 않습니다. 이 작업은 되돌릴 수 없습니다.} other {디스크에서 표지 폴더 #개를 삭제합니다. 해당 도서는 더 이상 데이터베이스에 존재하지 않습니다. 이 작업은 되돌릴 수 없습니다.}}" + }, + "cleaned": { + "missing_books": "{count, plural, =0 {정리한 항목 없음} one {누락된 책 1권 제거됨} other {누락된 책 #권 제거됨}}", + "broken_covers": "{count, plural, =0 {정리한 항목 없음} one {비정상 표지 참조 1건 정리됨} other {비정상 표지 참조 #건 정리됨}}", + "orphaned_cover_dirs": "{count, plural, =0 {정리한 항목 없음} one {미사용 표지 폴더 1개 제거됨} other {미사용 표지 폴더 #개 제거됨}}" + }, + "pagination": { + "label": "누락된 리소스 페이지", + "page": "페이지 {page} / {total}" + }, + "errors": { + "summary": "누락된 리소스 요약을 불러오지 못했습니다.", + "sweepStart": "표지 검사를 시작하지 못했습니다.", + "sweep": "표지 검사에 실패했습니다.", + "list": "선택한 항목들을 불러올 수 없습니다.", + "clean": "정리에 실패했습니다." + } } }, "views": { @@ -7885,6 +7992,7 @@ "restrictions": "콘텐츠 제한" }, "smartScopes": "스마트 스코프", - "collections": "컬렉션" + "collections": "컬렉션", + "missingResources": "누락된 리소스" } } diff --git a/client/src/locales/pt.json b/client/src/locales/pt.json index b279ddcdf..1666010c2 100644 --- a/client/src/locales/pt.json +++ b/client/src/locales/pt.json @@ -1076,6 +1076,7 @@ "syncMetadataToFiles": "Sincronizar metadados para os arquivos", "deleteLibrary": "Excluir biblioteca", "bookCount": "{count, plural, =0 {nenhum livro} one {# livro} many {# livros} other {# livros}}", + "booksUnit": "{count, plural, one {book} other {books}}", "folderCount": "{count, plural, =0 {nenhuma pasta} one {# pasta} many {# pastas} other {# pastas}}", "fileMode": "Modo por arquivo", "folderMode": "Modo por pasta", @@ -1103,7 +1104,110 @@ "libraryDeleted": "\"{name}\" excluída", "deleteFailed": "Falha ao excluir biblioteca", "refreshingCovers": "Atualizando capas {pct}% ({processed}/{total})", - "coversRefreshed": "Capas atualizadas ({count} processada(s))" + "coversRefreshed": "Capas atualizadas ({count} processada(s))", + "onDiskUnit": "{size} no disco", + "noFilesIndexed": "Nenhum arquivo indexado", + "formatEntry": "{format} {count}", + "formatOverflow": "{count, plural, one {+# more format} other {+# more formats}}", + "extraFolders": "{count, plural, one {+# folder} other {+# folders}}", + "openLibrary": "Abrir {name}", + "moreActions": "Mais ações para {name}", + "statsFailed": "Não foi possível carregar a contagem de bibliotecas. Tudo o resto nesta página ainda funciona.", + "filterLabel": "Filtrar bibliotecas", + "filterPlaceholder": "Filtrar pelo nome ou caminho", + "filterClear": "Limpar filtro", + "sortLabel": "Ordenar", + "noMatchesTitle": "Nenhuma biblioteca corresponde ao filtro", + "noMatchesHint": "Nada corresponde a \"{query}\" pelo nome ou caminho da pasta.", + "totalLibraries": "{count, plural, one {# library} other {# libraries}}", + "neverScanned": "Nunca verificado", + "neverScannedHint": "Executar uma varredura para indexar suas pastas", + "scanFailedAt": "Falhou: {time}", + "scanningPercent": "Escaneando {pct}%", + "scanCounting": "Contando arquivos", + "scanCounts": "{processed} de {total}", + "scanAdded": "{count, plural, one {+# added} other {+# added}}", + "scanUpdated": "{count, plural, one {# updated} other {# updated}}", + "scanMissing": "{count, plural, one {# missing} other {# missing}}", + "scanNoChange": "Nenhuma alteração", + "outcomeSeparator": ", ", + "scanOutcome": "{trigger} - {outcome}", + "syncConfirmBody": "Isto irá sobrescrever os metadados dentro de cada arquivo suportado no {name} diretamente no disco. Esta ação não pode ser desfeita.", + "columns": { + "library": "Biblioteca", + "contents": "Conteúdo", + "onDisk": "No disco", + "automation": "Automação", + "lastScan": "Última verificação", + "actions": "Ações" + }, + "sort": { + "default": "Ordem padrão", + "name": "Nome", + "books": "Livros", + "size": "Tamanho em disco", + "lastScan": "Última verificação" + }, + "trigger": { + "manual": "Manual", + "watcher": "Observador", + "schedule": "Agendamento" + }, + "capability": { + "watch": "Pastas monitoradas", + "schedule": "Agendar verificação", + "fileWrite": "Gravar no arquivo", + "fileRename": "Renomear arquivo", + "on": "{name}: ativado", + "off": "{name}: desativado", + "legendHint": "Meio tracejado desligado" + }, + "stateOn": "Ligado", + "stateOff": "Desligado", + "toggleDetail": "Exibir detalhes de {name}", + "durationMs": "{ms} ms", + "durationSeconds": "{seconds}s", + "durationMinutes": "{minutes}m {seconds}s", + "history": { + "when": "Quando", + "trigger": "Gatilho", + "duration": "Duração", + "result": "Resultado", + "status": "Status", + "statusValue": { + "running": "Executando", + "completed": "Concluído", + "failed": "Falhou" + } + }, + "detail": { + "foldersTitle": "Pastas e layout", + "metadataTitle": "Metadados e leitura", + "accessTitle": "Acesso", + "historyTitle": "Histórico de Varredura", + "path": "Caminho {index}", + "organization": "Organização", + "excludePatterns": "Padrões de exclusão", + "precedence": "Precedência de origem", + "allowedFormats": "Formatos permitidos", + "countsAsStarted": "Conta como iniciado", + "countsAsFinished": "Conta como finalizada", + "peopleWithAccess": "Pessoas com acesso", + "added": "Adicionado", + "coverShape": "Formato da capa", + "coverShapeValue": { + "portrait": "2:3 retrato", + "square": "1:1 quadrado" + }, + "none": "Nenhum", + "allSupported": "Todos suportados", + "patternCount": "{count, plural, one {# pattern} other {# patterns}}", + "peopleCount": "{count, plural, =0 {Não há nenhum explícito} one {# pessoa} other {# pessoas}}", + "historyEmpty": "Esta biblioteca nunca foi escaneada.", + "historyFailed": "Não foi possível carregar o histórico de digitalizações para esta biblioteca." + }, + "scannedAt": "Escaneado {time}", + "detailRegion": "Detalhes para {name}" }, "authorEnrichment": { "configuration": "Configuração", @@ -1157,6 +1261,10 @@ "resetToDefaultsButton": "Restaurar padrões", "recalculateAll": "Recalcular todos", "confirmReset": "Confirmar redefinição", + "resetDialog": { + "title": "Redefinir todos os pesos para o padrão?", + "description": "Todos os 24 campos voltam para os pesos padrão da BookOrbit. Nada é salvo até que você escolha Salvar e Rescore." + }, "reset": "Restaurar", "recalculate": "Recalcular", "subtotal": "subtotal: {count}", @@ -1164,7 +1272,81 @@ "saveFailed": "Falha ao salvar pesos das pontuações", "recalcStarted": "Recálculo de pontuação iniciado em segundo plano", "recalcFailed": "Falha no recálculo", - "resetToDefaults": "Pesos restaurados para os padrões. Salve para aplicar." + "resetToDefaults": "Pesos restaurados para os padrões. Salve para aplicar.", + "howItWorks": { + "title": "Como isso funciona.", + "summary": "Todo livro recebe uma nota de 100 pelo quão completa é seus metadados. Um peso só tem significado ao lado dos outros, então cada campo abaixo mostra a ação da pontuação finalizada pela qual é responsável. Dobrar todos os pesos não muda nada." + }, + "readOnly": "Você pode ver como as pontuações são calculadas, mas alterar os pesos precisa da permissão das configurações do app.", + "compositionTitle": "Onde vem uma pontuação de", + "compositionHint": "Porcentagens sempre somam até 100.", + "searchFields": "Filtrar campos", + "clearSearch": "Limpar busca", + "noMatches": "Nenhum campo corresponde à pesquisa.", + "totalSummary": "{scoring} de 24 campos marcando, {total} pontos no total", + "countGroups": "Contar para a pontuação", + "notScored": "Sem pontuação", + "notScoredHeading": "Não pontuado ({count})", + "notScoredHint": "Um campo a zero também deixa o total, então os livros que faltam não são classificados para baixo.", + "decreaseWeight": "Diminuir o peso de {field}", + "increaseWeight": "Aumente o peso de {field}", + "revertField": "Reverter {field} para o peso salvo", + "table": { + "field": "Campo", + "weight": "Peso", + "share": "Compartilhamento de pontuação", + "versusDefault": "Alterar" + }, + "groups": { + "core": "Principal", + "publishing": "Publicando", + "classification": "Classificação", + "enrichment": "Enriquecimento", + "providers": "IDs do Provedor" + }, + "rules": { + "text": "Conta quando não está vazio", + "positive": "Conta quando está acima de zero", + "count": "Conta quando pelo menos um está definido", + "cover": "Conta quando uma imagem de capa é armazenada", + "providerId": "Conta quando a ID é armazenada", + "seriesIndex": "Conta quando acima de zero, portanto volume 0 nunca conta" + }, + "rail": { + "title": "Onde seus livros ficam", + "description": "A cor do selo que um leitor vê em um cartão de livro, em cada livro que você pode ver hoje.", + "bandsLabel": "Faixas de cores", + "bands": { + "poor": "SUPERE 50", + "fair": "50-69", + "good": "70-89", + "great": "90+" + }, + "median": "Mediana", + "belowFifty": "Abaixo de 50", + "ninetyPlus": "90 ou para cima", + "noBooks": "Nenhum livro marcado ainda. Execute um recore quando a sua biblioteca terminar de importar.", + "scopeNote": "Salve {count, plural, one {# livro} other {# livros}} nas bibliotecas que você pode acessar, pontuadas com os pesos salvos no momento." + }, + "progress": { + "running": "Recalculando biblioteca", + "failed": "O recalculo falhou", + "count": "{processed} livros processados", + "countOf": "{processed} de {total} livros", + "failedCount": "({count} falharam)", + "safeToLeave": "Seguro para sair desta página.", + "dismiss": "Dispensar" + }, + "save": { + "upToDate": "Todas as alterações foram salvas.", + "unsaved": "{count, plural, one {# unsaved change} other {# unsaved changes}}", + "totalShift": "total de {from} a {to} pontos", + "rescores": "Salvando núcleos {count, plural, one {# livro} other {# livros}} em segundo plano.", + "rescoresUnknown": "Salvando a sua biblioteca em segundo plano.", + "action": "Salvar e reconverter", + "discard": "Descartar", + "leaveWarning": "Você tem alterações de peso não salvas. Sair da página e perdê-las?" + } }, "tabs": { "users": "Usuários", @@ -1232,20 +1414,39 @@ "genres": "Gêneros", "narrators": "Narradores", "duration": "Duração", - "abridged": "Abreviado / Resumido" + "abridged": "Abreviado / Resumido", + "tags": "Tags", + "isbn13": "ISBN-13", + "isbn10": "ISBN-10", + "googleBooksId": "ID Google Books", + "goodreadsId": "ID Goodreads", + "amazonId": "ID da Amazon", + "hardcoverId": "ID do Hardcover", + "openLibraryId": "ID do Open Library", + "itunesId": "ID do iTunes", + "koboId": "Kobo ID", + "aladinId": "ID do Aladin" }, "mergeStrategy": { "fillMissing": { "label": "Preencher ausentes", - "description": "Gravar apenas se o campo estiver vazio" + "description": "Gravar apenas se o campo estiver vazio", + "short": "Preencha as lacunas" + }, + "mergeExisting": { + "label": "Mesclar com existente", + "description": "Mantenha gêneros armazenados e adicione novos gêneros provedores", + "short": "Mesclar" }, "overwriteIfProvided": { "label": "Sobrescrever se fornecido", - "description": "Gravar se o provedor retornou um valor" + "description": "Gravar se o provedor retornou um valor", + "short": "Se fornecido" }, "overwrite": { "label": "Sempre sobrescrever", - "description": "Sempre substituir o valor existente" + "description": "Sempre substituir o valor existente", + "short": "Sempre" } }, "autoFetch": { @@ -1313,16 +1514,38 @@ "providers": { "availableSources": "Fontes Disponíveis", "saveChanges": "Salvar Alterações", + "discard": "Descartar", + "configure": "Configurar", "test": "Testar", "testing": "Testando...", + "testHint": "Verifica estas credenciais contra o serviço ao vivo. Nada é salvo.", "enabled": "Ativado", "retryIn": "Tentar novamente em {duration}", "runTestBeforeEnabling": "Execute o Teste antes de ativar", "hardcoverEnableHint": "Execute o Teste com o token atual para desbloquear a chave de ativação.", + "searchPlaceholder": "Regras de filtro", + "sourcesEnabled": "{enabled} de {total} fontes habilitadas", + "groupEnabled": "{enabled} de {total} habilitado", + "unsavedChanges": "{count, plural, one {# unsaved change} other {# unsaved changes}}", + "noMatches": "Nenhuma fonte corresponde aos seus filtros.", + "clearFilters": "Limpar filtros", + "filter": { + "label": "Filtrar fontes por estado", + "all": "Todos", + "enabled": "Ativado", + "needsSetup": "Precisa de configuração" + }, + "groups": { + "books": "Catálogos gerais de livros", + "audiobooks": "Audiolivro", + "comics": "Quadrinhos e Graphic Novels", + "regional": "Catálogos regionais" + }, "badge": { "setupRequired": "Configuração Necessária", "throttled": "Limitado (Throttled)", - "ready": "Pronto" + "ready": "Pronto", + "active": "Ativo" }, "fields": { "apiKey": "Chave de API", @@ -1346,6 +1569,7 @@ "kobo": "Coleta páginas públicas de livros da Kobo. O país e o idioma devem corresponder aos caminhos da URL da Kobo; proteções antibot podem bloquear requisições.", "audible": "Extrai metadados de audiolivros do Audible. Nenhuma configuração adicional é necessária.", "audnexus": "Metadados de audiolivros focados na comunidade. Nenhuma configuração é necessária.", + "librofm": "Metadados do catálogo de audioobook sem DRM. Usa um ponto de extremidade Libro.fm não documentado e está desativado por padrão.", "comicvine": "Metadados de quadrinhos do ComicVine. Uma chave de API gratuita é necessária em comicvine.gamespot.com.", "ranobedb": "Metadados de light novels japonesas do RanobeDB. Nenhuma configuração é necessária.", "lubimyczytac": "Catálogo de livros polonês (lubimyczytac.pl). Coleta páginas públicas de livros. Nenhuma configuração é necessária.", @@ -1378,7 +1602,8 @@ "fillMissingBody": "Gravar apenas se o valor atual estiver vazio.", "overwriteTerm": "Sobrescrever:", "overwriteBody": "Substituir sempre que um provedor tiver dados." - } + }, + "summary": "Os provedores estão no topo da lista e o primeiro que retorna um valor ganha em cima. A estratégia de fusão determina se esse valor pode substituir o que o livro já tem; os gêneros também podem acrescentar novos valores únicos. Definir padrões aqui, em seguida, substituir campos individuais por biblioteca." }, "libraryOverrides": { "title": "Substituições da Biblioteca", @@ -1431,13 +1656,15 @@ }, "groupSummary": { "base": "{fields} campos · {enabled} ativados", - "withOverrides": "{base} · {overrides} substituições" + "withOverrides": "{base} · {overrides} substituições", + "enabledOf": "{enabled} de {fields} habilitado" }, "table": { "field": "Campo", "activeProviders": "Provedores Ativos (ordenados por prioridade)", "mergeStrategy": "Estratégia de Mesclagem", - "status": "Status" + "status": "Status", + "noMatches": "Nenhuma fonte corresponde aos seus filtros." }, "field": { "noProviders": "Ativado, mas não possui provedores", @@ -1445,7 +1672,19 @@ "config": "Configuração", "custom": "Personalizado", "default": "Padrão", - "resetToDefault": "Restaurar para o padrão" + "resetToDefault": "Restaurar para o padrão", + "toggle": "Buscar {field} durante a atualização dos metadados", + "configure": "Configurar {field}", + "add": "Adicionar", + "addHint": "Adicionado no final da ordem. Arraste um campo para movê-lo mais cedo.", + "addProviderTo": "Adicionar um provedor à {field}", + "removeProvider": "Remover {provider}", + "noProvidersYet": "Nenhum provedor ainda", + "skippedCount": "{count, plural, one {# updated} other {# updated}}", + "unsaved": "Não salvo", + "override": "Sobrescrever", + "inherited": "Herdado", + "morePreview": "+{count} a mais" }, "reservoir": { "disabled": "{provider} - desativado", @@ -1459,6 +1698,69 @@ "statusDisabled": "desativado", "statusNotConfigured": "não configurado", "done": "Concluído" + }, + "scope": { + "label": "Escopo da regra", + "global": "Padrões Globais", + "overrideCount": "{count, plural, one {# overridden field} other {# overridden fields}}", + "unsavedMarker": "Possui alterações não salvas" + }, + "toolbar": { + "searchFields": "Buscar campos", + "clearSearch": "Limpar busca", + "provider": "Provedor", + "anyProvider": "Qualquer", + "providerMenuTitle": "Filtrar e editar em massa pelo provedor", + "usedIn": "{count, plural, =0 {unused} one {# field} other {# fields}}", + "showOnlyThese": "Mostrar apenas os campos que o usam", + "bulkLabel": "Aplique para todos os campos {count} que o utilizam", + "makeFirst": "Tornar-se primeiro em todos os lugares", + "makeLast": "Tornar durável em todos os lugares", + "removeEverywhere": "Remover de todos os campos", + "allFields": "Todos os campos", + "overridesOnly": "Substituir apenas", + "clearFilters": "Limpar filtros" + }, + "providerState": { + "disabled": "Desativado", + "notConfigured": "Não configurado", + "disabledDetail": "{provider} está desligado, então ele permanece na ordem mas é ignorado.", + "notConfiguredDetail": "{provider} ainda não tem credenciais e, portanto, permanece no pedido, mas é ignorado." + }, + "detail": { + "priority": "Prioridade do provedor", + "priorityHint": "O primeiro provedor que retorna um valor ganha.", + "moveUp": "Mover {provider} antes", + "moveDown": "Mover {provider} depois", + "result": "Resultado", + "resultHint": "Na próxima atualização este campo resolve esta ordem:", + "noUsableProviders": "Nenhum provedor utilizável - este campo não será preenchido.", + "skippedSummary": "{count, plural, one {{providers} está na ordem, mas será ignorado.} other {{providers} estão no pedido, mas serão ignorados.}}", + "appliesTo": "Aplica-se a {scope}.", + "inheritGlobal": "Herdar regra global", + "inheritingGlobal": "Herdando a regra global.", + "collapse": "Recolher" + }, + "save": { + "upToDate": "Nenhuma alteração não salva", + "unsaved": "{count, plural, one {# unsaved change} other {# unsaved changes}} no {scope}", + "discard": "Descartar", + "action": "Salvar {scope}" + }, + "confirm": { + "clearProviders": { + "title": "Remover todos os provedores?", + "description": "Isso esvazia a lista de provedores em todos os 16 campos do {scope}. Nada é salvo até que você escolha Salvar." + }, + "resetScope": { + "title": "Redefinir para os padrões?", + "globalDescription": "Isso substitui suas regras globais de campo com os padrões do sistema e salva imediatamente.", + "libraryDescription": "Isso remove cada substituição no {scope} por isso herda as regras globais novamente, e economiza imediatamente." + }, + "removeProvider": { + "title": "Remover {provider} de cada campo?", + "description": "Isto tira {provider} do pedido do provedor em todos os campos do {scope}. Nada é salvo até que você escolha Salvar." + } } }, "genreBlocklist": { @@ -1553,6 +1855,15 @@ "score": "Atribua pesos aos campos de metadados para calcular o quanto confiar nos resultados buscados.", "auto-fetch": "Busque automaticamente capas, descrições e outros detalhes quando novos livros forem adicionados à sua biblioteca.", "authors": "Busque automaticamente biografias e fotos de perfil quando novos autores aparecerem em sua biblioteca." + }, + "preferences": { + "toast": { + "saved": "Preferências de metadados salvas", + "saveFailed": "Não foi possível salvar as preferências de metadados. Verifique sua conexão e tente novamente.", + "globalReset": "Regras de campo globais redefinidas para os padrões do sistema", + "libraryReset": "A biblioteca foi redefinida para as regras globais", + "resetFailed": "Não foi possível salvar as preferências de metadados. Verifique sua conexão e tente novamente." + } } }, "reader": { @@ -1676,6 +1987,8 @@ "widePageDisable": "Desativar", "forceTwoPage": "Forçar página dupla em telas pequenas", "forceTwoPageHint": "Ignorar a reversão automática para mobile quando o modo paginado de duas páginas estiver selecionado", + "autoAdvance": "Avançar automaticamente para o próximo livro", + "autoAdvanceHint": "Passe a última página para abrir o próximo livro da série", "off": "Desativado", "on": "Ativado", "display": "Exibição", @@ -1813,6 +2126,7 @@ "modSort": "Formato Sobrenome, Nome", "modInitial": "Apenas a primeira letra", "modFixed2": "Duas casas decimais", + "modMax3": "Até três valores, caso contrário, nada", "folderOnlyPrefix": "Termine um padrão com", "folderOnlySuffix": "para especificar apenas uma pasta. O nome original do arquivo será preservado dentro dela.", "conditionalLogic": "Lógica Condicional", @@ -1868,6 +2182,7 @@ "tokenTitle": "Título do livro", "tokenSubtitle": "Subtítulo do livro", "tokenAuthors": "Autor(es), separado por vírgulas", + "tokenNarrators": "Narrador(es) separados por vírgulas", "tokenYear": "Ano de publicação", "tokenSeries": "Nome da série", "tokenSeriesIndex": "Índice da série (zero-padded)", @@ -1878,7 +2193,104 @@ "tokenOriginalFilename": "Nome do arquivo original (sem extensão)", "tokenExtension": "Extensão de arquivo (sem ponto)", "patternHelpIntro": "Padrões usam tokens como {titleToken} e {authorsToken}, mais modificadores e segmentos opcionais.", - "browseTokensAndExamples": "Navegar nos tokens e exemplos" + "browseTokensAndExamples": "Navegar nos tokens e exemplos", + "subtitleShort": "Pasta e nome dos padrões para arquivos armazenados.", + "rule": { + "fileAsBook": "Padrão de Arquivo como Livro", + "folderAsBook": "Padrão de Pasta como Livro", + "download": "Nomenclatura de download" + }, + "howItWorks": { + "title": "Como é escolhido um caminho.", + "summary": "Uma biblioteca com um padrão de suas próprias vitórias. Toda outra biblioteca segue o padrão global para seu modo de organização. Alterar um padrão não move livros já no disco; novos uploads seguem-o a partir do próximo envio." + }, + "filterRules": "Regras de filtragem", + "librariesGroup": "Bibliotecas", + "customCount": "{custom}/{total} personalizado", + "noRuleMatches": "Nenhuma regra corresponde a \"{query}\".", + "unsavedMarker": "Possui alterações não salvas", + "backToRules": "Voltar às regras de nomes", + "appliesToLibraries": "{count, plural, =0 {Nenhuma biblioteca usa este padrão} one {Aplica-se à biblioteca #} other {Aplica-se a # bibliotecas}}", + "downloadScope": "Baixa e exporta ZIPs", + "badgeInherits": "Heranças padrão", + "badgeUnsaved": "Não salvo", + "patternLabel": "Padrão", + "readOnlyFromGlobal": "Somente leitura, a partir do padrão global", + "useGlobalDefault": "Utilizar o padrão global", + "resetToShipped": "Redefinir para o padrão enviado", + "addOverride": "Adicionar uma substituição", + "inheritsNotice": "Esta biblioteca segue a biblioteca {base}. Adicione uma substituição para dar a ela um padrão próprio.", + "libraryRuleHint": "Sobrescreve o {base} apenas para esta biblioteca.", + "scopeLibrary": "Aplica-se apenas aos envios para {name}.", + "scopeDownload": "Aplica-se a cada download de arquivo único e cada arquivo dentro de um ZIP.", + "scopeGlobal": "{count, plural, one {Aplica-se à biblioteca # que não tem nenhum padrão próprio.} other {Aplica-se a # bibliotecas que não têm nenhum padrão próprio.}}", + "scopeGlobalNone": "Nenhuma biblioteca usa este padrão agora; Toda biblioteca neste modo tem seu próprio padrão.", + "unbalancedOptional": "Falta um grupo opcional para o seu colchete de ângulo de fechamento", + "unbalancedToken": "Falta um token em sua chave de fechamento", + "structure": "Estrutura", + "paletteOptional": "opcional", + "paletteOptionalHint": "Envolve um segmento para que ele seja descartado quando um token dentro dele está vazio", + "paletteFallback": "alternativo", + "paletteFallbackHint": "Dentro de um grupo opcional, o texto usado quando o lado esquerdo não pode ser preenchido", + "paletteSeparator": "pasta", + "paletteSeparatorHint": "Inicia um novo nível de pasta", + "modUpper": "MAIÚSCULO", + "modLower": "minúsculas", + "recipesLabel": "Ou comece com uma receita", + "recipe": { + "seriesShelf": "Prateleira de séries", + "calibre": "Calibre style", + "alphabetical": "Alfabético", + "flat": "Cumprimento, sem pastas", + "originalName": "Nome do arquivo original", + "authorTitle": "Autor e título", + "titleOnly": "Sómente o Título", + "seriesOrdered": "Ordem da Série" + }, + "resultPanel": "Resultado resolvido", + "resultFor": "Resultado: {rule}", + "copyResult": "Copie o resultado resolvido", + "resultCopied": "Resultado resolvido copiado para a área de transferência", + "resultCopyFailed": "Falha ao copiar o resultado resolvido", + "sampleBookNote": "Exemplo de livro usado para cada pré-visualização", + "missingMetadata": "Se faltarem metadados", + "caseNoSeriesLabel": "Sem série", + "caseNoYearLabel": "Sem ano", + "caseNoAuthorLabel": "Sem autor", + "previewEmpty": "Este padrão não resolve nada, então o nome do arquivo original seria usado em vez desse.", + "previewEmptyShort": "Não resolve nada", + "crossPlatformShortHint": "Substitui caracteres que o Windows rejeita. Pré-visualizações refletem esta configuração.", + "rulesSaved": "{count, plural, one {# regra de nome salvo} other {# regras de nome salvo}}", + "rulesSaveFailed": "{count, plural, one {Falha ao salvar a regra # de nomenclatura} other {Falha ao salvar as regras de nomenclatura #}}", + "rulesPartiallySaved": "{saved} salvo, falha {failed}. As regras que falharam ainda têm alterações não salvas.", + "save": { + "unsaved": "{count, plural, one {# unsaved change} other {# unsaved changes}}", + "upToDate": "Nenhuma alteração não salva", + "discard": "Descartar", + "action": "Salvar alterações", + "blocked": "Corrigir o padrão inválido antes de salvar" + }, + "examplesDescription": "Idiomas as receitas não se cobre. Um padrão que termina em uma barra resolve uma pasta e mantém o nome do arquivo enviado dentro dela.", + "examplesApply": "Aplicar", + "examplesApplyAria": "Aplique o padrão {label}", + "examplesUploadOnly": "Estes são padrões de upload, mostrados aqui para referência. Alterne para um Arquivo como Livro ou Pasta como regra para aplicar um.", + "examplesFileModeOnly": "Pasta como livro precisa de um segmento de nome de arquivo próprio, então este idiota se aplica somente ao Arquivo como bibliotecas de livros.", + "example": { + "seriesOrStandalone": "Séries, ou um diretório autônomo", + "optionalSubtitle": "Legenda opcional", + "languageFolder": "Pasta do idioma", + "publisherFolder": "Pasta do editor", + "stackedOptional": "Pastas opcionais empilhadas", + "folderDrop": "Apenas pasta, mantenha o nome de arquivo enviado" + }, + "exampleCase": { + "complete": "Concluído", + "noSeries": "Sem série", + "noSubtitle": "Sem legenda", + "noLanguage": "Sem idioma", + "noPublisher": "Sem editora" + }, + "unknownModifier": "Modificador desconhecido \"{modifier}\". Será ignorado, mantendo o valor inalterado." }, "kobo": { "title": "Sincronização Kobo", @@ -2661,7 +3073,10 @@ "email": "E-mail", "access": "Acesso", "status": "Status", - "actions": "Ações" + "actions": "Ações", + "user": "Usuário", + "libraries": "Bibliotecas", + "lastActive": "Última atividade" }, "adminBadge": "Admin", "permissionCount": "{count, plural, =0 {nenhuma permissão} one {uma permissão} many {# permissões} other {# permissões}}", @@ -2724,12 +3139,66 @@ }, "pagination": { "label": "Paginação de usuários", - "page": "Página {page} de {totalPages}" + "page": "Página {page} de {totalPages}", + "showing": "Exibindo {shown} de {total} sessões" }, "editUserAria": "Editar {name}", "resetPasswordAria": "Redefinir a senha para {name}", "deleteUserAria": "Excluir {name}", - "moreActionsAria": "Mais ações para {name}" + "moreActionsAria": "Mais ações para {name}", + "headerSummary": "{count, plural, =0 {Sem contas} one {# conta} other {# contas}} · {admins} com acesso de administrador", + "noEmail": "Sem endereço", + "editAccount": "Editar conta", + "cardMeta": "{access} · {libraries} · {lastActive}", + "accessTier": { + "superuser": "Super usuário", + "admin": "Admin", + "standard": "Padrão", + "custom": "Personalizado", + "none": "Sem acesso" + }, + "libraries": { + "all": "Todas {total}", + "some": "{granted} de {total}" + }, + "statusLocked": "Bloqueado", + "status": { + "never": "Nunca", + "neverSignedIn": "Nunca logou", + "defaultPassword": "Senha Padrão", + "contentFiltered": "Conteúdo filtrado", + "unlocksIn": "Desbloquear {when}" + }, + "attention": { + "title": "Precisa de atenção", + "count": "{count, plural, one {# conta} other {# conta}}", + "filter": "{count, plural, one {# precisa de atenção} other {# precisa de atenção}}", + "more": "{count} mas não mostrado aqui", + "reason": { + "locked": "{name} é bloqueado após muitas falhas no login", + "neverSignedIn": "{name} nunca fez login", + "defaultPassword": "{name} ainda está usando a senha que a conta foi criada com" + }, + "detail": { + "unlocksIn": "Desbloqueia automaticamente {when}", + "created": "Criado em {when}", + "linkExpired": "Criado em {when} · O link de login expirou", + "linkValid": "Criado em {when} · link de login válido até {expiry}" + }, + "action": { + "unlock": "Desbloquear agora", + "sendResetLink": "Enviar link de redefinição", + "sendNewLink": "Enviar novo link" + }, + "collapse": "Ocultar", + "expand": "Mostrar" + }, + "defaults": { + "title": "Padrões para novas contas", + "appliesTo": "Aplica-se ao auto-registro e ao OIDC", + "startingLibraries": "Carregando bibliotecas", + "startingLibrariesHint": "Acesso ao visualizador concedido automaticamente a cada nova conta." + } } }, "annotations": { @@ -3094,7 +3563,10 @@ "EmailRecipientGroupUpdate": "Atualizar grupo do destinatário", "EmailRecipientGroupDelete": "Excluir grupo de destinatários", "EmailRecipientGroupMemberAdd": "Adicionar destinatário ao grupo", - "EmailRecipientGroupMemberRemove": "Remover destinatário do grupo" + "EmailRecipientGroupMemberRemove": "Remover destinatário do grupo", + "MaintenanceMissingBooksClean": "Livros que faltam foram limpos", + "MaintenanceBrokenCoversClean": "Capas quebradas limpas", + "MaintenanceOrphanedCoversClean": "Pastas de capas órfãs limpas" } }, "auth": { @@ -3893,7 +4365,33 @@ "resetHoldNotice": "{device} ainda tem a posição antiga ({percent})", "resetHoldRelease": "Use a posição deste dispositivo", "resetHoldReleasing": "Liberando...", - "resetHoldReleaseFailed": "Não foi possível usar esta posição. Tente novamente." + "resetHoldReleaseFailed": "Não foi possível usar esta posição. Tente novamente.", + "editions": "Edições", + "editionsSummary": "{count} · {size}", + "moreFormats": "+{count} a mais", + "filesOnDisk": "Arquivos no disco", + "yourReading": "Sua leitura", + "lastRead": "última leitura {when}", + "notStarted": "não iniciada", + "noSessionsYet": "Não há sessões de leitura ainda. Abrindo este livro no progresso do leitor nas faixas de tempo, ritmo e por dispositivo.", + "activitySessions": "Sessões", + "activityTime": "Tempo", + "activityAverage": "Média", + "activityProgress": "Progresso", + "activityDayTooltip": "{day}: {minutes} min", + "activityReached": "{percent} alcançado", + "durationS": "{seconds}s", + "durationM": "{minutes}m", + "durationHm": "{hours}h {minutes}m", + "yourReview": "Sua avaliação", + "reviewNotWritten": "Não escrito ainda", + "writeReview": "Gravar", + "collections": "Coleções", + "noCollections": "Nenhum", + "onDisk": "No disco", + "detailsHeading": "Detalhes", + "percentUnderOne": "<1%", + "percentOverNinetyNine": ">99%" }, "editMetadata": { "fieldCount": "{count, plural, =0 {nenhum campo} one {um campo} many {# campos} other {# campos}}", @@ -4011,6 +4509,11 @@ "pickCoverSource": "Escolher fonte da capa", "pickFromProvider": "Escolher de outro provedor", "pickSource": "Escolher fonte", + "genreWriteMode": { + "label": "Como aplicar gêneros", + "merge": "Mesclar", + "replace": "Substituir" + }, "empty": "vazio", "showLess": "Mostrar menos", "showMore": "Mostrar mais", @@ -4048,7 +4551,22 @@ "searchPrompt": "Busque acima, então clique em um resultado para começar a comparar os metadados." }, "writeAndRename": "Gravar no Arquivo & Renomear", - "writeAndRenameShort": "Gravar & Renomear" + "writeAndRenameShort": "Gravar & Renomear", + "identityCard": "Identidade", + "catalogCard": "Catálogo", + "sourceCard": "Fonte", + "score": "Pontuação", + "scoreTooltip": "Classificação de metadados {score} de 100", + "emptyFields": "{count, plural, one {# field} other {# fields}}", + "emptyFieldsTooltip": "Não preenchido ainda: {fields}. Pesquisar online para pesquisar.", + "libraryRow": "Biblioteca", + "primaryRow": "Primário", + "writeBackRow": "Retornar", + "writeBackOff": "Desligado", + "lastWrittenRow": "Última escrita", + "neverWritten": "Nunca", + "fileCount": "{count, plural, =0 {unused} one {# field} other {# fields}}", + "unknownFormat": "Desconhecido" }, "files": { "title": "Arquivos do livro", @@ -4102,7 +4620,93 @@ "title": "Excluir arquivo?", "description": "Tem certeza que deseja excluir \"{filename}\"? Esta ação não pode ser desfeita." }, - "deleting": "Excluindo..." + "deleting": "Excluindo...", + "folderAria": "Localização da pasta", + "folderContents": "Conteúdo da pasta", + "inspectorAria": "Arquivo selecionado", + "libraryRoot": "raiz da biblioteca", + "onDisk": "No disco", + "missing": "Ausente", + "backToFolder": "Voltar para a pasta", + "copyPath": "Copiar caminho completo", + "pathCopied": "Caminho copiado para a área de transferência", + "resume": "Retomar", + "audiobook": "Audiolivro", + "writeTarget": "Write target", + "enabled": "Ativado", + "disabled": "Desligado", + "notSet": "não definido", + "sortAdded": "Adicionado", + "formatCount": "{count, plural, one {# folder} many {# folders} other {# folders}}", + "trackCount": "{count, plural, one {# livro} many {# livros} other {# livros}}", + "formatsInFolder": "{count, plural, one {# folder} many {# folders} other {# folders}}", + "compositionAria": "Compartilhamento do tamanho da pasta por formato", + "percentRead": "{percent} lido", + "trackOf": "Faixa {track} de {total}", + "groups": { + "ebook": "EBook", + "document": "Documento", + "comic": "Quadrinhos", + "audio": "Áudio", + "extras": "Extras" + }, + "roles": { + "primary": "Primário", + "content": "Alternar", + "supplement": "Complemento", + "cover": "Capa" + }, + "reader": { + "none": "Sem leitor", + "ebook": "Leitor de ebook", + "document": "Leitor de PDF", + "comic": "Leitor de Quadrinhos", + "audio": "Reprodutor de áudio" + }, + "spec": { + "format": "Formato", + "role": "Função", + "size": "Tamanho", + "length": "Extensão", + "added": "Adicionado", + "indexed": "Indexado", + "opensIn": "Abrir em", + "writeBack": "Retornar", + "track": "Rastrear", + "targetFile": "Arquivo de destino", + "notWritten": "Não escrito ainda" + }, + "duration": { + "hoursMinutes": "{hours}h {minutes}m", + "minutes": "{minutes}m", + "minutesSeconds": "{minutes}m {seconds}s", + "seconds": "{seconds}s" + }, + "positionHeading": "Sua posição nesta cópia", + "copiesStarted": "{started} de {total} copias iniciadas", + "nothingStarted": "Nada começou ainda", + "throughFile": "{percent} através deste arquivo", + "notOpened": "Ainda não aberto", + "lastRead": "Última leitura {time}", + "noPosition": "Nenhuma posição de leitura armazenada", + "trackPositionHeading": "Onde esta faixa se encontra", + "totalRuntime": "{duration} no total", + "startsAt": "Inicia em {time}", + "trackLength": "{duration} no total", + "switchFileHeading": "Trocar arquivo", + "writeBackHeading": "Escrito neste arquivo", + "fieldsWithValue": "Os campos {filled} do {total} têm um valor", + "lastRun": "Última execução: {time}", + "neverRun": "Nunca executado", + "historyHeading": "Histórico", + "timeline": { + "written": "Metadados escritos em {format}", + "writtenMany": "Metadados escritos em {format} ×{count}", + "writeDetail": "{count, plural, one {# campo} other {# campos}} · {ms}ms · {trigger}", + "failed": "Falha na gravação", + "indexed": "{name} indexado", + "indexedMany": "Arquivos {count} {format} indexados" + } }, "highlights": { "note": { @@ -4136,9 +4740,236 @@ "hint": "Selecione o texto durante a leitura para criar destaques" }, "uncategorized": "Sem categoria", - "paginationUnit": "destaques" + "paginationUnit": "destaques", + "rail": { + "title": "Marcadores", + "unit": "{count, plural, one {destaque} other {destaques}}", + "withNotes": "envie uma nota", + "chaptersMarked": "capítulos marcados", + "ofChaptersMarked": "do capítulos {total} marcados", + "colour": "Colorido", + "showOnly": "Mostrar apenas {colour}", + "source": "De onde eles vieram", + "health": "Saúde da posição", + "needsAttention": "{count, plural, one {# precisa de atenção} other {# precisa de atenção}}", + "anchorLost": "{count, plural, one {uma perdeu a âncora quando o arquivo mudou} other {# perderam as âncoras quando o arquivo mudou}}", + "reAnchored": "{count, plural, one {uma foi recolocada automaticamente} other {# foram re-ancorados automaticamente}}", + "reviewPositions": "Posição de revisão", + "span": "Extensão", + "firstMark": "Primeira nota", + "lastMark": "Última nota", + "markingDays": "Dias de avaliação", + "exportCount": "Exportar {count}" + }, + "row": { + "select": "Selecione este destaque", + "showMore": "Mostrar mais", + "showLess": "Mostrar menos", + "note": "Nota", + "addNote": "Adicionar uma nota", + "page": "p. {page}", + "anchorLost": "Âncora perdida", + "reAnchored": "Re-ancorado" + }, + "stream": { + "title": "A transmissão", + "searchPlaceholder": "Pesquisar destaques e anotações {count}", + "all": "Todos", + "notes": "Anotações", + "review": "Revisar", + "density": "Alterne entre linhas confortáveis e compactas", + "matchCount": "{shown} de {total} correspondência", + "textChip": "texto “{query}”", + "marks": "{count, plural, one {# livro} many {# livros} other {# livros}}", + "loadingMore": "Carregando mais" + }, + "bulk": { + "selected": "{count} selecionado", + "selectAll": "Selecionar todos os {count}", + "recolour": "Recolorir a seleção", + "recolourTo": "Recolorir para {colour}", + "clear": "Limpar a seleção" + }, + "index": { + "title": "Índice", + "groupBy": "Agrupar o fluxo por", + "byChapter": "Capítulos", + "byColour": "Cores", + "byDay": "Dias" + }, + "activity": { + "title": "Atividade de avaliação", + "days": "{count, plural, one {# dia} other {# dias}}", + "showAll": "Mostrar todos os {count} dias", + "showFewer": "Mostrar menos" + }, + "inspector": { + "title": "Destacar detalhe", + "back": "Voltar ao índice", + "counter": "Marcar {position} de {total}", + "previous": "Nota anterior", + "next": "Próxima marca", + "notePrompt": "Porque é que este assunto importa? As notas são pesquisáveis e viajam com a exportação.", + "style": "Estilo", + "position": "Posição e sincronização", + "openHere": "Abrir aqui" + }, + "band": { + "title": "Onde estão as marcas", + "subtitle": "cada capítulo marcado ao ler a ordem, colorido conforme você o marcou", + "barTitle": "{chapter}, {count} marks", + "start": "Iniciar", + "densest": "Cansado", + "marks": "{count, plural, one {# livro} many {# livros} other {# livros}}", + "longestGap": "Corrida mais longa sem marca", + "chapters": "{count, plural, one {# capítulo} other {# capítulos}}", + "end": "Fim" + }, + "emptyStage": { + "title": "Sem destaques em {title} ainda", + "body": "Os destaques chegam de três lugares e essa página coleta todos eles em um hub.", + "openReader": "Abrir o leitor", + "web": { + "title": "Leia aqui", + "body": "Selecione o texto no leitor embutido e selecione uma cor." + }, + "kobo": { + "title": "Sincronizar com o Kobo", + "body": "Os destaques feitos no dispositivo ficam na próxima sincronização." + }, + "koreader": { + "title": "Sincronizar com o KOReader", + "body": "O plugin faz upload de anotações com suas posições exatas." + } + }, + "shortcuts": { + "title": "Teclado", + "description": "Atalhos de teclado para a lista de destaques.", + "move": "Próxima / marca anterior", + "open": "Abrir o inspetor", + "back": "Voltar ao índice", + "search": "Buscar", + "note": "Escreva uma anotação", + "recolour": "Recolorir", + "select": "Selecionar esta nota", + "regroup": "Reagrupar a transmissão", + "copy": "Copiar orçamento", + "reader": "Abrir no leitor" + } }, "readingLog": { + "resetReadingState": "Redefinir estado de leitura", + "vitals": { + "aria": "Resumo de leitura", + "notSet": "Não definido", + "started": "Iniciado", + "finished": "Concluído", + "editStarted": "Editar a data em que você iniciou este livro", + "editFinished": "Edite a data em que você terminou este livro", + "totalTime": "Tempo total", + "sessions": "Sessões", + "avgSession": "Média de sessão", + "activeDays": "Dias ativos", + "activeDaysOf": "{active} de {total}", + "pace": "Ritmo", + "pacePerHour": "{percent}%/h", + "lastRead": "Última leitura", + "whereYouRead": "Onde você o lê", + "addSession": "Adicionar sessão", + "durationHm": "{hours}h {minutes}m", + "durationM": "{minutes}m", + "durationS": "{seconds}s" + }, + "ledger": { + "title": "Sessões", + "none": "nenhum", + "colDay": "Dia", + "colTime": "Tempo", + "colLength": "Extensão", + "colChange": "Alterar", + "colPosition": "Posição no livro", + "colReached": "Alcançado", + "colSource": "Fonte", + "colFormat": "Formato", + "gapDays": "{count, plural, one {# dia sem ler} other {# dias sem ler}}", + "attemptBegan": "Tentativa {index} iniciada", + "attemptOutsideAny": "Fora de qualquer tentativa", + "empty": "Nenhuma sessão gravada ainda", + "emptyHint": "Abra o livro no leitor, sincronize um dispositivo ou adicione uma sessão à mão." + }, + "attempts": { + "title": "Tentativas", + "none": "nenhum", + "ordinal": "Tentativa {index}", + "addPast": "Adicionar uma tentativa passada", + "reread": "Relendo", + "rereadPrompt": "Iniciar uma nova tentativa de leitura?", + "rereadResetProgress": "Redefinir a posição de leitura para o início. Dispositivos sincronizados podem receber esta redefinição.", + "rereadConfirm": "Iniciar nova leitura", + "fieldStarted": "Iniciados", + "fieldEnded": "Encerrada", + "fieldOutcome": "Resultado", + "outcome": { + "completed": "Concluídos", + "skimmed": "Folheado", + "abandoned": "Abandonado", + "inProgress": "Em progresso" + }, + "spanRange": "{from} até {to}", + "spanSince": "desde {from}", + "spanEnded": "terminou em {to}", + "spanUnknown": "Nenhuma data registrada", + "sessionCount": "{count, plural, one {# missing} other {# missing}}", + "endBeforeStart": "A data de término deve ser igual ou posterior à data de início.", + "editAria": "Editar esta tentativa", + "deleteAria": "Editar esta tentativa", + "cancelDeleteAria": "Cancelar a exclusão desta tentativa", + "confirmDeleteAria": "Confirmar a exclusão desta tentativa", + "empty": "Nenhuma data registrada", + "emptyHint": "Inicie uma releitura ou adicione uma tentativa que você terminou antes que esta biblioteca existisse." + }, + "records": { + "title": "Registos", + "longestSession": "Sessão mais longa", + "bestDay": "Melhor dia", + "longestStreak": "Maior sequência", + "streakDays": "{count, plural, one {# dia} other {# dias}}", + "pace": "Ritmo de leitura", + "jumpedBack": "Pulando de volta", + "jumpedBackTimes": "{count, plural, one {# vez} other {# vezes}}", + "firstOpened": "Primeira abertura", + "empty": "Os registros aparecem depois que este livro tiver sessão." + }, + "band": { + "curve": "Curva", + "trace": "Traçar", + "switchAria": "Visualização do gráfico", + "curveTitle": "Progresso ao longo do tempo", + "traceTitle": "Onde você estava no livro", + "curveSubDays": "{active} dias ativos em {total}", + "curveSubSitting": "uma sessão, sessão por sessão", + "traceSub": "cada barra é o espaço uma sessão coberta", + "traceSubWithBacktracks": "{count, plural, one {cada barra tem uma sessão, # pulou para trás} other {cada barra tem uma sessão, # pulou para trás}}", + "legendPosition": "Posição alcançada", + "legendMinutes": "Minutos Lidos", + "legendBacktrack": "Pulando de volta", + "traceEmpty": "Ainda não há rastros", + "traceEmptyHint": "Uma vez que existem sessões, isso mostra o alongamento do livro cada um coberto, e onde você duplicou de volta.", + "tooltipCovered": "Coberto {from}% a {to}%", + "tooltipMinutes": "{minutes} min" + }, + "emptyStage": { + "title": "Nada registrado para este livro ainda", + "description": "Um log de leitura é construído a partir de sessões. A BookOrbit registra uma vez a cada vez que você lê no leitor da web e pega o resto dos dispositivos que você sincroniza.", + "readerTitle": "Leia aqui", + "readerBody": "Cada minuto no leitor de BookOrbit é registrado automaticamente.", + "koreaderTitle": "Sincronizar com o KOReader", + "koreaderBody": "O plugin empurra cada sessão, com a página que você alcançou.", + "koboTitle": "Sincronizar com o Kobo", + "koboBody": "Conecte o dispositivo e o BookOrbit lê seu próprio contador de tempo de leitura.", + "addSession": "Adicionar uma sessão manualmente", + "recordPast": "Registrar uma leitura passada" + }, "moreActionsAria": "Mais ações do registro de leitura", "export": { "button": "Exportar" @@ -4251,6 +5082,7 @@ "colProgressChangeMobile": "Delta", "colEndProgress": "Progresso Final", "colEndProgressMobile": "Fim", + "jumpToProgress": "Pular para {progress}%", "empty": "Nenhuma sessão de leitura registrada ainda.", "emptyHint": "Adicione uma sessão para começar a construir o histórico de leitura deste livro.", "colPace": "Ritmo", @@ -4300,6 +5132,7 @@ "moveDown": "Mover para baixo", "removeSeries": "Remover série", "seriesIndexLabel": "Posição na série", + "invalidSeriesIndex": "Insira algarismos com no máximo um ponto decimal, como 5,10.", "totalLabel": "Livros em séries", "totalPlaceholder": "de", "totalHint": "Total de livros nesta série. Compartilhado com todos os que têm esta série." @@ -4518,6 +5351,7 @@ "apply": "Aplicar", "done": "Concluído", "discard": "Descartar", + "deselect": "Deselecionar", "finalize": "Finalizar", "rescan": "Reescanear", "uploadAction": "Fazer Upload", @@ -4527,12 +5361,19 @@ "bulkEditAction": "Edição em Massa", "applyFetched": "Aplicar Buscados", "retryErrors": "Tentar Erros Novamente", + "discardDialog": { + "title": "{count, plural, =0 {Discard no files?} one {Discard the selected file?} other {Discard the # selected files?}}", + "description": "{count, plural, =0 {Não há arquivos selecionados.} one {Isto apaga permanentemente o arquivo selecionado do disco. Esta ação não pode ser desfeita.} other {Isto exclui permanentemente os # arquivos selecionados do disco. Esta ação não pode ser desfeita.}}", + "confirm": "{count, plural, one {Exclua o arquivo} other {Exclua # arquivos}}", + "failed": "Os arquivos selecionados não puderam ser apagados. Tente novamente." + }, "commaSeparated": "separado por vírgulas", "destinationLibrary": "Biblioteca de Destino", "destinationFolder": "Pasta de Destino", "nFailed": "{count} falharam", "updatedOfFiles": "Atualizados {updated} de {total} arquivos", "errorStatus": "Erro {status}", + "invalidSeriesIndex": "Insira algarismos com no máximo um ponto decimal, como 5,10.", "tab": { "all": "Todos", "pending": "Pendentes", @@ -5072,6 +5913,14 @@ "twoColumns": "Duas colunas", "twoColumnsDescription": "Mostre uma prateleira por linha." }, + "libraryScope": { + "title": "Dashboard da bibliotecas", + "description": "Escolha quais bibliotecas contribuem com livros e dados de leitura para este painel.", + "allLibraries": "Todas as bibliotecas acessíveis", + "summaryNone": "Nenhuma biblioteca selecionada", + "summaryCount": "{count, plural, one {# biblioteca} other {# bibliotecas}}", + "required": "Selecione pelo menos uma biblioteca." + }, "shelfRows": { "label": "Linhas de livros", "option": "{count, plural, one {Move # book} many {Move # books} other {Move # books}}", @@ -6229,6 +7078,9 @@ "clear": "Limpar", "empty": "Nenhuma notificação ainda", "loadMore": "Carregar mais notificações", + "dismiss": "Descartar a notificação", + "occurrences": "Aconteceu em {count} vez", + "occurrencesShort": "x{count}", "preferences": { "title": "Notificações", "subtitle": "Escolha quais categorias de notificação você quer receber.", @@ -6247,6 +7099,20 @@ "app": "Atualizações do aplicativo" }, "enabledCount": "{enabled} de {total} habilitado", + "levels": { + "off": { + "short": "Desligado", + "description": "Nunca me notifique sobre isto." + }, + "problems": { + "short": "Problemas", + "description": "Notificar-me apenas quando algo falhar ou precisar de atenção." + }, + "all": { + "short": "Tudo", + "description": "Notifique-me todas as vezes, incluindo os êxitos." + } + }, "categories": { "scanning": { "label": "Escaneando Biblioteca", @@ -6495,6 +7361,9 @@ "scrollMode": "Modo de rolagem", "scrollModeHint": "Use \"Sem lacunas\" para webtoons e tiras verticais.", "readingDirection": "Direção de leitura", + "autoAdvance": "Avanço automático", + "autoAdvanceHint": "Passe a última página para abrir o próximo livro da série.", + "autoAdvancePagedOnly": "Avanço automático se aplica apenas no modo de paginação.", "pageView": "Visualização da página", "twoPagePagedOnly": "Duas páginas são exibidas apenas no modo paginado.", "spreadSection": "Propagação de duas páginas", @@ -6540,6 +7409,14 @@ "black": "Preto", "gray": "Cinza", "white": "Branco" + }, + "nextIssue": { + "eyebrow": "Próximo na série", + "action": "Ler a seguir", + "open": "Ler a seguir: {title}", + "numbered": "#{index}: {title}", + "untitled": "Sem título", + "autoAdvanceHint": "Vire a página novamente para continuar" } }, "audiobook": { @@ -6886,7 +7763,8 @@ "header": { "entityManager": "Gerenciador de Entidades", "bulkRename": "Renomeação em Massa", - "duplicateBooks": "Livros duplicados" + "duplicateBooks": "Livros duplicados", + "missingResources": "Recursos faltando" }, "entityTypes": { "authors": "Autores", @@ -7128,6 +8006,77 @@ "title": "Mesclar Entidades", "description": "Selecione qual entidade você deseja manter. As demais serão mescladas nela e em seguida removidas." } + }, + "missingResources": { + "title": "Recursos faltando", + "accessDenied": "Você não tem permissão para limpar os recursos que faltam.", + "categoriesLabel": "Limpar categoria", + "untitled": "Sem título", + "clearSelection": "Limpar seleção", + "cleanSelected": "Limpar {count} selecionados", + "selectAllMatching": "Selecionar todas as {count} entradas correspondentes", + "allSelected": "Todos os arquivos {count} correspondentes são selecionados.", + "sweep": { + "title": "Verificação de capa", + "description": "Verifica todos os livros que reivindicam uma capa contra os arquivos no disco e procura pastas de cobertura, deixadas para trás pelos livros excluídos. Nada é removido durante a verificação.", + "run": "Executar verificação", + "running": "Verificando", + "progress": "Verificado {processed} de {total} livros", + "lastRun": "Última verificação em {at}", + "truncated": "Somente os primeiros resultados são listados. Limpe esses e então execute a verificação novamente para ver o resto." + }, + "categories": { + "missing_books": "Livros faltantes", + "broken_covers": "Capas quebradas", + "orphaned_cover_dirs": "Pastas de capas órfãs" + }, + "found": { + "missing_books": "{count, plural, =0 {Não há livros com arquivos faltando} one {Um livro com arquivos faltando} other {# livros com arquivos faltando}}", + "broken_covers": "{count, plural, =0 {Nada para limpar} one {Limpou uma referência de capa quebrada} other {Limpou # referências de capa quebrada}}", + "orphaned_cover_dirs": "{count, plural, =0 {Não há pastas órfãs} one {Uma pasta de capa órfã} other {# órfãs cobrem as pastas}}" + }, + "empty": { + "missing_books": "Nenhum livro faltando", + "broken_covers": "Nenhuma capa quebrada", + "orphaned_cover_dirs": "Nenhuma pasta de capa órfã", + "description": "Tudo nesta categoria está contabilizado." + }, + "needsSweep": { + "title": "Execute a verificação de capa primeiro", + "description": "Os resultados da capa vêm de uma verificação de disco. Execute-a para ver referências quebradas e pastas órfãs." + }, + "coverSource": { + "extracted": "Extraído", + "custom": "Personalizado" + }, + "table": { + "selectPage": "Selecionar tudo nesta página", + "coverFolder": "Pasta de capa do livro #{bookId}", + "fileCount": "{count, plural, one {# arquivo} other {# arquivos}}" + }, + "confirm": { + "title": "Limpar recursos que faltam?", + "action": "Limpar", + "missing_books": "{count, plural, one {Deleta a gravação do banco de dados para um livro cujos arquivos se foram. O livro, os seus metadados, o progresso de leitura e a capa foram removidos. Isto não pode ser desfeito.} other {Apague os registros do banco de dados para # livros cujos arquivos se foram. Os livros, seus metadados, seu progresso de leitura e capas foram removidos. Isto não pode ser desfeito.}}", + "broken_covers": "{count, plural, one {Limpa a referência da capa de um livro para que ele se mostre como não tendo capa. Os metadados não são alterados.} other {Limpa as referências da capa para # livros para que eles apareçam como sem capa. Metadados não são alterados.}}", + "orphaned_cover_dirs": "{count, plural, one {Exclui uma pasta de capa do disco. Seu livro não está mais no banco de dados. Isso não pode ser desfeito.} other {Apagina # pastas do disco. Seus livros não estão mais no banco de dados. Isso não pode ser desfeito.}}" + }, + "cleaned": { + "missing_books": "{count, plural, =0 {Nada para limpar} one {Removido uma pasta de capa órfã} other {# órfãos removidos cobriram as pastas}}", + "broken_covers": "{count, plural, =0 {Nada para limpar} one {Limpou uma referência de capa quebrada} other {Limpou # referências de capa quebrada}}", + "orphaned_cover_dirs": "{count, plural, =0 {Nada para limpar} one {Removido uma pasta de capa órfã} other {# órfãos removidos cobriram as pastas}}" + }, + "pagination": { + "label": "Faltando páginas de recursos", + "page": "Página {page} de {total}" + }, + "errors": { + "summary": "Não foi possível carregar o resumo do recurso ausente.", + "sweepStart": "Não foi possível iniciar a verificação de capa.", + "sweep": "A verificação de capa falhou.", + "list": "Não foi possível carregar estas entradas.", + "clean": "Falha na limpeza." + } } }, "views": { @@ -7144,6 +8093,9 @@ "sort": "Ordenar", "sortOn": "Em", "resetSort": "Restaurar ordenação padrão", + "shuffle": "Aleatório", + "shuffleAria": "Embaralhar a ordem do livro", + "shuffleHint": "Desenhar uma nova ordem aleatória", "filters": "Filtros", "clear": "Limpar", "clearAllFilters": "Limpar todos os filtros", @@ -7404,6 +8356,7 @@ "restrictions": "Restrições de Conteúdo" }, "smartScopes": "Escopo inteligente", - "collections": "Coleções" + "collections": "Coleções", + "missingResources": "Recursos faltando" } } diff --git a/client/src/locales/ru.json b/client/src/locales/ru.json index 56ba14c54..43c81d6e3 100644 --- a/client/src/locales/ru.json +++ b/client/src/locales/ru.json @@ -779,6 +779,7 @@ "achievementsGroup": "Достижения", "updatesGroup": "Обновления", "bookloreImportConfigured": "Буккорный импорт настроен", + "importLibraryData": "Импорт данных библиотеки", "migrationRunning": "Миграция запущена", "migrationCompleted": "Миграция завершена", "migrationFailed": "Сбой миграции", @@ -802,7 +803,7 @@ "backfillResult": "Пользователи {users} обработаны и награждены наградами {awards}.", "runBackfill": "Запуск бэкэнда", "checkForUpdates": "Проверить обновления", - "checkForUpdatesHint": "Автоматически проверять GitHub на наличие нового релиза при запуске и показывать индикатор в боковой панели, когда он доступен.", + "checkForUpdatesHint": "Автоматически проверять GitHub на наличие нового релиза при запуске, и показывать уведомление в боковой панели, когда оно доступно.", "updateChecksEnabled": "Проверка обновлений включена", "updateChecksDisabled": "Проверка обновлений отключена", "updateSettingFailed": "Не удалось обновить настройки", @@ -1090,7 +1091,44 @@ "libraryDeleted": "\"{name}\" удалено", "deleteFailed": "Не удалось удалить библиотеку", "refreshingCovers": "Обновление покрытий {pct}% ({processed}/{total})", - "coversRefreshed": "Обложки обновлены ( Обработано{count})" + "coversRefreshed": "Обложки обновлены ( Обработано{count})", + "filterLabel": "Фильтровать библиотеки", + "filterPlaceholder": "Фильтр по названию или пути", + "filterClear": "Сбросить фильтр", + "columns": { + "library": "Библиотека", + "contents": "Содержимое", + "onDisk": "На диске", + "automation": "Автоматизация", + "lastScan": "Последнее сканирование", + "actions": "Действия" + }, + "sort": { + "default": "По умолчанию", + "name": "Наименование", + "books": "Книги", + "size": "Размер на диске", + "lastScan": "Последнее сканирование" + }, + "durationSeconds": "{seconds} с", + "durationMinutes": "{minutes}м {seconds}с", + "history": { + "when": "Когда", + "trigger": "Условие срабатывания", + "duration": "Продолжительность", + "result": "Результат", + "status": "Состояние", + "statusValue": { + "failed": "Провалено" + } + }, + "detail": { + "excludePatterns": "Шаблоны исключений", + "countsAsFinished": "Считать законченными", + "peopleWithAccess": "Пользователи с доступом", + "none": "Отсутствует", + "allSupported": "Все поддерживаемые" + } }, "authorEnrichment": { "configuration": "Конфигурация", @@ -1117,7 +1155,10 @@ "saveFailed": "Не удалось сохранить настройки обогащения автора", "noEligibleAuthors": "Авторы не найдены", "noAuthorsToEnrich": "Нет авторов для обогащения", - "queueFailed": "Не удалось создать резервную копию автора" + "queueFailed": "Не удалось создать резервную копию автора", + "metadataPreferences": { + "title": "Источники полей" + } }, "scoreWeights": { "groupLabel": "Вес баллов", @@ -1133,7 +1174,15 @@ "saveFailed": "Не удалось сохранить вес баллов", "recalcStarted": "Пересчет баллов начался в фоновом режиме", "recalcFailed": "Пересчет не удался", - "resetToDefaults": "Вес сброшен по умолчанию. Сохраните для применения." + "resetToDefaults": "Вес сброшен по умолчанию. Сохраните для применения.", + "howItWorks": { + "title": "Как это работает." + }, + "notScoredHeading": "Не оценено ({count})", + "revertField": "Вернуть {field} к сохраненному весу", + "rail": { + "noBooks": "Еще нет оцененных книг. Запустите переоценку, как только ваша библиотека закончит импорт." + } }, "tabs": { "users": "Пользователи", @@ -1171,6 +1220,9 @@ "title": "Интеграции", "subtitle": "Подключите внешние сервисы для синхронизации данных и цитат.", "noPermission": "У вас нет прав на использование интеграции.", + "tabs": { + "hardcover": "Обложка" + }, "providerSubtitles": { "readwise": "Отправляйте свои цитаты в \"Readwise\" автоматически.", "storygraph": "Синхронизируйте ваш прогресс чтения и статус с The StoryGraph." @@ -1196,7 +1248,8 @@ "genres": "Genres", "narrators": "Нарраторы", "duration": "Продолжительность", - "abridged": "Сокращено" + "abridged": "Сокращено", + "tags": "Метки" }, "mergeStrategy": { "fillMissing": { @@ -4450,7 +4503,7 @@ "githubStar": { "title": "Нравится BookOrbit?", "body": "Если BookOrbit помогает в вашей библиотеке, пожалуйста, подумайте о том, чтобы отметить проект на GitHub. Это поможет большему количеству людей найти приложение и поддержать текущую разработку.", - "cta": "Звездная книжная орбита на GitHub" + "cta": "Поставить звезду BookOrbit на GitHub" }, "surfaceOpacity": "Непрозрачность поверхности", "surfaceOpacityValue": "{value}%" @@ -4703,7 +4756,7 @@ "reorderHintWidget": "Перетащите для переупорядочения. Переключите, чтобы показать или скрыть виджет.", "reorderHintShelf": "Перетащите для переупорядочения. Переключите, чтобы показать или скрыть полку.", "smartScope": "Умный охват", - "noSmartScopes": "Пока нет умных областей доступа. Создайте их из боковой панели.", + "noSmartScopes": "Пока нет умных списков. Создайте их из боковой панели.", "addShelf": "Добавить полку", "resetToDefaults": "Сброс по умолчанию" }, diff --git a/client/src/locales/sl.json b/client/src/locales/sl.json index e076134a2..7266bbd95 100644 --- a/client/src/locales/sl.json +++ b/client/src/locales/sl.json @@ -731,6 +731,7 @@ "test": { "connected": "Povezano - {issuer}", "connectionFailed": "Povezava ni uspela", + "privateIssuerAddress": "URL izdajatelja se razreši na zasebni ali lokalni omrežni naslov, zato strežnik ni hotel vzpostaviti povezave. Na strežniku BookOrbit nastavite OIDC_ALLOW_LOCAL_ISSUERS=true, da to omogočite.", "hide": "Skrij", "details": "Podrobnosti", "supported": "podprto", @@ -1075,6 +1076,7 @@ "syncMetadataToFiles": "Sinhroniziraj metapodatke z datotekami", "deleteLibrary": "Izbriši knjižnico", "bookCount": "{count, plural, =0 {ni knjig} one {# knjiga} two {# knjig} few {# knjig} other {# knjig}}", + "booksUnit": "{count, plural, one {# knjiga} two {# knjigi} few {# knjige} other {# knjig}}", "folderCount": "{count, plural, =0 {ni map} one {# mapa} two {# map} few {# map} other {# map}}", "fileMode": "Način datotek", "folderMode": "Način map", @@ -1102,7 +1104,63 @@ "libraryDeleted": "\"{name}\" izbrisana", "deleteFailed": "Brisanje knjižnice ni uspelo", "refreshingCovers": "Osveževanje naslovnic {pct}% ({processed}/{total})", - "coversRefreshed": "Naslovnice osvežene ({count} obdelanih)" + "coversRefreshed": "Naslovnice osvežene ({count} obdelanih)", + "onDiskUnit": "{size} na disku", + "noFilesIndexed": "Nobena indeksirana datoteka", + "formatEntry": "{format} {count}", + "formatOverflow": "{count, plural, one {+# dodatna oblika} two {+# dodatni obliki} few {+# dodatne oblike} other {+# dodatnih oblik}}", + "extraFolders": "{count, plural, one {+# dodatna mapa} two {+# dodatni mepi} few {+# dodatne mape} other {+# dodatnih map}}", + "openLibrary": "Odpri {name}", + "moreActions": "Več dejanj za {name}", + "statsFailed": "Številk knjižnic ni bilo mogoče naložiti. Vse ostalo na tej strani še vedno deluje.", + "filterLabel": "Filtriraj knjižnice", + "filterPlaceholder": "Filtriraj po imenu ali poti", + "filterClear": "Počisti filter", + "sortLabel": "Razvrsti", + "noMatchesTitle": "Nobena knjižnica ne ustreza temu filtru", + "noMatchesHint": "Nič se ne ujema z \"{query}\" po imenu ali poti mape.", + "totalLibraries": "{count, plural, one {# knjižnica} two {# knjižnici} few {# knjižnice} other {# knjižnic}}", + "neverScanned": "Nikoli še pregledano", + "neverScannedHint": "Zaženite pregledovanje za indeksiranje map", + "scanFailedAt": "Neuspešno {time}", + "scanningPercent": "Pregledujem {pct}%", + "scanCounting": "Štejem datoteke", + "scanCounts": "{processed} od {total}", + "scanAdded": "{count, plural, one {+# dodana} two {+# dodani} few {+# dodane} other {+# dodanih}}", + "scanUpdated": "{count, plural, one {# posodobljena} two {# posodobljeni} few {# posodobljene} other {# posodobljenih}}", + "scanMissing": "{count, plural, one {# manjka} two {# manjkata} few {# manjkajo} other {# manjka}}", + "scanNoChange": "ni sprememb", + "outcomeSeparator": ", ", + "scanOutcome": "{trigger} - {outcome}", + "syncConfirmBody": "S tem boste prepisali metapodatke v vsaki podprti datoteki v {name} neposredno na disku. Tega ni mogoče razveljaviti.", + "columns": { + "library": "Knjižnica", + "contents": "Vsebina", + "onDisk": "Na disku", + "automation": "Avtomatizacija", + "lastScan": "Zadnji pregled", + "actions": "Dejanja" + }, + "sort": { + "default": "Privzeti vrstni red", + "name": "Naziv", + "books": "Knjige", + "size": "Velikost na disku", + "lastScan": "Zadnji pregled" + }, + "trigger": { + "manual": "Ročno", + "watcher": "Opazovalec", + "schedule": "Urnik" + }, + "capability": { + "watch": "Spremljane mape", + "schedule": "Načrtovano pregledovanje", + "fileWrite": "Zapiši v datoteko", + "fileRename": "Preimenuj datoteke", + "on": "{name}: vklopljeno", + "off": "{name}: izklopljeno" + } }, "authorEnrichment": { "configuration": "Konfiguracija",