diff --git a/client/pages/config/backups.vue b/client/pages/config/backups.vue index f7845119..44a92f2e 100644 --- a/client/pages/config/backups.vue +++ b/client/pages/config/backups.vue @@ -170,7 +170,7 @@ export default { }) }, updateBackupsSettings() { - if (isNaN(this.maxBackupSize) || this.maxBackupSize <= 0) { + if (isNaN(this.maxBackupSize) || this.maxBackupSize < 0) { this.$toast.error('Invalid maximum backup size') return } @@ -200,10 +200,9 @@ export default { }, initServerSettings() { this.newServerSettings = this.serverSettings ? { ...this.serverSettings } : {} - this.backupsToKeep = this.newServerSettings.backupsToKeep || 2 this.enableBackups = !!this.newServerSettings.backupSchedule - this.maxBackupSize = this.newServerSettings.maxBackupSize || 1 + this.maxBackupSize = this.newServerSettings.maxBackupSize === 0 ? 0 : this.newServerSettings.maxBackupSize || 1 this.cronExpression = this.newServerSettings.backupSchedule || '30 1 * * *' } }, diff --git a/client/players/PlayerHandler.js b/client/players/PlayerHandler.js index 0f806d81..42d76bd0 100644 --- a/client/players/PlayerHandler.js +++ b/client/players/PlayerHandler.js @@ -36,10 +36,10 @@ export default class PlayerHandler { return this.libraryItem ? this.libraryItem.id : null } get isPlayingCastedItem() { - return this.libraryItem && (this.player instanceof CastPlayer) + return this.libraryItem && this.player instanceof CastPlayer } get isPlayingLocalItem() { - return this.libraryItem && (this.player instanceof LocalAudioPlayer) + return this.libraryItem && this.player instanceof LocalAudioPlayer } get userToken() { return this.ctx.$store.getters['user/getToken'] @@ -49,7 +49,7 @@ export default class PlayerHandler { } get episode() { if (!this.episodeId) return null - return this.libraryItem.media.episodes.find(ep => ep.id === this.episodeId) + return this.libraryItem.media.episodes.find((ep) => ep.id === this.episodeId) } get jumpForwardAmount() { return this.ctx.$store.getters['user/getUserSetting']('jumpForwardAmount') @@ -72,7 +72,7 @@ export default class PlayerHandler { this.playWhenReady = playWhenReady this.initialPlaybackRate = this.isMusic ? 1 : playbackRate - this.startTimeOverride = (startTimeOverride == null || isNaN(startTimeOverride)) ? undefined : Number(startTimeOverride) + this.startTimeOverride = startTimeOverride == null || isNaN(startTimeOverride) ? undefined : Number(startTimeOverride) if (!this.player) this.switchPlayer(playWhenReady) else this.prepare() @@ -133,7 +133,7 @@ export default class PlayerHandler { playerError() { // Switch to HLS stream on error - if (!this.isCasting && (this.player instanceof LocalAudioPlayer)) { + if (!this.isCasting && this.player instanceof LocalAudioPlayer) { console.log(`[PlayerHandler] Audio player error switching to HLS stream`) this.prepare(true) } @@ -213,7 +213,8 @@ export default class PlayerHandler { this.prepareSession(session) } - prepareOpenSession(session, playbackRate) { // Session opened on init socket + prepareOpenSession(session, playbackRate) { + // Session opened on init socket if (!this.player) this.switchPlayer() // Must set player first for open sessions this.libraryItem = session.libraryItem @@ -247,7 +248,7 @@ export default class PlayerHandler { this.player.set(this.libraryItem, videoTrack, this.isHlsTranscode, this.startTime, this.playWhenReady) } else { - var audioTracks = session.audioTracks.map(at => new AudioTrack(at, this.userToken)) + var audioTracks = session.audioTracks.map((at) => new AudioTrack(at, this.userToken)) this.ctx.playerLoading = true this.isHlsTranscode = true @@ -301,7 +302,7 @@ export default class PlayerHandler { const currentTime = this.player.getCurrentTime() this.ctx.setCurrentTime(currentTime) - const exactTimeElapsed = ((Date.now() - lastTick) / 1000) + const exactTimeElapsed = (Date.now() - lastTick) / 1000 lastTick = Date.now() this.listeningTimeSinceSync += exactTimeElapsed const TimeToWaitBeforeSync = this.lastSyncTime > 0 ? 10 : 20 @@ -326,7 +327,7 @@ export default class PlayerHandler { } this.listeningTimeSinceSync = 0 this.lastSyncTime = 0 - return this.ctx.$axios.$post(`/api/session/${this.currentSessionId}/close`, syncData, { timeout: 6000 }).catch((error) => { + return this.ctx.$axios.$post(`/api/session/${this.currentSessionId}/close`, syncData, { timeout: 6000, progress: false }).catch((error) => { console.error('Failed to close session', error) }) } @@ -346,17 +347,20 @@ export default class PlayerHandler { } this.listeningTimeSinceSync = 0 - this.ctx.$axios.$post(`/api/session/${this.currentSessionId}/sync`, syncData, { timeout: 9000 }).then(() => { - this.failedProgressSyncs = 0 - }).catch((error) => { - console.error('Failed to update session progress', error) - // After 4 failed sync attempts show an alert toast - this.failedProgressSyncs++ - if (this.failedProgressSyncs >= 4) { - this.ctx.showFailedProgressSyncs() + this.ctx.$axios + .$post(`/api/session/${this.currentSessionId}/sync`, syncData, { timeout: 9000, progress: false }) + .then(() => { this.failedProgressSyncs = 0 - } - }) + }) + .catch((error) => { + console.error('Failed to update session progress', error) + // After 4 failed sync attempts show an alert toast + this.failedProgressSyncs++ + if (this.failedProgressSyncs >= 4) { + this.ctx.showFailedProgressSyncs() + this.failedProgressSyncs = 0 + } + }) } stopPlayInterval() { @@ -419,4 +423,4 @@ export default class PlayerHandler { this.sendProgressSync(time) } } -} \ No newline at end of file +} diff --git a/client/strings/de.json b/client/strings/de.json index af57225f..ac3650cb 100644 --- a/client/strings/de.json +++ b/client/strings/de.json @@ -59,6 +59,7 @@ "ButtonPurgeItemsCache": "Lösche Medien-Cache", "ButtonQueueAddItem": "Zur Warteschlange hinzufügen", "ButtonQueueRemoveItem": "Aus der Warteschlange entfernen", + "ButtonQuickEmbedMetadata": "Schnelles Hinzufügen von Metadaten", "ButtonQuickMatch": "Schnellabgleich", "ButtonReScan": "Neu scannen", "ButtonRead": "Lesen", @@ -66,11 +67,11 @@ "ButtonReadMore": "Mehr anzeigen", "ButtonRefresh": "Neu Laden", "ButtonRemove": "Entfernen", - "ButtonRemoveAll": "Alles löschen", - "ButtonRemoveAllLibraryItems": "Lösche alle Bibliothekseinträge", - "ButtonRemoveFromContinueListening": "Lösche den Eintrag aus der Fortsetzungsliste", - "ButtonRemoveFromContinueReading": "Lösche die Serie aus der Lesefortsetzungsliste", - "ButtonRemoveSeriesFromContinueSeries": "Lösche die Serie aus der Serienfortsetzungsliste", + "ButtonRemoveAll": "Alles entfernen", + "ButtonRemoveAllLibraryItems": "Entferne alle Bibliothekseinträge", + "ButtonRemoveFromContinueListening": "Entferne den Eintrag aus der Fortsetzungsliste", + "ButtonRemoveFromContinueReading": "Entferne die Serie aus der Lesefortsetzungsliste", + "ButtonRemoveSeriesFromContinueSeries": "Entferne die Serie aus der Serienfortsetzungsliste", "ButtonReset": "Zurücksetzen", "ButtonResetToDefault": "Zurücksetzen auf Standard", "ButtonRestore": "Wiederherstellen", @@ -88,6 +89,7 @@ "ButtonShow": "Anzeigen", "ButtonStartM4BEncode": "M4B-Kodierung starten", "ButtonStartMetadataEmbed": "Metadateneinbettung starten", + "ButtonStats": "Statistiken", "ButtonSubmit": "Ok", "ButtonTest": "Test", "ButtonUpload": "Hochladen", @@ -154,6 +156,7 @@ "HeaderPasswordAuthentication": "Passwort Authentifizierung", "HeaderPermissions": "Berechtigungen", "HeaderPlayerQueue": "Player Warteschlange", + "HeaderPlayerSettings": "Player Einstellungen", "HeaderPlaylist": "Wiedergabeliste", "HeaderPlaylistItems": "Einträge in der Wiedergabeliste", "HeaderPodcastsToAdd": "Podcasts zum Hinzufügen", @@ -161,8 +164,8 @@ "HeaderRSSFeedGeneral": "RSS Details", "HeaderRSSFeedIsOpen": "RSS-Feed ist geöffnet", "HeaderRSSFeeds": "RSS-Feeds", - "HeaderRemoveEpisode": "Episode löschen", - "HeaderRemoveEpisodes": "Lösche {0} Episoden", + "HeaderRemoveEpisode": "Episode entfernen", + "HeaderRemoveEpisodes": "Entferne {0} Episoden", "HeaderSavedMediaProgress": "Gespeicherte Hörfortschritte", "HeaderSchedule": "Zeitplan", "HeaderScheduleLibraryScans": "Automatische Bibliotheksscans", @@ -259,7 +262,7 @@ "LabelCustomCronExpression": "Benutzerdefinierter Cron-Ausdruck:", "LabelDatetime": "Datum & Uhrzeit", "LabelDays": "Tage", - "LabelDeleteFromFileSystemCheckbox": "Löschen von der Festplatte + Datenbank (deaktivieren um nur aus der Datenbank zu löschen)", + "LabelDeleteFromFileSystemCheckbox": "Löschen von der Festplatte + Datenbank (deaktivieren um nur aus der Datenbank zu entfernen)", "LabelDescription": "Beschreibung", "LabelDeselectAll": "Alles abwählen", "LabelDevice": "Gerät", @@ -289,13 +292,16 @@ "LabelEmbeddedCover": "Eingebettetes Cover", "LabelEnable": "Aktivieren", "LabelEnd": "Ende", + "LabelEndOfChapter": "Ende des Kapitels", "LabelEpisode": "Episode", "LabelEpisodeTitle": "Episodentitel", "LabelEpisodeType": "Episodentyp", "LabelExample": "Beispiel", + "LabelExpandSeries": "Serie erweitern", "LabelExplicit": "Explizit (Altersbeschränkung)", "LabelExplicitChecked": "Explicit (Altersbeschränkung) (angehakt)", "LabelExplicitUnchecked": "Not Explicit (Altersbeschränkung) (nicht angehakt)", + "LabelExportOPML": "OPML exportieren", "LabelFeedURL": "Feed URL", "LabelFetchingMetadata": "Abholen der Metadaten", "LabelFile": "Datei", @@ -319,6 +325,7 @@ "LabelHardDeleteFile": "Datei dauerhaft löschen", "LabelHasEbook": "E-Book verfügbar", "LabelHasSupplementaryEbook": "Ergänzendes E-Book verfügbar", + "LabelHideSubtitles": "Untertitel ausblenden", "LabelHighestPriority": "Höchste Priorität", "LabelHost": "Host", "LabelHour": "Stunde", @@ -339,6 +346,8 @@ "LabelIntervalEveryHour": "Jede Stunde", "LabelInvert": "Umkehren", "LabelItem": "Medium", + "LabelJumpBackwardAmount": "Zurückspringen Zeit", + "LabelJumpForwardAmount": "Vorwärtsspringn Zeit", "LabelLanguage": "Sprache", "LabelLanguageDefaultServer": "Standard-Server-Sprache", "LabelLanguages": "Sprachen", @@ -446,6 +455,7 @@ "LabelRSSFeedPreventIndexing": "Indizierung verhindern", "LabelRSSFeedSlug": "RSS-Feed-Schlagwort", "LabelRSSFeedURL": "RSS Feed URL", + "LabelReAddSeriesToContinueListening": "Serien erneut zur Fortsetzungsliste hinzufügen", "LabelRead": "Lesen", "LabelReadAgain": "Noch einmal Lesen", "LabelReadEbookWithoutProgress": "E-Book lesen und Fortschritt verwerfen", @@ -455,7 +465,7 @@ "LabelRedo": "Wiederholen", "LabelRegion": "Region", "LabelReleaseDate": "Veröffentlichungsdatum", - "LabelRemoveCover": "Lösche Titelbild", + "LabelRemoveCover": "Entferne Titelbild", "LabelRowsPerPage": "Zeilen pro Seite", "LabelSearchTerm": "Begriff suchen", "LabelSearchTitle": "Titel suchen", @@ -512,10 +522,11 @@ "LabelSettingsStoreMetadataWithItemHelp": "Standardmäßig werden die Metadaten in /metadata/items gespeichert. Wenn diese Option aktiviert ist, werden die Metadaten als OPF-Datei (Textdatei) in dem gleichen Ordner gespeichert in welchem sich auch das Medium befindet", "LabelSettingsTimeFormat": "Zeitformat", "LabelShare": "Teilen", - "LabelShareOpen": "Teilen Offen", + "LabelShareOpen": "Teilen öffnen", "LabelShareURL": "URL teilen", "LabelShowAll": "Alles anzeigen", "LabelShowSeconds": "Zeige Sekunden", + "LabelShowSubtitles": "Untertitel anzeigen", "LabelSize": "Größe", "LabelSleepTimer": "Schlummerfunktion", "LabelSlug": "URL Teil", @@ -553,6 +564,10 @@ "LabelThemeDark": "Dunkel", "LabelThemeLight": "Hell", "LabelTimeBase": "Basiszeit", + "LabelTimeDurationXHours": "{0} Stunden", + "LabelTimeDurationXMinutes": "{0} Minuten", + "LabelTimeDurationXSeconds": "{0} Sekunden", + "LabelTimeInMinutes": "Zeit in Minuten", "LabelTimeListened": "Gehörte Zeit", "LabelTimeListenedToday": "Heute gehörte Zeit", "LabelTimeRemaining": "{0} verbleibend", @@ -592,6 +607,7 @@ "LabelVersion": "Version", "LabelViewBookmarks": "Lesezeichen anzeigen", "LabelViewChapters": "Kapitel anzeigen", + "LabelViewPlayerSettings": "Zeige player Einstellungen", "LabelViewQueue": "Player-Warteschlange anzeigen", "LabelVolume": "Lautstärke", "LabelWeekdaysToRun": "Wochentage für die Ausführung", @@ -637,11 +653,11 @@ "MessageConfirmReScanLibraryItems": "{0} Elemente werden erneut gescannt! Bist du dir sicher?", "MessageConfirmRemoveAllChapters": "Alle Kapitel werden entfernt! Bist du dir sicher?", "MessageConfirmRemoveAuthor": "Autor \"{0}\" wird enfernt! Bist du dir sicher?", - "MessageConfirmRemoveCollection": "Sammlung \"{0}\" wird gelöscht! Bist du dir sicher?", - "MessageConfirmRemoveEpisode": "Episode \"{0}\" wird geloscht! Bist du dir sicher?", - "MessageConfirmRemoveEpisodes": "{0} Episoden werden gelöscht! Bist du dir sicher?", + "MessageConfirmRemoveCollection": "Sammlung \"{0}\" wird entfernt! Bist du dir sicher?", + "MessageConfirmRemoveEpisode": "Episode \"{0}\" wird entfernt! Bist du dir sicher?", + "MessageConfirmRemoveEpisodes": "{0} Episoden werden entfernt! Bist du dir sicher?", "MessageConfirmRemoveListeningSessions": "Bist du dir sicher, dass du {0} Hörsitzungen enfernen möchtest?", - "MessageConfirmRemoveNarrator": "Erzähler \"{0}\" wird gelöscht! Bist du dir sicher?", + "MessageConfirmRemoveNarrator": "Erzähler \"{0}\" wird entfernt! Bist du dir sicher?", "MessageConfirmRemovePlaylist": "Wiedergabeliste \"{0}\" wird entfernt! Bist du dir sicher?", "MessageConfirmRenameGenre": "Kategorie \"{0}\" in \"{1}\" für alle Hörbücher/Podcasts werden umbenannt! Bist du dir sicher?", "MessageConfirmRenameGenreMergeNote": "Hinweis: Kategorie existiert bereits -> Kategorien werden zusammengelegt.", @@ -712,9 +728,9 @@ "MessagePlaylistCreateFromCollection": "Erstelle eine Wiedergabeliste aus der Sammlung", "MessagePodcastHasNoRSSFeedForMatching": "Der Podcast hat keine RSS-Feed-Url welche für den Online-Abgleich verwendet werden kann", "MessageQuickMatchDescription": "Füllt leere Details und Titelbilder mit dem ersten Treffer aus '{0}'. Überschreibt keine Details, es sei denn, die Server-Einstellung \"Passende Metadaten bevorzugen\" ist aktiviert.", - "MessageRemoveChapter": "Kapitel löschen", + "MessageRemoveChapter": "Kapitel entfernen", "MessageRemoveEpisodes": "Entferne {0} Episode(n)", - "MessageRemoveFromPlayerQueue": "Aus der Abspielwarteliste löschen", + "MessageRemoveFromPlayerQueue": "Aus der Abspielwarteliste entfernen", "MessageRemoveUserWarning": "Benutzer \"{0}\" wird dauerhaft gelöscht! Bist du dir sicher?", "MessageReportBugsAndContribute": "Fehler melden, Funktionen anfordern und mitwirken", "MessageResetChaptersConfirm": "Kapitel und vorgenommenen Änderungen werden zurückgesetzt und rückgängig gemacht! Bist du dir sicher?", @@ -769,8 +785,8 @@ "ToastBatchUpdateSuccess": "Stapelaktualisierung erfolgreich", "ToastBookmarkCreateFailed": "Lesezeichen konnte nicht erstellt werden", "ToastBookmarkCreateSuccess": "Lesezeichen hinzugefügt", - "ToastBookmarkRemoveFailed": "Lesezeichen konnte nicht gelöscht werden", - "ToastBookmarkRemoveSuccess": "Lesezeichen gelöscht", + "ToastBookmarkRemoveFailed": "Lesezeichen konnte nicht entfernt werden", + "ToastBookmarkRemoveSuccess": "Lesezeichen entfernt", "ToastBookmarkUpdateFailed": "Lesezeichenaktualisierung fehlgeschlagen", "ToastBookmarkUpdateSuccess": "Lesezeichen aktualisiert", "ToastCachePurgeFailed": "Cache leeren fehlgeschlagen", @@ -780,7 +796,7 @@ "ToastCollectionItemsRemoveFailed": "Fehler beim Entfernen der Medien aus der Sammlung", "ToastCollectionItemsRemoveSuccess": "Medien aus der Sammlung entfernt", "ToastCollectionRemoveFailed": "Sammlung konnte nicht entfernt werden", - "ToastCollectionRemoveSuccess": "Sammlung gelöscht", + "ToastCollectionRemoveSuccess": "Sammlung entfernt", "ToastCollectionUpdateFailed": "Sammlung konnte nicht aktualisiert werden", "ToastCollectionUpdateSuccess": "Sammlung aktualisiert", "ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden", diff --git a/client/strings/en-us.json b/client/strings/en-us.json index d7602e77..eb172828 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -229,7 +229,7 @@ "LabelBackupLocation": "Backup Location", "LabelBackupsEnableAutomaticBackups": "Enable automatic backups", "LabelBackupsEnableAutomaticBackupsHelp": "Backups saved in /metadata/backups", - "LabelBackupsMaxBackupSize": "Maximum backup size (in GB)", + "LabelBackupsMaxBackupSize": "Maximum backup size (in GB) (0 for unlimited)", "LabelBackupsMaxBackupSizeHelp": "As a safeguard against misconfiguration, backups will fail if they exceed the configured size.", "LabelBackupsNumberToKeep": "Number of backups to keep", "LabelBackupsNumberToKeepHelp": "Only 1 backup will be removed at a time so if you already have more backups than this you should manually remove them.", diff --git a/client/strings/es.json b/client/strings/es.json index 93a99abc..d5af9736 100644 --- a/client/strings/es.json +++ b/client/strings/es.json @@ -59,6 +59,7 @@ "ButtonPurgeItemsCache": "Purgar Elementos de Cache", "ButtonQueueAddItem": "Agregar a la Fila", "ButtonQueueRemoveItem": "Remover de la Fila", + "ButtonQuickEmbedMetadata": "Agregue metadatos rápidamente", "ButtonQuickMatch": "Encontrar Rápido", "ButtonReScan": "Re-Escanear", "ButtonRead": "Leer", @@ -88,6 +89,7 @@ "ButtonShow": "Mostrar", "ButtonStartM4BEncode": "Iniciar Codificación M4B", "ButtonStartMetadataEmbed": "Iniciar la Inserción de Metadata", + "ButtonStats": "Estadísticas", "ButtonSubmit": "Enviar", "ButtonTest": "Prueba", "ButtonUpload": "Subir", @@ -154,6 +156,7 @@ "HeaderPasswordAuthentication": "Autenticación por contraseña", "HeaderPermissions": "Permisos", "HeaderPlayerQueue": "Fila del Reproductor", + "HeaderPlayerSettings": "Ajustes del reproductor", "HeaderPlaylist": "Lista de reproducción", "HeaderPlaylistItems": "Elementos de lista de reproducción", "HeaderPodcastsToAdd": "Podcasts para agregar", @@ -289,13 +292,16 @@ "LabelEmbeddedCover": "Portada Integrada", "LabelEnable": "Habilitar", "LabelEnd": "Fin", + "LabelEndOfChapter": "Fin del capítulo", "LabelEpisode": "Episodio", "LabelEpisodeTitle": "Titulo de Episodio", "LabelEpisodeType": "Tipo de Episodio", "LabelExample": "Ejemplo", + "LabelExpandSeries": "Ampliar serie", "LabelExplicit": "Explicito", "LabelExplicitChecked": "Explícito (marcado)", "LabelExplicitUnchecked": "No Explícito (sin marcar)", + "LabelExportOPML": "Exportar OPML", "LabelFeedURL": "Fuente de URL", "LabelFetchingMetadata": "Obteniendo metadatos", "LabelFile": "Archivo", @@ -319,6 +325,7 @@ "LabelHardDeleteFile": "Eliminar Definitivamente", "LabelHasEbook": "Tiene un libro", "LabelHasSupplementaryEbook": "Tiene un libro complementario", + "LabelHideSubtitles": "Ocultar subtítulos", "LabelHighestPriority": "Mayor prioridad", "LabelHost": "Host", "LabelHour": "Hora", @@ -339,6 +346,8 @@ "LabelIntervalEveryHour": "Cada Hora", "LabelInvert": "Invertir", "LabelItem": "Elemento", + "LabelJumpBackwardAmount": "Cantidad de saltos hacia atrás", + "LabelJumpForwardAmount": "Cantidad de saltos hacia adelante", "LabelLanguage": "Idioma", "LabelLanguageDefaultServer": "Lenguaje Predeterminado del Servidor", "LabelLanguages": "Idiomas", @@ -446,6 +455,7 @@ "LabelRSSFeedPreventIndexing": "Prevenir indexado", "LabelRSSFeedSlug": "Fuente RSS Slug", "LabelRSSFeedURL": "URL de Fuente RSS", + "LabelReAddSeriesToContinueListening": "Volver a agregar la serie para continuar escuchándola", "LabelRead": "Leído", "LabelReadAgain": "Volver a leer", "LabelReadEbookWithoutProgress": "Leer Ebook sin guardar progreso", @@ -512,9 +522,11 @@ "LabelSettingsStoreMetadataWithItemHelp": "Por defecto, los archivos de metadatos se almacenan en /metadata/items. Si habilita esta opción, los archivos de metadatos se guardarán en la carpeta de elementos de su biblioteca", "LabelSettingsTimeFormat": "Formato de Tiempo", "LabelShare": "Compartir", + "LabelShareOpen": "abrir un recurso compartido", "LabelShareURL": "Compartir la URL", "LabelShowAll": "Mostrar Todos", "LabelShowSeconds": "Mostrar segundos", + "LabelShowSubtitles": "Mostrar subtítulos", "LabelSize": "Tamaño", "LabelSleepTimer": "Temporizador de apagado", "LabelSlug": "Slug", @@ -552,6 +564,10 @@ "LabelThemeDark": "Oscuro", "LabelThemeLight": "Claro", "LabelTimeBase": "Tiempo Base", + "LabelTimeDurationXHours": "{0} horas", + "LabelTimeDurationXMinutes": "{0} minutos", + "LabelTimeDurationXSeconds": "{0} segundos", + "LabelTimeInMinutes": "Tiempo en minutos", "LabelTimeListened": "Tiempo Escuchando", "LabelTimeListenedToday": "Tiempo Escuchando Hoy", "LabelTimeRemaining": "{0} restante", @@ -591,6 +607,7 @@ "LabelVersion": "Versión", "LabelViewBookmarks": "Ver Marcadores", "LabelViewChapters": "Ver Capítulos", + "LabelViewPlayerSettings": "Ver los ajustes del reproductor", "LabelViewQueue": "Ver Fila del Reproductor", "LabelVolume": "Volumen", "LabelWeekdaysToRun": "Correr en Días de la Semana", diff --git a/client/strings/fi.json b/client/strings/fi.json index 88b2cee3..ecda586c 100644 --- a/client/strings/fi.json +++ b/client/strings/fi.json @@ -136,7 +136,7 @@ "HeaderYourStats": "Tilastosi", "LabelAddToPlaylist": "Lisää soittolistaan", "LabelAdded": "Lisätty", - "LabelAddedAt": "Lisätty", + "LabelAddedAt": "Lisätty listalle", "LabelAll": "Kaikki", "LabelAuthor": "Tekijä", "LabelAuthorFirstLast": "Tekijä (Etunimi Sukunimi)", @@ -152,11 +152,34 @@ "LabelContinueReading": "Jatka lukemista", "LabelContinueSeries": "Jatka sarjoja", "LabelDescription": "Kuvaus", + "LabelDownload": "Lataa", "LabelDuration": "Kesto", "LabelEbook": "E-kirja", "LabelEbooks": "E-kirjat", + "LabelEnable": "Ota käyttöön", "LabelFile": "Tiedosto", "LabelFileBirthtime": "Tiedoston syntymäaika", "LabelFileModified": "Muutettu tiedosto", - "LabelFilename": "Tiedostonimi" + "LabelFilename": "Tiedostonimi", + "LabelFolder": "Kansio", + "LabelLanguage": "Kieli", + "LabelMore": "Lisää", + "LabelNarrator": "Lukija", + "LabelNarrators": "Lukijat", + "LabelNewestAuthors": "Uusimmat kirjailijat", + "LabelNewestEpisodes": "Uusimmat jaksot", + "LabelPassword": "Salasana", + "LabelPath": "Polku", + "LabelRead": "Lue", + "LabelReadAgain": "Lue uudelleen", + "LabelSeason": "Kausi", + "LabelShowAll": "Näytä kaikki", + "LabelSize": "Koko", + "LabelSleepTimer": "Uniajastin", + "LabelTheme": "Teema", + "LabelThemeDark": "Tumma", + "LabelThemeLight": "Kirkas", + "LabelUser": "Käyttäjä", + "LabelUsername": "Käyttäjätunnus", + "MessageDownloadingEpisode": "Ladataan jaksoa" } diff --git a/client/strings/fr.json b/client/strings/fr.json index 5aceef63..afab77a1 100644 --- a/client/strings/fr.json +++ b/client/strings/fr.json @@ -258,6 +258,7 @@ "LabelCurrently": "Actuellement :", "LabelCustomCronExpression": "Expression cron personnalisée :", "LabelDatetime": "Date", + "LabelDays": "Jours", "LabelDeleteFromFileSystemCheckbox": "Supprimer du système de fichiers (décocher pour ne supprimer que de la base de données)", "LabelDescription": "Description", "LabelDeselectAll": "Tout déselectionner", @@ -321,6 +322,7 @@ "LabelHighestPriority": "Priorité la plus élevée", "LabelHost": "Hôte", "LabelHour": "Heure", + "LabelHours": "Heures", "LabelIcon": "Icône", "LabelImageURLFromTheWeb": "URL de l’image à partir du web", "LabelInProgress": "En cours", @@ -371,6 +373,7 @@ "LabelMetadataOrderOfPrecedenceDescription": "Les sources de métadonnées ayant une priorité plus élevée auront la priorité sur celles ayant une priorité moins élevée", "LabelMetadataProvider": "Fournisseur de métadonnées", "LabelMinute": "Minute", + "LabelMinutes": "Minutes", "LabelMissing": "Manquant", "LabelMissingEbook": "Ne possède aucun livre numérique", "LabelMissingSupplementaryEbook": "Ne possède aucun livre numérique supplémentaire", @@ -410,6 +413,7 @@ "LabelOverwrite": "Écraser", "LabelPassword": "Mot de passe", "LabelPath": "Chemin", + "LabelPermanent": "Permanent", "LabelPermissionsAccessAllLibraries": "Peut accéder à toutes les bibliothèque", "LabelPermissionsAccessAllTags": "Peut accéder à toutes les étiquettes", "LabelPermissionsAccessExplicitContent": "Peut accéder au contenu restreint", @@ -507,6 +511,9 @@ "LabelSettingsStoreMetadataWithItem": "Enregistrer les métadonnées avec l’élément", "LabelSettingsStoreMetadataWithItemHelp": "Par défaut, les fichiers de métadonnées sont stockés dans /metadata/items. En activant ce paramètre, les fichiers de métadonnées seront stockés dans les dossiers des éléments de votre bibliothèque", "LabelSettingsTimeFormat": "Format d’heure", + "LabelShare": "Partager", + "LabelShareOpen": "Ouvrir le partage", + "LabelShareURL": "Partager l’URL", "LabelShowAll": "Tout afficher", "LabelShowSeconds": "Afficher les seondes", "LabelSize": "Taille", @@ -598,6 +605,7 @@ "MessageAppriseDescription": "Nécessite une instance d’API Apprise pour utiliser cette fonctionnalité ou une api qui prend en charge les mêmes requêtes.
L’URL de l’API Apprise doit comprendre le chemin complet pour envoyer la notification. Par exemple, si votre instance écoute sur http://192.168.1.1:8337 alors vous devez mettre http://192.168.1.1:8337/notify.", "MessageBackupsDescription": "Les sauvegardes incluent les utilisateurs, la progression des utilisateurs, les détails des éléments de la bibliothèque, les paramètres du serveur et les images stockées dans /metadata/items & /metadata/authors. Les sauvegardes n’incluent pas les fichiers stockés dans les dossiers de votre bibliothèque.", "MessageBackupsLocationEditNote": "Remarque : Mettre à jour l'emplacement de sauvegarde ne déplacera pas ou ne modifiera pas les sauvegardes existantes", + "MessageBackupsLocationNoEditNote": "Remarque : l’emplacement de sauvegarde est défini via une variable d’environnement et ne peut pas être modifié ici.", "MessageBackupsLocationPathEmpty": "L'emplacement de secours ne peut pas être vide", "MessageBatchQuickMatchDescription": "La recherche par correspondance rapide tentera d’ajouter les couvertures et métadonnées manquantes pour les éléments sélectionnés. Activez les options ci-dessous pour permettre la Recherche par correspondance d’écraser les couvertures et/ou métadonnées existantes.", "MessageBookshelfNoCollections": "Vous n’avez pas encore de collections", @@ -716,6 +724,9 @@ "MessageSelected": "{0} sélectionnés", "MessageServerCouldNotBeReached": "Serveur inaccessible", "MessageSetChaptersFromTracksDescription": "Positionne un chapitre par fichier audio, avec le titre du fichier comme titre de chapitre", + "MessageShareExpirationWillBe": "Expire le {0}", + "MessageShareExpiresIn": "Expire dans {0}", + "MessageShareURLWillBe": "L’adresse de partage sera {0}", "MessageStartPlaybackAtTime": "Démarrer la lecture pour « {0} » à {1} ?", "MessageThinking": "Je cherche…", "MessageUploaderItemFailed": "Échec du téléversement", @@ -730,7 +741,7 @@ "NoteChapterEditorTimes": "Information : l’horodatage du premier chapitre doit être à 0:00 et celui du dernier chapitre ne peut se situer au-delà de la durée du livre audio.", "NoteFolderPicker": "Information : les dossiers déjà surveillés ne sont pas affichés", "NoteRSSFeedPodcastAppsHttps": "Attention : la majorité des application de podcast nécessite une adresse de flux HTTPS", - "NoteRSSFeedPodcastAppsPubDate": "Attention : un ou plusieurs de vos épisodes ne possèdent pas de date de publication. Certaines applications de podcast le requièrent.", + "NoteRSSFeedPodcastAppsPubDate": "Attention : un ou plusieurs de vos épisodes ne possèdent pas de date de publication. Certaines applications de podcast le requièrent.", "NoteUploaderFoldersWithMediaFiles": "Les dossiers contenant des fichiers multimédias seront traités comme des éléments distincts de la bibliothèque.", "NoteUploaderOnlyAudioFiles": "Si vous téléversez uniquement des fichiers audio, chaque fichier audio sera traité comme un livre audio distinct.", "NoteUploaderUnsupportedFiles": "Les fichiers non pris en charge sont ignorés. Lorsque vous choisissez ou déposez un dossier, les autres fichiers qui ne sont pas dans un dossier d’élément sont ignorés.", diff --git a/client/strings/he.json b/client/strings/he.json index aa6eb986..51463940 100644 --- a/client/strings/he.json +++ b/client/strings/he.json @@ -9,7 +9,7 @@ "ButtonApply": "החל", "ButtonApplyChapters": "החל פרקים", "ButtonAuthors": "יוצרים", - "ButtonBack": "Back", + "ButtonBack": "חזור", "ButtonBrowseForFolder": "עיין בתיקייה", "ButtonCancel": "בטל", "ButtonCancelEncode": "בטל קידוד", @@ -62,8 +62,8 @@ "ButtonQuickMatch": "התאמה מהירה", "ButtonReScan": "סרוק מחדש", "ButtonRead": "קרא", - "ButtonReadLess": "Read less", - "ButtonReadMore": "Read more", + "ButtonReadLess": "קרא פחות", + "ButtonReadMore": "קרא יותר", "ButtonRefresh": "רענן", "ButtonRemove": "הסר", "ButtonRemoveAll": "הסר הכל", @@ -115,7 +115,7 @@ "HeaderCollectionItems": "פריטי אוסף", "HeaderCover": "כריכה", "HeaderCurrentDownloads": "הורדות נוכחיות", - "HeaderCustomMessageOnLogin": "Custom Message on Login", + "HeaderCustomMessageOnLogin": "הודעה מותאמת אישית בהתחברות", "HeaderCustomMetadataProviders": "ספקי מטא-נתונים מותאמים אישית", "HeaderDetails": "פרטים", "HeaderDownloadQueue": "תור הורדה", @@ -806,8 +806,8 @@ "ToastSendEbookToDeviceSuccess": "הספר נשלח אל המכשיר \"{0}\"", "ToastSeriesUpdateFailed": "עדכון הסדרה נכשל", "ToastSeriesUpdateSuccess": "הסדרה עודכנה בהצלחה", - "ToastServerSettingsUpdateFailed": "Failed to update server settings", - "ToastServerSettingsUpdateSuccess": "Server settings updated", + "ToastServerSettingsUpdateFailed": "כשל בעדכון הגדרות שרת", + "ToastServerSettingsUpdateSuccess": "הגדרות שרת עודכנו בהצלחה", "ToastSessionDeleteFailed": "מחיקת הפעולה נכשלה", "ToastSessionDeleteSuccess": "הפעולה נמחקה בהצלחה", "ToastSocketConnected": "קצה תקשורת חובר", diff --git a/client/strings/nl.json b/client/strings/nl.json index 18bb4218..e209c3a5 100644 --- a/client/strings/nl.json +++ b/client/strings/nl.json @@ -1,15 +1,15 @@ { "ButtonAdd": "Toevoegen", "ButtonAddChapters": "Hoofdstukken toevoegen", - "ButtonAddDevice": "Add Device", - "ButtonAddLibrary": "Add Library", + "ButtonAddDevice": "Toestel toevoegen", + "ButtonAddLibrary": "Bibliotheek toevoegen", "ButtonAddPodcasts": "Podcasts toevoegen", - "ButtonAddUser": "Add User", + "ButtonAddUser": "Gebruiker toevoegen", "ButtonAddYourFirstLibrary": "Voeg je eerste bibliotheek toe", "ButtonApply": "Pas toe", "ButtonApplyChapters": "Hoofdstukken toepassen", "ButtonAuthors": "Auteurs", - "ButtonBack": "Back", + "ButtonBack": "Terug", "ButtonBrowseForFolder": "Bladeren naar map", "ButtonCancel": "Annuleren", "ButtonCancelEncode": "Encoding annuleren", @@ -32,9 +32,9 @@ "ButtonFullPath": "Volledig pad", "ButtonHide": "Verberg", "ButtonHome": "Home", - "ButtonIssues": "Issues", - "ButtonJumpBackward": "Jump Backward", - "ButtonJumpForward": "Jump Forward", + "ButtonIssues": "Problemen", + "ButtonJumpBackward": "Spring achteruit", + "ButtonJumpForward": "Spring vooruit", "ButtonLatest": "Meest recent", "ButtonLibrary": "Bibliotheek", "ButtonLogout": "Log uit", @@ -44,17 +44,17 @@ "ButtonMatchAllAuthors": "Alle auteurs matchen", "ButtonMatchBooks": "Alle boeken matchen", "ButtonNevermind": "Laat maar", - "ButtonNext": "Next", - "ButtonNextChapter": "Next Chapter", + "ButtonNext": "Volgende", + "ButtonNextChapter": "Volgend hoofdstuk", "ButtonOk": "Ok", "ButtonOpenFeed": "Feed openen", "ButtonOpenManager": "Manager openen", - "ButtonPause": "Pause", + "ButtonPause": "Pauze", "ButtonPlay": "Afspelen", "ButtonPlaying": "Speelt", "ButtonPlaylists": "Afspeellijsten", - "ButtonPrevious": "Previous", - "ButtonPreviousChapter": "Previous Chapter", + "ButtonPrevious": "Vorige", + "ButtonPreviousChapter": "Vorig hoofdstuk", "ButtonPurgeAllCache": "Volledige cache legen", "ButtonPurgeItemsCache": "Onderdelen-cache legen", "ButtonQueueAddItem": "In wachtrij zetten", @@ -62,14 +62,14 @@ "ButtonQuickMatch": "Snelle match", "ButtonReScan": "Nieuwe scan", "ButtonRead": "Lees", - "ButtonReadLess": "Read less", - "ButtonReadMore": "Read more", - "ButtonRefresh": "Refresh", + "ButtonReadLess": "Lees minder", + "ButtonReadMore": "Lees meer", + "ButtonRefresh": "Verversen", "ButtonRemove": "Verwijder", "ButtonRemoveAll": "Alles verwijderen", "ButtonRemoveAllLibraryItems": "Verwijder volledige bibliotheekinhoud", "ButtonRemoveFromContinueListening": "Vewijder uit Verder luisteren", - "ButtonRemoveFromContinueReading": "Remove from Continue Reading", + "ButtonRemoveFromContinueReading": "Verwijder van Verder luisteren", "ButtonRemoveSeriesFromContinueSeries": "Verwijder serie uit Serie vervolgen", "ButtonReset": "Reset", "ButtonResetToDefault": "Reset to default", @@ -83,7 +83,7 @@ "ButtonSelectFolderPath": "Maplocatie selecteren", "ButtonSeries": "Series", "ButtonSetChaptersFromTracks": "Maak hoofdstukken op basis van tracks", - "ButtonShare": "Share", + "ButtonShare": "Deel", "ButtonShiftTimes": "Tijden verschuiven", "ButtonShow": "Toon", "ButtonStartM4BEncode": "Start M4B-encoding", @@ -98,9 +98,9 @@ "ButtonUserEdit": "Wijzig gebruiker {0}", "ButtonViewAll": "Toon alle", "ButtonYes": "Ja", - "ErrorUploadFetchMetadataAPI": "Error fetching metadata", - "ErrorUploadFetchMetadataNoResults": "Could not fetch metadata - try updating title and/or author", - "ErrorUploadLacksTitle": "Must have a title", + "ErrorUploadFetchMetadataAPI": "Error metadata ophalen", + "ErrorUploadFetchMetadataNoResults": "Kan metadata niet ophalen - probeer de titel en/of auteur te updaten", + "ErrorUploadLacksTitle": "Moet een titel hebben", "HeaderAccount": "Account", "HeaderAdvanced": "Geavanceerd", "HeaderAppriseNotificationSettings": "Apprise-notificatie instellingen", @@ -113,13 +113,13 @@ "HeaderChooseAFolder": "Map kiezen", "HeaderCollection": "Collectie", "HeaderCollectionItems": "Collectie-objecten", - "HeaderCover": "Cover", + "HeaderCover": "Omslag", "HeaderCurrentDownloads": "Huidige downloads", "HeaderCustomMessageOnLogin": "Custom Message on Login", "HeaderCustomMetadataProviders": "Custom Metadata Providers", "HeaderDetails": "Details", "HeaderDownloadQueue": "Download-wachtrij", - "HeaderEbookFiles": "Ebook Files", + "HeaderEbookFiles": "Ebook bestanden", "HeaderEmail": "E-mail", "HeaderEmailSettings": "E-mail instellingen", "HeaderEpisodes": "Afleveringen", @@ -239,11 +239,11 @@ "LabelChapterTitle": "Hoofdstuktitel", "LabelChapters": "Hoofdstukken", "LabelChaptersFound": "Hoofdstukken gevonden", - "LabelClickForMoreInfo": "Click for more info", + "LabelClickForMoreInfo": "Klik voor meer informatie", "LabelClosePlayer": "Sluit speler", "LabelCodec": "Codec", "LabelCollapseSeries": "Series inklappen", - "LabelCollection": "Collection", + "LabelCollection": "Collectie", "LabelCollections": "Collecties", "LabelComplete": "Compleet", "LabelConfirmPassword": "Bevestig wachtwoord", @@ -258,6 +258,7 @@ "LabelCurrently": "Op dit moment:", "LabelCustomCronExpression": "Aangepaste Cron-uitdrukking:", "LabelDatetime": "Datum-tijd", + "LabelDays": "Dagen", "LabelDeleteFromFileSystemCheckbox": "Delete from file system (uncheck to only remove from database)", "LabelDescription": "Beschrijving", "LabelDeselectAll": "Deselecteer alle", @@ -296,7 +297,7 @@ "LabelExplicitChecked": "Explicit (checked)", "LabelExplicitUnchecked": "Not Explicit (unchecked)", "LabelFeedURL": "Feed URL", - "LabelFetchingMetadata": "Fetching Metadata", + "LabelFetchingMetadata": "Metadata ophalen", "LabelFile": "Bestand", "LabelFileBirthtime": "Aanmaaktijd bestand", "LabelFileModified": "Bestand gewijzigd", @@ -306,7 +307,7 @@ "LabelFinished": "Voltooid", "LabelFolder": "Map", "LabelFolders": "Mappen", - "LabelFontBold": "Bold", + "LabelFontBold": "Vetgedrukt", "LabelFontBoldness": "Font Boldness", "LabelFontFamily": "Lettertypefamilie", "LabelFontItalic": "Italic", @@ -321,6 +322,7 @@ "LabelHighestPriority": "Highest priority", "LabelHost": "Host", "LabelHour": "Uur", + "LabelHours": "Uren", "LabelIcon": "Icoon", "LabelImageURLFromTheWeb": "Image URL from the web", "LabelInProgress": "Bezig", @@ -567,7 +569,7 @@ "LabelTracksSingleTrack": "Enkele track", "LabelType": "Type", "LabelUnabridged": "Onverkort", - "LabelUndo": "Undo", + "LabelUndo": "Ongedaan maken", "LabelUnknown": "Onbekend", "LabelUpdateCover": "Cover bijwerken", "LabelUpdateCoverHelp": "Sta overschrijven van bestaande covers toe voor de geselecteerde boeken wanneer een match is gevonden", @@ -630,7 +632,7 @@ "MessageConfirmRemoveCollection": "Weet je zeker dat je de collectie \"{0}\" wil verwijderen?", "MessageConfirmRemoveEpisode": "Weet je zeker dat je de aflevering \"{0}\" wil verwijderen?", "MessageConfirmRemoveEpisodes": "Weet je zeker dat je {0} afleveringen wil verwijderen?", - "MessageConfirmRemoveListeningSessions": "Are you sure you want to remove {0} listening sessions?", + "MessageConfirmRemoveListeningSessions": "Weet je zeker dat je {0} luistersessies wilt verwijderen?", "MessageConfirmRemoveNarrator": "Weet je zeker dat je verteller \"{0}\" wil verwijderen?", "MessageConfirmRemovePlaylist": "Weet je zeker dat je je afspeellijst \"{0}\" wil verwijderen?", "MessageConfirmRenameGenre": "Weet je zeker dat je genre \"{0}\" wil hernoemen naar \"{1}\" voor alle onderdelen?", @@ -714,6 +716,7 @@ "MessageSelected": "{0} selected", "MessageServerCouldNotBeReached": "Server niet bereikbaar", "MessageSetChaptersFromTracksDescription": "Stel hoofdstukken in met ieder audiobestand als een hoofdstuk en de audiobestandsnaam als hoofdstuktitel", + "MessageShareExpiresIn": "Vervalt in {0}", "MessageStartPlaybackAtTime": "Afspelen van \"{0}\" beginnen op {1}?", "MessageThinking": "Aan het denken...", "MessageUploaderItemFailed": "Uploaden mislukt", diff --git a/client/strings/pl.json b/client/strings/pl.json index 92dd2735..0fe8535d 100644 --- a/client/strings/pl.json +++ b/client/strings/pl.json @@ -62,8 +62,8 @@ "ButtonQuickMatch": "Szybkie dopasowanie", "ButtonReScan": "Ponowne skanowanie", "ButtonRead": "Czytaj", - "ButtonReadLess": "Read less", - "ButtonReadMore": "Read more", + "ButtonReadLess": "Pokaż mniej", + "ButtonReadMore": "Pokaż więcej", "ButtonRefresh": "Odśwież", "ButtonRemove": "Usuń", "ButtonRemoveAll": "Usuń wszystko", @@ -88,6 +88,7 @@ "ButtonShow": "Pokaż", "ButtonStartM4BEncode": "Eksportuj jako plik M4B", "ButtonStartMetadataEmbed": "Osadź metadane", + "ButtonStats": "Statystyki", "ButtonSubmit": "Zaloguj", "ButtonTest": "Test", "ButtonUpload": "Wgraj", @@ -130,13 +131,13 @@ "HeaderIgnoredFiles": "Zignoruj pliki", "HeaderItemFiles": "Pliki", "HeaderItemMetadataUtils": "Item Metadata Utils", - "HeaderLastListeningSession": "Ostatnio odtwarzana sesja", + "HeaderLastListeningSession": "Ostatnia sesja słuchania", "HeaderLatestEpisodes": "Najnowsze odcinki", "HeaderLibraries": "Biblioteki", "HeaderLibraryFiles": "Pliki w bibliotece", "HeaderLibraryStats": "Statystyki biblioteki", "HeaderListeningSessions": "Sesje słuchania", - "HeaderListeningStats": "Statystyki odtwarzania", + "HeaderListeningStats": "Statystyki słuchania", "HeaderLogin": "Zaloguj się", "HeaderLogs": "Logi", "HeaderManageGenres": "Zarządzaj gatunkami", @@ -148,12 +149,13 @@ "HeaderNewAccount": "Nowe konto", "HeaderNewLibrary": "Nowa biblioteka", "HeaderNotifications": "Powiadomienia", - "HeaderOpenIDConnectAuthentication": "OpenID Connect Authentication", + "HeaderOpenIDConnectAuthentication": "Uwierzytelnianie OpenID Connect", "HeaderOpenRSSFeed": "Utwórz kanał RSS", "HeaderOtherFiles": "Inne pliki", "HeaderPasswordAuthentication": "Uwierzytelnianie hasłem", "HeaderPermissions": "Uprawnienia", "HeaderPlayerQueue": "Kolejka odtwarzania", + "HeaderPlayerSettings": "Ustawienia Odtwarzania", "HeaderPlaylist": "Playlista", "HeaderPlaylistItems": "Pozycje listy odtwarzania", "HeaderPodcastsToAdd": "Podcasty do dodania", @@ -175,7 +177,7 @@ "HeaderSettingsScanner": "Skanowanie", "HeaderSleepTimer": "Wyłącznik czasowy", "HeaderStatsLargestItems": "Największe pozycje", - "HeaderStatsLongestItems": "Najdłuższe pozycje (hrs)", + "HeaderStatsLongestItems": "Najdłuższe pozycje (godziny)", "HeaderStatsMinutesListeningChart": "Czas słuchania w minutach (ostatnie 7 dni)", "HeaderStatsRecentSessions": "Ostatnie sesje", "HeaderStatsTop10Authors": "Top 10 Autorów", @@ -200,8 +202,8 @@ "LabelActivity": "Aktywność", "LabelAddToCollection": "Dodaj do kolekcji", "LabelAddToCollectionBatch": "Dodaj {0} książki do kolekcji", - "LabelAddToPlaylist": "Add to Playlist", - "LabelAddToPlaylistBatch": "Add {0} Items to Playlist", + "LabelAddToPlaylist": "Dodaj do playlisty", + "LabelAddToPlaylistBatch": "Dodaj {0} pozycji do playlisty", "LabelAdded": "Dodane", "LabelAddedAt": "Dodano", "LabelAdminUsersOnly": "Tylko użytkownicy administracyjni", @@ -226,14 +228,14 @@ "LabelBackupLocation": "Lokalizacja kopii zapasowej", "LabelBackupsEnableAutomaticBackups": "Włącz automatyczne kopie zapasowe", "LabelBackupsEnableAutomaticBackupsHelp": "Kopie zapasowe są zapisywane w folderze /metadata/backups", - "LabelBackupsMaxBackupSize": "Maksymalny łączny rozmiar backupów (w GB)", + "LabelBackupsMaxBackupSize": "Maksymalny rozmiar kopii zapasowej (w GB)", "LabelBackupsMaxBackupSizeHelp": "Jako zabezpieczenie przed błędną konfiguracją, kopie zapasowe nie będą wykonywane, jeśli przekroczą skonfigurowany rozmiar.", "LabelBackupsNumberToKeep": "Liczba kopii zapasowych do przechowywania", "LabelBackupsNumberToKeepHelp": "Tylko 1 kopia zapasowa zostanie usunięta, więc jeśli masz już więcej kopii zapasowych, powinieneś je ręcznie usunąć.", "LabelBitrate": "Bitrate", "LabelBooks": "Książki", "LabelButtonText": "Button Text", - "LabelByAuthor": "by {0}", + "LabelByAuthor": "autorstwa {0}", "LabelChangePassword": "Zmień hasło", "LabelChannels": "Kanały", "LabelChapterTitle": "Tytuł rozdziału", @@ -247,7 +249,7 @@ "LabelCollections": "Kolekcje", "LabelComplete": "Ukończone", "LabelConfirmPassword": "Potwierdź hasło", - "LabelContinueListening": "Kontynuuj odtwarzanie", + "LabelContinueListening": "Kontynuuj słuchanie", "LabelContinueReading": "Kontynuuj czytanie", "LabelContinueSeries": "Kontynuuj serię", "LabelCover": "Okładka", @@ -319,6 +321,7 @@ "LabelHardDeleteFile": "Usuń trwale plik", "LabelHasEbook": "Ma ebooka", "LabelHasSupplementaryEbook": "Posiada dodatkowy ebook", + "LabelHideSubtitles": "Ukryj napisy", "LabelHighestPriority": "Najwyższy priorytet", "LabelHost": "Host", "LabelHour": "Godzina", @@ -413,7 +416,7 @@ "LabelOverwrite": "Nadpisz", "LabelPassword": "Hasło", "LabelPath": "Ścieżka", - "LabelPermanent": "Trwały", + "LabelPermanent": "Stałe", "LabelPermissionsAccessAllLibraries": "Ma dostęp do wszystkich bibliotek", "LabelPermissionsAccessAllTags": "Ma dostęp do wszystkich tagów", "LabelPermissionsAccessExplicitContent": "Ma dostęp do treści oznacznych jako nieprzyzwoite", @@ -446,6 +449,7 @@ "LabelRSSFeedPreventIndexing": "Zapobiegaj indeksowaniu", "LabelRSSFeedSlug": "RSS Feed Slug", "LabelRSSFeedURL": "URL kanały RSS", + "LabelReAddSeriesToContinueListening": "Ponownie Dodaj Serię do sekcji Kontunuuj Odtwarzanie", "LabelRead": "Czytaj", "LabelReadAgain": "Czytaj ponownie", "LabelReadEbookWithoutProgress": "Czytaj książkę bez zapamiętywania postępu", @@ -516,6 +520,7 @@ "LabelShareURL": "Link do udziału", "LabelShowAll": "Pokaż wszystko", "LabelShowSeconds": "Pokaż sekundy", + "LabelShowSubtitles": "Pokaż Napisy", "LabelSize": "Rozmiar", "LabelSleepTimer": "Wyłącznik czasowy", "LabelSlug": "Slug", @@ -534,10 +539,10 @@ "LabelStatsItemsFinished": "Pozycje zakończone", "LabelStatsItemsInLibrary": "Pozycje w bibliotece", "LabelStatsMinutes": "Minuty", - "LabelStatsMinutesListening": "Minuty odtwarzania", + "LabelStatsMinutesListening": "Minuty słuchania", "LabelStatsOverallDays": "Całkowity czas (dni)", "LabelStatsOverallHours": "Całkowity czas (godziny)", - "LabelStatsWeekListening": "Tydzień odtwarzania", + "LabelStatsWeekListening": "Tydzień słuchania", "LabelSubtitle": "Podtytuł", "LabelSupportedFileTypes": "Obsługiwane typy plików", "LabelTag": "Tag", @@ -592,6 +597,7 @@ "LabelVersion": "Wersja", "LabelViewBookmarks": "Wyświetlaj zakładki", "LabelViewChapters": "Wyświetlaj rozdziały", + "LabelViewPlayerSettings": "Zobacz ustawienia odtwarzacza", "LabelViewQueue": "Wyświetlaj kolejkę odtwarzania", "LabelVolume": "Głośność", "LabelWeekdaysToRun": "Dni tygodnia", @@ -642,7 +648,7 @@ "MessageConfirmRemoveEpisodes": "Czy na pewno chcesz usunąć {0} odcinki?", "MessageConfirmRemoveListeningSessions": "Czy na pewno chcesz usunąć {0} sesji słuchania?", "MessageConfirmRemoveNarrator": "Are you sure you want to remove narrator \"{0}\"?", - "MessageConfirmRemovePlaylist": "Are you sure you want to remove your playlist \"{0}\"?", + "MessageConfirmRemovePlaylist": "Czy jesteś pewien, że chcesz usunąć twoją playlistę \"{0}\"?", "MessageConfirmRenameGenre": "Are you sure you want to rename genre \"{0}\" to \"{1}\" for all items?", "MessageConfirmRenameGenreMergeNote": "Note: This genre already exists so they will be merged.", "MessageConfirmRenameGenreWarning": "Warning! A similar genre with a different casing already exists \"{0}\".", @@ -663,7 +669,7 @@ "MessageItemsSelected": "{0} zaznaczone elementy", "MessageItemsUpdated": "{0} Items Updated", "MessageJoinUsOn": "Dołącz do nas na", - "MessageListeningSessionsInTheLastYear": "{0} sesje odsłuchowe w ostatnim roku", + "MessageListeningSessionsInTheLastYear": "Sesje słuchania w ostatnim roku: {0}", "MessageLoading": "Ładowanie...", "MessageLoadingFolders": "Ładowanie folderów...", "MessageLogsDescription": "Logi zapisane są w /metadata/logs jako pliki JSON. Logi awaryjne są zapisane w /metadata/logs/crash_logs.txt.", @@ -692,7 +698,7 @@ "MessageNoIssues": "Brak problemów", "MessageNoItems": "Brak elementów", "MessageNoItemsFound": "Nie znaleziono żadnych elementów", - "MessageNoListeningSessions": "Brak sesji odtwarzania", + "MessageNoListeningSessions": "Brak sesji słuchania", "MessageNoLogs": "Brak logów", "MessageNoMediaProgress": "Brak postępu", "MessageNoNotifications": "Brak powiadomień", @@ -709,7 +715,7 @@ "MessageOr": "lub", "MessagePauseChapter": "Zatrzymaj odtwarzanie rozdziały", "MessagePlayChapter": "Rozpocznij odtwarzanie od początku rozdziału", - "MessagePlaylistCreateFromCollection": "Utwórz listę odtwarznia na podstawie kolekcji", + "MessagePlaylistCreateFromCollection": "Utwórz listę odtwarzania na podstawie kolekcji", "MessagePodcastHasNoRSSFeedForMatching": "Podcast nie ma adresu url kanału RSS, który mógłby zostać użyty do dopasowania", "MessageQuickMatchDescription": "Wypełnij puste informacje i okładkę pierwszym wynikiem dopasowania z '{0}'. Nie nadpisuje szczegółów, chyba że włączone jest ustawienie serwera 'Preferuj dopasowane metadane'.", "MessageRemoveChapter": "Usuń rozdział", @@ -724,8 +730,9 @@ "MessageSelected": "{0} wybranych", "MessageServerCouldNotBeReached": "Nie udało się uzyskać połączenia z serwerem", "MessageSetChaptersFromTracksDescription": "Set chapters using each audio file as a chapter and chapter title as the audio file name", + "MessageShareExpirationWillBe": "Czas udostępniania {0}", "MessageShareExpiresIn": "Wygaśnie za {0}", - "MessageShareURLWillBe": "URL udziału będzie {0}", + "MessageShareURLWillBe": "Udostępnione pod linkiem {0}", "MessageStartPlaybackAtTime": "Rozpoczęcie odtwarzania \"{0}\" od {1}?", "MessageThinking": "Myślę...", "MessageUploaderItemFailed": "Nie udało się przesłać", @@ -746,7 +753,7 @@ "NoteUploaderUnsupportedFiles": "Nieobsługiwane pliki są ignorowane. Podczas dodawania folderu, inne pliki, które nie znajdują się w folderze elementu, są ignorowane.", "PlaceholderNewCollection": "Nowa nazwa kolekcji", "PlaceholderNewFolderPath": "Nowa ścieżka folderu", - "PlaceholderNewPlaylist": "New playlist name", + "PlaceholderNewPlaylist": "Nowa nazwa playlisty", "PlaceholderSearch": "Szukanie..", "PlaceholderSearchEpisode": "Szukanie odcinka..", "ToastAccountUpdateFailed": "Nie udało się zaktualizować konta", @@ -802,12 +809,12 @@ "ToastLibraryScanStarted": "Rozpoczęto skanowanie biblioteki", "ToastLibraryUpdateFailed": "Nie udało się zaktualizować biblioteki", "ToastLibraryUpdateSuccess": "Zaktualizowano \"{0}\" pozycji", - "ToastPlaylistCreateFailed": "Failed to create playlist", - "ToastPlaylistCreateSuccess": "Playlist created", - "ToastPlaylistRemoveFailed": "Failed to remove playlist", - "ToastPlaylistRemoveSuccess": "Playlist removed", - "ToastPlaylistUpdateFailed": "Failed to update playlist", - "ToastPlaylistUpdateSuccess": "Playlist updated", + "ToastPlaylistCreateFailed": "Nie udało się utworzyć playlisty", + "ToastPlaylistCreateSuccess": "Playlista utworzona", + "ToastPlaylistRemoveFailed": "Nie udało się usunąć playlisty", + "ToastPlaylistRemoveSuccess": "Playlista usunięta", + "ToastPlaylistUpdateFailed": "Nie udało się zaktualizować playlisty", + "ToastPlaylistUpdateSuccess": "Playlista zaktualizowana", "ToastPodcastCreateFailed": "Nie udało się utworzyć podcastu", "ToastPodcastCreateSuccess": "Podcast został pomyślnie utworzony", "ToastRSSFeedCloseFailed": "Zamknięcie kanału RSS nie powiodło się", diff --git a/server/managers/BackupManager.js b/server/managers/BackupManager.js index 88772c58..13493952 100644 --- a/server/managers/BackupManager.js +++ b/server/managers/BackupManager.js @@ -42,7 +42,7 @@ class BackupManager { } get maxBackupSize() { - return global.ServerSettings.maxBackupSize || 1 + return global.ServerSettings.maxBackupSize || Infinity } async init() { @@ -419,14 +419,16 @@ class BackupManager { reject(err) }) archive.on('progress', ({ fs: fsobj }) => { - const maxBackupSizeInBytes = this.maxBackupSize * 1000 * 1000 * 1000 - if (fsobj.processedBytes > maxBackupSizeInBytes) { - Logger.error(`[BackupManager] Archiver is too large - aborting to prevent endless loop, Bytes Processed: ${fsobj.processedBytes}`) - archive.abort() - setTimeout(() => { - this.removeBackup(backup) - output.destroy('Backup too large') // Promise is reject in write stream error evt - }, 500) + if (this.maxBackupSize !== Infinity) { + const maxBackupSizeInBytes = this.maxBackupSize * 1000 * 1000 * 1000 + if (fsobj.processedBytes > maxBackupSizeInBytes) { + Logger.error(`[BackupManager] Archiver is too large - aborting to prevent endless loop, Bytes Processed: ${fsobj.processedBytes}`) + archive.abort() + setTimeout(() => { + this.removeBackup(backup) + output.destroy('Backup too large') // Promise is reject in write stream error evt + }, 500) + } } }) diff --git a/server/objects/settings/ServerSettings.js b/server/objects/settings/ServerSettings.js index 6ade11a9..6d070dcc 100644 --- a/server/objects/settings/ServerSettings.js +++ b/server/objects/settings/ServerSettings.js @@ -102,7 +102,7 @@ class ServerSettings { this.backupPath = settings.backupPath || Path.join(global.MetadataPath, 'backups') this.backupSchedule = settings.backupSchedule || false this.backupsToKeep = settings.backupsToKeep || 2 - this.maxBackupSize = settings.maxBackupSize || 1 + this.maxBackupSize = settings.maxBackupSize === 0 ? 0 : settings.maxBackupSize || 1 this.loggerDailyLogsToKeep = settings.loggerDailyLogsToKeep || 7 this.loggerScannerLogsToKeep = settings.loggerScannerLogsToKeep || 2