= ({
{!seasonRequest && !mediaSeason && (
- {intl.formatMessage(messages.notrequested)}
+ {intl.formatMessage(
+ globalMessages.notrequested
+ )}
)}
{!mediaSeason &&
diff --git a/src/components/ResetPassword/RequestResetLink.tsx b/src/components/ResetPassword/RequestResetLink.tsx
index 0b68acc7..f9359772 100644
--- a/src/components/ResetPassword/RequestResetLink.tsx
+++ b/src/components/ResetPassword/RequestResetLink.tsx
@@ -1,19 +1,21 @@
-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 { Field, Form, Formik } from 'formik';
import Link from 'next/link';
+import React, { useState } from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+import * as Yup from 'yup';
+import Button from '../Common/Button';
+import ImageFader from '../Common/ImageFader';
+import PageTitle from '../Common/PageTitle';
+import LanguagePicker from '../Layout/LanguagePicker';
const messages = defineMessages({
- forgotpassword: 'Forgot Your Password?',
- emailresetlink: 'Email Me a Recovery Link',
- email: 'Email',
+ passwordreset: 'Password Reset',
+ resetpassword: 'Reset your password',
+ emailresetlink: 'Email a Recovery Link',
+ email: 'Email Address',
validationemailrequired: 'You must provide a valid email address',
- gobacklogin: 'Go Back to Sign-In Page',
+ gobacklogin: 'Return to Sign-In Page',
requestresetlinksuccessmessage:
'A password reset link will be sent to the provided email address if it is associated with a valid user.',
});
@@ -30,6 +32,7 @@ const ResetPassword: React.FC = () => {
return (
- 
+
- {intl.formatMessage(messages.forgotpassword)}
+ {intl.formatMessage(messages.resetpassword)}
diff --git a/src/components/ResetPassword/index.tsx b/src/components/ResetPassword/index.tsx
index 8f903d92..4a2925cd 100644
--- a/src/components/ResetPassword/index.tsx
+++ b/src/components/ResetPassword/index.tsx
@@ -10,16 +10,16 @@ import { useRouter } from 'next/router';
import Link from 'next/link';
const messages = defineMessages({
- resetpassword: 'Reset Password',
+ passwordreset: 'Password Reset',
+ resetpassword: 'Reset your password',
password: 'Password',
confirmpassword: 'Confirm Password',
validationpasswordrequired: 'You must provide a password',
- validationpasswordmatch: 'Password must match',
+ validationpasswordmatch: 'Passwords must match',
validationpasswordminchars:
'Password is too short; should be a minimum of 8 characters',
- gobacklogin: 'Go Back to Sign-In Page',
- resetpasswordsuccessmessage:
- 'If the link is valid and is connected to a user then the password has been reset.',
+ gobacklogin: 'Return to Sign-In Page',
+ resetpasswordsuccessmessage: 'Password reset successfully!',
});
const ResetPassword: React.FC = () => {
@@ -60,11 +60,7 @@ const ResetPassword: React.FC = () => {
- 
+
{intl.formatMessage(messages.resetpassword)}
diff --git a/src/components/Settings/Notifications/NotificationsDiscord.tsx b/src/components/Settings/Notifications/NotificationsDiscord.tsx
index 65511896..2fcbdfc0 100644
--- a/src/components/Settings/Notifications/NotificationsDiscord.tsx
+++ b/src/components/Settings/Notifications/NotificationsDiscord.tsx
@@ -1,17 +1,16 @@
-import React from 'react';
-import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../Common/LoadingSpinner';
-import Button from '../../Common/Button';
-import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
-import * as Yup from 'yup';
+import { Field, Form, Formik } from 'formik';
+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 globalMessages from '../../../i18n/globalMessages';
+import Button from '../../Common/Button';
+import LoadingSpinner from '../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../NotificationTypeSelector';
const messages = defineMessages({
- save: 'Save Changes',
- saving: 'Saving…',
agentenabled: 'Enable Agent',
botUsername: 'Bot Username',
botAvatarUrl: 'Bot Avatar URL',
@@ -20,7 +19,6 @@ const messages = defineMessages({
discordsettingssaved: 'Discord notification settings saved successfully!',
discordsettingsfailed: 'Discord notification settings failed to save.',
testsent: 'Test notification sent!',
- test: 'Test',
notificationtypes: 'Notification Types',
validationUrl: 'You must provide a valid URL',
});
@@ -147,6 +145,7 @@ const NotificationsDiscord: React.FC = () => {
@@ -172,6 +171,7 @@ const NotificationsDiscord: React.FC = () => {
{intl.formatMessage(messages.notificationtypes)}
+ *
@@ -195,7 +195,7 @@ const NotificationsDiscord: React.FC = () => {
testSettings();
}}
>
- {intl.formatMessage(messages.test)}
+ {intl.formatMessage(globalMessages.test)}
@@ -205,8 +205,8 @@ const NotificationsDiscord: React.FC = () => {
disabled={isSubmitting || !isValid}
>
{isSubmitting
- ? intl.formatMessage(messages.saving)
- : intl.formatMessage(messages.save)}
+ ? intl.formatMessage(globalMessages.saving)
+ : intl.formatMessage(globalMessages.save)}
diff --git a/src/components/Settings/Notifications/NotificationsEmail.tsx b/src/components/Settings/Notifications/NotificationsEmail.tsx
index 4419ac8b..04e74323 100644
--- a/src/components/Settings/Notifications/NotificationsEmail.tsx
+++ b/src/components/Settings/Notifications/NotificationsEmail.tsx
@@ -1,22 +1,20 @@
-import React from 'react';
-import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../Common/LoadingSpinner';
-import Button from '../../Common/Button';
-import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
-import * as Yup from 'yup';
+import { Field, Form, Formik } from 'formik';
+import React from 'react';
+import { defineMessages, useIntl } from 'react-intl';
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',
- saving: 'Saving…',
- validationSmtpHostRequired: 'You must provide an SMTP host',
- validationSmtpPortRequired: 'You must provide an SMTP port',
+ validationSmtpHostRequired: 'You must provide a hostname or IP address',
+ validationSmtpPortRequired: 'You must provide a valid port number',
agentenabled: 'Enable Agent',
emailsender: 'Sender Address',
smtpHost: 'SMTP Host',
@@ -26,7 +24,6 @@ const messages = defineMessages({
authPass: 'SMTP Password',
emailsettingssaved: 'Email notification settings saved successfully!',
emailsettingsfailed: 'Email notification settings failed to save.',
- test: 'Test',
testsent: 'Test notification sent!',
allowselfsigned: 'Allow Self-Signed Certificates',
ssldisabletip:
@@ -36,11 +33,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)',
@@ -73,12 +68,16 @@ const NotificationsEmail: React.FC = () => {
emailFrom: Yup.string()
.required(intl.formatMessage(messages.validationEmail))
.email(intl.formatMessage(messages.validationEmail)),
- smtpHost: Yup.string().required(
- intl.formatMessage(messages.validationSmtpHostRequired)
- ),
- smtpPort: Yup.number().required(
- intl.formatMessage(messages.validationSmtpPortRequired)
- ),
+ smtpHost: Yup.string()
+ .required(intl.formatMessage(messages.validationSmtpHostRequired))
+ .matches(
+ // eslint-disable-next-line
+ /^(([a-z]|\d|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*)?([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])$/i,
+ intl.formatMessage(messages.validationSmtpHostRequired)
+ ),
+ smtpPort: Yup.number()
+ .typeError(intl.formatMessage(messages.validationSmtpPortRequired))
+ .required(intl.formatMessage(messages.validationSmtpPortRequired)),
});
if (!data && !error) {
@@ -205,6 +204,7 @@ const NotificationsEmail: React.FC = () => {
@@ -238,6 +238,7 @@ const NotificationsEmail: React.FC = () => {
@@ -256,6 +257,7 @@ const NotificationsEmail: React.FC = () => {
{
{intl.formatMessage(messages.notificationtypes)}
+ *
@@ -401,7 +404,7 @@ const NotificationsEmail: React.FC = () => {
testSettings();
}}
>
- {intl.formatMessage(messages.test)}
+ {intl.formatMessage(globalMessages.test)}
@@ -411,8 +414,8 @@ const NotificationsEmail: React.FC = () => {
disabled={isSubmitting || !isValid}
>
{isSubmitting
- ? intl.formatMessage(messages.saving)
- : intl.formatMessage(messages.save)}
+ ? intl.formatMessage(globalMessages.saving)
+ : intl.formatMessage(globalMessages.save)}
diff --git a/src/components/Settings/Notifications/NotificationsPushbullet/index.tsx b/src/components/Settings/Notifications/NotificationsPushbullet/index.tsx
index 329d4361..f5e940fb 100644
--- a/src/components/Settings/Notifications/NotificationsPushbullet/index.tsx
+++ b/src/components/Settings/Notifications/NotificationsPushbullet/index.tsx
@@ -1,18 +1,17 @@
-import React from 'react';
-import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../../Common/LoadingSpinner';
-import Button from '../../../Common/Button';
-import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
-import * as Yup from 'yup';
+import { Field, Form, Formik } from 'formik';
+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 globalMessages from '../../../../i18n/globalMessages';
import Alert from '../../../Common/Alert';
+import Button from '../../../Common/Button';
+import LoadingSpinner from '../../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../../NotificationTypeSelector';
const messages = defineMessages({
- save: 'Save Changes',
- saving: 'Saving…',
agentEnabled: 'Enable Agent',
accessToken: 'Access Token',
validationAccessTokenRequired: 'You must provide an access token',
@@ -20,7 +19,6 @@ const messages = defineMessages({
'Pushbullet notification settings saved successfully!',
pushbulletSettingsFailed: 'Pushbullet notification settings failed to save.',
testSent: 'Test notification sent!',
- test: 'Test',
settingUpPushbullet: 'Setting Up Pushbullet Notifications',
settingUpPushbulletDescription:
'To configure Pushbullet notifications, you will need to create an access token and enter it below.',
@@ -124,6 +122,7 @@ const NotificationsPushbullet: React.FC = () => {
@@ -147,6 +146,7 @@ const NotificationsPushbullet: React.FC = () => {
{intl.formatMessage(messages.notificationTypes)}
+ *
@@ -172,7 +172,7 @@ const NotificationsPushbullet: React.FC = () => {
testSettings();
}}
>
- {intl.formatMessage(messages.test)}
+ {intl.formatMessage(globalMessages.test)}
@@ -182,8 +182,8 @@ const NotificationsPushbullet: React.FC = () => {
disabled={isSubmitting || !isValid}
>
{isSubmitting
- ? intl.formatMessage(messages.saving)
- : intl.formatMessage(messages.save)}
+ ? intl.formatMessage(globalMessages.saving)
+ : intl.formatMessage(globalMessages.save)}
diff --git a/src/components/Settings/Notifications/NotificationsPushover/index.tsx b/src/components/Settings/Notifications/NotificationsPushover/index.tsx
index e1de7cc8..8b07b900 100644
--- a/src/components/Settings/Notifications/NotificationsPushover/index.tsx
+++ b/src/components/Settings/Notifications/NotificationsPushover/index.tsx
@@ -1,18 +1,17 @@
-import React from 'react';
-import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../../Common/LoadingSpinner';
-import Button from '../../../Common/Button';
-import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
-import * as Yup from 'yup';
+import { Field, Form, Formik } from 'formik';
+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 globalMessages from '../../../../i18n/globalMessages';
import Alert from '../../../Common/Alert';
+import Button from '../../../Common/Button';
+import LoadingSpinner from '../../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../../NotificationTypeSelector';
const messages = defineMessages({
- save: 'Save Changes',
- saving: 'Saving…',
agentenabled: 'Enable Agent',
accessToken: 'Application/API Token',
userToken: 'User Key',
@@ -21,12 +20,9 @@ const messages = defineMessages({
pushoversettingssaved: 'Pushover notification settings saved successfully!',
pushoversettingsfailed: 'Pushover notification settings failed to save.',
testsent: 'Test notification sent!',
- 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',
});
@@ -151,6 +147,7 @@ const NotificationsPushover: React.FC = () => {
@@ -169,6 +166,7 @@ const NotificationsPushover: React.FC = () => {
@@ -192,6 +190,7 @@ const NotificationsPushover: React.FC = () => {
{intl.formatMessage(messages.notificationtypes)}
+ *
@@ -217,7 +216,7 @@ const NotificationsPushover: React.FC = () => {
testSettings();
}}
>
- {intl.formatMessage(messages.test)}
+ {intl.formatMessage(globalMessages.test)}
@@ -227,8 +226,8 @@ const NotificationsPushover: React.FC = () => {
disabled={isSubmitting || !isValid}
>
{isSubmitting
- ? intl.formatMessage(messages.saving)
- : intl.formatMessage(messages.save)}
+ ? intl.formatMessage(globalMessages.saving)
+ : intl.formatMessage(globalMessages.save)}
diff --git a/src/components/Settings/Notifications/NotificationsSlack/index.tsx b/src/components/Settings/Notifications/NotificationsSlack/index.tsx
index a5bb0e06..158059ce 100644
--- a/src/components/Settings/Notifications/NotificationsSlack/index.tsx
+++ b/src/components/Settings/Notifications/NotificationsSlack/index.tsx
@@ -1,24 +1,22 @@
-import React from 'react';
-import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../../Common/LoadingSpinner';
-import Button from '../../../Common/Button';
-import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
-import * as Yup from 'yup';
+import { Field, Form, Formik } from 'formik';
+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 globalMessages from '../../../../i18n/globalMessages';
import Alert from '../../../Common/Alert';
+import Button from '../../../Common/Button';
+import LoadingSpinner from '../../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../../NotificationTypeSelector';
const messages = defineMessages({
- save: 'Save Changes',
- saving: 'Saving…',
agentenabled: 'Enable Agent',
webhookUrl: 'Webhook URL',
slacksettingssaved: 'Slack notification settings saved successfully!',
slacksettingsfailed: 'Slack notification settings failed to save.',
testsent: 'Test notification sent!',
- test: 'Test',
settingupslack: 'Setting Up Slack Notifications',
settingupslackDescription:
'To configure Slack notifications, you will need to create an Incoming Webhook integration and enter the webhook URL below.',
@@ -127,6 +125,7 @@ const NotificationsSlack: React.FC = () => {
@@ -145,6 +144,7 @@ const NotificationsSlack: React.FC = () => {
{intl.formatMessage(messages.notificationtypes)}
+ *
@@ -170,7 +170,7 @@ const NotificationsSlack: React.FC = () => {
testSettings();
}}
>
- {intl.formatMessage(messages.test)}
+ {intl.formatMessage(globalMessages.test)}
@@ -180,8 +180,8 @@ const NotificationsSlack: React.FC = () => {
disabled={isSubmitting || !isValid}
>
{isSubmitting
- ? intl.formatMessage(messages.saving)
- : intl.formatMessage(messages.save)}
+ ? intl.formatMessage(globalMessages.saving)
+ : intl.formatMessage(globalMessages.save)}
diff --git a/src/components/Settings/Notifications/NotificationsTelegram.tsx b/src/components/Settings/Notifications/NotificationsTelegram.tsx
index 8a58416d..00e8e443 100644
--- a/src/components/Settings/Notifications/NotificationsTelegram.tsx
+++ b/src/components/Settings/Notifications/NotificationsTelegram.tsx
@@ -1,18 +1,17 @@
-import React from 'react';
-import { Field, Form, Formik } from 'formik';
-import useSWR from 'swr';
-import LoadingSpinner from '../../Common/LoadingSpinner';
-import Button from '../../Common/Button';
-import { defineMessages, useIntl } from 'react-intl';
import axios from 'axios';
-import * as Yup from 'yup';
+import { Field, Form, Formik } from 'formik';
+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 globalMessages from '../../../i18n/globalMessages';
import Alert from '../../Common/Alert';
+import Button from '../../Common/Button';
+import LoadingSpinner from '../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../NotificationTypeSelector';
const messages = defineMessages({
- save: 'Save Changes',
- saving: 'Saving…',
agentenabled: 'Enable Agent',
botUsername: 'Bot Username',
botAPI: 'Bot Authentication Token',
@@ -22,12 +21,9 @@ const messages = defineMessages({
telegramsettingssaved: 'Telegram notification settings saved successfully!',
telegramsettingsfailed: 'Telegram notification settings failed to save.',
testsent: 'Test notification sent!',
- 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',
@@ -178,6 +174,7 @@ const NotificationsTelegram: React.FC = () => {
@@ -196,6 +193,7 @@ const NotificationsTelegram: React.FC = () => {
@@ -234,6 +232,7 @@ const NotificationsTelegram: React.FC = () => {
{intl.formatMessage(messages.notificationtypes)}
+ *
@@ -259,7 +258,7 @@ const NotificationsTelegram: React.FC = () => {
testSettings();
}}
>
- {intl.formatMessage(messages.test)}
+ {intl.formatMessage(globalMessages.test)}
@@ -269,8 +268,8 @@ const NotificationsTelegram: React.FC = () => {
disabled={isSubmitting || !isValid}
>
{isSubmitting
- ? intl.formatMessage(messages.saving)
- : intl.formatMessage(messages.save)}
+ ? intl.formatMessage(globalMessages.saving)
+ : intl.formatMessage(globalMessages.save)}
diff --git a/src/components/Settings/Notifications/NotificationsWebhook/index.tsx b/src/components/Settings/Notifications/NotificationsWebhook/index.tsx
index 133a10df..ab71a204 100644
--- a/src/components/Settings/Notifications/NotificationsWebhook/index.tsx
+++ b/src/components/Settings/Notifications/NotificationsWebhook/index.tsx
@@ -1,13 +1,14 @@
-import React from 'react';
+import axios from 'axios';
import { Field, Form, Formik } from 'formik';
import dynamic from 'next/dynamic';
-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 globalMessages from '../../../../i18n/globalMessages';
+import Button from '../../../Common/Button';
+import LoadingSpinner from '../../../Common/LoadingSpinner';
import NotificationTypeSelector from '../../../NotificationTypeSelector';
const JSONEditor = dynamic(() => import('../../../JSONEditor'), { ssr: false });
@@ -35,8 +36,6 @@ const defaultPayload = {
};
const messages = defineMessages({
- save: 'Save Changes',
- saving: 'Saving…',
agentenabled: 'Enable Agent',
webhookUrl: 'Webhook URL',
authheader: 'Authorization Header',
@@ -44,7 +43,6 @@ const messages = defineMessages({
webhooksettingssaved: 'Webhook notification settings saved successfully!',
webhooksettingsfailed: 'Webhook notification settings failed to save.',
testsent: 'Test notification sent!',
- test: 'Test',
notificationtypes: 'Notification Types',
resetPayload: 'Reset to Default',
resetPayloadSuccess: 'JSON payload reset successfully!',
@@ -173,6 +171,7 @@ const NotificationsWebhook: React.FC = () => {
@@ -196,6 +195,7 @@ const NotificationsWebhook: React.FC = () => {
@@ -265,6 +265,7 @@ const NotificationsWebhook: React.FC = () => {
{intl.formatMessage(messages.notificationtypes)}
+ *
@@ -292,7 +293,7 @@ const NotificationsWebhook: React.FC = () => {
testSettings();
}}
>
- {intl.formatMessage(messages.test)}
+ {intl.formatMessage(globalMessages.test)}
@@ -302,8 +303,8 @@ const NotificationsWebhook: React.FC = () => {
disabled={isSubmitting || !isValid}
>
{isSubmitting
- ? intl.formatMessage(messages.saving)
- : intl.formatMessage(messages.save)}
+ ? intl.formatMessage(globalMessages.saving)
+ : intl.formatMessage(globalMessages.save)}
diff --git a/src/components/Settings/RadarrModal/index.tsx b/src/components/Settings/RadarrModal/index.tsx
index ef27a657..1cc31a02 100644
--- a/src/components/Settings/RadarrModal/index.tsx
+++ b/src/components/Settings/RadarrModal/index.tsx
@@ -1,36 +1,34 @@
-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 globalMessages from '../../../i18n/globalMessages';
+import Modal from '../../Common/Modal';
+import Transition from '../../Transition';
const messages = defineMessages({
createradarr: 'Add New Radarr Server',
editradarr: 'Edit Radarr Server',
validationNameRequired: 'You must provide a server name',
- validationHostnameRequired: 'You must provide a hostname/IP',
- validationPortRequired: 'You must provide a port',
+ validationHostnameRequired: 'You must provide a hostname or IP address',
+ 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',
- toastRadarrTestSuccess: 'Radarr connection established!',
+ 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…',
- save: 'Save Changes',
add: 'Add Server',
- test: 'Test',
- testing: 'Testing…',
defaultserver: 'Default Server',
servername: 'Server Name',
servernamePlaceholder: 'A Radarr Server',
- hostname: 'Hostname',
+ hostname: 'Hostname or IP Address',
port: 'Port',
- ssl: 'SSL',
+ ssl: 'Enable SSL',
apiKey: 'API Key',
apiKeyPlaceholder: 'Your Radarr API key',
baseUrl: 'Base URL',
@@ -91,12 +89,16 @@ const RadarrModal: React.FC = ({
name: Yup.string().required(
intl.formatMessage(messages.validationNameRequired)
),
- hostname: Yup.string().required(
- intl.formatMessage(messages.validationHostnameRequired)
- ),
- port: Yup.number().required(
- intl.formatMessage(messages.validationPortRequired)
- ),
+ hostname: Yup.string()
+ .required(intl.formatMessage(messages.validationHostnameRequired))
+ .matches(
+ // eslint-disable-next-line
+ /^(([a-z]|\d|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*)?([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])$/i,
+ intl.formatMessage(messages.validationHostnameRequired)
+ ),
+ port: Yup.number()
+ .typeError(intl.formatMessage(messages.validationPortRequired))
+ .required(intl.formatMessage(messages.validationPortRequired)),
apiKey: Yup.string().required(
intl.formatMessage(messages.validationApiKeyRequired)
),
@@ -289,16 +291,16 @@ const RadarrModal: React.FC = ({
okButtonType="primary"
okText={
isSubmitting
- ? intl.formatMessage(messages.saving)
+ ? intl.formatMessage(globalMessages.saving)
: radarr
- ? intl.formatMessage(messages.save)
+ ? intl.formatMessage(globalMessages.save)
: intl.formatMessage(messages.add)
}
secondaryButtonType="warning"
secondaryText={
isTesting
- ? intl.formatMessage(messages.testing)
- : intl.formatMessage(messages.test)
+ ? intl.formatMessage(globalMessages.testing)
+ : intl.formatMessage(globalMessages.test)
}
onSecondary={() => {
if (values.apiKey && values.hostname && values.port) {
@@ -312,7 +314,11 @@ const RadarrModal: React.FC = ({
}
}}
secondaryDisabled={
- !values.apiKey || !values.hostname || !values.port || isTesting
+ !values.apiKey ||
+ !values.hostname ||
+ !values.port ||
+ isTesting ||
+ isSubmitting
}
okDisabled={!isValidated || isSubmitting || isTesting || !isValid}
onOk={() => handleSubmit()}
diff --git a/src/components/Settings/SettingsAbout/Releases/index.tsx b/src/components/Settings/SettingsAbout/Releases/index.tsx
index f234c301..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',
@@ -18,9 +18,9 @@ const messages = defineMessages({
latestversion: 'Latest',
currentversion: 'Current Version',
viewchangelog: 'View Changelog',
- runningDevelop: 'You are running a develop version of Overseerr!',
+ runningDevelop: 'Development Version',
runningDevelopMessage:
- 'The changes in your version will not be available below. Please see the GitHub repository for latest updates.',
+ '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 =
@@ -106,7 +106,7 @@ const Release: React.FC = ({
(new Date(release.created_at).getTime() - Date.now()) / 1000
)}
updateIntervalInSeconds={1}
- numeric="always"
+ numeric="auto"
/>
{release.name}
@@ -161,6 +161,9 @@ const Releases: React.FC = ({ currentVersion }) => {
{currentVersion.startsWith('develop-') && (
{intl.formatMessage(messages.runningDevelopMessage, {
+ code: function code(msg) {
+ return {msg};
+ },
GithubLink: function GithubLink(msg) {
return (
{
return (
<>
+
- {data.version}
+ {data.version}
-
+ {intl.formatNumber(data.totalMediaItems)}
-
+ {intl.formatNumber(data.totalRequests)}
{data.tz && (
- {data.tz}
+ {data.tz}
)}
@@ -86,7 +94,7 @@ const SettingsAbout: React.FC = () => {
rel="noreferrer"
className="text-indigo-500 hover:underline"
>
- {intl.formatMessage(messages.clickheretojoindiscord)}
+ https://discord.gg/PkCWJSeCk7
diff --git a/src/components/Settings/SettingsJobsCache/index.tsx b/src/components/Settings/SettingsJobsCache/index.tsx
index b327a187..46d0cd9d 100644
--- a/src/components/Settings/SettingsJobsCache/index.tsx
+++ b/src/components/Settings/SettingsJobsCache/index.tsx
@@ -1,27 +1,28 @@
-import React from 'react';
-import useSWR from 'swr';
-import LoadingSpinner from '../../Common/LoadingSpinner';
-import {
- FormattedRelativeTime,
- defineMessages,
- useIntl,
- MessageDescriptor,
-} from 'react-intl';
-import Button from '../../Common/Button';
-import Table from '../../Common/Table';
-import Spinner from '../../../assets/spinner.svg';
import axios from 'axios';
+import React from 'react';
+import {
+ defineMessages,
+ FormattedRelativeTime,
+ MessageDescriptor,
+ useIntl,
+} from 'react-intl';
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 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',
@@ -118,6 +119,12 @@ const SettingsJobs: React.FC = () => {
return (
<>
+
{intl.formatMessage(messages.jobs)}
@@ -166,6 +173,7 @@ const SettingsJobs: React.FC = () => {
1000
)}
updateIntervalInSeconds={1}
+ numeric="auto"
/>
diff --git a/src/components/Settings/SettingsLayout.tsx b/src/components/Settings/SettingsLayout.tsx
index 6ed4886f..dd13cfe4 100644
--- a/src/components/Settings/SettingsLayout.tsx
+++ b/src/components/Settings/SettingsLayout.tsx
@@ -3,10 +3,10 @@ import Link from 'next/link';
import { useRouter } from 'next/router';
import { defineMessages, useIntl } from 'react-intl';
import PageTitle from '../Common/PageTitle';
+import globalMessages from '../../i18n/globalMessages';
const messages = defineMessages({
- settings: 'Settings',
- menuGeneralSettings: 'General Settings',
+ menuGeneralSettings: 'General',
menuUsers: 'Users',
menuPlexSettings: 'Plex',
menuServices: 'Services',
@@ -99,7 +99,7 @@ const SettingsLayout: React.FC = ({ children }) => {
};
return (
<>
-
+
|