diff --git a/client/components/cards/BookMatchCard.vue b/client/components/cards/BookMatchCard.vue index dd782d30..77619e55 100644 --- a/client/components/cards/BookMatchCard.vue +++ b/client/components/cards/BookMatchCard.vue @@ -15,8 +15,8 @@
by {{ book.author }}
Narrated by {{ book.narrator }}
-Runtime: {{ $elapsedPrettyExtended(book.duration * 60) }}
-Runtime: {{ $elapsedPrettyExtended(bookDuration, false) }} {{ bookDurationComparison }}
+{{ series.series }} #{{ series.sequence }} @@ -29,9 +29,7 @@
by {{ book.author }}
{{ book.genres.join(', ') }}
@@ -56,7 +54,8 @@ export default { default: () => {} }, isPodcast: Boolean, - bookCoverAspectRatio: Number + bookCoverAspectRatio: Number, + currentBookDuration: Number }, data() { return { @@ -65,12 +64,27 @@ export default { }, computed: { bookCovers() { - return this.book.covers ? this.book.covers || [] : [] + return this.book.covers || [] + }, + bookDuration() { + return (this.book.duration || 0) * 60 + }, + bookDurationComparison() { + if (!this.bookDuration || !this.currentBookDuration) return '' + let differenceInSeconds = this.currentBookDuration - this.bookDuration + // Only show seconds on difference if difference is less than an hour + if (differenceInSeconds < 0) { + differenceInSeconds = Math.abs(differenceInSeconds) + return `(${this.$elapsedPrettyExtended(differenceInSeconds, false, differenceInSeconds < 3600)} shorter)` + } else if (differenceInSeconds > 0) { + return `(${this.$elapsedPrettyExtended(differenceInSeconds, false, differenceInSeconds < 3600)} longer)` + } + return '(exact match)' } }, methods: { selectMatch() { - var book = { ...this.book } + const book = { ...this.book } book.cover = this.selectedCover this.$emit('select', book) }, diff --git a/client/components/modals/AccountModal.vue b/client/components/modals/AccountModal.vue index a09de35d..ddad3cd3 100644 --- a/client/components/modals/AccountModal.vue +++ b/client/components/modals/AccountModal.vue @@ -14,13 +14,17 @@{{ $strings.LabelEnable }}
http://192.168.1.1:8337
entonces pondría http://192.168.1.1:8337/notify
.",
- "MessageBackupsDescription": "Los respaldos incluyen, usuarios, el progreso del los usuarios, detalles de los elementos de la biblioteca, configuración del servidor y las imágenes en /metadata/items
& /metadata/authors
. Los Respaldo NO incluyen ningún archivo guardado en la carpeta de tu biblioteca.",
- "MessageBatchQuickMatchDescription": "Quick Match tratara de agregar porta y metadata faltantes de los elementos seleccionados. Habilite la opción de abajo para que Quick Match pueda sobrescribir portadas y/o metadata existentes.",
+ "MessageAddToPlayerQueue": "Agregar a fila del Reproductor",
+ "MessageAppriseDescription": "Para usar esta función deberás tener la API de Apprise corriendo o una API que maneje los mismos resultados. http://192.168.1.1:8337
entonces pondría http://192.168.1.1:8337/notify
.",
+ "MessageBackupsDescription": "Los respaldos incluyen: usuarios, el progreso del los usuarios, los detalles de los elementos de la biblioteca, la configuración del servidor y las imágenes en /metadata/items
y /metadata/authors
. Los Respaldos NO incluyen ningún archivo guardado en la carpeta de tu biblioteca.",
+ "MessageBatchQuickMatchDescription": "\"Encontrar Rápido\" tratará de agregar portadas y metadatos faltantes de los elementos seleccionados. Habilite la opción de abajo para que \"Encontrar Rápido\" pueda sobrescribir portadas y/o metadatos existentes.",
"MessageBookshelfNoCollections": "No tienes ninguna colección.",
"MessageBookshelfNoResultsForFilter": "Ningún Resultado para el filtro \"{0}: {1}\"",
"MessageBookshelfNoRSSFeeds": "Ninguna Fuente RSS esta abierta",
- "MessageBookshelfNoSeries": "No tienes ninguna series",
+ "MessageBookshelfNoSeries": "No tienes ninguna serie",
"MessageChapterEndIsAfter": "El final del capítulo es después del final de su audiolibro.",
"MessageChapterErrorFirstNotZero": "El primer capitulo debe iniciar en 0",
- "MessageChapterErrorStartGteDuration": "El tiempo de inicio no es válida debe ser inferior a la duración del audiolibro.",
- "MessageChapterErrorStartLtPrev": "El tiempo de inicio no es válida debe ser mayor o igual que la hora de inicio del capítulo anterior",
+ "MessageChapterErrorStartGteDuration": "El tiempo de inicio no es válido: debe ser inferior a la duración del audiolibro.",
+ "MessageChapterErrorStartLtPrev": "El tiempo de inicio no es válido: debe ser mayor o igual que el tiempo de inicio del capítulo anterior",
"MessageChapterStartIsAfter": "El comienzo del capítulo es después del final de su audiolibro",
- "MessageCheckingCron": "Checking cron...",
- "MessageConfirmCloseFeed": "Are you sure you want to close this feed?",
- "MessageConfirmDeleteBackup": "Esta seguro que desea eliminar el respaldo {0}?",
- "MessageConfirmDeleteFile": "This will delete the file from your file system. Are you sure?",
- "MessageConfirmDeleteLibrary": "Esta seguro que desea eliminar permanentemente la biblioteca \"{0}\"?",
- "MessageConfirmDeleteSession": "Esta seguro que desea eliminar esta session?",
- "MessageConfirmForceReScan": "Esta seguro que desea forzar re-escanear?",
- "MessageConfirmMarkAllEpisodesFinished": "Are you sure you want to mark all episodes as finished?",
- "MessageConfirmMarkAllEpisodesNotFinished": "Are you sure you want to mark all episodes as not finished?",
- "MessageConfirmMarkSeriesFinished": "Esta seguro que desea marcar todos los libros en esta serie como terminados?",
- "MessageConfirmMarkSeriesNotFinished": "Esta seguro que desea marcar todos los libros en esta serie como no terminados?",
- "MessageConfirmRemoveAllChapters": "Esta seguro que desea remover todos los capitulos?",
- "MessageConfirmRemoveAuthor": "Are you sure you want to remove author \"{0}\"?",
- "MessageConfirmRemoveCollection": "Esta seguro que desea remover la colección \"{0}\"?",
- "MessageConfirmRemoveEpisode": "Esta seguro que desea remover el episodio \"{0}\"?",
- "MessageConfirmRemoveEpisodes": "Esta seguro que desea remover {0} episodios?",
- "MessageConfirmRemoveNarrator": "Are you sure you want to remove narrator \"{0}\"?",
- "MessageConfirmRemovePlaylist": "Esta seguro que desea remover su lista de reproducción \"{0}\"?",
- "MessageConfirmRenameGenre": "Esta seguro que desea renombrar el genero \"{0}\" a \"{1}\" de todos los elementos?",
- "MessageConfirmRenameGenreMergeNote": "Nota: Este genero ya existe por lo que se fusionarán.",
- "MessageConfirmRenameGenreWarning": "Advertencia! un genero similar ya existe \"{0}\".",
- "MessageConfirmRenameTag": "Esta seguro que desea renombrar la etiqueta \"{0}\" a \"{1}\" de todos los elementos?",
- "MessageConfirmRenameTagMergeNote": "Nota: Esta etiqueta ya existe por lo que se fusionarán.",
+ "MessageCheckingCron": "Revisando cron...",
+ "MessageConfirmCloseFeed": "Está seguro de que desea cerrar esta fuente?",
+ "MessageConfirmDeleteBackup": "¿Está seguro de que desea eliminar el respaldo {0}?",
+ "MessageConfirmDeleteFile": "Esto eliminará el archivo de su sistema de archivos. ¿Está seguro?",
+ "MessageConfirmDeleteLibrary": "¿Está seguro de que desea eliminar permanentemente la biblioteca \"{0}\"?",
+ "MessageConfirmDeleteSession": "¿Está seguro de que desea eliminar esta sesión?",
+ "MessageConfirmForceReScan": "¿Está seguro de que desea forzar un re-escaneo?",
+ "MessageConfirmMarkAllEpisodesFinished": "¿Está seguro de que desea marcar todos los episodios como terminados?",
+ "MessageConfirmMarkAllEpisodesNotFinished": "¿Está seguro de que desea marcar todos los episodios como no terminados?",
+ "MessageConfirmMarkSeriesFinished": "¿Está seguro de que desea marcar todos los libros en esta serie como terminados?",
+ "MessageConfirmMarkSeriesNotFinished": "¿Está seguro de que desea marcar todos los libros en esta serie como no terminados?",
+ "MessageConfirmRemoveAllChapters": "¿Está seguro de que desea remover todos los capitulos?",
+ "MessageConfirmRemoveAuthor": "¿Está seguro de que desea remover el autor \"{0}\"?",
+ "MessageConfirmRemoveCollection": "¿Está seguro de que desea remover la colección \"{0}\"?",
+ "MessageConfirmRemoveEpisode": "¿Está seguro de que desea remover el episodio \"{0}\"?",
+ "MessageConfirmRemoveEpisodes": "¿Está seguro de que desea remover {0} episodios?",
+ "MessageConfirmRemoveNarrator": "¿Está seguro de que desea remover el narrador \"{0}\"?",
+ "MessageConfirmRemovePlaylist": "¿Está seguro de que desea remover la lista de reproducción \"{0}\"?",
+ "MessageConfirmRenameGenre": "¿Está seguro de que desea renombrar el genero \"{0}\" a \"{1}\" de todos los elementos?",
+ "MessageConfirmRenameGenreMergeNote": "Nota: Este género ya existe, por lo que se fusionarán.",
+ "MessageConfirmRenameGenreWarning": "Advertencia! Un genero similar ya existe \"{0}\".",
+ "MessageConfirmRenameTag": "¿Está seguro de que desea renombrar la etiqueta \"{0}\" a \"{1}\" de todos los elementos?",
+ "MessageConfirmRenameTagMergeNote": "Nota: Esta etiqueta ya existe, por lo que se fusionarán.",
"MessageConfirmRenameTagWarning": "Advertencia! Una etiqueta similar ya existe \"{0}\".",
- "MessageConfirmSendEbookToDevice": "Are you sure you want to send {0} ebook \"{1}\" to device \"{2}\"?",
+ "MessageConfirmSendEbookToDevice": "¿Está seguro de que enviar {0} ebook(s) \"{1}\" al dispositivo \"{2}\"?",
"MessageDownloadingEpisode": "Descargando Capitulo",
- "MessageDragFilesIntoTrackOrder": "Arrastras los archivos en el orden correcto de la pista.",
- "MessageEmbedFinished": "Incorporación Terminada!",
+ "MessageDragFilesIntoTrackOrder": "Arrastra los archivos al orden correcto de las pistas.",
+ "MessageEmbedFinished": "Incrustación Terminada!",
"MessageEpisodesQueuedForDownload": "{0} Episodio(s) en cola para descargar",
- "MessageFeedURLWillBe": "Fuente URL sera {0}",
+ "MessageFeedURLWillBe": "URL de la fuente será {0}",
"MessageFetching": "Buscando...",
- "MessageForceReScanDescription": "Escaneara todos los archivos como un nuevo escaneo. Archivos de audio con etiqueta ID3, archivos OPF y archivos de texto serán escaneados como nuevos.",
- "MessageImportantNotice": "Noticia importante!",
+ "MessageForceReScanDescription": "Escaneará todos los archivos como un nuevo escaneo. Archivos de audio con etiquetas ID3, archivos OPF y archivos de texto serán escaneados como nuevos.",
+ "MessageImportantNotice": "¡Notificación importante!",
"MessageInsertChapterBelow": "Insertar Capítulo Abajo",
"MessageItemsSelected": "{0} Elementos Seleccionados",
"MessageItemsUpdated": "{0} Elementos Actualizados",
- "MessageJoinUsOn": "Únete en",
- "MessageListeningSessionsInTheLastYear": "{0} sesiones de escuchadas en el último año",
+ "MessageJoinUsOn": "Únetenos en",
+ "MessageListeningSessionsInTheLastYear": "{0} sesiones de escucha en el último año",
"MessageLoading": "Cargando...",
"MessageLoadingFolders": "Cargando archivos...",
- "MessageM4BFailed": "M4B Fallo!",
- "MessageM4BFinished": "M4B Terminado!",
- "MessageMapChapterTitles": "Map chapter titles to your existing audiobook chapters without adjusting timestamps",
- "MessageMarkAllEpisodesFinished": "Mark all episodes finished",
- "MessageMarkAllEpisodesNotFinished": "Mark all episodes not finished",
+ "MessageM4BFailed": "¡Fallo de M4B!",
+ "MessageM4BFinished": "¡M4B Terminado!",
+ "MessageMapChapterTitles": "Asignar los nombres de capítulos a los capítulos existentes en tu audiolibro sin ajustar sus tiempos",
+ "MessageMarkAllEpisodesFinished": "Marcar todos los episodios como terminados",
+ "MessageMarkAllEpisodesNotFinished": "Marcar todos los episodios como no terminados",
"MessageMarkAsFinished": "Marcar como Terminado",
"MessageMarkAsNotFinished": "Marcar como No Terminado",
- "MessageMatchBooksDescription": "intentará hacer coincidir los libros de la biblioteca con un libro del proveedor de búsqueda seleccionado y rellenará los detalles vacíos y la portada. No sobrescribe los detalles.",
+ "MessageMatchBooksDescription": "Se intentará hacer coincidir los libros de la biblioteca con un libro del proveedor de búsqueda seleccionado, y se rellenarán los detalles vacíos y la portada. No sobrescribe los detalles.",
"MessageNoAudioTracks": "Sin Pista de Audio",
"MessageNoAuthors": "Sin Autores",
"MessageNoBackups": "Sin Respaldos",
@@ -582,18 +582,18 @@
"MessageNoDownloadsQueued": "Sin Lista de Descarga",
"MessageNoEpisodeMatchesFound": "No se encontraron episodios que coinciden",
"MessageNoEpisodes": "Sin Episodios",
- "MessageNoFoldersAvailable": "No Carpetas Disponibles",
+ "MessageNoFoldersAvailable": "No Hay Carpetas Disponibles",
"MessageNoGenres": "Sin Géneros",
"MessageNoIssues": "Sin Problemas",
"MessageNoItems": "Sin Elementos",
"MessageNoItemsFound": "Ningún Elemento Encontrado",
"MessageNoListeningSessions": "Ninguna Session Escuchada",
- "MessageNoLogs": "No Logs",
- "MessageNoMediaProgress": "Multimedia sin Progreso ",
+ "MessageNoLogs": "No hay logs",
+ "MessageNoMediaProgress": "Multimedia sin Progreso",
"MessageNoNotifications": "Ninguna Notificación",
- "MessageNoPodcastsFound": "Ningún podcasts encontrado",
+ "MessageNoPodcastsFound": "Ningún podcast encontrado",
"MessageNoResults": "Sin Resultados",
- "MessageNoSearchResultsFor": "No hay resultados de la búsqueda para \"{0}\"",
+ "MessageNoSearchResultsFor": "No hay resultados para la búsqueda \"{0}\"",
"MessageNoSeries": "Sin Series",
"MessageNoTags": "Sin Etiquetas",
"MessageNoTasksRunning": "Ninguna Tarea Corriendo",
@@ -603,45 +603,45 @@
"MessageNoUserPlaylists": "No tienes lista de reproducciones",
"MessageOr": "o",
"MessagePauseChapter": "Pausar la reproducción del capítulo",
- "MessagePlayChapter": "Escuche para comenzar el capítulo",
- "MessagePlaylistCreateFromCollection": "Crear lista de reproducción a partir de colección",
- "MessagePodcastHasNoRSSFeedForMatching": "El podcast no tiene una URL de fuente RSS que pueda usar que coincida",
- "MessageQuickMatchDescription": "Rellenar detalles de elementos vacíos y portada con los primeros resultados de '{0}'. No sobrescribe los detalles a menos que la configuración 'Prefer matched metadata' del servidor este habilita.",
+ "MessagePlayChapter": "Escuchar el comienzo del capítulo",
+ "MessagePlaylistCreateFromCollection": "Crear una lista de reproducción a partir de una colección",
+ "MessagePodcastHasNoRSSFeedForMatching": "El podcast no tiene una URL de fuente RSS que pueda usar",
+ "MessageQuickMatchDescription": "Rellenar detalles de elementos vacíos y portada con los primeros resultados de '{0}'. No sobrescribe los detalles a menos que la opción \"Preferir Metadatos Encontrados\" del servidor esté habilitada.",
"MessageRemoveChapter": "Remover capítulos",
"MessageRemoveEpisodes": "Remover {0} episodio(s)",
- "MessageRemoveFromPlayerQueue": "Romover la cola de reporduccion",
- "MessageRemoveUserWarning": "Esta seguro que desea eliminar el usuario \"{0}\"?",
- "MessageReportBugsAndContribute": "Reporte erres, solicite funciones y contribuye en",
- "MessageResetChaptersConfirm": "Esta seguro que desea reiniciar el capitulo y deshacer los cambios que hiciste?",
- "MessageRestoreBackupConfirm": "Esta seguro que desea para restaurar del respaldo creado en",
- "MessageRestoreBackupWarning": "Restaurar sobrescribirá toda la base de datos localizada en /config y las imágenes de portadas en /metadata/items & /metadata/authors.