diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 6d369e18..972ad2f3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -2,7 +2,7 @@ name: Bug report about: Create a report to help us improve title: '' -labels: bug +labels: 'awaiting-triage, type:bug' assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 5f0a04ce..b9ea9edd 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -2,7 +2,7 @@ name: Feature request about: Suggest an idea for this project title: '' -labels: enhancement +labels: 'awaiting-triage, type:enhancement' assignees: '' --- diff --git a/.gitignore b/.gitignore index ebd30895..70bef39d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,7 @@ config/db/db.sqlite3 config/settings.json # logs -config/logs/*.log +config/logs/*.log* # dist files dist diff --git a/overseerr-api.yml b/overseerr-api.yml index 268fa896..f6d6aab5 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -824,7 +824,9 @@ components: authPass: type: string nullable: true - + allowSelfSigned: + type: boolean + example: false PersonDetail: type: object properties: diff --git a/package.json b/package.json index 28d742a9..6d0c11c9 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "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", "reflect-metadata": "^0.1.13", "sqlite3": "^5.0.0", diff --git a/public/images/radarr_logo.png b/public/images/radarr_logo.png index f192d0bc..d6165cf5 100644 Binary files a/public/images/radarr_logo.png and b/public/images/radarr_logo.png differ diff --git a/server/api/themoviedb.ts b/server/api/themoviedb.ts index 0f876396..43f9f364 100644 --- a/server/api/themoviedb.ts +++ b/server/api/themoviedb.ts @@ -71,7 +71,7 @@ export interface TmdbTvResult extends TmdbMediaResult { name: string; original_name: string; origin_country: string[]; - first_air_Date: string; + first_air_date: string; } export interface TmdbPersonResult { diff --git a/server/entity/MediaRequest.ts b/server/entity/MediaRequest.ts index e5c99367..09a80680 100644 --- a/server/entity/MediaRequest.ts +++ b/server/entity/MediaRequest.ts @@ -88,6 +88,7 @@ export class MediaRequest { message: movie.overview, image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${movie.poster_path}`, notifyUser: this.requestedBy, + media, }); } @@ -98,6 +99,7 @@ export class MediaRequest { message: tv.overview, image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${tv.poster_path}`, notifyUser: this.requestedBy, + media, extra: [ { name: 'Seasons', @@ -136,6 +138,7 @@ export class MediaRequest { message: movie.overview, image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${movie.poster_path}`, notifyUser: this.requestedBy, + media, }); } else if (this.media.mediaType === MediaType.TV) { const tv = await tmdb.getTvShow({ tvId: this.media.tmdbId }); @@ -144,6 +147,7 @@ export class MediaRequest { message: tv.overview, image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${tv.poster_path}`, notifyUser: this.requestedBy, + media, extra: [ { name: 'Seasons', diff --git a/server/job/plexsync/index.ts b/server/job/plexsync/index.ts index 31880e19..3f600c38 100644 --- a/server/job/plexsync/index.ts +++ b/server/job/plexsync/index.ts @@ -17,7 +17,7 @@ const UPDATE_RATE = 4 * 1000; const imdbRegex = new RegExp(/imdb:\/\/(tt[0-9]+)/); const tmdbRegex = new RegExp(/tmdb:\/\/([0-9]+)/); -const tvdbRegex = new RegExp(/tvdb:\/\/([0-9]+)/); +const tvdbRegex = new RegExp(/tvdb:\/\/([0-9]+)|hama:\/\/tvdb-([0-9]+)/); const tmdbShowRegex = new RegExp(/themoviedb:\/\/([0-9]+)/); const plexRegex = new RegExp(/plex:\/\//); @@ -100,7 +100,7 @@ class JobPlexSync { let tmdbMovie: TmdbMovieDetails | undefined; const imdbMatch = plexitem.guid.match(imdbRegex); - const tmdbMatch = plexitem.guid.match(tmdbRegex); + const tmdbMatch = plexitem.guid.match(tmdbShowRegex); if (imdbMatch) { tmdbMovie = await this.tmdb.getMovieByImdbId({ diff --git a/server/job/schedule.ts b/server/job/schedule.ts index 4ce2f8f8..82945a46 100644 --- a/server/job/schedule.ts +++ b/server/job/schedule.ts @@ -20,7 +20,7 @@ export const startJobs = (): void => { jobPlexRecentSync.run(); }), }); - // Run full plex sync every 6 hours + // Run full plex sync every 24 hours scheduledJobs.push({ name: 'Plex Full Library Sync', job: schedule.scheduleJob('0 0 3 * * *', () => { diff --git a/server/lib/notifications/agents/agent.ts b/server/lib/notifications/agents/agent.ts index d04cabf0..98daf106 100644 --- a/server/lib/notifications/agents/agent.ts +++ b/server/lib/notifications/agents/agent.ts @@ -1,10 +1,12 @@ import { Notification } from '..'; +import Media from '../../../entity/Media'; import { User } from '../../../entity/User'; import { NotificationAgentConfig } from '../../settings'; export interface NotificationPayload { subject: string; notifyUser: User; + media?: Media; image?: string; message?: string; extra?: { name: string; value: string }[]; diff --git a/server/lib/notifications/agents/discord.ts b/server/lib/notifications/agents/discord.ts index 08239980..a0df2c4c 100644 --- a/server/lib/notifications/agents/discord.ts +++ b/server/lib/notifications/agents/discord.ts @@ -93,7 +93,8 @@ class DiscordAgent type: Notification, payload: NotificationPayload ): DiscordRichEmbed { - let color = EmbedColors.DEFAULT; + const settings = getSettings(); + let color = EmbedColors.DARK_PURPLE; const fields: Field[] = []; @@ -112,6 +113,13 @@ class DiscordAgent inline: true, } ); + + if (settings.main.applicationUrl) { + fields.push({ + name: 'View Media', + value: `${settings.main.applicationUrl}/${payload.media?.mediaType}/${payload.media?.tmdbId}`, + }); + } break; case Notification.MEDIA_APPROVED: color = EmbedColors.PURPLE; @@ -127,6 +135,13 @@ class DiscordAgent inline: true, } ); + + if (settings.main.applicationUrl) { + fields.push({ + name: 'View Media', + value: `${settings.main.applicationUrl}/${payload.media?.mediaType}/${payload.media?.tmdbId}`, + }); + } break; case Notification.MEDIA_AVAILABLE: color = EmbedColors.GREEN; @@ -142,6 +157,13 @@ class DiscordAgent inline: true, } ); + + if (settings.main.applicationUrl) { + fields.push({ + name: 'View Media', + value: `${settings.main.applicationUrl}/${payload.media?.mediaType}/${payload.media?.tmdbId}`, + }); + } break; } @@ -150,7 +172,7 @@ class DiscordAgent description: payload.message, color, timestamp: new Date().toISOString(), - author: { name: 'Overseerr' }, + author: { name: 'Overseerr', url: settings.main.applicationUrl }, fields: [ ...fields, // If we have extra data, map it to fields for discord notifications diff --git a/server/lib/notifications/agents/email.ts b/server/lib/notifications/agents/email.ts index 354a5150..90755e92 100644 --- a/server/lib/notifications/agents/email.ts +++ b/server/lib/notifications/agents/email.ts @@ -41,6 +41,11 @@ class EmailAgent host: emailSettings.smtpHost, port: emailSettings.smtpPort, secure: emailSettings.secure, + tls: emailSettings.allowSelfSigned + ? { + rejectUnauthorized: false, + } + : undefined, auth: emailSettings.authUser && emailSettings.authPass ? { @@ -89,7 +94,10 @@ class EmailAgent imageUrl: payload.image, timestamp: new Date().toTimeString(), requestedBy: payload.notifyUser.username, - actionUrl: applicationUrl, + actionUrl: applicationUrl + ? `${applicationUrl}/${payload.media?.mediaType}/${payload.media?.tmdbId}` + : undefined, + applicationUrl, requestType: 'New Request', }, }); @@ -110,7 +118,7 @@ class EmailAgent try { const email = this.getNewEmail(); - email.send({ + await email.send({ template: path.join( __dirname, '../../../templates/email/media-request' @@ -124,7 +132,10 @@ class EmailAgent imageUrl: payload.image, timestamp: new Date().toTimeString(), requestedBy: payload.notifyUser.username, - actionUrl: applicationUrl, + actionUrl: applicationUrl + ? `${applicationUrl}/${payload.media?.mediaType}/${payload.media?.tmdbId}` + : undefined, + applicationUrl, requestType: 'Request Approved', }, }); @@ -144,7 +155,7 @@ class EmailAgent try { const email = this.getNewEmail(); - email.send({ + await email.send({ template: path.join( __dirname, '../../../templates/email/media-request' @@ -158,7 +169,10 @@ class EmailAgent imageUrl: payload.image, timestamp: new Date().toTimeString(), requestedBy: payload.notifyUser.username, - actionUrl: applicationUrl, + actionUrl: applicationUrl + ? `${applicationUrl}/${payload.media?.mediaType}/${payload.media?.tmdbId}` + : undefined, + applicationUrl, requestType: 'Now Available', }, }); @@ -178,14 +192,14 @@ class EmailAgent try { const email = this.getNewEmail(); - email.send({ + await email.send({ template: path.join(__dirname, '../../../templates/email/test-email'), message: { to: payload.notifyUser.email, }, locals: { body: payload.message, - actionUrl: applicationUrl, + applicationUrl, }, }); return true; diff --git a/server/lib/settings.ts b/server/lib/settings.ts index 4b075af8..b0d2c45f 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -74,6 +74,7 @@ export interface NotificationAgentEmail extends NotificationAgentConfig { secure: boolean; authUser?: string; authPass?: string; + allowSelfSigned: boolean; }; } @@ -129,8 +130,9 @@ class Settings { options: { emailFrom: '', smtpHost: '127.0.0.1', - smtpPort: 465, + smtpPort: 587, secure: false, + allowSelfSigned: false, }, }, discord: { diff --git a/server/logger.ts b/server/logger.ts index e865163c..06c7d025 100644 --- a/server/logger.ts +++ b/server/logger.ts @@ -16,15 +16,23 @@ const hformat = winston.format.printf( const logger = winston.createLogger({ level: process.env.LOG_LEVEL || 'debug', format: winston.format.combine( - winston.format.colorize(), winston.format.splat(), winston.format.timestamp(), hformat ), transports: [ - new winston.transports.Console(), + new winston.transports.Console({ + format: winston.format.combine( + winston.format.colorize(), + winston.format.splat(), + winston.format.timestamp(), + hformat + ), + }), new winston.transports.File({ filename: path.join(__dirname, '../config/logs/overseerr.log'), + maxsize: 20971520, + maxFiles: 6, }), ], }); diff --git a/server/models/Search.ts b/server/models/Search.ts index 72e647e9..68d8dab8 100644 --- a/server/models/Search.ts +++ b/server/models/Search.ts @@ -78,7 +78,7 @@ export const mapTvResult = ( media?: Media ): TvResult => ({ id: tvResult.id, - firstAirDate: tvResult.first_air_Date, + firstAirDate: tvResult.first_air_date, genreIds: tvResult.genre_ids, // Some results from tmdb dont return the mediaType so we force it here! mediaType: tvResult.media_type || 'tv', diff --git a/server/subscriber/MediaSubscriber.ts b/server/subscriber/MediaSubscriber.ts index f63b14f6..fe826284 100644 --- a/server/subscriber/MediaSubscriber.ts +++ b/server/subscriber/MediaSubscriber.ts @@ -29,6 +29,7 @@ export class MediaSubscriber implements EntitySubscriberInterface { notifyUser: request.requestedBy, subject: movie.title, message: movie.overview, + media: entity, image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${movie.poster_path}`, }); }); @@ -79,6 +80,7 @@ export class MediaSubscriber implements EntitySubscriberInterface { message: tv.overview, notifyUser: request.requestedBy, image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${tv.poster_path}`, + media: entity, extra: [ { name: 'Seasons', diff --git a/server/templates/email/media-request/html.pug b/server/templates/email/media-request/html.pug index f87537d6..5304d41b 100644 --- a/server/templates/email/media-request/html.pug +++ b/server/templates/email/media-request/html.pug @@ -47,7 +47,7 @@ div(role='article' aria-roledescription='email' aria-label='' lang='en') padding-bottom: 25px;\ text-align: center;\ ') - a(href=actionUrl style='\ + a(href=applicationUrl style='\ text-shadow: 0 1px 0 #ffffff;\ font-weight: 700;\ font-size: 16px;\ @@ -92,7 +92,7 @@ div(role='article' aria-roledescription='email' aria-label='' lang='en') margin-bottom: 20px;\ color: #51545e;\ ') - a(href=actionUrl style='color: #3869d4') Open Overseerr + a(href=actionUrl style='color: #3869d4') Open Media in Overseerr tr td table.sm-w-full(align='center' style='\ diff --git a/server/templates/email/test-email/html.pug b/server/templates/email/test-email/html.pug index 46f4ca2c..d9f6063d 100644 --- a/server/templates/email/test-email/html.pug +++ b/server/templates/email/test-email/html.pug @@ -47,7 +47,7 @@ div(role='article' aria-roledescription='email' aria-label='' lang='en') padding-bottom: 25px;\ text-align: center;\ ') - a(href=actionUrl style='\ + a(href=applicationUrl style='\ text-shadow: 0 1px 0 #ffffff;\ font-weight: 700;\ font-size: 16px;\ @@ -74,7 +74,7 @@ div(role='article' aria-roledescription='email' aria-label='' lang='en') margin-bottom: 20px;\ color: #51545e;\ ') - a(href=actionUrl style='color: #3869d4') Open Overseerr + a(href=applicationUrl style='color: #3869d4') Open Overseerr tr td table.sm-w-full(align='center' style='\ diff --git a/src/assets/ellipsis.svg b/src/assets/ellipsis.svg new file mode 100644 index 00000000..2c286cb0 --- /dev/null +++ b/src/assets/ellipsis.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/Common/ImageFader/index.tsx b/src/components/Common/ImageFader/index.tsx index 4ccb9711..902e9a28 100644 --- a/src/components/Common/ImageFader/index.tsx +++ b/src/components/Common/ImageFader/index.tsx @@ -8,12 +8,18 @@ import React, { interface ImageFaderProps extends HTMLAttributes { backgroundImages: string[]; rotationSpeed?: number; + isDarker?: boolean; } const DEFAULT_ROTATION_SPEED = 6000; const ImageFader: ForwardRefRenderFunction = ( - { backgroundImages, rotationSpeed = DEFAULT_ROTATION_SPEED, ...props }, + { + backgroundImages, + rotationSpeed = DEFAULT_ROTATION_SPEED, + isDarker, + ...props + }, ref ) => { const [activeIndex, setIndex] = useState(0); @@ -29,6 +35,14 @@ const ImageFader: ForwardRefRenderFunction = ( }; }, [backgroundImages, rotationSpeed]); + let gradient = + 'linear-gradient(180deg, rgba(45, 55, 72, 0.47) 0%, #1A202E 100%)'; + + if (isDarker) { + gradient = + 'linear-gradient(180deg, rgba(17, 24, 39, 0.47) 0%, rgba(17, 24, 39, 1) 100%)'; + } + return (
{backgroundImages.map((imageUrl, i) => ( @@ -38,7 +52,7 @@ const ImageFader: ForwardRefRenderFunction = ( i === activeIndex ? 'opacity-100' : 'opacity-0' }`} style={{ - backgroundImage: `linear-gradient(180deg, rgba(45, 55, 72, 0.47) 0%, #1A202E 100%), url(${imageUrl})`, + backgroundImage: `${gradient}, url(${imageUrl})`, }} {...props} /> diff --git a/src/components/PersonDetails/index.tsx b/src/components/PersonDetails/index.tsx index c0582969..7eb32fa0 100644 --- a/src/components/PersonDetails/index.tsx +++ b/src/components/PersonDetails/index.tsx @@ -1,5 +1,6 @@ import { useRouter } from 'next/router'; import React, { useContext, useState } from 'react'; +import TruncateMarkup from 'react-truncate-markup'; import useSWR from 'swr'; import type { PersonDetail } from '../../../server/models/Person'; import type { PersonCombinedCreditsResponse } from '../../../server/interfaces/api/personInterfaces'; @@ -8,6 +9,8 @@ import LoadingSpinner from '../Common/LoadingSpinner'; import TitleCard from '../TitleCard'; import { defineMessages, useIntl } from 'react-intl'; import { LanguageContext } from '../../context/LanguageContext'; +import ImageFader from '../Common/ImageFader'; +import Ellipsis from '../../assets/ellipsis.svg'; const messages = defineMessages({ appearsin: 'Appears in', @@ -74,7 +77,21 @@ const PersonDetails: React.FC = () => { return ( <> -
+ {(sortedCrew || sortedCast) && ( +
+ media.backdropPath) + .map( + (media) => + `//image.tmdb.org/t/p/w1920_and_h800_multi_faces/${media.backdropPath}` + ) + .slice(0, 6)} + /> +
+ )} +
{data.profilePath && (
{
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}
setShowBio((show) => !show)} role="button" tabIndex={-1} > -
- {data.biography - ? data.biography - : intl.formatMessage(messages.nobiography)} -
- {!showBio && ( -
- )} + + } + > +
+ {data.biography + ? data.biography + : intl.formatMessage(messages.nobiography)} +
+
{(sortedCast ?? []).length > 0 && ( <> -
+
{intl.formatMessage(messages.appearsin)} @@ -157,7 +174,7 @@ const PersonDetails: React.FC = () => { )} {(sortedCrew ?? []).length > 0 && ( <> -
+
{intl.formatMessage(messages.crewmember)} diff --git a/src/components/RequestBlock/index.tsx b/src/components/RequestBlock/index.tsx index 06122ae3..41f0e1b1 100644 --- a/src/components/RequestBlock/index.tsx +++ b/src/components/RequestBlock/index.tsx @@ -84,7 +84,7 @@ const RequestBlock: React.FC = ({ request, onUpdate }) => {
)}
-
+
{request.status === MediaRequestStatus.PENDING && ( <> diff --git a/src/components/Settings/Notifications/NotificationsEmail.tsx b/src/components/Settings/Notifications/NotificationsEmail.tsx index 30459420..abcb22da 100644 --- a/src/components/Settings/Notifications/NotificationsEmail.tsx +++ b/src/components/Settings/Notifications/NotificationsEmail.tsx @@ -25,6 +25,9 @@ const messages = defineMessages({ emailsettingsfailed: 'Email notification settings failed to save.', test: 'Test', testsent: 'Test notification sent!', + allowselfsigned: 'Allow Self-Signed Certificates', + ssldisabletip: + 'SSL should be disabled on standard TLS connections (Port 587)', }); const NotificationsEmail: React.FC = () => { @@ -61,6 +64,7 @@ const NotificationsEmail: React.FC = () => { secure: data.options.secure, authUser: data.options.authUser, authPass: data.options.authPass, + allowSelfSigned: data.options.allowSelfSigned, }} validationSchema={NotificationsDiscordSchema} onSubmit={async (values) => { @@ -75,6 +79,7 @@ const NotificationsEmail: React.FC = () => { secure: values.secure, authUser: values.authUser, authPass: values.authPass, + allowSelfSigned: values.allowSelfSigned, }, }); addToast(intl.formatMessage(messages.emailsettingssaved), { @@ -116,7 +121,7 @@ const NotificationsEmail: React.FC = () => {
-
+
{errors.emailFrom && touched.emailFrom && ( -
{errors.emailFrom}
+
{errors.emailFrom}
)}
-
+
{errors.smtpHost && touched.smtpHost && ( -
{errors.smtpHost}
+
{errors.smtpHost}
)}
-
+
{errors.smtpPort && touched.smtpPort && ( -
{errors.smtpPort}
+
{errors.smtpPort}
)}
+
+
+
+ +
+
-
+
-
+
-
+
- + - +
-
+
- +
-
    +
      {data?.libraries.map((library) => ( = ({ onComplete }) => {
-

+

-

+

-
-
+
+
{dataSync?.running && (
= ({ onComplete }) => { }} /> )} -
+
{dataSync?.running ? `${dataSync.progress} of ${dataSync.total}` @@ -366,10 +366,10 @@ const SettingsPlex: React.FC = ({ onComplete }) => {
-
+
{dataSync?.running && ( <> -
+
= ({

diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx index d374c85e..4d4330d6 100644 --- a/src/components/TvDetails/index.tsx +++ b/src/components/TvDetails/index.tsx @@ -1,5 +1,10 @@ import React, { useState, useContext, useMemo } from 'react'; -import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; +import { + FormattedMessage, + FormattedDate, + defineMessages, + useIntl, +} from 'react-intl'; import useSWR from 'swr'; import { useRouter } from 'next/router'; import Button from '../Common/Button'; @@ -34,6 +39,7 @@ import { sortCrewPriority } from '../../utils/creditHelpers'; import { Crew } from '../../../server/models/common'; const messages = defineMessages({ + firstAirDate: 'First Air Date', userrating: 'User Rating', status: 'Status', originallanguage: 'Original Language', @@ -519,6 +525,21 @@ const TvDetails: React.FC = ({ tv }) => {
)} + {data.firstAirDate && ( +
+ + + + + + +
+ )}
diff --git a/src/i18n/locale/de.json b/src/i18n/locale/de.json index 9254654a..75c20262 100644 --- a/src/i18n/locale/de.json +++ b/src/i18n/locale/de.json @@ -88,8 +88,8 @@ "components.RequestModal.status": "Status", "components.Search.searchresults": "Suchergebnisse", "components.Settings.Notifications.agentenabled": "Agent aktiviert", - "components.Settings.Notifications.authPass": "Passwort", - "components.Settings.Notifications.authUser": "Benutzername", + "components.Settings.Notifications.authPass": "Auth Pass", + "components.Settings.Notifications.authUser": "Auth User", "components.Settings.Notifications.emailsender": "E-Mail-Absenderadresse", "components.Settings.Notifications.enableSsl": "SSL aktivieren", "components.Settings.Notifications.save": "Änderungen speichern", @@ -183,7 +183,7 @@ "components.Settings.jobname": "Auftragsname", "components.Settings.librariesRemaining": "Verbleibende Bibliotheken: {count}", "components.Settings.manualscan": "Manueller Bibliotheksscan", - "components.Settings.manualscanDescription": "Normalerweise wird dies nur einmal alle 6 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 Sie Plex zum ersten Mal konfigurieren, wird ein einmaliger vollständiger manueller Bibliotheksscan empfohlen!", "components.Settings.menuAbout": "Über", "components.Settings.menuGeneralSettings": "Allgemeine Einstellungen", "components.Settings.menuJobs": "Anträge", @@ -348,5 +348,32 @@ "components.Settings.toastApiKeyFailure": "Bei der Generierung eines neuen API-Schlüssels kam es zu einem Fehler.", "components.Settings.SonarrModal.animerootfolder": "Animestammverzeichnis", "components.Settings.SonarrModal.animequalityprofile": "Animequalitätsprofil", - "components.MovieDetails.studio": "Studio" + "components.MovieDetails.studio": "Studio", + "i18n.close": "Schließen", + "components.Settings.SettingsAbout.timezone": "Zeitzone", + "components.Settings.SettingsAbout.supportoverseerr": "Unterstützen Sie Overseerr", + "components.Settings.SettingsAbout.helppaycoffee": "Helfen Sie uns, für Kaffee zu bezahlen", + "components.Settings.SettingsAbout.Releases.viewongithub": "Ansicht auf GitHub", + "components.Settings.SettingsAbout.Releases.viewchangelog": "Änderungsprotokoll anzeigen", + "components.Settings.SettingsAbout.Releases.versionChangelog": "Änderungsprotokoll", + "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "Die Änderungen in Ihrer Version sind unten nicht verfügbar. Die neuesten Aktualisierungen finden Sie im GitHub-Repository.", + "components.Settings.SettingsAbout.Releases.runningDevelop": "Sie führen eine Entwicklungsversion von Overseerr aus!", + "components.Settings.SettingsAbout.Releases.releases": "Veröffentlichungen", + "components.Settings.SettingsAbout.Releases.releasedataMissing": "Informationen der Version nicht verfügbar. Ist GitHub offline?", + "components.Settings.SettingsAbout.Releases.latestversion": "Neuste Version", + "components.Settings.SettingsAbout.Releases.currentversion": "Aktuelle Version", + "components.Settings.Notifications.testsent": "Testbenachrichtigung gesendet!", + "components.Settings.Notifications.test": "Test", + "components.Settings.defaultPermissions": "Standardbenutzerberechtigungen", + "components.UserList.importfromplexerror": "Beim Importieren von Benutzern aus Plex ist ein Fehler aufgetreten", + "components.UserList.importfromplex": "Benutzer/innen aus Plex importieren", + "components.TvDetails.viewfullcrew": "Volles Team anzeigen", + "components.TvDetails.TvCrew.fullseriescrew": "Volles Serienteam", + "components.PersonDetails.crewmember": "Teammitglied", + "components.MovieDetails.viewfullcrew": "Volles Team anzeigen", + "components.MovieDetails.MovieCrew.fullcrew": "Volles Team", + "components.UserList.importedfromplex": "{userCount, plural, =0 {Keine neue Benutzer} one {# neuer Benutzer} other {# neue Benutzer}} aus Plex importiert", + "components.TvDetails.firstAirDate": "Erster Sendetermin", + "components.Settings.Notifications.ssldisabletip": "SSL sollte bei Standard-TLS-Verbindungen deaktiviert werden (Port 587)", + "components.Settings.Notifications.allowselfsigned": "Selbstsignierte Zertifikate zulassen" } diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index dda83fff..19cb5083 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -93,6 +93,7 @@ "components.RequestModal.status": "Status", "components.Search.searchresults": "Search Results", "components.Settings.Notifications.agentenabled": "Agent Enabled", + "components.Settings.Notifications.allowselfsigned": "Allow Self-Signed Certificates", "components.Settings.Notifications.authPass": "Auth Pass", "components.Settings.Notifications.authUser": "Auth User", "components.Settings.Notifications.discordsettingsfailed": "Discord notification settings failed to save.", @@ -105,6 +106,7 @@ "components.Settings.Notifications.saving": "Saving…", "components.Settings.Notifications.smtpHost": "SMTP Host", "components.Settings.Notifications.smtpPort": "SMTP Port", + "components.Settings.Notifications.ssldisabletip": "SSL should be disabled on standard TLS connections (Port 587)", "components.Settings.Notifications.test": "Test", "components.Settings.Notifications.testsent": "Test notification sent!", "components.Settings.Notifications.validationFromRequired": "You must provide an email sender address", @@ -227,7 +229,7 @@ "components.Settings.jobname": "Job Name", "components.Settings.librariesRemaining": "Libraries Remaining: {count}", "components.Settings.manualscan": "Manual Library Scan", - "components.Settings.manualscanDescription": "Normally, this will only be run once every 6 hours. Overseerr will check your Plex server's recently added more aggressively. If this is your first time configuring Plex, a one time full manual library scan is recommended!", + "components.Settings.manualscanDescription": "Normally, this will only be run once every 24 hours. Overseerr will check your Plex server's recently added more aggressively. If this is your first time configuring Plex, a one time full manual library scan is recommended!", "components.Settings.menuAbout": "About", "components.Settings.menuGeneralSettings": "General Settings", "components.Settings.menuJobs": "Jobs", @@ -289,6 +291,7 @@ "components.TvDetails.cast": "Cast", "components.TvDetails.decline": "Decline", "components.TvDetails.declinerequests": "Decline {requestCount} {requestCount, plural, one {Request} other {Requests}}", + "components.TvDetails.firstAirDate": "First Air Date", "components.TvDetails.manageModalClearMedia": "Clear All Media Data", "components.TvDetails.manageModalClearMediaWarning": "This will remove all media data including all requests for this item, irreversibly. If this item exists in your Plex library, the media info will be recreated next sync.", "components.TvDetails.manageModalNoRequests": "No Requests", diff --git a/src/i18n/locale/es.json b/src/i18n/locale/es.json index 999d3806..0bd7ba30 100644 --- a/src/i18n/locale/es.json +++ b/src/i18n/locale/es.json @@ -338,5 +338,31 @@ "components.Settings.RadarrModal.testFirstRootFolders": "Prueba la conexión para cargar carpetas raíz", "components.Settings.RadarrModal.testFirstQualityProfiles": "Prueba la conexión para cargar perfiles de calidad", "components.Settings.RadarrModal.loadingrootfolders": "Cargando carpetas raíz…", - "components.Settings.RadarrModal.loadingprofiles": "Cargando perfiles de calidad…" + "components.Settings.RadarrModal.loadingprofiles": "Cargando perfiles de calidad…", + "i18n.close": "Cerrar", + "components.TvDetails.showtype": "Tipo de Serie", + "components.TvDetails.network": "Red", + "components.TvDetails.anime": "Anime", + "components.Settings.toastSettingsSuccess": "Ajustes guardados.", + "components.Settings.toastSettingsFailure": "Algo salió mal guardando la configuración.", + "components.Settings.toastApiKeySuccess": "¡Nueva clave API generada!", + "components.Settings.toastApiKeyFailure": "Algo salió mal generando una nueva clave API.", + "components.Settings.defaultPermissions": "Permisos de usuario predeterminados", + "components.Settings.SonarrModal.animerootfolder": "Carpeta raíz de anime", + "components.Settings.SonarrModal.animequalityprofile": "Perfil de calidad de anime", + "components.Settings.SettingsAbout.timezone": "Zona horaria", + "components.Settings.SettingsAbout.supportoverseerr": "Apoya a Overseerr", + "components.Settings.SettingsAbout.helppaycoffee": "Págame un café", + "components.Settings.SettingsAbout.Releases.viewongithub": "Ver en GitHub", + "components.Settings.SettingsAbout.Releases.viewchangelog": "Ver registro de cambios", + "components.Settings.SettingsAbout.Releases.versionChangelog": "Cambios de la versión", + "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "Los cambios en su versión no estarán disponibles a continuación. Consulte el repositorio de GitHub para obtener las últimas actualizaciones.", + "components.Settings.SettingsAbout.Releases.runningDevelop": "¡Está ejecutando una versión de desarrollo de Overseerr!", + "components.Settings.SettingsAbout.Releases.releases": "Versiones", + "components.Settings.SettingsAbout.Releases.releasedataMissing": "Faltan datos de la versión. ¿GitHub está caído?", + "components.Settings.SettingsAbout.Releases.latestversion": "Última Versión", + "components.Settings.SettingsAbout.Releases.currentversion": "Versión Actual", + "components.Settings.Notifications.testsent": "¡Notificación de prueba enviada!", + "components.Settings.Notifications.test": "Comprobar", + "components.MovieDetails.studio": "Estudio" } diff --git a/src/i18n/locale/fr.json b/src/i18n/locale/fr.json index bb003703..665cf7fa 100644 --- a/src/i18n/locale/fr.json +++ b/src/i18n/locale/fr.json @@ -183,7 +183,7 @@ "components.Settings.jobname": "Nom de la tâche", "components.Settings.librariesRemaining": "Bibliothèques restantes : {count}", "components.Settings.manualscan": "Scan manuel des bibliothèques", - "components.Settings.manualscanDescription": "Normalement, le scan sera effectué une fois toutes les 6 heures seulement. Overseerr va vérifier les ajouts récents de votre serveur Plex de manière plus agressive. Si c'est votre première configuration de Plex, un scan complet unique de la bibliothèque est recommandé !", + "components.Settings.manualscanDescription": "Normalement, le scan sera effectué une fois toutes les 24 heures seulement. Overseerr va vérifier les ajouts récents de votre serveur Plex de manière plus agressive. Si c'est votre première configuration de Plex, un scan complet unique de la bibliothèque est recommandé !", "components.Settings.menuAbout": "À propos", "components.Settings.menuGeneralSettings": "Paramètres généraux", "components.Settings.menuJobs": "Tâches", @@ -348,5 +348,32 @@ "components.Settings.toastApiKeyFailure": "Une erreur s'est produite lors de la génération de la nouvelle clé API.", "components.Settings.SonarrModal.animerootfolder": "Dossier racine pour anime", "components.Settings.SonarrModal.animequalityprofile": "Profil qualité pour anime", - "components.MovieDetails.studio": "Studio" + "components.MovieDetails.studio": "Studio", + "components.Settings.SettingsAbout.supportoverseerr": "Soutenez Overseerr", + "i18n.close": "Fermer", + "components.Settings.SettingsAbout.timezone": "Fuseau horaire", + "components.Settings.SettingsAbout.helppaycoffee": "Aidez à payer le café", + "components.Settings.SettingsAbout.Releases.viewongithub": "Voir sur GitHub", + "components.Settings.SettingsAbout.Releases.viewchangelog": "Voir le journal des modifications", + "components.Settings.SettingsAbout.Releases.versionChangelog": "Journal des modifications de version", + "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "Les modifications apportées à votre version ne seront pas disponibles ci-dessous. Veuillez consulter le dépôt GitHub pour les dernières mises à jour.", + "components.Settings.SettingsAbout.Releases.runningDevelop": "Vous utilisez une version de développement d'Overseerr !", + "components.Settings.SettingsAbout.Releases.releases": "Versions", + "components.Settings.SettingsAbout.Releases.releasedataMissing": "Données de sortie manquantes. GitHub est-il en panne ?", + "components.Settings.SettingsAbout.Releases.latestversion": "Dernière version", + "components.Settings.SettingsAbout.Releases.currentversion": "Version actuelle", + "components.Settings.Notifications.testsent": "Notification de test envoyée !", + "components.Settings.Notifications.test": "Test", + "components.Settings.defaultPermissions": "Autorisations utilisateur par défaut", + "components.UserList.importfromplexerror": "Une erreur s'est produite lors de l'importation d'utilisateurs depuis Plex", + "components.UserList.importfromplex": "Importer des utilisateurs depuis Plex", + "components.UserList.importedfromplex": "{userCount, plural, =0 {Aucun nouvel utilisateur} one {# nouvel utilisateur} other {# nouveaux utilisateurs}} importé(s) depuis Plex", + "components.TvDetails.viewfullcrew": "Voir l'équipe complète de la série", + "components.TvDetails.TvCrew.fullseriescrew": "Équipe complète de la série", + "components.PersonDetails.crewmember": "Membre de l'équipe", + "components.MovieDetails.viewfullcrew": "Voir l'équipe complète", + "components.MovieDetails.MovieCrew.fullcrew": "Équipe complète", + "components.TvDetails.firstAirDate": "Date de première diffusion", + "components.Settings.Notifications.ssldisabletip": "Le SSL doit être désactivé sur les connexions TLS standard (Port 587)", + "components.Settings.Notifications.allowselfsigned": "Autoriser les certificats autosignés" } diff --git a/src/i18n/locale/it.json b/src/i18n/locale/it.json index 311ae6a8..959dddbb 100644 --- a/src/i18n/locale/it.json +++ b/src/i18n/locale/it.json @@ -49,7 +49,7 @@ "components.RequestList.requestedAt": "Richiesto", "components.RequestList.previous": "Precedente", "components.RequestList.next": "Successivo", - "components.RequestList.modifiedBy": "Ultima modifica da", + "components.RequestList.modifiedBy": "Ultima modifica", "components.RequestList.mediaInfo": "Media", "components.RequestList.RequestItem.seasons": "Stagioni", "components.RequestList.RequestItem.requestedby": "Richiesto da {username}", @@ -92,7 +92,7 @@ "components.MovieDetails.approve": "Approva", "components.MovieDetails.MovieCast.fullcast": "Cast completo", "components.Login.signinplex": "Accedi per continuare", - "components.Layout.alphawarning": "Questo software è in ALPHA. Tutto può smettere di funzionare o diventare instabile. Aiutaci riportando i problemi su Overseerr GitHub!", + "components.Layout.alphawarning": "Questo programma è in ALPHA. Tutto può smettere di funzionare o diventare instabile. Aiutaci segnalando i problemi su Overseerr GitHub!", "components.Layout.UserDropdown.signout": "Esci", "components.Layout.Sidebar.users": "Utenti", "components.Layout.Sidebar.settings": "Impostazioni", @@ -142,18 +142,18 @@ "i18n.deleting": "Eliminazione…", "i18n.delete": "Elimina", "pages.oops": "Ops", - "components.Settings.RadarrModal.rootfolder": "Cartella radice", - "components.Settings.RadarrModal.selectRootFolder": "Seleziona una cartella radice", + "components.Settings.RadarrModal.rootfolder": "Cartella principale", + "components.Settings.RadarrModal.selectRootFolder": "Seleziona una cartella principale", "components.Settings.RadarrModal.selectQualityProfile": "Seleziona un profilo qualità", "components.Settings.RadarrModal.selectMinimumAvailability": "Seleziona la disponibilità minima", - "components.Settings.RadarrModal.save": "Salva i cambiamenti", + "components.Settings.RadarrModal.save": "Salva le modifiche", "components.Settings.RadarrModal.qualityprofile": "Profilo qualità", "components.Settings.RadarrModal.minimumAvailability": "Disponibilità minima", "components.Settings.RadarrModal.editradarr": "Modifica server Radarr", "components.Settings.RadarrModal.defaultserver": "Server predefinito", "components.Settings.RadarrModal.apiKey": "Chiave API", "components.Settings.RadarrModal.add": "Aggiungi un server", - "components.Settings.Notifications.save": "Salva i cambiamenti", + "components.Settings.Notifications.save": "Salva le modifiche", "components.Settings.Notifications.discordsettingsfailed": "Impossibile salvare le impostazioni di notifica Discord.", "components.RequestModal.requesttitle": "Richiedi {title}", "components.RequestModal.requestfrom": "Al momento è in sospeso una richiesta da {username}", @@ -187,7 +187,7 @@ "components.Settings.startscan": "Avvia la scansione", "components.Settings.ssl": "SSL", "components.Settings.saving": "Salvataggio…", - "components.Settings.save": "Salva i cambiamenti", + "components.Settings.save": "Salva le modifiche", "components.Settings.runnow": "Esegui ora", "components.Settings.radarrsettings": "Impostazioni Radarr", "components.Settings.plexsettings": "Impostazioni Plex", @@ -201,10 +201,10 @@ "components.Settings.menuServices": "Servizi", "components.Settings.menuPlexSettings": "Plex", "components.Settings.menuNotifications": "Notifiche", - "components.Settings.menuLogs": "Registri", + "components.Settings.menuLogs": "Log", "components.Settings.menuGeneralSettings": "Impostazioni generali", - "components.Settings.menuAbout": "Informazioni", - "components.Settings.manualscan": "Scansione manuale della biblioteca", + "components.Settings.menuAbout": "Info", + "components.Settings.manualscan": "Scansione manuale della libreria", "components.Settings.librariesRemaining": "Biblioteche rimanenti: {count}", "components.Settings.hostname": "Nome host/IP", "components.Settings.generalsettingsDescription": "Queste sono impostazioni relative alla configurazione generale di Overseerr.", @@ -214,15 +214,15 @@ "components.Settings.delete": "Elimina", "components.Settings.default4k": "4K predefinito", "components.Settings.default": "Predefinito", - "components.Settings.currentlibrary": "Biblioteca corrente: {name}", + "components.Settings.currentlibrary": "Libreria corrente: {name}", "components.Settings.copied": "Chiave API copiata negli appunti", "components.Settings.cancelscan": "Annulla l'analisi", "components.Settings.applicationurl": "URL applicazione", "components.Settings.apikey": "Chiave API", "components.Settings.addsonarr": "Aggiungi un server Sonarr", - "components.Settings.addradarr": "Aggiungi un server radarr", + "components.Settings.addradarr": "Aggiungi un server Radarr", "components.Settings.activeProfile": "Profilo attivo", - "components.Settings.SonarrModal.validationRootFolderRequired": "È necessario selezionare una cartella radice", + "components.Settings.SonarrModal.validationRootFolderRequired": "È necessario selezionare una cartella principale", "components.Settings.SonarrModal.validationProfileRequired": "È necessario selezionare un profilo", "components.Settings.SonarrModal.validationPortRequired": "È necessario fornire una porta", "components.Settings.SonarrModal.validationNameRequired": "È necessario fornire un nome di server", @@ -230,18 +230,18 @@ "components.Settings.SonarrModal.validationApiKeyRequired": "È necessario fornire una chiave API", "components.Settings.SonarrModal.toastRadarrTestSuccess": "Stabilita la connessione Sonarr!", "components.Settings.SonarrModal.toastRadarrTestFailure": "Impossibile connettersi a Sonarr Server", - "components.Settings.SonarrModal.testFirstRootFolders": "Testa la connessione per caricare le cartelle radice", + "components.Settings.SonarrModal.testFirstRootFolders": "Testa la connessione per caricare le cartelle", "components.Settings.SonarrModal.testFirstQualityProfiles": "Testa la connessione per caricare profili di qualità", "components.Settings.SonarrModal.servernamePlaceholder": "Un server Sonarr", "components.Settings.SonarrModal.servername": "Nome server", "components.Settings.SonarrModal.server4k": "Server 4K", - "components.Settings.SonarrModal.selectRootFolder": "Seleziona una cartella radice", + "components.Settings.SonarrModal.selectRootFolder": "Seleziona una cartella principale", "components.Settings.SonarrModal.selectQualityProfile": "Seleziona un profilo qualità", "components.Settings.SonarrModal.seasonfolders": "Cartelle stagione", - "components.Settings.SonarrModal.save": "Salva i cambiamenti", - "components.Settings.SonarrModal.rootfolder": "Cartella radice", + "components.Settings.SonarrModal.save": "Salva le modifiche", + "components.Settings.SonarrModal.rootfolder": "Cartella principale", "components.Settings.SonarrModal.qualityprofile": "Profilo qualità", - "components.Settings.SonarrModal.loadingrootfolders": "Caricamento delle cartelle radice in…", + "components.Settings.SonarrModal.loadingrootfolders": "Caricamento delle cartelle…", "components.Settings.SonarrModal.loadingprofiles": "Caricamento profili qualità…", "components.Settings.SonarrModal.editsonarr": "Modifica server Sonarr", "components.Settings.SonarrModal.defaultserver": "Server predefinito", @@ -250,16 +250,16 @@ "components.Settings.SonarrModal.baseUrl": "URL di base", "components.Settings.SonarrModal.apiKeyPlaceholder": "La tua chiave API Sonarr", "components.Settings.SonarrModal.apiKey": "Chiave API", - "components.Settings.SonarrModal.animerootfolder": "Cartella radice anime", + "components.Settings.SonarrModal.animerootfolder": "Cartella principale Anime", "components.Settings.SonarrModal.animequalityprofile": "Profilo qualità anime", "components.Settings.SonarrModal.add": "Aggiungi un server", "components.Settings.SettingsAbout.totalrequests": "Totale richieste", "components.Settings.SettingsAbout.totalmedia": "Media totali", - "components.Settings.SettingsAbout.overseerrinformation": "Informazioni su Overseerr", + "components.Settings.SettingsAbout.overseerrinformation": "Info su Overseerr", "components.Settings.SettingsAbout.githubdiscussions": "Discussioni su GitHub", "components.Settings.SettingsAbout.gettingsupport": "Ottieni aiuto", "components.Settings.SettingsAbout.clickheretojoindiscord": "Clicca qui per unirti al nostro server Discord.", - "components.Settings.RadarrModal.validationRootFolderRequired": "È necessario selezionare una cartella radice", + "components.Settings.RadarrModal.validationRootFolderRequired": "È necessario selezionare una cartella principale", "components.Settings.RadarrModal.validationProfileRequired": "È necessario selezionare un profilo", "components.Settings.RadarrModal.validationPortRequired": "È necessario fornire una porta", "components.Settings.RadarrModal.validationNameRequired": "È necessario fornire un nome di server", @@ -268,12 +268,12 @@ "components.Settings.RadarrModal.validationApiKeyRequired": "È necessario fornire una chiave API", "components.Settings.RadarrModal.toastRadarrTestSuccess": "Stabilita la connessione Radarr!", "components.Settings.RadarrModal.toastRadarrTestFailure": "Impossibile connettersi al server Radarr", - "components.Settings.RadarrModal.testFirstRootFolders": "Testa la connessione per caricare le cartelle radice", + "components.Settings.RadarrModal.testFirstRootFolders": "Testa la connessione per caricare le cartelle", "components.Settings.RadarrModal.testFirstQualityProfiles": "Testa la connessione per caricare profili qualità", "components.Settings.RadarrModal.servernamePlaceholder": "Un server Radarr", "components.Settings.RadarrModal.servername": "Nome server", "components.Settings.RadarrModal.server4k": "Server 4K", - "components.Settings.RadarrModal.loadingrootfolders": "Caricamento delle cartelle radice in…", + "components.Settings.RadarrModal.loadingrootfolders": "Caricamento delle cartelle…", "components.Settings.RadarrModal.loadingprofiles": "Caricamento profili di qualità…", "components.Settings.RadarrModal.createradarr": "Crea un nuovo server Radarr", "components.Settings.RadarrModal.baseUrlPlaceholder": "Esempio: /radarr", @@ -288,8 +288,8 @@ "components.Settings.Notifications.smtpHost": "Host SMTP", "components.Settings.Notifications.enableSsl": "Abilita SSL", "components.Settings.Notifications.discordsettingssaved": "Impostazioni di notifica Discord salvate!", - "components.Settings.Notifications.authUser": "Nome utente", - "components.Settings.Notifications.authPass": "Password", + "components.Settings.Notifications.authUser": "Auth User", + "components.Settings.Notifications.authPass": "Auth Pass", "components.RequestModal.requestseasons": "Richiedi {seasonCount} {seasonCount, plural, one {Season} other {Seasons}}", "components.RequestList.showingresults": "Visualizzazione dei risultati da {from} a {to} di {total}", "components.UserEdit.userfail": "Qualcosa è andato storto salvando l'utente.", @@ -306,12 +306,12 @@ "components.TvDetails.unavailable": "Non disponibile", "components.TvDetails.status": "Stato", "components.TvDetails.similarsubtext": "Altre serie simili a {title}", - "components.TvDetails.similar": "Serie simile", + "components.TvDetails.similar": "Serie simili", "components.TvDetails.showtype": "Tipo di serie", "components.TvDetails.requestmore": "Richiedi di più", "components.TvDetails.request": "Richiesta", "components.TvDetails.recommendationssubtext": "Se ti è piaciuto {title}, potrebbe anche piacerti…", - "components.TvDetails.recommendations": "Consigli", + "components.TvDetails.recommendations": "Consigliati", "components.TvDetails.pending": "In sospeso", "components.TvDetails.overviewunavailable": "Trama non disponibile", "components.TvDetails.overview": "Trama", @@ -328,12 +328,12 @@ "components.Setup.signinMessage": "Comincia accedendo con il tuo account Plex", "components.Settings.sync": "Sincronizza le librerie di Plex", "components.Settings.sonarrsettings": "Impostazioni Sonarr", - "components.Settings.sonarrSettingsDescription": "Imposta la connessione al tuo Sonarr qui sotto. È possibile avere più instanze, ma solo due attive come predefinite nello stesso momento (uno per l'HD standard e uno per 4K). Gli amministratori possono ignorare quale server è utilizzato per le nuove richieste.", - "components.Settings.radarrSettingsDescription": "Imposta la connessione al tuo Radarr qui sotto. È possibile avere più instanze, ma solo due attive come predefinite nello stesso momento (uno per l'HD standard e uno per 4K). Gli amministratori possono ignorare quale server è utilizzato per le nuove richieste.", - "components.Settings.plexsettingsDescription": "Configura le impostazioni per il tuo server Plex. Overseerr utilizza il tuo server Plex per scansionare la tua libreria a intervealli per vedere quali elementi sono disponibili.", + "components.Settings.sonarrSettingsDescription": "Configura Sonarr qui sotto. È possibile avere più istanze, ma solo due predefinite contemporaneamente (uno per l'HD standard e uno per 4K). Gli amministratori possono ignorare quale server è utilizzato per le nuove richieste.", + "components.Settings.radarrSettingsDescription": "Configura Radarr qui sotto. È possibile avere più istanze, ma solo due predefinite contemporaneamente (uno per l'HD standard e uno per 4K). Gli amministratori possono ignorare quale server è utilizzato per le nuove richieste.", + "components.Settings.plexsettingsDescription": "Configura le impostazioni del tuo server Plex. Overseerr scansiona la tua libreria Plex a intervalli regolari alla ricerca di nuovi contenuti.", "components.Settings.plexlibrariesDescription": "Le librerie che verranno scansionate da Overseerr alla ricerca di titoli. Se non ci sono librerie, configura e salva le impostazioni di connessione a Plex e fai click sul pulsante qui sotto.", "components.Settings.plexlibraries": "Librerie Plex", - "components.Settings.manualscanDescription": "Normalmente, questo verrà eseguito ogni 6 ore. Overseerr controllerà in modo più aggressivo i server Plex aggiunti di recente. Se è la prima volta che configuri Plex, si consiglia una scansione manuale completa della libreria!", + "components.Settings.manualscanDescription": "Normalmente, questo verrà eseguito ogni 24 ore. Overseerr controllerà in modo più aggressivo i server Plex aggiunti di recente. Se è la prima volta che configuri Plex, si consiglia una scansione manuale completa della libreria!", "components.Settings.port": "Porta", "components.Settings.servername": "Nome server (impostato automaticamente dopo il salvataggio)", "components.Settings.servernamePlaceholder": "Nome server Plex", @@ -348,5 +348,31 @@ "pages.somethingWentWrong": "{statusCode} — Qualcosa è andato storto", "pages.serviceUnavailable": "{statusCode} — Servizio non disponibile", "pages.returnHome": "Ritorna alla pagina iniziale", - "pages.pageNotFound": "404 — Pagina non trovata" + "pages.pageNotFound": "404 — Pagina non trovata", + "i18n.close": "Chiudi", + "components.Settings.SettingsAbout.timezone": "Fuso orario", + "components.Settings.SettingsAbout.supportoverseerr": "Sostieni Overseerr", + "components.Settings.SettingsAbout.helppaycoffee": "Offri un caffè", + "components.Settings.SettingsAbout.Releases.viewongithub": "Visualizza su GitHub", + "components.Settings.SettingsAbout.Releases.viewchangelog": "Visualizza il changelog", + "components.Settings.SettingsAbout.Releases.versionChangelog": "Changelog versione", + "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "Il changelog di questa versione non è disponibile qui sotto. Puoi andare surepository GitHub per gli ultimi aggiornamenti.", + "components.Settings.SettingsAbout.Releases.runningDevelop": "Stai eseguendo una versione in sviluppo di Overseerr!", + "components.Settings.SettingsAbout.Releases.releases": "Versioni", + "components.Settings.SettingsAbout.Releases.releasedataMissing": "Dati di versione mancanti. GitHub è down?", + "components.Settings.SettingsAbout.Releases.latestversion": "Ultima versione", + "components.Settings.SettingsAbout.Releases.currentversion": "Versione attuale", + "components.Settings.Notifications.testsent": "Notifica di prova inviata!", + "components.Settings.Notifications.test": "Test", + "components.Settings.defaultPermissions": "Autorizzazioni utente predefinite", + "components.UserList.importfromplexerror": "Qualcosa è andato storto durante l'importazione degli utenti da Plex", + "components.UserList.importfromplex": "Importa utenti da Plex", + "components.UserList.importedfromplex": "{userCount, plural, =0 {Nessun utente importato} one {# nuovo utente importato} other {# nuovi utenti importati}} da Plex", + "components.TvDetails.viewfullcrew": "Vedi troupe completa", + "components.TvDetails.TvCrew.fullseriescrew": "Troupe completa serie", + "components.PersonDetails.crewmember": "Membro della troupe", + "components.MovieDetails.MovieCrew.fullcrew": "Troupe completa", + "components.MovieDetails.viewfullcrew": "Vedi troupe completa", + "components.Settings.Notifications.ssldisabletip": "SSL dovrebbe essere disabilitato sulle connessioni standard TLS (Porta 587)", + "components.Settings.Notifications.allowselfsigned": "Consenti i certificati autofirmati" } diff --git a/src/i18n/locale/ja.json b/src/i18n/locale/ja.json index 109649b4..0d50e814 100644 --- a/src/i18n/locale/ja.json +++ b/src/i18n/locale/ja.json @@ -348,5 +348,22 @@ "components.Settings.RadarrModal.testFirstQualityProfiles": "画質プロファイルをロードするには先に接続をテストしてください", "components.Settings.RadarrModal.loadingprofiles": "画質プロファイルの読込中…", "components.Settings.RadarrModal.loadingrootfolders": "ルートフォルダー読込中…", - "components.MovieDetails.studio": "スタジオ" + "components.MovieDetails.studio": "スタジオ", + "components.Settings.Notifications.test": "テスト", + "i18n.close": "閉じる", + "components.Settings.defaultPermissions": "デフォルトのユーザー権限", + "components.Settings.SettingsAbout.timezone": "タイムゾーン", + "components.Settings.SettingsAbout.supportoverseerr": "Overseerrを応援", + "components.Settings.SettingsAbout.helppaycoffee": "開発者のコーヒーのためにチップを", + "components.Settings.SettingsAbout.Releases.viewongithub": "GitHubで見る", + "components.Settings.SettingsAbout.Releases.viewchangelog": "変更履歴参照", + "components.Settings.SettingsAbout.Releases.versionChangelog": "バージョン変更履歴", + "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "お使いのバージョンのパッチノート以下に記載されていません。最新のアップデートはGitHubリポジトリをご覧ください。", + "components.Settings.SettingsAbout.Releases.runningDevelop": "Overseerrの開発バージョンを実行しています。", + "components.Settings.SettingsAbout.Releases.releases": "リリース", + "components.Settings.SettingsAbout.Releases.releasedataMissing": "リリースデータがありません。GitHubはダウンしていますか?", + "components.Settings.SettingsAbout.Releases.latestversion": "最新バージョン", + "components.Settings.SettingsAbout.Releases.currentversion": "現在のバージョン", + "components.Settings.Notifications.testsent": "テスト通知が送信されました。", + "components.MovieDetails.MovieCrew.fullcrew": "フルクルー" } diff --git a/src/i18n/locale/nl.json b/src/i18n/locale/nl.json index 033595b1..46373f8a 100644 --- a/src/i18n/locale/nl.json +++ b/src/i18n/locale/nl.json @@ -333,5 +333,11 @@ "components.Settings.RadarrModal.testFirstRootFolders": "Test je connectie om hoofdfolders te laden", "components.Settings.RadarrModal.testFirstQualityProfiles": "Test je connectie om kwaliteitsprofielen te laden", "components.Settings.RadarrModal.loadingrootfolders": "Bezig met laden van hoofdfolders…", - "components.Settings.RadarrModal.loadingprofiles": "Bezig met laden van kwaliteitsprofielen…" + "components.Settings.RadarrModal.loadingprofiles": "Bezig met laden van kwaliteitsprofielen…", + "components.Settings.SettingsAbout.Releases.releasedataMissing": "Publicatiedatum mist. Is GitHub offline?", + "components.Settings.SettingsAbout.Releases.latestversion": "Laatste versie", + "components.Settings.SettingsAbout.Releases.currentversion": "Huidige versie", + "components.Settings.Notifications.testsent": "Test notificatie verzonden!", + "components.Settings.Notifications.test": "Test", + "components.MovieDetails.studio": "Studio" } diff --git a/src/i18n/locale/pt_BR.json b/src/i18n/locale/pt_BR.json index 7f2b856c..8dda45e9 100644 --- a/src/i18n/locale/pt_BR.json +++ b/src/i18n/locale/pt_BR.json @@ -8,8 +8,8 @@ "components.RequestCard.requestedby": "Solicitado por {username}", "components.RequestBlock.seasons": "Temporadas", "components.PlexLoginButton.loginwithplex": "Entrar com", - "components.PlexLoginButton.loggingin": "Fazendo login...", - "components.PlexLoginButton.loading": "Carregando...", + "components.PlexLoginButton.loggingin": "Fazendo login…", + "components.PlexLoginButton.loading": "Carregando…", "components.PersonDetails.nobiography": "Biografia não disponível.", "components.PersonDetails.ascharacter": "como {character}", "components.PersonDetails.appearsin": "Aparece em", @@ -24,11 +24,11 @@ "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 {title}, você provavelmente irá gostar…", "components.MovieDetails.recommendations": "Recomendações", "components.MovieDetails.pending": "Pendente", - "components.MovieDetails.overviewunavailable": "Visão Geral Indisponível", - "components.MovieDetails.overview": "Visão Geral", + "components.MovieDetails.overviewunavailable": "Sinopse indisponível", + "components.MovieDetails.overview": "Sinopse", "components.MovieDetails.originallanguage": "Língua original", "components.MovieDetails.manageModalTitle": "Gerenciar Filme", "components.MovieDetails.manageModalRequests": "Solicitações", @@ -61,12 +61,12 @@ "components.Discover.nopending": "Nenhuma Solicitação Pendente", "components.Discover.discovertv": "Séries Populares", "components.Discover.discovermovies": "Filmes Populares", - "components.Settings.SonarrModal.testing": "Testando...", - "components.Settings.SonarrModal.saving": "Salvando...", - "components.Settings.RadarrModal.testing": "Testando...", - "components.Settings.RadarrModal.saving": "Salvando...", - "components.Settings.Notifications.saving": "Salvando...", - "components.RequestModal.cancelling": "Cancelando...", + "components.Settings.SonarrModal.testing": "Testando…", + "components.Settings.SonarrModal.saving": "Salvando…", + "components.Settings.RadarrModal.testing": "Testando…", + "components.Settings.RadarrModal.saving": "Salvando…", + "components.Settings.Notifications.saving": "Salvando…", + "components.RequestModal.cancelling": "Cancelando…", "components.Settings.plexlibraries": "Bibliotecas do Plex", "components.Settings.notrunning": "Parado", "components.Settings.notificationsettingsDescription": "Aqui você pode escolher e selecionar os tipos de notificações e através de quais serviços deseja enviar.", @@ -84,7 +84,7 @@ "components.Settings.menuJobs": "Tarefas", "components.Settings.menuGeneralSettings": "Configurações Gerais", "components.Settings.menuAbout": "Sobre", - "components.Settings.manualscanDescription": "Normalmente, isso só será executado uma vez a cada 6 horas. Overseerr irá checar em detalhes items recentemente adicionados ao seu servidor Plex. Se essa é a primeira vez que você configura um servidor Plex, é recomendado a varredura completa de sua biblioteca!", + "components.Settings.manualscanDescription": "Normalmente, isso só será executado uma vez a cada 24 horas. Overseerr irá checar em detalhes items recentemente adicionados ao seu servidor Plex. Se essa é a primeira vez que você configura um servidor Plex, é recomendado a varredura completa de sua biblioteca!", "components.Settings.manualscan": "Varredura Manual da Biblioteca", "components.Settings.librariesRemaining": "Bibliotecas Restantes: {count}", "components.Settings.jobname": "Nome da Tarefa", @@ -228,5 +228,149 @@ "components.RequestList.previous": "Anterior", "components.RequestList.RequestItem.seasons": "Temporadas", "components.RequestList.RequestItem.notavailable": "N/A", - "components.RequestCard.all": "Todas" + "components.RequestCard.all": "Todas", + "components.Setup.continue": "Continuar", + "components.Setup.configureservices": "Configurar Serviços", + "components.Setup.configureplex": "Configurar Plex", + "components.Settings.validationPortRequired": "Você deve prover uma porta", + "components.Settings.validationHostnameRequired": "Você deve prover o Nome do Servidor/IP", + "components.Settings.toastSettingsSuccess": "Configurações salvas.", + "components.Settings.toastSettingsFailure": "Algo de errado ao salvar configurações.", + "components.Settings.toastApiKeySuccess": "Nova chave de API gerada!", + "components.Settings.toastApiKeyFailure": "Algo deu errado ao gerar a nova chave de API.", + "components.Settings.syncing": "Sincronizando…", + "components.Settings.sync": "Sincronizar Bibliotecas do Plex", + "components.Settings.startscan": "Iniciar Varredura", + "components.Settings.ssl": "SSL", + "components.Settings.sonarrsettings": "Configurações do Sonarr", + "components.Settings.servernamePlaceholder": "Nome do Servidor Plex", + "components.Settings.servername": "Nome do Servidor (Automaticamente definido após você salvar)", + "components.Settings.saving": "Salvando…", + "components.Settings.save": "Salvar Mudanças", + "components.Settings.runnow": "Executar Agora", + "components.Settings.radarrsettings": "Configurações do Radarr", + "components.Settings.port": "Porta", + "components.Settings.plexsettingsDescription": "Configure os dados de conexão com servidor Plex. Overseerr irá escanear sua biblioteca em intervalos e checar por novo conteúdo.", + "components.Settings.plexsettings": "Configurações do Plex", + "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.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.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.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.manageModalRequests": "Solicitações", + "components.TvDetails.manageModalNoRequests": "Nenhuma Solicitação", + "components.TvDetails.manageModalClearMedia": "Limpar Todos Dados de Mídia", + "components.TvDetails.declinerequests": "Rejeitar {requestCount} {requestCount, plural, one {Solicitação} other {Solicitações}}", + "components.TvDetails.decline": "Rejeitar", + "components.TvDetails.cast": "Elenco", + "components.TvDetails.cancelrequest": "Cancelar Solicitação", + "components.TvDetails.available": "Disponível", + "components.TvDetails.approverequests": "Aprovar {requestCount} {requestCount, plural, one {Solicitação} other {Solicitações}}", + "components.TvDetails.approve": "Aprovar", + "components.TvDetails.anime": "Animes", + "components.TvDetails.TvCast.fullseriescast": "Elenco Completo da Série", + "components.TitleCard.tvshow": "Séries", + "components.TitleCard.movie": "Filme", + "components.Slider.noresults": "Nenhum Resultado", + "components.Setup.welcome": "Bem-Vindo ao Overseerr", + "components.Setup.tip": "Dica", + "components.Setup.syncingbackground": "A sincronização será executada em segundo plano. Você pode continuar a configuração enquanto isso.", + "components.Setup.signinMessage": "Comece fazendo login com sua conta Plex", + "components.Setup.loginwithplex": "Entrar com Plex", + "components.Setup.finishing": "Finalizando…", + "components.Setup.finish": "Finalizar Configurações", + "components.TvDetails.requestmore": "Solicitar Mais", + "pages.somethingWentWrong": "{statusCode} - Algo deu errado", + "pages.serviceUnavailable": "{statusCode} - Serviço Indisponível", + "pages.returnHome": "Voltar Para Página Inicial", + "pages.oops": "Opa", + "pages.internalServerError": "{statusCode} - Erro Interno no Servidor", + "i18n.unavailable": "Indisponível", + "i18n.tvshows": "Séries", + "i18n.processing": "Processando…", + "i18n.pending": "Pendente", + "i18n.partiallyavailable": "Parcialmente Disponível", + "i18n.movies": "Filmes", + "i18n.declined": "Rejeitado", + "i18n.decline": "Rejeitar", + "i18n.close": "Fechar", + "i18n.cancel": "Cancelar", + "i18n.available": "Disponível", + "i18n.approved": "Aprovada", + "i18n.approve": "Aprovar", + "components.UserList.usertype": "Tipo de Usuário", + "components.UserList.username": "Usuário", + "components.UserList.userlist": "Lista de Usuários", + "components.UserList.userdeleteerror": "Algo deu errado ao apagar usuário", + "components.UserList.userdeleted": "Usuário deletado", + "components.UserList.user": "Usuário", + "components.UserList.totalrequests": "Total de Solicitações", + "components.UserList.role": "Privilégio", + "components.UserList.plexuser": "Usuário Plex", + "components.UserList.lastupdated": "Última Atualização", + "components.UserList.edit": "Editar", + "components.UserList.deleteuser": "Deletar Usuário", + "components.UserList.deleteconfirm": "Tem certeza que deseja deletar esse usuário? Todas informações de solicitação desse usuário serão removidas.", + "components.UserList.created": "Criado", + "components.UserList.admin": "Administrador", + "components.UserEdit.voteDescription": "Concede permissão para votar em solicitações (sistema de votos ainda não implementado)", + "components.UserEdit.vote": "Votar", + "components.UserEdit.usersaved": "Usuário salvo", + "components.UserEdit.usersDescription": "Concede permissão para gerenciar usuários do Overseerr. Usuários com essa permissão não conseguem modificar usuários de Adminitradores ou conceder esse privilégio .", + "components.UserEdit.users": "Gerenciar Usuários", + "components.UserEdit.username": "Usuário", + "components.UserEdit.userfail": "Algo deu errado ao salvar edições do usuário.", + "components.UserEdit.settingsDescription": "Concede permissão para modificar todas configurações do Overseerr. Um usuário precisa dessa permissão para concedê-la para outros usuários.", + "components.UserEdit.settings": "Gerenciar Configurações", + "components.UserEdit.saving": "Salvando…", + "components.UserEdit.save": "Salvar", + "components.UserEdit.requestDescription": "Concede permissão para solicitar filmes e séries.", + "components.UserEdit.request": "Solicitação", + "components.UserEdit.permissions": "Permissões", + "components.UserEdit.managerequestsDescription": "Concede permissão para gerenciar solicitações no Overseerr. Isso inclui aprová-las e negá-las.", + "components.UserEdit.managerequests": "Gerenciar Solicitações", + "components.UserEdit.email": "E-mail", + "components.UserEdit.edituser": "Editar Usuário", + "components.UserEdit.avatar": "Avatar", + "components.UserEdit.autoapproveDescription": "Concede aprovação automática para todas as solicitações feitas por este usuário.", + "components.UserEdit.autoapprove": "Aprovação Automática", + "components.UserEdit.adminDescription": "Acesso total de administrador. Ignora todas as verificações de permissão.", + "components.UserEdit.admin": "Administrador", + "components.TvDetails.userrating": "Avaliação do usuário", + "components.TvDetails.unavailable": "Indisponível", + "components.TvDetails.similarsubtext": "Outras séries similares a {title}", + "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.Notifications.testsent": "Notificação de teste enviada!", + "components.Settings.Notifications.test": "Testar", + "components.RequestModal.requestseasons": "Solicitar {seasonCount} {seasonCount, plural, one {Temporada} other {Temporadas}}", + "components.TvDetails.viewfullcrew": "Ver Toda Equipe Técnica", + "components.TvDetails.TvCrew.fullseriescrew": "Equipe Técnica Completa da Série", + "components.PersonDetails.crewmember": "Membro da Equipe Técnica", + "components.MovieDetails.viewfullcrew": "Ver Equipe Técnica Completa", + "components.MovieDetails.MovieCrew.fullcrew": "Equipe Técnica Completa", + "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" } diff --git a/src/i18n/locale/sv.json b/src/i18n/locale/sv.json index 30b12e90..1c04c32a 100644 --- a/src/i18n/locale/sv.json +++ b/src/i18n/locale/sv.json @@ -42,7 +42,7 @@ "components.Settings.menuJobs": "Jobb", "components.Settings.menuGeneralSettings": "Generella Inställningar", "components.Settings.menuAbout": "Om", - "components.Settings.manualscanDescription": "Normalt körs denna var sjätte timme. Overseerr kommer kontrollera till Plex Servers \"senast tillagda\" oftare. Om detta är första gången du konfigurerar din Plex Server är det starkt rekommenderat att göra en manuell full scan av ditt mediabibliotek!", + "components.Settings.manualscanDescription": "Normalt körs denna var tjugofjärde timme. Overseerr kommer kontrollera till Plex Servers \"senast tillagda\" oftare. Om detta är första gången du konfigurerar din Plex Server är det starkt rekommenderat att göra en manuell full scan av ditt mediabibliotek!", "components.Settings.manualscan": "Manuell Biblioteksscan", "components.Settings.librariesRemaining": "Kvarvarande Bibliotek: {count}", "components.Settings.jobname": "Jobbnamn", @@ -51,7 +51,7 @@ "components.Settings.generalsettings": "Generella Inställningar", "components.Settings.edit": "Ändra", "components.Settings.deleteserverconfirm": "Är du säker på att du vill radera servern?", - "components.Settings.delete": "Radera", + "components.Settings.delete": "Ta bort", "components.Settings.default4k": "Standard 4K", "components.Settings.default": "Standard", "components.Settings.currentlibrary": "Nuvarande Bibliotek: {name}", @@ -162,7 +162,7 @@ "components.Settings.Notifications.discordsettingssaved": "Notiferingsinställningar för Discord sparade!", "components.Settings.Notifications.authUser": "Användarnamn", "components.Settings.Notifications.authPass": "Lösenord", - "components.Settings.Notifications.agentenabled": "Agent Aktiverad", + "components.Settings.Notifications.agentenabled": "Aktiverad", "components.Search.searchresults": "Sökresultat", "components.RequestModal.status": "Status", "components.RequestModal.selectseason": "Välj säsong(er)", @@ -185,7 +185,7 @@ "components.RequestModal.cancel": "Avbryt förfrågan", "components.RequestList.status": "Status", "components.RequestList.showingresults": "Visar {from} till {to} av {total} sökresultat", - "components.RequestList.requests": "Förfrågan", + "components.RequestList.requests": "Förfrågningar", "components.RequestList.requestedAt": "Begärd", "components.RequestList.previous": "Föregående", "components.RequestList.next": "Nästa", @@ -255,7 +255,7 @@ "components.TvDetails.approve": "Godkänn", "components.TvDetails.anime": "Anime", "components.TvDetails.TvCast.fullseriescast": "Rollista", - "components.TitleCard.tvshow": "TV-serier", + "components.TitleCard.tvshow": "TV-serie", "components.TitleCard.movie": "Film", "components.Slider.noresults": "Inga resultat", "components.Setup.welcome": "Välkommen till Overseerr", @@ -276,8 +276,8 @@ "i18n.pending": "Väntande", "i18n.partiallyavailable": "Delvis Tillgänglig", "i18n.movies": "Filmer", - "i18n.deleting": "Raderar…", - "i18n.delete": "Radera", + "i18n.deleting": "Tar bort…", + "i18n.delete": "Ta bort", "i18n.declined": "Avböjd", "i18n.decline": "Avböj", "i18n.cancel": "Avbryt", @@ -292,12 +292,12 @@ "components.UserList.user": "Användare", "components.UserList.totalrequests": "Totalt antal förfrågningar", "components.UserList.role": "Roll", - "components.UserList.plexuser": "Plexanvändare", + "components.UserList.plexuser": "Plex", "components.UserList.lastupdated": "Senast uppdaterad", "components.UserList.edit": "Redigera", "components.UserList.deleteuser": "Ta bort användare", "components.UserList.deleteconfirm": "Är du säker på att du vill ta bort användaren? All data för användaren kommer att raderas.", - "components.UserList.delete": "Radera", + "components.UserList.delete": "Ta bort", "components.UserList.created": "Skapad", "components.UserList.admin": "Administratör", "components.UserEdit.voteDescription": "Ger behörighet att rösta på förfrågningar (röstning är inte implementerat ännu)", @@ -346,5 +346,23 @@ "components.TvDetails.decline": "Avböj", "components.TvDetails.cast": "Roller", "components.TvDetails.cancelrequest": "Avbryt begäran", - "components.TvDetails.available": "Tillgänglig" + "components.TvDetails.available": "Tillgänglig", + "i18n.close": "Stäng", + "components.TvDetails.approverequests": "Godkänn {requestCount} {requestCount, plural, one {Request} other {Requests}}", + "components.Setup.loginwithplex": "Logga in med Plex", + "components.Settings.SettingsAbout.timezone": "Tidzon", + "components.Settings.SettingsAbout.supportoverseerr": "Hjälp Overseerr", + "components.Settings.SettingsAbout.helppaycoffee": "Stötta med en kopp kaffe", + "components.Settings.SettingsAbout.Releases.viewongithub": "Visa på GitHub", + "components.Settings.SettingsAbout.Releases.viewchangelog": "Visa ändringslogg", + "components.Settings.SettingsAbout.Releases.versionChangelog": "Ändringslogg", + "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "Ändringarna nedan är inte tillgängliga i din version. Vänligen se GitHub repository för dom senaste uppdateringarna.", + "components.Settings.SettingsAbout.Releases.runningDevelop": "Du kör en utvecklingsversion av Overseerr!", + "components.Settings.SettingsAbout.Releases.releases": "Versioner", + "components.Settings.SettingsAbout.Releases.releasedataMissing": "Versionsdata saknas. Ligger GitHub nere?", + "components.Settings.SettingsAbout.Releases.latestversion": "Senaste Version", + "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" } diff --git a/tailwind.config.js b/tailwind.config.js index 94b25a79..79a78e78 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -62,7 +62,7 @@ module.exports = { borderWidth: ['first', 'last'], margin: ['first', 'last', 'responsive'], boxShadow: ['group-focus'], - opacity: ['disabled', 'hover'], + opacity: ['disabled', 'hover', 'group-hover'], }, plugins: [ require('@tailwindcss/forms'), diff --git a/yarn.lock b/yarn.lock index e281a3ab..47865d02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4162,6 +4162,11 @@ compose-function@3.0.3: dependencies: arity-n "^1.0.4" +computed-style@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/computed-style/-/computed-style-0.1.4.tgz#7f344fd8584b2e425bedca4a1afc0e300bb05d74" + integrity sha1-fzRP2FhLLkJb7cpKGvwOMAuwXXQ= + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -8155,6 +8160,13 @@ line-column@^1.0.2: isarray "^1.0.0" isobject "^2.0.0" +line-height@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.3.1.tgz#4b1205edde182872a5efa3c8f620b3187a9c54c9" + integrity sha1-SxIF7d4YKHKl76PI9iCzGHqcVMk= + dependencies: + computed-style "~0.1.3" + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -8713,6 +8725,11 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" +memoize-one@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -11019,7 +11036,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@15.7.2, prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@15.7.2, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -11448,6 +11465,16 @@ react-transition-group@^4.3.0, react-transition-group@^4.4.1: loose-envify "^1.4.0" prop-types "^15.6.2" +react-truncate-markup@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-truncate-markup/-/react-truncate-markup-5.0.1.tgz#5c52bda712f7e185e84969b2b79440ec8b422441" + integrity sha512-WG1E9FLyTrq5ERaDbIq0DjWVs3JrAdr93fasdQqbVlEifBUp27kGM7ws4xCBIh2keDjumTPjw3iiHNNmD+YtcQ== + dependencies: + line-height "0.3.1" + memoize-one "^5.1.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" @@ -11852,6 +11879,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +resize-observer-polyfill@1.5.x: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"