From b04eda6c8a3bfcaa2a14b8a29612fdf690c9fba0 Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Mon, 4 Jan 2021 12:41:22 +0100 Subject: [PATCH 1/9] feat(lang): translations update from Weblate (#495) * feat(lang): translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (418 of 418 strings) feat(lang): translated using Weblate (Portuguese (Brazil)) Currently translated at 93.7% (391 of 417 strings) feat(lang): translated using Weblate (Portuguese (Brazil)) Currently translated at 95.3% (390 of 409 strings) Co-authored-by: Hosted Weblate Co-authored-by: K. Herbert Co-authored-by: Tijuco Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_BR/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (French) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (French) Currently translated at 100.0% (422 of 422 strings) feat(lang): translated using Weblate (French) Currently translated at 100.0% (418 of 418 strings) feat(lang): translated using Weblate (French) Currently translated at 100.0% (409 of 409 strings) Co-authored-by: Hosted Weblate Co-authored-by: J. Lavoie Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (Swedish) Currently translated at 95.1% (389 of 409 strings) Co-authored-by: Hosted Weblate Co-authored-by: Jakob Ankarhem Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sv/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (Italian) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (Italian) Currently translated at 100.0% (422 of 422 strings) feat(lang): translated using Weblate (Italian) Currently translated at 100.0% (418 of 418 strings) feat(lang): translated using Weblate (Italian) Currently translated at 100.0% (409 of 409 strings) feat(lang): translated using Weblate (Italian) Currently translated at 100.0% (409 of 409 strings) Co-authored-by: Hosted Weblate Co-authored-by: J. Lavoie Co-authored-by: Simone Chiavaccini Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/it/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (Spanish) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (Spanish) Currently translated at 100.0% (409 of 409 strings) Co-authored-by: Hosted Weblate Co-authored-by: Shutruk Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/es/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (German) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (422 of 422 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (418 of 418 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (409 of 409 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (409 of 409 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (409 of 409 strings) feat(lang): translated using Weblate (German) Currently translated at 98.7% (404 of 409 strings) Co-authored-by: Ben Wallner Co-authored-by: Hosted Weblate Co-authored-by: J. Lavoie Co-authored-by: K. Herbert Co-authored-by: Paul Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (Dutch) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (Dutch) Currently translated at 100.0% (432 of 432 strings) feat(lang): translated using Weblate (Dutch) Currently translated at 96.9% (419 of 432 strings) feat(lang): translated using Weblate (Dutch) Currently translated at 79.8% (345 of 432 strings) Co-authored-by: Hosted Weblate Co-authored-by: Jos Vennik Co-authored-by: Kobe Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (Japanese) Currently translated at 99.5% (407 of 409 strings) Co-authored-by: Hosted Weblate Co-authored-by: T'ai Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ja/ Translation: Overseerr/Overseerr Frontend Co-authored-by: K. Herbert Co-authored-by: Tijuco Co-authored-by: J. Lavoie Co-authored-by: Jakob Ankarhem Co-authored-by: Simone Chiavaccini Co-authored-by: Shutruk Co-authored-by: Ben Wallner Co-authored-by: Paul Co-authored-by: Jos Vennik Co-authored-by: Kobe Co-authored-by: T'ai --- src/i18n/locale/de.json | 57 ++++++++++++++++---- src/i18n/locale/es.json | 48 ++++++++++++++++- src/i18n/locale/fr.json | 44 +++++++++++++++- src/i18n/locale/it.json | 44 +++++++++++++++- src/i18n/locale/ja.json | 19 ++++++- src/i18n/locale/nl.json | 105 ++++++++++++++++++++++++++++++++++--- src/i18n/locale/pt_BR.json | 84 ++++++++++++++++++++++++----- src/i18n/locale/sv.json | 25 ++++++++- 8 files changed, 392 insertions(+), 34 deletions(-) diff --git a/src/i18n/locale/de.json b/src/i18n/locale/de.json index cc0ad7d9..f5a70437 100644 --- a/src/i18n/locale/de.json +++ b/src/i18n/locale/de.json @@ -74,10 +74,10 @@ "components.RequestModal.notrequested": "Nicht angefragt", "components.RequestModal.numberofepisodes": "Anzahl der Folgen", "components.RequestModal.pendingrequest": "Ausstehende Anfrage für {title}", - "components.RequestModal.request": "Anfrage", + "components.RequestModal.request": "Anfragen", "components.RequestModal.requestCancel": "Anfrage für {title} abgebrochen", "components.RequestModal.requestSuccess": "{title} angefragt.", - "components.RequestModal.requestadmin": "Deine Anfrage wird direkt genehmigt werden.", + "components.RequestModal.requestadmin": "Deine Anfrage wird direkt genehmigt.", "components.RequestModal.requestfrom": "Derzeit steht eine Anfrage von {username} aus", "components.RequestModal.requesting": "Wird angefragt …", "components.RequestModal.requestseasons": "{seasonCount} {seasonCount, plural, one {Staffel} other {Staffeln}} anfragen", @@ -183,7 +183,7 @@ "components.Settings.jobname": "Aufgabenname", "components.Settings.librariesRemaining": "Verbleibende Bibliotheken: {count}", "components.Settings.manualscan": "Manueller Bibliotheksscan", - "components.Settings.manualscanDescription": "Normalerweise wird dies nur einmal alle 24 Stunden ausgeführt. Overseerr überprüft die kürzlich hinzugefügten Plex-Server aggressiver. Wenn Sie Plex zum ersten Mal konfigurieren, wird ein einmaliger vollständiger manueller Bibliotheksscan empfohlen!", + "components.Settings.manualscanDescription": "Normalerweise wird dies nur einmal alle 24 Stunden ausgeführt. Overseerr überprüft die kürzlich hinzugefügten Plex-Server aggressiver. Wenn du Plex zum ersten Mal konfigurierst, wird ein einmaliger vollständiger manueller Bibliotheksscan empfohlen!", "components.Settings.menuAbout": "Über", "components.Settings.menuGeneralSettings": "Allgemeine Einstellungen", "components.Settings.menuJobs": "Aufgaben", @@ -367,11 +367,11 @@ "components.Settings.defaultPermissions": "Standardbenutzerberechtigungen", "components.UserList.importfromplexerror": "Beim Importieren von Benutzern aus Plex ist etwas schief gelaufen", "components.UserList.importfromplex": "Benutzer aus Plex importieren", - "components.TvDetails.viewfullcrew": "Komplettes Team anzeigen", - "components.TvDetails.TvCrew.fullseriescrew": "Komplettes Serien Team", - "components.PersonDetails.crewmember": "Teammitglied", - "components.MovieDetails.viewfullcrew": "Komplettes Team anzeigen", - "components.MovieDetails.MovieCrew.fullcrew": "Komplettes Team", + "components.TvDetails.viewfullcrew": "Komplette Crew anzeigen", + "components.TvDetails.TvCrew.fullseriescrew": "Komplette Serien Crew", + "components.PersonDetails.crewmember": "Crewmitglied", + "components.MovieDetails.viewfullcrew": "Komplette Crew anzeigen", + "components.MovieDetails.MovieCrew.fullcrew": "Komplette Crew", "components.UserList.importedfromplex": "{userCount, plural, =0 {Keine neuen Benutzer} one {# neuer Benutzer} other {# neue Benutzer}} aus Plex importiert", "components.TvDetails.firstAirDate": "Erstausstrahlung", "components.Settings.Notifications.ssldisabletip": "SSL sollte bei Standard-TLS-Verbindungen deaktiviert werden (Port 587)", @@ -391,5 +391,44 @@ "i18n.requested": "Angefragt", "i18n.retry": "Wiederholen", "i18n.failed": "Fehlgeschlagen", - "components.RequestList.RequestItem.failedretry": "Beim Wiederholen der Anfrage ist etwas schief gelaufen" + "components.RequestList.RequestItem.failedretry": "Beim Wiederholen der Anfrage ist etwas schief gelaufen", + "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Um Slack-Benachrichtigungen zu verwenden, musst du eine Incoming Webhook-Integration erstellen und die unten angegebene Webhook-URL verwenden.", + "components.Settings.Notifications.NotificationsSlack.webhookUrlPlaceholder": "Webhook URL", + "components.Settings.Notifications.NotificationsSlack.webhookUrl": "Webhook URL", + "components.Settings.Notifications.NotificationsSlack.testsent": "Testbenachrichtigung gesendet!", + "components.Settings.Notifications.NotificationsSlack.test": "Test", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Slack-Benachrichtigungseinstellungen gespeichert!", + "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Die Einstellungen für Slack-Benachrichtigungen konnten nicht gespeichert werden.", + "components.Settings.Notifications.NotificationsSlack.settingupslack": "Einrichten von Slack-Benachrichtigungen", + "components.Settings.Notifications.NotificationsSlack.saving": "Speichern …", + "components.Settings.Notifications.NotificationsSlack.save": "Änderungen speichern", + "components.Settings.Notifications.NotificationsSlack.agentenabled": "Agent aktiviert", + "components.UserEdit.autoapproveSeries": "Automatische Genehmigung von Serien", + "components.UserEdit.autoapproveMovies": "Automatische Genehmigung von Filmen", + "components.UserEdit.autoapproveSeriesDescription": "Gewährt die automatische Genehmigung für Serienanfragen von diesem Benutzer.", + "components.UserEdit.autoapproveMoviesDescription": "Gewährt die automatische Genehmigung für Filmanfragen von diesem Benutzer.", + "components.Settings.Notifications.NotificationsSlack.validationWebhookUrlRequired": "Du musst eine Webhook-URL angeben", + "components.Settings.Notifications.validationChatIdRequired": "Du musst eine Chat-ID angeben.", + "components.Settings.Notifications.validationBotAPIRequired": "Du musst einen Bot-API-Schlüssel angeben.", + "components.Settings.Notifications.telegramsettingssaved": "Telegram-Benachrichtigungseinstellungen gespeichert!", + "components.Settings.Notifications.telegramsettingsfailed": "Die Einstellungen für die Telegram-Benachrichtigung konnten nicht gespeichert werden.", + "components.Settings.Notifications.senderName": "Absendername", + "components.Settings.Notifications.settinguptelegramDescription": "Um Telegram einzurichten, musst du einen Bot erstellen und den Bot-API-Schlüssel erhalten. Außerdem benötigst du die Chat-ID für den Chat, an den der Bot Benachrichtigungen senden soll. Du kannst dies tun, indem du @get_id_bot zum Chat oder Gruppenchat hinzufügst.", + "components.Settings.Notifications.settinguptelegram": "Einrichten von Telegram-Benachrichtigungen", + "components.Settings.Notifications.chatId": "Chat-ID", + "components.Settings.Notifications.botAPI": "Bot-API", + "components.StatusChacker.reloadOverseerr": "Overseerr neu laden", + "components.StatusChacker.newversionavailable": "Neue Version verfügbar", + "components.StatusChacker.newversionDescription": "Eine Aktualisierung ist jetzt verfügbar. Klicke auf die Schaltfläche unten, um die Anwendung neu zu laden.", + "components.Settings.SettingsAbout.documentation": "Dokumentation", + "components.Settings.Notifications.notificationtypes": "Benachrichtigungstypen", + "components.Settings.Notifications.NotificationsSlack.notificationtypes": "Benachrichtigungstypen", + "components.NotificationTypeSelector.mediarequestedDescription": "Sendet eine Benachrichtigung, wenn neue Medien angefordert werden. Bei bestimmten Agenten wird die Benachrichtigung nur an Administratoren oder Benutzer mit der Berechtigung „Anfragen verwalten“ gesendet.", + "components.NotificationTypeSelector.mediarequested": "Angeforderte Medien", + "components.NotificationTypeSelector.mediafailedDescription": "Sendet eine Benachrichtigung, wenn Medien nicht zu Diensten hinzugefügt werden (Radarr / Sonarr). Bei bestimmten Agenten wird die Benachrichtigung nur an Administratoren oder Benutzer mit der Berechtigung „Anfragen verwalten“ gesendet.", + "components.NotificationTypeSelector.mediafailed": "Medienhinzufügen fehlgeschlagen", + "components.NotificationTypeSelector.mediaapprovedDescription": "Sendet eine Benachrichtigung, wenn Medien genehmigt werden.", + "components.NotificationTypeSelector.mediaavailableDescription": "Sendet eine Benachrichtigung, wenn Medien verfügbar werden.", + "components.NotificationTypeSelector.mediaavailable": "Medien verfügbar", + "components.NotificationTypeSelector.mediaapproved": "Medien genehmigt" } diff --git a/src/i18n/locale/es.json b/src/i18n/locale/es.json index 4f17588a..b5768bb5 100644 --- a/src/i18n/locale/es.json +++ b/src/i18n/locale/es.json @@ -384,5 +384,51 @@ "components.CollectionDetails.overviewunavailable": "Resumen no disponible", "components.CollectionDetails.overview": "Resumen", "components.CollectionDetails.numberofmovies": "Número de películas: {count}", - "components.CollectionDetails.movies": "Películas" + "components.CollectionDetails.movies": "Películas", + "i18n.retry": "Reintentar", + "i18n.requested": "Solicitado", + "i18n.failed": "Fallido", + "components.UserEdit.autoapproveSeriesDescription": "Concede aprobación automática para las solicitudes de series realizadas por este usuario.", + "components.UserEdit.autoapproveSeries": "Aprobación de Series automática", + "components.UserEdit.autoapproveMoviesDescription": "Concede aprobación automática para las solicitudes de película realizadas por este usuario.", + "components.UserEdit.autoapproveMovies": "Aprobación automática de películas", + "components.TvDetails.watchtrailer": "Ver Trailer", + "components.Settings.Notifications.NotificationsSlack.webhookUrlPlaceholder": "URL de Webhook", + "components.Settings.Notifications.NotificationsSlack.webhookUrl": "URL de Webhook", + "components.Settings.Notifications.NotificationsSlack.validationWebhookUrlRequired": "Debes proporcionar una URL de webhook", + "components.Settings.Notifications.NotificationsSlack.testsent": "¡Notificación de prueba enviada!", + "components.Settings.Notifications.NotificationsSlack.test": "Probar", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "¡Ajustes de notificación de Slack guardados!", + "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Fallo al guardar ajustes de notificación de Slack.", + "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Para utilizar las notificaciones de Slack, deberá crear una integración de Webhook Incoming Webhook y utilizar la dirección URL de webhook proporcionada a continuación.", + "components.Settings.Notifications.NotificationsSlack.settingupslack": "Configurando notificaciones de Slack", + "components.Settings.Notifications.NotificationsSlack.saving": "Guardando...", + "components.Settings.Notifications.NotificationsSlack.save": "Guardar cambios", + "components.Settings.Notifications.NotificationsSlack.agentenabled": "Agente habilitado", + "components.RequestList.RequestItem.failedretry": "Algo salió mal al reintentar la solicitud", + "components.MovieDetails.watchtrailer": "Ver Trailer", + "components.MovieDetails.view": "Ver", + "components.NotificationTypeSelector.mediarequestedDescription": "Envía una notificación cuando se solicitan nuevos medios. Para ciertos agentes, esto solo enviará la notificación a los administradores o usuarios con el permiso \"Administrar solicitudes\".", + "components.StatusChacker.reloadOverseerr": "Relanzar Overseerr", + "components.StatusChacker.newversionavailable": "Nueva versión disponible", + "components.StatusChacker.newversionDescription": "Hay una actualización disponible. Haga clic en el botón de abajo para volver a cargar la aplicación.", + "components.Settings.SettingsAbout.documentation": "Documentación", + "components.Settings.Notifications.validationChatIdRequired": "Debe proporcionar una ID de chat.", + "components.Settings.Notifications.validationBotAPIRequired": "Debe proporcionar una clave de API de bot.", + "components.Settings.Notifications.telegramsettingssaved": "¡Se han guardado los ajustes de notificación de Telegram!", + "components.Settings.Notifications.telegramsettingsfailed": "La configuración de notificaciones de Telegram no se pudo guardar.", + "components.Settings.Notifications.settinguptelegramDescription": "Para configurar Telegram necesitas crear un bot y obtener la clave API del bot. Además, necesita la identificación del chat para el chat al que desea que el bot envíe notificaciones. Puede hacerlo agregando @get_id_bot al chat o al chat grupal.", + "components.Settings.Notifications.settinguptelegram": "Configuración de notificaciones de Telegram", + "components.Settings.Notifications.senderName": "Nombre del remitente", + "components.Settings.Notifications.notificationtypes": "Tipos de notificación", + "components.Settings.Notifications.chatId": "ID de chat", + "components.Settings.Notifications.botAPI": "API de bot", + "components.Settings.Notifications.NotificationsSlack.notificationtypes": "Tipos de notificación", + "components.NotificationTypeSelector.mediarequested": "Contenido Solicitado", + "components.NotificationTypeSelector.mediafailedDescription": "Envía una notificación cuando los medios no se agregan a los servicios (Radarr / Sonarr). Para ciertos agentes, esto solo enviará la notificación a los administradores o usuarios con el permiso \"Administrar solicitudes\".", + "components.NotificationTypeSelector.mediafailed": "Contenido Fallido", + "components.NotificationTypeSelector.mediaavailableDescription": "Envía una notificación cuando los medios están disponibles.", + "components.NotificationTypeSelector.mediaavailable": "Contenido disponible", + "components.NotificationTypeSelector.mediaapprovedDescription": "Envía una notificación cuando los medios son aprobados.", + "components.NotificationTypeSelector.mediaapproved": "Contenido Aprobado" } diff --git a/src/i18n/locale/fr.json b/src/i18n/locale/fr.json index 297f48a7..335606bb 100644 --- a/src/i18n/locale/fr.json +++ b/src/i18n/locale/fr.json @@ -388,5 +388,47 @@ "components.CollectionDetails.overview": "Résumé", "components.CollectionDetails.numberofmovies": "Nombre de films : {count}", "components.CollectionDetails.movies": "Films", - "i18n.requested": "Demandé" + "i18n.requested": "Demandé", + "i18n.retry": "Réessayer", + "i18n.failed": "Échec", + "components.UserEdit.autoapproveSeriesDescription": "Accorde la validation automatique pour les demandes de séries effectuées par cet utilisateur.", + "components.UserEdit.autoapproveSeries": "Valider automatiquement les séries", + "components.UserEdit.autoapproveMoviesDescription": "Accorde la validation automatique des demandes de films effectuées par cet utilisateur.", + "components.UserEdit.autoapproveMovies": "Valider automatiquement les films", + "components.Settings.Notifications.NotificationsSlack.webhookUrlPlaceholder": "URL webhook", + "components.Settings.Notifications.NotificationsSlack.webhookUrl": "URL webhook", + "components.Settings.Notifications.NotificationsSlack.validationWebhookUrlRequired": "Vous devez fournir une URL Webhook", + "components.Settings.Notifications.NotificationsSlack.testsent": "Notification de test envoyée !", + "components.Settings.Notifications.NotificationsSlack.test": "Test", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Les paramètres des notifications Slack ont été enregistrés !", + "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Impossible d'enregistrer les paramètres des notifications Slack.", + "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Pour utiliser les notifications Slack, vous aurez besoin de créer une intégration de Webhook Entrant et utiliser l'URL fournie du Webhook ci-dessous.", + "components.Settings.Notifications.NotificationsSlack.settingupslack": "Paramétrage des notifications Slack", + "components.Settings.Notifications.NotificationsSlack.saving": "Enregistrement…", + "components.Settings.Notifications.NotificationsSlack.save": "Enregistrer les changements", + "components.Settings.Notifications.NotificationsSlack.agentenabled": "Agent activé", + "components.RequestList.RequestItem.failedretry": "Une erreur s'est produite lors du renvoi de la requête", + "components.Settings.Notifications.validationChatIdRequired": "Vous devez fournir un identifiant de conversation.", + "components.Settings.Notifications.botAPI": "API du bot", + "components.Settings.Notifications.validationBotAPIRequired": "Vous devez fournir une clé API de bot.", + "components.Settings.Notifications.telegramsettingssaved": "Paramètres de notification Telegram enregistrés !", + "components.Settings.Notifications.telegramsettingsfailed": "Les paramètres de notification Telegram n'ont pas pu être enregistrés.", + "components.Settings.Notifications.senderName": "Nom de l'expéditeur", + "components.Settings.Notifications.chatId": "ID conversation", + "components.Settings.Notifications.settinguptelegramDescription": "Pour configurer Telegram, vous devez créer un bot et obtenir la clé API du bot. De plus, vous avez besoin de l'identifiant de conversion pour la conversation à laquelle vous souhaitez que le bot envoie des notifications. Vous pouvez le faire en ajoutant @get_id_bot à la conversation ou à la conversation de groupe.", + "components.Settings.Notifications.settinguptelegram": "Configuration des notifications Telegram", + "components.StatusChacker.reloadOverseerr": "Recharger Overseerr", + "components.StatusChacker.newversionavailable": "Nouvelle version disponible", + "components.StatusChacker.newversionDescription": "Une mise à jour est maintenant disponible. Cliquez sur le bouton ci-dessous pour recharger l'application.", + "components.Settings.SettingsAbout.documentation": "Documentation", + "components.Settings.Notifications.notificationtypes": "Types de notification", + "components.Settings.Notifications.NotificationsSlack.notificationtypes": "Types de notification", + "components.NotificationTypeSelector.mediarequestedDescription": "Envoie une notification quand un nouveau média est demandé. Pour certains agents, ceci n'enverra la notification qu'aux administrateurs ou aux utilisateurs disposant de l'autorisation « Gérer les demandes ».", + "components.NotificationTypeSelector.mediarequested": "Média demandé", + "components.NotificationTypeSelector.mediafailedDescription": "Envoie une notification quand des médias ne sont pas ajoutés aux services (Radarr / Sonarr). Pour certains agents, ceci n'enverra la notification qu'aux administrateurs ou aux utilisateurs disposant de l'autorisation « Gérer les demandes ».", + "components.NotificationTypeSelector.mediafailed": "Échec d’ajout du média", + "components.NotificationTypeSelector.mediaavailableDescription": "Envoie une notification quand le média devient disponible.", + "components.NotificationTypeSelector.mediaavailable": "Média disponible", + "components.NotificationTypeSelector.mediaapprovedDescription": "Envoie une notification quand le média est validé.", + "components.NotificationTypeSelector.mediaapproved": "Média validé" } diff --git a/src/i18n/locale/it.json b/src/i18n/locale/it.json index 7f3818f4..19a27a7a 100644 --- a/src/i18n/locale/it.json +++ b/src/i18n/locale/it.json @@ -388,5 +388,47 @@ "components.TvDetails.watchtrailer": "Guarda il trailer", "components.MovieDetails.watchtrailer": "Guarda il trailer", "components.MovieDetails.view": "Visualizza", - "i18n.requested": "Richiesto" + "i18n.requested": "Richiesto", + "components.RequestList.RequestItem.failedretry": "Qualcosa è andato storto nel riprovare la richiesta", + "i18n.retry": "Riprova", + "i18n.failed": "Fallito", + "components.UserEdit.autoapproveSeriesDescription": "Concede l'approvazione automatica per le richieste di serie effettuate da questo utente.", + "components.UserEdit.autoapproveSeries": "Approva automaticamente le serie", + "components.UserEdit.autoapproveMoviesDescription": "Concede l'autoapprovazione per le richieste di film effettuate da questo utente.", + "components.UserEdit.autoapproveMovies": "Approva automaticamente i film", + "components.Settings.Notifications.NotificationsSlack.webhookUrlPlaceholder": "URL webhook", + "components.Settings.Notifications.NotificationsSlack.webhookUrl": "URL webhook", + "components.Settings.Notifications.NotificationsSlack.validationWebhookUrlRequired": "È necessario fornire un URL per il webhook", + "components.Settings.Notifications.NotificationsSlack.test": "Prova", + "components.Settings.Notifications.NotificationsSlack.testsent": "Notifica di prova inviata!", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Impostazioni di notifica Slack salvate!", + "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Impossibile salvare le impostazioni di notifica Slack.", + "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Per utilizzare le notifiche con Slack, sarà necessario creare un'integrazione Incoming Webhook e utilizzare l'URL webhook fornito di seguito.", + "components.Settings.Notifications.NotificationsSlack.settingupslack": "Configurazione delle notifiche di Slack", + "components.Settings.Notifications.NotificationsSlack.saving": "Salvataggio…", + "components.Settings.Notifications.NotificationsSlack.save": "Salva le modifiche", + "components.Settings.Notifications.NotificationsSlack.agentenabled": "Agente abilitato", + "components.Settings.Notifications.validationChatIdRequired": "Devi fornire un ID discussione.", + "components.Settings.Notifications.validationBotAPIRequired": "Devi fornire una chiave API bot.", + "components.Settings.Notifications.telegramsettingssaved": "Impostazioni di notifica di Telegram salvate!", + "components.Settings.Notifications.telegramsettingsfailed": "Impossibile salvare le impostazioni di notifica di Telegram.", + "components.Settings.Notifications.senderName": "Nome del mittente", + "components.Settings.Notifications.settinguptelegramDescription": "Per configurare Telegram devi creare un bot e ottenere la chiave API del bot. Inoltre, è necessario l'ID discussione per la discussione a cui si desidera che il bot invii le notifiche. Puoi farlo aggiungendo @get_id_bot alla discussione o alla discussione di gruppo.", + "components.Settings.Notifications.settinguptelegram": "Configurazione delle notifiche Telegram", + "components.Settings.Notifications.chatId": "ID discussione", + "components.Settings.Notifications.botAPI": "API bot", + "components.StatusChacker.reloadOverseerr": "Ricarica Overseerr", + "components.StatusChacker.newversionavailable": "Nuova versione disponibile", + "components.StatusChacker.newversionDescription": "È ora disponibile un aggiornamento. Fai clic sul pulsante in basso per ricaricare l'applicazione.", + "components.Settings.SettingsAbout.documentation": "Documentazione", + "components.Settings.Notifications.notificationtypes": "Tipi di notifica", + "components.Settings.Notifications.NotificationsSlack.notificationtypes": "Tipi di notifica", + "components.NotificationTypeSelector.mediarequestedDescription": "Invia una notifica quando un nuovo media viene richiesto. Per alcuni agenti, la notifica verrà inviata solo agli amministratori o agli utenti con l'autorizzazione «Gestione richieste».", + "components.NotificationTypeSelector.mediarequested": "Media richiesto", + "components.NotificationTypeSelector.mediafailedDescription": "Invia una notifica quando il media non viene aggiunto ai servizi (Radarr / Sonarr). Per alcuni agenti, la notifica verrà inviata solo agli amministratori o agli utenti con l'autorizzazione «Gestione richieste».", + "components.NotificationTypeSelector.mediafailed": "Aggiunta media non riuscita", + "components.NotificationTypeSelector.mediaavailableDescription": "Invia una notifica quando il media diventa disponibile.", + "components.NotificationTypeSelector.mediaapprovedDescription": "Invia una notifica quando il media viene approvato.", + "components.NotificationTypeSelector.mediaapproved": "Media approvato", + "components.NotificationTypeSelector.mediaavailable": "Media disponibile" } diff --git a/src/i18n/locale/ja.json b/src/i18n/locale/ja.json index e939bec4..8baac769 100644 --- a/src/i18n/locale/ja.json +++ b/src/i18n/locale/ja.json @@ -388,5 +388,22 @@ "components.TvDetails.TvCrew.fullseriescrew": "フルシリーズクルー", "components.Settings.Notifications.ssldisabletip": "標準TLS接続(ポート587)ではSSLを無効にすることをおすすめします。", "components.Settings.Notifications.allowselfsigned": "自己署名証明書を許可する", - "components.PersonDetails.crewmember": "クルーメンバー" + "components.PersonDetails.crewmember": "クルーメンバー", + "i18n.retry": "リトライ", + "i18n.failed": "失敗", + "components.UserEdit.autoapproveSeriesDescription": "このユーザーが行ったシリーズリクエストの自動承認をします。", + "components.UserEdit.autoapproveSeries": "シリーズを自動承認", + "components.UserEdit.autoapproveMoviesDescription": "このユーザーがリクエストした動画の自動承認を許可します。", + "components.UserEdit.autoapproveMovies": "ムービーの自動承認", + "components.Settings.Notifications.NotificationsSlack.webhookUrlPlaceholder": "ウェブフックURL", + "components.Settings.Notifications.NotificationsSlack.webhookUrl": "ウェブフックURL", + "components.Settings.Notifications.NotificationsSlack.validationWebhookUrlRequired": "ウェブフックのURLを指定してください。", + "components.Settings.Notifications.NotificationsSlack.testsent": "テスト通知が送信されました。", + "components.Settings.Notifications.NotificationsSlack.test": "テスト", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Slackの通知設定が保存されました", + "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Slackの通知設定の保存に失敗しました。", + "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Slack通知を使用するには、受信ウェブフックを作成し、以下のWebhook URLを使用する必要があります。", + "components.Settings.Notifications.NotificationsSlack.settingupslack": "Slack通知の設定", + "components.Settings.Notifications.NotificationsSlack.saving": "保存中...", + "components.Settings.Notifications.NotificationsSlack.save": "変更を保存" } diff --git a/src/i18n/locale/nl.json b/src/i18n/locale/nl.json index 46373f8a..72545678 100644 --- a/src/i18n/locale/nl.json +++ b/src/i18n/locale/nl.json @@ -16,7 +16,7 @@ "components.Layout.Sidebar.settings": "Instellingen", "components.Layout.Sidebar.users": "Gebruikers", "components.Layout.UserDropdown.signout": "Uitloggen", - "components.Layout.alphawarning": "Dit is ALPHA software. Bijna alles is waarschijnlijk kapot of onstabiel. Rapporteer issues bij de Overseerr GitHub!", + "components.Layout.alphawarning": "Dit is ALPHA software. Bijna alles is waarschijnlijk kapot of instabiel. Rapporteer issues bij de Overseerr GitHub!", "components.Login.signinplex": "Log in om door te gaan", "components.MovieDetails.approve": "Goedkeuren", "components.MovieDetails.available": "Beschikbaar", @@ -25,7 +25,7 @@ "components.MovieDetails.cast": "Acteurs", "components.MovieDetails.decline": "Weigeren", "components.MovieDetails.manageModalClearMedia": "Wis Alle Media Data", - "components.MovieDetails.manageModalClearMediaWarning": "Dit wist alle media data inclusief alle verzoeken voor dit item zonder herstelmogelijkheden. Als dit item in je Plex bibliotheek bestaat zal alle media info bij de volgende sync hersteld worden.", + "components.MovieDetails.manageModalClearMediaWarning": "Dit wist alle mediadata voor dit item, inclusief alle verzoeken, zonder mogelijkheid tot herstel. Als dit item in je Plex-bibliotheek staat, zal alle media-info bij de volgende synchronisatie hersteld worden.", "components.MovieDetails.manageModalNoRequests": "Geen Verzoeken", "components.MovieDetails.manageModalRequests": "Verzoeken", "components.MovieDetails.manageModalTitle": "Beheer Film", @@ -50,15 +50,15 @@ "components.PersonDetails.nobiography": "Geen biografie beschikbaar.", "components.PlexLoginButton.loading": "Bezig met laden…", "components.PlexLoginButton.loggingin": "Bezig met inloggen…", - "components.PlexLoginButton.loginwithplex": "Login met Plex", + "components.PlexLoginButton.loginwithplex": "Inloggen met Plex", "components.RequestBlock.seasons": "Seizoenen", "components.RequestCard.all": "Alle", "components.RequestCard.requestedby": "Verzocht door {username}", "components.RequestCard.seasons": "Seizoenen", - "components.RequestList.RequestItem.notavailable": "Nvt", + "components.RequestList.RequestItem.notavailable": "N.v.t.", "components.RequestList.RequestItem.requestedby": "Verzocht door {username}", "components.RequestList.RequestItem.seasons": "Seizoenen", - "components.RequestList.mediaInfo": "Media Info", + "components.RequestList.mediaInfo": "Media-info", "components.RequestList.modifiedBy": "Laatst Aangepast Door", "components.RequestList.next": "Volgende", "components.RequestList.previous": "Vorige", @@ -183,7 +183,7 @@ "components.Settings.jobname": "Taaknaam", "components.Settings.librariesRemaining": "Resterende Bibliotheken: {count}", "components.Settings.manualscan": "Handmatige Bibliotheek Scan", - "components.Settings.manualscanDescription": "Normaal gesproken wordt dit eens elke 6 uur gedraaid. Overseerr controleert de recentelijk toegoevoegde items van je Plex Server aggresiever. Als dit je eerst keer is om Plex te configuren raden wij aan om eenmaal een volledige bibliotheek scan handmatig te draaien!", + "components.Settings.manualscanDescription": "Normaal gesproken wordt dit eens elke 24 uur gedraaid. Overseerr controleert de recentelijk toegoevoegde items van je Plex Server aggresiever. Als dit je eerst keer is om Plex te configuren raden wij aan om eenmaal een volledige bibliotheek scan handmatig te draaien!", "components.Settings.menuAbout": "Over", "components.Settings.menuGeneralSettings": "Algemene Instellingen", "components.Settings.menuJobs": "Taken", @@ -339,5 +339,96 @@ "components.Settings.SettingsAbout.Releases.currentversion": "Huidige versie", "components.Settings.Notifications.testsent": "Test notificatie verzonden!", "components.Settings.Notifications.test": "Test", - "components.MovieDetails.studio": "Studio" + "components.MovieDetails.studio": "Studio", + "components.CollectionDetails.requesting": "Aanvragen…", + "components.CollectionDetails.overviewunavailable": "Overzicht niet beschikbaar", + "components.CollectionDetails.overview": "Overzicht", + "components.CollectionDetails.numberofmovies": "Aantal films: {count}", + "components.CollectionDetails.movies": "Films", + "components.NotificationTypeSelector.mediafailed": "Media mislukt", + "components.NotificationTypeSelector.mediaapprovedDescription": "Stuurt een notificatie wanneer media is goedgekeurd.", + "components.NotificationTypeSelector.mediaavailableDescription": "Stuurt een notificatie wanneer media beschikbaar is.", + "components.NotificationTypeSelector.mediaapproved": "Media goedgekeurd", + "components.MovieDetails.view": "Bekijken", + "components.CollectionDetails.request": "Aanvragen", + "i18n.retry": "Opnieuw proberen", + "i18n.requested": "Aangevraagd", + "i18n.failed": "Mislukt", + "i18n.deleting": "Bezig met verwijderen…", + "i18n.close": "Sluiten", + "components.UserList.userdeleteerror": "Er ging iets mis bij het verwijderen van de gebruiker", + "components.UserList.userdeleted": "Gebruiker verwijderd", + "components.UserList.importfromplexerror": "Er is iets misgegaan bij het importeren van gebruikers uit Plex", + "components.UserList.importfromplex": "Gebruikers importeren uit Plex", + "components.UserList.deleteuser": "Gebruiker verwijderen", + "components.UserList.deleteconfirm": "Weet je zeker dat je deze gebruiker wilt verwijderen? Alle bestaande aanvraaggegevens van deze gebruiker zullen worden verwijderd.", + "components.UserEdit.autoapproveSeriesDescription": "Keurt serieverzoeken van deze gebruiker automatisch goed.", + "components.UserEdit.autoapproveSeries": "Serie automatisch goedkeuren", + "components.UserEdit.autoapproveMoviesDescription": "Keurt filmverzoeken van deze gebruiker automatisch goed.", + "components.UserEdit.autoapproveMovies": "Films automatisch goedkeuren", + "components.TvDetails.watchtrailer": "Trailer bekijken", + "components.TvDetails.viewfullcrew": "Bekijk volledige crew", + "components.TvDetails.showtype": "Type serie", + "components.TvDetails.network": "Netwerk", + "components.TvDetails.firstAirDate": "Eerste uitzenddatum", + "components.TvDetails.anime": "Anime", + "components.StatusChacker.reloadOverseerr": "Overseerr herladen", + "components.StatusChacker.newversionavailable": "Nieuwe versie beschikbaar", + "components.StatusChacker.newversionDescription": "Er is een update beschikbaar. Klik op de onderstaande knop om de toepassing opnieuw te laden.", + "components.Settings.toastSettingsSuccess": "Instellingen opgeslagen.", + "components.Settings.toastSettingsFailure": "Er ging iets mis met het opslaan van de instellingen.", + "components.Settings.toastApiKeySuccess": "Nieuwe API Key gegenereerd!", + "components.Settings.toastApiKeyFailure": "Er ging iets mis bij het genereren van een nieuwe API Key.", + "components.Settings.defaultPermissions": "Standaard gebruikersrechten", + "components.Settings.SonarrModal.animerootfolder": "Hoofdmap anime", + "components.Settings.SonarrModal.animequalityprofile": "Kwaliteitsprofiel anime", + "components.Settings.SettingsAbout.timezone": "Tijdzone", + "components.Settings.SettingsAbout.supportoverseerr": "Overseerr steunen", + "components.Settings.SettingsAbout.helppaycoffee": "Help een koffie te betalen", + "components.Settings.SettingsAbout.documentation": "Documentatie", + "components.Settings.SettingsAbout.Releases.viewongithub": "Bekijken op GitHub", + "components.Settings.SettingsAbout.Releases.viewchangelog": "Changelog bekijken", + "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "De wijzigingen in je versie zijn hieronder niet beschikbaar. Kijk naar de GitHub repository voor de laatste updates.", + "components.Settings.SettingsAbout.Releases.runningDevelop": "Je gebruikt een ontwikkelversie van Overseerr!", + "components.Settings.Notifications.validationChatIdRequired": "Je moet een Chat-id opgeven.", + "components.Settings.Notifications.validationBotAPIRequired": "Je moet een Bot API-sleutel verstrekken.", + "components.Settings.Notifications.telegramsettingssaved": "Instellingen Telegramnotificaties opgeslagen!", + "components.Settings.Notifications.telegramsettingsfailed": "De instellingen voor Telegramnotificaties zijn niet opgeslagen.", + "components.Settings.Notifications.ssldisabletip": "SSL moet worden uitgeschakeld op standaard TLS-verbindingen (Poort 587)", + "components.Settings.Notifications.senderName": "Naam afzender", + "components.Settings.Notifications.notificationtypes": "Notificatietypes", + "components.Settings.Notifications.chatId": "Chat Id", + "components.Settings.Notifications.botAPI": "Bot API", + "components.Settings.Notifications.allowselfsigned": "Self-signed certificaten toestaan", + "components.Settings.Notifications.NotificationsSlack.webhookUrlPlaceholder": "Webhook URL", + "components.Settings.Notifications.NotificationsSlack.webhookUrl": "Webhook URL", + "components.Settings.Notifications.NotificationsSlack.validationWebhookUrlRequired": "Je moet een webhook URL ingeven", + "components.Settings.Notifications.NotificationsSlack.testsent": "Testnotificatie verstuurd!", + "components.Settings.Notifications.NotificationsSlack.test": "Test", + "components.Settings.Notifications.NotificationsSlack.saving": "Bezig met opslaan...", + "components.Settings.Notifications.NotificationsSlack.save": "Wijzigingen opslaan", + "components.Settings.Notifications.NotificationsSlack.notificationtypes": "Notificatietypes", + "components.Settings.Notifications.NotificationsSlack.agentenabled": "Agent ingeschakeld", + "components.RequestList.RequestItem.failedretry": "Er is iets misgegaan met het opnieuw proberen van het verzoek", + "components.PersonDetails.crewmember": "Crewlid", + "components.NotificationTypeSelector.mediarequested": "Media aangevraagd", + "components.NotificationTypeSelector.mediaavailable": "Media beschikbaar", + "components.CollectionDetails.requestswillbecreated": "De volgende titels zullen aangevraagd worden:", + "components.CollectionDetails.requestSuccess": "{title} succesvol aangevraagd!", + "components.MovieDetails.watchtrailer": "Trailer bekijken", + "components.MovieDetails.viewfullcrew": "Bekijk volledige crew", + "components.MovieDetails.MovieCrew.fullcrew": "Volledige crew", + "components.CollectionDetails.requestcollection": "Collectie aanvragen", + "components.UserList.importedfromplex": "{userCount, plural, =0 {Geen nieuwe gebruikers} one {# nieuwe gebruiker} other {# nieuwe gebruikers}} geïmporteerd vanuit Plex", + "components.Settings.SettingsAbout.Releases.versionChangelog": "Versie Changelog", + "components.Settings.SettingsAbout.Releases.releases": "Uitgaves", + "components.Settings.Notifications.settinguptelegramDescription": "Om Telegram in te stellen moet je een bot aanmaken en de bot API key gebruiken. Ook ben je het chat ID voor de chat waarheen je notificaties wil sturen nodig. Dit kun je doen door @get_id_bot toe te voegen aan de chat of group chat.", + "components.Settings.Notifications.settinguptelegram": "Telegram notificaties instellen", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Slack notificatie instellingen zijn opgeslagen!", + "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Slack notificatie instellingen konden niet opgeslagen worden.", + "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Om Slack notificaties te gebruiken moet je een Incoming Webhook integratie gebruiken en de onderstaande webhook URL gebruiken.", + "components.Settings.Notifications.NotificationsSlack.settingupslack": "Slack Notificaties Instellen", + "components.NotificationTypeSelector.mediarequestedDescription": "Stuurt een notificatie wanneer nieuwe media is verzocht. Voor bepaalde angenten wordt deze notificatie alleen verstuurd naar beheerders of gebruikers met de \"Beheer Verzoeken\" permissie.", + "components.NotificationTypeSelector.mediafailedDescription": "Stuurt een notificatie wanneer media niet toegevoegd kan worden aan diensten (Radarr/Sonarr). For bepaalde agenten stuurt dit alleen de notificatie naar beheerders of gebruikers met de \"Beheer Verzoeken\" permissie.", + "components.TvDetails.TvCrew.fullseriescrew": "Volledige crew van de serie" } diff --git a/src/i18n/locale/pt_BR.json b/src/i18n/locale/pt_BR.json index 8dda45e9..67e6ec4f 100644 --- a/src/i18n/locale/pt_BR.json +++ b/src/i18n/locale/pt_BR.json @@ -7,7 +7,7 @@ "components.RequestCard.seasons": "Temporadas", "components.RequestCard.requestedby": "Solicitado por {username}", "components.RequestBlock.seasons": "Temporadas", - "components.PlexLoginButton.loginwithplex": "Entrar com", + "components.PlexLoginButton.loginwithplex": "Entrar com Plex", "components.PlexLoginButton.loggingin": "Fazendo login…", "components.PlexLoginButton.loading": "Carregando…", "components.PersonDetails.nobiography": "Biografia não disponível.", @@ -17,14 +17,14 @@ "components.MovieDetails.userrating": "Avaliação do usuário", "components.MovieDetails.unavailable": "Indisponível", "components.MovieDetails.studio": "Estúdio", - "components.MovieDetails.status": "Detalhes", + "components.MovieDetails.status": "Estado", "components.MovieDetails.similarsubtext": "Outros filmes semelhantes a {title}", "components.MovieDetails.similar": "Títulos Semelhantes", "components.MovieDetails.runtime": "{minutes} minutos", "components.MovieDetails.revenue": "Receita", "components.MovieDetails.request": "Solicitar", "components.MovieDetails.releasedate": "Data de Lançamento", - "components.MovieDetails.recommendationssubtext": "Se você gostou {title}, você provavelmente irá gostar…", + "components.MovieDetails.recommendationssubtext": "Se você gostou de {title}, você provavelmente irá gostar…", "components.MovieDetails.recommendations": "Recomendações", "components.MovieDetails.pending": "Pendente", "components.MovieDetails.overviewunavailable": "Sinopse indisponível", @@ -43,12 +43,12 @@ "components.MovieDetails.approve": "Aprovar", "components.MovieDetails.MovieCast.fullcast": "Elenco Completo", "components.Login.signinplex": "Faça login para continuar", - "components.Layout.alphawarning": "Esta é uma versão Alpha. Quase tudo é instável ou não funciona. Por favor reporte os problemas no GitHub do Overseerr!", + "components.Layout.alphawarning": "Essa é uma versão Alpha. Quase tudo é instável ou não funciona. Por favor reporte os problemas no GitHub do Overseerr!", "components.Layout.UserDropdown.signout": "Sair", "components.Layout.Sidebar.users": "Usuários", "components.Layout.Sidebar.settings": "Configurações", "components.Layout.Sidebar.requests": "Solicitações", - "components.Layout.Sidebar.dashboard": "Descobrir", + "components.Layout.Sidebar.dashboard": "Explorar", "components.Layout.SearchInput.searchPlaceholder": "Pesquisar Filmes & Séries", "components.Layout.LanguagePicker.changelanguage": "Alterar Idioma", "components.Discover.upcomingmovies": "Em Breve", @@ -255,25 +255,25 @@ "components.Settings.plexlibrariesDescription": "Bibliotecas que Overseerr irá buscar por títulos. Configure e salve as informações de conexão com Plex e click no botão abaixo se nenhuma biblioteca é listada.", "components.Settings.SettingsAbout.timezone": "Fuso Horário", "components.Settings.SettingsAbout.helppaycoffee": "Ajude a Pagar o Café", - "components.Settings.SettingsAbout.supportoverseerr": "Apoie Overseerr", + "components.Settings.SettingsAbout.supportoverseerr": "Apoie o Overseerr", "components.Settings.SettingsAbout.Releases.viewongithub": "Ver no GitHub", "components.Settings.SettingsAbout.Releases.viewchangelog": "Ver Mudanças", "components.Settings.SettingsAbout.Releases.versionChangelog": "Mudanças Nessa Versão", - "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "As mudanças em sua versão não serão exibidas abaixo. Por favor acesso o repositório do GitHub para saber o que mudou.", + "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "As mudanças em sua versão não serão exibidas abaixo. Por favor acesse o repositório do GitHub para saber o que mudou.", "components.Settings.SettingsAbout.Releases.runningDevelop": "Você está usando uma versão de desenvolvimento do Overseerr!", "components.Settings.SettingsAbout.Releases.releases": "Versões", "components.Settings.SettingsAbout.Releases.releasedataMissing": "Informações de versão faltando. O GitHub está indisponível?", "components.Settings.SettingsAbout.Releases.latestversion": "Última Versão", "components.Settings.SettingsAbout.Releases.currentversion": "Versão Atual", "components.TvDetails.request": "Solicitar", - "components.TvDetails.recommendationssubtext": "Se você gostou {title}, você provavelmente irá gostar…", + "components.TvDetails.recommendationssubtext": "Se você gostou de {title}, você provavelmente irá gostar…", "components.TvDetails.recommendations": "Recomendações", "components.TvDetails.pending": "Pendente", "components.TvDetails.overviewunavailable": "Sinopse indisponível", "components.TvDetails.overview": "Sinopse", "components.TvDetails.originallanguage": "Língua original", "components.TvDetails.network": "Estúdio", - "components.TvDetails.manageModalTitle": "Gerenciar Séries", + "components.TvDetails.manageModalTitle": "Gerenciar Série", "components.TvDetails.manageModalRequests": "Solicitações", "components.TvDetails.manageModalNoRequests": "Nenhuma Solicitação", "components.TvDetails.manageModalClearMedia": "Limpar Todos Dados de Mídia", @@ -286,7 +286,7 @@ "components.TvDetails.approve": "Aprovar", "components.TvDetails.anime": "Animes", "components.TvDetails.TvCast.fullseriescast": "Elenco Completo da Série", - "components.TitleCard.tvshow": "Séries", + "components.TitleCard.tvshow": "Série", "components.TitleCard.movie": "Filme", "components.Slider.noresults": "Nenhum Resultado", "components.Setup.welcome": "Bem-Vindo ao Overseerr", @@ -359,8 +359,8 @@ "components.TvDetails.similar": "Séries Similares", "components.TvDetails.showtype": "Categoria", "components.TvDetails.manageModalClearMediaWarning": "Isso irá remover em definitivo todos dados de mídia, incluindo todas solicitações para esse item. Se este item existir in sua biblioteca do Plex, os dados de mídia serão recriados na próxima sincronia.", - "components.Settings.sonarrSettingsDescription": "Configure sua conexão com Sonarr abaixo. Você pode criar várias, mas apenas duas por vez como padrão (uma para padrão HD, e outra para 4K). Administradores podem alterar qual conexão será usada para novas solicitações.", - "components.Settings.radarrSettingsDescription": "Configure sua conexão com Radarr abaixo. Você pode criar várias, mas apenas duas por vez como padrão (uma para padrão HD, e outra para 4K). Administradores podem alterar qual conexão será usada para novas solicitações.", + "components.Settings.sonarrSettingsDescription": "Configure abaixo sua conexão com Sonarr. Você pode criar várias conexões, mas apenas duas por vez como padrão (uma para padrão HD, e outra para 4K). Administradores podem alterar qual conexão será usada para novas solicitações.", + "components.Settings.radarrSettingsDescription": "Configure abaixo sua conexão com Radarr. Você pode criar várias conexões, mas apenas duas por vez como padrão (uma para padrão HD, e outra para 4K). Administradores podem alterar qual conexão será usada para novas solicitações.", "components.Settings.Notifications.testsent": "Notificação de teste enviada!", "components.Settings.Notifications.test": "Testar", "components.RequestModal.requestseasons": "Solicitar {seasonCount} {seasonCount, plural, one {Temporada} other {Temporadas}}", @@ -372,5 +372,63 @@ "components.UserList.importfromplexerror": "Algo deu errado ao importar usuários do Plex", "components.UserList.importfromplex": "Importar Usuários do Plex", "components.UserList.importedfromplex": "{userCount, plural, =0 {Nenhum novo usuário} one {# novo usuário} other {# novos usuários}} importado(s) do Plex", - "components.Settings.defaultPermissions": "Permissões Padrões de Usúarios" + "components.Settings.defaultPermissions": "Permissões Padrões de Usúarios", + "components.Settings.Notifications.NotificationsSlack.settingupslack": "Configurando Notificações Via Slack", + "components.Settings.Notifications.NotificationsSlack.saving": "Salvando...", + "components.Settings.Notifications.NotificationsSlack.save": "Salvar Mudanças", + "components.Settings.Notifications.NotificationsSlack.agentenabled": "Agente Habilitado", + "components.RequestList.RequestItem.failedretry": "Algo deu errado ao retentar fazer a solicitação", + "components.MovieDetails.watchtrailer": "Assistir Trailer", + "components.MovieDetails.view": "Ver", + "components.CollectionDetails.requestswillbecreated": "Serão feitas solitações para os seguintes títulos:", + "components.CollectionDetails.requesting": "Solicitando…", + "components.CollectionDetails.requestcollection": "Solicitar Coleção", + "components.CollectionDetails.requestSuccess": "{title} solictiado com sucesso!", + "components.CollectionDetails.request": "Solicitar", + "components.CollectionDetails.overviewunavailable": "Sinopse indisponível", + "components.CollectionDetails.overview": "Sinopse", + "components.CollectionDetails.numberofmovies": "Número de Filmes: {count}", + "components.CollectionDetails.movies": "Filmes", + "i18n.requested": "Solicitado", + "i18n.retry": "Tentar Novamente", + "i18n.failed": "Falhou", + "components.UserEdit.autoapproveSeriesDescription": "Concede aprovação automática de séries solicitadas por este usuário.", + "components.UserEdit.autoapproveSeries": "Aprovar Séries Automaticamente", + "components.UserEdit.autoapproveMoviesDescription": "Concede aprovação automática de filmes solicitados por este usuário.", + "components.UserEdit.autoapproveMovies": "Aprovar Filmes Automaticamente", + "components.TvDetails.watchtrailer": "Assisitir Trailer", + "components.TvDetails.firstAirDate": "Primeira Exibição", + "components.Settings.Notifications.validationChatIdRequired": "Você deve prover um ID de Chat.", + "components.Settings.Notifications.validationBotAPIRequired": "Você deve prover a chave de API do Bot.", + "components.Settings.Notifications.senderName": "Nome do Remetente", + "components.Settings.Notifications.telegramsettingssaved": "Configurações de notificação via Telegram salvas!", + "components.Settings.Notifications.telegramsettingsfailed": "Falha ao salvar configurações de notificação via Telegram.", + "components.Settings.Notifications.ssldisabletip": "SSL deve ser desabilitado em conexões TLS padrão (Porta 587)", + "components.Settings.Notifications.settinguptelegramDescription": "Para configurar notificações via Telegram, você precisa criar um bot e obter a chave de API do mesmo. Além disso, você irá precisar do ID de Chat de onde você deseja que o bot envie as notificações. Você pode obter o ID de Chat adicionando @get_id_bot ao chat ou grupo ao qual você deseja obter o ID.", + "components.Settings.Notifications.settinguptelegram": "Configurando notificações via Telegram", + "components.Settings.Notifications.chatId": "ID de Chat", + "components.Settings.Notifications.botAPI": "API do Bot", + "components.Settings.Notifications.allowselfsigned": "Permitir certificados auto-assinados", + "components.Settings.Notifications.NotificationsSlack.webhookUrlPlaceholder": "URL de Webhook", + "components.Settings.Notifications.NotificationsSlack.webhookUrl": "URL de Webhook", + "components.Settings.Notifications.NotificationsSlack.validationWebhookUrlRequired": "Você deve prover uma URL de webhook", + "components.Settings.Notifications.NotificationsSlack.testsent": "Notificação de teste enviada!", + "components.Settings.Notifications.NotificationsSlack.test": "Testar", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Configurações de notificação via Slack salvas!", + "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Falha ao salvar configurações de notificação via Slack.", + "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Para usar notificações via Slack você irá p recisar criar uma integração Webhook de entrada e usar no campo abaixo a URL gerada.", + "components.StatusChacker.reloadOverseerr": "Reiniciar Overseerr", + "components.StatusChacker.newversionDescription": "Uma atualização está disponível. Clique no botão abaixo para reiniciar a aplicação.", + "components.StatusChacker.newversionavailable": "Nova Versão Disponível", + "components.Settings.SettingsAbout.documentation": "Documentação", + "components.Settings.Notifications.notificationtypes": "Tipos de Notificação", + "components.Settings.Notifications.NotificationsSlack.notificationtypes": "Tipos de Notificação", + "components.NotificationTypeSelector.mediarequestedDescription": "Envia uma notificação quando nova mídia é solicitada. Para alguns agentes, somente serão enviadas notificações aos administradores ou usuários com perfil “Gerenciar solicitações”.", + "components.NotificationTypeSelector.mediaavailable": "Mídia Disponível", + "components.NotificationTypeSelector.mediaapproved": "Mídia Aprovada", + "components.NotificationTypeSelector.mediarequested": "Mídia Solicitada", + "components.NotificationTypeSelector.mediafailedDescription": "Envia uma notificação quando houver falha ao adicionar título aos serviços (Radarr/Sonarr). Para alguns agentes, somente serão enviadas notificações aos administradores ou usuários com perfil “Gerenciar solicitações”.", + "components.NotificationTypeSelector.mediafailed": "Solicitação Falhou", + "components.NotificationTypeSelector.mediaavailableDescription": "Envia uma notificação quando o título solicitado estiver disponível.", + "components.NotificationTypeSelector.mediaapprovedDescription": "Envia uma notificação quando a solicitação é aprovada." } diff --git a/src/i18n/locale/sv.json b/src/i18n/locale/sv.json index 1c04c32a..3ebdd160 100644 --- a/src/i18n/locale/sv.json +++ b/src/i18n/locale/sv.json @@ -364,5 +364,28 @@ "components.Settings.SettingsAbout.Releases.currentversion": "Aktuell Version", "components.Settings.Notifications.testsent": "Test-notifikation skickad!", "components.Settings.Notifications.test": "Testa", - "components.UserList.importfromplex": "Importera användare från Plex" + "components.UserList.importfromplex": "Importera användare från Plex", + "components.UserList.importfromplexerror": "Någonting gick fel vid importen av användare från Plex", + "components.UserEdit.autoapproveSeries": "Automatiskt Godkännande av TV Serier", + "components.UserEdit.autoapproveMovies": "Automatiskt Godkännande av Filmer", + "components.TvDetails.watchtrailer": "Kolla Trailer", + "components.Settings.Notifications.allowselfsigned": "Tillåt Självsignerade Certifikat", + "components.Settings.Notifications.NotificationsSlack.webhookUrl": "Webhook URL", + "components.Settings.Notifications.NotificationsSlack.validationWebhookUrlRequired": "Du måste lägga in en webhook URL", + "components.Settings.Notifications.NotificationsSlack.testsent": "Testnotifikation skickad!", + "components.Settings.Notifications.NotificationsSlack.test": "Test", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Notiferingsinställningar för Slack sparade!", + "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Notifieringsinställningar för Slack misslyckades att sparas.", + "components.Settings.Notifications.NotificationsSlack.settingupslack": "Ställa in Slack Notifikationer", + "components.Settings.Notifications.NotificationsSlack.saving": "Sparar...", + "components.Settings.Notifications.NotificationsSlack.save": "Spara Ändringar", + "components.Settings.Notifications.NotificationsSlack.agentenabled": "Aktiverad", + "components.MovieDetails.watchtrailer": "Kolla Trailer", + "components.CollectionDetails.requesting": "Skickar förfrågan…", + "components.CollectionDetails.requestcollection": "Begär Kollektion", + "components.CollectionDetails.request": "Begär", + "components.CollectionDetails.overviewunavailable": "Översikt ej tillgänglig", + "components.CollectionDetails.overview": "Översikt", + "components.CollectionDetails.numberofmovies": "Antal Filmer: {count}", + "components.CollectionDetails.movies": "Filmer" } From effc80977a4ed732092254248f82363e52233171 Mon Sep 17 00:00:00 2001 From: sct Date: Mon, 4 Jan 2021 15:21:46 +0000 Subject: [PATCH 2/9] fix(frontend): adjust titlecard badge styling this commit aligns the badges, removes the border from the availability badge (replaces it with a light shadow) and also adds a new animation to the titlecard --- src/components/Slider/index.tsx | 2 +- src/components/TitleCard/index.tsx | 122 +++++++++++++++-------------- 2 files changed, 63 insertions(+), 61 deletions(-) diff --git a/src/components/Slider/index.tsx b/src/components/Slider/index.tsx index 743894df..03923225 100644 --- a/src/components/Slider/index.tsx +++ b/src/components/Slider/index.tsx @@ -207,7 +207,7 @@ const Slider: React.FC = ({
diff --git a/src/components/TitleCard/index.tsx b/src/components/TitleCard/index.tsx index 8e5f21e5..358ceab1 100644 --- a/src/components/TitleCard/index.tsx +++ b/src/components/TitleCard/index.tsx @@ -76,7 +76,7 @@ const TitleCard: React.FC = ({ onCancel={closeModal} />
= ({ role="link" tabIndex={0} > -
-
-
- {mediaType === 'movie' - ? intl.formatMessage(messages.movie) - : intl.formatMessage(messages.tvshow)} +
+
+
+
+ {mediaType === 'movie' + ? intl.formatMessage(messages.movie) + : intl.formatMessage(messages.tvshow)} +
+
+
+ {(currentStatus === MediaStatus.AVAILABLE || + currentStatus === MediaStatus.PARTIALLY_AVAILABLE) && ( +
+ + + +
+ )} + {currentStatus === MediaStatus.PENDING && ( +
+ + + +
+ )} + {currentStatus === MediaStatus.PROCESSING && ( +
+ + + +
+ )}
-
-
- {(currentStatus === MediaStatus.AVAILABLE || - currentStatus === MediaStatus.PARTIALLY_AVAILABLE) && ( -
- - - -
- )} - {currentStatus === MediaStatus.PENDING && ( -
- - - -
- )} - {currentStatus === MediaStatus.PROCESSING && ( -
- - - -
- )}
Date: Mon, 4 Jan 2021 15:33:07 +0000 Subject: [PATCH 3/9] fix(frontend): only animate titlecard when showDetail is true --- src/components/TitleCard/index.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/TitleCard/index.tsx b/src/components/TitleCard/index.tsx index 358ceab1..c8588f47 100644 --- a/src/components/TitleCard/index.tsx +++ b/src/components/TitleCard/index.tsx @@ -76,7 +76,9 @@ const TitleCard: React.FC = ({ onCancel={closeModal} />
Date: Mon, 4 Jan 2021 16:09:09 +0000 Subject: [PATCH 4/9] fix(frontend): use hardware acceleration for titlecard scale --- src/components/TitleCard/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/TitleCard/index.tsx b/src/components/TitleCard/index.tsx index c8588f47..437d8e43 100644 --- a/src/components/TitleCard/index.tsx +++ b/src/components/TitleCard/index.tsx @@ -76,7 +76,7 @@ const TitleCard: React.FC = ({ onCancel={closeModal} />
Date: Mon, 4 Jan 2021 16:40:39 +0000 Subject: [PATCH 5/9] fix(frontend): apply same titlecard hover effect to personcard --- src/components/PersonCard/index.tsx | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/components/PersonCard/index.tsx b/src/components/PersonCard/index.tsx index 592ab445..ce446920 100644 --- a/src/components/PersonCard/index.tsx +++ b/src/components/PersonCard/index.tsx @@ -1,5 +1,5 @@ import Link from 'next/link'; -import React from 'react'; +import React, { useState } from 'react'; interface PersonCardProps { personId: number; @@ -16,13 +16,30 @@ const PersonCard: React.FC = ({ profilePath, canExpand = false, }) => { + const [isHovered, setHovered] = useState(false); + return ( - + { + setHovered(true); + }} + onMouseLeave={() => setHovered(false)} + onKeyDown={(e) => { + if (e.key === 'Enter') { + setHovered(true); + } + }} + role="link" + tabIndex={0} + >
From ee5d0181fc9a673b27aefd1d09b0a78c3d2e4f55 Mon Sep 17 00:00:00 2001 From: Jakob Ankarhem Date: Tue, 5 Jan 2021 05:19:25 +0100 Subject: [PATCH 6/9] feat(notifications): add pushover integration (#574) * feat(notifications): add pushover integration * refactor(pushover): group i18n translations --- overseerr-api.yml | 66 +++++ server/index.ts | 2 + server/lib/notifications/agents/pushover.ts | 122 +++++++++ server/lib/settings.ts | 20 ++ server/routes/settings.ts | 35 +++ src/assets/extlogos/pushover.svg | 6 + .../NotificationsPushover/index.tsx | 257 ++++++++++++++++++ .../Settings/SettingsNotifications.tsx | 12 + src/i18n/locale/en.json | 21 ++ src/pages/settings/notifications/pushover.tsx | 17 ++ 10 files changed, 558 insertions(+) create mode 100644 server/lib/notifications/agents/pushover.ts create mode 100644 src/assets/extlogos/pushover.svg create mode 100644 src/components/Settings/Notifications/NotificationsPushover/index.tsx create mode 100644 src/pages/settings/notifications/pushover.tsx diff --git a/overseerr-api.yml b/overseerr-api.yml index dccd60ba..3dd8d31e 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -871,6 +871,26 @@ components: type: string chatId: type: string + PushoverSettings: + type: object + properties: + enabled: + type: boolean + example: false + types: + type: number + example: 2 + options: + type: object + properties: + accessToken: + type: string + userToken: + type: string + priority: + type: number + sound: + type: string NotificationEmailSettings: type: object properties: @@ -1720,6 +1740,52 @@ paths: responses: '204': description: Test notification attempted + /settings/notifications/pushover: + get: + summary: Return current pushover notification settings + description: Returns current pushover notification settings in JSON format + tags: + - settings + responses: + '200': + description: Returned pushover settings + content: + application/json: + schema: + $ref: '#/components/schemas/PushoverSettings' + post: + summary: Update pushover notification settings + description: Update current pushover notification settings with provided values + tags: + - settings + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PushoverSettings' + responses: + '200': + description: 'Values were sucessfully updated' + content: + application/json: + schema: + $ref: '#/components/schemas/PushoverSettings' + /settings/notifications/pushover/test: + post: + summary: Test the provided pushover settings + description: Sends a test notification to the pushover agent + tags: + - settings + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PushoverSettings' + responses: + '204': + description: Test notification attempted /settings/notifications/slack: get: summary: Return current slack notification settings diff --git a/server/index.ts b/server/index.ts index eaf36833..32b14447 100644 --- a/server/index.ts +++ b/server/index.ts @@ -20,6 +20,7 @@ import EmailAgent from './lib/notifications/agents/email'; import TelegramAgent from './lib/notifications/agents/telegram'; import { getAppVersion } from './utils/appVersion'; import SlackAgent from './lib/notifications/agents/slack'; +import PushoverAgent from './lib/notifications/agents/pushover'; const API_SPEC_PATH = path.join(__dirname, '../overseerr-api.yml'); @@ -49,6 +50,7 @@ app new EmailAgent(), new SlackAgent(), new TelegramAgent(), + new PushoverAgent(), ]); // Start Jobs diff --git a/server/lib/notifications/agents/pushover.ts b/server/lib/notifications/agents/pushover.ts new file mode 100644 index 00000000..072352ab --- /dev/null +++ b/server/lib/notifications/agents/pushover.ts @@ -0,0 +1,122 @@ +import axios from 'axios'; +import { hasNotificationType, Notification } from '..'; +import logger from '../../../logger'; +import { getSettings, NotificationAgentPushover } from '../../settings'; +import { BaseAgent, NotificationAgent, NotificationPayload } from './agent'; + +interface PushoverPayload { + token: string; + user: string; + title: string; + message: string; + html: number; +} + +class PushoverAgent + extends BaseAgent + implements NotificationAgent { + protected getSettings(): NotificationAgentPushover { + if (this.settings) { + return this.settings; + } + + const settings = getSettings(); + + return settings.notifications.agents.pushover; + } + + public shouldSend(type: Notification): boolean { + if ( + this.getSettings().enabled && + this.getSettings().options.accessToken && + this.getSettings().options.userToken && + hasNotificationType(type, this.getSettings().types) + ) { + return true; + } + + return false; + } + + private constructMessageDetails( + type: Notification, + payload: NotificationPayload + ): { title: string; message: string } { + const settings = getSettings(); + let messageTitle = ''; + let message = ''; + + const title = payload.subject; + const plot = payload.message; + const user = payload.notifyUser.username; + + switch (type) { + case Notification.MEDIA_PENDING: + messageTitle = 'New Request'; + message += `${title}\n\n`; + message += `${plot}\n\n`; + message += `Requested By\n${user}\n\n`; + message += `Status\nPending Approval\n`; + break; + case Notification.MEDIA_APPROVED: + messageTitle = 'Request Approved'; + message += `${title}\n\n`; + message += `${plot}\n\n`; + message += `Requested By\n${user}\n\n`; + message += `Status\nProcessing Request\n`; + break; + case Notification.MEDIA_AVAILABLE: + messageTitle = 'Now available!'; + message += `${title}\n\n`; + message += `${plot}\n\n`; + message += `Requested By\n${user}\n\n`; + message += `Status\nAvailable\n`; + break; + case Notification.TEST_NOTIFICATION: + messageTitle = 'Test Notification'; + message += `${title}\n\n`; + message += `${plot}\n\n`; + message += `Requested By\n${user}\n`; + break; + } + + if (settings.main.applicationUrl && payload.media) { + const actionUrl = `${settings.main.applicationUrl}/${payload.media.mediaType}/${payload.media.tmdbId}`; + message += `Open in Overseerr`; + } + + return { title: messageTitle, message }; + } + + public async send( + type: Notification, + payload: NotificationPayload + ): Promise { + logger.debug('Sending Pushover notification', { label: 'Notifications' }); + try { + const endpoint = 'https://api.pushover.net/1/messages.json'; + + const { accessToken, userToken } = this.getSettings().options; + + const { title, message } = this.constructMessageDetails(type, payload); + + await axios.post(endpoint, { + token: accessToken, + user: userToken, + title: title, + message: message, + html: 1, + } as PushoverPayload); + + return true; + } catch (e) { + logger.error('Error sending Pushover notification', { + label: 'Notifications', + message: e.message, + }); + return false; + } + } +} + +export default PushoverAgent; diff --git a/server/lib/settings.ts b/server/lib/settings.ts index 75d3c72f..cea7774a 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -92,11 +92,21 @@ export interface NotificationAgentTelegram extends NotificationAgentConfig { }; } +export interface NotificationAgentPushover extends NotificationAgentConfig { + options: { + accessToken: string; + userToken: string; + priority: number; + sound: string; + }; +} + interface NotificationAgents { email: NotificationAgentEmail; discord: NotificationAgentDiscord; slack: NotificationAgentSlack; telegram: NotificationAgentTelegram; + pushover: NotificationAgentPushover; } interface NotificationSettings { @@ -174,6 +184,16 @@ class Settings { chatId: '', }, }, + pushover: { + enabled: false, + types: 0, + options: { + accessToken: '', + userToken: '', + priority: 0, + sound: '', + }, + }, }, }, }; diff --git a/server/routes/settings.ts b/server/routes/settings.ts index ba9b91bc..91d196e1 100644 --- a/server/routes/settings.ts +++ b/server/routes/settings.ts @@ -26,6 +26,7 @@ import DiscordAgent from '../lib/notifications/agents/discord'; import EmailAgent from '../lib/notifications/agents/email'; import SlackAgent from '../lib/notifications/agents/slack'; import TelegramAgent from '../lib/notifications/agents/telegram'; +import PushoverAgent from '../lib/notifications/agents/pushover'; const settingsRoutes = Router(); @@ -538,6 +539,40 @@ settingsRoutes.post('/notifications/telegram/test', (req, res, next) => { return res.status(204).send(); }); +settingsRoutes.get('/notifications/pushover', (_req, res) => { + const settings = getSettings(); + + res.status(200).json(settings.notifications.agents.pushover); +}); + +settingsRoutes.post('/notifications/pushover', (req, res) => { + const settings = getSettings(); + + settings.notifications.agents.pushover = req.body; + settings.save(); + + res.status(200).json(settings.notifications.agents.pushover); +}); + +settingsRoutes.post('/notifications/pushover/test', (req, res, next) => { + if (!req.user) { + return next({ + status: 500, + message: 'User information missing from request', + }); + } + + const pushoverAgent = new PushoverAgent(req.body); + pushoverAgent.send(Notification.TEST_NOTIFICATION, { + notifyUser: req.user, + subject: 'Test Notification', + message: + 'This is a test notification! Check check, 1, 2, 3. Are we coming in clear?', + }); + + return res.status(204).send(); +}); + settingsRoutes.get('/notifications/email', (_req, res) => { const settings = getSettings(); diff --git a/src/assets/extlogos/pushover.svg b/src/assets/extlogos/pushover.svg new file mode 100644 index 00000000..e3d7161f --- /dev/null +++ b/src/assets/extlogos/pushover.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/components/Settings/Notifications/NotificationsPushover/index.tsx b/src/components/Settings/Notifications/NotificationsPushover/index.tsx new file mode 100644 index 00000000..9d2c8d86 --- /dev/null +++ b/src/components/Settings/Notifications/NotificationsPushover/index.tsx @@ -0,0 +1,257 @@ +import React from 'react'; +import { Field, Form, Formik } from 'formik'; +import useSWR from 'swr'; +import LoadingSpinner from '../../../Common/LoadingSpinner'; +import Button from '../../../Common/Button'; +import { defineMessages, useIntl } from 'react-intl'; +import axios from 'axios'; +import * as Yup from 'yup'; +import { useToasts } from 'react-toast-notifications'; +import Alert from '../../../Common/Alert'; +import NotificationTypeSelector from '../../../NotificationTypeSelector'; + +const messages = defineMessages({ + save: 'Save Changes', + saving: 'Saving...', + agentenabled: 'Agent Enabled', + accessToken: 'Access Token', + userToken: 'User Token', + validationAccessTokenRequired: 'You must provide an access token.', + validationUserTokenRequired: 'You must provide a user token.', + pushoversettingssaved: 'Pushover notification settings saved!', + pushoversettingsfailed: 'Pushover notification settings failed to save.', + testsent: 'Test notification sent!', + test: 'Test', + settinguppushover: 'Setting up Pushover Notifications', + settinguppushoverDescription: + 'To setup Pushover you need to register an application and get the access token.\ + When setting up the application you can use one of the icons in the public folder on github.\ + You also need the pushover user token which can be found on the start page when you log in.', + notificationtypes: 'Notification Types', +}); + +const NotificationsPushover: React.FC = () => { + const intl = useIntl(); + const { addToast } = useToasts(); + const { data, error, revalidate } = useSWR( + '/api/v1/settings/notifications/pushover' + ); + + const NotificationsPushoverSchema = Yup.object().shape({ + accessToken: Yup.string().required( + intl.formatMessage(messages.validationAccessTokenRequired) + ), + userToken: Yup.string().required( + intl.formatMessage(messages.validationUserTokenRequired) + ), + }); + + if (!data && !error) { + return ; + } + + return ( + { + try { + await axios.post('/api/v1/settings/notifications/pushover', { + enabled: values.enabled, + types: values.types, + options: { + accessToken: values.accessToken, + userToken: values.userToken, + }, + }); + addToast(intl.formatMessage(messages.pushoversettingssaved), { + appearance: 'success', + autoDismiss: true, + }); + } catch (e) { + addToast(intl.formatMessage(messages.pushoversettingsfailed), { + appearance: 'error', + autoDismiss: true, + }); + } finally { + revalidate(); + } + }} + > + {({ errors, touched, isSubmitting, values, isValid, setFieldValue }) => { + const testSettings = async () => { + await axios.post('/api/v1/settings/notifications/pushover/test', { + enabled: true, + types: values.types, + options: { + accessToken: values.accessToken, + userToken: values.userToken, + }, + }); + + addToast(intl.formatMessage(messages.testsent), { + appearance: 'info', + autoDismiss: true, + }); + }; + + return ( + <> + + {intl.formatMessage(messages.settinguppushoverDescription, { + RegisterApplicationLink: function RegisterApplicationLink(msg) { + return ( + + {msg} + + ); + }, + IconLink: function IconLink(msg) { + return ( + + {msg} + + ); + }, + })} + +
+
+ +
+ +
+
+
+ +
+
+ +
+ {errors.accessToken && touched.accessToken && ( +
+ {errors.accessToken} +
+ )} +
+ +
+
+ +
+ {errors.userToken && touched.userToken && ( +
{errors.userToken}
+ )} +
+
+
+
+
+
+
+ {intl.formatMessage(messages.notificationtypes)} +
+
+
+
+ + setFieldValue('types', newTypes) + } + /> +
+
+
+
+
+
+
+ + + + + + +
+
+
+ + ); + }} +
+ ); +}; + +export default NotificationsPushover; diff --git a/src/components/Settings/SettingsNotifications.tsx b/src/components/Settings/SettingsNotifications.tsx index 28af73f8..e873ecf8 100644 --- a/src/components/Settings/SettingsNotifications.tsx +++ b/src/components/Settings/SettingsNotifications.tsx @@ -5,6 +5,7 @@ import { defineMessages, useIntl } from 'react-intl'; import DiscordLogo from '../../assets/extlogos/discord_white.svg'; import SlackLogo from '../../assets/extlogos/slack.svg'; import TelegramLogo from '../../assets/extlogos/telegram.svg'; +import PushoverLogo from '../../assets/extlogos/pushover.svg'; const messages = defineMessages({ notificationsettings: 'Notification Settings', @@ -77,6 +78,17 @@ const settingsRoutes: SettingsRoute[] = [ route: '/settings/notifications/telegram', regex: /^\/settings\/notifications\/telegram/, }, + { + text: 'Pushover', + content: ( + + + Pushover + + ), + route: '/settings/notifications/pushover', + regex: /^\/settings\/notifications\/pushover/, + }, ]; const SettingsNotifications: React.FC = ({ children }) => { diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index 30c3af47..2dc11495 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -83,13 +83,20 @@ "components.RequestList.RequestItem.notavailable": "N/A", "components.RequestList.RequestItem.requestedby": "Requested by {username}", "components.RequestList.RequestItem.seasons": "Seasons", + "components.RequestList.filterAll": "All", + "components.RequestList.filterApproved": "Approved", + "components.RequestList.filterPending": "Pending", "components.RequestList.mediaInfo": "Media Info", "components.RequestList.modifiedBy": "Last Modified By", "components.RequestList.next": "Next", + "components.RequestList.noresults": "No Results.", "components.RequestList.previous": "Previous", "components.RequestList.requestedAt": "Requested At", "components.RequestList.requests": "Requests", + "components.RequestList.showallrequests": "Show All Requests", "components.RequestList.showingresults": "Showing {from} to {to} of {total} results", + "components.RequestList.sortAdded": "Request Date", + "components.RequestList.sortModified": "Last Modified", "components.RequestList.status": "Status", "components.RequestModal.cancel": "Cancel Request", "components.RequestModal.cancelling": "Cancelling…", @@ -112,6 +119,20 @@ "components.RequestModal.selectseason": "Select season(s)", "components.RequestModal.status": "Status", "components.Search.searchresults": "Search Results", + "components.Settings.Notifications.NotificationsPushover.accessToken": "Access Token", + "components.Settings.Notifications.NotificationsPushover.agentenabled": "Agent Enabled", + "components.Settings.Notifications.NotificationsPushover.notificationtypes": "Notification Types", + "components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Pushover notification settings failed to save.", + "components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Pushover notification settings saved!", + "components.Settings.Notifications.NotificationsPushover.save": "Save Changes", + "components.Settings.Notifications.NotificationsPushover.saving": "Saving...", + "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Setting up Pushover Notifications", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "To setup Pushover you need to register an application and get the access token. When setting up the application you can use one of the icons in the public folder on github. You also need the pushover user token which can be found on the start page when you log in.", + "components.Settings.Notifications.NotificationsPushover.test": "Test", + "components.Settings.Notifications.NotificationsPushover.testsent": "Test notification sent!", + "components.Settings.Notifications.NotificationsPushover.userToken": "User Token", + "components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "You must provide an access token.", + "components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "You must provide a user token.", "components.Settings.Notifications.NotificationsSlack.agentenabled": "Agent Enabled", "components.Settings.Notifications.NotificationsSlack.notificationtypes": "Notification Types", "components.Settings.Notifications.NotificationsSlack.save": "Save Changes", diff --git a/src/pages/settings/notifications/pushover.tsx b/src/pages/settings/notifications/pushover.tsx new file mode 100644 index 00000000..69b6f945 --- /dev/null +++ b/src/pages/settings/notifications/pushover.tsx @@ -0,0 +1,17 @@ +import { NextPage } from 'next'; +import React from 'react'; +import NotificationsPushover from '../../../components/Settings/Notifications/NotificationsPushover'; +import SettingsLayout from '../../../components/Settings/SettingsLayout'; +import SettingsNotifications from '../../../components/Settings/SettingsNotifications'; + +const NotificationsPage: NextPage = () => { + return ( + + + + + + ); +}; + +export default NotificationsPage; From e2c2172ac641de58ba6bbd5efd31c7a6e8287924 Mon Sep 17 00:00:00 2001 From: sct Date: Tue, 5 Jan 2021 15:17:46 +0000 Subject: [PATCH 7/9] build(deps): batch update dependencies --- package.json | 34 +-- yarn.lock | 575 ++++++++++++++++++++++++++++----------------------- 2 files changed, 328 insertions(+), 281 deletions(-) diff --git a/package.json b/package.json index 093f314d..5b6fa8c6 100644 --- a/package.json +++ b/package.json @@ -18,19 +18,19 @@ "license": "MIT", "dependencies": { "@svgr/webpack": "^5.5.0", - "axios": "^0.21.0", + "axios": "^0.21.1", "body-parser": "^1.19.0", "bowser": "^2.11.0", "connect-typeorm": "^1.1.4", "cookie-parser": "^1.4.5", "email-templates": "^8.0.2", "express": "^4.17.1", - "express-openapi-validator": "^4.9.4", + "express-openapi-validator": "^4.10.2", "express-session": "^1.17.1", "formik": "^2.2.6", "intl": "^1.2.5", "lodash": "^4.17.20", - "next": "^10.0.3", + "next": "^10.0.4", "node-schedule": "^1.3.2", "nodemailer": "^6.4.17", "nookies": "^2.5.0", @@ -39,16 +39,16 @@ "react": "17.0.1", "react-dom": "17.0.1", "react-intersection-observer": "^8.31.0", - "react-intl": "^5.10.9", + "react-intl": "^5.10.11", "react-markdown": "^5.0.3", "react-spring": "^8.0.27", "react-toast-notifications": "^2.4.0", "react-transition-group": "^4.4.1", "react-truncate-markup": "^5.0.1", - "react-use-clipboard": "1.0.2", + "react-use-clipboard": "1.0.7", "reflect-metadata": "^0.1.13", "sqlite3": "^5.0.0", - "swagger-ui-express": "^4.1.5", + "swagger-ui-express": "^4.1.6", "swr": "^0.3.11", "typeorm": "^0.2.29", "uuid": "^8.3.2", @@ -71,11 +71,11 @@ "@tailwindcss/typography": "^0.3.1", "@types/body-parser": "^1.19.0", "@types/cookie-parser": "^1.4.2", - "@types/email-templates": "^7.1.0", + "@types/email-templates": "^8.0.0", "@types/express": "^4.17.9", "@types/express-session": "^1.17.0", - "@types/lodash": "^4.14.165", - "@types/node": "^14.14.14", + "@types/lodash": "^4.14.167", + "@types/node": "^14.14.20", "@types/node-schedule": "^1.3.1", "@types/nodemailer": "^6.4.0", "@types/react": "^17.0.0", @@ -87,20 +87,20 @@ "@types/xml2js": "^0.4.7", "@types/yamljs": "^0.2.31", "@types/yup": "^0.29.11", - "@typescript-eslint/eslint-plugin": "^4.10.0", - "@typescript-eslint/parser": "^4.10.0", + "@typescript-eslint/eslint-plugin": "^4.12.0", + "@typescript-eslint/parser": "^4.12.0", "autoprefixer": "^9", - "babel-plugin-react-intl": "^8.2.22", + "babel-plugin-react-intl": "^8.2.25", "babel-plugin-react-intl-auto": "^3.3.0", "commitizen": "^4.2.2", "copyfiles": "^2.4.1", "cz-conventional-changelog": "^3.3.0", - "eslint": "^7.16.0", + "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", - "eslint-plugin-formatjs": "^2.9.11", + "eslint-plugin-formatjs": "^2.10.2", "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-prettier": "^3.3.0", - "eslint-plugin-react": "^7.21.5", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-react": "^7.22.0", "eslint-plugin-react-hooks": "^4.2.0", "extract-react-intl-messages": "^4.1.1", "husky": "^4.3.6", @@ -109,7 +109,7 @@ "postcss": "^7", "postcss-preset-env": "^6.7.0", "prettier": "^2.2.1", - "semantic-release": "^17.3.0", + "semantic-release": "^17.3.1", "semantic-release-docker": "^2.2.0", "tailwindcss": "npm:@tailwindcss/postcss7-compat", "ts-node": "^9.1.1", diff --git a/yarn.lock b/yarn.lock index a941d705..28cb1d09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,56 +2,56 @@ # yarn lockfile v1 -"@ampproject/toolbox-core@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-core/-/toolbox-core-2.6.0.tgz#9824d5f133d82106a9bf0774920843c69fa5c869" - integrity sha512-sDMnHj8WaX3tqJS5VsIHkeW98nq5WQ0C9RoFc1PPS3rmYIlS0vhAfHbrjJw6wtuxBTQFxccje+Ew+2OJ2D15kA== +"@ampproject/toolbox-core@2.7.4", "@ampproject/toolbox-core@^2.7.1-alpha.0": + version "2.7.4" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-core/-/toolbox-core-2.7.4.tgz#8355136f16301458ce942acf6c55952c9a415627" + integrity sha512-qpBhcS4urB7IKc+jx2kksN7BuvvwCo7Y3IstapWo+EW+COY5EYAUwb2pil37v3TsaqHKgX//NloFP1SKzGZAnw== dependencies: - cross-fetch "3.0.5" + cross-fetch "3.0.6" lru-cache "6.0.0" -"@ampproject/toolbox-optimizer@2.7.0-alpha.1": - version "2.7.0-alpha.1" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.7.0-alpha.1.tgz#ab4c386645f991e5da5a9d2967ed2bb734a9f6c4" - integrity sha512-2wTvOyM6GP6FrYQzxSQCg43STo1jMRGeDKa6YUkYXYH9fm9Wbt2wTRx+ajjb48JQ6WwUnGwga1MhQhVFzRQ+wQ== +"@ampproject/toolbox-optimizer@2.7.1-alpha.0": + version "2.7.1-alpha.0" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.7.1-alpha.0.tgz#1571dcd02608223ff68f6b7223102a123e381197" + integrity sha512-WGPZKVQvHgNYJk1XVJCCmY+NVGTGJtvn0OALDyiegN4FJWOcilQUhCIcjMkZN59u1flz/u+sEKccM5qsROqVyg== dependencies: - "@ampproject/toolbox-core" "^2.6.0" - "@ampproject/toolbox-runtime-version" "^2.7.0-alpha.1" + "@ampproject/toolbox-core" "^2.7.1-alpha.0" + "@ampproject/toolbox-runtime-version" "^2.7.1-alpha.0" "@ampproject/toolbox-script-csp" "^2.5.4" - "@ampproject/toolbox-validator-rules" "^2.5.4" + "@ampproject/toolbox-validator-rules" "^2.7.1-alpha.0" abort-controller "3.0.0" - cross-fetch "3.0.5" - cssnano-simple "1.2.0" - dom-serializer "1.0.1" - domhandler "3.0.0" - domutils "2.1.0" - htmlparser2 "4.1.0" + cross-fetch "3.0.6" + cssnano-simple "1.2.1" + dom-serializer "1.1.0" + domhandler "3.3.0" + domutils "2.4.2" + htmlparser2 "5.0.1" https-proxy-agent "5.0.0" lru-cache "6.0.0" - node-fetch "2.6.0" + node-fetch "2.6.1" normalize-html-whitespace "1.0.0" postcss "7.0.32" postcss-safe-parser "4.0.2" - terser "5.1.0" + terser "5.5.1" -"@ampproject/toolbox-runtime-version@^2.7.0-alpha.1": - version "2.7.0-alpha.1" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.7.0-alpha.1.tgz#2ecd603e1fc986f21048947639e99b5706e01ec3" - integrity sha512-JruvO4RfaC/piKOY/2w6vuasNjdrHnb+xvmQTl4zBBdMsDooohZKsN9jv9YiKIdpny4MzLt1ce497840vJJq+g== +"@ampproject/toolbox-runtime-version@^2.7.1-alpha.0": + version "2.7.4" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.7.4.tgz#f49da0dab122101ef75ed3caed3a0142487b73e1" + integrity sha512-SAdOUOERp42thVNWaBJlnFvFVvnacMVnz5z9LyUZHSnoL1EqrAW5Sz5jv+Ly+gkA8NYsEaUxAdSCBAzE9Uzb4Q== dependencies: - "@ampproject/toolbox-core" "^2.6.0" + "@ampproject/toolbox-core" "2.7.4" "@ampproject/toolbox-script-csp@^2.5.4": version "2.5.4" resolved "https://registry.yarnpkg.com/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.5.4.tgz#d8b7b91a678ae8f263cb36d9b74e441b7d633aad" integrity sha512-+knTYetI5nWllRZ9wFcj7mYxelkiiFVRAAW/hl0ad8EnKHMH82tRlk40CapEnUHhp6Er5sCYkumQ8dngs3Q4zQ== -"@ampproject/toolbox-validator-rules@^2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.5.4.tgz#7dee3a3edceefea459d060571db8cc6e7bbf0dd6" - integrity sha512-bS7uF+h0s5aiklc/iRaujiSsiladOsZBLrJ6QImJDXvubCAQtvE7om7ShlGSXixkMAO0OVMDWyuwLlEy8V1Ing== +"@ampproject/toolbox-validator-rules@^2.7.1-alpha.0": + version "2.7.4" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.7.4.tgz#a58b5eca723f6c3557ac83b696de0247f5f03ce4" + integrity sha512-z3JRcpIZLLdVC9XVe7YTZuB3a/eR9s2SjElYB9AWRdyJyL5Jt7+pGNv4Uwh1uHVoBXsWEVQzNOWSNtrO3mSwZA== dependencies: - cross-fetch "3.0.5" + cross-fetch "3.0.6" "@apidevtools/json-schema-ref-parser@9.0.6": version "9.0.6" @@ -1365,26 +1365,26 @@ dependencies: tslib "^2.0.1" -"@formatjs/intl-datetimeformat@3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@formatjs/intl-datetimeformat/-/intl-datetimeformat-3.2.1.tgz#f20408cda0e932f2234ecb42fca1e90d2e75250d" - integrity sha512-teeUgUoieP0JjZYPWjJV72CoPQoukCMKGW1YUu00+TaHzZBNqVgPCdFJo2vgl1jKccOAT3VT79BHNEsR9DsBBQ== +"@formatjs/intl-datetimeformat@3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-datetimeformat/-/intl-datetimeformat-3.2.2.tgz#c1533cbff225ff835e9d11954fb3c77ccb68045f" + integrity sha512-wIqe4dPzbYB6SrJWNPKBnXkPj1pR68qtGCzHkPo8JGRpWQcVpHh3Cigw1cQs2I9M1F9dOtFHQP6gi+xsb1kAiA== dependencies: "@formatjs/ecma402-abstract" "1.5.0" tslib "^2.0.1" -"@formatjs/intl-displaynames@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-4.0.2.tgz#31212238e7b07daa41fbac03186c532cbbb6c473" - integrity sha512-rOlDcFzr6UFYqH7BKI9vlpDC5MpTT48dsPxO9I6yciDlOb1IyqvIgUs+xsuNOj96akDCDrgwocrdJ1VEDO0Ntw== +"@formatjs/intl-displaynames@4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-4.0.3.tgz#af683f455b4b28b41e45bdeee3121e202cf38a03" + integrity sha512-wNJZzIzlA88oyHZAFdAnLKV/srtIrU//md9SU2Bo0LKXKIukz/g5LmJlyhq6uF1oYoJzVvvTxoVXscBJmKcJmg== dependencies: "@formatjs/ecma402-abstract" "1.5.0" tslib "^2.0.1" -"@formatjs/intl-listformat@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-5.0.2.tgz#090055c437bf7176a7268a285f5d06fc7e963280" - integrity sha512-Y+7/Dw3oe29kT4afbw2KCSzast6M04ibidBMMPqjxOHHxan1LeL0KQsY/iRHTgTAcfiSIqZnneJZjZi4MzjLJg== +"@formatjs/intl-listformat@5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-5.0.3.tgz#f56a0d28d0a78bff489513eabef980a966a570f9" + integrity sha512-IaW428RI5RpwXr/+doYT1H4ZHL3mYLU3nzR7ZaTkk5dBi1PKKGk1sDwymEzVxyrELT0WHhqhqLKdLjXAqxCz9g== dependencies: "@formatjs/ecma402-abstract" "1.5.0" tslib "^2.0.1" @@ -1396,35 +1396,44 @@ dependencies: "@formatjs/ecma402-abstract" "^1.2.1" -"@formatjs/intl-relativetimeformat@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.0.1.tgz#9fcad0dba673cf0e21b4b9f83dab22ca6b482901" - integrity sha512-yMCtrDeQnqx95ucaYbHc1BP4XUP0q+JoMiP8kzMe04AgVvkfAScsoRuKfXw1EH1FkV51C/vqWIKDoGj1WoZnxQ== +"@formatjs/intl-relativetimeformat@8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.0.2.tgz#c8b999f66abe029f108a97a2105582f34b6319a8" + integrity sha512-RBO+4zxJuIYtYGfxv1GuZJQDtrA+fZlgcHjSVoo5HwznWdfg5vVTe8qdbSDbdyFobbB2OYqwj4mcRO2M5P1oNw== dependencies: "@formatjs/ecma402-abstract" "1.5.0" tslib "^2.0.1" -"@formatjs/intl@1.4.13": - version "1.4.13" - resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-1.4.13.tgz#634e8e7d29385ade5cf7e7c0ba8aae63e585cba0" - integrity sha512-GEWwkaNFnskOGGd6gq0Y0RetiH2iNnARXzQ+glR2RqU0xk00aS5KpwkEDo1hN9NaO9fRr9UDvzDoEu9foQFVmA== +"@formatjs/intl@1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-1.4.15.tgz#b21122e7a900957fd25eed24383df4aaefeaa6ee" + integrity sha512-njrwmR/X0XwAp7yHPdAgqGeEeuohyO0JqoE798WxuzjTzLm3khAODJmyH0nZDg4DEJ4R5Uf5lj3whtfwBUVm+g== dependencies: "@formatjs/ecma402-abstract" "1.5.0" - "@formatjs/intl-datetimeformat" "3.2.1" - "@formatjs/intl-displaynames" "4.0.2" - "@formatjs/intl-listformat" "5.0.2" - "@formatjs/intl-relativetimeformat" "8.0.1" + "@formatjs/intl-datetimeformat" "3.2.2" + "@formatjs/intl-displaynames" "4.0.3" + "@formatjs/intl-listformat" "5.0.3" + "@formatjs/intl-relativetimeformat" "8.0.2" fast-memoize "^2.5.2" - intl-messageformat "9.4.0" - intl-messageformat-parser "6.1.0" + intl-messageformat "9.4.2" + intl-messageformat-parser "6.1.2" tslib "^2.0.1" -"@formatjs/ts-transformer@2.12.11": - version "2.12.11" - resolved "https://registry.yarnpkg.com/@formatjs/ts-transformer/-/ts-transformer-2.12.11.tgz#fedbc44a44a7da6925d149e3051cd8a7a869d8c2" - integrity sha512-XjknAXQEy7s8Q9LsyECFo1369kctH/C841o/JeDqHRDhkgn1vV/IlF3v2qli7mxEc+L2JcO8LUwqOALpTBW/5A== +"@formatjs/ts-transformer@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@formatjs/ts-transformer/-/ts-transformer-2.13.0.tgz#df47b35cdd209269d282a411f1646e0498aa8fdc" + integrity sha512-mu7sHXZk1NWZrQ3eUqugpSYo8x5/tXkrI4uIbFqCEC0eNgQaIcoKgVeDFgDAcgG+cEme2atAUYSFF+DFWC4org== dependencies: - intl-messageformat-parser "6.1.0" + intl-messageformat-parser "6.1.2" + tslib "^2.0.1" + typescript "^4.0" + +"@formatjs/ts-transformer@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@formatjs/ts-transformer/-/ts-transformer-3.0.0.tgz#22f7fa2be9117d1369faf9037aff336071ea6f84" + integrity sha512-Q7fBV8Rpd8WFlb4+y94/OQUG/OonE6bMBKGeS08U7ET8qL4ReI82dhewiUuYisgl+ME32xTf4hcYZAHe0L0GyQ== + dependencies: + intl-messageformat-parser "6.1.2" tslib "^2.0.1" typescript "^4.0" @@ -1497,20 +1506,20 @@ titleize "^2.1.0" tlds "^1.212.0" -"@next/env@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.3.tgz#ef1077d78bf500855576f83090d6fb1ec96272f8" - integrity sha512-xjJt2VXoSxAydskmt77nJuEtRL782E4ltaj5JtMzJ8YkNUMMu3d5ktpCR+Q3INKHF/RY6zHJ9QzyE3/s1ikbNg== +"@next/env@10.0.4": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.4.tgz#ac759094d021853616af56a7bd6720e44a92a303" + integrity sha512-U+XIL75XM1pCmY4+9kYbst/0IptlfDnkFfKdgADBZulQlfng4RB3zirdzkoBtod0lVcrGgDryzOi1mM23RiiVQ== -"@next/polyfill-module@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.3.tgz#507e99f6dd351dc4a6e45b63dbd397087ece459a" - integrity sha512-JaiycQZZbqViaMZgRGYcPIdCPDz+qRnqEGxbhQlrxyPaBaOtsrAEkGf1SS2wJZKa/ncxqWHMfSvizDcGcz/ygQ== +"@next/polyfill-module@10.0.4": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.4.tgz#c34391a12ad80d6e373c403f96c8e2bbd793dca1" + integrity sha512-i2gLUa3YuZ2eQg+d91n+jS4YbPVKg1v0HHIUeJFJMMtpG/apBkTuTLBQGJXe4nKNf7/41NWLDft4ihC3Zfd+Yw== -"@next/react-dev-overlay@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.3.tgz#99f3151677747d8be08a9314fa7ab3611e8161b8" - integrity sha512-ykiKeUhTsMRoyyYnx4jM8xeOPfKGqQ7xgx2dNXOu4tbPpdivzjJp2+K6+xnqhTmZ7uxfFBV+b1OE1ZzA8qyX5Q== +"@next/react-dev-overlay@10.0.4": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.4.tgz#c578a3c71e2f8a8fe2aae8007cc40d1cf10bc768" + integrity sha512-8pKN0PspEtfVFqeSpNQymfXWyV95OTIT0xP9IqILJX2+52ICdU5D+YNuNIwpc4ZOZ0CssM/uYsz6K1FHbCaU7A== dependencies: "@babel/code-frame" "7.10.4" ally.js "1.4.1" @@ -1523,10 +1532,10 @@ stacktrace-parser "0.1.10" strip-ansi "6.0.0" -"@next/react-refresh-utils@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.3.tgz#276bec60eae18768f96baf8a52f668f657f50ab4" - integrity sha512-XtzzPX2R4+MIyu1waEQUo2tiNwWVEkmObA6pboRCDTPOs4Ri8ckaIE08lN5A5opyF6GVN+IEq/J8KQrgsePsZQ== +"@next/react-refresh-utils@10.0.4": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.4.tgz#5ad753572891aa7cb1010b358cc4241d7be20d20" + integrity sha512-kZ/37aSQaR0GCZVqh7WDLkeEZqzjPQoZUDdo6TOWiIEb+089AmfYp8A4/1ra9Fu8T4b4wnB76TRl6tp6DeJLXg== "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents": version "2.1.8-no-fsevents" @@ -1669,6 +1678,18 @@ "@octokit/openapi-types" "^1.2.0" "@types/node" ">= 8" +"@opentelemetry/api@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae" + integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ== + dependencies: + "@opentelemetry/context-base" "^0.14.0" + +"@opentelemetry/context-base@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001" + integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw== + "@semantic-release/changelog@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-5.0.1.tgz#50a84b63e5d391b7debfe021421589fa2bcdafe4" @@ -1987,13 +2008,14 @@ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.31.tgz#bac8d8aab6a823e91deb7f79083b2a35fa638f33" integrity sha512-LS1MCPaQKqspg7FvexuhmDbWUhE2yIJ+4AgVIyObfc06/UKZ8REgxGNjZc82wPLWmbeOm7S+gSsLgo75TanG4A== -"@types/email-templates@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@types/email-templates/-/email-templates-7.1.0.tgz#9dbdb4e20aa6c700f5587b9b76bcbd7111e985df" - integrity sha512-IhL+OLeZySsTq7dRtmytObRJaX5Y0SDKS1yTUtwjI6oS4rEXELiD+pYESdv/Eq5Stk8hz2unJeWChjHN/q34ig== +"@types/email-templates@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@types/email-templates/-/email-templates-8.0.0.tgz#9bd4e328be02253d65609ff078181e98e3c2818a" + integrity sha512-oPZQ9qkidtJCTWH3XKwfcqKdAuBrFZ6L+yVr7FQONivDm0g88MoKR0cCn13Hrt79R4r+FFAinELC22+6eXFa0Q== dependencies: "@types/html-to-text" "*" "@types/nodemailer" "*" + juice "^7.0.0" "@types/emoji-regex@^8.0.0": version "8.0.0" @@ -2085,6 +2107,11 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.165.tgz#74d55d947452e2de0742bad65270433b63a8c30f" integrity sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg== +"@types/lodash@^4.14.167": + version "4.14.167" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.167.tgz#ce7d78553e3c886d4ea643c37ec7edc20f16765e" + integrity sha512-w7tQPjARrvdeBkX/Rwg95S592JwxqOjmms3zWQ0XZgSyxSLdzWaYH3vErBhdVS/lRBX7F8aBYcYJYTr5TMGOzw== + "@types/mdast@^3.0.0", "@types/mdast@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" @@ -2124,10 +2151,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785" integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ== -"@types/node@^14.14.14": - version "14.14.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" - integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== +"@types/node@^14.14.20": + version "14.14.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" + integrity sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A== "@types/nodemailer@*", "@types/nodemailer@^6.4.0": version "6.4.0" @@ -2258,66 +2285,66 @@ resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.29.11.tgz#d654a112973f5e004bf8438122bd7e56a8e5cd7e" integrity sha512-9cwk3c87qQKZrT251EDoibiYRILjCmxBvvcb4meofCmx1vdnNcR9gyildy5vOHASpOKMsn42CugxUvcwK5eu1g== -"@typescript-eslint/eslint-plugin@^4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.10.0.tgz#19ed3baf4bc4232c5a7fcd32eaca75c3a5baf9f3" - integrity sha512-h6/V46o6aXpKRlarP1AiJEXuCJ7cMQdlpfMDrcllIgX3dFkLwEBTXAoNP98ZoOmqd1xvymMVRAI4e7yVvlzWEg== +"@typescript-eslint/eslint-plugin@^4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.12.0.tgz#00d1b23b40b58031e6d7c04a5bc6c1a30a2e834a" + integrity sha512-wHKj6q8s70sO5i39H2g1gtpCXCvjVszzj6FFygneNFyIAxRvNSVz9GML7XpqrB9t7hNutXw+MHnLN/Ih6uyB8Q== dependencies: - "@typescript-eslint/experimental-utils" "4.10.0" - "@typescript-eslint/scope-manager" "4.10.0" + "@typescript-eslint/experimental-utils" "4.12.0" + "@typescript-eslint/scope-manager" "4.12.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.10.0.tgz#dbf5d0f89802d5feaf7d11e5b32df29bbc2f3a0e" - integrity sha512-opX+7ai1sdWBOIoBgpVJrH5e89ra1KoLrJTz0UtWAa4IekkKmqDosk5r6xqRaNJfCXEfteW4HXQAwMdx+jjEmw== +"@typescript-eslint/experimental-utils@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.12.0.tgz#372838e76db76c9a56959217b768a19f7129546b" + integrity sha512-MpXZXUAvHt99c9ScXijx7i061o5HEjXltO+sbYfZAAHxv3XankQkPaNi5myy0Yh0Tyea3Hdq1pi7Vsh0GJb0fA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.10.0" - "@typescript-eslint/types" "4.10.0" - "@typescript-eslint/typescript-estree" "4.10.0" + "@typescript-eslint/scope-manager" "4.12.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/typescript-estree" "4.12.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.10.0.tgz#1a622b0847b765b2d8f0ede6f0cdd85f03d76031" - integrity sha512-amBvUUGBMadzCW6c/qaZmfr3t9PyevcSWw7hY2FuevdZVp5QPw/K76VSQ5Sw3BxlgYCHZcK6DjIhSZK0PQNsQg== +"@typescript-eslint/parser@^4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.12.0.tgz#e1cf30436e4f916c31fcc962158917bd9e9d460a" + integrity sha512-9XxVADAo9vlfjfoxnjboBTxYOiNY93/QuvcPgsiKvHxW6tOZx1W4TvkIQ2jB3k5M0pbFP5FlXihLK49TjZXhuQ== dependencies: - "@typescript-eslint/scope-manager" "4.10.0" - "@typescript-eslint/types" "4.10.0" - "@typescript-eslint/typescript-estree" "4.10.0" + "@typescript-eslint/scope-manager" "4.12.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/typescript-estree" "4.12.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.10.0.tgz#dbd7e1fc63d7363e3aaff742a6f2b8afdbac9d27" - integrity sha512-WAPVw35P+fcnOa8DEic0tQUhoJJsgt+g6DEcz257G7vHFMwmag58EfowdVbiNcdfcV27EFR0tUBVXkDoIvfisQ== +"@typescript-eslint/scope-manager@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.12.0.tgz#beeb8beca895a07b10c593185a5612f1085ef279" + integrity sha512-QVf9oCSVLte/8jvOsxmgBdOaoe2J0wtEmBr13Yz0rkBNkl5D8bfnf6G4Vhox9qqMIoG7QQoVwd2eG9DM/ge4Qg== dependencies: - "@typescript-eslint/types" "4.10.0" - "@typescript-eslint/visitor-keys" "4.10.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/visitor-keys" "4.12.0" "@typescript-eslint/types@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== -"@typescript-eslint/types@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.10.0.tgz#12f983750ebad867f0c806e705c1953cd6415789" - integrity sha512-+dt5w1+Lqyd7wIPMa4XhJxUuE8+YF+vxQ6zxHyhLGHJjHiunPf0wSV8LtQwkpmAsRi1lEOoOIR30FG5S2HS33g== +"@typescript-eslint/types@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.12.0.tgz#fb891fe7ccc9ea8b2bbd2780e36da45d0dc055e5" + integrity sha512-N2RhGeheVLGtyy+CxRmxdsniB7sMSCfsnbh8K/+RUIXYYq3Ub5+sukRCjVE80QerrUBvuEvs4fDhz5AW/pcL6g== -"@typescript-eslint/typescript-estree@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.10.0.tgz#1e62e45fd57866afd42daf5e9fb6bd4e8dbcfa75" - integrity sha512-mGK0YRp9TOk6ZqZ98F++bW6X5kMTzCRROJkGXH62d2azhghmq+1LNLylkGe6uGUOQzD452NOAEth5VAF6PDo5g== +"@typescript-eslint/typescript-estree@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.12.0.tgz#3963418c850f564bdab3882ae23795d115d6d32e" + integrity sha512-gZkFcmmp/CnzqD2RKMich2/FjBTsYopjiwJCroxqHZIY11IIoN0l5lKqcgoAPKHt33H2mAkSfvzj8i44Jm7F4w== dependencies: - "@typescript-eslint/types" "4.10.0" - "@typescript-eslint/visitor-keys" "4.10.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/visitor-keys" "4.12.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" @@ -2346,12 +2373,12 @@ dependencies: eslint-visitor-keys "^1.1.0" -"@typescript-eslint/visitor-keys@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.10.0.tgz#9478822329a9bc8ebcc80623d7f79a01da5ee451" - integrity sha512-hPyz5qmDMuZWFtHZkjcCpkAKHX8vdu1G3YsCLEd25ryZgnJfj6FQuJ5/O7R+dB1ueszilJmAFMtlU4CA6se3Jg== +"@typescript-eslint/visitor-keys@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.12.0.tgz#a470a79be6958075fa91c725371a83baf428a67a" + integrity sha512-hVpsLARbDh4B9TKYz5cLbcdMIOAoBYgFPCSP9FFS/liSF+b33gVNq8JHY3QGhHNVz85hObvL7BEYLlgx553WCw== dependencies: - "@typescript-eslint/types" "4.10.0" + "@typescript-eslint/types" "4.12.0" eslint-visitor-keys "^2.0.0" "@webassemblyjs/ast@1.9.0": @@ -3009,10 +3036,10 @@ axe-core@^4.0.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.1.tgz#70a7855888e287f7add66002211a423937063eaf" integrity sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ== -axios@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.0.tgz#26df088803a2350dff2c27f96fef99fe49442aca" - integrity sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw== +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== dependencies: follow-redirects "^1.10.0" @@ -3079,18 +3106,18 @@ babel-plugin-react-intl@^7.0.0: intl-messageformat-parser "^5.3.7" schema-utils "^2.6.6" -babel-plugin-react-intl@^8.2.22: - version "8.2.22" - resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-8.2.22.tgz#076bbcf792a7d975803917dd49c9906799285ece" - integrity sha512-maUrmP2NY1falW5dYXGfq77YjGpQPLZUpzTgs/jRevTLTcey1u1+lTv01pA6so+iPtUfxkH3er7Z1P9zZNvKOg== +babel-plugin-react-intl@^8.2.25: + version "8.2.25" + resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-8.2.25.tgz#7b6adaa2bc291ac7b9f87bf51f1c2ea8974ffe84" + integrity sha512-vqzRwqxMKHBKEpzWIIabxUXSBYd8urOkk49nQdzgEt55tLIuDc1XdHceeMNaeJt9VRLYZUiL5vpYpnvrntUNMQ== dependencies: "@babel/core" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/types" "^7.9.5" - "@formatjs/ts-transformer" "2.12.11" + "@formatjs/ts-transformer" "2.13.0" "@types/babel__core" "^7.1.7" "@types/schema-utils" "^2.4.0" - intl-messageformat-parser "6.1.0" + intl-messageformat-parser "6.1.2" schema-utils "^3.0.0" tslib "^2.0.1" @@ -4514,12 +4541,12 @@ cron-parser@^2.7.3: is-nan "^1.3.0" moment-timezone "^0.5.31" -cross-fetch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.5.tgz#2739d2981892e7ab488a7ad03b92df2816e03f4c" - integrity sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew== +cross-fetch@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" + integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== dependencies: - node-fetch "2.6.0" + node-fetch "2.6.1" cross-spawn@^5.0.1: version "5.1.0" @@ -4703,14 +4730,6 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-simple@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.0.tgz#afcf13eb076e8ebd91c4f311cd449781c14c7371" - integrity sha512-zojGlY+KasFeQT/SnD/WqYXHcKddz2XHRDtIwxrWpGqGHp5IyLWsWFS3UW7pOf3AWvfkpYSRdxOSlYuJPz8j8g== - dependencies: - caniuse-lite "^1.0.30001093" - postcss "^7.0.32" - cssnano-preset-simple@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.1.tgz#8976013114b1fc4718253d30f21aaed1780fb80e" @@ -4719,14 +4738,6 @@ cssnano-preset-simple@1.2.1: caniuse-lite "^1.0.30001093" postcss "^7.0.32" -cssnano-simple@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.0.tgz#b8cc5f52c2a52e6513b4636d0da165ec9d48d327" - integrity sha512-pton9cZ70/wOCWMAbEGHO1ACsW1KggTB6Ikj7k71uOEsz6SfByH++86+WAmXjRSc9q/g9gxkpFP9bDX9vRotdA== - dependencies: - cssnano-preset-simple "1.2.0" - postcss "^7.0.32" - cssnano-simple@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.1.tgz#6de5d9dd75774bc8f31767573410a952c7dd8a12" @@ -5152,10 +5163,10 @@ dom-serializer@0, dom-serializer@^0.2.1: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.0.1.tgz#79695eb49af3cd8abc8d93a73da382deb1ca0795" - integrity sha512-1Aj1Qy3YLbdslkI75QEOfdp9TkQ3o8LRISAzxOibjBs/xWwr1WxZFOQphFkZuepHFGo+kB8e5FVJSS0faAJ4Rw== +dom-serializer@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" + integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ== dependencies: domelementtype "^2.0.1" domhandler "^3.0.0" @@ -5198,10 +5209,10 @@ domelementtype@^2.1.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== -domhandler@3.0.0, domhandler@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" - integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== +domhandler@3.3.0, domhandler@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: domelementtype "^2.0.1" @@ -5212,10 +5223,10 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== +domhandler@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" + integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== dependencies: domelementtype "^2.0.1" @@ -5234,14 +5245,14 @@ domutils@1.5.1: dom-serializer "0" domelementtype "1" -domutils@2.1.0, domutils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.1.0.tgz#7ade3201af43703fde154952e3a868eb4b635f16" - integrity sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg== +domutils@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b" + integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA== dependencies: - dom-serializer "^0.2.1" + dom-serializer "^1.0.1" domelementtype "^2.0.1" - domhandler "^3.0.0" + domhandler "^3.3.0" domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" @@ -5251,6 +5262,15 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +domutils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.1.0.tgz#7ade3201af43703fde154952e3a868eb4b635f16" + integrity sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg== + dependencies: + dom-serializer "^0.2.1" + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils@^2.4.2: version "2.4.4" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" @@ -5596,18 +5616,18 @@ eslint-config-prettier@^7.1.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz#5402eb559aa94b894effd6bddfa0b1ca051c858f" integrity sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA== -eslint-plugin-formatjs@^2.9.11: - version "2.9.11" - resolved "https://registry.yarnpkg.com/eslint-plugin-formatjs/-/eslint-plugin-formatjs-2.9.11.tgz#a44d0bc4c32f408e8091f2dcda7cfd18dda56fdc" - integrity sha512-2JY/hAqwQIyIMpJb1CANUhlZL0ZiB3uvGLrIUSSOlu8TJjGI8m57l5j+/8jDlKrAtHy9qvFp5ywR+8qi9vDvlA== +eslint-plugin-formatjs@^2.10.2: + version "2.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-formatjs/-/eslint-plugin-formatjs-2.10.2.tgz#4bc2f5f57669ea761e66c56fbbd7099d644c3d6e" + integrity sha512-xi9EvtFalho/ZIny9QyoC84J+YHTh/k+ZRU5m8g7ClyRTyjPU1JTBA4IuukW5/rRb92Ah6f1vpQXwIajzgzGvA== dependencies: - "@formatjs/ts-transformer" "2.12.11" + "@formatjs/ts-transformer" "3.0.0" "@types/emoji-regex" "^8.0.0" "@types/eslint" "^7.2.0" "@types/estree" "^0.0.45" "@typescript-eslint/typescript-estree" "^3.6.0" emoji-regex "^9.0.0" - intl-messageformat-parser "6.1.0" + intl-messageformat-parser "6.1.2" tslib "^2.0.1" eslint-plugin-jsx-a11y@^6.4.1: @@ -5627,10 +5647,10 @@ eslint-plugin-jsx-a11y@^6.4.1: jsx-ast-utils "^3.1.0" language-tags "^1.0.5" -eslint-plugin-prettier@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.0.tgz#61e295349a65688ffac0b7808ef0a8244bdd8d40" - integrity sha512-tMTwO8iUWlSRZIwS9k7/E4vrTsfvsrcM5p1eftyuqWH25nKsz/o6/54I7jwQ/3zobISyC7wMy9ZsFwgTxOcOpQ== +eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -5639,10 +5659,10 @@ eslint-plugin-react-hooks@^4.2.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react@^7.21.5: - version "7.21.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz#50b21a412b9574bfe05b21db176e8b7b3b15bff3" - integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g== +eslint-plugin-react@^7.22.0: + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" + integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== dependencies: array-includes "^3.1.1" array.prototype.flatmap "^1.2.3" @@ -5689,10 +5709,10 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.16.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.16.0.tgz#a761605bf9a7b32d24bb7cde59aeb0fd76f06092" - integrity sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw== +eslint@^7.17.0: + version "7.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.17.0.tgz#4ccda5bf12572ad3bf760e6f195886f50569adb0" + integrity sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ== dependencies: "@babel/code-frame" "^7.0.0" "@eslint/eslintrc" "^0.2.2" @@ -5880,16 +5900,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -express-openapi-validator@^4.9.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/express-openapi-validator/-/express-openapi-validator-4.9.4.tgz#2ac0b5fcbcb0c4b74a6f4df2674dbd27b1ce81d8" - integrity sha512-TAk9DcEnfwewdvou3jXLYGCgx120UMKRF/bN6vcmNPiDQPuk5axMxL9QwG5pterRkuq0LJcVQkK2dfifVnyMPA== +express-openapi-validator@^4.10.2: + version "4.10.2" + resolved "https://registry.yarnpkg.com/express-openapi-validator/-/express-openapi-validator-4.10.2.tgz#55ba35b96522b5ef67f8a8d6b8b4a1cf0be96e91" + integrity sha512-dNfTt5US6ZEtycoTBS82uspMYwyQJsb2+S1RVvPg4OqCcqs44XUfn7R1pPDYQM3kWuDPxbE2Dzc8KbKxR+VKeA== dependencies: ajv "^6.12.6" content-type "^1.0.4" js-yaml "^3.14.0" json-schema-ref-parser "^9.0.6" lodash.clonedeep "^4.5.0" + lodash.get "^4.4.2" lodash.merge "^4.6.2" lodash.uniq "^4.5.0" lodash.zipobject "^4.1.3" @@ -6222,13 +6243,20 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-versions@^3.0.0, find-versions@^3.2.0: +find-versions@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== dependencies: semver-regex "^2.0.0" +find-versions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" + integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== + dependencies: + semver-regex "^3.1.2" + findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" @@ -6908,14 +6936,14 @@ html-to-text@6.0.0, html-to-text@^6.0.0: lodash "^4.17.20" minimist "^1.2.5" -htmlparser2@4.1.0, htmlparser2@^4.0.0, htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== +htmlparser2@5.0.1, htmlparser2@^5.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" + integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== dependencies: domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" + domhandler "^3.3.0" + domutils "^2.4.2" entities "^2.0.0" htmlparser2@^3.9.1: @@ -6930,14 +6958,14 @@ htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^5.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" - integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== +htmlparser2@^4.0.0, htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== dependencies: domelementtype "^2.0.1" - domhandler "^3.3.0" - domutils "^2.4.2" + domhandler "^3.0.0" + domutils "^2.0.0" entities "^2.0.0" http-cache-semantics@^3.8.1: @@ -7254,10 +7282,10 @@ intl-messageformat-parser@6.0.18: "@formatjs/ecma402-abstract" "1.5.0" tslib "^2.0.1" -intl-messageformat-parser@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-6.1.0.tgz#134328151c41592d9e1a61f5c6779c06c8eb3f08" - integrity sha512-nPPh2kOrKqlh4D9bCAetxkrUiq5/6S1exPQyg52Ihusy0ECNGhZ0Qmq8pFRK9gWIuiQPVmLA7eSNp8diC2tX3w== +intl-messageformat-parser@6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-6.1.2.tgz#28c65f3689f538e66c7cf628881548d6a82ff3c2" + integrity sha512-4GQDEPhl/ZMNDKwMsLqyw1LG2IAWjmLJXdmnRcHKeLQzpgtNYZI6lVw1279pqIkRk2MfKb9aDsVFzm565azK5A== dependencies: "@formatjs/ecma402-abstract" "1.5.0" tslib "^2.0.1" @@ -7269,13 +7297,13 @@ intl-messageformat-parser@^5.3.7: dependencies: "@formatjs/intl-numberformat" "^5.5.2" -intl-messageformat@9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.4.0.tgz#b9c9c00a6e88a8f1ffd9ee3e54340c9dfb765d13" - integrity sha512-zcF8OWG52dCwwePkykqqv7F038vCaixPR14Lr3YUFc9jRdGoCazl2dTE3BwBaeHr3pG/qYb6A/mwMKrj4LFt9Q== +intl-messageformat@9.4.2: + version "9.4.2" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.4.2.tgz#4ac2290d9d2dd6d76e60a2b355eeb8d8bc310c9c" + integrity sha512-34XevT4ADM/DCwtHIgXcL+LNtAnqPM6LSYUx7itlqm+9b2zMv8hUPlj4Ct94cl6qWymWAq5UiHbj85XAdwvq1A== dependencies: fast-memoize "^2.5.2" - intl-messageformat-parser "6.1.0" + intl-messageformat-parser "6.1.2" tslib "^2.0.1" intl@^1.2.5: @@ -8377,6 +8405,11 @@ lodash.escaperegexp@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -9221,18 +9254,19 @@ next-tick@~1.0.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= -next@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/next/-/next-10.0.3.tgz#2bf9a1625dcd0afc8c31be19fc5516af68d99e80" - integrity sha512-QYCfjZgowjaLUFvyV8959SmkUZU/edFgHeiXNtWDv7kffo/oTm891p0KZAkk5cMIHcsDX3g3UuQdw/zmui783g== +next@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/next/-/next-10.0.4.tgz#0d256f58a57d6bab7db7e533900c15f322960b4a" + integrity sha512-WXEYr1FuR2cLuWGN8peYGM6ykmbtwaHvrI6RqR2qrTXUNsW+KU5pzIMK5WPcpqP+xOuMhlykOCJvwJH8qU9FZQ== dependencies: - "@ampproject/toolbox-optimizer" "2.7.0-alpha.1" + "@ampproject/toolbox-optimizer" "2.7.1-alpha.0" "@babel/runtime" "7.12.5" "@hapi/accept" "5.0.1" - "@next/env" "10.0.3" - "@next/polyfill-module" "10.0.3" - "@next/react-dev-overlay" "10.0.3" - "@next/react-refresh-utils" "10.0.3" + "@next/env" "10.0.4" + "@next/polyfill-module" "10.0.4" + "@next/react-dev-overlay" "10.0.4" + "@next/react-refresh-utils" "10.0.4" + "@opentelemetry/api" "0.14.0" ast-types "0.13.2" babel-plugin-transform-define "2.0.0" babel-plugin-transform-react-remove-prop-types "0.4.24" @@ -9251,6 +9285,7 @@ next@^10.0.3: native-url "0.3.4" node-fetch "2.6.1" node-html-parser "1.4.9" + p-limit "3.1.0" path-browserify "1.0.1" pnp-webpack-plugin "1.6.4" postcss "8.1.7" @@ -9311,11 +9346,6 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - node-fetch@2.6.1, node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -10071,6 +10101,13 @@ p-is-promise@^3.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== +p-limit@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -11402,21 +11439,21 @@ react-intersection-observer@^8.31.0: resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-8.31.0.tgz#0ed21aaf93c4c0475b22b0ccaba6169076d01605" integrity sha512-XraIC/tkrD9JtrmVA7ypEN1QIpKc52mXBH1u/bz/aicRLo8QQEJQAMUTb8mz4B6dqpPwyzgjrr7Ljv/2ACDtqw== -react-intl@^5.10.9: - version "5.10.9" - resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-5.10.9.tgz#cab8d9445059d3544cffc762c3e6af47ef9bc8ad" - integrity sha512-DfUF4YMlZqaNRfgfvf46AcXxz7pDi7pkxRbQoimUJWEkjep+6QYLlH7ogypysGD1Sl5kbWi7b69bbG7wPqt1vA== +react-intl@^5.10.11: + version "5.10.11" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-5.10.11.tgz#7a2815ddfc889dc6053c04c650f58673d41784cc" + integrity sha512-nF25oSFSeMLzqH/RncdgdS6e/lDQIpkQo14zQVwSOD5zu1wDEX6Wbn//+FyqkC+tdqTbpCAKWNg5dSD5Fjli5Q== dependencies: "@formatjs/ecma402-abstract" "1.5.0" - "@formatjs/intl" "1.4.13" - "@formatjs/intl-displaynames" "4.0.2" - "@formatjs/intl-listformat" "5.0.2" - "@formatjs/intl-relativetimeformat" "8.0.1" + "@formatjs/intl" "1.4.15" + "@formatjs/intl-displaynames" "4.0.3" + "@formatjs/intl-listformat" "5.0.3" + "@formatjs/intl-relativetimeformat" "8.0.2" "@types/hoist-non-react-statics" "^3.3.1" fast-memoize "^2.5.2" hoist-non-react-statics "^3.3.2" - intl-messageformat "9.4.0" - intl-messageformat-parser "6.1.0" + intl-messageformat "9.4.2" + intl-messageformat-parser "6.1.2" shallow-equal "^1.2.1" tslib "^2.0.1" @@ -11482,10 +11519,10 @@ react-truncate-markup@^5.0.1: prop-types "^15.6.0" resize-observer-polyfill "1.5.x" -react-use-clipboard@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/react-use-clipboard/-/react-use-clipboard-1.0.2.tgz#e00254ffc70b989daa41638325fa6557c7b89dd2" - integrity sha512-dgKUfjWm6xAeag7OHdMadUgDMEG59LSgCSwVRqPJwZIFbGNxUtA0GqCZQS5M9MvAeSzHNEi/j0LfJQecDcaNlQ== +react-use-clipboard@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/react-use-clipboard/-/react-use-clipboard-1.0.7.tgz#34cccdfb4f17f5e6522e38f2cee62d05f605597a" + integrity sha512-blIprqARyITp0uVw/2Rh87mcujqXdH6vZ5NrcuXEhI5EmjBGxcGnwt/79+vdN7rwM6OliGj481lOj6ZCcsiYEQ== dependencies: copy-to-clipboard "^3.3.1" @@ -12147,10 +12184,10 @@ semantic-release-docker@^2.2.0: "@semantic-release/error" "^2.1.0" execa "^0.10.0" -semantic-release@^17.3.0: - version "17.3.0" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-17.3.0.tgz#121252b5bb6acc1048d7657111173b03d47502c5" - integrity sha512-enhDayMZRP4nWcWAMBFHHB7THRaIcRdUAZv3lxd65pXs2ttzay7IeCvRRrGayRWExtnY0ulwRz5Ycp88Dv/UeQ== +semantic-release@^17.3.1: + version "17.3.1" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-17.3.1.tgz#8904ef1ca8e704394de0e204b284f6c252284da4" + integrity sha512-NSdxvnBTklrRBYRexVUx44Hri9sTu9b8x+1HfWDGIWemDTFQfWOTbT1N3oy5l8WcZHodhRvtyI7gm50SfAa3Fg== dependencies: "@semantic-release/commit-analyzer" "^8.0.0" "@semantic-release/error" "^2.2.0" @@ -12163,7 +12200,7 @@ semantic-release@^17.3.0: env-ci "^5.0.0" execa "^4.0.0" figures "^3.0.0" - find-versions "^3.0.0" + find-versions "^4.0.0" get-stream "^5.0.0" git-log-parser "^1.2.0" hook-std "^2.0.0" @@ -12205,6 +12242,11 @@ semver-regex@^2.0.0: resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== +semver-regex@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" + integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== + "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -12549,7 +12591,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.17, source-map-support@~0.5.12: +source-map-support@^0.5.17, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -12567,7 +12609,7 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@0.7.3: +source-map@0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -13069,10 +13111,10 @@ swagger-ui-dist@^3.18.1: resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-3.32.5.tgz#52fc8b714db113c0b5a0cf9ad12ad039fe5b87df" integrity sha512-3SKHv8UVqsKKknivtACHbFDGcn297jkoZN2h6zAZ7b2yoaJNMaRadQpC3qFw3GobZTGzqHCgHph4ZH9NkaCjrQ== -swagger-ui-express@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-4.1.5.tgz#114f3ce017ca6d6069d960ea8ffef677784b6f2f" - integrity sha512-hs9OqBu2jwmhYyFUhdTiwurvbZC+bq2XnWmmbYymVdwhgJCcGkLdnqymX24ZYUve2nkYSvKPEDCo20ZF+vyw9A== +swagger-ui-express@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-4.1.6.tgz#682294af3d5c70f74a1fa4d6a9b503a9ee55ea82" + integrity sha512-Xs2BGGudvDBtL7RXcYtNvHsFtP1DBFPMJFRxHe5ez/VG/rzVOEjazJOOSc/kSCyxreCTKfJrII6MJlL9a6t8vw== dependencies: swagger-ui-dist "^3.18.1" @@ -13212,14 +13254,14 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.1.0.tgz#1f4ab81c8619654fdded51f3157b001e1747281d" - integrity sha512-pwC1Jbzahz1ZPU87NQ8B3g5pKbhyJSiHih4gLH6WZiPU8mmS1IlGbB0A2Nuvkj/LCNsgIKctg6GkYwWCeTvXZQ== +terser@5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== dependencies: commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map "~0.7.2" + source-map-support "~0.5.19" terser@^4.1.2: version "4.8.0" @@ -14502,6 +14544,11 @@ yn@3.1.1: resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + yup@^0.32.8: version "0.32.8" resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.8.tgz#16e4a949a86a69505abf99fd0941305ac9adfc39" From 493d82b6b066d77609cf66e005fd1f1472b8e011 Mon Sep 17 00:00:00 2001 From: sct Date: Wed, 6 Jan 2021 00:55:53 +0000 Subject: [PATCH 8/9] fix(plex-sync): do not run plex sync if no admin exists --- server/job/plexsync/index.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/job/plexsync/index.ts b/server/job/plexsync/index.ts index f92f5ee0..6ee93f76 100644 --- a/server/job/plexsync/index.ts +++ b/server/job/plexsync/index.ts @@ -345,7 +345,7 @@ class JobPlexSync { private log( message: string, - level: 'info' | 'error' | 'debug' = 'debug', + level: 'info' | 'error' | 'debug' | 'warn' = 'debug', optional?: Record ): void { logger[level](message, { label: 'Plex Sync', ...optional }); @@ -356,11 +356,15 @@ class JobPlexSync { if (!this.running) { this.running = true; const userRepository = getRepository(User); - const admin = await userRepository.findOneOrFail({ + const admin = await userRepository.findOne({ select: ['id', 'plexToken'], order: { id: 'ASC' }, }); + if (!admin) { + return this.log('No admin configured. Plex sync skipped.', 'warn'); + } + this.plexClient = new PlexAPI({ plexToken: admin.plexToken }); this.libraries = settings.plex.libraries.filter( From 2bfe0f2bf66956763ab26d5c54f26e6c456f59f7 Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Thu, 7 Jan 2021 10:50:51 +0100 Subject: [PATCH 9/9] feat(lang): Translations update from Weblate (#580) * feat(lang): translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (433 of 433 strings) Co-authored-by: Hosted Weblate Co-authored-by: Tijuco Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_BR/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (French) Currently translated at 100.0% (454 of 454 strings) feat(lang): translated using Weblate (French) Currently translated at 100.0% (433 of 433 strings) Co-authored-by: Hosted Weblate Co-authored-by: J. Lavoie Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (Italian) Currently translated at 100.0% (454 of 454 strings) feat(lang): translated using Weblate (Italian) Currently translated at 100.0% (433 of 433 strings) Co-authored-by: Hosted Weblate Co-authored-by: J. Lavoie Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/it/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (German) Currently translated at 100.0% (454 of 454 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (454 of 454 strings) feat(lang): translated using Weblate (German) Currently translated at 100.0% (433 of 433 strings) Co-authored-by: Hosted Weblate Co-authored-by: J. Lavoie Co-authored-by: Paul Co-authored-by: cyb3rgh05t Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/ Translation: Overseerr/Overseerr Frontend * feat(lang): translated using Weblate (Dutch) Currently translated at 98.2% (446 of 454 strings) Co-authored-by: Jos Vennik Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/ Translation: Overseerr/Overseerr Frontend Co-authored-by: Tijuco Co-authored-by: J. Lavoie Co-authored-by: Paul Co-authored-by: cyb3rgh05t Co-authored-by: Jos Vennik --- src/i18n/locale/de.json | 24 +++++++++++++++++++++++- src/i18n/locale/fr.json | 24 +++++++++++++++++++++++- src/i18n/locale/it.json | 24 +++++++++++++++++++++++- src/i18n/locale/nl.json | 16 +++++++++++++++- src/i18n/locale/pt_BR.json | 5 +++-- 5 files changed, 87 insertions(+), 6 deletions(-) diff --git a/src/i18n/locale/de.json b/src/i18n/locale/de.json index f5a70437..f4971f7c 100644 --- a/src/i18n/locale/de.json +++ b/src/i18n/locale/de.json @@ -430,5 +430,27 @@ "components.NotificationTypeSelector.mediaapprovedDescription": "Sendet eine Benachrichtigung, wenn Medien genehmigt werden.", "components.NotificationTypeSelector.mediaavailableDescription": "Sendet eine Benachrichtigung, wenn Medien verfügbar werden.", "components.NotificationTypeSelector.mediaavailable": "Medien verfügbar", - "components.NotificationTypeSelector.mediaapproved": "Medien genehmigt" + "components.NotificationTypeSelector.mediaapproved": "Medien genehmigt", + "i18n.request": "Anfragen", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Um Pushover einzurichten, müssen Sie registrieren eine Anwendung registrieren und das Zugriffstoken erhalten. Beim Einrichten der Anwendung können Sie eines der Symbole im öffentlichen Ordner auf Github verwenden. Sie benötigen auch das Pushover Benutzertoken, das Sie auf der Startseite finden können, wenn Sie sich anmelden.", + "components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "Du musst ein Benutzertoken bereitstellen.", + "components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "Du musst ein Zugriffstoken bereitstellen.", + "components.Settings.Notifications.NotificationsPushover.userToken": "Benutzertoken", + "components.Settings.Notifications.NotificationsPushover.testsent": "Test-Benarichtigung gesendet!", + "components.Settings.Notifications.NotificationsPushover.test": "Test", + "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Pushover-Benarichtigungseinstellungen", + "components.Settings.Notifications.NotificationsPushover.saving": "Speichern …", + "components.Settings.Notifications.NotificationsPushover.save": "Änderungen speichern", + "components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Pushover-Benarichtigungseinstellungen erfolgreich gespeichert!", + "components.Settings.Notifications.NotificationsPushover.notificationtypes": "Benarichtungstypen", + "components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Pushover-Benarichtigungseinstellungen konnten nicht gespeichert werden.", + "components.Settings.Notifications.NotificationsPushover.agentenabled": "Agent aktiviert", + "components.Settings.Notifications.NotificationsPushover.accessToken": "Zugangstoken", + "components.RequestList.sortModified": "Zuletzt geändert", + "components.RequestList.sortAdded": "Anfragedatum", + "components.RequestList.showallrequests": "All Anfragen anzeigen", + "components.RequestList.noresults": "Keine Ergebnisse.", + "components.RequestList.filterPending": "Unerledigt", + "components.RequestList.filterApproved": "Genehmigt", + "components.RequestList.filterAll": "Alle" } diff --git a/src/i18n/locale/fr.json b/src/i18n/locale/fr.json index 335606bb..aea519b9 100644 --- a/src/i18n/locale/fr.json +++ b/src/i18n/locale/fr.json @@ -430,5 +430,27 @@ "components.NotificationTypeSelector.mediaavailableDescription": "Envoie une notification quand le média devient disponible.", "components.NotificationTypeSelector.mediaavailable": "Média disponible", "components.NotificationTypeSelector.mediaapprovedDescription": "Envoie une notification quand le média est validé.", - "components.NotificationTypeSelector.mediaapproved": "Média validé" + "components.NotificationTypeSelector.mediaapproved": "Média validé", + "i18n.request": "Demander", + "components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "Vous devez fournir un jeton utilisateur.", + "components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "Vous devez fournir un jeton d'accès.", + "components.Settings.Notifications.NotificationsPushover.userToken": "Jeton utilisateur", + "components.Settings.Notifications.NotificationsPushover.testsent": "Notification de test envoyée !", + "components.Settings.Notifications.NotificationsPushover.test": "Test", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Pour configurer Pushover, vous devez enregistrer une application et obtenir le jeton d'accès. Lors de la configuration de l'application, vous pouvez utiliser l'une des icônes du dossier public sur GitHub. Vous avez également besoin du jeton d'utilisateur pushover qui se trouve sur la page de démarrage quand vous vous connectez.", + "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Configuration des notifications pushover", + "components.Settings.Notifications.NotificationsPushover.saving": "Enregistrement…", + "components.Settings.Notifications.NotificationsPushover.save": "Enregistrer les changements", + "components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Paramètres de notification pushover enregistrés !", + "components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Les paramètres de notification pushover n'ont pas pu être enregistrés.", + "components.Settings.Notifications.NotificationsPushover.notificationtypes": "Types de notification", + "components.Settings.Notifications.NotificationsPushover.agentenabled": "Agent activé", + "components.Settings.Notifications.NotificationsPushover.accessToken": "Jeton d'accès", + "components.RequestList.sortModified": "Dernière modification", + "components.RequestList.sortAdded": "Date de la demande", + "components.RequestList.showallrequests": "Afficher toutes les demandes", + "components.RequestList.noresults": "Aucun résultat.", + "components.RequestList.filterPending": "En attente", + "components.RequestList.filterApproved": "Validées", + "components.RequestList.filterAll": "Toutes" } diff --git a/src/i18n/locale/it.json b/src/i18n/locale/it.json index 19a27a7a..d90bb224 100644 --- a/src/i18n/locale/it.json +++ b/src/i18n/locale/it.json @@ -430,5 +430,27 @@ "components.NotificationTypeSelector.mediaavailableDescription": "Invia una notifica quando il media diventa disponibile.", "components.NotificationTypeSelector.mediaapprovedDescription": "Invia una notifica quando il media viene approvato.", "components.NotificationTypeSelector.mediaapproved": "Media approvato", - "components.NotificationTypeSelector.mediaavailable": "Media disponibile" + "components.NotificationTypeSelector.mediaavailable": "Media disponibile", + "i18n.request": "Richiedi", + "components.Settings.Notifications.NotificationsPushover.test": "Test", + "components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "Devi fornire un token utente.", + "components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "Devi fornire un token di accesso.", + "components.Settings.Notifications.NotificationsPushover.userToken": "Token utente", + "components.Settings.Notifications.NotificationsPushover.testsent": "Notifica di prova inviata!", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Per configurare Pushover è necessario registrare un'applicazione e ottenere il token di accesso. Quando si configura l'applicazione, è possibile utilizzare una delle icone nella cartella pubblica su GitHub. È inoltre necessario il token utente pushover che può essere trovato nella pagina iniziale quando si accede.", + "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Configurazione delle notifiche pushover", + "components.Settings.Notifications.NotificationsPushover.saving": "Salvataggio…", + "components.Settings.Notifications.NotificationsPushover.save": "Salva le modifiche", + "components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Impostazioni di notifica pushover salvate!", + "components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Impossibile salvare le impostazioni di notifica pushover.", + "components.Settings.Notifications.NotificationsPushover.notificationtypes": "Tipi di notifica", + "components.Settings.Notifications.NotificationsPushover.agentenabled": "Agente abilitato", + "components.Settings.Notifications.NotificationsPushover.accessToken": "Token di accesso", + "components.RequestList.sortModified": "Ultima modifica", + "components.RequestList.sortAdded": "Data della richiesta", + "components.RequestList.showallrequests": "Mostra tutte le richieste", + "components.RequestList.noresults": "Nessun risultato.", + "components.RequestList.filterPending": "In sospeso", + "components.RequestList.filterApproved": "Approvate", + "components.RequestList.filterAll": "Tutte" } diff --git a/src/i18n/locale/nl.json b/src/i18n/locale/nl.json index 72545678..88392d10 100644 --- a/src/i18n/locale/nl.json +++ b/src/i18n/locale/nl.json @@ -430,5 +430,19 @@ "components.Settings.Notifications.NotificationsSlack.settingupslack": "Slack Notificaties Instellen", "components.NotificationTypeSelector.mediarequestedDescription": "Stuurt een notificatie wanneer nieuwe media is verzocht. Voor bepaalde angenten wordt deze notificatie alleen verstuurd naar beheerders of gebruikers met de \"Beheer Verzoeken\" permissie.", "components.NotificationTypeSelector.mediafailedDescription": "Stuurt een notificatie wanneer media niet toegevoegd kan worden aan diensten (Radarr/Sonarr). For bepaalde agenten stuurt dit alleen de notificatie naar beheerders of gebruikers met de \"Beheer Verzoeken\" permissie.", - "components.TvDetails.TvCrew.fullseriescrew": "Volledige crew van de serie" + "components.TvDetails.TvCrew.fullseriescrew": "Volledige crew van de serie", + "components.Settings.Notifications.NotificationsPushover.saving": "Bezig met opslaan...", + "components.Settings.Notifications.NotificationsPushover.save": "Sla Wijzingen Op", + "components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Pushover notificatie instellingen zijn opgeslagen!", + "components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Pushover notificatie setting kon niet opgeslagen worden.", + "components.Settings.Notifications.NotificationsPushover.notificationtypes": "Notificatie Types", + "components.Settings.Notifications.NotificationsPushover.agentenabled": "Agent Ingeschakeld", + "components.Settings.Notifications.NotificationsPushover.accessToken": "Access Token", + "components.RequestList.sortModified": "Laatst Gewijzigd", + "components.RequestList.sortAdded": "Verzoek Datum", + "components.RequestList.showallrequests": "Toon Alle Verzoeken", + "components.RequestList.noresults": "Geen Resultaten.", + "components.RequestList.filterPending": "Wachtende", + "components.RequestList.filterApproved": "Goedgekeurd", + "components.RequestList.filterAll": "Alle" } diff --git a/src/i18n/locale/pt_BR.json b/src/i18n/locale/pt_BR.json index 67e6ec4f..15f36586 100644 --- a/src/i18n/locale/pt_BR.json +++ b/src/i18n/locale/pt_BR.json @@ -23,7 +23,7 @@ "components.MovieDetails.runtime": "{minutes} minutos", "components.MovieDetails.revenue": "Receita", "components.MovieDetails.request": "Solicitar", - "components.MovieDetails.releasedate": "Data de Lançamento", + "components.MovieDetails.releasedate": "Lançamento", "components.MovieDetails.recommendationssubtext": "Se você gostou de {title}, você provavelmente irá gostar…", "components.MovieDetails.recommendations": "Recomendações", "components.MovieDetails.pending": "Pendente", @@ -430,5 +430,6 @@ "components.NotificationTypeSelector.mediafailedDescription": "Envia uma notificação quando houver falha ao adicionar título aos serviços (Radarr/Sonarr). Para alguns agentes, somente serão enviadas notificações aos administradores ou usuários com perfil “Gerenciar solicitações”.", "components.NotificationTypeSelector.mediafailed": "Solicitação Falhou", "components.NotificationTypeSelector.mediaavailableDescription": "Envia uma notificação quando o título solicitado estiver disponível.", - "components.NotificationTypeSelector.mediaapprovedDescription": "Envia uma notificação quando a solicitação é aprovada." + "components.NotificationTypeSelector.mediaapprovedDescription": "Envia uma notificação quando a solicitação é aprovada.", + "i18n.request": "Solicitar" }