diff --git a/src/components/CollectionDetails/index.tsx b/src/components/CollectionDetails/index.tsx index b58bc5acf..5f33c1c2d 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 3ab99f66f..9f57d3a98 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 c97ee0c41..f6bbb5b79 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 45b610dcc..ba2700568 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 ce3868785..2c26c694f 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 a9b049d02..c3b780cdb 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 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 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 StatusBadge from '../StatusBadge'; +import { withProperties } from '../../utils/typeHelpers'; +import Badge from '../Common/Badge'; +import Button from '../Common/Button'; 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 c4a312545..6e76f9946 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 a059cf452..70b3fec9e 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 ac2416b3a..a6893a38f 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 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 PageTitle from '../Common/PageTitle'; +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 Button from '../Common/Button'; +import LoadingSpinner from '../Common/LoadingSpinner'; +import PageTitle from '../Common/PageTitle'; 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 2e799fba6..b52c6af68 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 28b4ccdec..d47eb2752 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 LoadingSpinner from '../Common/LoadingSpinner'; -import RadarrModal from './RadarrModal'; -import Modal from '../Common/Modal'; -import Transition from '../Transition'; -import axios from 'axios'; -import SonarrModal from './SonarrModal'; -import Alert from '../Common/Alert'; -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 Modal from '../Common/Modal'; +import PageTitle from '../Common/PageTitle'; +import Transition from '../Transition'; +import RadarrModal from './RadarrModal'; +import SonarrModal from './SonarrModal'; 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 cd133dc3f..c933a4149 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 da66faf5f..f3bf67952 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 787c4ff41..349065d17 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 eba7c6618..9d34c87da 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 Link from 'next/link'; +import React, { useCallback, useEffect, useState } from 'react'; +import { useIntl } from 'react-intl'; +import { MediaStatus } from '../../../server/constants/media'; 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 { withProperties } from '../../utils/typeHelpers'; +import CachedImage from '../Common/CachedImage'; +import RequestModal from '../RequestModal'; import Transition from '../Transition'; import Placeholder from './Placeholder'; -import Link from 'next/link'; -import { MediaStatus } from '../../../server/constants/media'; -import RequestModal from '../RequestModal'; -import { defineMessages, useIntl } from 'react-intl'; -import { useIsTouch } from '../../hooks/useIsTouch'; -import globalMessages from '../../i18n/globalMessages'; -import Spinner from '../../assets/spinner.svg'; -import { useUser, Permission } from '../../hooks/useUser'; -import CachedImage from '../Common/CachedImage'; - -const messages = defineMessages({ - movie: 'Movie', - tvshow: 'Series', -}); 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 3402eeb61..2d23edd33 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 29866907c..96e80524a 100644 --- a/src/components/UserList/BulkEditModal.tsx +++ b/src/components/UserList/BulkEditModal.tsx @@ -1,10 +1,11 @@ -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 React, { useEffect, useState } from 'react'; +import { defineMessages, useIntl } from 'react-intl'; 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 6e1a781af..f8e6aff65 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: (