fix(lang): correct mismatched language strings (#1246)

pull/1233/head
TheCatLady 3 years ago committed by GitHub
parent 3642b1e84a
commit 8ebc829250
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -9,7 +9,7 @@
"build": "yarn build:next && yarn build:server", "build": "yarn build:next && yarn build:server",
"lint": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\"", "lint": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\"",
"start": "NODE_ENV=production node dist/index.js", "start": "NODE_ENV=production node dist/index.js",
"i18n:extract": "extract-messages -l=en -o src/i18n/locale -d en --flat true --overwriteDefault false \"./src/**/!(*.test).{ts,tsx}\"", "i18n:extract": "extract-messages -l=en -o src/i18n/locale -d en --flat true --overwriteDefault true \"./src/**/!(*.test).{ts,tsx}\"",
"migration:generate": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:generate", "migration:generate": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:generate",
"migration:create": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:create", "migration:create": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:create",
"migration:run": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:run", "migration:run": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:run",

@ -1,16 +1,16 @@
import axios from 'axios';
import { Field, Form, Formik } from 'formik';
import Link from 'next/link';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import Button from '../Common/Button';
import { Field, Form, Formik } from 'formik';
import * as Yup from 'yup'; import * as Yup from 'yup';
import axios from 'axios'; import Button from '../Common/Button';
import Link from 'next/link';
const messages = defineMessages({ const messages = defineMessages({
email: 'Email Address', email: 'Email Address',
password: 'Password', password: 'Password',
validationemailrequired: 'Not a valid email address', validationemailrequired: 'You must provide a valid email address',
validationpasswordrequired: 'Password required', validationpasswordrequired: 'You must provide a password',
loginerror: 'Something went wrong while trying to sign in.', loginerror: 'Something went wrong while trying to sign in.',
signingin: 'Signing in…', signingin: 'Signing in…',
signin: 'Sign In', signin: 'Sign In',

@ -1,37 +1,37 @@
import React, { useState, useContext, useMemo } from 'react'; import axios from 'axios';
import Link from 'next/link';
import { useRouter } from 'next/router';
import React, { useContext, useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import type { MovieDetails as MovieDetailsType } from '../../../server/models/Movie';
import useSWR from 'swr'; import useSWR from 'swr';
import { useRouter } from 'next/router'; import type { RTRating } from '../../../server/api/rottentomatoes';
import Button from '../Common/Button';
import Link from 'next/link';
import Slider from '../Slider';
import PersonCard from '../PersonCard';
import { LanguageContext } from '../../context/LanguageContext';
import LoadingSpinner from '../Common/LoadingSpinner';
import { useUser, Permission } from '../../hooks/useUser';
import { MediaStatus } from '../../../server/constants/media'; import { MediaStatus } from '../../../server/constants/media';
import axios from 'axios'; import type { MovieDetails as MovieDetailsType } from '../../../server/models/Movie';
import SlideOver from '../Common/SlideOver';
import RequestBlock from '../RequestBlock';
import TmdbLogo from '../../assets/tmdb_logo.svg';
import RTFresh from '../../assets/rt_fresh.svg';
import RTRotten from '../../assets/rt_rotten.svg';
import RTAudFresh from '../../assets/rt_aud_fresh.svg'; import RTAudFresh from '../../assets/rt_aud_fresh.svg';
import RTAudRotten from '../../assets/rt_aud_rotten.svg'; import RTAudRotten from '../../assets/rt_aud_rotten.svg';
import type { RTRating } from '../../../server/api/rottentomatoes'; import RTFresh from '../../assets/rt_fresh.svg';
import RTRotten from '../../assets/rt_rotten.svg';
import TmdbLogo from '../../assets/tmdb_logo.svg';
import { LanguageContext } from '../../context/LanguageContext';
import useSettings from '../../hooks/useSettings';
import { Permission, useUser } from '../../hooks/useUser';
import Error from '../../pages/_error'; import Error from '../../pages/_error';
import ExternalLinkBlock from '../ExternalLinkBlock';
import { sortCrewPriority } from '../../utils/creditHelpers'; import { sortCrewPriority } from '../../utils/creditHelpers';
import StatusBadge from '../StatusBadge'; import Button from '../Common/Button';
import RequestButton from '../RequestButton'; import CachedImage from '../Common/CachedImage';
import MediaSlider from '../MediaSlider';
import ConfirmButton from '../Common/ConfirmButton'; import ConfirmButton from '../Common/ConfirmButton';
import DownloadBlock from '../DownloadBlock'; import LoadingSpinner from '../Common/LoadingSpinner';
import PageTitle from '../Common/PageTitle'; import PageTitle from '../Common/PageTitle';
import useSettings from '../../hooks/useSettings';
import PlayButton, { PlayButtonLink } from '../Common/PlayButton'; import PlayButton, { PlayButtonLink } from '../Common/PlayButton';
import CachedImage from '../Common/CachedImage'; import SlideOver from '../Common/SlideOver';
import DownloadBlock from '../DownloadBlock';
import ExternalLinkBlock from '../ExternalLinkBlock';
import MediaSlider from '../MediaSlider';
import PersonCard from '../PersonCard';
import RequestBlock from '../RequestBlock';
import RequestButton from '../RequestButton';
import Slider from '../Slider';
import StatusBadge from '../StatusBadge';
const messages = defineMessages({ const messages = defineMessages({
releasedate: 'Release Date', releasedate: 'Release Date',
@ -56,8 +56,7 @@ const messages = defineMessages({
manageModalNoRequests: 'No Requests', manageModalNoRequests: 'No Requests',
manageModalClearMedia: 'Clear All Media Data', manageModalClearMedia: 'Clear All Media Data',
manageModalClearMediaWarning: manageModalClearMediaWarning:
'This will irreversibly remove all data for this movie, including any requests.\ '* This will irreversibly remove all data for this movie, including any requests. If this item exists in your Plex library, the media information will be recreated during the next scan.',
If this item exists in your Plex library, the media information will be recreated during the next scan.',
approve: 'Approve', approve: 'Approve',
decline: 'Decline', decline: 'Decline',
studio: '{studioCount, plural, one {Studio} other {Studios}}', studio: '{studioCount, plural, one {Studio} other {Studios}}',

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import PermissionOption, { PermissionItem } from '../PermissionOption'; import { defineMessages, useIntl } from 'react-intl';
import { Permission, User } from '../../hooks/useUser'; import { Permission, User } from '../../hooks/useUser';
import { useIntl, defineMessages } from 'react-intl'; import PermissionOption, { PermissionItem } from '../PermissionOption';
export const messages = defineMessages({ export const messages = defineMessages({
admin: 'Admin', admin: 'Admin',
@ -9,18 +9,15 @@ export const messages = defineMessages({
'Full administrator access. Bypasses all other permission checks.', 'Full administrator access. Bypasses all other permission checks.',
users: 'Manage Users', users: 'Manage Users',
usersDescription: usersDescription:
'Grant permission to manage Overseerr users.\ 'Grant permission to manage Overseerr users. Users with this permission cannot modify users with or grant the Admin privilege.',
Users with this permission cannot modify users with or grant the Admin privilege.',
settings: 'Manage Settings', settings: 'Manage Settings',
settingsDescription: settingsDescription:
'Grant permission to modify all Overseerr settings.\ 'Grant permission to modify all Overseerr settings. A user must have this permission to grant it to others.',
A user must have this permission to grant it to others.',
managerequests: 'Manage Requests', managerequests: 'Manage Requests',
managerequestsDescription: managerequestsDescription:
'Grant permission to manage Overseerr requests (includes approving and denying requests).\ 'Grant permission to manage Overseerr requests (includes approving and denying requests). All requests made by a user with this permission will be automatically approved.',
All requests made by a user with this permission will be automatically approved.',
request: 'Request', request: 'Request',
requestDescription: 'Grants permission to request movies and series.', requestDescription: 'Grant permission to request movies and series.',
vote: 'Vote', vote: 'Vote',
voteDescription: voteDescription:
'Grant permission to vote on requests (voting not yet implemented).', 'Grant permission to vote on requests (voting not yet implemented).',

@ -1,19 +1,19 @@
import axios from 'axios';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl';
import { MediaRequestStatus } from '../../../server/constants/media';
import type { MediaRequest } from '../../../server/entity/MediaRequest'; import type { MediaRequest } from '../../../server/entity/MediaRequest';
import { useIntl, defineMessages } from 'react-intl'; import useRequestOverride from '../../hooks/useRequestOverride';
import globalMessages from '../../i18n/globalMessages';
import Badge from '../Common/Badge'; import Badge from '../Common/Badge';
import { MediaRequestStatus } from '../../../server/constants/media';
import Button from '../Common/Button'; import Button from '../Common/Button';
import axios from 'axios';
import globalMessages from '../../i18n/globalMessages';
import RequestModal from '../RequestModal'; import RequestModal from '../RequestModal';
import useRequestOverride from '../../hooks/useRequestOverride';
const messages = defineMessages({ const messages = defineMessages({
seasons: '{seasonCount, plural, one {Season} other {Seasons}}', seasons: '{seasonCount, plural, one {Season} other {Seasons}}',
requestoverrides: 'Request Overrides', requestoverrides: 'Request Overrides',
server: 'Server', server: 'Destination Server',
profilechanged: 'Profile Changed', profilechanged: 'Quality Profile',
rootfolder: 'Root Folder', rootfolder: 'Root Folder',
}); });

@ -1,40 +1,40 @@
import React, { useCallback, useState, useEffect } from 'react'; import axios from 'axios';
import Modal from '../Common/Modal'; import React, { useCallback, useEffect, useState } from 'react';
import { useUser } from '../../hooks/useUser';
import { Permission } from '../../../server/lib/permissions';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { MediaRequest } from '../../../server/entity/MediaRequest';
import useSWR from 'swr';
import { MovieDetails } from '../../../server/models/Movie';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import axios from 'axios'; import useSWR from 'swr';
import { import {
MediaStatus,
MediaRequestStatus, MediaRequestStatus,
MediaStatus,
} from '../../../server/constants/media'; } from '../../../server/constants/media';
import { MediaRequest } from '../../../server/entity/MediaRequest';
import { Permission } from '../../../server/lib/permissions';
import { MovieDetails } from '../../../server/models/Movie';
import DownloadIcon from '../../assets/download.svg'; import DownloadIcon from '../../assets/download.svg';
import { useUser } from '../../hooks/useUser';
import globalMessages from '../../i18n/globalMessages';
import Alert from '../Common/Alert'; import Alert from '../Common/Alert';
import Modal from '../Common/Modal';
import AdvancedRequester, { RequestOverrides } from './AdvancedRequester'; import AdvancedRequester, { RequestOverrides } from './AdvancedRequester';
import globalMessages from '../../i18n/globalMessages';
const messages = defineMessages({ const messages = defineMessages({
requestadmin: 'Your request will be immediately approved.', requestadmin: 'Your request will be immediately approved.',
cancelrequest: cancelrequest:
'This will remove your request. Are you sure you want to continue?', 'This will remove your request. Are you sure you want to continue?',
requestSuccess: '<strong>{title}</strong> requested successfully!', requestSuccess: '<strong>{title}</strong> requested successfully!',
requestCancel: 'Request for <strong>{title}</strong> canceled', requestCancel: 'Request for <strong>{title}</strong> canceled.',
requesttitle: 'Request {title}', requesttitle: 'Request {title}',
request4ktitle: 'Request {title} in 4K', request4ktitle: 'Request {title} in 4K',
close: 'Close', close: 'Close',
cancel: 'Cancel Request', cancel: 'Cancel Request',
cancelling: 'Canceling…', cancelling: 'Canceling…',
pendingrequest: 'Pending request for {title}', pendingrequest: 'Pending Request for {title}',
pending4krequest: 'Pending request for {title} in 4K', pending4krequest: 'Pending Request for {title} in 4K',
requesting: 'Requesting…', requesting: 'Requesting…',
request: 'Request', request: 'Request',
request4k: 'Request 4K', request4k: 'Request 4K',
requestfrom: 'There is a pending request from {username}.', requestfrom: 'There is currently a pending request from {username}.',
request4kfrom: 'There is a pending 4K request from {username}.', request4kfrom: 'There is currently a pending 4K request from {username}.',
errorediting: 'Something went wrong while editing the request.', errorediting: 'Something went wrong while editing the request.',
requestedited: 'Request edited.', requestedited: 'Request edited.',
autoapproval: 'Automatic Approval', autoapproval: 'Automatic Approval',

@ -1,17 +1,16 @@
import React from 'react'; import React from 'react';
import Alert from '../../Common/Alert';
import Modal from '../../Common/Modal';
import { SmallLoadingSpinner } from '../../Common/LoadingSpinner';
import useSWR from 'swr';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr';
import { SonarrSeries } from '../../../../server/api/sonarr'; import { SonarrSeries } from '../../../../server/api/sonarr';
import Alert from '../../Common/Alert';
import { SmallLoadingSpinner } from '../../Common/LoadingSpinner';
import Modal from '../../Common/Modal';
const messages = defineMessages({ const messages = defineMessages({
next: 'Next', next: 'Next',
notvdbid: 'Manual Match Required', notvdbid: 'Manual Match Required',
notvdbiddescription: notvdbiddescription:
"We couldn't automatically match your request.\ "We couldn't automatically match your request. Please select the correct match from the list below.",
Please select the correct match from the list below.",
nosummary: 'No summary for this title was found.', nosummary: 'No summary for this title was found.',
}); });

@ -1,19 +1,19 @@
import axios from 'axios';
import { Field, Form, Formik } from 'formik';
import Link from 'next/link';
import React, { useState } from 'react'; import React, { useState } from 'react';
import ImageFader from '../Common/ImageFader';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import LanguagePicker from '../Layout/LanguagePicker';
import Button from '../Common/Button';
import { Field, Form, Formik } from 'formik';
import * as Yup from 'yup'; import * as Yup from 'yup';
import axios from 'axios'; import Button from '../Common/Button';
import Link from 'next/link'; import ImageFader from '../Common/ImageFader';
import PageTitle from '../Common/PageTitle'; import PageTitle from '../Common/PageTitle';
import LanguagePicker from '../Layout/LanguagePicker';
const messages = defineMessages({ const messages = defineMessages({
passwordreset: 'Password Reset', passwordreset: 'Password Reset',
resetpassword: 'Reset your password', resetpassword: 'Reset your password',
emailresetlink: 'Email a Recovery Link', emailresetlink: 'Email a Recovery Link',
email: 'Email', email: 'Email Address',
validationemailrequired: 'You must provide a valid email address', validationemailrequired: 'You must provide a valid email address',
gobacklogin: 'Return to Sign-In Page', gobacklogin: 'Return to Sign-In Page',
requestresetlinksuccessmessage: requestresetlinksuccessmessage:

@ -1,16 +1,16 @@
import React from 'react'; import axios from 'axios';
import { Field, Form, Formik } from 'formik'; import { Field, Form, Formik } from 'formik';
import useSWR from 'swr'; import React from 'react';
import LoadingSpinner from '../../Common/LoadingSpinner';
import Button from '../../Common/Button';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
import * as Yup from 'yup';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import NotificationTypeSelector from '../../NotificationTypeSelector'; import useSWR from 'swr';
import * as Yup from 'yup';
import globalMessages from '../../../i18n/globalMessages';
import Alert from '../../Common/Alert'; import Alert from '../../Common/Alert';
import Badge from '../../Common/Badge'; import Badge from '../../Common/Badge';
import globalMessages from '../../../i18n/globalMessages'; import Button from '../../Common/Button';
import LoadingSpinner from '../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../NotificationTypeSelector';
const messages = defineMessages({ const messages = defineMessages({
save: 'Save Changes', save: 'Save Changes',
@ -36,11 +36,9 @@ const messages = defineMessages({
validationEmail: 'You must provide a valid email address', validationEmail: 'You must provide a valid email address',
emailNotificationTypesAlert: 'Email Notification Recipients', emailNotificationTypesAlert: 'Email Notification Recipients',
emailNotificationTypesAlertDescription: emailNotificationTypesAlertDescription:
'<strong>Media Requested</strong>, <strong>Media Automatically Approved</strong>, and <strong>Media Failed</strong>\ '<strong>Media Requested</strong>, <strong>Media Automatically Approved</strong>, and <strong>Media Failed</strong> email notifications are sent to all users with the <strong>Manage Requests</strong> permission.',
email notifications are sent to all users with the <strong>Manage Requests</strong> permission.',
emailNotificationTypesAlertDescriptionPt2: emailNotificationTypesAlertDescriptionPt2:
'<strong>Media Approved</strong>, <strong>Media Declined</strong>, and <strong>Media Available</strong>\ '<strong>Media Approved</strong>, <strong>Media Declined</strong>, and <strong>Media Available</strong> email notifications are sent to the user who submitted the request.',
email notifications are sent to the user who submitted the request.',
pgpPrivateKey: '<PgpLink>PGP</PgpLink> Private Key', pgpPrivateKey: '<PgpLink>PGP</PgpLink> Private Key',
pgpPrivateKeyTip: pgpPrivateKeyTip:
'Sign encrypted email messages (PGP password is also required)', 'Sign encrypted email messages (PGP password is also required)',

@ -1,13 +1,13 @@
import React from 'react'; import axios from 'axios';
import { Field, Form, Formik } from 'formik'; import { Field, Form, Formik } from 'formik';
import useSWR from 'swr'; import React from 'react';
import LoadingSpinner from '../../../Common/LoadingSpinner';
import Button from '../../../Common/Button';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
import * as Yup from 'yup';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr';
import * as Yup from 'yup';
import Alert from '../../../Common/Alert'; import Alert from '../../../Common/Alert';
import Button from '../../../Common/Button';
import LoadingSpinner from '../../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../../NotificationTypeSelector'; import NotificationTypeSelector from '../../../NotificationTypeSelector';
const messages = defineMessages({ const messages = defineMessages({
@ -24,9 +24,7 @@ const messages = defineMessages({
test: 'Test', test: 'Test',
settinguppushover: 'Setting Up Pushover Notifications', settinguppushover: 'Setting Up Pushover Notifications',
settinguppushoverDescription: settinguppushoverDescription:
'To configure Pushover notifications, you will need to <RegisterApplicationLink>register an application</RegisterApplicationLink> and enter the API token below.\ 'To configure Pushover notifications, you will need to <RegisterApplicationLink>register an application</RegisterApplicationLink> and enter the API token below. (You can use one of our <IconLink>official icons on GitHub</IconLink>.) You will also need your user key.',
(You can use one of our <IconLink>official icons on GitHub</IconLink>.)\
You will also need your user key.',
notificationtypes: 'Notification Types', notificationtypes: 'Notification Types',
}); });

@ -1,13 +1,13 @@
import React from 'react'; import axios from 'axios';
import { Field, Form, Formik } from 'formik'; import { Field, Form, Formik } from 'formik';
import useSWR from 'swr'; import React from 'react';
import LoadingSpinner from '../../Common/LoadingSpinner';
import Button from '../../Common/Button';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
import * as Yup from 'yup';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr';
import * as Yup from 'yup';
import Alert from '../../Common/Alert'; import Alert from '../../Common/Alert';
import Button from '../../Common/Button';
import LoadingSpinner from '../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../NotificationTypeSelector'; import NotificationTypeSelector from '../../NotificationTypeSelector';
const messages = defineMessages({ const messages = defineMessages({
@ -25,9 +25,7 @@ const messages = defineMessages({
test: 'Test', test: 'Test',
settinguptelegram: 'Setting Up Telegram Notifications', settinguptelegram: 'Setting Up Telegram Notifications',
settinguptelegramDescription: settinguptelegramDescription:
'To configure Telegram notifications, you will need to <CreateBotLink>create a bot</CreateBotLink> and get the bot API key.\ 'To configure Telegram notifications, you will need to <CreateBotLink>create a bot</CreateBotLink> and get the bot API key. Additionally, you will need the chat ID for the chat to which you would like to send notifications. You can find this by adding <GetIdBotLink>@get_id_bot</GetIdBotLink> to the chat and issuing the <code>/my_id</code> command.',
Additionally, you will need the chat ID for the chat to which you would like to send notifications.\
You can find this by adding <GetIdBotLink>@get_id_bot</GetIdBotLink> to the chat and issuing the <code>/my_id</code> command.',
notificationtypes: 'Notification Types', notificationtypes: 'Notification Types',
sendSilently: 'Send Silently', sendSilently: 'Send Silently',
sendSilentlyTip: 'Send notifications with no sound', sendSilentlyTip: 'Send notifications with no sound',

@ -1,12 +1,12 @@
import React, { useState, useEffect, useCallback, useRef } from 'react';
import Transition from '../../Transition';
import Modal from '../../Common/Modal';
import { Formik, Field } from 'formik';
import type { RadarrSettings } from '../../../../server/lib/settings';
import * as Yup from 'yup';
import axios from 'axios'; import axios from 'axios';
import { useToasts } from 'react-toast-notifications'; import { Field, Formik } from 'formik';
import React, { useCallback, useEffect, useRef, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications';
import * as Yup from 'yup';
import type { RadarrSettings } from '../../../../server/lib/settings';
import Modal from '../../Common/Modal';
import Transition from '../../Transition';
const messages = defineMessages({ const messages = defineMessages({
createradarr: 'Add New Radarr Server', createradarr: 'Add New Radarr Server',
@ -16,8 +16,9 @@ const messages = defineMessages({
validationPortRequired: 'You must provide a valid port number', validationPortRequired: 'You must provide a valid port number',
validationApiKeyRequired: 'You must provide an API key', validationApiKeyRequired: 'You must provide an API key',
validationRootFolderRequired: 'You must select a root folder', validationRootFolderRequired: 'You must select a root folder',
validationProfileRequired: 'You must select a profile', validationProfileRequired: 'You must select a quality profile',
validationMinimumAvailabilityRequired: 'You must select minimum availability', validationMinimumAvailabilityRequired:
'You must select a minimum availability',
toastRadarrTestSuccess: 'Radarr connection established successfully!', toastRadarrTestSuccess: 'Radarr connection established successfully!',
toastRadarrTestFailure: 'Failed to connect to Radarr.', toastRadarrTestFailure: 'Failed to connect to Radarr.',
saving: 'Saving…', saving: 'Saving…',

@ -1,14 +1,14 @@
import React, { useState } from 'react'; import React, { useState } from 'react';
import useSWR from 'swr'; import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import LoadingSpinner from '../../../Common/LoadingSpinner'; import useSWR from 'swr';
import globalMessages from '../../../../i18n/globalMessages';
import Alert from '../../../Common/Alert'; import Alert from '../../../Common/Alert';
import Badge from '../../../Common/Badge'; import Badge from '../../../Common/Badge';
import Button from '../../../Common/Button'; import Button from '../../../Common/Button';
import LoadingSpinner from '../../../Common/LoadingSpinner';
import Modal from '../../../Common/Modal'; import Modal from '../../../Common/Modal';
import Transition from '../../../Transition'; import Transition from '../../../Transition';
import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
import globalMessages from '../../../../i18n/globalMessages';
const messages = defineMessages({ const messages = defineMessages({
releases: 'Releases', releases: 'Releases',
@ -20,8 +20,7 @@ const messages = defineMessages({
viewchangelog: 'View Changelog', viewchangelog: 'View Changelog',
runningDevelop: 'Development Version', runningDevelop: 'Development Version',
runningDevelopMessage: runningDevelopMessage:
'The latest changes to the <code>develop</code> branch of Overseerr are not shown below.\ 'The latest changes to the <code>develop</code> branch of Overseerr are not shown below. Please see the commit history for this branch on <GithubLink>GitHub</GithubLink> for details.',
Please see the commit history for this branch on <GithubLink>GitHub</GithubLink> for details.',
}); });
const REPO_RELEASE_API = const REPO_RELEASE_API =

@ -1,30 +1,28 @@
import axios from 'axios';
import React from 'react'; import React from 'react';
import useSWR from 'swr';
import LoadingSpinner from '../../Common/LoadingSpinner';
import { import {
FormattedRelativeTime,
defineMessages, defineMessages,
useIntl, FormattedRelativeTime,
MessageDescriptor, MessageDescriptor,
useIntl,
} from 'react-intl'; } from 'react-intl';
import Button from '../../Common/Button';
import Table from '../../Common/Table';
import Spinner from '../../../assets/spinner.svg';
import axios from 'axios';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import Badge from '../../Common/Badge'; import useSWR from 'swr';
import { CacheItem } from '../../../../server/interfaces/api/settingsInterfaces'; import { CacheItem } from '../../../../server/interfaces/api/settingsInterfaces';
import Spinner from '../../../assets/spinner.svg';
import globalMessages from '../../../i18n/globalMessages';
import { formatBytes } from '../../../utils/numberHelpers'; import { formatBytes } from '../../../utils/numberHelpers';
import Badge from '../../Common/Badge';
import Button from '../../Common/Button';
import LoadingSpinner from '../../Common/LoadingSpinner';
import PageTitle from '../../Common/PageTitle'; import PageTitle from '../../Common/PageTitle';
import globalMessages from '../../../i18n/globalMessages'; import Table from '../../Common/Table';
const messages: { [messageName: string]: MessageDescriptor } = defineMessages({ const messages: { [messageName: string]: MessageDescriptor } = defineMessages({
jobsandcache: 'Jobs & Cache', jobsandcache: 'Jobs & Cache',
jobs: 'Jobs', jobs: 'Jobs',
jobsDescription: jobsDescription:
'Overseerr performs certain maintenance tasks as regularly-scheduled jobs,\ 'Overseerr performs certain maintenance tasks as regularly-scheduled jobs, but they can also be manually triggered below. Manually running a job will not alter its schedule.',
but they can also be manually triggered below.\
Manually running a job will not alter its schedule.',
jobname: 'Job Name', jobname: 'Job Name',
jobtype: 'Type', jobtype: 'Type',
nextexecution: 'Next Execution', nextexecution: 'Next Execution',

@ -1,19 +1,19 @@
import React, { useMemo } from 'react';
import useSWR from 'swr';
import LoadingSpinner from '../Common/LoadingSpinner';
import type { MainSettings, Language } from '../../../server/lib/settings';
import CopyButton from './CopyButton';
import { Form, Formik, Field } from 'formik';
import axios from 'axios'; import axios from 'axios';
import Button from '../Common/Button'; import { Field, Form, Formik } from 'formik';
import React, { useMemo } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useUser, Permission } from '../../hooks/useUser';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import Badge from '../Common/Badge'; import useSWR from 'swr';
import globalMessages from '../../i18n/globalMessages';
import * as Yup from 'yup'; import * as Yup from 'yup';
import RegionSelector from '../RegionSelector'; import type { Language, MainSettings } from '../../../server/lib/settings';
import { Permission, useUser } from '../../hooks/useUser';
import globalMessages from '../../i18n/globalMessages';
import Badge from '../Common/Badge';
import Button from '../Common/Button';
import LoadingSpinner from '../Common/LoadingSpinner';
import PageTitle from '../Common/PageTitle'; import PageTitle from '../Common/PageTitle';
import RegionSelector from '../RegionSelector';
import CopyButton from './CopyButton';
const messages = defineMessages({ const messages = defineMessages({
general: 'General', general: 'General',
@ -36,8 +36,7 @@ const messages = defineMessages({
hideAvailable: 'Hide Available Media', hideAvailable: 'Hide Available Media',
csrfProtection: 'Enable CSRF Protection', csrfProtection: 'Enable CSRF Protection',
csrfProtectionTip: csrfProtectionTip:
'Set external API access to read-only\ 'Set external API access to read-only (requires HTTPS, and Overseerr must be reloaded for changes to take effect)',
(requires HTTPS, and Overseerr must be reloaded for changes to take effect)',
csrfProtectionHoverTip: csrfProtectionHoverTip:
'Do NOT enable this setting unless you understand what you are doing!', 'Do NOT enable this setting unless you understand what you are doing!',
cacheImages: 'Enable Image Caching', cacheImages: 'Enable Image Caching',
@ -45,8 +44,7 @@ const messages = defineMessages({
'Optimize and store all images locally (consumes a significant amount of disk space)', 'Optimize and store all images locally (consumes a significant amount of disk space)',
trustProxy: 'Enable Proxy Support', trustProxy: 'Enable Proxy Support',
trustProxyTip: trustProxyTip:
'Allow Overseerr to correctly register client IP addresses behind a proxy\ 'Allow Overseerr to correctly register client IP addresses behind a proxy (Overseerr must be reloaded for changes to take effect)',
(Overseerr must be reloaded for changes to take effect)',
validationApplicationTitle: 'You must provide an application title', validationApplicationTitle: 'You must provide an application title',
validationApplicationUrl: 'You must provide a valid URL', validationApplicationUrl: 'You must provide a valid URL',
validationApplicationUrlTrailingSlash: 'URL must not end in a trailing slash', validationApplicationUrlTrailingSlash: 'URL must not end in a trailing slash',

@ -1,20 +1,20 @@
import React, { useMemo, useState } from 'react';
import LoadingSpinner from '../Common/LoadingSpinner';
import type { PlexSettings } from '../../../server/lib/settings';
import type { PlexDevice } from '../../../server/interfaces/api/plexInterfaces';
import useSWR from 'swr';
import { useToasts } from 'react-toast-notifications';
import { Formik, Field } from 'formik';
import Button from '../Common/Button';
import axios from 'axios'; import axios from 'axios';
import LibraryItem from './LibraryItem'; import { Field, Formik } from 'formik';
import Badge from '../Common/Badge'; import React, { useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr';
import * as Yup from 'yup'; import * as Yup from 'yup';
import Alert from '../Common/Alert'; import type { PlexDevice } from '../../../server/interfaces/api/plexInterfaces';
import type { PlexSettings } from '../../../server/lib/settings';
import Spinner from '../../assets/spinner.svg'; import Spinner from '../../assets/spinner.svg';
import PageTitle from '../Common/PageTitle';
import globalMessages from '../../i18n/globalMessages'; import globalMessages from '../../i18n/globalMessages';
import Alert from '../Common/Alert';
import Badge from '../Common/Badge';
import Button from '../Common/Button';
import LoadingSpinner from '../Common/LoadingSpinner';
import PageTitle from '../Common/PageTitle';
import LibraryItem from './LibraryItem';
const messages = defineMessages({ const messages = defineMessages({
plex: 'Plex', plex: 'Plex',
@ -32,7 +32,7 @@ const messages = defineMessages({
serverpresetManualMessage: 'Manual configuration', serverpresetManualMessage: 'Manual configuration',
serverpresetRefreshing: 'Retrieving servers…', serverpresetRefreshing: 'Retrieving servers…',
serverpresetLoad: 'Press the button to load available servers', serverpresetLoad: 'Press the button to load available servers',
toastPlexRefresh: 'Retrieving server list from Plex', toastPlexRefresh: 'Retrieving server list from Plex',
toastPlexRefreshSuccess: 'Plex server list retrieved successfully!', toastPlexRefreshSuccess: 'Plex server list retrieved successfully!',
toastPlexRefreshFailure: 'Failed to retrieve Plex server list.', toastPlexRefreshFailure: 'Failed to retrieve Plex server list.',
toastPlexConnecting: 'Attempting to connect to Plex…', toastPlexConnecting: 'Attempting to connect to Plex…',
@ -40,9 +40,7 @@ const messages = defineMessages({
toastPlexConnectingFailure: 'Failed to connect to Plex.', toastPlexConnectingFailure: 'Failed to connect to Plex.',
settingUpPlex: 'Setting Up Plex', settingUpPlex: 'Setting Up Plex',
settingUpPlexDescription: settingUpPlexDescription:
'To set up Plex, you can either enter your details manually \ 'To set up Plex, you can either enter your details manually or select a server retrieved from <RegisterPlexTVLink>plex.tv</RegisterPlexTVLink>. Press the button to the right of the dropdown to check connectivity and retrieve available servers.',
or select a server retrieved from <RegisterPlexTVLink>plex.tv</RegisterPlexTVLink>.\
Press the button to the right of the dropdown to check connectivity and retrieve available servers.',
hostname: 'Hostname or IP Address', hostname: 'Hostname or IP Address',
port: 'Port', port: 'Port',
enablessl: 'Enable SSL', enablessl: 'Enable SSL',

@ -1,12 +1,12 @@
import axios from 'axios';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl';
import { useUser } from '../../hooks/useUser'; import { useUser } from '../../hooks/useUser';
import PlexLoginButton from '../PlexLoginButton'; import PlexLoginButton from '../PlexLoginButton';
import axios from 'axios';
import { defineMessages, useIntl } from 'react-intl';
const messages = defineMessages({ const messages = defineMessages({
welcome: 'Welcome to Overseerr', welcome: 'Welcome to Overseerr',
signinMessage: 'Get started by logging in with your Plex account', signinMessage: 'Get started by signing in with your Plex account',
}); });
interface LoginWithPlexProps { interface LoginWithPlexProps {

@ -1,30 +1,29 @@
import axios from 'axios';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl';
import AppDataWarning from '../AppDataWarning';
import Badge from '../Common/Badge';
import Button from '../Common/Button'; import Button from '../Common/Button';
import ImageFader from '../Common/ImageFader'; import ImageFader from '../Common/ImageFader';
import PageTitle from '../Common/PageTitle';
import LanguagePicker from '../Layout/LanguagePicker';
import SettingsPlex from '../Settings/SettingsPlex'; import SettingsPlex from '../Settings/SettingsPlex';
import SettingsServices from '../Settings/SettingsServices'; import SettingsServices from '../Settings/SettingsServices';
import LoginWithPlex from './LoginWithPlex'; import LoginWithPlex from './LoginWithPlex';
import SetupSteps from './SetupSteps'; import SetupSteps from './SetupSteps';
import axios from 'axios';
import { defineMessages, useIntl } from 'react-intl';
import Badge from '../Common/Badge';
import LanguagePicker from '../Layout/LanguagePicker';
import PageTitle from '../Common/PageTitle';
import AppDataWarning from '../AppDataWarning';
const messages = defineMessages({ const messages = defineMessages({
setup: 'Setup', setup: 'Setup',
finish: 'Finish Setup', finish: 'Finish Setup',
finishing: 'Finishing…', finishing: 'Finishing…',
continue: 'Continue', continue: 'Continue',
loginwithplex: 'Login with Plex', loginwithplex: 'Sign in with Plex',
configureplex: 'Configure Plex', configureplex: 'Configure Plex',
configureservices: 'Configure Services', configureservices: 'Configure Services',
tip: 'Tip', tip: 'Tip',
scanbackground: scanbackground:
'Scanning will run in the background.\ 'Scanning will run in the background. You can continue the setup process in the meantime.',
You can continue the setup process in the meantime.',
}); });
const Setup: React.FC = () => { const Setup: React.FC = () => {

@ -1,40 +1,40 @@
import React, { useState, useContext, useMemo } from 'react'; import axios from 'axios';
import Link from 'next/link';
import { useRouter } from 'next/router';
import React, { useContext, useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import { useRouter } from 'next/router'; import type { RTRating } from '../../../server/api/rottentomatoes';
import Button from '../Common/Button'; import { ANIME_KEYWORD_ID } from '../../../server/api/themoviedb/constants';
import Link from 'next/link';
import Slider from '../Slider';
import PersonCard from '../PersonCard';
import { LanguageContext } from '../../context/LanguageContext';
import LoadingSpinner from '../Common/LoadingSpinner';
import { useUser, Permission } from '../../hooks/useUser';
import { TvDetails as TvDetailsType } from '../../../server/models/Tv';
import { MediaStatus } from '../../../server/constants/media'; import { MediaStatus } from '../../../server/constants/media';
import RequestModal from '../RequestModal'; import { Crew } from '../../../server/models/common';
import axios from 'axios'; import { TvDetails as TvDetailsType } from '../../../server/models/Tv';
import SlideOver from '../Common/SlideOver';
import RequestBlock from '../RequestBlock';
import Error from '../../pages/_error';
import TmdbLogo from '../../assets/tmdb_logo.svg';
import RTFresh from '../../assets/rt_fresh.svg';
import RTRotten from '../../assets/rt_rotten.svg';
import RTAudFresh from '../../assets/rt_aud_fresh.svg'; import RTAudFresh from '../../assets/rt_aud_fresh.svg';
import RTAudRotten from '../../assets/rt_aud_rotten.svg'; import RTAudRotten from '../../assets/rt_aud_rotten.svg';
import type { RTRating } from '../../../server/api/rottentomatoes'; import RTFresh from '../../assets/rt_fresh.svg';
import { ANIME_KEYWORD_ID } from '../../../server/api/themoviedb/constants'; import RTRotten from '../../assets/rt_rotten.svg';
import ExternalLinkBlock from '../ExternalLinkBlock'; import TmdbLogo from '../../assets/tmdb_logo.svg';
import { LanguageContext } from '../../context/LanguageContext';
import useSettings from '../../hooks/useSettings';
import { Permission, useUser } from '../../hooks/useUser';
import Error from '../../pages/_error';
import { sortCrewPriority } from '../../utils/creditHelpers'; import { sortCrewPriority } from '../../utils/creditHelpers';
import { Crew } from '../../../server/models/common'; import Button from '../Common/Button';
import StatusBadge from '../StatusBadge'; import CachedImage from '../Common/CachedImage';
import RequestButton from '../RequestButton';
import MediaSlider from '../MediaSlider';
import ConfirmButton from '../Common/ConfirmButton'; import ConfirmButton from '../Common/ConfirmButton';
import DownloadBlock from '../DownloadBlock'; import LoadingSpinner from '../Common/LoadingSpinner';
import PageTitle from '../Common/PageTitle'; import PageTitle from '../Common/PageTitle';
import useSettings from '../../hooks/useSettings';
import PlayButton, { PlayButtonLink } from '../Common/PlayButton'; import PlayButton, { PlayButtonLink } from '../Common/PlayButton';
import CachedImage from '../Common/CachedImage'; import SlideOver from '../Common/SlideOver';
import DownloadBlock from '../DownloadBlock';
import ExternalLinkBlock from '../ExternalLinkBlock';
import MediaSlider from '../MediaSlider';
import PersonCard from '../PersonCard';
import RequestBlock from '../RequestBlock';
import RequestButton from '../RequestButton';
import RequestModal from '../RequestModal';
import Slider from '../Slider';
import StatusBadge from '../StatusBadge';
const messages = defineMessages({ const messages = defineMessages({
firstAirDate: 'First Air Date', firstAirDate: 'First Air Date',
@ -57,8 +57,7 @@ const messages = defineMessages({
manageModalNoRequests: 'No Requests', manageModalNoRequests: 'No Requests',
manageModalClearMedia: 'Clear All Media Data', manageModalClearMedia: 'Clear All Media Data',
manageModalClearMediaWarning: manageModalClearMediaWarning:
'This will irreversibly remove all data for this TV series, including any requests.\ '* This will irreversibly remove all data for this TV series, including any requests. If this item exists in your Plex library, the media information will be recreated during the next scan.',
If this item exists in your Plex library, the media information will be recreated during the next scan.',
approve: 'Approve', approve: 'Approve',
decline: 'Decline', decline: 'Decline',
showtype: 'Series Type', showtype: 'Series Type',

@ -1,27 +1,27 @@
import axios from 'axios';
import { Field, Form, Formik } from 'formik';
import Link from 'next/link';
import { useRouter } from 'next/router';
import React, { useState } from 'react'; import React, { useState } from 'react';
import useSWR from 'swr';
import LoadingSpinner from '../Common/LoadingSpinner';
import Badge from '../Common/Badge';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import Button from '../Common/Button'; import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr';
import * as Yup from 'yup';
import type { UserResultsResponse } from '../../../server/interfaces/api/userInterfaces';
import { hasPermission } from '../../../server/lib/permissions'; import { hasPermission } from '../../../server/lib/permissions';
import AddUserIcon from '../../assets/useradd.svg';
import { Permission, User, UserType, useUser } from '../../hooks/useUser'; import { Permission, User, UserType, useUser } from '../../hooks/useUser';
import { useRouter } from 'next/router'; import globalMessages from '../../i18n/globalMessages';
import Alert from '../Common/Alert';
import Badge from '../Common/Badge';
import Button from '../Common/Button';
import Header from '../Common/Header'; import Header from '../Common/Header';
import LoadingSpinner from '../Common/LoadingSpinner';
import Modal from '../Common/Modal';
import PageTitle from '../Common/PageTitle';
import Table from '../Common/Table'; import Table from '../Common/Table';
import Transition from '../Transition'; import Transition from '../Transition';
import Modal from '../Common/Modal';
import axios from 'axios';
import { useToasts } from 'react-toast-notifications';
import globalMessages from '../../i18n/globalMessages';
import { Field, Form, Formik } from 'formik';
import * as Yup from 'yup';
import AddUserIcon from '../../assets/useradd.svg';
import Alert from '../Common/Alert';
import BulkEditModal from './BulkEditModal'; import BulkEditModal from './BulkEditModal';
import PageTitle from '../Common/PageTitle';
import Link from 'next/link';
import type { UserResultsResponse } from '../../../server/interfaces/api/userInterfaces';
const messages = defineMessages({ const messages = defineMessages({
users: 'Users', users: 'Users',
@ -29,7 +29,7 @@ const messages = defineMessages({
importfromplex: 'Import Users from Plex', importfromplex: 'Import Users from Plex',
importfromplexerror: 'Something went wrong while importing users from Plex.', importfromplexerror: 'Something went wrong while importing users from Plex.',
importedfromplex: importedfromplex:
'{userCount, plural, =0 {No new users} one {# new user} other {# new users}} imported from Plex.', '{userCount, plural, =0 {No new users} one {# new user} other {# new users}} imported from Plex successfully!',
user: 'User', user: 'User',
totalrequests: 'Total Requests', totalrequests: 'Total Requests',
accounttype: 'Account Type', accounttype: 'Account Type',
@ -43,7 +43,7 @@ const messages = defineMessages({
admin: 'Admin', admin: 'Admin',
plexuser: 'Plex User', plexuser: 'Plex User',
deleteuser: 'Delete User', deleteuser: 'Delete User',
userdeleted: 'User deleted', userdeleted: 'User deleted successfully!',
userdeleteerror: 'Something went wrong while deleting the user.', userdeleteerror: 'Something went wrong while deleting the user.',
deleteconfirm: deleteconfirm:
'Are you sure you want to delete this user? All existing request data from this user will be removed.', 'Are you sure you want to delete this user? All existing request data from this user will be removed.',

@ -5,22 +5,22 @@ import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr'; import useSWR from 'swr';
import * as Yup from 'yup';
import { UserSettingsNotificationsResponse } from '../../../../../server/interfaces/api/userSettingsInterfaces';
import { useUser } from '../../../../hooks/useUser'; import { useUser } from '../../../../hooks/useUser';
import globalMessages from '../../../../i18n/globalMessages';
import Error from '../../../../pages/_error'; import Error from '../../../../pages/_error';
import Badge from '../../../Common/Badge';
import Button from '../../../Common/Button'; import Button from '../../../Common/Button';
import LoadingSpinner from '../../../Common/LoadingSpinner'; import LoadingSpinner from '../../../Common/LoadingSpinner';
import { UserSettingsNotificationsResponse } from '../../../../../server/interfaces/api/userSettingsInterfaces';
import * as Yup from 'yup';
import Badge from '../../../Common/Badge';
import globalMessages from '../../../../i18n/globalMessages';
import { PgpLink } from '../../../Settings/Notifications/NotificationsEmail';
import PageTitle from '../../../Common/PageTitle'; import PageTitle from '../../../Common/PageTitle';
import { PgpLink } from '../../../Settings/Notifications/NotificationsEmail';
const messages = defineMessages({ const messages = defineMessages({
notifications: 'Notifications', notifications: 'Notifications',
notificationsettings: 'Notification Settings', notificationsettings: 'Notification Settings',
enableNotifications: 'Enable Notifications', enableNotifications: 'Enable Notifications',
discordId: 'Discord User ID', discordId: 'Discord ID',
discordIdTip: discordIdTip:
'The <FindDiscordIdLink>ID number</FindDiscordIdLink> for your Discord user account', 'The <FindDiscordIdLink>ID number</FindDiscordIdLink> for your Discord user account',
validationDiscordId: 'You must provide a valid Discord user ID', validationDiscordId: 'You must provide a valid Discord user ID',

@ -5,15 +5,15 @@ import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr'; import useSWR from 'swr';
import * as Yup from 'yup';
import useSettings from '../../../../hooks/useSettings';
import { Permission, useUser } from '../../../../hooks/useUser'; import { Permission, useUser } from '../../../../hooks/useUser';
import globalMessages from '../../../../i18n/globalMessages';
import Error from '../../../../pages/_error'; import Error from '../../../../pages/_error';
import Alert from '../../../Common/Alert'; import Alert from '../../../Common/Alert';
import Button from '../../../Common/Button'; import Button from '../../../Common/Button';
import LoadingSpinner from '../../../Common/LoadingSpinner'; import LoadingSpinner from '../../../Common/LoadingSpinner';
import * as Yup from 'yup';
import useSettings from '../../../../hooks/useSettings';
import PageTitle from '../../../Common/PageTitle'; import PageTitle from '../../../Common/PageTitle';
import globalMessages from '../../../../i18n/globalMessages';
const messages = defineMessages({ const messages = defineMessages({
password: 'Password', password: 'Password',
@ -34,11 +34,9 @@ const messages = defineMessages({
validationConfirmPasswordSame: 'Passwords must match', validationConfirmPasswordSame: 'Passwords must match',
nopasswordset: 'No Password Set', nopasswordset: 'No Password Set',
nopasswordsetDescription: nopasswordsetDescription:
'This user account currently does not have a password specifically for {applicationTitle}.\ 'This user account currently does not have a password specifically for {applicationTitle}. Configure a password below to enable this account to sign in as a "local user."',
Configure a password below to enable this account to sign in as a "local user."',
nopasswordsetDescriptionOwnAccount: nopasswordsetDescriptionOwnAccount:
'Your account currently does not have a password specifically for {applicationTitle}.\ 'Your account currently does not have a password specifically for {applicationTitle}. Configure a password below to enable sign in as a "local user" using your email address.',
Configure a password below to enable sign in as a "local user" using your email address.',
nopermission: 'Unauthorized', nopermission: 'Unauthorized',
nopermissionDescription: nopermissionDescription:
"You do not have permission to modify this user's password.", "You do not have permission to modify this user's password.",

@ -229,7 +229,7 @@
"components.RequestModal.request4kfrom": "There is currently a pending 4K request from {username}.", "components.RequestModal.request4kfrom": "There is currently a pending 4K request from {username}.",
"components.RequestModal.request4ktitle": "Request {title} in 4K", "components.RequestModal.request4ktitle": "Request {title} in 4K",
"components.RequestModal.requestCancel": "Request for <strong>{title}</strong> canceled.", "components.RequestModal.requestCancel": "Request for <strong>{title}</strong> canceled.",
"components.RequestModal.requestSuccess": "<strong>{title}</strong> requested.", "components.RequestModal.requestSuccess": "<strong>{title}</strong> requested successfully!",
"components.RequestModal.requestadmin": "Your request will be immediately approved.", "components.RequestModal.requestadmin": "Your request will be immediately approved.",
"components.RequestModal.requestall": "Request All Seasons", "components.RequestModal.requestall": "Request All Seasons",
"components.RequestModal.requestcancelled": "Request canceled.", "components.RequestModal.requestcancelled": "Request canceled.",
@ -711,7 +711,7 @@
"components.UserList.edit": "Edit", "components.UserList.edit": "Edit",
"components.UserList.edituser": "Edit User Permissions", "components.UserList.edituser": "Edit User Permissions",
"components.UserList.email": "Email Address", "components.UserList.email": "Email Address",
"components.UserList.importedfromplex": "{userCount, plural, =0 {No new users} one {# new user} other {# new users}} imported from Plex", "components.UserList.importedfromplex": "{userCount, plural, =0 {No new users} one {# new user} other {# new users}} imported from Plex successfully!",
"components.UserList.importfromplex": "Import Users from Plex", "components.UserList.importfromplex": "Import Users from Plex",
"components.UserList.importfromplexerror": "Something went wrong while importing users from Plex.", "components.UserList.importfromplexerror": "Something went wrong while importing users from Plex.",
"components.UserList.lastupdated": "Last Updated", "components.UserList.lastupdated": "Last Updated",
@ -736,7 +736,7 @@
"components.UserList.user": "User", "components.UserList.user": "User",
"components.UserList.usercreatedfailed": "Something went wrong while creating the user.", "components.UserList.usercreatedfailed": "Something went wrong while creating the user.",
"components.UserList.usercreatedsuccess": "User created successfully!", "components.UserList.usercreatedsuccess": "User created successfully!",
"components.UserList.userdeleted": "User deleted.", "components.UserList.userdeleted": "User deleted successfully!",
"components.UserList.userdeleteerror": "Something went wrong while deleting the user.", "components.UserList.userdeleteerror": "Something went wrong while deleting the user.",
"components.UserList.userfail": "Something went wrong while saving user permissions.", "components.UserList.userfail": "Something went wrong while saving user permissions.",
"components.UserList.userlist": "User List", "components.UserList.userlist": "User List",
@ -843,7 +843,7 @@
"i18n.movies": "Movies", "i18n.movies": "Movies",
"i18n.partiallyavailable": "Partially Available", "i18n.partiallyavailable": "Partially Available",
"i18n.pending": "Pending", "i18n.pending": "Pending",
"i18n.processing": "Processing", "i18n.processing": "Processing",
"i18n.request": "Request", "i18n.request": "Request",
"i18n.requested": "Requested", "i18n.requested": "Requested",
"i18n.retry": "Retry", "i18n.retry": "Retry",

Loading…
Cancel
Save