From 8ebc8292504cdc57a148ab69bcb4e1514ef018c6 Mon Sep 17 00:00:00 2001
From: TheCatLady <52870424+TheCatLady@users.noreply.github.com>
Date: Sun, 21 Mar 2021 06:04:16 -0400
Subject: [PATCH] fix(lang): correct mismatched language strings (#1246)
---
package.json | 2 +-
src/components/Login/LocalLogin.tsx | 12 ++--
src/components/MovieDetails/index.tsx | 51 ++++++++--------
src/components/PermissionEdit/index.tsx | 15 ++---
src/components/RequestBlock/index.tsx | 14 ++---
.../RequestModal/MovieRequestModal.tsx | 30 +++++-----
.../RequestModal/SearchByNameModal/index.tsx | 11 ++--
.../ResetPassword/RequestResetLink.tsx | 14 ++---
.../Notifications/NotificationsEmail.tsx | 22 ++++---
.../NotificationsPushover/index.tsx | 16 +++--
.../Notifications/NotificationsTelegram.tsx | 16 +++--
src/components/Settings/RadarrModal/index.tsx | 19 +++---
.../Settings/SettingsAbout/Releases/index.tsx | 11 ++--
.../Settings/SettingsJobsCache/index.tsx | 24 ++++----
src/components/Settings/SettingsMain.tsx | 28 ++++-----
src/components/Settings/SettingsPlex.tsx | 30 +++++-----
src/components/Setup/LoginWithPlex.tsx | 6 +-
src/components/Setup/index.tsx | 17 +++---
src/components/TvDetails/index.tsx | 59 +++++++++----------
src/components/UserList/index.tsx | 36 +++++------
.../UserNotificationSettings/index.tsx | 12 ++--
.../UserSettings/UserPasswordChange/index.tsx | 12 ++--
src/i18n/locale/en.json | 8 +--
23 files changed, 222 insertions(+), 243 deletions(-)
diff --git a/package.json b/package.json
index c85d3407..51dfd15e 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"build": "yarn build:next && yarn build:server",
"lint": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\"",
"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: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",
diff --git a/src/components/Login/LocalLogin.tsx b/src/components/Login/LocalLogin.tsx
index 365cb334..f4d4e51d 100644
--- a/src/components/Login/LocalLogin.tsx
+++ b/src/components/Login/LocalLogin.tsx
@@ -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 { defineMessages, useIntl } from 'react-intl';
-import Button from '../Common/Button';
-import { Field, Form, Formik } from 'formik';
import * as Yup from 'yup';
-import axios from 'axios';
-import Link from 'next/link';
+import Button from '../Common/Button';
const messages = defineMessages({
email: 'Email Address',
password: 'Password',
- validationemailrequired: 'Not a valid email address',
- validationpasswordrequired: 'Password required',
+ validationemailrequired: 'You must provide a valid email address',
+ validationpasswordrequired: 'You must provide a password',
loginerror: 'Something went wrong while trying to sign in.',
signingin: 'Signing in…',
signin: 'Sign In',
diff --git a/src/components/MovieDetails/index.tsx b/src/components/MovieDetails/index.tsx
index eefc5cdf..f5aaf18b 100644
--- a/src/components/MovieDetails/index.tsx
+++ b/src/components/MovieDetails/index.tsx
@@ -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 type { MovieDetails as MovieDetailsType } from '../../../server/models/Movie';
import useSWR from 'swr';
-import { useRouter } from 'next/router';
-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 type { RTRating } from '../../../server/api/rottentomatoes';
import { MediaStatus } from '../../../server/constants/media';
-import axios from 'axios';
-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 type { MovieDetails as MovieDetailsType } from '../../../server/models/Movie';
import RTAudFresh from '../../assets/rt_aud_fresh.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 ExternalLinkBlock from '../ExternalLinkBlock';
import { sortCrewPriority } from '../../utils/creditHelpers';
-import StatusBadge from '../StatusBadge';
-import RequestButton from '../RequestButton';
-import MediaSlider from '../MediaSlider';
+import Button from '../Common/Button';
+import CachedImage from '../Common/CachedImage';
import ConfirmButton from '../Common/ConfirmButton';
-import DownloadBlock from '../DownloadBlock';
+import LoadingSpinner from '../Common/LoadingSpinner';
import PageTitle from '../Common/PageTitle';
-import useSettings from '../../hooks/useSettings';
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({
releasedate: 'Release Date',
@@ -56,8 +56,7 @@ const messages = defineMessages({
manageModalNoRequests: 'No Requests',
manageModalClearMedia: 'Clear All Media Data',
manageModalClearMediaWarning:
- '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.',
+ '* 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.',
approve: 'Approve',
decline: 'Decline',
studio: '{studioCount, plural, one {Studio} other {Studios}}',
diff --git a/src/components/PermissionEdit/index.tsx b/src/components/PermissionEdit/index.tsx
index 369b53f3..5c0f60fe 100644
--- a/src/components/PermissionEdit/index.tsx
+++ b/src/components/PermissionEdit/index.tsx
@@ -1,7 +1,7 @@
import React from 'react';
-import PermissionOption, { PermissionItem } from '../PermissionOption';
+import { defineMessages, useIntl } from 'react-intl';
import { Permission, User } from '../../hooks/useUser';
-import { useIntl, defineMessages } from 'react-intl';
+import PermissionOption, { PermissionItem } from '../PermissionOption';
export const messages = defineMessages({
admin: 'Admin',
@@ -9,18 +9,15 @@ export const messages = defineMessages({
'Full administrator access. Bypasses all other permission checks.',
users: 'Manage Users',
usersDescription:
- 'Grant permission to manage Overseerr users.\
- Users with this permission cannot modify users with or grant the Admin privilege.',
+ 'Grant permission to manage Overseerr users. Users with this permission cannot modify users with or grant the Admin privilege.',
settings: 'Manage Settings',
settingsDescription:
- 'Grant permission to modify all Overseerr settings.\
- A user must have this permission to grant it to others.',
+ 'Grant permission to modify all Overseerr settings. A user must have this permission to grant it to others.',
managerequests: 'Manage Requests',
managerequestsDescription:
- 'Grant permission to manage Overseerr requests (includes approving and denying requests).\
- All requests made by a user with this permission will be automatically approved.',
+ 'Grant permission to manage Overseerr requests (includes approving and denying requests). All requests made by a user with this permission will be automatically approved.',
request: 'Request',
- requestDescription: 'Grants permission to request movies and series.',
+ requestDescription: 'Grant permission to request movies and series.',
vote: 'Vote',
voteDescription:
'Grant permission to vote on requests (voting not yet implemented).',
diff --git a/src/components/RequestBlock/index.tsx b/src/components/RequestBlock/index.tsx
index 0a95377e..c23370e9 100644
--- a/src/components/RequestBlock/index.tsx
+++ b/src/components/RequestBlock/index.tsx
@@ -1,19 +1,19 @@
+import axios from 'axios';
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 { useIntl, defineMessages } from 'react-intl';
+import useRequestOverride from '../../hooks/useRequestOverride';
+import globalMessages from '../../i18n/globalMessages';
import Badge from '../Common/Badge';
-import { MediaRequestStatus } from '../../../server/constants/media';
import Button from '../Common/Button';
-import axios from 'axios';
-import globalMessages from '../../i18n/globalMessages';
import RequestModal from '../RequestModal';
-import useRequestOverride from '../../hooks/useRequestOverride';
const messages = defineMessages({
seasons: '{seasonCount, plural, one {Season} other {Seasons}}',
requestoverrides: 'Request Overrides',
- server: 'Server',
- profilechanged: 'Profile Changed',
+ server: 'Destination Server',
+ profilechanged: 'Quality Profile',
rootfolder: 'Root Folder',
});
diff --git a/src/components/RequestModal/MovieRequestModal.tsx b/src/components/RequestModal/MovieRequestModal.tsx
index 6ec1f2b8..df9e397f 100644
--- a/src/components/RequestModal/MovieRequestModal.tsx
+++ b/src/components/RequestModal/MovieRequestModal.tsx
@@ -1,40 +1,40 @@
-import React, { useCallback, useState, useEffect } from 'react';
-import Modal from '../Common/Modal';
-import { useUser } from '../../hooks/useUser';
-import { Permission } from '../../../server/lib/permissions';
+import axios from 'axios';
+import React, { useCallback, useEffect, useState } from 'react';
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 axios from 'axios';
+import useSWR from 'swr';
import {
- MediaStatus,
MediaRequestStatus,
+ MediaStatus,
} 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 { useUser } from '../../hooks/useUser';
+import globalMessages from '../../i18n/globalMessages';
import Alert from '../Common/Alert';
+import Modal from '../Common/Modal';
import AdvancedRequester, { RequestOverrides } from './AdvancedRequester';
-import globalMessages from '../../i18n/globalMessages';
const messages = defineMessages({
requestadmin: 'Your request will be immediately approved.',
cancelrequest:
'This will remove your request. Are you sure you want to continue?',
requestSuccess: '{title} requested successfully!',
- requestCancel: 'Request for {title} canceled',
+ requestCancel: 'Request for {title} canceled.',
requesttitle: 'Request {title}',
request4ktitle: 'Request {title} in 4K',
close: 'Close',
cancel: 'Cancel Request',
cancelling: 'Canceling…',
- pendingrequest: 'Pending request for {title}',
- pending4krequest: 'Pending request for {title} in 4K',
+ pendingrequest: 'Pending Request for {title}',
+ pending4krequest: 'Pending Request for {title} in 4K',
requesting: 'Requesting…',
request: 'Request',
request4k: 'Request 4K',
- requestfrom: 'There is a pending request from {username}.',
- request4kfrom: 'There is a pending 4K request from {username}.',
+ requestfrom: 'There is currently a pending request from {username}.',
+ request4kfrom: 'There is currently a pending 4K request from {username}.',
errorediting: 'Something went wrong while editing the request.',
requestedited: 'Request edited.',
autoapproval: 'Automatic Approval',
diff --git a/src/components/RequestModal/SearchByNameModal/index.tsx b/src/components/RequestModal/SearchByNameModal/index.tsx
index e0f13808..6f862cf9 100644
--- a/src/components/RequestModal/SearchByNameModal/index.tsx
+++ b/src/components/RequestModal/SearchByNameModal/index.tsx
@@ -1,17 +1,16 @@
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 useSWR from 'swr';
import { SonarrSeries } from '../../../../server/api/sonarr';
+import Alert from '../../Common/Alert';
+import { SmallLoadingSpinner } from '../../Common/LoadingSpinner';
+import Modal from '../../Common/Modal';
const messages = defineMessages({
next: 'Next',
notvdbid: 'Manual Match Required',
notvdbiddescription:
- "We couldn't automatically match your request.\
- Please select the correct match from the list below.",
+ "We couldn't automatically match your request. Please select the correct match from the list below.",
nosummary: 'No summary for this title was found.',
});
diff --git a/src/components/ResetPassword/RequestResetLink.tsx b/src/components/ResetPassword/RequestResetLink.tsx
index 02cd4b8d..f9359772 100644
--- a/src/components/ResetPassword/RequestResetLink.tsx
+++ b/src/components/ResetPassword/RequestResetLink.tsx
@@ -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 ImageFader from '../Common/ImageFader';
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 axios from 'axios';
-import Link from 'next/link';
+import Button from '../Common/Button';
+import ImageFader from '../Common/ImageFader';
import PageTitle from '../Common/PageTitle';
+import LanguagePicker from '../Layout/LanguagePicker';
const messages = defineMessages({
passwordreset: 'Password Reset',
resetpassword: 'Reset your password',
emailresetlink: 'Email a Recovery Link',
- email: 'Email',
+ email: 'Email Address',
validationemailrequired: 'You must provide a valid email address',
gobacklogin: 'Return to Sign-In Page',
requestresetlinksuccessmessage:
diff --git a/src/components/Settings/Notifications/NotificationsEmail.tsx b/src/components/Settings/Notifications/NotificationsEmail.tsx
index d0ce112d..49402973 100644
--- a/src/components/Settings/Notifications/NotificationsEmail.tsx
+++ b/src/components/Settings/Notifications/NotificationsEmail.tsx
@@ -1,16 +1,16 @@
-import React from 'react';
+import axios from 'axios';
import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../Common/LoadingSpinner';
-import Button from '../../Common/Button';
+import React from 'react';
import { defineMessages, useIntl } from 'react-intl';
-import axios from 'axios';
-import * as Yup from 'yup';
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 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({
save: 'Save Changes',
@@ -36,11 +36,9 @@ const messages = defineMessages({
validationEmail: 'You must provide a valid email address',
emailNotificationTypesAlert: 'Email Notification Recipients',
emailNotificationTypesAlertDescription:
- 'Media Requested, Media Automatically Approved, and Media Failed\
- email notifications are sent to all users with the Manage Requests permission.',
+ 'Media Requested, Media Automatically Approved, and Media Failed email notifications are sent to all users with the Manage Requests permission.',
emailNotificationTypesAlertDescriptionPt2:
- 'Media Approved, Media Declined, and Media Available\
- email notifications are sent to the user who submitted the request.',
+ 'Media Approved, Media Declined, and Media Available email notifications are sent to the user who submitted the request.',
pgpPrivateKey: 'PGP Private Key',
pgpPrivateKeyTip:
'Sign encrypted email messages (PGP password is also required)',
diff --git a/src/components/Settings/Notifications/NotificationsPushover/index.tsx b/src/components/Settings/Notifications/NotificationsPushover/index.tsx
index 1d0361df..6d6c20b1 100644
--- a/src/components/Settings/Notifications/NotificationsPushover/index.tsx
+++ b/src/components/Settings/Notifications/NotificationsPushover/index.tsx
@@ -1,13 +1,13 @@
-import React from 'react';
+import axios from 'axios';
import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../../Common/LoadingSpinner';
-import Button from '../../../Common/Button';
+import React from 'react';
import { defineMessages, useIntl } from 'react-intl';
-import axios from 'axios';
-import * as Yup from 'yup';
import { useToasts } from 'react-toast-notifications';
+import useSWR from 'swr';
+import * as Yup from 'yup';
import Alert from '../../../Common/Alert';
+import Button from '../../../Common/Button';
+import LoadingSpinner from '../../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../../NotificationTypeSelector';
const messages = defineMessages({
@@ -24,9 +24,7 @@ const messages = defineMessages({
test: 'Test',
settinguppushover: 'Setting Up Pushover Notifications',
settinguppushoverDescription:
- 'To configure Pushover notifications, you will need to register an application and enter the API token below.\
- (You can use one of our official icons on GitHub.)\
- You will also need your user key.',
+ 'To configure Pushover notifications, you will need to register an application and enter the API token below. (You can use one of our official icons on GitHub.) You will also need your user key.',
notificationtypes: 'Notification Types',
});
diff --git a/src/components/Settings/Notifications/NotificationsTelegram.tsx b/src/components/Settings/Notifications/NotificationsTelegram.tsx
index e3486018..be1fd26c 100644
--- a/src/components/Settings/Notifications/NotificationsTelegram.tsx
+++ b/src/components/Settings/Notifications/NotificationsTelegram.tsx
@@ -1,13 +1,13 @@
-import React from 'react';
+import axios from 'axios';
import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../Common/LoadingSpinner';
-import Button from '../../Common/Button';
+import React from 'react';
import { defineMessages, useIntl } from 'react-intl';
-import axios from 'axios';
-import * as Yup from 'yup';
import { useToasts } from 'react-toast-notifications';
+import useSWR from 'swr';
+import * as Yup from 'yup';
import Alert from '../../Common/Alert';
+import Button from '../../Common/Button';
+import LoadingSpinner from '../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../NotificationTypeSelector';
const messages = defineMessages({
@@ -25,9 +25,7 @@ const messages = defineMessages({
test: 'Test',
settinguptelegram: 'Setting Up Telegram Notifications',
settinguptelegramDescription:
- 'To configure Telegram notifications, you will need to create a bot 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 @get_id_bot to the chat and issuing the /my_id
command.',
+ 'To configure Telegram notifications, you will need to create a bot 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 @get_id_bot to the chat and issuing the /my_id
command.',
notificationtypes: 'Notification Types',
sendSilently: 'Send Silently',
sendSilentlyTip: 'Send notifications with no sound',
diff --git a/src/components/Settings/RadarrModal/index.tsx b/src/components/Settings/RadarrModal/index.tsx
index 47add7ef..de622225 100644
--- a/src/components/Settings/RadarrModal/index.tsx
+++ b/src/components/Settings/RadarrModal/index.tsx
@@ -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 { 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 { 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({
createradarr: 'Add New Radarr Server',
@@ -16,8 +16,9 @@ const messages = defineMessages({
validationPortRequired: 'You must provide a valid port number',
validationApiKeyRequired: 'You must provide an API key',
validationRootFolderRequired: 'You must select a root folder',
- validationProfileRequired: 'You must select a profile',
- validationMinimumAvailabilityRequired: 'You must select minimum availability',
+ validationProfileRequired: 'You must select a quality profile',
+ validationMinimumAvailabilityRequired:
+ 'You must select a minimum availability',
toastRadarrTestSuccess: 'Radarr connection established successfully!',
toastRadarrTestFailure: 'Failed to connect to Radarr.',
saving: 'Saving…',
diff --git a/src/components/Settings/SettingsAbout/Releases/index.tsx b/src/components/Settings/SettingsAbout/Releases/index.tsx
index 78a02e43..1e701580 100644
--- a/src/components/Settings/SettingsAbout/Releases/index.tsx
+++ b/src/components/Settings/SettingsAbout/Releases/index.tsx
@@ -1,14 +1,14 @@
import React, { useState } from 'react';
-import useSWR from 'swr';
+import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
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 Badge from '../../../Common/Badge';
import Button from '../../../Common/Button';
+import LoadingSpinner from '../../../Common/LoadingSpinner';
import Modal from '../../../Common/Modal';
import Transition from '../../../Transition';
-import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
-import globalMessages from '../../../../i18n/globalMessages';
const messages = defineMessages({
releases: 'Releases',
@@ -20,8 +20,7 @@ const messages = defineMessages({
viewchangelog: 'View Changelog',
runningDevelop: 'Development Version',
runningDevelopMessage:
- 'The latest changes to the develop
branch of Overseerr are not shown below.\
- Please see the commit history for this branch on GitHub for details.',
+ 'The latest changes to the develop
branch of Overseerr are not shown below. Please see the commit history for this branch on GitHub for details.',
});
const REPO_RELEASE_API =
diff --git a/src/components/Settings/SettingsJobsCache/index.tsx b/src/components/Settings/SettingsJobsCache/index.tsx
index f876ab72..46d0cd9d 100644
--- a/src/components/Settings/SettingsJobsCache/index.tsx
+++ b/src/components/Settings/SettingsJobsCache/index.tsx
@@ -1,30 +1,28 @@
+import axios from 'axios';
import React from 'react';
-import useSWR from 'swr';
-import LoadingSpinner from '../../Common/LoadingSpinner';
import {
- FormattedRelativeTime,
defineMessages,
- useIntl,
+ FormattedRelativeTime,
MessageDescriptor,
+ useIntl,
} 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 Badge from '../../Common/Badge';
+import useSWR from 'swr';
import { CacheItem } from '../../../../server/interfaces/api/settingsInterfaces';
+import Spinner from '../../../assets/spinner.svg';
+import globalMessages from '../../../i18n/globalMessages';
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 globalMessages from '../../../i18n/globalMessages';
+import Table from '../../Common/Table';
const messages: { [messageName: string]: MessageDescriptor } = defineMessages({
jobsandcache: 'Jobs & Cache',
jobs: 'Jobs',
jobsDescription:
- '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.',
+ '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.',
jobname: 'Job Name',
jobtype: 'Type',
nextexecution: 'Next Execution',
diff --git a/src/components/Settings/SettingsMain.tsx b/src/components/Settings/SettingsMain.tsx
index 9152a4b7..a059cf45 100644
--- a/src/components/Settings/SettingsMain.tsx
+++ b/src/components/Settings/SettingsMain.tsx
@@ -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 Button from '../Common/Button';
+import { Field, Form, Formik } from 'formik';
+import React, { useMemo } from 'react';
import { defineMessages, useIntl } from 'react-intl';
-import { useUser, Permission } from '../../hooks/useUser';
import { useToasts } from 'react-toast-notifications';
-import Badge from '../Common/Badge';
-import globalMessages from '../../i18n/globalMessages';
+import useSWR from 'swr';
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 RegionSelector from '../RegionSelector';
+import CopyButton from './CopyButton';
const messages = defineMessages({
general: 'General',
@@ -36,8 +36,7 @@ const messages = defineMessages({
hideAvailable: 'Hide Available Media',
csrfProtection: 'Enable CSRF Protection',
csrfProtectionTip:
- 'Set external API access to read-only\
- (requires HTTPS, and Overseerr must be reloaded for changes to take effect)',
+ 'Set external API access to read-only (requires HTTPS, and Overseerr must be reloaded for changes to take effect)',
csrfProtectionHoverTip:
'Do NOT enable this setting unless you understand what you are doing!',
cacheImages: 'Enable Image Caching',
@@ -45,8 +44,7 @@ const messages = defineMessages({
'Optimize and store all images locally (consumes a significant amount of disk space)',
trustProxy: 'Enable Proxy Support',
trustProxyTip:
- 'Allow Overseerr to correctly register client IP addresses behind a proxy\
- (Overseerr must be reloaded for changes to take effect)',
+ 'Allow Overseerr to correctly register client IP addresses behind a proxy (Overseerr must be reloaded for changes to take effect)',
validationApplicationTitle: 'You must provide an application title',
validationApplicationUrl: 'You must provide a valid URL',
validationApplicationUrlTrailingSlash: 'URL must not end in a trailing slash',
diff --git a/src/components/Settings/SettingsPlex.tsx b/src/components/Settings/SettingsPlex.tsx
index f3478372..25bc2e83 100644
--- a/src/components/Settings/SettingsPlex.tsx
+++ b/src/components/Settings/SettingsPlex.tsx
@@ -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 LibraryItem from './LibraryItem';
-import Badge from '../Common/Badge';
+import { Field, Formik } from 'formik';
+import React, { useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl';
+import { useToasts } from 'react-toast-notifications';
+import useSWR from 'swr';
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 PageTitle from '../Common/PageTitle';
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({
plex: 'Plex',
@@ -32,7 +32,7 @@ const messages = defineMessages({
serverpresetManualMessage: 'Manual configuration',
serverpresetRefreshing: 'Retrieving 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!',
toastPlexRefreshFailure: 'Failed to retrieve Plex server list.',
toastPlexConnecting: 'Attempting to connect to Plex…',
@@ -40,9 +40,7 @@ const messages = defineMessages({
toastPlexConnectingFailure: 'Failed to connect to Plex.',
settingUpPlex: 'Setting Up Plex',
settingUpPlexDescription:
- 'To set up Plex, you can either enter your details manually \
- or select a server retrieved from plex.tv.\
- Press the button to the right of the dropdown to check connectivity and retrieve available servers.',
+ 'To set up Plex, you can either enter your details manually or select a server retrieved from plex.tv. Press the button to the right of the dropdown to check connectivity and retrieve available servers.',
hostname: 'Hostname or IP Address',
port: 'Port',
enablessl: 'Enable SSL',
diff --git a/src/components/Setup/LoginWithPlex.tsx b/src/components/Setup/LoginWithPlex.tsx
index 30a49a7a..d79e66c2 100644
--- a/src/components/Setup/LoginWithPlex.tsx
+++ b/src/components/Setup/LoginWithPlex.tsx
@@ -1,12 +1,12 @@
+import axios from 'axios';
import React, { useEffect, useState } from 'react';
+import { defineMessages, useIntl } from 'react-intl';
import { useUser } from '../../hooks/useUser';
import PlexLoginButton from '../PlexLoginButton';
-import axios from 'axios';
-import { defineMessages, useIntl } from 'react-intl';
const messages = defineMessages({
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 {
diff --git a/src/components/Setup/index.tsx b/src/components/Setup/index.tsx
index fca2fea2..eb9a11f7 100644
--- a/src/components/Setup/index.tsx
+++ b/src/components/Setup/index.tsx
@@ -1,30 +1,29 @@
+import axios from 'axios';
import { useRouter } from 'next/router';
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 ImageFader from '../Common/ImageFader';
+import PageTitle from '../Common/PageTitle';
+import LanguagePicker from '../Layout/LanguagePicker';
import SettingsPlex from '../Settings/SettingsPlex';
import SettingsServices from '../Settings/SettingsServices';
import LoginWithPlex from './LoginWithPlex';
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({
setup: 'Setup',
finish: 'Finish Setup',
finishing: 'Finishing…',
continue: 'Continue',
- loginwithplex: 'Login with Plex',
+ loginwithplex: 'Sign in with Plex',
configureplex: 'Configure Plex',
configureservices: 'Configure Services',
tip: 'Tip',
scanbackground:
- 'Scanning will run in the background.\
- You can continue the setup process in the meantime.',
+ 'Scanning will run in the background. You can continue the setup process in the meantime.',
});
const Setup: React.FC = () => {
diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx
index 7abc645e..eed11585 100644
--- a/src/components/TvDetails/index.tsx
+++ b/src/components/TvDetails/index.tsx
@@ -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 useSWR from 'swr';
-import { useRouter } from 'next/router';
-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 { TvDetails as TvDetailsType } from '../../../server/models/Tv';
+import type { RTRating } from '../../../server/api/rottentomatoes';
+import { ANIME_KEYWORD_ID } from '../../../server/api/themoviedb/constants';
import { MediaStatus } from '../../../server/constants/media';
-import RequestModal from '../RequestModal';
-import axios from 'axios';
-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 { Crew } from '../../../server/models/common';
+import { TvDetails as TvDetailsType } from '../../../server/models/Tv';
import RTAudFresh from '../../assets/rt_aud_fresh.svg';
import RTAudRotten from '../../assets/rt_aud_rotten.svg';
-import type { RTRating } from '../../../server/api/rottentomatoes';
-import { ANIME_KEYWORD_ID } from '../../../server/api/themoviedb/constants';
-import ExternalLinkBlock from '../ExternalLinkBlock';
+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 { sortCrewPriority } from '../../utils/creditHelpers';
-import { Crew } from '../../../server/models/common';
-import StatusBadge from '../StatusBadge';
-import RequestButton from '../RequestButton';
-import MediaSlider from '../MediaSlider';
+import Button from '../Common/Button';
+import CachedImage from '../Common/CachedImage';
import ConfirmButton from '../Common/ConfirmButton';
-import DownloadBlock from '../DownloadBlock';
+import LoadingSpinner from '../Common/LoadingSpinner';
import PageTitle from '../Common/PageTitle';
-import useSettings from '../../hooks/useSettings';
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({
firstAirDate: 'First Air Date',
@@ -57,8 +57,7 @@ const messages = defineMessages({
manageModalNoRequests: 'No Requests',
manageModalClearMedia: 'Clear All Media Data',
manageModalClearMediaWarning:
- '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.',
+ '* 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.',
approve: 'Approve',
decline: 'Decline',
showtype: 'Series Type',
diff --git a/src/components/UserList/index.tsx b/src/components/UserList/index.tsx
index 8d65b253..66668ec1 100644
--- a/src/components/UserList/index.tsx
+++ b/src/components/UserList/index.tsx
@@ -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 useSWR from 'swr';
-import LoadingSpinner from '../Common/LoadingSpinner';
-import Badge from '../Common/Badge';
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 AddUserIcon from '../../assets/useradd.svg';
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 LoadingSpinner from '../Common/LoadingSpinner';
+import Modal from '../Common/Modal';
+import PageTitle from '../Common/PageTitle';
import Table from '../Common/Table';
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 PageTitle from '../Common/PageTitle';
-import Link from 'next/link';
-import type { UserResultsResponse } from '../../../server/interfaces/api/userInterfaces';
const messages = defineMessages({
users: 'Users',
@@ -29,7 +29,7 @@ const messages = defineMessages({
importfromplex: 'Import Users from Plex',
importfromplexerror: 'Something went wrong while importing users from Plex.',
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',
totalrequests: 'Total Requests',
accounttype: 'Account Type',
@@ -43,7 +43,7 @@ const messages = defineMessages({
admin: 'Admin',
plexuser: 'Plex User',
deleteuser: 'Delete User',
- userdeleted: 'User deleted',
+ userdeleted: 'User deleted successfully!',
userdeleteerror: 'Something went wrong while deleting the user.',
deleteconfirm:
'Are you sure you want to delete this user? All existing request data from this user will be removed.',
diff --git a/src/components/UserProfile/UserSettings/UserNotificationSettings/index.tsx b/src/components/UserProfile/UserSettings/UserNotificationSettings/index.tsx
index 386e5e6d..8d57684e 100644
--- a/src/components/UserProfile/UserSettings/UserNotificationSettings/index.tsx
+++ b/src/components/UserProfile/UserSettings/UserNotificationSettings/index.tsx
@@ -5,22 +5,22 @@ import React from 'react';
import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr';
+import * as Yup from 'yup';
+import { UserSettingsNotificationsResponse } from '../../../../../server/interfaces/api/userSettingsInterfaces';
import { useUser } from '../../../../hooks/useUser';
+import globalMessages from '../../../../i18n/globalMessages';
import Error from '../../../../pages/_error';
+import Badge from '../../../Common/Badge';
import Button from '../../../Common/Button';
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 { PgpLink } from '../../../Settings/Notifications/NotificationsEmail';
const messages = defineMessages({
notifications: 'Notifications',
notificationsettings: 'Notification Settings',
enableNotifications: 'Enable Notifications',
- discordId: 'Discord User ID',
+ discordId: 'Discord ID',
discordIdTip:
'The ID number for your Discord user account',
validationDiscordId: 'You must provide a valid Discord user ID',
diff --git a/src/components/UserProfile/UserSettings/UserPasswordChange/index.tsx b/src/components/UserProfile/UserSettings/UserPasswordChange/index.tsx
index 98913b20..3243e17b 100644
--- a/src/components/UserProfile/UserSettings/UserPasswordChange/index.tsx
+++ b/src/components/UserProfile/UserSettings/UserPasswordChange/index.tsx
@@ -5,15 +5,15 @@ import React from 'react';
import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr';
+import * as Yup from 'yup';
+import useSettings from '../../../../hooks/useSettings';
import { Permission, useUser } from '../../../../hooks/useUser';
+import globalMessages from '../../../../i18n/globalMessages';
import Error from '../../../../pages/_error';
import Alert from '../../../Common/Alert';
import Button from '../../../Common/Button';
import LoadingSpinner from '../../../Common/LoadingSpinner';
-import * as Yup from 'yup';
-import useSettings from '../../../../hooks/useSettings';
import PageTitle from '../../../Common/PageTitle';
-import globalMessages from '../../../../i18n/globalMessages';
const messages = defineMessages({
password: 'Password',
@@ -34,11 +34,9 @@ const messages = defineMessages({
validationConfirmPasswordSame: 'Passwords must match',
nopasswordset: 'No Password Set',
nopasswordsetDescription:
- '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."',
+ '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."',
nopasswordsetDescriptionOwnAccount:
- '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.',
+ '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.',
nopermission: 'Unauthorized',
nopermissionDescription:
"You do not have permission to modify this user's password.",
diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json
index 2f9002eb..7c8b2615 100644
--- a/src/i18n/locale/en.json
+++ b/src/i18n/locale/en.json
@@ -229,7 +229,7 @@
"components.RequestModal.request4kfrom": "There is currently a pending 4K request from {username}.",
"components.RequestModal.request4ktitle": "Request {title} in 4K",
"components.RequestModal.requestCancel": "Request for {title} canceled.",
- "components.RequestModal.requestSuccess": "{title} requested.",
+ "components.RequestModal.requestSuccess": "{title} requested successfully!",
"components.RequestModal.requestadmin": "Your request will be immediately approved.",
"components.RequestModal.requestall": "Request All Seasons",
"components.RequestModal.requestcancelled": "Request canceled.",
@@ -711,7 +711,7 @@
"components.UserList.edit": "Edit",
"components.UserList.edituser": "Edit User Permissions",
"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.importfromplexerror": "Something went wrong while importing users from Plex.",
"components.UserList.lastupdated": "Last Updated",
@@ -736,7 +736,7 @@
"components.UserList.user": "User",
"components.UserList.usercreatedfailed": "Something went wrong while creating the user.",
"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.userfail": "Something went wrong while saving user permissions.",
"components.UserList.userlist": "User List",
@@ -843,7 +843,7 @@
"i18n.movies": "Movies",
"i18n.partiallyavailable": "Partially Available",
"i18n.pending": "Pending",
- "i18n.processing": "Processing…",
+ "i18n.processing": "Processing",
"i18n.request": "Request",
"i18n.requested": "Requested",
"i18n.retry": "Retry",