From e393b53b292644b413637b2ef3ede35437caa81e Mon Sep 17 00:00:00 2001 From: TheCatLady <52870424+TheCatLady@users.noreply.github.com> Date: Wed, 24 Mar 2021 08:45:07 -0400 Subject: [PATCH] refactor(lang): use global strings where appropriate and remove unused strings (#1265) --- src/components/CollectionDetails/index.tsx | 12 +- src/components/Common/ListView/index.tsx | 13 +- src/components/MovieDetails/index.tsx | 9 +- src/components/PlexLoginButton/index.tsx | 6 +- src/components/QuotaSelector/index.tsx | 4 +- src/components/RequestButton/index.tsx | 7 +- src/components/RequestCard/index.tsx | 28 ++-- .../RequestList/RequestItem/index.tsx | 38 +++-- src/components/RequestList/index.tsx | 42 +++--- .../RequestModal/AdvancedRequester/index.tsx | 18 +-- .../RequestModal/MovieRequestModal.tsx | 39 +++--- .../RequestModal/QuotaDisplay/index.tsx | 21 ++- .../RequestModal/SearchByNameModal/index.tsx | 4 +- .../RequestModal/TvRequestModal.tsx | 34 +++-- .../Notifications/NotificationsDiscord.tsx | 22 ++- .../Notifications/NotificationsEmail.tsx | 9 +- .../NotificationsPushbullet/index.tsx | 22 ++- .../NotificationsPushover/index.tsx | 10 +- .../NotificationsSlack/index.tsx | 22 ++- .../Notifications/NotificationsTelegram.tsx | 10 +- .../NotificationsWebhook/index.tsx | 22 ++- src/components/Settings/RadarrModal/index.tsx | 13 +- .../Settings/SettingsLogs/index.tsx | 16 +-- src/components/Settings/SettingsMain.tsx | 6 +- .../Settings/SettingsNotifications.tsx | 24 ++-- src/components/Settings/SettingsPlex.tsx | 6 +- src/components/Settings/SettingsServices.tsx | 22 +-- .../Settings/SettingsUsers/index.tsx | 8 +- src/components/Settings/SonarrModal/index.tsx | 27 ++-- src/components/Slider/index.tsx | 11 +- src/components/TitleCard/index.tsx | 27 ++-- src/components/TvDetails/index.tsx | 6 +- src/components/UserList/BulkEditModal.tsx | 13 +- src/components/UserList/index.tsx | 19 +-- .../UserGeneralSettings/index.tsx | 6 +- .../UserNotificationSettings/index.tsx | 6 +- .../UserSettings/UserPasswordChange/index.tsx | 12 +- .../UserSettings/UserPermissions/index.tsx | 18 +-- .../UserProfile/UserSettings/index.tsx | 6 +- src/i18n/globalMessages.ts | 22 +++ src/i18n/locale/en.json | 132 ++++-------------- 41 files changed, 337 insertions(+), 455 deletions(-) diff --git a/src/components/CollectionDetails/index.tsx b/src/components/CollectionDetails/index.tsx index b58bc5ac..5f33c1c2 100644 --- a/src/components/CollectionDetails/index.tsx +++ b/src/components/CollectionDetails/index.tsx @@ -27,14 +27,10 @@ import Transition from '../Transition'; const messages = defineMessages({ overviewunavailable: 'Overview unavailable.', overview: 'Overview', - movies: 'Movies', numberofmovies: '{count} Movies', - requesting: 'Requesting…', - request: 'Request', requestcollection: 'Request Collection', requestswillbecreated: 'The following titles will have requests created for them:', - request4k: 'Request 4K', requestcollection4k: 'Request Collection in 4K', requestswillbecreated4k: 'The following titles will have 4K requests created for them:', @@ -242,8 +238,10 @@ const CollectionDetails: React.FC = ({ onOk={() => requestBundle()} okText={ isRequesting - ? intl.formatMessage(messages.requesting) - : intl.formatMessage(is4k ? messages.request4k : messages.request) + ? intl.formatMessage(globalMessages.requesting) + : intl.formatMessage( + is4k ? globalMessages.request4k : globalMessages.request + ) } okDisabled={isRequesting} okButtonType="primary" @@ -431,7 +429,7 @@ const CollectionDetails: React.FC = ({
- {intl.formatMessage(messages.movies)} + {intl.formatMessage(globalMessages.movies)}
= ({ <> {isEmpty && (
- {intl.formatMessage(messages.noresults)} + {intl.formatMessage(globalMessages.noresults)}
)}
    diff --git a/src/components/MovieDetails/index.tsx b/src/components/MovieDetails/index.tsx index 3ab99f66..9f57d3a9 100644 --- a/src/components/MovieDetails/index.tsx +++ b/src/components/MovieDetails/index.tsx @@ -36,7 +36,6 @@ import StatusBadge from '../StatusBadge'; const messages = defineMessages({ releasedate: 'Release Date', - status: 'Status', revenue: 'Revenue', budget: 'Budget', watchtrailer: 'Watch Trailer', @@ -55,8 +54,6 @@ const messages = defineMessages({ '* 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.', studio: '{studioCount, plural, one {Studio} other {Studios}}', viewfullcrew: 'View Full Crew', - view: 'View', - areyousure: 'Are you sure?', openradarr: 'Open Movie in Radarr', openradarr4k: 'Open Movie in 4K Radarr', downloadstatus: 'Download Status', @@ -382,7 +379,7 @@ const MovieDetails: React.FC = ({ movie }) => {
    deleteMedia()} - confirmText={intl.formatMessage(messages.areyousure)} + confirmText={intl.formatMessage(globalMessages.areyousure)} className="w-full" > {intl.formatMessage(messages.manageModalClearMedia)} @@ -557,7 +554,7 @@ const MovieDetails: React.FC = ({ movie }) => {
    {data.collection.name}
    @@ -605,7 +602,7 @@ const MovieDetails: React.FC = ({ movie }) => { )}
    - {intl.formatMessage(messages.status)} + {intl.formatMessage(globalMessages.status)} {data.status}
    {data.releaseDate && ( diff --git a/src/components/PlexLoginButton/index.tsx b/src/components/PlexLoginButton/index.tsx index c97ee0c4..f6bbb5b7 100644 --- a/src/components/PlexLoginButton/index.tsx +++ b/src/components/PlexLoginButton/index.tsx @@ -1,10 +1,10 @@ import React, { useState } from 'react'; -import PlexOAuth from '../../utils/plex'; import { defineMessages, useIntl } from 'react-intl'; +import globalMessages from '../../i18n/globalMessages'; +import PlexOAuth from '../../utils/plex'; const messages = defineMessages({ signinwithplex: 'Sign In', - loading: 'Loading…', signingin: 'Signing in…', }); @@ -49,7 +49,7 @@ const PlexLoginButton: React.FC = ({ className="plex-button" > {loading - ? intl.formatMessage(messages.loading) + ? intl.formatMessage(globalMessages.loading) : isProcessing ? intl.formatMessage(messages.signingin) : intl.formatMessage(messages.signinwithplex)} diff --git a/src/components/QuotaSelector/index.tsx b/src/components/QuotaSelector/index.tsx index 45b610dc..ba270056 100644 --- a/src/components/QuotaSelector/index.tsx +++ b/src/components/QuotaSelector/index.tsx @@ -2,8 +2,8 @@ import React, { useEffect, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; const messages = defineMessages({ - movieRequestLimit: '{quotaLimit} movies per {quotaDays} days', - tvRequestLimit: '{quotaLimit} seasons per {quotaDays} days', + movieRequestLimit: '{quotaLimit} movie(s) per {quotaDays} day(s)', + tvRequestLimit: '{quotaLimit} season(s) per {quotaDays} day(s)', unlimited: 'Unlimited', }); diff --git a/src/components/RequestButton/index.tsx b/src/components/RequestButton/index.tsx index ce386878..2c26c694 100644 --- a/src/components/RequestButton/index.tsx +++ b/src/components/RequestButton/index.tsx @@ -9,14 +9,13 @@ import Media from '../../../server/entity/Media'; import { MediaRequest } from '../../../server/entity/MediaRequest'; import useSettings from '../../hooks/useSettings'; import { Permission, useUser } from '../../hooks/useUser'; +import globalMessages from '../../i18n/globalMessages'; import ButtonWithDropdown from '../Common/ButtonWithDropdown'; import RequestModal from '../RequestModal'; const messages = defineMessages({ viewrequest: 'View Request', viewrequest4k: 'View 4K Request', - request: 'Request', - request4k: 'Request 4K', requestmore: 'Request More', requestmore4k: 'Request More 4K', approverequest: 'Approve Request', @@ -114,7 +113,7 @@ const RequestButton: React.FC = ({ ) { buttons.push({ id: 'request', - text: intl.formatMessage(messages.request), + text: intl.formatMessage(globalMessages.request), action: () => { setShowRequestModal(true); }, @@ -180,7 +179,7 @@ const RequestButton: React.FC = ({ ) { buttons.push({ id: 'request4k', - text: intl.formatMessage(messages.request4k), + text: intl.formatMessage(globalMessages.request4k), action: () => { setShowRequest4kModal(true); }, diff --git a/src/components/RequestCard/index.tsx b/src/components/RequestCard/index.tsx index a9b049d0..c3b780cd 100644 --- a/src/components/RequestCard/index.tsx +++ b/src/components/RequestCard/index.tsx @@ -1,29 +1,27 @@ +import axios from 'axios'; +import Link from 'next/link'; import React, { useContext, useEffect } from 'react'; import { useInView } from 'react-intersection-observer'; -import type { MediaRequest } from '../../../server/entity/MediaRequest'; -import type { TvDetails } from '../../../server/models/Tv'; -import type { MovieDetails } from '../../../server/models/Movie'; +import { defineMessages, useIntl } from 'react-intl'; import useSWR from 'swr'; -import { LanguageContext } from '../../context/LanguageContext'; import { MediaRequestStatus, MediaStatus, } from '../../../server/constants/media'; +import type { MediaRequest } from '../../../server/entity/MediaRequest'; +import type { MovieDetails } from '../../../server/models/Movie'; +import type { TvDetails } from '../../../server/models/Tv'; +import { LanguageContext } from '../../context/LanguageContext'; +import { Permission, useUser } from '../../hooks/useUser'; +import globalMessages from '../../i18n/globalMessages'; +import { withProperties } from '../../utils/typeHelpers'; import Badge from '../Common/Badge'; -import { useUser, Permission } from '../../hooks/useUser'; -import axios from 'axios'; import Button from '../Common/Button'; -import { withProperties } from '../../utils/typeHelpers'; -import Link from 'next/link'; -import { defineMessages, useIntl } from 'react-intl'; -import globalMessages from '../../i18n/globalMessages'; -import StatusBadge from '../StatusBadge'; import CachedImage from '../Common/CachedImage'; +import StatusBadge from '../StatusBadge'; const messages = defineMessages({ - status: 'Status', seasons: '{seasonCount, plural, one {Season} other {Seasons}}', - all: 'All', }); const isMovie = (movie: MovieDetails | TvDetails): movie is MovieDetails => { @@ -156,7 +154,7 @@ const RequestCard: React.FC = ({ request, onTitleData }) => { {title.seasons.filter((season) => season.seasonNumber !== 0) .length === request.seasons.length ? ( - {intl.formatMessage(messages.all)} + {intl.formatMessage(globalMessages.all)} ) : (
    @@ -171,7 +169,7 @@ const RequestCard: React.FC = ({ request, onTitleData }) => { )}
    - {intl.formatMessage(messages.status)} + {intl.formatMessage(globalMessages.status)} {requestData.media[requestData.is4k ? 'status4k' : 'status'] === MediaStatus.UNKNOWN || diff --git a/src/components/RequestList/RequestItem/index.tsx b/src/components/RequestList/RequestItem/index.tsx index c4a31254..6e76f994 100644 --- a/src/components/RequestList/RequestItem/index.tsx +++ b/src/components/RequestList/RequestItem/index.tsx @@ -1,34 +1,30 @@ +import axios from 'axios'; +import Link from 'next/link'; import React, { useContext, useState } from 'react'; import { useInView } from 'react-intersection-observer'; -import type { MediaRequest } from '../../../../server/entity/MediaRequest'; -import { useIntl, FormattedRelativeTime, defineMessages } from 'react-intl'; -import { useUser, Permission } from '../../../hooks/useUser'; -import { LanguageContext } from '../../../context/LanguageContext'; -import type { MovieDetails } from '../../../../server/models/Movie'; -import type { TvDetails } from '../../../../server/models/Tv'; +import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl'; +import { useToasts } from 'react-toast-notifications'; import useSWR from 'swr'; -import Badge from '../../Common/Badge'; -import StatusBadge from '../../StatusBadge'; import { MediaRequestStatus, MediaStatus, } from '../../../../server/constants/media'; -import Button from '../../Common/Button'; -import axios from 'axios'; +import type { MediaRequest } from '../../../../server/entity/MediaRequest'; +import type { MovieDetails } from '../../../../server/models/Movie'; +import type { TvDetails } from '../../../../server/models/Tv'; +import { LanguageContext } from '../../../context/LanguageContext'; +import { Permission, useUser } from '../../../hooks/useUser'; import globalMessages from '../../../i18n/globalMessages'; -import Link from 'next/link'; -import { useToasts } from 'react-toast-notifications'; -import RequestModal from '../../RequestModal'; -import ConfirmButton from '../../Common/ConfirmButton'; +import Badge from '../../Common/Badge'; +import Button from '../../Common/Button'; import CachedImage from '../../Common/CachedImage'; +import ConfirmButton from '../../Common/ConfirmButton'; +import RequestModal from '../../RequestModal'; +import StatusBadge from '../../StatusBadge'; const messages = defineMessages({ seasons: '{seasonCount, plural, one {Season} other {Seasons}}', - all: 'All', - notavailable: 'N/A', failedretry: 'Something went wrong while retrying the request.', - areyousure: 'Are you sure?', - status: 'Status', requested: 'Requested', modified: 'Modified', modifieduserdate: '{date} by {user}', @@ -218,7 +214,7 @@ const RequestItem: React.FC = ({ {title.seasons.filter((season) => season.seasonNumber !== 0) .length === request.seasons.length ? ( - {intl.formatMessage(messages.all)} + {intl.formatMessage(globalMessages.all)} ) : (
    @@ -236,7 +232,7 @@ const RequestItem: React.FC = ({
    - {intl.formatMessage(messages.status)} + {intl.formatMessage(globalMessages.status)} {requestData.media[requestData.is4k ? 'status4k' : 'status'] === MediaStatus.UNKNOWN || @@ -349,7 +345,7 @@ const RequestItem: React.FC = ({ hasPermission(Permission.MANAGE_REQUESTS) && ( deleteRequest()} - confirmText={intl.formatMessage(messages.areyousure)} + confirmText={intl.formatMessage(globalMessages.areyousure)} className="w-full" > {from} to {to} of {total} results', - resultsperpage: 'Display {pageSize} results per page', - next: 'Next', - previous: 'Previous', - filterAll: 'All', - filterPending: 'Pending', - filterApproved: 'Approved', - filterAvailable: 'Available', - filterProcessing: 'Processing', - noresults: 'No results.', showallrequests: 'Show All Requests', sortAdded: 'Request Date', sortModified: 'Last Modified', @@ -114,19 +104,19 @@ const RequestList: React.FC = () => { className="rounded-r-only" >
    @@ -175,7 +165,7 @@ const RequestList: React.FC = () => { {data.results.length === 0 && (
    - {intl.formatMessage(messages.noresults)} + {intl.formatMessage(globalMessages.noresults)} {currentFilter !== 'all' && (
    @@ -197,7 +187,7 @@ const RequestList: React.FC = () => {

    {data.results.length > 0 && - intl.formatMessage(messages.showingresults, { + intl.formatMessage(globalMessages.showingresults, { from: pageIndex * currentPageSize + 1, to: data.results.length < currentPageSize @@ -212,7 +202,7 @@ const RequestList: React.FC = () => {

    - {intl.formatMessage(messages.resultsperpage, { + {intl.formatMessage(globalMessages.resultsperpage, { pageSize: ( { .then(() => window.scrollTo(0, 0)) } > - {intl.formatMessage(messages.previous)} + {intl.formatMessage(globalMessages.previous)}
    diff --git a/src/components/Settings/SettingsMain.tsx b/src/components/Settings/SettingsMain.tsx index a059cf45..70b3fec9 100644 --- a/src/components/Settings/SettingsMain.tsx +++ b/src/components/Settings/SettingsMain.tsx @@ -20,8 +20,6 @@ const messages = defineMessages({ generalsettings: 'General Settings', generalsettingsDescription: 'Configure global and default settings for Overseerr.', - save: 'Save Changes', - saving: 'Saving…', apikey: 'API Key', applicationTitle: 'Application Title', applicationurl: 'Application URL', @@ -423,8 +421,8 @@ const SettingsMain: React.FC = () => { disabled={isSubmitting} > {isSubmitting - ? intl.formatMessage(messages.saving) - : intl.formatMessage(messages.save)} + ? intl.formatMessage(globalMessages.saving) + : intl.formatMessage(globalMessages.save)}
    diff --git a/src/components/Settings/SettingsNotifications.tsx b/src/components/Settings/SettingsNotifications.tsx index ac2416b3..a6893a38 100644 --- a/src/components/Settings/SettingsNotifications.tsx +++ b/src/components/Settings/SettingsNotifications.tsx @@ -1,27 +1,25 @@ +import axios from 'axios'; +import { Field, Form, Formik } from 'formik'; import Link from 'next/link'; import { useRouter } from 'next/router'; import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; +import { useToasts } from 'react-toast-notifications'; +import useSWR from 'swr'; +import Bolt from '../../assets/bolt.svg'; import DiscordLogo from '../../assets/extlogos/discord.svg'; -import SlackLogo from '../../assets/extlogos/slack.svg'; -import TelegramLogo from '../../assets/extlogos/telegram.svg'; import PushbulletLogo from '../../assets/extlogos/pushbullet.svg'; import PushoverLogo from '../../assets/extlogos/pushover.svg'; -import Bolt from '../../assets/bolt.svg'; -import { Field, Form, Formik } from 'formik'; -import useSWR from 'swr'; +import SlackLogo from '../../assets/extlogos/slack.svg'; +import TelegramLogo from '../../assets/extlogos/telegram.svg'; +import globalMessages from '../../i18n/globalMessages'; import Error from '../../pages/_error'; -import LoadingSpinner from '../Common/LoadingSpinner'; -import axios from 'axios'; -import { useToasts } from 'react-toast-notifications'; import Button from '../Common/Button'; +import LoadingSpinner from '../Common/LoadingSpinner'; import PageTitle from '../Common/PageTitle'; -import globalMessages from '../../i18n/globalMessages'; const messages = defineMessages({ notifications: 'Notifications', - save: 'Save Changes', - saving: 'Saving…', notificationsettings: 'Notification Settings', notificationsettingsDescription: 'Configure global notification settings. The options below will apply to all notification agents.', @@ -248,8 +246,8 @@ const SettingsNotifications: React.FC = ({ children }) => { disabled={isSubmitting} > {isSubmitting - ? intl.formatMessage(messages.saving) - : intl.formatMessage(messages.save)} + ? intl.formatMessage(globalMessages.saving) + : intl.formatMessage(globalMessages.save)}
    diff --git a/src/components/Settings/SettingsPlex.tsx b/src/components/Settings/SettingsPlex.tsx index 2e799fba..b52c6af6 100644 --- a/src/components/Settings/SettingsPlex.tsx +++ b/src/components/Settings/SettingsPlex.tsx @@ -45,8 +45,6 @@ const messages = defineMessages({ port: 'Port', enablessl: 'Enable SSL', timeout: 'Timeout', - save: 'Save Changes', - saving: 'Saving…', plexlibraries: 'Plex Libraries', plexlibrariesDescription: 'The libraries Overseerr scans for titles. Set up and save your Plex connection settings, then click the button below if no libraries are listed.', @@ -538,8 +536,8 @@ const SettingsPlex: React.FC = ({ onComplete }) => { disabled={isSubmitting} > {isSubmitting - ? intl.formatMessage(messages.saving) - : intl.formatMessage(messages.save)} + ? intl.formatMessage(globalMessages.saving) + : intl.formatMessage(globalMessages.save)}
    diff --git a/src/components/Settings/SettingsServices.tsx b/src/components/Settings/SettingsServices.tsx index 28b4ccde..d47eb275 100644 --- a/src/components/Settings/SettingsServices.tsx +++ b/src/components/Settings/SettingsServices.tsx @@ -1,21 +1,21 @@ +import axios from 'axios'; import React, { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import Badge from '../Common/Badge'; -import Button from '../Common/Button'; import useSWR from 'swr'; import type { RadarrSettings, SonarrSettings, } from '../../../server/lib/settings'; +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 RadarrModal from './RadarrModal'; import Modal from '../Common/Modal'; +import PageTitle from '../Common/PageTitle'; import Transition from '../Transition'; -import axios from 'axios'; +import RadarrModal from './RadarrModal'; import SonarrModal from './SonarrModal'; -import Alert from '../Common/Alert'; -import PageTitle from '../Common/PageTitle'; -import globalMessages from '../../i18n/globalMessages'; const messages = defineMessages({ services: 'Services', @@ -26,8 +26,6 @@ const messages = defineMessages({ sonarrSettingsDescription: 'Configure your Sonarr connection below. You can have multiple Sonarr configurations, but only two can be active as defaults at any time (one for standard HD and one for 4K). Administrators can override the server which is used for new requests.', deleteserverconfirm: 'Are you sure you want to delete this server?', - edit: 'Edit', - delete: 'Delete', ssl: 'SSL', default: 'Default', default4k: 'Default 4K', @@ -139,7 +137,9 @@ const ServerInstance: React.FC = ({ > - {intl.formatMessage(messages.edit)} + + {intl.formatMessage(globalMessages.edit)} +
    @@ -160,7 +160,7 @@ const ServerInstance: React.FC = ({ /> - {intl.formatMessage(messages.delete)} + {intl.formatMessage(globalMessages.delete)}
    diff --git a/src/components/Settings/SettingsUsers/index.tsx b/src/components/Settings/SettingsUsers/index.tsx index cd133dc3..c933a414 100644 --- a/src/components/Settings/SettingsUsers/index.tsx +++ b/src/components/Settings/SettingsUsers/index.tsx @@ -16,15 +16,11 @@ const messages = defineMessages({ users: 'Users', userSettings: 'User Settings', userSettingsDescription: 'Configure global and default user settings.', - save: 'Save Changes', - saving: 'Saving…', toastSettingsSuccess: 'User settings saved successfully!', toastSettingsFailure: 'Something went wrong while saving settings.', localLogin: 'Enable Local Sign-In', movieRequestLimitLabel: 'Global Movie Request Limit', - movieRequestLimit: '{quotaLimit} movies per {quotaDays} days', tvRequestLimitLabel: 'Global Series Request Limit', - tvRequestLimit: '{quotaLimit} seasons per {quotaDays} days', defaultPermissions: 'Default Permissions', }); @@ -173,8 +169,8 @@ const SettingsUsers: React.FC = () => { disabled={isSubmitting} > {isSubmitting - ? intl.formatMessage(messages.saving) - : intl.formatMessage(messages.save)} + ? intl.formatMessage(globalMessages.saving) + : intl.formatMessage(globalMessages.save)}
    diff --git a/src/components/Settings/SonarrModal/index.tsx b/src/components/Settings/SonarrModal/index.tsx index da66faf5..f3bf6795 100644 --- a/src/components/Settings/SonarrModal/index.tsx +++ b/src/components/Settings/SonarrModal/index.tsx @@ -1,12 +1,13 @@ -import React, { useState, useEffect, useCallback, useRef } from 'react'; -import Transition from '../../Transition'; -import Modal from '../../Common/Modal'; -import { Formik, Field } from 'formik'; -import type { SonarrSettings } from '../../../../server/lib/settings'; -import * as Yup from 'yup'; import axios from 'axios'; +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 { useIntl, defineMessages } from 'react-intl'; +import * as Yup from 'yup'; +import type { SonarrSettings } from '../../../../server/lib/settings'; +import globalMessages from '../../../i18n/globalMessages'; +import Modal from '../../Common/Modal'; +import Transition from '../../Transition'; const messages = defineMessages({ createsonarr: 'Add New Sonarr Server', @@ -20,11 +21,7 @@ const messages = defineMessages({ validationLanguageProfileRequired: 'You must select a language profile', toastSonarrTestSuccess: 'Sonarr connection established successfully!', toastSonarrTestFailure: 'Failed to connect to Sonarr.', - saving: 'Saving…', - save: 'Save Changes', add: 'Add Server', - test: 'Test', - testing: 'Testing…', defaultserver: 'Default Server', servername: 'Server Name', servernamePlaceholder: 'A Sonarr Server', @@ -322,16 +319,16 @@ const SonarrModal: React.FC = ({ okButtonType="primary" okText={ isSubmitting - ? intl.formatMessage(messages.saving) + ? intl.formatMessage(globalMessages.saving) : sonarr - ? 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) { diff --git a/src/components/Slider/index.tsx b/src/components/Slider/index.tsx index 787c4ff4..349065d1 100644 --- a/src/components/Slider/index.tsx +++ b/src/components/Slider/index.tsx @@ -1,18 +1,15 @@ import { debounce } from 'lodash'; import React, { + ReactNode, useCallback, useEffect, useRef, useState, - ReactNode, } from 'react'; +import { useIntl } from 'react-intl'; import { useSpring } from 'react-spring'; +import globalMessages from '../../i18n/globalMessages'; import TitleCard from '../TitleCard'; -import { defineMessages, useIntl } from 'react-intl'; - -const messages = defineMessages({ - noresults: 'No results.', -}); interface SliderProps { sliderKey: string; @@ -233,7 +230,7 @@ const Slider: React.FC = ({
    {emptyMessage ? emptyMessage - : intl.formatMessage(messages.noresults)} + : intl.formatMessage(globalMessages.noresults)}
    )}
    diff --git a/src/components/TitleCard/index.tsx b/src/components/TitleCard/index.tsx index eba7c661..9d34c87d 100644 --- a/src/components/TitleCard/index.tsx +++ b/src/components/TitleCard/index.tsx @@ -1,22 +1,17 @@ -import React, { useState, useCallback, useEffect } from 'react'; -import type { MediaType } from '../../../server/models/Search'; -import { withProperties } from '../../utils/typeHelpers'; -import Transition from '../Transition'; -import Placeholder from './Placeholder'; import Link from 'next/link'; +import React, { useCallback, useEffect, useState } from 'react'; +import { useIntl } from 'react-intl'; import { MediaStatus } from '../../../server/constants/media'; -import RequestModal from '../RequestModal'; -import { defineMessages, useIntl } from 'react-intl'; +import type { MediaType } from '../../../server/models/Search'; +import Spinner from '../../assets/spinner.svg'; import { useIsTouch } from '../../hooks/useIsTouch'; +import { Permission, useUser } from '../../hooks/useUser'; import globalMessages from '../../i18n/globalMessages'; -import Spinner from '../../assets/spinner.svg'; -import { useUser, Permission } from '../../hooks/useUser'; +import { withProperties } from '../../utils/typeHelpers'; import CachedImage from '../Common/CachedImage'; - -const messages = defineMessages({ - movie: 'Movie', - tvshow: 'Series', -}); +import RequestModal from '../RequestModal'; +import Transition from '../Transition'; +import Placeholder from './Placeholder'; interface TitleCardProps { id: number; @@ -125,8 +120,8 @@ const TitleCard: React.FC = ({ >
    {mediaType === 'movie' - ? intl.formatMessage(messages.movie) - : intl.formatMessage(messages.tvshow)} + ? intl.formatMessage(globalMessages.movie) + : intl.formatMessage(globalMessages.tvshow)}
    diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx index 3402eeb6..2d23edd3 100644 --- a/src/components/TvDetails/index.tsx +++ b/src/components/TvDetails/index.tsx @@ -40,7 +40,6 @@ import StatusBadge from '../StatusBadge'; const messages = defineMessages({ firstAirDate: 'First Air Date', nextAirDate: 'Next Air Date', - status: 'Status', originallanguage: 'Original Language', overview: 'Overview', cast: 'Cast', @@ -58,7 +57,6 @@ const messages = defineMessages({ anime: 'Anime', network: '{networkCount, plural, one {Network} other {Networks}}', viewfullcrew: 'View Full Crew', - areyousure: 'Are you sure?', opensonarr: 'Open Series in Sonarr', opensonarr4k: 'Open Series in 4K Sonarr', downloadstatus: 'Download Status', @@ -420,7 +418,7 @@ const TvDetails: React.FC = ({ tv }) => {
    deleteMedia()} - confirmText={intl.formatMessage(messages.areyousure)} + confirmText={intl.formatMessage(globalMessages.areyousure)} className="w-full" > {intl.formatMessage(messages.manageModalClearMedia)} @@ -628,7 +626,7 @@ const TvDetails: React.FC = ({ tv }) => {
    )}
    - {intl.formatMessage(messages.status)} + {intl.formatMessage(globalMessages.status)} {data.status}
    {data.firstAirDate && ( diff --git a/src/components/UserList/BulkEditModal.tsx b/src/components/UserList/BulkEditModal.tsx index 29866907..96e80524 100644 --- a/src/components/UserList/BulkEditModal.tsx +++ b/src/components/UserList/BulkEditModal.tsx @@ -1,10 +1,11 @@ +import axios from 'axios'; import React, { useEffect, useState } from 'react'; -import PermissionEdit from '../PermissionEdit'; -import Modal from '../Common/Modal'; -import { User, useUser } from '../../hooks/useUser'; import { defineMessages, useIntl } from 'react-intl'; -import axios from 'axios'; import { useToasts } from 'react-toast-notifications'; +import { User, useUser } from '../../hooks/useUser'; +import globalMessages from '../../i18n/globalMessages'; +import Modal from '../Common/Modal'; +import PermissionEdit from '../PermissionEdit'; interface BulkEditProps { selectedUserIds: number[]; @@ -16,8 +17,6 @@ interface BulkEditProps { const messages = defineMessages({ userssaved: 'User permissions saved successfully!', - save: 'Save Changes', - saving: 'Saving…', userfail: 'Something went wrong while saving user permissions.', edituser: 'Edit User Permissions', }); @@ -89,7 +88,7 @@ const BulkEditModal: React.FC = ({ updateUsers(); }} okDisabled={isSaving} - okText={intl.formatMessage(messages.save)} + okText={intl.formatMessage(globalMessages.save)} onCancel={onCancel} >
    diff --git a/src/components/UserList/index.tsx b/src/components/UserList/index.tsx index 6e1a781a..f8e6aff6 100644 --- a/src/components/UserList/index.tsx +++ b/src/components/UserList/index.tsx @@ -37,9 +37,7 @@ const messages = defineMessages({ role: 'Role', created: 'Created', lastupdated: 'Last Updated', - edit: 'Edit', bulkedit: 'Bulk Edit', - delete: 'Delete', owner: 'Owner', admin: 'Admin', plexuser: 'Plex User', @@ -68,11 +66,6 @@ const messages = defineMessages({ sortUpdated: 'Last Updated', sortDisplayName: 'Display Name', sortRequests: 'Request Count', - next: 'Next', - previous: 'Previous', - showingresults: - 'Showing {from} to {to} of {total} results', - resultsperpage: 'Display {pageSize} results per page', }); type Sort = 'created' | 'updated' | 'requests' | 'displayname'; @@ -602,7 +595,7 @@ const UserList: React.FC = () => { ) } > - {intl.formatMessage(messages.edit)} + {intl.formatMessage(globalMessages.edit)} @@ -627,7 +620,7 @@ const UserList: React.FC = () => {

    {data.results.length > 0 && - intl.formatMessage(messages.showingresults, { + intl.formatMessage(globalMessages.showingresults, { from: pageIndex * currentPageSize + 1, to: data.results.length < currentPageSize @@ -642,7 +635,7 @@ const UserList: React.FC = () => {

    - {intl.formatMessage(messages.resultsperpage, { + {intl.formatMessage(globalMessages.resultsperpage, { pageSize: (