@@ -28,11 +30,14 @@ const PullToRefresh: React.FC = () => {
instructionsReleaseToRefresh: ReactDOMServer.renderToString(
),
instructionsRefreshing: ReactDOMServer.renderToString(
),
distReload: 60,
+ distIgnore: 15,
+ shouldPullToRefresh: () =>
+ !window.scrollY && document.body.style.overflow !== 'hidden',
});
return () => {
PR.destroyAll();
};
- }, []);
+ }, [router]);
return
;
};
diff --git a/src/components/RequestCard/index.tsx b/src/components/RequestCard/index.tsx
index 9ccbcde02..27bb33834 100644
--- a/src/components/RequestCard/index.tsx
+++ b/src/components/RequestCard/index.tsx
@@ -4,6 +4,7 @@ import CachedImage from '@app/components/Common/CachedImage';
import Tooltip from '@app/components/Common/Tooltip';
import RequestModal from '@app/components/RequestModal';
import StatusBadge from '@app/components/StatusBadge';
+import useDeepLinks from '@app/hooks/useDeepLinks';
import { Permission, useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import { withProperties } from '@app/utils/typeHelpers';
@@ -61,6 +62,13 @@ const RequestCardError = ({ requestData }: RequestCardErrorProps) => {
const { hasPermission } = useUser();
const intl = useIntl();
+ const { mediaUrl: plexUrl, mediaUrl4k: plexUrl4k } = useDeepLinks({
+ mediaUrl: requestData?.media?.mediaUrl,
+ mediaUrl4k: requestData?.media?.mediaUrl4k,
+ iOSPlexUrl: requestData?.media?.iOSPlexUrl,
+ iOSPlexUrl4k: requestData?.media?.iOSPlexUrl4k,
+ });
+
const deleteRequest = async () => {
await axios.delete(`/api/v1/media/${requestData?.media.id}`);
mutate('/api/v1/media?filter=allavailable&take=20&sort=mediaAdded');
@@ -138,11 +146,7 @@ const RequestCardError = ({ requestData }: RequestCardErrorProps) => {
).length > 0
}
is4k={requestData.is4k}
- plexUrl={
- requestData.is4k
- ? requestData.media.mediaUrl4k
- : requestData.media.mediaUrl
- }
+ plexUrl={requestData.is4k ? plexUrl4k : plexUrl}
serviceUrl={
requestData.is4k
? requestData.media.serviceUrl4k
@@ -217,6 +221,13 @@ const RequestCard = ({ request, onTitleData }: RequestCardProps) => {
fallbackData: request,
});
+ const { mediaUrl: plexUrl, mediaUrl4k: plexUrl4k } = useDeepLinks({
+ mediaUrl: requestData?.media?.mediaUrl,
+ mediaUrl4k: requestData?.media?.mediaUrl4k,
+ iOSPlexUrl: requestData?.media?.iOSPlexUrl,
+ iOSPlexUrl4k: requestData?.media?.iOSPlexUrl4k,
+ });
+
const modifyRequest = async (type: 'approve' | 'decline') => {
const response = await axios.post(`/api/v1/request/${request.id}/${type}`);
@@ -396,11 +407,7 @@ const RequestCard = ({ request, onTitleData }: RequestCardProps) => {
is4k={requestData.is4k}
tmdbId={requestData.media.tmdbId}
mediaType={requestData.type}
- plexUrl={
- requestData.is4k
- ? requestData.media.mediaUrl4k
- : requestData.media.mediaUrl
- }
+ plexUrl={requestData.is4k ? plexUrl4k : plexUrl}
serviceUrl={
requestData.is4k
? requestData.media.serviceUrl4k
diff --git a/src/components/RequestList/RequestItem/index.tsx b/src/components/RequestList/RequestItem/index.tsx
index 6c232dc89..e5a00de75 100644
--- a/src/components/RequestList/RequestItem/index.tsx
+++ b/src/components/RequestList/RequestItem/index.tsx
@@ -4,6 +4,7 @@ import CachedImage from '@app/components/Common/CachedImage';
import ConfirmButton from '@app/components/Common/ConfirmButton';
import RequestModal from '@app/components/RequestModal';
import StatusBadge from '@app/components/StatusBadge';
+import useDeepLinks from '@app/hooks/useDeepLinks';
import { Permission, useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import {
@@ -61,6 +62,13 @@ const RequestItemError = ({
revalidateList();
};
+ const { mediaUrl: plexUrl, mediaUrl4k: plexUrl4k } = useDeepLinks({
+ mediaUrl: requestData?.media?.mediaUrl,
+ mediaUrl4k: requestData?.media?.mediaUrl4k,
+ iOSPlexUrl: requestData?.media?.iOSPlexUrl,
+ iOSPlexUrl4k: requestData?.media?.iOSPlexUrl4k,
+ });
+
return (
@@ -130,11 +138,7 @@ const RequestItemError = ({
).length > 0
}
is4k={requestData.is4k}
- plexUrl={
- requestData.is4k
- ? requestData.media.mediaUrl4k
- : requestData.media.mediaUrl
- }
+ plexUrl={requestData.is4k ? plexUrl4k : plexUrl}
serviceUrl={
requestData.is4k
? requestData.media.serviceUrl4k
@@ -316,6 +320,13 @@ const RequestItem = ({ request, revalidateList }: RequestItemProps) => {
}
};
+ const { mediaUrl: plexUrl, mediaUrl4k: plexUrl4k } = useDeepLinks({
+ mediaUrl: requestData?.media?.mediaUrl,
+ mediaUrl4k: requestData?.media?.mediaUrl4k,
+ iOSPlexUrl: requestData?.media?.iOSPlexUrl,
+ iOSPlexUrl4k: requestData?.media?.iOSPlexUrl4k,
+ });
+
if (!title && !error) {
return (
{
is4k={requestData.is4k}
tmdbId={requestData.media.tmdbId}
mediaType={requestData.type}
- plexUrl={
- requestData.is4k
- ? requestData.media.mediaUrl4k
- : requestData.media.mediaUrl
- }
+ plexUrl={requestData.is4k ? plexUrl4k : plexUrl}
serviceUrl={
requestData.is4k
? requestData.media.serviceUrl4k
diff --git a/src/components/Settings/SettingsJobsCache/index.tsx b/src/components/Settings/SettingsJobsCache/index.tsx
index 7317c8e82..f3402e2ed 100644
--- a/src/components/Settings/SettingsJobsCache/index.tsx
+++ b/src/components/Settings/SettingsJobsCache/index.tsx
@@ -13,7 +13,10 @@ import { Transition } from '@headlessui/react';
import { PlayIcon, StopIcon, TrashIcon } from '@heroicons/react/outline';
import { PencilIcon } from '@heroicons/react/solid';
import { MediaServerType } from '@server/constants/server';
-import type { CacheItem } from '@server/interfaces/api/settingsInterfaces';
+import type {
+ CacheItem,
+ CacheResponse,
+} from '@server/interfaces/api/settingsInterfaces';
import type { JobId } from '@server/lib/settings';
import axios from 'axios';
import cronstrue from 'cronstrue/i18n';
@@ -58,6 +61,7 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages({
'sonarr-scan': 'Sonarr Scan',
'download-sync': 'Download Sync',
'download-sync-reset': 'Download Sync Reset',
+ 'image-cache-cleanup': 'Image Cache Cleanup',
editJobSchedule: 'Modify Job',
jobScheduleEditSaved: 'Job edited successfully!',
jobScheduleEditFailed: 'Something went wrong while saving the job.',
@@ -67,6 +71,11 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages({
'Every {jobScheduleHours, plural, one {hour} other {{jobScheduleHours} hours}}',
editJobScheduleSelectorMinutes:
'Every {jobScheduleMinutes, plural, one {minute} other {{jobScheduleMinutes} minutes}}',
+ imagecache: 'Image Cache',
+ imagecacheDescription:
+ 'When enabled in settings, Overseerr will proxy and cache images from pre-configured external sources. Cached images are saved into your config folder. You can find the files in
{appDataPath}/cache/images.',
+ imagecachecount: 'Images Cached',
+ imagecachesize: 'Total Cache Size',
});
interface Job {
@@ -132,7 +141,8 @@ const SettingsJobs = () => {
} = useSWR
('/api/v1/settings/jobs', {
refreshInterval: 5000,
});
- const { data: cacheData, mutate: cacheRevalidate } = useSWR(
+ const { data: appData } = useSWR('/api/v1/status/appdata');
+ const { data: cacheData, mutate: cacheRevalidate } = useSWR(
'/api/v1/settings/cache',
{
refreshInterval: 10000,
@@ -435,7 +445,7 @@ const SettingsJobs = () => {
- {cacheData
+ {cacheData?.apiCaches
?.filter(
(cache) =>
!(
@@ -465,6 +475,41 @@ const SettingsJobs = () => {
+
+
{intl.formatMessage(messages.imagecache)}
+
+ {intl.formatMessage(messages.imagecacheDescription, {
+ code: (msg: React.ReactNode) => (
+ {msg}
+ ),
+ appDataPath: appData ? appData.appDataPath : '/app/config',
+ })}
+
+
+
+
+
+
+ {intl.formatMessage(messages.cachename)}
+
+ {intl.formatMessage(messages.imagecachecount)}
+
+ {intl.formatMessage(messages.imagecachesize)}
+
+
+
+
+ The Movie Database (tmdb)
+
+ {intl.formatNumber(cacheData?.imageCache.tmdb.imageCount ?? 0)}
+
+
+ {formatBytes(cacheData?.imageCache.tmdb.size ?? 0)}
+
+
+
+
+
>
);
};
diff --git a/src/components/Settings/SettingsMain.tsx b/src/components/Settings/SettingsMain.tsx
index ef0810f5e..7d4e188e5 100644
--- a/src/components/Settings/SettingsMain.tsx
+++ b/src/components/Settings/SettingsMain.tsx
@@ -46,7 +46,7 @@ const messages = defineMessages({
'Do NOT enable this setting unless you understand what you are doing!',
cacheImages: 'Enable Image Caching',
cacheImagesTip:
- 'Cache and serve optimized images (requires a significant amount of disk space)',
+ 'Cache externally sourced images (requires a significant amount of disk space)',
trustProxy: 'Enable Proxy Support',
trustProxyTip:
'Allow Overseerr to correctly register client IP addresses behind a proxy',
diff --git a/src/components/StatusBadge/index.tsx b/src/components/StatusBadge/index.tsx
index 22fa2bbe8..cd5e0ad1a 100644
--- a/src/components/StatusBadge/index.tsx
+++ b/src/components/StatusBadge/index.tsx
@@ -5,12 +5,14 @@ import useSettings from '@app/hooks/useSettings';
import { Permission, useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import { MediaStatus } from '@server/constants/media';
+import { MediaServerType } from '@server/constants/server';
+import getConfig from 'next/config';
import { defineMessages, useIntl } from 'react-intl';
const messages = defineMessages({
status: '{status}',
status4k: '4K {status}',
- playonplex: 'Play on Plex',
+ playonplex: 'Play on {mediaServerName}',
openinarr: 'Open in {arr}',
managemedia: 'Manage {mediaType}',
});
@@ -37,6 +39,7 @@ const StatusBadge = ({
const intl = useIntl();
const { hasPermission } = useUser();
const settings = useSettings();
+ const { publicRuntimeConfig } = getConfig();
let mediaLink: string | undefined;
let mediaLinkDescription: string | undefined;
@@ -68,7 +71,14 @@ const StatusBadge = ({
: settings.currentSettings.series4kEnabled))
) {
mediaLink = plexUrl;
- mediaLinkDescription = intl.formatMessage(messages.playonplex);
+ mediaLinkDescription = intl.formatMessage(messages.playonplex, {
+ mediaServerName:
+ publicRuntimeConfig.JELLYFIN_TYPE == 'emby'
+ ? 'Emby'
+ : settings.currentSettings.mediaServerType === MediaServerType.PLEX
+ ? 'Plex'
+ : 'Jellyfin',
+ });
} else if (hasPermission(Permission.MANAGE_REQUESTS)) {
if (mediaType && tmdbId) {
mediaLink = `/${mediaType}/${tmdbId}?manage=1`;
diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx
index 7c38a4238..1792027e9 100644
--- a/src/components/TvDetails/index.tsx
+++ b/src/components/TvDetails/index.tsx
@@ -22,6 +22,7 @@ import RequestModal from '@app/components/RequestModal';
import Slider from '@app/components/Slider';
import StatusBadge from '@app/components/StatusBadge';
import Season from '@app/components/TvDetails/Season';
+import useDeepLinks from '@app/hooks/useDeepLinks';
import useLocale from '@app/hooks/useLocale';
import useSettings from '@app/hooks/useSettings';
import { Permission, useUser } from '@app/hooks/useUser';
@@ -125,31 +126,12 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
setShowManager(router.query.manage == '1' ? true : false);
}, [router.query.manage]);
- const [plexUrl, setPlexUrl] = useState(data?.mediaInfo?.mediaUrl);
- const [plexUrl4k, setPlexUrl4k] = useState(data?.mediaInfo?.mediaUrl4k);
-
- useEffect(() => {
- if (data) {
- if (
- settings.currentSettings.mediaServerType === MediaServerType.PLEX &&
- (/iPad|iPhone|iPod/.test(navigator.userAgent) ||
- (navigator.userAgent === 'MacIntel' && navigator.maxTouchPoints > 1))
- ) {
- setPlexUrl(data.mediaInfo?.iOSPlexUrl);
- setPlexUrl4k(data.mediaInfo?.iOSPlexUrl4k);
- } else {
- setPlexUrl(data.mediaInfo?.mediaUrl);
- setPlexUrl4k(data.mediaInfo?.mediaUrl4k);
- }
- }
- }, [
- data,
- data?.mediaInfo?.iOSPlexUrl,
- data?.mediaInfo?.iOSPlexUrl4k,
- data?.mediaInfo?.mediaUrl,
- data?.mediaInfo?.mediaUrl4k,
- settings.currentSettings.mediaServerType,
- ]);
+ const { mediaUrl: plexUrl, mediaUrl4k: plexUrl4k } = useDeepLinks({
+ mediaUrl: data?.mediaInfo?.mediaUrl,
+ mediaUrl4k: data?.mediaInfo?.mediaUrl4k,
+ iOSPlexUrl: data?.mediaInfo?.iOSPlexUrl,
+ iOSPlexUrl4k: data?.mediaInfo?.iOSPlexUrl4k,
+ });
if (!data && !error) {
return
;
@@ -984,9 +966,7 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
tvdbId={data.externalIds.tvdbId}
imdbId={data.externalIds.imdbId}
rtUrl={ratingData?.url}
- mediaUrl={
- data.mediaInfo?.mediaUrl ?? data.mediaInfo?.mediaUrl4k
- }
+ mediaUrl={plexUrl ?? plexUrl4k}
/>
diff --git a/src/context/LanguageContext.tsx b/src/context/LanguageContext.tsx
index 0cf4d7d79..115f4f4b6 100644
--- a/src/context/LanguageContext.tsx
+++ b/src/context/LanguageContext.tsx
@@ -10,6 +10,7 @@ export type AvailableLocale =
| 'el'
| 'es'
| 'fr'
+ | 'hr'
| 'hu'
| 'it'
| 'ja'
@@ -60,6 +61,10 @@ export const availableLanguages: AvailableLanguageObject = {
code: 'fr',
display: 'Français',
},
+ hr: {
+ code: 'hr',
+ display: 'Hrvatski',
+ },
it: {
code: 'it',
display: 'Italiano',
diff --git a/src/hooks/useDeepLinks.ts b/src/hooks/useDeepLinks.ts
new file mode 100644
index 000000000..983086591
--- /dev/null
+++ b/src/hooks/useDeepLinks.ts
@@ -0,0 +1,45 @@
+import useSettings from '@app/hooks/useSettings';
+import { MediaServerType } from '@server/constants/server';
+import { useEffect, useState } from 'react';
+
+interface useDeepLinksProps {
+ mediaUrl?: string;
+ mediaUrl4k?: string;
+ iOSPlexUrl?: string;
+ iOSPlexUrl4k?: string;
+}
+
+const useDeepLinks = ({
+ mediaUrl,
+ mediaUrl4k,
+ iOSPlexUrl,
+ iOSPlexUrl4k,
+}: useDeepLinksProps) => {
+ const [returnedMediaUrl, setReturnedMediaUrl] = useState(mediaUrl);
+ const [returnedMediaUrl4k, setReturnedMediaUrl4k] = useState(mediaUrl4k);
+ const settings = useSettings();
+
+ useEffect(() => {
+ if (
+ settings.currentSettings.mediaServerType === MediaServerType.PLEX &&
+ (/iPad|iPhone|iPod/.test(navigator.userAgent) ||
+ (navigator.userAgent === 'MacIntel' && navigator.maxTouchPoints > 1))
+ ) {
+ setReturnedMediaUrl(iOSPlexUrl);
+ setReturnedMediaUrl4k(iOSPlexUrl4k);
+ } else {
+ setReturnedMediaUrl(mediaUrl);
+ setReturnedMediaUrl4k(mediaUrl4k);
+ }
+ }, [
+ iOSPlexUrl,
+ iOSPlexUrl4k,
+ mediaUrl,
+ mediaUrl4k,
+ settings.currentSettings.mediaServerType,
+ ]);
+
+ return { mediaUrl: returnedMediaUrl, mediaUrl4k: returnedMediaUrl4k };
+};
+
+export default useDeepLinks;
diff --git a/src/i18n/locale/ar.json b/src/i18n/locale/ar.json
index bba3d1710..95b6e3287 100644
--- a/src/i18n/locale/ar.json
+++ b/src/i18n/locale/ar.json
@@ -37,7 +37,7 @@
"components.ManageSlideOver.alltime": "جميع الأوقات",
"components.ManageSlideOver.downloadstatus": "التنزيلات",
"components.ManageSlideOver.manageModalAdvanced": "متقدم",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* سيتم حذف جميع البيانات بشكل نهائي لـ {mediaType},متضمنا جميع الطلبات.إذا كان هذا المحتوى متوفر في مكتبة بليكس، سيتم إعادة تفاصيل المحتوى في عملية الفحص القادمة.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* سيتم حذف جميع البيانات بشكل نهائي لـ {mediaType},متضمنا جميع الطلبات.إذا كان هذا المحتوى متوفر في مكتبة {mediaServerName}، سيتم إعادة تفاصيل المحتوى في عملية الفحص القادمة.",
"components.ManageSlideOver.manageModalRequests": "الطلبات",
"components.ManageSlideOver.manageModalTitle": "إدارة {mediaType}",
"components.ManageSlideOver.manageModalIssues": "المشاكل المفتوحة",
diff --git a/src/i18n/locale/ca.json b/src/i18n/locale/ca.json
index a0eaeb14c..9733c4b63 100644
--- a/src/i18n/locale/ca.json
+++ b/src/i18n/locale/ca.json
@@ -887,7 +887,7 @@
"components.IssueModal.CreateIssueModal.whatswrong": "Què passa?",
"components.IssueModal.issueAudio": "Àudio",
"components.IssueModal.issueOther": "Altre",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Això eliminarà de manera irreversible totes les dades de {mediaType}, incloses les sol·licituds. Si aquest element existeix a la vostra biblioteca Plex, la informació dels continguts es recrearà durant la següent exploració.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Això eliminarà de manera irreversible totes les dades de {mediaType}, incloses les sol·licituds. Si aquest element existeix a la vostra biblioteca {mediaServerName}, la informació dels continguts es recrearà durant la següent exploració.",
"components.ManageSlideOver.downloadstatus": "Descàrregues",
"components.IssueDetails.toasteditdescriptionsuccess": "La descripció de l'incidència s'ha editat correctament!",
"components.IssueList.IssueItem.issuetype": "Tipus",
@@ -1104,7 +1104,7 @@
"components.RequestBlock.delete": "Suprimeix la sol·licitud",
"components.RequestBlock.edit": "Edita la sol·licitud",
"components.RequestBlock.lastmodifiedby": "Última modificació per",
- "components.StatusBadge.playonplex": "Reprodueix a Plex",
+ "components.StatusBadge.playonplex": "Reprodueix a {mediaServerName}",
"components.RequestCard.declinerequest": "Rebutja la sol·licitud",
"components.StatusBadge.openinarr": "Obre a {arr}",
"components.Settings.SettingsJobsCache.plex-watchlist-sync": "Sincronització de la llista de seguiment de Plex",
diff --git a/src/i18n/locale/cs.json b/src/i18n/locale/cs.json
index 817e12ed4..dedf8b15f 100644
--- a/src/i18n/locale/cs.json
+++ b/src/i18n/locale/cs.json
@@ -548,7 +548,7 @@
"components.ManageSlideOver.manageModalClearMedia": "Vyčistit data",
"components.ManageSlideOver.alltime": "Pořád",
"components.ManageSlideOver.manageModalAdvanced": "Pokročilý",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Tímto nenávratně odstraníte všechna data pro tento {mediaType}, včetně všech požadavků. Pokud tato položka existuje ve vaší knihovně Plex, informace o médiích budou znovu vytvořeny během příštího skenování.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Tímto nenávratně odstraníte všechna data pro tento {mediaType}, včetně všech požadavků. Pokud tato položka existuje ve vaší knihovně {mediaServerName}, informace o médiích budou znovu vytvořeny během příštího skenování.",
"components.ManageSlideOver.manageModalMedia": "Média",
"components.ManageSlideOver.manageModalMedia4k": "4K Média",
"components.ManageSlideOver.markallseasonsavailable": "Označte všechny sezóny jako dostupné",
@@ -1087,7 +1087,7 @@
"components.Settings.SettingsJobsCache.plex-watchlist-sync": "Plex Watchlist synchronizace",
"components.StatusBadge.managemedia": "Spravovat {mediaType}",
"components.StatusBadge.openinarr": "Otevřít v {arr}",
- "components.StatusBadge.playonplex": "Přehrávání cez Plex",
+ "components.StatusBadge.playonplex": "Přehrávání cez {mediaServerName}",
"components.TvDetails.manageseries": "Spravovat sérii",
"components.RequestBlock.delete": "Smazat požadavek",
"components.RequestBlock.edit": "Upravit požadavek",
diff --git a/src/i18n/locale/da.json b/src/i18n/locale/da.json
index cd6da0d2e..15da81181 100644
--- a/src/i18n/locale/da.json
+++ b/src/i18n/locale/da.json
@@ -201,7 +201,7 @@
"components.IssueModal.issueVideo": "Video",
"components.Layout.Sidebar.issues": "Problemer",
"components.ManageSlideOver.manageModalClearMedia": "Ryd Mediedata",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Dette vil slette alle data for denne {mediaType} uden mulighed for gendannelse, inklusiv alle forespørgsler. Hvis dette objekt findes i dit Plex bibliotek vil medieinformationen blive genskabt under næste skanning.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Dette vil slette alle data for denne {mediaType} uden mulighed for gendannelse, inklusiv alle forespørgsler. Hvis dette objekt findes i dit {mediaServerName} bibliotek vil medieinformationen blive genskabt under næste skanning.",
"components.IssueModal.CreateIssueModal.whatswrong": "Hvad er galt?",
"components.IssueModal.issueAudio": "Lyd",
"components.IssueModal.issueOther": "Andet",
diff --git a/src/i18n/locale/de.json b/src/i18n/locale/de.json
index 61153d82c..86c3f86c0 100644
--- a/src/i18n/locale/de.json
+++ b/src/i18n/locale/de.json
@@ -931,7 +931,7 @@
"components.Layout.Sidebar.issues": "Probleme",
"components.ManageSlideOver.downloadstatus": "Downloads",
"components.ManageSlideOver.manageModalClearMedia": "Daten löschen",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Dadurch werden alle Daten für diesen {mediaType} unwiderruflich entfernt, einschließlich aller Anfragen. Wenn dieses Element in Ihrer Plex-Bibliothek existiert, werden die Medieninformationen beim nächsten Scan neu erstellt.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Dadurch werden alle Daten für diesen {mediaType} unwiderruflich entfernt, einschließlich aller Anfragen. Wenn dieses Element in Ihrer {mediaServerName}-Bibliothek existiert, werden die Medieninformationen beim nächsten Scan neu erstellt.",
"components.ManageSlideOver.manageModalIssues": "Problem eröffnen",
"components.ManageSlideOver.manageModalNoRequests": "Keine Anfragen.",
"components.ManageSlideOver.manageModalRequests": "Anfragen",
diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json
index b5acab96c..27f21134c 100644
--- a/src/i18n/locale/en.json
+++ b/src/i18n/locale/en.json
@@ -141,7 +141,7 @@
"components.ManageSlideOver.downloadstatus": "Downloads",
"components.ManageSlideOver.manageModalAdvanced": "Advanced",
"components.ManageSlideOver.manageModalClearMedia": "Clear Data",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* This will irreversibly remove all data for this {mediaType}, including any requests. If this item exists in your Plex library, the media information will be recreated during the next scan.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* This will irreversibly remove all data for this {mediaType}, including any requests. If this item exists in your {mediaServerName} library, the media information will be recreated during the next scan.",
"components.ManageSlideOver.manageModalIssues": "Open Issues",
"components.ManageSlideOver.manageModalMedia": "Media",
"components.ManageSlideOver.manageModalMedia4k": "4K Media",
@@ -649,6 +649,11 @@
"components.Settings.SettingsJobsCache.flushcache": "Flush Cache",
"components.Settings.SettingsJobsCache.jelly-recently-added-scan": "Jellyfin Recently Added Scan",
"components.Settings.SettingsJobsCache.jellyfin-full-scan": "Jellyfin Full Library Scan",
+ "components.Settings.SettingsJobsCache.image-cache-cleanup": "Image Cache Cleanup",
+ "components.Settings.SettingsJobsCache.imagecache": "Image Cache",
+ "components.Settings.SettingsJobsCache.imagecacheDescription": "When enabled in settings, Overseerr will proxy and cache images from pre-configured external sources. Cached images are saved into your config folder. You can find the files in
{appDataPath}/cache/images.",
+ "components.Settings.SettingsJobsCache.imagecachecount": "Images Cached",
+ "components.Settings.SettingsJobsCache.imagecachesize": "Total Cache Size",
"components.Settings.SettingsJobsCache.jobScheduleEditFailed": "Something went wrong while saving the job.",
"components.Settings.SettingsJobsCache.jobScheduleEditSaved": "Job edited successfully!",
"components.Settings.SettingsJobsCache.jobcancelled": "{jobname} canceled.",
@@ -759,7 +764,7 @@
"components.Settings.applicationTitle": "Application Title",
"components.Settings.applicationurl": "Application URL",
"components.Settings.cacheImages": "Enable Image Caching",
- "components.Settings.cacheImagesTip": "Cache and serve optimized images (requires a significant amount of disk space)",
+ "components.Settings.cacheImagesTip": "Cache externally sourced images (requires a significant amount of disk space)",
"components.Settings.cancelscan": "Cancel Scan",
"components.Settings.copied": "Copied API key to clipboard.",
"components.Settings.csrfProtection": "Enable CSRF Protection",
@@ -874,7 +879,7 @@
"components.Setup.welcome": "Welcome to Jellyseerr",
"components.StatusBadge.managemedia": "Manage {mediaType}",
"components.StatusBadge.openinarr": "Open in {arr}",
- "components.StatusBadge.playonplex": "Play on Plex",
+ "components.StatusBadge.playonplex": "Play on {mediaServerName}",
"components.StatusBadge.status": "{status}",
"components.StatusBadge.status4k": "4K {status}",
"components.StatusChacker.newversionDescription": "Jellyseerr has been updated! Please click the button below to reload the page.",
diff --git a/src/i18n/locale/es.json b/src/i18n/locale/es.json
index e66603c67..6798681ec 100644
--- a/src/i18n/locale/es.json
+++ b/src/i18n/locale/es.json
@@ -953,7 +953,7 @@
"components.IssueModal.issueAudio": "Audio",
"components.IssueModal.issueSubtitles": "Subtítulo",
"components.IssueModal.issueVideo": "Vídeo",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Esto eliminará irreversiblemente todos los datos de {mediaType}, incluyendo todas las solicitudes. Si este elemento existe en la biblioteca de Plex, la información de los contenidos se recreará en el siguiente escaneado.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Esto eliminará irreversiblemente todos los datos de {mediaType}, incluyendo todas las solicitudes. Si este elemento existe en la biblioteca de {mediaServerName}, la información de los contenidos se recreará en el siguiente escaneado.",
"components.ManageSlideOver.mark4kavailable": "Marcar como Disponible en 4K",
"components.ManageSlideOver.openarr4k": "Abrir en 4K {arr}",
"components.UserProfile.UserSettings.UserNotificationSettings.pushbulletAccessToken": "Token de Acceso",
diff --git a/src/i18n/locale/fr.json b/src/i18n/locale/fr.json
index 5a2545fa5..2acc41072 100644
--- a/src/i18n/locale/fr.json
+++ b/src/i18n/locale/fr.json
@@ -877,7 +877,7 @@
"components.ManageSlideOver.manageModalNoRequests": "Aucune demande.",
"components.ManageSlideOver.manageModalRequests": "Demandes",
"components.ManageSlideOver.manageModalTitle": "Gérer {mediaType}",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Ceci supprimera de manière irréversible toutes les données de ce(tte) {mediaType}, y compris les demandes éventuelles. Si cet élément existe dans votre bibliothèque Plex, les informations sur le média seront recréées lors de la prochaine analyse.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Ceci supprimera de manière irréversible toutes les données de ce(tte) {mediaType}, y compris les demandes éventuelles. Si cet élément existe dans votre bibliothèque {mediaServerName}, les informations sur le média seront recréées lors de la prochaine analyse.",
"components.ManageSlideOver.tvshow": "série",
"components.NotificationTypeSelector.issuecomment": "Commentaires du problème",
"components.NotificationTypeSelector.issuecreatedDescription": "Envoyer des notifications lorsqu'un problème est signalé.",
@@ -1099,7 +1099,7 @@
"components.RequestCard.declinerequest": "Refuser la demande",
"components.StatusBadge.managemedia": "Gérer {mediaType}",
"components.StatusBadge.openinarr": "Ouvrir dans {arr}",
- "components.StatusBadge.playonplex": "Lire sur Plex",
+ "components.StatusBadge.playonplex": "Lire sur {mediaServerName}",
"components.TvDetails.Season.somethingwentwrong": "Une erreur s'est produite lors de la récupération des données de la saison.",
"components.TvDetails.rtaudiencescore": "Note d'audience de Rotten Tomatoes",
"components.TvDetails.rtcriticsscore": "Rotten Tomatoes Tomatomètre",
diff --git a/src/i18n/locale/hr.json b/src/i18n/locale/hr.json
index 710ba1fbd..ae6e1fd1f 100644
--- a/src/i18n/locale/hr.json
+++ b/src/i18n/locale/hr.json
@@ -80,7 +80,7 @@
"components.ManageSlideOver.movie": "film",
"components.Login.validationemailrequired": "Morate unijeti valjanu adresu e-pošte",
"components.ManageSlideOver.manageModalRequests": "Zahtjevi",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Ovo će nepovratno ukloniti sve podatke za ovaj {mediaType}, uključujući sve zahtjeve. Ako ova stavka postoji u vašoj Plex biblioteci, informacije o medijima ponovno će se stvoriti tijekom sljedećeg skeniranja.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Ovo će nepovratno ukloniti sve podatke za ovaj {mediaType}, uključujući sve zahtjeve. Ako ova stavka postoji u vašoj {mediaServerName} biblioteci, informacije o medijima ponovno će se stvoriti tijekom sljedećeg skeniranja.",
"components.ManageSlideOver.manageModalMedia4k": "4K Mediji",
"components.ManageSlideOver.manageModalNoRequests": "Nema zahtjeva.",
"components.ManageSlideOver.manageModalMedia": "Mediji",
diff --git a/src/i18n/locale/hu.json b/src/i18n/locale/hu.json
index 90ba3a93e..46bbb76d8 100644
--- a/src/i18n/locale/hu.json
+++ b/src/i18n/locale/hu.json
@@ -851,7 +851,7 @@
"components.IssueModal.CreateIssueModal.toastFailedCreate": "Valami hiba történt a probléma elküldése során.",
"components.IssueDetails.play4konplex": "Lejátszás Plexen 4K-ban",
"components.IssueModal.CreateIssueModal.toastviewissue": "Probléma Megtekintése",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Ez visszafordíthatatlanul eltávolítja az összes adatot ehhez a {mediaType}-hez, beleértve a kéréseket is. Ha ez az elem létezik a Plex könyvtárában, a médiainformáció a következő beolvasás során újra létrejön.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Ez visszafordíthatatlanul eltávolítja az összes adatot ehhez a {mediaType}-hez, beleértve a kéréseket is. Ha ez az elem létezik a {mediaServerName} könyvtárában, a médiainformáció a következő beolvasás során újra létrejön.",
"components.IssueDetails.commentplaceholder": "Hozzászólás írása…",
"components.IssueDetails.comments": "Hozzászólások",
"components.IssueDetails.deleteissue": "Probléma Törlése",
diff --git a/src/i18n/locale/it.json b/src/i18n/locale/it.json
index b87455ca4..446c24fed 100644
--- a/src/i18n/locale/it.json
+++ b/src/i18n/locale/it.json
@@ -950,7 +950,7 @@
"components.Settings.SettingsJobsCache.jobScheduleEditSaved": "Job modificato correttamente!",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoversettingsfailed": "Impossibile salvare le impostazioni Pushover.",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoversettingssaved": "Impostazioni Pushover salvate con successo!",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Questo rimuoverà irreversibilmente tutti i dati per questo {mediaType}, incluse eventuali richieste. Se questo elemento esiste nella tua libreria Plex, le informazioni multimediali verranno ricreate durante la scansione successiva.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Questo rimuoverà irreversibilmente tutti i dati per questo {mediaType}, incluse eventuali richieste. Se questo elemento esiste nella tua libreria {mediaServerName}, le informazioni multimediali verranno ricreate durante la scansione successiva.",
"components.NotificationTypeSelector.issuecreated": "Problema Segnalato",
"components.NotificationTypeSelector.issuecreatedDescription": "Invia una notifica quando un problema viene segnalato.",
"components.NotificationTypeSelector.issueresolved": "Problema risolto",
diff --git a/src/i18n/locale/ja.json b/src/i18n/locale/ja.json
index fd0ecea6a..acdff9adb 100644
--- a/src/i18n/locale/ja.json
+++ b/src/i18n/locale/ja.json
@@ -503,7 +503,7 @@
"components.ManageSlideOver.manageModalClearMedia": "データを消去",
"components.ManageSlideOver.manageModalRequests": "リクエスト",
"components.ManageSlideOver.openarr": "{arr} を開く",
- "components.ManageSlideOver.manageModalClearMediaWarning": "※リクエストを含め、すべての詳細情報が消去されます。この操作は元に戻すことができません。この作品が Plex ライブラリに存在する場合、詳細情報は次のスキャンで再作成されます。",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "※リクエストを含め、すべての詳細情報が消去されます。この操作は元に戻すことができません。この作品が {mediaServerName} ライブラリに存在する場合、詳細情報は次のスキャンで再作成されます。",
"components.ManageSlideOver.openarr4k": "4K {arr} を開く",
"components.ManageSlideOver.manageModalNoRequests": "リクエストが有りません。",
"components.ManageSlideOver.manageModalTitle": "{mediaType}を管理",
diff --git a/src/i18n/locale/lt.json b/src/i18n/locale/lt.json
index e7667f3c4..73b5189cc 100644
--- a/src/i18n/locale/lt.json
+++ b/src/i18n/locale/lt.json
@@ -329,7 +329,7 @@
"components.IssueModal.CreateIssueModal.problemseason": "Paveikti sezonai",
"components.IssueDetails.openedby": "#{issueId} problema atverta {relativeTime}, {username}",
"components.Layout.VersionStatus.commitsbehind": "{commitsBehind} {commitsBehind, plural, one {komitas} other {komitai}} behind",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Tai negyžtamai pašalins {mediaType} tipo duomenis, įskaitant rezervacijas. Plex bibliotekoje esančios medijos informacija bus atkurta kito skanavimo metu.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Tai negyžtamai pašalins {mediaType} tipo duomenis, įskaitant rezervacijas. {mediaServerName} bibliotekoje esančios medijos informacija bus atkurta kito skanavimo metu.",
"components.NotificationTypeSelector.adminissuecommentDescription": "Gauti pranešimus kai kiti vartotojai komentuoja problemą.",
"components.NotificationTypeSelector.adminissueresolvedDescription": "Gauti pranešimus kai kiti vartotojai uždaro problemą.",
"components.NotificationTypeSelector.issuecomment": "Problemos komentaras",
diff --git a/src/i18n/locale/nb_NO.json b/src/i18n/locale/nb_NO.json
index fc0cd2c1a..b90ddc89f 100644
--- a/src/i18n/locale/nb_NO.json
+++ b/src/i18n/locale/nb_NO.json
@@ -986,7 +986,7 @@
"components.Settings.SettingsJobsCache.cachevsize": "Verdistørrelse",
"components.Settings.trustProxyTip": "Tillatt Jellyseerr å registrere klienters IP addresser korrekt bak en proxy",
"components.Settings.serviceSettingsDescription": "Konfigurer dine {serverType}tjener(e) nedenfor. Du kan koble til flere forskellige {serverType}tjenere men kun to av dem kan markeres som standard (en som ikke er 4K og en 4K). Administratorer kan endre hvilken tjener som brukes før godkjennelse av nye forespørsler.",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Dette vil slette all data for denne tittelen uten mulighet for å bli gjennopprettet, det inkluderer alle forespørsler, avvik osv. Hvis denne tittelen finnes i ditt Plex bibliotek vil medieinformasjon bli opprettet på nytt under neste skanning.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Dette vil slette all data for denne tittelen uten mulighet for å bli gjennopprettet, det inkluderer alle forespørsler, avvik osv. Hvis denne tittelen finnes i ditt {mediaServerName} bibliotek vil medieinformasjon bli opprettet på nytt under neste skanning.",
"components.Settings.Notifications.NotificationsWebhook.authheader": "Autorisasjonshode",
"components.Settings.SettingsJobsCache.cacheksize": "Nøkkelstørrelse",
"components.Settings.Notifications.NotificationsWebhook.customJson": "JSON Payload",
@@ -1097,7 +1097,7 @@
"components.Settings.advancedTooltip": "Feil konfigurering av denne innstillingen kan føre til defekt funksjonalitet",
"components.TvDetails.Season.somethingwentwrong": "Noe gikk galt under henting av data for denne sesongen.",
"components.StatusChecker.reloadApp": "Last inn {applicationTitle} på nytt",
- "components.StatusBadge.playonplex": "Spill av med Plex",
+ "components.StatusBadge.playonplex": "Spill av med {mediaServerName}",
"components.StatusBadge.openinarr": "Vis i {arr}",
"components.StatusBadge.managemedia": "Administrer {mediaType}",
"components.TvDetails.episodeCount": "{episodeCount, plural, one {# Episode} other {# Episoder}}",
diff --git a/src/i18n/locale/nl.json b/src/i18n/locale/nl.json
index 264755c1a..1a06183f8 100644
--- a/src/i18n/locale/nl.json
+++ b/src/i18n/locale/nl.json
@@ -939,7 +939,7 @@
"components.IssueModal.issueOther": "Andere",
"components.Layout.Sidebar.issues": "Problemen",
"components.ManageSlideOver.manageModalClearMedia": "Gegevens wissen",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Hiermee worden alle gegevens voor deze {mediaType} onomkeerbaar verwijderd, inclusief eventuele verzoeken. Als dit item in je Plex-bibliotheek staat, worden de mediagegevens opnieuw aangemaakt tijdens de volgende scan.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Hiermee worden alle gegevens voor deze {mediaType} onomkeerbaar verwijderd, inclusief eventuele verzoeken. Als dit item in je {mediaServerName}-bibliotheek staat, worden de mediagegevens opnieuw aangemaakt tijdens de volgende scan.",
"components.ManageSlideOver.manageModalRequests": "Verzoeken",
"components.ManageSlideOver.manageModalTitle": "{mediaType} beheren",
"components.ManageSlideOver.tvshow": "serie",
@@ -1042,7 +1042,7 @@
"components.Settings.SettingsJobsCache.editJobScheduleCurrent": "Huidige frequentie",
"components.StatusBadge.managemedia": "{mediaType} beheren",
"components.StatusBadge.openinarr": "Openen in {arr}",
- "components.StatusBadge.playonplex": "Afspelen op Plex",
+ "components.StatusBadge.playonplex": "Afspelen op {mediaServerName}",
"components.UserProfile.emptywatchlist": "Media die zijn toegevoegd aan je
Plex Kijklijst verschijnen hier.",
"components.MovieDetails.digitalrelease": "Digitale release",
"i18n.restartRequired": "Opnieuw opstarten vereist",
diff --git a/src/i18n/locale/pl.json b/src/i18n/locale/pl.json
index 57bc19e81..aecc2a52f 100644
--- a/src/i18n/locale/pl.json
+++ b/src/i18n/locale/pl.json
@@ -103,7 +103,7 @@
"components.PermissionEdit.createissues": "Zgłoś problemy",
"components.PermissionEdit.manageissues": "Zarządzaj problemami",
"components.PermissionEdit.manageissuesDescription": "Udziel uprawnień do zarządzania problemami z multimediami.",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Spowoduje to nieodwracalne usunięcie wszystkich danych dla {mediaType}, w tym wszelkie prośby. Jeśli ten element istnieje w Twojej bibliotece Plex, informacje o multimediach zostaną odtworzone podczas następnego skanowania.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Spowoduje to nieodwracalne usunięcie wszystkich danych dla {mediaType}, w tym wszelkie prośby. Jeśli ten element istnieje w Twojej bibliotece {mediaServerName}, informacje o multimediach zostaną odtworzone podczas następnego skanowania.",
"components.IssueModal.CreateIssueModal.providedetail": "Podaj szczegółowe wyjaśnienie napotkanego problemu.",
"components.IssueModal.CreateIssueModal.whatswrong": "Co jest nie tak?",
"components.Discover.MovieGenreList.moviegenres": "Gatunki filmowe",
diff --git a/src/i18n/locale/pt_BR.json b/src/i18n/locale/pt_BR.json
index 57d716969..7f657efe9 100644
--- a/src/i18n/locale/pt_BR.json
+++ b/src/i18n/locale/pt_BR.json
@@ -924,7 +924,7 @@
"components.IssueModal.issueOther": "Outros",
"components.IssueModal.issueSubtitles": "Legenda",
"components.ManageSlideOver.manageModalClearMedia": "Limpar Dados",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Isso irá remover em definitivo todos dados desse(a) {mediaType}, incluindo quaisquer 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.ManageSlideOver.manageModalClearMediaWarning": "* Isso irá remover em definitivo todos dados desse(a) {mediaType}, incluindo quaisquer solicitações para esse item. Se este item existir in sua biblioteca do {mediaServerName}, os dados de mídia serão recriados na próxima sincronia.",
"components.ManageSlideOver.manageModalIssues": "Problemas Abertos",
"components.ManageSlideOver.manageModalNoRequests": "Nenhuma solicitação.",
"components.ManageSlideOver.manageModalRequests": "Solicitações",
@@ -1098,7 +1098,7 @@
"components.RequestBlock.requestdate": "Data do pedido",
"components.RequestCard.declinerequest": "Rejeitar Pedido",
"components.RequestCard.editrequest": "Editar Pedido",
- "components.StatusBadge.playonplex": "Reproduzir no Plex",
+ "components.StatusBadge.playonplex": "Reproduzir no {mediaServerName}",
"components.RequestBlock.decline": "Rejeitar pedido",
"components.RequestBlock.lastmodifiedby": "Última modificação por",
"components.RequestBlock.delete": "Deletar pedido",
diff --git a/src/i18n/locale/ru.json b/src/i18n/locale/ru.json
index a4e5dc9e1..2c822999e 100644
--- a/src/i18n/locale/ru.json
+++ b/src/i18n/locale/ru.json
@@ -871,7 +871,7 @@
"components.IssueDetails.allseasons": "Все сезоны",
"components.IssueDetails.allepisodes": "Все эпизоды",
"components.ManageSlideOver.manageModalClearMedia": "Очистить данные",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Это приведёт к необратимому удалению всех данных для этого {mediaType}а, включая любые запросы. Если этот элемент существует в вашей библиотеке Plex, мультимедийная информация о нём будет воссоздана во время следующего сканирования.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Это приведёт к необратимому удалению всех данных для этого {mediaType}а, включая любые запросы. Если этот элемент существует в вашей библиотеке {mediaServerName}, мультимедийная информация о нём будет воссоздана во время следующего сканирования.",
"components.IssueDetails.problemepisode": "Затронутый эпизод",
"components.ManageSlideOver.manageModalRequests": "Запросы",
"components.IssueDetails.closeissue": "Закрыть проблему",
diff --git a/src/i18n/locale/sq.json b/src/i18n/locale/sq.json
index 01ad8a021..3573bf6c6 100644
--- a/src/i18n/locale/sq.json
+++ b/src/i18n/locale/sq.json
@@ -5,7 +5,7 @@
"components.IssueModal.CreateIssueModal.submitissue": "Paraqit Problemin",
"components.IssueModal.CreateIssueModal.toastSuccessCreate": "Raporti i problemit për
{title} u paraqit me sukses!",
"components.IssueModal.CreateIssueModal.toastviewissue": "Shiko Problemin",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Kjo do të heqë në mënyrë të pakthyeshme të gjitha të dhënat për këtë {mediaType}, duke përfshirë çdo kërkesë. Nëse ky artikull ekziston në bibliotekën tuaj Plex, informacioni i medias do të rikrijohet gjatë skanimit të ardhshëm.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Kjo do të heqë në mënyrë të pakthyeshme të gjitha të dhënat për këtë {mediaType}, duke përfshirë çdo kërkesë. Nëse ky artikull ekziston në bibliotekën tuaj {mediaServerName}, informacioni i medias do të rikrijohet gjatë skanimit të ardhshëm.",
"components.AppDataWarning.dockerVolumeMissingDescription": "Monitimi i volumit
{appDataPath} nuk u konfigurua siç duhet. Gjithë informacioni do të fshihet kur kontenieri do të mbyllet ose të ristartohet.",
"components.Discover.StudioSlider.studios": "Studiot",
"components.Layout.UserDropdown.settings": "Cilësimet",
diff --git a/src/i18n/locale/sr.json b/src/i18n/locale/sr.json
index bfc44009d..bf1364c56 100644
--- a/src/i18n/locale/sr.json
+++ b/src/i18n/locale/sr.json
@@ -609,7 +609,7 @@
"components.Settings.SettingsAbout.uptodate": "Najsvežiji",
"components.Settings.Notifications.NotificationsWebhook.validationJsonPayloadRequired": "Morate da navedete važeći JSON korisni teret",
"components.Settings.Notifications.validationChatIdRequired": "Morate da navedete važeći ID za ćaskanje",
- "components.StatusBadge.playonplex": "Igrajte na Plex-u",
+ "components.StatusBadge.playonplex": "Igrajte na {mediaServerName}-u",
"components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "Morate da obezbedite pristupni token",
"components.UserList.userssaved": "Korisničke dozvole su uspešno sačuvane!"
}
diff --git a/src/i18n/locale/sv.json b/src/i18n/locale/sv.json
index baadcbc03..715c49921 100644
--- a/src/i18n/locale/sv.json
+++ b/src/i18n/locale/sv.json
@@ -951,7 +951,7 @@
"components.NotificationTypeSelector.issuecreated": "Problem rappoterat",
"components.PermissionEdit.createissues": "Rapportera problem",
"components.PermissionEdit.viewissues": "Visa problem",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* Detta tar bort all data för denna {mediaType}, inklusive eventuella begäranden, på ett oåterkalleligt sätt. Om det här objektet finns i ditt Plex-bibliotek kommer medieinformationen att återskapas vid nästa genomsökning.",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Detta tar bort all data för denna {mediaType}, inklusive eventuella begäranden, på ett oåterkalleligt sätt. Om det här objektet finns i ditt {mediaServerName}-bibliotek kommer medieinformationen att återskapas vid nästa genomsökning.",
"components.ManageSlideOver.manageModalNoRequests": "Inga förfrågningar.",
"components.NotificationTypeSelector.userissueresolvedDescription": "Få meddelande när dina rapporterade problem har blivit lösta.",
"components.UserProfile.UserSettings.UserNotificationSettings.pushbulletAccessToken": "Åtkomsttoken",
diff --git a/src/i18n/locale/zh_Hans.json b/src/i18n/locale/zh_Hans.json
index 54cba85fd..59febf2ed 100644
--- a/src/i18n/locale/zh_Hans.json
+++ b/src/i18n/locale/zh_Hans.json
@@ -944,7 +944,7 @@
"components.NotificationTypeSelector.userissueresolvedDescription": "当您报告的问题解决时获取通知。",
"components.ManageSlideOver.alltime": "历史",
"components.ManageSlideOver.manageModalAdvanced": "高级",
- "components.ManageSlideOver.manageModalClearMediaWarning": "* 这将会删除所有和{mediaType}相关的数据和所有请求。如果{mediaType}在您的Plex服务器存在,数据将会在媒体库扫描时重新建立。",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* 这将会删除所有和{mediaType}相关的数据和所有请求。如果{mediaType}在您的{mediaServerName}服务器存在,数据将会在媒体库扫描时重新建立。",
"components.ManageSlideOver.manageModalIssues": "未解决问题",
"components.ManageSlideOver.manageModalMedia": "媒体",
"components.ManageSlideOver.manageModalMedia4k": "4K 媒体",
diff --git a/src/i18n/locale/zh_Hant.json b/src/i18n/locale/zh_Hant.json
index e9b3b4825..4aff692db 100644
--- a/src/i18n/locale/zh_Hant.json
+++ b/src/i18n/locale/zh_Hant.json
@@ -884,7 +884,7 @@
"components.IssueModal.issueAudio": "音訊",
"components.ManageSlideOver.downloadstatus": "下載狀態",
"components.IssueModal.CreateIssueModal.allepisodes": "所有集數",
- "components.ManageSlideOver.manageModalClearMediaWarning": "※這將會刪除包括使用者請求在內所有有關此{mediaType}的資料。如果這{mediaType}存在於您的 Plex 伺服器,資料將會在媒體庫掃描時重新建立。",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "※這將會刪除包括使用者請求在內所有有關此{mediaType}的資料。如果這{mediaType}存在於您的 {mediaServerName} 伺服器,資料將會在媒體庫掃描時重新建立。",
"components.ManageSlideOver.mark4kavailable": "標記 4K 版為可觀看",
"components.IssueModal.issueSubtitles": "字幕",
"components.IssueModal.issueOther": "其他",
@@ -1092,7 +1092,7 @@
"components.RequestBlock.delete": "刪除請求",
"components.RequestCard.editrequest": "編輯請求",
"components.RequestBlock.requestedby": "請求者",
- "components.StatusBadge.playonplex": "在 Plex 上觀看",
+ "components.StatusBadge.playonplex": "在 {mediaServerName} 上觀看",
"components.StatusBadge.managemedia": "管理{mediaType}",
"components.StatusBadge.openinarr": "開啟 {arr} 伺服器",
"components.TvDetails.status4k": "4K 版{status}",
diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx
index d546f0a8b..4738b8cf8 100644
--- a/src/pages/_app.tsx
+++ b/src/pages/_app.tsx
@@ -43,6 +43,8 @@ const loadLocaleData = (locale: AvailableLocale): Promise
=> {
return import('../i18n/locale/es.json');
case 'fr':
return import('../i18n/locale/fr.json');
+ case 'hr':
+ return import('../i18n/locale/hr.json');
case 'hu':
return import('../i18n/locale/hu.json');
case 'it':