diff --git a/.github/workflows/support.yml b/.github/workflows/support.yml index 4e9311ec13..9c4bf49e22 100644 --- a/.github/workflows/support.yml +++ b/.github/workflows/support.yml @@ -19,7 +19,8 @@ jobs: to get help with Overseerr. - [Discord](https://discord.gg/PkCWJSeCk7) + - [GitHub Discussions](https://github.com/sct/overseerr/discussions) close-issue: true - lock-issue: false + lock-issue: true issue-lock-reason: 'off-topic' diff --git a/package.json b/package.json index b56c27c2e7..fd2f85ba1d 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "bowser": "^2.11.0", "connect-typeorm": "^1.1.4", "cookie-parser": "^1.4.5", - "country-code-emoji": "^2.2.0", + "country-flag-icons": "^1.2.9", "csurf": "^1.11.0", "email-templates": "^8.0.3", "express": "^4.17.1", @@ -83,6 +83,7 @@ "@types/bcrypt": "^3.0.0", "@types/body-parser": "^1.19.0", "@types/cookie-parser": "^1.4.2", + "@types/country-flag-icons": "^1.2.0", "@types/csurf": "^1.11.0", "@types/email-templates": "^8.0.2", "@types/express": "^4.17.11", diff --git a/server/interfaces/api/settingsInterfaces.ts b/server/interfaces/api/settingsInterfaces.ts index 5136f17dc1..122df7bd1c 100644 --- a/server/interfaces/api/settingsInterfaces.ts +++ b/server/interfaces/api/settingsInterfaces.ts @@ -13,6 +13,7 @@ export interface PublicSettingsResponse { movie4kEnabled: boolean; series4kEnabled: boolean; region: string; + originalLanguage: string; } export interface CacheItem { diff --git a/server/job/plexsync/index.ts b/server/job/plexsync/index.ts index 486fbf908c..f4a57c6218 100644 --- a/server/job/plexsync/index.ts +++ b/server/job/plexsync/index.ts @@ -666,7 +666,9 @@ class JobPlexSync { isAllStandardSeasons || shouldStayAvailable ? MediaStatus.AVAILABLE : media.seasons.some( - (season) => season.status !== MediaStatus.UNKNOWN + (season) => + season.status === MediaStatus.PARTIALLY_AVAILABLE || + season.status === MediaStatus.AVAILABLE ) ? MediaStatus.PARTIALLY_AVAILABLE : MediaStatus.UNKNOWN; @@ -675,7 +677,9 @@ class JobPlexSync { ? MediaStatus.AVAILABLE : this.enable4kShow && media.seasons.some( - (season) => season.status4k !== MediaStatus.UNKNOWN + (season) => + season.status4k === MediaStatus.PARTIALLY_AVAILABLE || + season.status4k === MediaStatus.AVAILABLE ) ? MediaStatus.PARTIALLY_AVAILABLE : MediaStatus.UNKNOWN; @@ -691,7 +695,9 @@ class JobPlexSync { status: isAllStandardSeasons ? MediaStatus.AVAILABLE : newSeasons.some( - (season) => season.status !== MediaStatus.UNKNOWN + (season) => + season.status === MediaStatus.PARTIALLY_AVAILABLE || + season.status === MediaStatus.AVAILABLE ) ? MediaStatus.PARTIALLY_AVAILABLE : MediaStatus.UNKNOWN, @@ -700,7 +706,9 @@ class JobPlexSync { ? MediaStatus.AVAILABLE : this.enable4kShow && newSeasons.some( - (season) => season.status4k !== MediaStatus.UNKNOWN + (season) => + season.status4k === MediaStatus.PARTIALLY_AVAILABLE || + season.status4k === MediaStatus.AVAILABLE ) ? MediaStatus.PARTIALLY_AVAILABLE : MediaStatus.UNKNOWN, diff --git a/server/lib/notifications/agents/telegram.ts b/server/lib/notifications/agents/telegram.ts index 9913d35e6b..fd3b4dd9fd 100644 --- a/server/lib/notifications/agents/telegram.ts +++ b/server/lib/notifications/agents/telegram.ts @@ -53,6 +53,7 @@ class TelegramAgent const title = this.escapeText(payload.subject); const plot = this.escapeText(payload.message); const user = this.escapeText(payload.notifyUser.displayName); + const applicationTitle = this.escapeText(settings.main.applicationTitle); /* eslint-disable no-useless-escape */ switch (type) { @@ -109,7 +110,7 @@ class TelegramAgent if (settings.main.applicationUrl && payload.media) { const actionUrl = `${settings.main.applicationUrl}/${payload.media.mediaType}/${payload.media.tmdbId}`; - message += `\n\n\[Open in ${settings.main.applicationTitle}\]\(${actionUrl}\)`; + message += `\n\n\[Open in ${applicationTitle}\]\(${actionUrl}\)`; } /* eslint-enable */ diff --git a/server/lib/settings.ts b/server/lib/settings.ts index 02320e00fa..a65c5ffb04 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -85,6 +85,7 @@ interface FullPublicSettings extends PublicSettings { movie4kEnabled: boolean; series4kEnabled: boolean; region: string; + originalLanguage: string; } export interface NotificationAgentConfig { @@ -337,6 +338,7 @@ class Settings { (sonarr) => sonarr.is4k && sonarr.isDefault ), region: this.data.main.region, + originalLanguage: this.data.main.originalLanguage, }; } diff --git a/server/routes/discover.ts b/server/routes/discover.ts index 5b9d1afced..e248870ae4 100644 --- a/server/routes/discover.ts +++ b/server/routes/discover.ts @@ -5,16 +5,35 @@ import Media from '../entity/Media'; import { isMovie, isPerson } from '../utils/typeHelpers'; import { MediaType } from '../constants/media'; import { getSettings } from '../lib/settings'; +import { User } from '../entity/User'; + +const createTmdbWithRegionLanaguage = (user?: User): TheMovieDb => { + const settings = getSettings(); + + const region = + user?.settings?.region === 'all' + ? '' + : user?.settings?.region + ? user?.settings?.region + : settings.main.region; + + const originalLanguage = + user?.settings?.originalLanguage === 'all' + ? '' + : user?.settings?.originalLanguage + ? user?.settings?.originalLanguage + : settings.main.originalLanguage; + + return new TheMovieDb({ + region, + originalLanguage, + }); +}; const discoverRoutes = Router(); discoverRoutes.get('/movies', async (req, res) => { - const settings = getSettings(); - const tmdb = new TheMovieDb({ - region: req.user?.settings?.region ?? settings.main.region, - originalLanguage: - req.user?.settings?.originalLanguage ?? settings.main.originalLanguage, - }); + const tmdb = createTmdbWithRegionLanaguage(req.user); const data = await tmdb.getDiscoverMovies({ page: Number(req.query.page), @@ -41,12 +60,7 @@ discoverRoutes.get('/movies', async (req, res) => { }); discoverRoutes.get('/movies/upcoming', async (req, res) => { - const settings = getSettings(); - const tmdb = new TheMovieDb({ - region: req.user?.settings?.region ?? settings.main.region, - originalLanguage: - req.user?.settings?.originalLanguage ?? settings.main.originalLanguage, - }); + const tmdb = createTmdbWithRegionLanaguage(req.user); const now = new Date(); const offset = now.getTimezoneOffset(); @@ -80,12 +94,7 @@ discoverRoutes.get('/movies/upcoming', async (req, res) => { }); discoverRoutes.get('/tv', async (req, res) => { - const settings = getSettings(); - const tmdb = new TheMovieDb({ - region: req.user?.settings?.region ?? settings.main.region, - originalLanguage: - req.user?.settings?.originalLanguage ?? settings.main.originalLanguage, - }); + const tmdb = createTmdbWithRegionLanaguage(req.user); const data = await tmdb.getDiscoverTv({ page: Number(req.query.page), @@ -112,12 +121,7 @@ discoverRoutes.get('/tv', async (req, res) => { }); discoverRoutes.get('/tv/upcoming', async (req, res) => { - const settings = getSettings(); - const tmdb = new TheMovieDb({ - region: req.user?.settings?.region ?? settings.main.region, - originalLanguage: - req.user?.settings?.originalLanguage ?? settings.main.originalLanguage, - }); + const tmdb = createTmdbWithRegionLanaguage(req.user); const now = new Date(); const offset = now.getTimezoneOffset(); @@ -151,12 +155,7 @@ discoverRoutes.get('/tv/upcoming', async (req, res) => { }); discoverRoutes.get('/trending', async (req, res) => { - const settings = getSettings(); - const tmdb = new TheMovieDb({ - region: req.user?.settings?.region ?? settings.main.region, - originalLanguage: - req.user?.settings?.originalLanguage ?? settings.main.originalLanguage, - }); + const tmdb = createTmdbWithRegionLanaguage(req.user); const data = await tmdb.getAllTrending({ page: Number(req.query.page), diff --git a/server/routes/request.ts b/server/routes/request.ts index ec89a98311..afec0d2587 100644 --- a/server/routes/request.ts +++ b/server/routes/request.ts @@ -283,9 +283,7 @@ requestRoutes.post( const request = new MediaRequest({ type: MediaType.TV, - media: { - id: media.id, - } as Media, + media, requestedBy: requestUser, // If the user is an admin or has the "auto approve" permission, automatically approve the request status: diff --git a/src/components/RegionSelector/index.tsx b/src/components/RegionSelector/index.tsx index 881174946e..4537d55473 100644 --- a/src/components/RegionSelector/index.tsx +++ b/src/components/RegionSelector/index.tsx @@ -1,37 +1,59 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { Listbox, Transition } from '@headlessui/react'; -import { countryCodeEmoji } from 'country-code-emoji'; import useSWR from 'swr'; import type { Region } from '../../../server/lib/settings'; import { defineMessages, useIntl } from 'react-intl'; +import useSettings from '../../hooks/useSettings'; +import { hasFlag } from 'country-flag-icons'; +import 'country-flag-icons/3x2/flags.css'; const messages = defineMessages({ regionDefault: 'All Regions', + regionServerDefault: 'Default ({region})', }); interface RegionSelectorProps { value: string; name: string; + isUserSetting?: boolean; onChange?: (fieldName: string, region: string) => void; } const RegionSelector: React.FC = ({ name, value, + isUserSetting = false, onChange, }) => { + const { currentSettings } = useSettings(); const intl = useIntl(); const { data: regions } = useSWR('/api/v1/regions'); const [selectedRegion, setSelectedRegion] = useState(null); + const allRegion: Region = useMemo( + () => ({ + iso_3166_1: 'all', + english_name: 'All', + }), + [] + ); + + const defaultRegionNameFallback = + regions?.find((region) => region.iso_3166_1 === currentSettings.region) + ?.english_name ?? currentSettings.region; + useEffect(() => { if (regions && value) { - const matchedRegion = regions.find( - (region) => region.iso_3166_1 === value - ); - setSelectedRegion(matchedRegion ?? null); + if (value === 'all') { + setSelectedRegion(allRegion); + } else { + const matchedRegion = regions.find( + (region) => region.iso_3166_1 === value + ); + setSelectedRegion(matchedRegion ?? null); + } } - }, [value, regions]); + }, [value, regions, allRegion]); useEffect(() => { if (onChange && regions) { @@ -47,15 +69,35 @@ const RegionSelector: React.FC = ({
- {selectedRegion && ( - - {countryCodeEmoji(selectedRegion.iso_3166_1)} + {((selectedRegion && hasFlag(selectedRegion?.iso_3166_1)) || + (isUserSetting && + !selectedRegion && + currentSettings.region && + hasFlag(currentSettings.region))) && ( + + )} - {selectedRegion + {selectedRegion && selectedRegion.iso_3166_1 !== 'all' ? intl.formatDisplayName(selectedRegion.iso_3166_1, { type: 'region', + fallback: 'none', + }) ?? selectedRegion.english_name + : isUserSetting && selectedRegion?.iso_3166_1 !== 'all' + ? intl.formatMessage(messages.regionServerDefault, { + region: currentSettings.region + ? intl.formatDisplayName(currentSettings.region, { + type: 'region', + fallback: 'none', + }) ?? defaultRegionNameFallback + : intl.formatMessage(messages.regionDefault), }) : intl.formatMessage(messages.regionDefault)} @@ -89,7 +131,67 @@ const RegionSelector: React.FC = ({ static className="py-1 overflow-auto text-base leading-6 rounded-md shadow-xs max-h-60 focus:outline-none sm:text-sm sm:leading-5" > - + {isUserSetting && ( + + {({ selected, active }) => ( +
+ + + + + {intl.formatMessage(messages.regionServerDefault, { + region: currentSettings.region + ? intl.formatDisplayName( + currentSettings.region, + { + type: 'region', + fallback: 'none', + } + ) ?? defaultRegionNameFallback + : intl.formatMessage(messages.regionDefault), + })} + + {selected && ( + + + + + + )} +
+ )} +
+ )} + {({ selected, active }) => (
= ({ {intl.formatMessage(messages.regionDefault)} @@ -136,8 +238,14 @@ const RegionSelector: React.FC = ({ : 'text-gray-300' } cursor-default select-none relative py-2 pl-8 pr-4 flex items-center`} > - - {countryCodeEmoji(region.iso_3166_1)} + + register an application and enter the API key below.\ + 'To configure Pushover notifications, you will need to register an application and enter the API token below.\ (You can use one of our official icons on GitHub.)\ - You will need also need your user key.', + You will also need your user key.', notificationtypes: 'Notification Types', }); diff --git a/src/components/Settings/Notifications/NotificationsTelegram.tsx b/src/components/Settings/Notifications/NotificationsTelegram.tsx index bc626fd55b..abfd8b0af6 100644 --- a/src/components/Settings/Notifications/NotificationsTelegram.tsx +++ b/src/components/Settings/Notifications/NotificationsTelegram.tsx @@ -17,7 +17,7 @@ const messages = defineMessages({ botAPI: 'Bot Authentication Token', chatId: 'Chat ID', validationBotAPIRequired: 'You must provide a bot authentication token', - validationChatIdRequired: 'You must provide a valid chat ID', + validationChatIdRequired: 'You must provide a chat ID', telegramsettingssaved: 'Telegram notification settings saved successfully!', telegramsettingsfailed: 'Telegram notification settings failed to save.', testsent: 'Test notification sent!', @@ -43,9 +43,9 @@ const NotificationsTelegram: React.FC = () => { botAPI: Yup.string().required( intl.formatMessage(messages.validationBotAPIRequired) ), - chatId: Yup.string() - .required(intl.formatMessage(messages.validationChatIdRequired)) - .matches(/^\d+$/, intl.formatMessage(messages.validationChatIdRequired)), + chatId: Yup.string().required( + intl.formatMessage(messages.validationChatIdRequired) + ), }); if (!data && !error) { diff --git a/src/components/Settings/SonarrModal/index.tsx b/src/components/Settings/SonarrModal/index.tsx index c95b2124ca..65d7a157bf 100644 --- a/src/components/Settings/SonarrModal/index.tsx +++ b/src/components/Settings/SonarrModal/index.tsx @@ -185,7 +185,7 @@ const SonarrModal: React.FC = ({ setIsValidated(true); setTestResponse(response.data); if (initialLoad.current) { - addToast('Sonarr connection established!', { + addToast(intl.formatMessage(messages.toastSonarrTestSuccess), { appearance: 'success', autoDismiss: true, }); @@ -193,7 +193,7 @@ const SonarrModal: React.FC = ({ } catch (e) { setIsValidated(false); if (initialLoad.current) { - addToast('Failed to connect to Sonarr server', { + addToast(intl.formatMessage(messages.toastSonarrTestFailure), { appearance: 'error', autoDismiss: true, }); diff --git a/src/components/UserProfile/UserSettings/UserGeneralSettings/index.tsx b/src/components/UserProfile/UserSettings/UserGeneralSettings/index.tsx index 5f89baa6f8..d426f87cf5 100644 --- a/src/components/UserProfile/UserSettings/UserGeneralSettings/index.tsx +++ b/src/components/UserProfile/UserSettings/UserGeneralSettings/index.tsx @@ -6,6 +6,7 @@ import { defineMessages, useIntl } from 'react-intl'; import { useToasts } from 'react-toast-notifications'; import useSWR from 'swr'; import { Language } from '../../../../../server/lib/settings'; +import useSettings from '../../../../hooks/useSettings'; import { UserType, useUser } from '../../../../hooks/useUser'; import Error from '../../../../pages/_error'; import Badge from '../../../Common/Badge'; @@ -29,6 +30,7 @@ const messages = defineMessages({ originallanguageTip: 'Filter content by original language (only applies to the "Popular" and "Upcoming" categories)', originalLanguageDefault: 'All Languages', + languageServerDefault: 'Default ({language})', }); const UserGeneralSettings: React.FC = () => { @@ -36,6 +38,7 @@ const UserGeneralSettings: React.FC = () => { const { addToast } = useToasts(); const router = useRouter(); const { user, mutate } = useUser({ id: Number(router.query.userId) }); + const { currentSettings } = useSettings(); const { data, error, revalidate } = useSWR<{ username?: string; region?: string; @@ -58,6 +61,11 @@ const UserGeneralSettings: React.FC = () => { return ; } + const defaultLanguageNameFallback = + languages.find( + (language) => language.iso_639_1 === currentSettings.originalLanguage + )?.english_name ?? currentSettings.originalLanguage; + return ( <>
@@ -143,6 +151,7 @@ const UserGeneralSettings: React.FC = () => {
@@ -162,6 +171,21 @@ const UserGeneralSettings: React.FC = () => { name="originalLanguage" > + {languages?.map((language) => ( diff --git a/src/context/SettingsContext.tsx b/src/context/SettingsContext.tsx index 7e709f77a4..1215434740 100644 --- a/src/context/SettingsContext.tsx +++ b/src/context/SettingsContext.tsx @@ -14,6 +14,7 @@ const defaultSettings = { movie4kEnabled: false, series4kEnabled: false, region: '', + originalLanguage: '', }; export const SettingsContext = React.createContext({ diff --git a/src/i18n/locale/de.json b/src/i18n/locale/de.json index 6bf44fa15b..89036b6f6f 100644 --- a/src/i18n/locale/de.json +++ b/src/i18n/locale/de.json @@ -408,7 +408,7 @@ "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 gültige Chat-ID angeben", + "components.Settings.Notifications.validationChatIdRequired": "Du musst eine Chat-ID angeben", "components.Settings.Notifications.validationBotAPIRequired": "Du musst ein Bot-Authentifizierungstoken angeben", "components.Settings.Notifications.telegramsettingssaved": "Telegram-Benachrichtigungseinstellungen erfolgreich gespeichert!", "components.Settings.Notifications.telegramsettingsfailed": "Telegram-Benachrichtigungseinstellungen konnten nicht gespeichert werden.", @@ -445,7 +445,7 @@ "components.Settings.Notifications.NotificationsPushover.notificationtypes": "Benachrichtigungsarten", "components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Pushover-Benachrichtigungseinstellungen konnten nicht gespeichert werden.", "components.Settings.Notifications.NotificationsPushover.agentenabled": "Agent aktivieren", - "components.Settings.Notifications.NotificationsPushover.accessToken": "Anwendungs-/API Token", + "components.Settings.Notifications.NotificationsPushover.accessToken": "Anwendungs-/API-Token", "components.RequestList.sortModified": "Zuletzt geändert", "components.RequestList.sortAdded": "Anfragedatum", "components.RequestList.showallrequests": "Zeige alle Anfragen", @@ -830,5 +830,7 @@ "components.Settings.Notifications.emailNotificationTypesAlert": "E-Mail-Benachrichtigungen-Empfänger", "components.RegionSelector.regionDefault": "Alle Regionen", "components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "Alle Sprachen", - "components.Settings.originalLanguageDefault": "Alle Sprachen" + "components.Settings.originalLanguageDefault": "Alle Sprachen", + "components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "Standard ({language})", + "components.RegionSelector.regionServerDefault": "Standard ({region})" } diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index 082836caa7..a7ad2a041b 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -139,6 +139,7 @@ "components.PlexLoginButton.signingin": "Signing in…", "components.PlexLoginButton.signinwithplex": "Sign In", "components.RegionSelector.regionDefault": "All Regions", + "components.RegionSelector.regionServerDefault": "Default ({region})", "components.RequestBlock.profilechanged": "Quality Profile", "components.RequestBlock.requestoverrides": "Request Overrides", "components.RequestBlock.rootfolder": "Root Folder", @@ -262,7 +263,7 @@ "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 configure Pushover notifications, you will need to register an application and enter the API key below. (You can use one of our official icons on GitHub.) You will need also need your user key.", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "To configure Pushover notifications, you will need to register an application and enter the API token below. (You can use one of our official icons on GitHub.) You will also need your user key.", "components.Settings.Notifications.NotificationsPushover.test": "Test", "components.Settings.Notifications.NotificationsPushover.testsent": "Test notification sent!", "components.Settings.Notifications.NotificationsPushover.userToken": "User Key", @@ -326,7 +327,7 @@ "components.Settings.Notifications.test": "Test", "components.Settings.Notifications.testsent": "Test notification sent!", "components.Settings.Notifications.validationBotAPIRequired": "You must provide a bot authentication token", - "components.Settings.Notifications.validationChatIdRequired": "You must provide a valid chat ID", + "components.Settings.Notifications.validationChatIdRequired": "You must provide a chat ID", "components.Settings.Notifications.validationEmail": "You must provide a valid email address", "components.Settings.Notifications.validationSmtpHostRequired": "You must provide an SMTP host", "components.Settings.Notifications.validationSmtpPortRequired": "You must provide an SMTP port", @@ -679,6 +680,7 @@ "components.UserProfile.ProfileHeader.settings": "Edit Settings", "components.UserProfile.UserSettings.UserGeneralSettings.displayName": "Display Name", "components.UserProfile.UserSettings.UserGeneralSettings.generalsettings": "General Settings", + "components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "Default ({language})", "components.UserProfile.UserSettings.UserGeneralSettings.localuser": "Local User", "components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "All Languages", "components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Discover Language", diff --git a/src/i18n/locale/es.json b/src/i18n/locale/es.json index 01746ecbb2..7b6502cc6e 100644 --- a/src/i18n/locale/es.json +++ b/src/i18n/locale/es.json @@ -29,15 +29,15 @@ "components.Settings.SettingsAbout.overseerrinformation": "Información de Overseerr", "components.Settings.SettingsAbout.githubdiscussions": "Discursiones en GitHub", "components.Settings.SettingsAbout.gettingsupport": "Soporte", - "components.Settings.SettingsAbout.clickheretojoindiscord": "Click aquín para unirte a nuestro servidor de Discord.", - "components.Settings.RadarrModal.validationRootFolderRequired": "Debes seleccionar una carpeta raíz.", - "components.Settings.RadarrModal.validationProfileRequired": "Debes seleccionar un perfil de calidad.", - "components.Settings.RadarrModal.validationPortRequired": "Debes proporcionar un puerto.", - "components.Settings.RadarrModal.validationNameRequired": "Debes proporcionar un nombre de servidor.", - "components.Settings.RadarrModal.validationHostnameRequired": "Debes proporcionar un hostname/IP.", - "components.Settings.RadarrModal.validationApiKeyRequired": "Debes proporcionar la clave API.", + "components.Settings.SettingsAbout.clickheretojoindiscord": "Click aquín para unirte a nuestro servidor de Discord!", + "components.Settings.RadarrModal.validationRootFolderRequired": "Debes seleccionar una carpeta raíz", + "components.Settings.RadarrModal.validationProfileRequired": "Debes seleccionar un perfil de calidad", + "components.Settings.RadarrModal.validationPortRequired": "Debes proporcionar un puerto", + "components.Settings.RadarrModal.validationNameRequired": "Debes proporcionar un nombre de servidor", + "components.Settings.RadarrModal.validationHostnameRequired": "Debes proporcionar un hostname/IP", + "components.Settings.RadarrModal.validationApiKeyRequired": "Debes proporcionar la clave API", "components.Settings.RadarrModal.toastRadarrTestSuccess": "¡Conexión con Radarr establecida!", - "components.Settings.RadarrModal.toastRadarrTestFailure": "Error al connectar al Servidor Radarr", + "components.Settings.RadarrModal.toastRadarrTestFailure": "Error al connectar al Radarr.", "components.Settings.RadarrModal.testing": "Comprobando…", "components.Settings.RadarrModal.test": "Comprobar", "components.Settings.RadarrModal.ssl": "SSL", @@ -65,8 +65,8 @@ "components.Settings.Notifications.webhookUrlPlaceholder": "Ajustes del servidor -> Integraciones -> Webhooks", "components.Settings.Notifications.webhookUrl": "URL de Webhook", "components.Settings.Notifications.validationWebhookUrlRequired": "Debes proporcionar una URL del webhook.", - "components.Settings.Notifications.validationSmtpPortRequired": "Debes proporcionar un puerto SMTP.", - "components.Settings.Notifications.validationSmtpHostRequired": "Debes proporcionar un host SMTP.", + "components.Settings.Notifications.validationSmtpPortRequired": "Debes proporcionar un puerto SMTP", + "components.Settings.Notifications.validationSmtpHostRequired": "Debes proporcionar un host SMTP", "components.Settings.Notifications.validationFromRequired": "Debe proporcionar una dirección de remitente de correo electrónico.", "components.Settings.Notifications.smtpPort": "Puerto SMTP", "components.Settings.Notifications.smtpHost": "Host SMTP", @@ -93,7 +93,7 @@ "components.RequestModal.requestadmin": "Tu petición será aprovada inmediatamente.", "components.RequestModal.requestSuccess": "{title} solicitado.", "components.RequestList.showingresults": "Mostrando {from} a {to} de {total} resultados", - "components.RequestModal.requestCancel": "Solicitud para {title} cancelada", + "components.RequestModal.requestCancel": "Solicitud para {title} cancelada.", "components.RequestModal.request": "Solicitar", "components.RequestModal.pendingrequest": "Solicitud pendiente para {title}", "components.RequestModal.numberofepisodes": "# de Episodios", @@ -174,12 +174,12 @@ "components.Settings.address": "Dirección", "components.Settings.addradarr": "Agregar servidor Radarr", "components.Settings.activeProfile": "Perfil activo", - "components.Settings.SonarrModal.validationRootFolderRequired": "Debes seleccionar una carpeta raíz.", - "components.Settings.SonarrModal.validationProfileRequired": "Debes seleccionar un perfil.", - "components.Settings.SonarrModal.validationPortRequired": "Debes proporcionar un puerto.", - "components.Settings.SonarrModal.validationNameRequired": "Debes proporcionar un nombre de servidor.", - "components.Settings.SonarrModal.validationHostnameRequired": "Debes proporcionar un hostname/IP.", - "components.Settings.SonarrModal.validationApiKeyRequired": "Debes proporcionar la clave API.", + "components.Settings.SonarrModal.validationRootFolderRequired": "Debes seleccionar una carpeta raíz", + "components.Settings.SonarrModal.validationProfileRequired": "Debes seleccionar un perfil", + "components.Settings.SonarrModal.validationPortRequired": "Debes proporcionar un puerto", + "components.Settings.SonarrModal.validationNameRequired": "Debes proporcionar un nombre de servidor", + "components.Settings.SonarrModal.validationHostnameRequired": "Debes proporcionar un hostname/IP", + "components.Settings.SonarrModal.validationApiKeyRequired": "Debes proporcionar la clave API", "components.Settings.SonarrModal.toastRadarrTestSuccess": "¡Conexión con Sonarr establecida!", "components.Settings.menuLogs": "Registro", "pages.somethingWentWrong": "{statusCode} – Algo salió mal", @@ -274,8 +274,8 @@ "components.Setup.continue": "Continuar", "components.Setup.configureplex": "Configurar Plex", "components.Setup.configureservices": "Configurar servicios", - "components.Settings.validationPortRequired": "Debes proporcionar un puerto.", - "components.Settings.validationHostnameRequired": "Debe proporcionar un nombre de host / IP.", + "components.Settings.validationPortRequired": "Debes proporcionar un puerto", + "components.Settings.validationHostnameRequired": "Debe proporcionar un nombre de host / IP", "components.Settings.syncing": "Sincronizando…", "components.Settings.sync": "Sincronizar bibliotecas de Plex", "components.Settings.startscan": "Iniciar escaneo", @@ -316,15 +316,15 @@ "components.Settings.default4k": "4K predeterminado", "components.Settings.default": "Predeterminado", "components.Settings.currentlibrary": "Biblioteca actual: {name}", - "components.Settings.copied": "Clave API copiada en el portapapeles", + "components.Settings.copied": "Clave API copiada en el portapapeles.", "components.Settings.cancelscan": "Cancelar escaneo", "components.Settings.applicationurl": "URL de la aplicación", "components.Settings.apikey": "Clave API", "components.Setup.tip": "Consejo", "components.Setup.syncingbackground": "La sincronización se ejecutará en segundo plano. Mientras tanto, puede continuar con el proceso de configuración.", "i18n.deleting": "Eliminando…", - "components.UserList.userdeleteerror": "Algo salió mal al eliminar al usuario", - "components.UserList.userdeleted": "Usuario eliminado", + "components.UserList.userdeleteerror": "Algo salió mal al eliminar al usuario.", + "components.UserList.userdeleted": "Usuario eliminado.", "components.UserList.deleteuser": "Eliminar usuario", "components.UserList.deleteconfirm": "¿Está seguro de que desea eliminar este usuario? Se eliminarán todas las solicitudes existentes de este usuario.", "components.Settings.nodefaultdescription": "Al menos un servidor debe estar marcado como predeterminado antes de que cualquier solicitud llegue a sus servicios.", @@ -334,7 +334,7 @@ "components.Settings.SonarrModal.testFirstQualityProfiles": "Prueba la conexión para cargar perfiles de calidad", "components.Settings.SonarrModal.loadingrootfolders": "Cargando carpetas raíz…", "components.Settings.SonarrModal.loadingprofiles": "Cargando perfiles de calidad…", - "components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "Debes seleccionar disponibilidad mínima.", + "components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "Debes seleccionar disponibilidad mínima", "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…", @@ -365,7 +365,7 @@ "components.Settings.Notifications.testsent": "¡Notificación de prueba enviada!", "components.Settings.Notifications.test": "Comprobar", "components.MovieDetails.studio": "Estudio", - "components.UserList.importfromplexerror": "Algo salió mal importando usuarios de Plex", + "components.UserList.importfromplexerror": "Algo salió mal importando usuarios de Plex.", "components.UserList.importfromplex": "Importar usuarios de Plex", "components.UserList.importedfromplex": "{userCount, plural, =0 {Ningún} one {# Nuevo usuario} other {# Nuevos usuarios}} importado/s de Plex", "components.TvDetails.viewfullcrew": "Ver Equipo Completo", @@ -405,7 +405,7 @@ "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.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\".", @@ -464,7 +464,7 @@ "components.UserList.password": "Contraseña", "components.UserList.localuser": "Usuario local", "components.UserList.email": "Dirección de correo electrónico", - "components.UserList.creating": "Creando", + "components.UserList.creating": "Creando…", "components.UserList.createuser": "Crear usuario", "components.UserList.createlocaluser": "Crear usuario local", "components.UserList.create": "Crear", @@ -498,7 +498,7 @@ "components.RequestModal.requestedited": "Solicitud editada.", "components.RequestModal.requestcancelled": "Solicitud cancelada.", "components.RequestModal.request4ktitle": "Solicitar {title} en 4K", - "components.RequestModal.request4kfrom": "Actualmente hay una solicitud 4K pendiente de {username}", + "components.RequestModal.request4kfrom": "Actualmente hay una solicitud 4K pendiente de {username}.", "components.RequestModal.request4k": "Solicitar 4K", "components.RequestModal.pending4krequest": "Solicitud pendiente para {title} en 4K", "components.RequestModal.errorediting": "Algo salió mal al editar la solicitud.", diff --git a/src/i18n/locale/fr.json b/src/i18n/locale/fr.json index bce1832ef8..b937419f17 100644 --- a/src/i18n/locale/fr.json +++ b/src/i18n/locale/fr.json @@ -297,7 +297,7 @@ "i18n.processing": "Traitement en cours…", "i18n.tvshows": "Séries", "i18n.unavailable": "Indisponible", - "pages.internalServerError": "{statusCode} – Erreur du serveur interne", + "pages.internalServerError": "{statusCode} – Erreur interne au serveur", "pages.oops": "Oups", "pages.pageNotFound": "404 – Page non trouvée", "pages.returnHome": "Retourner à l'acceuil", @@ -305,8 +305,8 @@ "pages.somethingWentWrong": "{statusCode} – Une erreur est survenue", "components.TvDetails.TvCast.fullseriescast": "Casting complet de la série", "components.MovieDetails.MovieCast.fullcast": "Casting complet", - "components.Settings.Notifications.emailsettingssaved": "Paramètres de notification par courriel enregistrés avec succès !", - "components.Settings.Notifications.emailsettingsfailed": "Les paramètres de notification par courriel n'ont pas pu être enregistrés.", + "components.Settings.Notifications.emailsettingssaved": "Paramètres de notification par e-mail enregistrés avec succès !", + "components.Settings.Notifications.emailsettingsfailed": "Les paramètres de notification par e-mail n'ont pas pu être enregistrés.", "components.Settings.Notifications.discordsettingssaved": "Paramètres de notification Discord enregistrés avec succès !", "components.Settings.Notifications.discordsettingsfailed": "Les paramètres de notification Discord n'ont pas pu être enregistrés.", "components.Settings.validationPortRequired": "Vous devez fournir un port", @@ -408,7 +408,7 @@ "components.Settings.Notifications.NotificationsSlack.save": "Enregistrer les changements", "components.Settings.Notifications.NotificationsSlack.agentenabled": "Activer l'agent", "components.RequestList.RequestItem.failedretry": "Une erreur s'est produite lors du renvoi de la demande d'ajout.", - "components.Settings.Notifications.validationChatIdRequired": "Vous devez fournir un identifiant de discussion valide", + "components.Settings.Notifications.validationChatIdRequired": "Vous devez fournir un identifiant de discussion", "components.Settings.Notifications.botAPI": "Jeton d'authentification du bot", "components.Settings.Notifications.validationBotAPIRequired": "Vous devez fournir la clé d'authentification du bot", "components.Settings.Notifications.telegramsettingssaved": "Paramètres de notification Telegram enregistrés avec succès !", @@ -418,7 +418,7 @@ "components.Settings.Notifications.settinguptelegramDescription": "Pour configurer les notifications Telegram, vous aurez besoin de créer un bot et obtenir la clé API du bot. De plus, vous aurez besoin de l'identifiant de conversion pour la conversation à laquelle vous souhaitez envoyer des notifications. Vous pouvez le récupérer en ajoutant @get_id_bot à 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.newversionavailable": "Une nouvelle version est 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", @@ -437,7 +437,7 @@ "components.Settings.Notifications.NotificationsPushover.userToken": "Clé d'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 aurez besoin d'enregistrer une application et d'ajouter la clé API ci-dessous. Vous pouvez utiliser l'une des icônes présentes dans le dossier public sur GitHub. Vous aurez également besoin du jeton d'utilisateur.", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Pour configurer Pushover, vous aurez besoin d'enregistrer une application et d'ajouter le jeton API ci-dessous. Vous pouvez utiliser l'une des icônes présentes dans le dossier public sur GitHub. Vous aurez également besoin du jeton d'utilisateur.", "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Configuration des notifications Pushover", "components.Settings.Notifications.NotificationsPushover.saving": "Enregistrement…", "components.Settings.Notifications.NotificationsPushover.save": "Enregistrer les changements", @@ -459,7 +459,7 @@ "components.UserEdit.request4kMovies": "Demander des films 4K", "components.UserEdit.request4kDescription": "Accorde la permission de demander des films et séries en 4K.", "components.UserEdit.request4k": "Demander la 4K", - "components.StatusBadge.status4k": "{status} 4K", + "components.StatusBadge.status4k": "{status} en 4K", "components.Settings.Notifications.NotificationsWebhook.webhooksettingssaved": "Paramètres de notification Webhook enregistrés avec succès !", "components.Settings.Notifications.NotificationsWebhook.webhooksettingsfailed": "Échec de l'enregistrement des paramètres de notification du webhook.", "components.Settings.Notifications.NotificationsWebhook.webhookUrlPlaceholder": "URL webhook distante", @@ -506,11 +506,11 @@ "components.UserList.createlocaluser": "Créer un utilisateur local", "components.UserList.create": "Créer", "components.UserList.autogeneratepassword": "Générer automatiquement le mot de passe", - "components.UserList.passwordinfodescription": "Les notifications par courrier électronique doivent être configurées et activées afin de pouvoir utiliser les mots de passe générés automatiquement.", - "components.UserList.email": "Adresse électronique", + "components.UserList.passwordinfodescription": "Les notifications par e-mail doivent être configurées et activées afin de pouvoir utiliser les mots de passe générés automatiquement.", + "components.UserList.email": "Adresse e-mail", "components.UserList.validationemailrequired": "Vous devez entrer une adresse électronique valide", "components.Login.validationpasswordrequired": "Vous devez fournir un mot de passe", - "components.Login.validationemailrequired": "Vous devez fournir une adresse électronique valide", + "components.Login.validationemailrequired": "Vous devez fournir un e-mail valide", "components.Login.signinwithoverseerr": "Utilisez votre compte {applicationTitle}", "components.Login.password": "Mot de passe", "components.Login.loginerror": "Une erreur s'est produite lors de la tentative de connexion.", @@ -685,7 +685,7 @@ "components.PermissionEdit.viewrequestsDescription": "Accorde l'autorisation de consulter les demandes des autres utilisateurs.", "components.PermissionEdit.viewrequests": "Voir les demandes", "components.Discover.discover": "Découverte", - "components.UserList.validationEmail": "Vous devez fournir une adresse électronique valide", + "components.UserList.validationEmail": "Vous devez fournir un e-mail valide", "components.UserEdit.validationEmail": "Vous devez fournir une adresse électronique valide", "components.TvDetails.nextAirDate": "Prochaine diffusion", "components.Settings.SonarrModal.validationBaseUrlTrailingSlash": "L'URL de base ne doit pas se terminer par une barre oblique finale", @@ -693,21 +693,21 @@ "components.Settings.RadarrModal.validationBaseUrlTrailingSlash": "L'URL de base ne doit pas se terminer par une barre oblique finale", "components.Settings.RadarrModal.validationBaseUrlLeadingSlash": "L'URL de base doit être précédée d'une barre oblique", "components.Settings.Notifications.validationWebhookUrl": "Vous devez fournir une URL valide", - "components.Settings.Notifications.validationEmail": "Vous devez fournir une adresse électronique valide", + "components.Settings.Notifications.validationEmail": "Vous devez fournir un e-mail valide", "components.Settings.Notifications.NotificationsWebhook.validationWebhookUrl": "Vous devez fournir une URL valide", "components.Settings.Notifications.NotificationsSlack.validationWebhookUrl": "Vous devez fournir une URL valide", "components.ResetPassword.validationpasswordrequired": "Vous devez fournir un mot de passe", "components.ResetPassword.validationpasswordminchars": "Le mot de passe est trop court ; il doit comporter au moins 8 caractères", "components.ResetPassword.validationpasswordmatch": "Le mot de passe doit correspondre", - "components.ResetPassword.validationemailrequired": "Vous devez fournir une adresse électronique valide", + "components.ResetPassword.validationemailrequired": "Vous devez fournir un e-mail valide", "components.ResetPassword.resetpasswordsuccessmessage": "Le mot de passe a été réinitialisé avec succès, sous réserve que le lien était bien valide et associé à un utilisateur existant.", "components.ResetPassword.resetpassword": "Réinitialiser votre mot de passe", - "components.ResetPassword.requestresetlinksuccessmessage": "Un lien de réinitialisation du mot de passe sera envoyé à l'adresse électronique fournie si elle est associée à un utilisateur valide.", + "components.ResetPassword.requestresetlinksuccessmessage": "Un lien de réinitialisation du mot de passe sera envoyé à l'e-mail fourni si il est associé à un utilisateur valide.", "components.ResetPassword.password": "Mot de passe", "components.ResetPassword.gobacklogin": "Retourner à la page de connexion", "components.ResetPassword.forgotpassword": "Réinitialiser votre mot de passe", - "components.ResetPassword.emailresetlink": "M'envoyer un lien de récupération", - "components.ResetPassword.email": "Adresse électronique", + "components.ResetPassword.emailresetlink": "Envoyez-moi un lien de récupération par e-mail", + "components.ResetPassword.email": "Adresse e-mail", "components.ResetPassword.confirmpassword": "Confirmez le mot de passe", "components.Login.forgotpassword": "Mot de passe oublié ?", "components.Settings.SettingsJobsCache.process": "Procès", @@ -825,9 +825,11 @@ "components.Settings.originallanguage": "Langue à découvrir", "components.RegionSelector.regionDefault": "Toutes les régions", "components.Settings.Notifications.emailNotificationTypesAlertDescription": "Les notifications « Média demandé » et « Échec d’ajout du média » seront exclusivement envoyées aux utilisateurs bénéficiant de l'autorisation « Gérer les demandes ».", - "components.Settings.Notifications.emailNotificationTypesAlert": "Destinataires des notifications par courriel", + "components.Settings.Notifications.emailNotificationTypesAlert": "Destinataires des notifications par e-mail", "components.Settings.webhook": "Webhook", - "components.Settings.email": "Courriel", + "components.Settings.email": "E-mail", "components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "Toutes les langues", - "components.Settings.originalLanguageDefault": "Toutes les langues" + "components.Settings.originalLanguageDefault": "Toutes les langues", + "components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "Défaut ({language})", + "components.RegionSelector.regionServerDefault": "Défaut ({region})" } diff --git a/src/i18n/locale/hu.json b/src/i18n/locale/hu.json index 37e357d5e1..523cf40a36 100644 --- a/src/i18n/locale/hu.json +++ b/src/i18n/locale/hu.json @@ -43,7 +43,7 @@ "components.PersonDetails.crewmember": "Stáb tag", "components.PersonDetails.ascharacter": "mint {character}", "components.PersonDetails.appearsin": "Szerepel a következőkben", - "components.PermissionEdit.voteDescription": "Engedélyt ad a kérelmek szavazására. (A szavazás funkció még nincs implementálva)", + "components.PermissionEdit.voteDescription": "Engedélyt ad a kérelmek szavazására. (A szavazás funkció még nincs implementálva).", "components.PermissionEdit.vote": "Szavazás", "components.PermissionEdit.usersDescription": "Engedélyt ad az Overseerr felhasználók kezelésére. Az ezzel az engedéllyel rendelkező felhasználók nem módosíthatják a rendszergazdai jogosultsággal rendelkező felhasználókat, és nem adhatják meg a jogosultságot más felhasználónak.", "components.PermissionEdit.users": "Felhasználók kezelése", diff --git a/src/i18n/locale/it.json b/src/i18n/locale/it.json index db03ff67be..88b7ca71ba 100644 --- a/src/i18n/locale/it.json +++ b/src/i18n/locale/it.json @@ -8,7 +8,7 @@ "components.Discover.discovermovies": "Film popolari", "components.UserEdit.email": "Indirizzo e-mail", "components.Settings.Notifications.validationFromRequired": "È necessario fornire un indirizzo mittente di posta elettronica.", - "components.Settings.Notifications.emailsettingssaved": "Impostazioni di notifica tramite posta elettronica salvate!", + "components.Settings.Notifications.emailsettingssaved": "Impostazioni di notifica tramite posta elettronica salvate con successo!", "components.Settings.Notifications.emailsettingsfailed": "Impossibile salvare le impostazioni di notifica tramite posta elettronica.", "components.Settings.Notifications.emailsender": "Indirizzo del mittente", "components.Settings.SonarrModal.testing": "Test in corso…", @@ -131,7 +131,7 @@ "i18n.available": "Disponibile", "i18n.approved": "Approvato", "i18n.approve": "Approva", - "components.UserList.usertype": "Tipo di utente", + "components.UserList.usertype": "Tipo Utente", "components.UserList.username": "Nome utente", "i18n.unavailable": "Non disponibile", "i18n.tvshows": "Serie", @@ -208,7 +208,7 @@ "components.Settings.librariesRemaining": "Biblioteche rimanenti: {count}", "components.Settings.hostname": "Nome host/IP", "components.Settings.generalsettingsDescription": "Configura le impostazioni globali e predefinite per Overseerr.", - "components.Settings.generalsettings": "Impostazioni generali", + "components.Settings.generalsettings": "Impostazioni Generali", "components.Settings.edit": "Modifica", "components.Settings.deleteserverconfirm": "Sei sicuro/a di voler eliminare questo server?", "components.Settings.delete": "Elimina", @@ -287,7 +287,7 @@ "components.Settings.Notifications.smtpPort": "Porta SMTP", "components.Settings.Notifications.smtpHost": "Host SMTP", "components.Settings.Notifications.enableSsl": "Abilita SSL", - "components.Settings.Notifications.discordsettingssaved": "Impostazioni di Discord salvate!", + "components.Settings.Notifications.discordsettingssaved": "Impostazioni di Discord salvate con successo!", "components.Settings.Notifications.authUser": "Nome utente SMTP", "components.Settings.Notifications.authPass": "Password SMTP", "components.RequestModal.requestseasons": "Richiedi {seasonCount} {seasonCount, plural, one {Season} other {Seasons}}", @@ -401,7 +401,7 @@ "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 Slack salvate!", + "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Impostazioni di Slack salvate con successo!", "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Impossibile salvare le impostazioni di Slack.", "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Per configurare le notifiche con Slack, sarà necessario creare un'integrazione con un Webhook in ingresso e utilizzare l'URL del webhook fornito di seguito.", "components.Settings.Notifications.NotificationsSlack.settingupslack": "Impostazione delle notifiche di Slack", @@ -410,13 +410,13 @@ "components.Settings.Notifications.NotificationsSlack.agentenabled": "Abilita Agente", "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 Telegram salvate!", + "components.Settings.Notifications.telegramsettingssaved": "Impostazioni di Telegram salvate con successo!", "components.Settings.Notifications.telegramsettingsfailed": "Impossibile salvare le impostazioni di Telegram.", "components.Settings.Notifications.senderName": "Nome del mittente", "components.Settings.Notifications.settinguptelegramDescription": "Per configurare le notifiche di Telegram, è necessario creare un bot e ottenere la chiave API. Inoltre, è necessario l'ID chat per la chat in cui si desidera che il bot invii notifiche. Puoi ottenerlo aggiungendo @get_id_bot alla chat o alla chat di gruppo.", "components.Settings.Notifications.settinguptelegram": "Configurazione delle notifiche di Telegram", "components.Settings.Notifications.chatId": "ID chat", - "components.Settings.Notifications.botAPI": "API bot", + "components.Settings.Notifications.botAPI": "Token di autenticazione 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.", @@ -424,7 +424,7 @@ "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.mediarequested": "Media Richiesto", "components.NotificationTypeSelector.mediafailedDescription": "Invia una notifica quando il media non viene aggiunto a Radarr o Sonarr.", "components.NotificationTypeSelector.mediafailed": "Aggiunta media non riuscita", "components.NotificationTypeSelector.mediaavailableDescription": "Invia una notifica quando il media diventa disponibile.", @@ -433,19 +433,19 @@ "components.NotificationTypeSelector.mediaavailable": "Media disponibile", "i18n.request": "Richiedi", "components.Settings.Notifications.NotificationsPushover.test": "Test", - "components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "È necessario fornire un token utente", - "components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "È necessario fornire un token di accesso", - "components.Settings.Notifications.NotificationsPushover.userToken": "Token utente", + "components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "È necessario fornire una chiave utente valida", + "components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "È necessario fornire un token di applicazione valido", + "components.Settings.Notifications.NotificationsPushover.userToken": "Chiave 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, che può essere trovato nella pagina iniziale di Pushover quando si accede.", "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Impostazione delle notifiche di Pushover", "components.Settings.Notifications.NotificationsPushover.saving": "Salvataggio…", "components.Settings.Notifications.NotificationsPushover.save": "Salva le modifiche", - "components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Impostazioni di Pushover salvate!", + "components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Impostazioni di Pushover salvate con successo!", "components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Impossibile salvare le impostazioni di Pushover.", "components.Settings.Notifications.NotificationsPushover.notificationtypes": "Tipi di notifica", "components.Settings.Notifications.NotificationsPushover.agentenabled": "Abilita Agente", - "components.Settings.Notifications.NotificationsPushover.accessToken": "Token di accesso", + "components.Settings.Notifications.NotificationsPushover.accessToken": "Token di API/applicazione", "components.RequestList.sortModified": "Ultima modifica", "components.RequestList.sortAdded": "Data della richiesta", "components.RequestList.showallrequests": "Mostra tutte le richieste", @@ -515,17 +515,17 @@ "components.UserEdit.advancedrequest": "Richieste avanzate", "components.StatusBadge.status4k": "4K {status}", "components.Settings.hideAvailable": "Nascondi i media disponibili", - "components.Settings.Notifications.NotificationsWebhook.webhooksettingssaved": "Impostazioni di Webhook salvate!", + "components.Settings.Notifications.NotificationsWebhook.webhooksettingssaved": "Impostazioni di Webhook salvate con successo!", "components.Settings.Notifications.NotificationsWebhook.webhooksettingsfailed": "Impossibile salvare le impostazioni di Webhook.", "components.Settings.Notifications.NotificationsWebhook.webhookUrlPlaceholder": "URL del webhook remoto", "components.Settings.Notifications.NotificationsWebhook.webhookUrl": "URL del webhook", "components.Settings.Notifications.NotificationsWebhook.validationWebhookUrlRequired": "Devi fornire un URL webhook.", - "components.Settings.Notifications.NotificationsWebhook.validationJsonPayloadRequired": "È necessario fornire un payload JSON", + "components.Settings.Notifications.NotificationsWebhook.validationJsonPayloadRequired": "È necessario fornire un payload JSON valido", "components.Settings.Notifications.NotificationsWebhook.test": "Test", - "components.Settings.Notifications.NotificationsWebhook.resetPayloadSuccess": "Payload JSON reimpostato correttamente.", + "components.Settings.Notifications.NotificationsWebhook.resetPayloadSuccess": "Payload JSON reimpostato correttamente!", "components.Settings.Notifications.NotificationsWebhook.resetPayload": "Ripristino delle impostazioni predefinite", "components.Settings.Notifications.NotificationsWebhook.notificationtypes": "Tipi di notifica", - "components.Settings.Notifications.NotificationsWebhook.customJson": "Payload JSON personalizzato", + "components.Settings.Notifications.NotificationsWebhook.customJson": "Payload JSON", "components.RequestModal.requestedited": "Richiesta modificata.", "components.RequestModal.requestcancelled": "Richiesta annullata.", "components.RequestModal.request4kfrom": "Al momento è presente una richiesta 4K in sospeso da {username}.", @@ -552,7 +552,7 @@ "components.PermissionEdit.settings": "Gestisci le impostazioni", "components.PermissionEdit.request4kTv": "Richiedi serie in 4K", "components.PermissionEdit.request4kMovies": "Rechiedi film in 4K", - "components.PermissionEdit.managerequests": "Gestisci le richieste", + "components.PermissionEdit.managerequests": "Gestisci Richieste", "components.PermissionEdit.autoapproveSeries": "Approva Automaticamente le Serie", "components.PermissionEdit.autoapproveMovies": "Approva Automaticamente i Film", "components.PermissionEdit.autoapprove": "Approvazione automatica", @@ -739,7 +739,7 @@ "components.UserProfile.UserSettings.UserNotificationSettings.notificationsettings": "Impostazioni Notifiche", "components.UserProfile.UserSettings.UserNotificationSettings.localuser": "Utente Locale", "components.UserProfile.UserSettings.UserNotificationSettings.enableNotifications": "Abilita Notifiche", - "components.UserProfile.UserSettings.UserNotificationSettings.discordIdTip": "Il numero ID per il tuo account Discord", + "components.UserProfile.UserSettings.UserNotificationSettings.discordIdTip": "ID utente del tuo account Discord", "components.UserProfile.UserSettings.UserNotificationSettings.discordId": "ID Discord", "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsSuccess": "Impostazioni salvate correttamente!", "components.Settings.Notifications.NotificationsPushbullet.saving": "Salvataggio…", @@ -764,10 +764,10 @@ "components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "È necessario fornire un token di accesso", "components.Settings.Notifications.NotificationsPushbullet.testSent": "Notifica di prova inviata!", "components.Settings.Notifications.NotificationsPushbullet.test": "Test", - "components.Settings.Notifications.NotificationsPushbullet.settingUpPushbulletDescription": "Per configurare le notifiche di Pushbullet, è necessario creare un token di accesso e immetterlo di seguito.", + "components.Settings.Notifications.NotificationsPushbullet.settingUpPushbulletDescription": "Per configurare le notifiche di Pushbullet, sarà necessario creare un token di accesso e immetterlo di seguito.", "components.Settings.Notifications.NotificationsPushbullet.settingUpPushbullet": "Configurazione delle notifiche di Pushover", "components.Settings.Notifications.NotificationsPushbullet.save": "Salva le modifiche", - "components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "Impostazioni di Pushover salvate!", + "components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "Impostazioni di Pushover salvate correttamente!", "components.Layout.UserDropdown.settings": "Impostazioni", "components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsFailed": "Impossibile salvare le impostazioni di Pushbullet.", "components.Settings.Notifications.NotificationsPushbullet.notificationTypes": "Tipi di Notifica", @@ -817,10 +817,15 @@ "components.Settings.originallanguage": "Lingua da scoprire", "components.Settings.email": "E-mail", "components.Settings.Notifications.emailNotificationTypesAlert": "Destinatari delle notifiche via posta elettronica", - "components.RegionSelector.regionDefault": "Tutto", + "components.RegionSelector.regionDefault": "Tutte le regioni", "components.UserProfile.UserSettings.UserGeneralSettings.regionTip": "Filtra contenuto per area (si applica solo alle categorie «Popolare» e «In uscita»)", "components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtra il contenuto in base alla lingua originale (si applica solo alle categorie «Popolare» e «In uscita»)", "components.Settings.regionTip": "Filtra contenuto per regione (si applica solo alle categorie «Popolare» e «In uscita»)", "components.Settings.originallanguageTip": "Filtra il contenuto in base alla lingua originale (si applica solo alle categorie «Popolare» e «In uscita»)", - "components.Discover.upcomingtv": "Serie in uscita" + "components.Discover.upcomingtv": "Serie in uscita", + "components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "Tutte le lingue", + "components.Settings.originalLanguageDefault": "Tutte le lingue", + "components.Settings.Notifications.emailNotificationTypesAlertDescription": "Le notifiche «Media richiesto» e «Aggiunta media non riuscita» saranno inviate solo agli utenti con il permesso «Gestisci richieste».", + "components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "Predefinito ({language})", + "components.RegionSelector.regionServerDefault": "Predefinito ({region})" } diff --git a/src/i18n/locale/nl.json b/src/i18n/locale/nl.json index 8822fdd877..d124367acf 100644 --- a/src/i18n/locale/nl.json +++ b/src/i18n/locale/nl.json @@ -390,7 +390,7 @@ "components.Settings.SettingsAbout.Releases.viewchangelog": "Changelog bekijken", "components.Settings.SettingsAbout.Releases.runningDevelopMessage": "De wijzigingen in je versie zijn hieronder niet beschikbaar. Bekijk 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 geldige chat-ID opgeven", + "components.Settings.Notifications.validationChatIdRequired": "Je moet een chat-ID opgeven", "components.Settings.Notifications.validationBotAPIRequired": "Je moet een bot-verificatietoken opgeven", "components.Settings.Notifications.telegramsettingssaved": "Instellingen Telegrammeldingen met succes opgeslagen!", "components.Settings.Notifications.telegramsettingsfailed": "De instellingen voor Telegrammeldingen konden niet opgeslagen worden.", @@ -450,7 +450,7 @@ "components.Settings.Notifications.NotificationsPushover.userToken": "Gebruikerssleutel", "components.Settings.Notifications.NotificationsPushover.testsent": "Testmelding verzonden!", "components.Settings.Notifications.NotificationsPushover.test": "Test", - "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Om Pushover in te stellen, moet je een applicatie registreren en de API-sleutel hieronder invoeren. (Je kunt een van onze officiële pictogrammen op GitHub gebruiken.) Je hebt ook je gebruikerssleutel nodig.", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Om Pushover in te stellen, moet je een applicatie registreren en de API-token hieronder invoeren. (Je kunt een van onze officiële pictogrammen op GitHub gebruiken.) Je hebt ook je gebruikerssleutel nodig.", "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Pushover-meldingen instellen", "i18n.request": "Aanvragen", "components.RequestButton.requestmore4k": "Meer 4K aanvragen", diff --git a/src/i18n/locale/pt_BR.json b/src/i18n/locale/pt_BR.json index 8dfb1cc535..163728b9d3 100644 --- a/src/i18n/locale/pt_BR.json +++ b/src/i18n/locale/pt_BR.json @@ -398,13 +398,13 @@ "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 válido de Chat", + "components.Settings.Notifications.validationChatIdRequired": "Você deve prover um ID de Chat", "components.Settings.Notifications.validationBotAPIRequired": "Você deve prover uma chave de autenticação do Bot", "components.Settings.Notifications.senderName": "Nome do Remetente", "components.Settings.Notifications.telegramsettingssaved": "Configurações de notificação via Telegram salvas com sucesso!", "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.settinguptelegramDescription": "Para configurar notificações via Telegram, você precisará 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": "Token de Autenticação do Bot", @@ -437,7 +437,7 @@ "components.Settings.Notifications.NotificationsPushover.userToken": "Chave do Usuário", "components.Settings.Notifications.NotificationsPushover.testsent": "Notificação de teste enviada!", "components.Settings.Notifications.NotificationsPushover.test": "Testar", - "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Para configurar notificações via Pushover, você precisa registrar um aplicativo e obter a chave de acesso. Quando estiver configurando o aplicativo, você pode usar um dos ícones no diretório público do GitHub. Você também precisa da chave de acesso que pode ser encontrada na página inicial do usuário Pushover.", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Para configurar notificações via Pushover, você precisará registrar um aplicativo e inserir a chave de API abaixo. (Você pode user um de nossos ícones oficiais.) Você precisará também sua chave de usuário.", "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Configurando Notificações Via Pushover", "components.Settings.Notifications.NotificationsPushover.saving": "Salvando…", "components.Settings.Notifications.NotificationsPushover.save": "Salvar Mudanças", @@ -830,13 +830,22 @@ "components.CollectionDetails.requestswillbecreated4k": "Serão feitas solicitações em 4K dos seguintes títulos:", "components.CollectionDetails.requestcollection4k": "Solicitar Coleção em 4K", "components.CollectionDetails.request4k": "Solicitar 4K", - "components.UserProfile.UserSettings.UserGeneralSettings.region": "País de Exploração", + "components.UserProfile.UserSettings.UserGeneralSettings.region": "Região de Exploração", "components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Idioma de Exploração", "components.Settings.webhook": "Webhook", - "components.Settings.region": "País de Exploração", + "components.Settings.region": "Região de Exploração", "components.Settings.originallanguage": "Idioma de Exploração", "components.Settings.email": "E-mail", "components.Settings.Notifications.emailNotificationTypesAlert": "E-mail de Destinatários", - "components.RegionSelector.regionDefault": "Todas", - "components.Discover.upcomingtv": "Séries Em Breve" + "components.RegionSelector.regionDefault": "Todas Regiões", + "components.Discover.upcomingtv": "Séries Em Breve", + "components.UserProfile.UserSettings.UserGeneralSettings.regionTip": "Filtra conteúdo por região (se aplica apenas às categorias \"Popular\" e \"Em Breve\")", + "components.Settings.regionTip": "Filtra conteúdo por região (se aplica apenas às categorias \"Popular\" e \"Em Breve\")", + "components.Settings.Notifications.emailNotificationTypesAlertDescription": "Para notificações do tipo \"Mídia Solicitada\" e \"Solicitação Falhou\", as notificações serão enviadas apenas para usuários com permissão de \"Gerenciar Solicitações\".", + "components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtra conteúdo pela língua original (se aplica apenas às categorias \"Popular\" e \"Em Breve\")", + "components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "Todos Idiomas", + "components.Settings.originallanguageTip": "Filtra conteúdo pela língua original (se aplica apenas às categorias \"Popular\" e \"Em Breve\")", + "components.Settings.originalLanguageDefault": "Todos Idiomas", + "components.RegionSelector.regionServerDefault": "Padrão ({region})", + "components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "Padrão ({language})" } diff --git a/src/i18n/locale/pt_PT.json b/src/i18n/locale/pt_PT.json index 7d1a85e225..f614f1ac03 100644 --- a/src/i18n/locale/pt_PT.json +++ b/src/i18n/locale/pt_PT.json @@ -35,7 +35,7 @@ "components.Settings.Notifications.validationSmtpPortRequired": "Você deve fornecer a porta SMTP", "components.Settings.Notifications.validationSmtpHostRequired": "Você deve fornecer um servidor SMTP", "components.Settings.Notifications.validationFromRequired": "Você deve fornecer um endereço do remetente", - "components.Settings.Notifications.validationChatIdRequired": "Você deve fornecer um ID de chat válido", + "components.Settings.Notifications.validationChatIdRequired": "Você deve fornecer um ID de chat", "components.Settings.Notifications.validationBotAPIRequired": "Você deve fornecer um token de autenticação de bot", "components.Settings.Notifications.telegramsettingssaved": "Configurações de notificação Telegram salvas com sucesso!", "components.Settings.Notifications.telegramsettingsfailed": "Falhou o salvar das configurações de notificação Telegram.", @@ -85,7 +85,7 @@ "components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Configurações de notificação Slack salvas com sucesso!", "components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Falhou o salvar das configurações de notificação do Slack.", "components.Settings.Notifications.NotificationsSlack.settingupslackDescription": "Para configurar notificações Slack, você precisará criar uma integração Webhook de entrada insire o URL do webhook fornecido abaixo.", - "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Para configurar notificações Pushover, você precisará registrar uma aplicação e inserir a chave API abaixo. (Você pode utilizar um dos nossos ícones oficiais no GitHub.) Você também precisará da sua chave de utilizador.", + "components.Settings.Notifications.NotificationsPushover.settinguppushoverDescription": "Para configurar notificações Pushover, você precisará registrar uma aplicação e inserir o token do API abaixo. (Você pode utilizar um dos nossos ícones oficiais no GitHub.) Você também precisará da sua chave de utilizador.", "components.Settings.Notifications.NotificationsPushover.settinguppushover": "Configurando Notificações Pushover", "components.Settings.Notifications.NotificationsSlack.settingupslack": "Configurando Notificações Slack", "components.Settings.save": "Salvar Mudanças", @@ -824,5 +824,7 @@ "components.Settings.Notifications.emailNotificationTypesAlertDescription": "Para os tipos de notificação \"Mídia Solicitada\" e \"Mídia Falhou\", as notificações serão enviadas apenas para utilizadores com a permissão \"Gerir Solicitações\".", "components.Settings.Notifications.emailNotificationTypesAlert": "Destinatários de E-Mail de Notificação", "components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "Todas as Idiomas", - "components.Settings.originalLanguageDefault": "Todas as Idiomas" + "components.Settings.originalLanguageDefault": "Todas as Idiomas", + "components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "Padrão ({language})", + "components.RegionSelector.regionServerDefault": "Padrão ({region})" } diff --git a/src/i18n/locale/sr.json b/src/i18n/locale/sr.json index 6077849554..f7612d1bad 100644 --- a/src/i18n/locale/sr.json +++ b/src/i18n/locale/sr.json @@ -30,7 +30,7 @@ "components.UserList.username": "Korisničko Ime", "components.UserList.userlist": "Lista Korisnika", "components.UserList.userdeleteerror": "Neuspešno brisanje korisnika", - "components.UserList.userdeleted": "Korisnik izbrisan", + "components.UserList.userdeleted": "Korisnik izbrisan.", "components.UserList.user": "Korisnik", "components.UserList.totalrequests": "Ukupno Zahteva", "components.UserList.role": "Uloga", @@ -76,7 +76,7 @@ "components.TvDetails.recommendationssubtext": "Ako vam se svidja {title}, možda vam se svidi…", "components.TvDetails.recommendations": "Preporuke", "components.TvDetails.pending": "Na čekanju", - "components.TvDetails.overviewunavailable": "Pregled nije dostupan", + "components.TvDetails.overviewunavailable": "Pregled nije dostupan.", "components.TvDetails.overview": "Pregled", "components.TvDetails.originallanguage": "Originalni Jezik", "components.TvDetails.network": "Mreža", @@ -94,7 +94,7 @@ "components.TvDetails.TvCast.fullseriescast": "Ceo Repertoar Serije", "components.TitleCard.tvshow": "Serija", "components.TitleCard.movie": "Film", - "components.Slider.noresults": "Nema Rezultata", + "components.Slider.noresults": "Nema rezultata.", "components.Setup.welcome": "Dobrodošli u Overseerr", "components.Setup.tip": "Savet", "components.Setup.syncingbackground": "Sinhronizacija će raditi u pozadini. Možete da nastavite podešavanja u toku rada.", @@ -155,7 +155,7 @@ "components.Settings.default4k": "Defaultno 4K", "components.Settings.default": "Defaultno", "components.Settings.currentlibrary": "Trenutna Biblioteka: {name}", - "components.Settings.copied": "Kopiran API ključ", + "components.Settings.copied": "Kopiran API ključ.", "components.Settings.cancelscan": "Otkaži skeniranje", "components.Settings.applicationurl": "URL Aplikacije", "components.Settings.apikey": "API Ključ", @@ -206,7 +206,7 @@ "components.Settings.SettingsAbout.overseerrinformation": "Overseerr Informacije", "components.Settings.SettingsAbout.githubdiscussions": "GitHub rasprave", "components.Settings.SettingsAbout.gettingsupport": "Pomoć", - "components.Settings.SettingsAbout.clickheretojoindiscord": "Kliknite ovde da se učlanite u naš Discord server.", + "components.Settings.SettingsAbout.clickheretojoindiscord": "Kliknite ovde da se učlanite u naš Discord server!", "components.Settings.RadarrModal.validationRootFolderRequired": "Morate odabrati root folder", "components.Settings.RadarrModal.validationProfileRequired": "Morate odabrati profil", "components.Settings.RadarrModal.validationPortRequired": "Morate dodati port", @@ -274,7 +274,7 @@ "components.RequestModal.requestfrom": "Trenutno postoji zahtev na čekanju od {username}", "components.RequestModal.requestadmin": "Vaš zahtev će odmah biti prihvaćen.", "components.RequestModal.requestSuccess": "poslat zahtev za {title} .", - "components.RequestModal.requestCancel": "Zahtev za {title} otkazan", + "components.RequestModal.requestCancel": "Zahtev za {title} otkazan.", "components.RequestModal.request": "Zahtev", "components.RequestModal.pendingrequest": "Zahtev za {title} na čekanju", "components.RequestModal.numberofepisodes": "Broj Epizoda", @@ -317,7 +317,7 @@ "components.MovieDetails.recommendationssubtext": "Ako vam se svidja {title}, možda vam se dopadne…", "components.MovieDetails.recommendations": "Predlozi", "components.MovieDetails.pending": "Na čekanju", - "components.MovieDetails.overviewunavailable": "Pregled nije dostupan", + "components.MovieDetails.overviewunavailable": "Pregled nije dostupan.", "components.MovieDetails.overview": "Pregled", "components.MovieDetails.originallanguage": "Originalni Jezik", "components.MovieDetails.manageModalTitle": "Upravljaj Filmom", diff --git a/src/i18n/locale/zh_Hant.json b/src/i18n/locale/zh_Hant.json index b3eb51508a..0de1779210 100644 --- a/src/i18n/locale/zh_Hant.json +++ b/src/i18n/locale/zh_Hant.json @@ -449,7 +449,7 @@ "components.Settings.RadarrModal.validationNameRequired": "必須輸入伺服器名稱", "components.Settings.RadarrModal.validationHostnameRequired": "必須輸入主機名稱或 IP 位址", "components.Settings.RadarrModal.validationApiKeyRequired": "必須輸入應用程式密鑰", - "components.Settings.Notifications.validationChatIdRequired": "必須輸入有效 Chat ID", + "components.Settings.Notifications.validationChatIdRequired": "必須輸入 Chat ID", "components.Settings.Notifications.NotificationsWebhook.validationJsonPayloadRequired": "必須輸入有效的 JSON 有效負載", "components.Settings.Notifications.NotificationsWebhook.authheader": "Authorization 頭欄位", "components.Settings.RadarrModal.minimumAvailability": "最低狀態", @@ -807,5 +807,8 @@ "components.Settings.SettingsJobsCache.jobsDescription": "Overseerr 將定時運行以下的維護任務。手動執行工作不會影響它正常的時間表。", "components.Settings.plexsettingsDescription": "關於 Plex 伺服器的設置。Overseerr 將定時執行媒體庫掃描。", "components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "所有語言", - "components.Settings.originalLanguageDefault": "所有語言" + "components.Settings.originalLanguageDefault": "所有語言", + "components.Settings.manualscanDescription": "在正常情況下,Overseerr 會每24小時掃描您的 Plex 媒體庫。最近添加的媒體將更頻繁掃描。設置新的 Plex 伺服器時,我們建議您執行一次手動掃描!", + "components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "默認({language})", + "components.RegionSelector.regionServerDefault": "默認({region})" } diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 81aa6efde4..a088ded47a 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -145,6 +145,7 @@ CoreApp.getInitialProps = async (initialProps) => { series4kEnabled: false, localLogin: true, region: '', + originalLanguage: '', }; let locale = 'en'; diff --git a/yarn.lock b/yarn.lock index 4bf84e6c70..4ba5ae422a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2025,6 +2025,11 @@ dependencies: "@types/express" "*" +"@types/country-flag-icons@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/country-flag-icons/-/country-flag-icons-1.2.0.tgz#5d13276405a5701ca29bbd7f1026f45c0d2962be" + integrity sha512-96aveJfAw9iSfBxAD8DCgFYjMFmLIGa+vBvg3cKiHjX+o4Szz5HHv2DSbEVm9a4kLixsYkioGB4SnJs17Zypzw== + "@types/csurf@^1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@types/csurf/-/csurf-1.11.0.tgz#2809e89f55f12a2df8cd2826c06dfd66600dd14d" @@ -4593,10 +4598,10 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -country-code-emoji@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/country-code-emoji/-/country-code-emoji-2.2.0.tgz#afc99b8bbaff9cb038e370dc46faabbd7af48f64" - integrity sha512-iK7tw8pRbFIad7a3UDbx13SJpZj4ZReozc6oW6K6Wu4sAphQkJVxK8qfaPjFIXp22RoP/238WEDrKpIWxxI9CQ== +country-flag-icons@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/country-flag-icons/-/country-flag-icons-1.2.9.tgz#cee7d150b23d3532adcc1e22c2ebb59962e04633" + integrity sha512-qn1cKt9PJrghEb1IbyIIqHcvNLPJ8mul0lbz6lFSBmzbGqYC38PJ4wPSIT0gV/iB/DbPylHE04zJNedrj1BXvA== country-language@^0.1.7: version "0.1.7"