mirror of
https://github.com/Radarr/Radarr.git
synced 2024-09-11 12:02:35 +02:00
New: Add Missing Translations
This commit is contained in:
parent
86118b4537
commit
699d2be938
@ -208,9 +208,9 @@ class Blacklist extends Component {
|
|||||||
<ConfirmModal
|
<ConfirmModal
|
||||||
isOpen={isConfirmRemoveModalOpen}
|
isOpen={isConfirmRemoveModalOpen}
|
||||||
kind={kinds.DANGER}
|
kind={kinds.DANGER}
|
||||||
title="Remove Selected"
|
title={translate('RemoveSelected')}
|
||||||
message={'Are you sure you want to remove the selected items from the blacklist?'}
|
message={translate('AreYouSureYouWantToRemoveTheSelectedItemsFromBlacklist')}
|
||||||
confirmLabel="Remove Selected"
|
confirmLabel={translate('RemoveSelected')}
|
||||||
onConfirm={this.onRemoveSelectedConfirmed}
|
onConfirm={this.onRemoveSelectedConfirmed}
|
||||||
onCancel={this.onConfirmRemoveModalClose}
|
onCancel={this.onConfirmRemoveModalClose}
|
||||||
/>
|
/>
|
||||||
|
@ -173,13 +173,13 @@ function HistoryDetails(props) {
|
|||||||
|
|
||||||
switch (reason) {
|
switch (reason) {
|
||||||
case 'Manual':
|
case 'Manual':
|
||||||
reasonMessage = 'File was deleted by via UI';
|
reasonMessage = translate('FileWasDeletedByViaUI');
|
||||||
break;
|
break;
|
||||||
case 'MissingFromDisk':
|
case 'MissingFromDisk':
|
||||||
reasonMessage = 'Radarr was unable to find the file on disk so it was removed';
|
reasonMessage = translate('MissingFromDisk');
|
||||||
break;
|
break;
|
||||||
case 'Upgrade':
|
case 'Upgrade':
|
||||||
reasonMessage = 'File was deleted to import an upgrade';
|
reasonMessage = translate('FileWasDeletedByUpgrade');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
reasonMessage = '';
|
reasonMessage = '';
|
||||||
|
@ -94,7 +94,7 @@ class History extends Component {
|
|||||||
|
|
||||||
isPopulated && !hasError && !items.length &&
|
isPopulated && !hasError && !items.length &&
|
||||||
<div>
|
<div>
|
||||||
No history found
|
{translate('NoHistory')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,14 +203,14 @@ class Queue extends Component {
|
|||||||
{
|
{
|
||||||
!isRefreshing && hasError &&
|
!isRefreshing && hasError &&
|
||||||
<div>
|
<div>
|
||||||
Failed to load Queue
|
{translate('FailedToLoadQueue')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
isPopulated && !hasError && !items.length &&
|
isPopulated && !hasError && !items.length &&
|
||||||
<div>
|
<div>
|
||||||
Queue is empty
|
{translate('QueueIsEmpty')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ function QueueDetails(props) {
|
|||||||
<Icon
|
<Icon
|
||||||
name={icons.DOWNLOAD}
|
name={icons.DOWNLOAD}
|
||||||
kind={kinds.WARNING}
|
kind={kinds.WARNING}
|
||||||
title={'Downloaded - Unable to Import: check logs for details'}
|
title={translate('UnableToImportCheckLogs')}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -81,12 +81,12 @@ class RemoveQueueItemModal extends Component {
|
|||||||
onModalClose={this.onModalClose}
|
onModalClose={this.onModalClose}
|
||||||
>
|
>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Remove - {sourceTitle}
|
{translate('Remove')} - {sourceTitle}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<div>
|
<div>
|
||||||
Are you sure you want to remove '{sourceTitle}' from the queue?
|
{translate('RemoveFromQueueText', [sourceTitle])}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
|
@ -87,7 +87,7 @@ class RemoveQueueItemsModal extends Component {
|
|||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<div className={styles.message}>
|
<div className={styles.message}>
|
||||||
Are you sure you want to remove {selectedCount} item{selectedCount > 1 ? 's' : ''} from the queue?
|
{translate('AreYouSureYouWantToRemoveSelectedItemsFromQueue', [selectedCount, selectedCount > 1 ? 's' : ''])}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
|
@ -116,7 +116,7 @@ class ImportMovie extends Component {
|
|||||||
rootFoldersPopulated &&
|
rootFoldersPopulated &&
|
||||||
!unmappedFolders.length ?
|
!unmappedFolders.length ?
|
||||||
<div>
|
<div>
|
||||||
All movies in {path} have been imported
|
{translate('AllMoviesInPathHaveBeenImported', [path])}
|
||||||
</div> :
|
</div> :
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
@ -26,27 +26,27 @@ function AppUpdatedModalContent(props) {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Radarr Updated
|
{translate('RadarrUpdated')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<div>
|
<div dangerouslySetInnerHTML={{ __html: translate('VersionUpdateText', [`<span className=${styles.version}>${version}</span>`]) }} />
|
||||||
Version <span className={styles.version}>{version}</span> of Radarr has been installed, in order to get the latest changes you'll need to reload Radarr.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{
|
{
|
||||||
isPopulated && !error && !!update &&
|
isPopulated && !error && !!update &&
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
!update.changes &&
|
!update.changes &&
|
||||||
<div className={styles.maintenance}>Maintenance release</div>
|
<div className={styles.maintenance}>
|
||||||
|
{translate('MaintenanceRelease')}
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
!!update.changes &&
|
!!update.changes &&
|
||||||
<div>
|
<div>
|
||||||
<div className={styles.changes}>
|
<div className={styles.changes}>
|
||||||
What's new?
|
{translate('WhatsNew')}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<UpdateChanges
|
<UpdateChanges
|
||||||
@ -73,14 +73,14 @@ function AppUpdatedModalContent(props) {
|
|||||||
<Button
|
<Button
|
||||||
onPress={onSeeChangesPress}
|
onPress={onSeeChangesPress}
|
||||||
>
|
>
|
||||||
Recent Changes
|
translate('RecentChanges')
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
kind={kinds.PRIMARY}
|
kind={kinds.PRIMARY}
|
||||||
onPress={onModalClose}
|
onPress={onModalClose}
|
||||||
>
|
>
|
||||||
Reload
|
translate('Reload')
|
||||||
</Button>
|
</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
@ -168,7 +168,7 @@ class CalendarHeader extends Component {
|
|||||||
selectedView={view}
|
selectedView={view}
|
||||||
onPress={this.onViewChange}
|
onPress={this.onViewChange}
|
||||||
>
|
>
|
||||||
Month
|
{translate('Month')}
|
||||||
</ViewMenuItem>
|
</ViewMenuItem>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ class CalendarHeader extends Component {
|
|||||||
selectedView={view}
|
selectedView={view}
|
||||||
onPress={this.onViewChange}
|
onPress={this.onViewChange}
|
||||||
>
|
>
|
||||||
Week
|
{translate('Week')}
|
||||||
</ViewMenuItem>
|
</ViewMenuItem>
|
||||||
|
|
||||||
<ViewMenuItem
|
<ViewMenuItem
|
||||||
@ -185,7 +185,7 @@ class CalendarHeader extends Component {
|
|||||||
selectedView={view}
|
selectedView={view}
|
||||||
onPress={this.onViewChange}
|
onPress={this.onViewChange}
|
||||||
>
|
>
|
||||||
Forecast
|
{translate('Forecast')}
|
||||||
</ViewMenuItem>
|
</ViewMenuItem>
|
||||||
|
|
||||||
<ViewMenuItem
|
<ViewMenuItem
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { icons, kinds } from 'Helpers/Props';
|
import { icons, kinds } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import LegendIconItem from './LegendIconItem';
|
import LegendIconItem from './LegendIconItem';
|
||||||
import LegendItem from './LegendItem';
|
import LegendItem from './LegendItem';
|
||||||
import styles from './Legend.css';
|
import styles from './Legend.css';
|
||||||
@ -16,10 +17,10 @@ function Legend(props) {
|
|||||||
if (showCutoffUnmetIcon) {
|
if (showCutoffUnmetIcon) {
|
||||||
iconsToShow.push(
|
iconsToShow.push(
|
||||||
<LegendIconItem
|
<LegendIconItem
|
||||||
name="Cutoff Not Met"
|
name={translate('CutoffUnmet')}
|
||||||
icon={icons.MOVIE_FILE}
|
icon={icons.MOVIE_FILE}
|
||||||
kind={kinds.WARNING}
|
kind={kinds.WARNING}
|
||||||
tooltip="Quality or language cutoff has not been met"
|
tooltip={translate('QualityOrLangCutoffHasNotBeenMet')}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -28,28 +29,28 @@ function Legend(props) {
|
|||||||
<div className={styles.legend}>
|
<div className={styles.legend}>
|
||||||
<div>
|
<div>
|
||||||
<LegendItem
|
<LegendItem
|
||||||
status="unreleased"
|
status={translate('Unreleased')}
|
||||||
tooltip="Movie hasn't released yet"
|
tooltip={translate('MovieHasntReleasedYet')}
|
||||||
colorImpairedMode={colorImpairedMode}
|
colorImpairedMode={colorImpairedMode}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<LegendItem
|
<LegendItem
|
||||||
status="unmonitored"
|
status={translate('Unmonitored')}
|
||||||
tooltip="Movie is unmonitored"
|
tooltip={translate('MovieIsUnmonitored')}
|
||||||
colorImpairedMode={colorImpairedMode}
|
colorImpairedMode={colorImpairedMode}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<LegendItem
|
<LegendItem
|
||||||
status="downloading"
|
status={translate('Downloading')}
|
||||||
tooltip="Movie is currently downloading"
|
tooltip={translate('MovieIsDownloading')}
|
||||||
colorImpairedMode={colorImpairedMode}
|
colorImpairedMode={colorImpairedMode}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<LegendItem
|
<LegendItem
|
||||||
status="downloaded"
|
status={translate('Downloaded')}
|
||||||
tooltip="Movie was downloaded and sorted"
|
tooltip={translate('MovieWasDownloadedAndSorted')}
|
||||||
colorImpairedMode={colorImpairedMode}
|
colorImpairedMode={colorImpairedMode}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -107,7 +107,7 @@ class CalendarOptionsModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Calendar Options
|
{translate('CalendarOptions')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -109,7 +109,7 @@ class CalendarLinkModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Radarr Calendar Feed
|
{translate('RadarrCalendarFeed')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -5,16 +5,17 @@ import SelectInput from 'Components/Form/SelectInput';
|
|||||||
import TextInput from 'Components/Form/TextInput';
|
import TextInput from 'Components/Form/TextInput';
|
||||||
import { IN_LAST, IN_NEXT, NOT_IN_LAST, NOT_IN_NEXT } from 'Helpers/Props/filterTypes';
|
import { IN_LAST, IN_NEXT, NOT_IN_LAST, NOT_IN_NEXT } from 'Helpers/Props/filterTypes';
|
||||||
import isString from 'Utilities/String/isString';
|
import isString from 'Utilities/String/isString';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import { NAME } from './FilterBuilderRowValue';
|
import { NAME } from './FilterBuilderRowValue';
|
||||||
import styles from './DateFilterBuilderRowValue.css';
|
import styles from './DateFilterBuilderRowValue.css';
|
||||||
|
|
||||||
const timeOptions = [
|
const timeOptions = [
|
||||||
{ key: 'seconds', value: 'seconds' },
|
{ key: 'seconds', value: translate('Seconds') },
|
||||||
{ key: 'minutes', value: 'minutes' },
|
{ key: 'minutes', value: translate('Minutes') },
|
||||||
{ key: 'hours', value: 'hours' },
|
{ key: 'hours', value: translate('Hours') },
|
||||||
{ key: 'days', value: 'days' },
|
{ key: 'days', value: translate('Days') },
|
||||||
{ key: 'weeks', value: 'weeks' },
|
{ key: 'weeks', value: translate('Weeks') },
|
||||||
{ key: 'months', value: 'months' }
|
{ key: 'months', value: translate('Months') }
|
||||||
];
|
];
|
||||||
|
|
||||||
function isInFilter(filterType) {
|
function isInFilter(filterType) {
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import SelectInput from './SelectInput';
|
import SelectInput from './SelectInput';
|
||||||
|
|
||||||
const availabilityOptions = [
|
const availabilityOptions = [
|
||||||
{ key: 'announced', value: 'Announced' },
|
{ key: 'announced', value: translate('Announced') },
|
||||||
{ key: 'inCinemas', value: 'In Cinemas' },
|
{ key: 'inCinemas', value: translate('InCinemas') },
|
||||||
{ key: 'released', value: 'Released' },
|
{ key: 'released', value: translate('Released') },
|
||||||
{ key: 'preDB', value: 'PreDB' }
|
{ key: 'preDB', value: translate('PreDB') }
|
||||||
];
|
];
|
||||||
|
|
||||||
function AvailabilitySelectInput(props) {
|
function AvailabilitySelectInput(props) {
|
||||||
|
@ -279,7 +279,7 @@ class DiscoverMovie extends Component {
|
|||||||
<PageToolbar>
|
<PageToolbar>
|
||||||
<PageToolbarSection>
|
<PageToolbarSection>
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label='Refresh Lists'
|
label={translate('RefreshLists')}
|
||||||
iconName={icons.REFRESH}
|
iconName={icons.REFRESH}
|
||||||
isSpinning={isSyncingLists}
|
isSpinning={isSyncingLists}
|
||||||
isDisabled={hasNoMovie}
|
isDisabled={hasNoMovie}
|
||||||
|
@ -138,8 +138,8 @@ class DiscoverMovieFooter extends Component {
|
|||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const monitoredOptions = [
|
const monitoredOptions = [
|
||||||
{ key: true, value: 'Monitored' },
|
{ key: true, value: translate('Monitored') },
|
||||||
{ key: false, value: 'Unmonitored' }
|
{ key: false, value: translate('Unmonitored') }
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -38,7 +38,7 @@ class ExcludeMovieModalContent extends Component {
|
|||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<div className={styles.pathContainer}>
|
<div className={styles.pathContainer}>
|
||||||
Exclude {title}? This will prevent Radarr from adding automatically via list sync.
|
{translate('ExcludeTitle', [title])}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
|
@ -4,6 +4,7 @@ import MenuContent from 'Components/Menu/MenuContent';
|
|||||||
import SortMenu from 'Components/Menu/SortMenu';
|
import SortMenu from 'Components/Menu/SortMenu';
|
||||||
import SortMenuItem from 'Components/Menu/SortMenuItem';
|
import SortMenuItem from 'Components/Menu/SortMenuItem';
|
||||||
import { align, sortDirections } from 'Helpers/Props';
|
import { align, sortDirections } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
function DiscoverMovieSortMenu(props) {
|
function DiscoverMovieSortMenu(props) {
|
||||||
const {
|
const {
|
||||||
@ -25,7 +26,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Status
|
{translate('Status')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
@ -34,7 +35,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Title
|
{translate('Title')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
@ -43,7 +44,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Studio
|
{translate('Studio')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
@ -52,7 +53,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
In Cinemas
|
{translate('InCinemas')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
@ -61,7 +62,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Physical Release
|
{translate('PhysicalRelease')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
@ -70,7 +71,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Digital Release
|
{translate('DigitalRelease')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
@ -79,7 +80,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Runtime
|
{translate('Runtime')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
@ -88,7 +89,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Rating
|
{translate('Rating')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
@ -97,7 +98,7 @@ function DiscoverMovieSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Certification
|
{translate('Certification')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
</MenuContent>
|
</MenuContent>
|
||||||
</SortMenu>
|
</SortMenu>
|
||||||
|
@ -4,6 +4,7 @@ import MenuContent from 'Components/Menu/MenuContent';
|
|||||||
import ViewMenu from 'Components/Menu/ViewMenu';
|
import ViewMenu from 'Components/Menu/ViewMenu';
|
||||||
import ViewMenuItem from 'Components/Menu/ViewMenuItem';
|
import ViewMenuItem from 'Components/Menu/ViewMenuItem';
|
||||||
import { align } from 'Helpers/Props';
|
import { align } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
function DiscoverMovieViewMenu(props) {
|
function DiscoverMovieViewMenu(props) {
|
||||||
const {
|
const {
|
||||||
@ -23,7 +24,7 @@ function DiscoverMovieViewMenu(props) {
|
|||||||
selectedView={view}
|
selectedView={view}
|
||||||
onPress={onViewSelect}
|
onPress={onViewSelect}
|
||||||
>
|
>
|
||||||
Table
|
{translate('Table')}
|
||||||
</ViewMenuItem>
|
</ViewMenuItem>
|
||||||
|
|
||||||
<ViewMenuItem
|
<ViewMenuItem
|
||||||
@ -31,7 +32,7 @@ function DiscoverMovieViewMenu(props) {
|
|||||||
selectedView={view}
|
selectedView={view}
|
||||||
onPress={onViewSelect}
|
onPress={onViewSelect}
|
||||||
>
|
>
|
||||||
Posters
|
{translate('Posters')}
|
||||||
</ViewMenuItem>
|
</ViewMenuItem>
|
||||||
|
|
||||||
<ViewMenuItem
|
<ViewMenuItem
|
||||||
@ -39,7 +40,7 @@ function DiscoverMovieViewMenu(props) {
|
|||||||
selectedView={view}
|
selectedView={view}
|
||||||
onPress={onViewSelect}
|
onPress={onViewSelect}
|
||||||
>
|
>
|
||||||
Overview
|
{translate('Overview')}
|
||||||
</ViewMenuItem>
|
</ViewMenuItem>
|
||||||
</MenuContent>
|
</MenuContent>
|
||||||
</ViewMenu>
|
</ViewMenu>
|
||||||
|
@ -21,7 +21,7 @@ function NoDiscoverMovie(props) {
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className={styles.message}>
|
<div className={styles.message}>
|
||||||
No list items or recommendations found, to get started you'll want to add a new movie, import some existing ones, or add a list.
|
{translate('NoListRecommendations')}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={styles.buttonContainer}>
|
<div className={styles.buttonContainer}>
|
||||||
|
@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { icons } from 'Helpers/Props';
|
import { icons } from 'Helpers/Props';
|
||||||
import dimensions from 'Styles/Variables/dimensions';
|
import dimensions from 'Styles/Variables/dimensions';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import DiscoverMovieOverviewInfoRow from './DiscoverMovieOverviewInfoRow';
|
import DiscoverMovieOverviewInfoRow from './DiscoverMovieOverviewInfoRow';
|
||||||
import styles from './DiscoverMovieOverviewInfo.css';
|
import styles from './DiscoverMovieOverviewInfo.css';
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ function getInfoRowProps(row, props) {
|
|||||||
|
|
||||||
if (name === 'year') {
|
if (name === 'year') {
|
||||||
return {
|
return {
|
||||||
title: 'Year',
|
title: translate('Year'),
|
||||||
iconName: icons.CALENDAR,
|
iconName: icons.CALENDAR,
|
||||||
label: props.year
|
label: props.year
|
||||||
};
|
};
|
||||||
@ -62,7 +63,7 @@ function getInfoRowProps(row, props) {
|
|||||||
|
|
||||||
if (name === 'genres') {
|
if (name === 'genres') {
|
||||||
return {
|
return {
|
||||||
title: 'Genres',
|
title: translate('Genres'),
|
||||||
iconName: icons.GENRE,
|
iconName: icons.GENRE,
|
||||||
label: props.genres.slice(0, 2).join(', ')
|
label: props.genres.slice(0, 2).join(', ')
|
||||||
};
|
};
|
||||||
@ -70,7 +71,7 @@ function getInfoRowProps(row, props) {
|
|||||||
|
|
||||||
if (name === 'ratings') {
|
if (name === 'ratings') {
|
||||||
return {
|
return {
|
||||||
title: 'Ratings',
|
title: translate('Ratings'),
|
||||||
iconName: icons.HEART,
|
iconName: icons.HEART,
|
||||||
label: `${props.ratings.value * 10}%`
|
label: `${props.ratings.value * 10}%`
|
||||||
};
|
};
|
||||||
@ -78,7 +79,7 @@ function getInfoRowProps(row, props) {
|
|||||||
|
|
||||||
if (name === 'certification') {
|
if (name === 'certification') {
|
||||||
return {
|
return {
|
||||||
title: 'Certification',
|
title: translate('Certification'),
|
||||||
iconName: icons.FILM,
|
iconName: icons.FILM,
|
||||||
label: props.certification
|
label: props.certification
|
||||||
};
|
};
|
||||||
@ -86,7 +87,7 @@ function getInfoRowProps(row, props) {
|
|||||||
|
|
||||||
if (name === 'studio') {
|
if (name === 'studio') {
|
||||||
return {
|
return {
|
||||||
title: 'Studio',
|
title: translate('Studio'),
|
||||||
iconName: icons.STUDIO,
|
iconName: icons.STUDIO,
|
||||||
label: props.studio
|
label: props.studio
|
||||||
};
|
};
|
||||||
|
@ -14,9 +14,9 @@ import { inputTypes } from 'Helpers/Props';
|
|||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
const posterSizeOptions = [
|
const posterSizeOptions = [
|
||||||
{ key: 'small', value: 'Small' },
|
{ key: 'small', value: translate('Small') },
|
||||||
{ key: 'medium', value: 'Medium' },
|
{ key: 'medium', value: translate('Medium') },
|
||||||
{ key: 'large', value: 'Large' }
|
{ key: 'large', value: translate('Large') }
|
||||||
];
|
];
|
||||||
|
|
||||||
class DiscoverMovieOverviewOptionsModalContent extends Component {
|
class DiscoverMovieOverviewOptionsModalContent extends Component {
|
||||||
|
@ -14,9 +14,9 @@ import { inputTypes } from 'Helpers/Props';
|
|||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
const posterSizeOptions = [
|
const posterSizeOptions = [
|
||||||
{ key: 'small', value: 'Small' },
|
{ key: 'small', value: translate('Small') },
|
||||||
{ key: 'medium', value: 'Medium' },
|
{ key: 'medium', value: translate('Medium') },
|
||||||
{ key: 'large', value: 'Large' }
|
{ key: 'large', value: translate('Large') }
|
||||||
];
|
];
|
||||||
|
|
||||||
class DiscoverMoviePosterOptionsModalContent extends Component {
|
class DiscoverMoviePosterOptionsModalContent extends Component {
|
||||||
|
@ -17,11 +17,11 @@ import styles from './InteractiveImportSelectFolderModalContent.css';
|
|||||||
const recentFoldersColumns = [
|
const recentFoldersColumns = [
|
||||||
{
|
{
|
||||||
name: 'folder',
|
name: 'folder',
|
||||||
label: 'Folder'
|
label: translate('Folder')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'lastUsed',
|
name: 'lastUsed',
|
||||||
label: 'Last Used'
|
label: translate('LastUsed')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'actions',
|
name: 'actions',
|
||||||
|
@ -69,8 +69,8 @@ const columns = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const filterExistingFilesOptions = {
|
const filterExistingFilesOptions = {
|
||||||
ALL: 'all',
|
ALL: translate('All'),
|
||||||
NEW: 'new'
|
NEW: translate('New')
|
||||||
};
|
};
|
||||||
|
|
||||||
const importModeOptions = [
|
const importModeOptions = [
|
||||||
@ -198,25 +198,25 @@ class InteractiveImportModalContent extends Component {
|
|||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const selectedIds = this.getSelectedIds();
|
const selectedIds = this.getSelectedIds();
|
||||||
const errorMessage = getErrorMessage(error, 'Unable to load manual import items');
|
const errorMessage = getErrorMessage(error, translate('UnableToLoadManualImportItems'));
|
||||||
|
|
||||||
const bulkSelectOptions = [
|
const bulkSelectOptions = [
|
||||||
{ key: SELECT, value: 'Select...', disabled: true },
|
{
|
||||||
{ key: LANGUAGE, value: 'Select Language' },
|
key: SELECT, value: translate('SelectDotDot'), disabled: true },
|
||||||
{ key: QUALITY, value: 'Select Quality' }
|
{ key: LANGUAGE, value: translate('SelectLanguage') },
|
||||||
];
|
{ key: QUALITY, value: translate('SelectQuality') }];
|
||||||
|
|
||||||
if (allowMovieChange) {
|
if (allowMovieChange) {
|
||||||
bulkSelectOptions.splice(1, 0, {
|
bulkSelectOptions.splice(1, 0, {
|
||||||
key: MOVIE,
|
key: MOVIE,
|
||||||
value: 'Select Movie'
|
value: translate('SelectMovie')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Manual Import - {title || folder}
|
{translate('ManualImport')} - {title || folder}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody scrollDirection={scrollDirections.BOTH}>
|
<ModalBody scrollDirection={scrollDirections.BOTH}>
|
||||||
@ -232,7 +232,7 @@ class InteractiveImportModalContent extends Component {
|
|||||||
|
|
||||||
<div className={styles.filterText}>
|
<div className={styles.filterText}>
|
||||||
{
|
{
|
||||||
filterExistingFiles ? 'Unmapped Files Only' : 'All Files'
|
filterExistingFiles ? translate('UnmappedFilesOnly') : translate('AllFiles')
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</MenuButton>
|
</MenuButton>
|
||||||
@ -243,7 +243,7 @@ class InteractiveImportModalContent extends Component {
|
|||||||
isSelected={!filterExistingFiles}
|
isSelected={!filterExistingFiles}
|
||||||
onPress={this.onFilterExistingFilesChange}
|
onPress={this.onFilterExistingFilesChange}
|
||||||
>
|
>
|
||||||
All Files
|
{translate('AllFiles')}
|
||||||
</SelectedMenuItem>
|
</SelectedMenuItem>
|
||||||
|
|
||||||
<SelectedMenuItem
|
<SelectedMenuItem
|
||||||
@ -251,7 +251,7 @@ class InteractiveImportModalContent extends Component {
|
|||||||
isSelected={filterExistingFiles}
|
isSelected={filterExistingFiles}
|
||||||
onPress={this.onFilterExistingFilesChange}
|
onPress={this.onFilterExistingFilesChange}
|
||||||
>
|
>
|
||||||
Unmapped Files Only
|
{translate('UnmappedFilesOnly')}
|
||||||
</SelectedMenuItem>
|
</SelectedMenuItem>
|
||||||
</MenuContent>
|
</MenuContent>
|
||||||
</Menu>
|
</Menu>
|
||||||
@ -302,7 +302,7 @@ class InteractiveImportModalContent extends Component {
|
|||||||
|
|
||||||
{
|
{
|
||||||
isPopulated && !items.length && !isFetching &&
|
isPopulated && !items.length && !isFetching &&
|
||||||
'No video files were found in the selected folder'
|
translate('NoVideoFilesFoundSelectedFolder')
|
||||||
}
|
}
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ class InteractiveImportModalContent extends Component {
|
|||||||
isDisabled={!selectedIds.length || !!invalidRowsSelected.length}
|
isDisabled={!selectedIds.length || !!invalidRowsSelected.length}
|
||||||
onPress={this.onImportSelectedPress}
|
onPress={this.onImportSelectedPress}
|
||||||
>
|
>
|
||||||
Import
|
{translate('Import')}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
|
@ -7,6 +7,7 @@ import * as commandNames from 'Commands/commandNames';
|
|||||||
import { executeCommand } from 'Store/Actions/commandActions';
|
import { executeCommand } from 'Store/Actions/commandActions';
|
||||||
import { clearInteractiveImport, fetchInteractiveImportItems, setInteractiveImportMode, setInteractiveImportSort } from 'Store/Actions/interactiveImportActions';
|
import { clearInteractiveImport, fetchInteractiveImportItems, setInteractiveImportMode, setInteractiveImportSort } from 'Store/Actions/interactiveImportActions';
|
||||||
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
|
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import InteractiveImportModalContent from './InteractiveImportModalContent';
|
import InteractiveImportModalContent from './InteractiveImportModalContent';
|
||||||
|
|
||||||
function createMapStateToProps() {
|
function createMapStateToProps() {
|
||||||
@ -113,17 +114,17 @@ class InteractiveImportModalContentConnector extends Component {
|
|||||||
} = item;
|
} = item;
|
||||||
|
|
||||||
if (!movie) {
|
if (!movie) {
|
||||||
this.setState({ interactiveImportErrorMessage: 'Movie must be chosen for each selected file' });
|
this.setState({ interactiveImportErrorMessage: translate('InteractiveImportErrMovie') });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!quality) {
|
if (!quality) {
|
||||||
this.setState({ interactiveImportErrorMessage: 'Quality must be chosen for each selected file' });
|
this.setState({ interactiveImportErrorMessage: translate('InteractiveImportErrQuality') });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!languages) {
|
if (!languages) {
|
||||||
this.setState({ interactiveImportErrorMessage: 'Language must be chosen for each selected file' });
|
this.setState({ interactiveImportErrorMessage: translate('InteractiveImportErrLanguage') });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ class SelectLanguageModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Manual Import - Select Language
|
{translate('ManualImportSelectLanguage')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
@ -128,7 +128,7 @@ class SelectLanguageModalContent extends Component {
|
|||||||
kind={kinds.SUCCESS}
|
kind={kinds.SUCCESS}
|
||||||
onPress={this.onLanguageSelect}
|
onPress={this.onLanguageSelect}
|
||||||
>
|
>
|
||||||
Select Languges
|
{translate('SelectLanguges')}
|
||||||
</Button>
|
</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
@ -173,7 +173,7 @@ class SelectMovieModalContent extends Component {
|
|||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
<div className={styles.header}>
|
<div className={styles.header}>
|
||||||
Manual Import - Select Movie
|
{translate('ManualImportSelectMovie')}
|
||||||
</div>
|
</div>
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ class SelectQualityModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Manual Import - Select Quality
|
{translate('ManualImportSelectQuality')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
@ -146,7 +146,7 @@ class SelectQualityModalContent extends Component {
|
|||||||
kind={kinds.SUCCESS}
|
kind={kinds.SUCCESS}
|
||||||
onPress={this.onQualitySelect}
|
onPress={this.onQualitySelect}
|
||||||
>
|
>
|
||||||
Select Quality
|
{translate('SelectQuality')}
|
||||||
</Button>
|
</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
@ -128,21 +128,21 @@ function InteractiveSearchContent(props) {
|
|||||||
{
|
{
|
||||||
!isFetching && !!error &&
|
!isFetching && !!error &&
|
||||||
<div>
|
<div>
|
||||||
Unable to load results for this movie search. Try again later
|
{translate('UnableToLoadResultsIntSearch')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
!isFetching && isPopulated && !totalReleasesCount &&
|
!isFetching && isPopulated && !totalReleasesCount &&
|
||||||
<div>
|
<div>
|
||||||
No results found
|
{translate('NoResultsFound')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
!!totalReleasesCount && isPopulated && !items.length &&
|
!!totalReleasesCount && isPopulated && !items.length &&
|
||||||
<div>
|
<div>
|
||||||
All results are hidden by the applied filter
|
{translate('AllResultsHiddenFilter')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ function InteractiveSearchContent(props) {
|
|||||||
{
|
{
|
||||||
totalReleasesCount !== items.length && !!items.length &&
|
totalReleasesCount !== items.length && !!items.length &&
|
||||||
<div className={styles.filteredMessage}>
|
<div className={styles.filteredMessage}>
|
||||||
Some results are hidden by the applied filter
|
{translate('SomeResultsHiddenFilter')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@ -35,12 +35,12 @@ function getDownloadTooltip(isGrabbing, isGrabbed, grabError) {
|
|||||||
if (isGrabbing) {
|
if (isGrabbing) {
|
||||||
return '';
|
return '';
|
||||||
} else if (isGrabbed) {
|
} else if (isGrabbed) {
|
||||||
return 'Added to downloaded queue';
|
return translate('AddedToDownloadQueue');
|
||||||
} else if (grabError) {
|
} else if (grabError) {
|
||||||
return grabError;
|
return grabError;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'Add to downloaded queue';
|
return translate('AddToDownloadQueue');
|
||||||
}
|
}
|
||||||
|
|
||||||
class InteractiveSearchRow extends Component {
|
class InteractiveSearchRow extends Component {
|
||||||
|
@ -66,12 +66,12 @@ class DeleteMovieModalContent extends Component {
|
|||||||
const deleteFiles = this.state.deleteFiles;
|
const deleteFiles = this.state.deleteFiles;
|
||||||
const addImportExclusion = this.state.addImportExclusion;
|
const addImportExclusion = this.state.addImportExclusion;
|
||||||
|
|
||||||
let deleteFilesLabel = `Delete ${movieFileCount} Movie Files`;
|
let deleteFilesLabel = translate('DeleteFilesLabel', [movieFileCount]);
|
||||||
let deleteFilesHelpText = 'Delete the movie files and movie folder';
|
let deleteFilesHelpText = translate('DeleteFilesHelpText');
|
||||||
|
|
||||||
if (movieFileCount === 0) {
|
if (movieFileCount === 0) {
|
||||||
deleteFilesLabel = 'Delete Movie Folder';
|
deleteFilesLabel = translate('DeleteMovieFolderLabel');
|
||||||
deleteFilesHelpText = 'Delete the movie folder and it\'s contents';
|
deleteFilesHelpText = translate('DeleteMovieFolderHelpText');
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -79,7 +79,7 @@ class DeleteMovieModalContent extends Component {
|
|||||||
onModalClose={onModalClose}
|
onModalClose={onModalClose}
|
||||||
>
|
>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Delete - {title}
|
{translate('DeleteHeader', [title])}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
@ -108,23 +108,29 @@ class DeleteMovieModalContent extends Component {
|
|||||||
{
|
{
|
||||||
deleteFiles &&
|
deleteFiles &&
|
||||||
<div className={styles.deleteFilesMessage}>
|
<div className={styles.deleteFilesMessage}>
|
||||||
<div>The movie folder <strong>{path}</strong> and all it's content will be deleted.</div>
|
<div>
|
||||||
|
{translate('DeleteTheMovieFolder', [path])}
|
||||||
|
</div>
|
||||||
|
|
||||||
{
|
{
|
||||||
!!movieFileCount &&
|
!!movieFileCount &&
|
||||||
<div>{movieFileCount} movie files totaling {formatBytes(sizeOnDisk)}</div>
|
<div>
|
||||||
|
{movieFileCount} {translate('MovieFilesTotaling')} {formatBytes(sizeOnDisk)}
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>Add List Exclusion</FormLabel>
|
<FormLabel>
|
||||||
|
{translate('AddListExclusion')}
|
||||||
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.CHECK}
|
type={inputTypes.CHECK}
|
||||||
name="addImportExclusion"
|
name="addImportExclusion"
|
||||||
value={addImportExclusion}
|
value={addImportExclusion}
|
||||||
helpText="Prevent movie from being added to Radarr by lists"
|
helpText={translate('AddImportExclusionHelpText')}
|
||||||
kind={kinds.DANGER}
|
kind={kinds.DANGER}
|
||||||
onChange={this.onAddImportExclusionChange}
|
onChange={this.onAddImportExclusionChange}
|
||||||
/>
|
/>
|
||||||
|
@ -3,6 +3,7 @@ import React from 'react';
|
|||||||
import Label from 'Components/Label';
|
import Label from 'Components/Label';
|
||||||
import Link from 'Components/Link/Link';
|
import Link from 'Components/Link/Link';
|
||||||
import { kinds, sizes } from 'Helpers/Props';
|
import { kinds, sizes } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import styles from './MovieDetailsLinks.css';
|
import styles from './MovieDetailsLinks.css';
|
||||||
|
|
||||||
function MovieDetailsLinks(props) {
|
function MovieDetailsLinks(props) {
|
||||||
@ -23,7 +24,7 @@ function MovieDetailsLinks(props) {
|
|||||||
kind={kinds.INFO}
|
kind={kinds.INFO}
|
||||||
size={sizes.LARGE}
|
size={sizes.LARGE}
|
||||||
>
|
>
|
||||||
TMDb
|
{translate('TMDb')}
|
||||||
</Label>
|
</Label>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
@ -36,7 +37,7 @@ function MovieDetailsLinks(props) {
|
|||||||
kind={kinds.INFO}
|
kind={kinds.INFO}
|
||||||
size={sizes.LARGE}
|
size={sizes.LARGE}
|
||||||
>
|
>
|
||||||
Trakt
|
{translate('Trakt')}
|
||||||
</Label>
|
</Label>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ function MovieDetailsLinks(props) {
|
|||||||
kind={kinds.INFO}
|
kind={kinds.INFO}
|
||||||
size={sizes.LARGE}
|
size={sizes.LARGE}
|
||||||
>
|
>
|
||||||
IMDb
|
{translate('IMDb')}
|
||||||
</Label>
|
</Label>
|
||||||
</Link>
|
</Link>
|
||||||
}
|
}
|
||||||
@ -67,7 +68,7 @@ function MovieDetailsLinks(props) {
|
|||||||
kind={kinds.INFO}
|
kind={kinds.INFO}
|
||||||
size={sizes.LARGE}
|
size={sizes.LARGE}
|
||||||
>
|
>
|
||||||
Movie Chat
|
{translate('MovieChat')}
|
||||||
</Label>
|
</Label>
|
||||||
</Link>
|
</Link>
|
||||||
}
|
}
|
||||||
@ -83,7 +84,7 @@ function MovieDetailsLinks(props) {
|
|||||||
kind={kinds.DANGER}
|
kind={kinds.DANGER}
|
||||||
size={sizes.LARGE}
|
size={sizes.LARGE}
|
||||||
>
|
>
|
||||||
Trailer
|
{translate('Trailer')}
|
||||||
</Label>
|
</Label>
|
||||||
</Link>
|
</Link>
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ class MovieDetailsPageConnector extends Component {
|
|||||||
if (!isFetching && !!error) {
|
if (!isFetching && !!error) {
|
||||||
return (
|
return (
|
||||||
<div className={styles.errorMessage}>
|
<div className={styles.errorMessage}>
|
||||||
{getErrorMessage(error, 'Failed to load movie from API')}
|
{getErrorMessage(error, translate('FailedToLoadMovieFromAPI'))}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -48,12 +48,16 @@ class MovieTitlesTableContent extends Component {
|
|||||||
|
|
||||||
{
|
{
|
||||||
!isFetching && !!error &&
|
!isFetching && !!error &&
|
||||||
<div className={styles.blankpad}>Unable to load alternative titles.</div>
|
<div className={styles.blankpad}>
|
||||||
|
{translate('UnableToLoadAltTitle')}
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
isPopulated && !hasItems && !error &&
|
isPopulated && !hasItems && !error &&
|
||||||
<div className={styles.blankpad}>No alternative titles.</div>
|
<div className={styles.blankpad}>
|
||||||
|
{translate('NoAltTitle')}
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,7 @@ class DeleteMovieModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Delete Selected Movie(s)
|
{translate('DeleteSelectedMovie')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -154,9 +154,9 @@ class MovieEditorFooter extends Component {
|
|||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const monitoredOptions = [
|
const monitoredOptions = [
|
||||||
{ key: NO_CHANGE, value: 'No Change', disabled: true },
|
{ key: NO_CHANGE, value: translate('NoChange'), disabled: true },
|
||||||
{ key: 'monitored', value: 'Monitored' },
|
{ key: 'monitored', value: translate('Monitored') },
|
||||||
{ key: 'unmonitored', value: 'Unmonitored' }
|
{ key: 'unmonitored', value: translate('Unmonitored') }
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -21,12 +21,12 @@ function OrganizeMovieModalContent(props) {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Organize Selected Movies
|
{translate('OrganizeSelectedMovies')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<Alert>
|
<Alert>
|
||||||
Tip: To preview a rename... select "Cancel" then click any movie title and use the
|
{translate('PreviewRenameHelpText')}
|
||||||
<Icon
|
<Icon
|
||||||
className={styles.renameIcon}
|
className={styles.renameIcon}
|
||||||
name={icons.ORGANIZE}
|
name={icons.ORGANIZE}
|
||||||
@ -34,7 +34,7 @@ function OrganizeMovieModalContent(props) {
|
|||||||
</Alert>
|
</Alert>
|
||||||
|
|
||||||
<div className={styles.message}>
|
<div className={styles.message}>
|
||||||
Are you sure you want to organize all files in the {movieTitles.length} selected movie(s)?
|
{translate('OrganizeConfirm', [movieTitles.length])}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
@ -59,7 +59,7 @@ function OrganizeMovieModalContent(props) {
|
|||||||
kind={kinds.DANGER}
|
kind={kinds.DANGER}
|
||||||
onPress={onOrganizeMoviePress}
|
onPress={onOrganizeMoviePress}
|
||||||
>
|
>
|
||||||
Organize
|
{translate('Organize')}
|
||||||
</Button>
|
</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
@ -61,9 +61,9 @@ class TagsModalContent extends Component {
|
|||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const applyTagsOptions = [
|
const applyTagsOptions = [
|
||||||
{ key: 'add', value: 'Add' },
|
{ key: 'add', value: translate('Add') },
|
||||||
{ key: 'remove', value: 'Remove' },
|
{ key: 'remove', value: translate('Remove') },
|
||||||
{ key: 'replace', value: 'Replace' }
|
{ key: 'replace', value: translate('Replace') }
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -72,12 +72,16 @@ class MovieHistoryTableContent extends Component {
|
|||||||
|
|
||||||
{
|
{
|
||||||
!isFetching && !!error &&
|
!isFetching && !!error &&
|
||||||
<div className={styles.blankpad}>Unable to load history</div>
|
<div className={styles.blankpad}>
|
||||||
|
{translate('UnableToLoadHistory')}
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
isPopulated && !hasItems && !error &&
|
isPopulated && !hasItems && !error &&
|
||||||
<div className={styles.blankpad}>No history</div>
|
<div className={styles.blankpad}>
|
||||||
|
{translate('NoHistory')}
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -5,6 +5,7 @@ import MenuContent from 'Components/Menu/MenuContent';
|
|||||||
import SearchMenuItem from 'Components/Menu/SearchMenuItem';
|
import SearchMenuItem from 'Components/Menu/SearchMenuItem';
|
||||||
import ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton';
|
import ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton';
|
||||||
import { align, icons } from 'Helpers/Props';
|
import { align, icons } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
class MovieIndexSearchMenu extends Component {
|
class MovieIndexSearchMenu extends Component {
|
||||||
|
|
||||||
@ -29,14 +30,14 @@ class MovieIndexSearchMenu extends Component {
|
|||||||
name="missingMoviesSearch"
|
name="missingMoviesSearch"
|
||||||
onPress={onSearchPress}
|
onPress={onSearchPress}
|
||||||
>
|
>
|
||||||
Search Missing
|
{translate('SearchMissing')}
|
||||||
</SearchMenuItem>
|
</SearchMenuItem>
|
||||||
|
|
||||||
<SearchMenuItem
|
<SearchMenuItem
|
||||||
name="cutoffUnmetMoviesSearch"
|
name="cutoffUnmetMoviesSearch"
|
||||||
onPress={onSearchPress}
|
onPress={onSearchPress}
|
||||||
>
|
>
|
||||||
Search Cutoff Unmet
|
{translate('SearchCutoffUnmet')}
|
||||||
</SearchMenuItem>
|
</SearchMenuItem>
|
||||||
</MenuContent>
|
</MenuContent>
|
||||||
</Menu>
|
</Menu>
|
||||||
|
@ -26,7 +26,7 @@ function MovieIndexSortMenu(props) {
|
|||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
onPress={onSortSelect}
|
onPress={onSortSelect}
|
||||||
>
|
>
|
||||||
Monitored/Status
|
{translate('MonitoredStatus')}
|
||||||
</SortMenuItem>
|
</SortMenuItem>
|
||||||
|
|
||||||
<SortMenuItem
|
<SortMenuItem
|
||||||
|
@ -519,7 +519,7 @@ class MovieIndex extends Component {
|
|||||||
{
|
{
|
||||||
!isFetching && !!error &&
|
!isFetching && !!error &&
|
||||||
<div className={styles.errorMessage}>
|
<div className={styles.errorMessage}>
|
||||||
{getErrorMessage(error, 'Failed to load movie from API')}
|
{getErrorMessage(error, translate('FailedToLoadMovieFromAPI'))}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -610,7 +610,7 @@ class MovieIndex extends Component {
|
|||||||
Are you sure you want to perform mass movie search for {isMovieEditorActive && selectedMovieIds.length > 0 ? selectedMovieIds.length : this.props.items.length} movies?
|
Are you sure you want to perform mass movie search for {isMovieEditorActive && selectedMovieIds.length > 0 ? selectedMovieIds.length : this.props.items.length} movies?
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
This cannot be cancelled once started without restarting Radarr.
|
{translate('ThisCannotBeCancelled')}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
@ -14,9 +14,9 @@ import { inputTypes } from 'Helpers/Props';
|
|||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
const posterSizeOptions = [
|
const posterSizeOptions = [
|
||||||
{ key: 'small', value: 'Small' },
|
{ key: 'small', value: translate('Small') },
|
||||||
{ key: 'medium', value: 'Medium' },
|
{ key: 'medium', value: translate('Medium') },
|
||||||
{ key: 'large', value: 'Large' }
|
{ key: 'large', value: translate('Large') }
|
||||||
];
|
];
|
||||||
|
|
||||||
class MovieIndexOverviewOptionsModalContent extends Component {
|
class MovieIndexOverviewOptionsModalContent extends Component {
|
||||||
|
@ -242,7 +242,7 @@ class MovieIndexPoster extends Component {
|
|||||||
{
|
{
|
||||||
showMonitored &&
|
showMonitored &&
|
||||||
<div className={styles.title}>
|
<div className={styles.title}>
|
||||||
{monitored ? 'Monitored' : 'Unmonitored'}
|
{monitored ? translate('Monitored') : translate('Unmonitored')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,9 +14,9 @@ import { inputTypes } from 'Helpers/Props';
|
|||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
const posterSizeOptions = [
|
const posterSizeOptions = [
|
||||||
{ key: 'small', value: 'Small' },
|
{ key: 'small', value: translate('Small') },
|
||||||
{ key: 'medium', value: 'Medium' },
|
{ key: 'medium', value: translate('Medium') },
|
||||||
{ key: 'large', value: 'Large' }
|
{ key: 'large', value: translate('Large') }
|
||||||
];
|
];
|
||||||
|
|
||||||
class MovieIndexPosterOptionsModalContent extends Component {
|
class MovieIndexPosterOptionsModalContent extends Component {
|
||||||
|
@ -7,6 +7,7 @@ import ModalContent from 'Components/Modal/ModalContent';
|
|||||||
import ModalFooter from 'Components/Modal/ModalFooter';
|
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||||
import { kinds, sizes } from 'Helpers/Props';
|
import { kinds, sizes } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import styles from './MoveMovieModal.css';
|
import styles from './MoveMovieModal.css';
|
||||||
|
|
||||||
function MoveMovieModal(props) {
|
function MoveMovieModal(props) {
|
||||||
@ -40,19 +41,19 @@ function MoveMovieModal(props) {
|
|||||||
onModalClose={onSavePress}
|
onModalClose={onSavePress}
|
||||||
>
|
>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Move Files
|
{translate('MoveFiles')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
{
|
{
|
||||||
destinationRootFolder ?
|
destinationRootFolder ?
|
||||||
`Would you like to move the movie folders to '${destinationRootFolder}'?` :
|
translate('MovieFolders1', [destinationRootFolder]) :
|
||||||
`Would you like to move the movie files from '${originalPath}' to '${destinationPath}'?`
|
translate('MovieFolders2', [originalPath, destinationPath])
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
destinationRootFolder ?
|
destinationRootFolder ?
|
||||||
<div>
|
<div>
|
||||||
This will also rename the movie folder per the movie folder format in settings.
|
{translate('FolderMoveRenameWarning')}
|
||||||
</div> :
|
</div> :
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
@ -63,14 +64,14 @@ function MoveMovieModal(props) {
|
|||||||
className={styles.doNotMoveButton}
|
className={styles.doNotMoveButton}
|
||||||
onPress={onSavePress}
|
onPress={onSavePress}
|
||||||
>
|
>
|
||||||
No, I'll Move the Files Myself
|
{translate('NoMoveFilesSelf')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
kind={kinds.DANGER}
|
kind={kinds.DANGER}
|
||||||
onPress={onMoveMoviePress}
|
onPress={onMoveMoviePress}
|
||||||
>
|
>
|
||||||
Yes, Move the Files
|
{translate('YesMoveFiles')}
|
||||||
</Button>
|
</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
@ -35,7 +35,7 @@ function MovieLanguage(props) {
|
|||||||
className={className}
|
className={className}
|
||||||
kind={isCutoffNotMet ? kinds.INVERSE : kinds.DEFAULT}
|
kind={isCutoffNotMet ? kinds.INVERSE : kinds.DEFAULT}
|
||||||
>
|
>
|
||||||
Multi-Language
|
{translate('MultiLanguage')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
title={translate('Languages')}
|
title={translate('Languages')}
|
||||||
|
@ -1,30 +1,31 @@
|
|||||||
import { icons } from 'Helpers/Props';
|
import { icons } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
export function getMovieStatusDetails(status) {
|
export function getMovieStatusDetails(status) {
|
||||||
|
|
||||||
let statusDetails = {
|
let statusDetails = {
|
||||||
icon: icons.ANNOUNCED,
|
icon: icons.ANNOUNCED,
|
||||||
title: 'Announced',
|
title: translate('Announced'),
|
||||||
message: 'Movie is announced'
|
message: translate('AnnoucedMsg')
|
||||||
};
|
};
|
||||||
|
|
||||||
if (status === 'deleted') {
|
if (status === 'deleted') {
|
||||||
statusDetails = {
|
statusDetails = {
|
||||||
icon: icons.MOVIE_DELETED,
|
icon: icons.MOVIE_DELETED,
|
||||||
title: 'Deleted',
|
title: translate('Deleted'),
|
||||||
message: 'Movie was deleted from TMDb'
|
message: translate('DeletedMsg')
|
||||||
};
|
};
|
||||||
} else if (status === 'inCinemas') {
|
} else if (status === 'inCinemas') {
|
||||||
statusDetails = {
|
statusDetails = {
|
||||||
icon: icons.IN_CINEMAS,
|
icon: icons.IN_CINEMAS,
|
||||||
title: 'In Cinemas',
|
title: translate('InCinemas'),
|
||||||
message: 'Movie is in Cinemas'
|
message: translate('InCinemasMsg')
|
||||||
};
|
};
|
||||||
} else if (status === 'released') {
|
} else if (status === 'released') {
|
||||||
statusDetails = {
|
statusDetails = {
|
||||||
icon: icons.MOVIE_FILE,
|
icon: icons.MOVIE_FILE,
|
||||||
title: 'Released',
|
title: translate('Released'),
|
||||||
message: 'Movie is released'
|
message: translate('ReleasedMsg')
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ function NoMovie(props) {
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className={styles.message}>
|
<div className={styles.message}>
|
||||||
No movies found, to get started you'll want to add a new movie or import some existing ones.
|
{translate('NoMoviesExist')}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={styles.buttonContainer}>
|
<div className={styles.buttonContainer}>
|
||||||
|
@ -11,7 +11,7 @@ import styles from './MovieFileEditorTableContent.css';
|
|||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
name: 'title',
|
name: 'title',
|
||||||
label: 'Relative Path',
|
label: translate('RelativePath'),
|
||||||
isVisible: true
|
isVisible: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -81,7 +81,7 @@ class SelectQualityModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Manual Import - Select Quality
|
{translate('ManualImportSelectQuality')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
@ -146,7 +146,7 @@ class SelectQualityModalContent extends Component {
|
|||||||
kind={kinds.SUCCESS}
|
kind={kinds.SUCCESS}
|
||||||
onPress={this.onQualitySelect}
|
onPress={this.onQualitySelect}
|
||||||
>
|
>
|
||||||
Select Quality
|
{translate('SelectQuality')}
|
||||||
</Button>
|
</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
@ -154,7 +154,7 @@ class CustomFormat extends Component {
|
|||||||
message={
|
message={
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
Are you sure you want to delete custom format '{name}'?
|
{translate('AreYouSureYouWantToDeleteFormat', [name])}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ class EditCustomFormatModalContent extends Component {
|
|||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
|
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
{id ? 'Edit Custom Format' : 'Add Custom Format'}
|
{id ? translate('EditCustomFormat') : translate('AddCustomFormat')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
@ -125,7 +125,7 @@ class EditCustomFormatModalContent extends Component {
|
|||||||
>
|
>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>
|
<FormLabel>
|
||||||
Name
|
{translate('Name')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
|
@ -58,7 +58,7 @@ class AddSpecificationItem extends Component {
|
|||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
onPress={this.onSpecificationSelect}
|
onPress={this.onSpecificationSelect}
|
||||||
>
|
>
|
||||||
Custom
|
{translate('Custom')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Menu className={styles.presetsMenu}>
|
<Menu className={styles.presetsMenu}>
|
||||||
@ -66,7 +66,7 @@ class AddSpecificationItem extends Component {
|
|||||||
className={styles.presetsMenuButton}
|
className={styles.presetsMenuButton}
|
||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
>
|
>
|
||||||
Presets
|
{translate('Presets')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<MenuContent>
|
<MenuContent>
|
||||||
|
@ -64,7 +64,7 @@ function EditSpecificationModalContent(props) {
|
|||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>
|
<FormLabel>
|
||||||
Name
|
{translate('Name')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
@ -92,7 +92,7 @@ function EditSpecificationModalContent(props) {
|
|||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>
|
<FormLabel>
|
||||||
Negate
|
{translate('Negate')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
@ -106,7 +106,7 @@ function EditSpecificationModalContent(props) {
|
|||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>
|
<FormLabel>
|
||||||
Required
|
{translate('Required')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
|
@ -92,14 +92,14 @@ class Specification extends Component {
|
|||||||
{
|
{
|
||||||
negate &&
|
negate &&
|
||||||
<Label kind={kinds.DANGER}>
|
<Label kind={kinds.DANGER}>
|
||||||
{'Negated'}
|
{translate('Negated')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
required &&
|
required &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
{'Required'}
|
{translate('Required')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@ -118,7 +118,7 @@ class Specification extends Component {
|
|||||||
message={
|
message={
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
Are you sure you want to delete format tag '{name}'?
|
{translate('AreYouSureYouWantToDeleteFormat', [name])}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ class AddDownloadClientItem extends Component {
|
|||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
onPress={this.onDownloadClientSelect}
|
onPress={this.onDownloadClientSelect}
|
||||||
>
|
>
|
||||||
Custom
|
{translate('Custom')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Menu className={styles.presetsMenu}>
|
<Menu className={styles.presetsMenu}>
|
||||||
@ -66,7 +66,7 @@ class AddDownloadClientItem extends Component {
|
|||||||
className={styles.presetsMenuButton}
|
className={styles.presetsMenuButton}
|
||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
>
|
>
|
||||||
Presets
|
{translate('Presets')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<MenuContent>
|
<MenuContent>
|
||||||
|
@ -32,7 +32,7 @@ class AddDownloadClientModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Add DownloadClient
|
{translate('AddDownloadClient')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -73,13 +73,13 @@ class DownloadClient extends Component {
|
|||||||
{
|
{
|
||||||
enable ?
|
enable ?
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
Enabled
|
{translate('Enabled')}
|
||||||
</Label> :
|
</Label> :
|
||||||
<Label
|
<Label
|
||||||
kind={kinds.DISABLED}
|
kind={kinds.DISABLED}
|
||||||
outline={true}
|
outline={true}
|
||||||
>
|
>
|
||||||
Disabled
|
{translate('Disabled')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ class DownloadClient extends Component {
|
|||||||
kind={kinds.DISABLED}
|
kind={kinds.DISABLED}
|
||||||
outline={true}
|
outline={true}
|
||||||
>
|
>
|
||||||
Priority: {priority}
|
{translate('PrioritySettings', [priority])}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@ -53,7 +53,7 @@ class EditDownloadClientModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
{`${id ? 'Edit' : 'Add'} Download Client - ${implementationName}`}
|
{`${id ? translate('Edit') : translate('Add')} ${translate('DownloadClient')} - ${implementationName}`}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -8,9 +8,9 @@ import { inputTypes } from 'Helpers/Props';
|
|||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
const logLevelOptions = [
|
const logLevelOptions = [
|
||||||
{ key: 'info', value: 'Info' },
|
{ key: 'info', value: translate('Info') },
|
||||||
{ key: 'debug', value: 'Debug' },
|
{ key: 'debug', value: translate('Debug') },
|
||||||
{ key: 'trace', value: 'Trace' }
|
{ key: 'trace', value: translate('Trace') }
|
||||||
];
|
];
|
||||||
|
|
||||||
function LoggingSettings(props) {
|
function LoggingSettings(props) {
|
||||||
|
@ -25,9 +25,9 @@ function ProxySettings(props) {
|
|||||||
} = settings;
|
} = settings;
|
||||||
|
|
||||||
const proxyTypeOptions = [
|
const proxyTypeOptions = [
|
||||||
{ key: 'http', value: 'HTTP(S)' },
|
{ key: 'http', value: translate('HttpHttps') },
|
||||||
{ key: 'socks4', value: 'Socks4' },
|
{ key: 'socks4', value: translate('Socks4') },
|
||||||
{ key: 'socks5', value: 'Socks5 (Support TOR)' }
|
{ key: 'socks5', value: translate('Socks5') }
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -12,15 +12,15 @@ import { icons, inputTypes, kinds } from 'Helpers/Props';
|
|||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
const authenticationMethodOptions = [
|
const authenticationMethodOptions = [
|
||||||
{ key: 'none', value: 'None' },
|
{ key: 'none', value: translate('None') },
|
||||||
{ key: 'basic', value: 'Basic (Browser Popup)' },
|
{ key: 'basic', value: translate('AuthBasic') },
|
||||||
{ key: 'forms', value: 'Forms (Login Page)' }
|
{ key: 'forms', value: translate('AuthForm') }
|
||||||
];
|
];
|
||||||
|
|
||||||
const certificateValidationOptions = [
|
const certificateValidationOptions = [
|
||||||
{ key: 'enabled', value: 'Enabled' },
|
{ key: 'enabled', value: translate('Enabled') },
|
||||||
{ key: 'disabledForLocalAddresses', value: 'Disabled for Local Addresses' },
|
{ key: 'disabledForLocalAddresses', value: translate('CertValidationNoLocal') },
|
||||||
{ key: 'disabled', value: 'Disabled' }
|
{ key: 'disabled', value: translate('Disabled') }
|
||||||
];
|
];
|
||||||
|
|
||||||
class SecuritySettings extends Component {
|
class SecuritySettings extends Component {
|
||||||
|
@ -38,10 +38,10 @@ function UpdateSettings(props) {
|
|||||||
value: titleCase(packageUpdateMechanism)
|
value: titleCase(packageUpdateMechanism)
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
updateOptions.push({ key: 'builtIn', value: 'Built-In' });
|
updateOptions.push({ key: 'builtIn', value: translate('BuiltIn') });
|
||||||
}
|
}
|
||||||
|
|
||||||
updateOptions.push({ key: 'script', value: 'Script' });
|
updateOptions.push({ key: 'script', value: translate('Script') });
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FieldSet legend={translate('Updates')}>
|
<FieldSet legend={translate('Updates')}>
|
||||||
|
@ -39,7 +39,7 @@ function EditImportExclusionModalContent(props) {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
{id ? 'Edit List Exclusion' : 'Add List Exclusion'}
|
{id ? translate('EditListExclusion') : translate('AddListExclusion')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody className={styles.body}>
|
<ModalBody className={styles.body}>
|
||||||
|
@ -58,7 +58,7 @@ class AddImportListItem extends Component {
|
|||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
onPress={this.onImportListSelect}
|
onPress={this.onImportListSelect}
|
||||||
>
|
>
|
||||||
Custom
|
{translate('Custom')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Menu className={styles.presetsMenu}>
|
<Menu className={styles.presetsMenu}>
|
||||||
@ -66,7 +66,7 @@ class AddImportListItem extends Component {
|
|||||||
className={styles.presetsMenuButton}
|
className={styles.presetsMenuButton}
|
||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
>
|
>
|
||||||
Presets
|
{translate('Presets')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<MenuContent>
|
<MenuContent>
|
||||||
|
@ -52,7 +52,7 @@ function EditImportListModalContent(props) {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
{`${id ? 'Edit' : 'Add'} List - ${implementationName}`}
|
{`${id ? translate('Edit') : translate('Add')} ${translate('List')} - ${implementationName}`}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -74,14 +74,14 @@ class ImportList extends Component {
|
|||||||
{
|
{
|
||||||
enabled &&
|
enabled &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
Enabled
|
{translate('Enabled')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
enableAuto &&
|
enableAuto &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
Auto
|
{translate('Auto')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ class ImportList extends Component {
|
|||||||
kind={kinds.DISABLED}
|
kind={kinds.DISABLED}
|
||||||
outline={true}
|
outline={true}
|
||||||
>
|
>
|
||||||
Disabled
|
{translate('Disabled')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@ -19,11 +19,11 @@ function ImportListOptions(props) {
|
|||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const cleanLibraryLevelOptions = [
|
const cleanLibraryLevelOptions = [
|
||||||
{ key: 'disabled', value: 'Disabled' },
|
{ key: 'disabled', value: translate('Disabled') },
|
||||||
{ key: 'logOnly', value: 'Log Only' },
|
{ key: 'logOnly', value: translate('LogOnly') },
|
||||||
{ key: 'keepAndUnmonitor', value: 'Keep and Unmonitor Movie' },
|
{ key: 'keepAndUnmonitor', value: translate('KeepAndUnmonitorMovie') },
|
||||||
{ key: 'removeAndKeep', value: 'Remove Movie and Keep Files' },
|
{ key: 'removeAndKeep', value: translate('RemoveMovieAndKeepFiles') },
|
||||||
{ key: 'removeAndDelete', value: 'Remove Movie and Delete Files' }
|
{ key: 'removeAndDelete', value: translate('RemoveMovieAndDeleteFiles') }
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -58,7 +58,7 @@ class AddIndexerItem extends Component {
|
|||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
onPress={this.onIndexerSelect}
|
onPress={this.onIndexerSelect}
|
||||||
>
|
>
|
||||||
Custom
|
{translate('Custom')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Menu className={styles.presetsMenu}>
|
<Menu className={styles.presetsMenu}>
|
||||||
@ -66,7 +66,7 @@ class AddIndexerItem extends Component {
|
|||||||
className={styles.presetsMenuButton}
|
className={styles.presetsMenuButton}
|
||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
>
|
>
|
||||||
Presets
|
{translate('Presets')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<MenuContent>
|
<MenuContent>
|
||||||
|
@ -32,7 +32,7 @@ class AddIndexerModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Add Indexer
|
{translate('AddIndexer')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -98,7 +98,7 @@ class Indexer extends Component {
|
|||||||
{
|
{
|
||||||
supportsRss && enableRss &&
|
supportsRss && enableRss &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
RSS
|
{translate('RSS')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,21 +16,21 @@ import NamingConnector from './Naming/NamingConnector';
|
|||||||
import AddRootFolderConnector from './RootFolder/AddRootFolderConnector';
|
import AddRootFolderConnector from './RootFolder/AddRootFolderConnector';
|
||||||
|
|
||||||
const rescanAfterRefreshOptions = [
|
const rescanAfterRefreshOptions = [
|
||||||
{ key: 'always', value: 'Always' },
|
{ key: 'always', value: translate('Always') },
|
||||||
{ key: 'afterManual', value: 'After Manual Refresh' },
|
{ key: 'afterManual', value: translate('AfterManualRefresh') },
|
||||||
{ key: 'never', value: 'Never' }
|
{ key: 'never', value: translate('Never') }
|
||||||
];
|
];
|
||||||
|
|
||||||
const downloadPropersAndRepacksOptions = [
|
const downloadPropersAndRepacksOptions = [
|
||||||
{ key: 'preferAndUpgrade', value: 'Prefer and Upgrade' },
|
{ key: 'preferAndUpgrade', value: translate('PreferAndUpgrade') },
|
||||||
{ key: 'doNotUpgrade', value: 'Do not Upgrade Automatically' },
|
{ key: 'doNotUpgrade', value: translate('DoNotUpgradeAutomatically') },
|
||||||
{ key: 'doNotPrefer', value: 'Do not Prefer' }
|
{ key: 'doNotPrefer', value: translate('DoNotPrefer') }
|
||||||
];
|
];
|
||||||
|
|
||||||
const fileDateOptions = [
|
const fileDateOptions = [
|
||||||
{ key: 'none', value: 'None' },
|
{ key: 'none', value: translate('None') },
|
||||||
{ key: 'cinemas', value: 'In Cinemas Date' },
|
{ key: 'cinemas', value: translate('InCinemasDate') },
|
||||||
{ key: 'release', value: 'Physical Release Date' }
|
{ key: 'release', value: translate('PhysicalReleaseDate') }
|
||||||
];
|
];
|
||||||
|
|
||||||
class MediaManagement extends Component {
|
class MediaManagement extends Component {
|
||||||
|
@ -13,10 +13,10 @@ import NamingModal from './NamingModal';
|
|||||||
import styles from './Naming.css';
|
import styles from './Naming.css';
|
||||||
|
|
||||||
const colonReplacementOptions = [
|
const colonReplacementOptions = [
|
||||||
{ key: 'delete', value: 'Delete' },
|
{ key: 'delete', value: translate('Delete') },
|
||||||
{ key: 'dash', value: 'Replace with Dash' },
|
{ key: 'dash', value: translate('ReplaceWithDash') },
|
||||||
{ key: 'spaceDash', value: 'Replace with Space Dash' },
|
{ key: 'spaceDash', value: translate('ReplaceWithSpaceDash') },
|
||||||
{ key: 'spaceDashSpace', value: 'Replace with Space Dash Space' }
|
{ key: 'spaceDashSpace', value: translate('ReplaceWithSpaceDashSpace') }
|
||||||
];
|
];
|
||||||
|
|
||||||
class Naming extends Component {
|
class Naming extends Component {
|
||||||
@ -91,13 +91,13 @@ class Naming extends Component {
|
|||||||
if (examples.movieExample) {
|
if (examples.movieExample) {
|
||||||
standardMovieFormatHelpTexts.push(`Movie: ${examples.movieExample}`);
|
standardMovieFormatHelpTexts.push(`Movie: ${examples.movieExample}`);
|
||||||
} else {
|
} else {
|
||||||
standardMovieFormatErrors.push({ message: 'Movie: Invalid Format' });
|
standardMovieFormatErrors.push({ message: translate('MovieInvalidFormat') });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (examples.movieFolderExample) {
|
if (examples.movieFolderExample) {
|
||||||
movieFolderFormatHelpTexts.push(`Example: ${examples.movieFolderExample}`);
|
movieFolderFormatHelpTexts.push(`Example: ${examples.movieFolderExample}`);
|
||||||
} else {
|
} else {
|
||||||
movieFolderFormatErrors.push({ message: 'Invalid Format' });
|
movieFolderFormatErrors.push({ message: translate('InvalidFormat') });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,9 +102,9 @@ class NamingModal extends Component {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const caseOptions = [
|
const caseOptions = [
|
||||||
{ key: 'title', value: 'Default Case' },
|
{ key: 'title', value: translate('DefaultCase') },
|
||||||
{ key: 'lower', value: 'Lower Case' },
|
{ key: 'lower', value: translate('LowerCase') },
|
||||||
{ key: 'upper', value: 'Upper Case' }
|
{ key: 'upper', value: translate('UpperCase') }
|
||||||
];
|
];
|
||||||
|
|
||||||
const fileNameTokens = [
|
const fileNameTokens = [
|
||||||
@ -174,7 +174,7 @@ class NamingModal extends Component {
|
|||||||
>
|
>
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
File Name Tokens
|
{translate('FileNameTokens')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -4,6 +4,7 @@ import FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';
|
|||||||
import Icon from 'Components/Icon';
|
import Icon from 'Components/Icon';
|
||||||
import Button from 'Components/Link/Button';
|
import Button from 'Components/Link/Button';
|
||||||
import { icons, kinds, sizes } from 'Helpers/Props';
|
import { icons, kinds, sizes } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import styles from './AddRootFolder.css';
|
import styles from './AddRootFolder.css';
|
||||||
|
|
||||||
class AddRootFolder extends Component {
|
class AddRootFolder extends Component {
|
||||||
@ -49,7 +50,7 @@ class AddRootFolder extends Component {
|
|||||||
className={styles.importButtonIcon}
|
className={styles.importButtonIcon}
|
||||||
name={icons.DRIVE}
|
name={icons.DRIVE}
|
||||||
/>
|
/>
|
||||||
Add Root Folder
|
{translate('AddRootFolder')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<FileBrowserModal
|
<FileBrowserModal
|
||||||
|
@ -3,6 +3,7 @@ import React, { Component } from 'react';
|
|||||||
import Card from 'Components/Card';
|
import Card from 'Components/Card';
|
||||||
import Label from 'Components/Label';
|
import Label from 'Components/Label';
|
||||||
import { kinds } from 'Helpers/Props';
|
import { kinds } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import EditMetadataModalConnector from './EditMetadataModalConnector';
|
import EditMetadataModalConnector from './EditMetadataModalConnector';
|
||||||
import styles from './Metadata.css';
|
import styles from './Metadata.css';
|
||||||
|
|
||||||
@ -66,13 +67,13 @@ class Metadata extends Component {
|
|||||||
{
|
{
|
||||||
enable ?
|
enable ?
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
Enabled
|
{translate('Enabled')}
|
||||||
</Label> :
|
</Label> :
|
||||||
<Label
|
<Label
|
||||||
kind={kinds.DISABLED}
|
kind={kinds.DISABLED}
|
||||||
outline={true}
|
outline={true}
|
||||||
>
|
>
|
||||||
Disabled
|
{translate('Disabled')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@ -81,7 +82,7 @@ class Metadata extends Component {
|
|||||||
enable && !!metadataFields.length &&
|
enable && !!metadataFields.length &&
|
||||||
<div>
|
<div>
|
||||||
<div className={styles.section}>
|
<div className={styles.section}>
|
||||||
Metadata
|
{translate('Metadata')}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -107,7 +108,7 @@ class Metadata extends Component {
|
|||||||
enable && !!imageFields.length &&
|
enable && !!imageFields.length &&
|
||||||
<div>
|
<div>
|
||||||
<div className={styles.section}>
|
<div className={styles.section}>
|
||||||
Images
|
{translate('Images')}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -9,6 +9,8 @@ import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
|||||||
import { inputTypes } from 'Helpers/Props';
|
import { inputTypes } from 'Helpers/Props';
|
||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
|
// Note: Do Not Translate Certification Countries
|
||||||
|
|
||||||
export const certificationCountryOptions = [
|
export const certificationCountryOptions = [
|
||||||
{ key: 'au', value: 'Australia' },
|
{ key: 'au', value: 'Australia' },
|
||||||
{ key: 'br', value: 'Brazil' },
|
{ key: 'br', value: 'Brazil' },
|
||||||
|
@ -58,7 +58,7 @@ class AddNotificationItem extends Component {
|
|||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
onPress={this.onNotificationSelect}
|
onPress={this.onNotificationSelect}
|
||||||
>
|
>
|
||||||
Custom
|
{translate('Custom')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Menu className={styles.presetsMenu}>
|
<Menu className={styles.presetsMenu}>
|
||||||
@ -66,7 +66,7 @@ class AddNotificationItem extends Component {
|
|||||||
className={styles.presetsMenuButton}
|
className={styles.presetsMenuButton}
|
||||||
size={sizes.SMALL}
|
size={sizes.SMALL}
|
||||||
>
|
>
|
||||||
Presets
|
{translate('Presets')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<MenuContent>
|
<MenuContent>
|
||||||
|
@ -28,7 +28,7 @@ class AddNotificationModalContent extends Component {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Add Notification
|
{translate('AddNotification')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -48,7 +48,7 @@ function EditNotificationModalContent(props) {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
{`${id ? 'Edit' : 'Add'} Connection - ${implementationName}`}
|
{`${id ? translate('Edit') : translate('Add')} ${translate('Connection')} - ${implementationName}`}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -82,42 +82,42 @@ class Notification extends Component {
|
|||||||
{
|
{
|
||||||
supportsOnGrab && onGrab &&
|
supportsOnGrab && onGrab &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
On Grab
|
{translate('OnGrab')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
supportsOnDelete && onDelete &&
|
supportsOnDelete && onDelete &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
On Delete
|
{translate('OnDelete')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
supportsOnDownload && onDownload &&
|
supportsOnDownload && onDownload &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
On Import
|
{translate('OnImport')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
supportsOnUpgrade && onDownload && onUpgrade &&
|
supportsOnUpgrade && onDownload && onUpgrade &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
On Upgrade
|
{translate('OnUpgrade')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
supportsOnRename && onRename &&
|
supportsOnRename && onRename &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
On Rename
|
{translate('OnRename')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
supportsOnHealthIssue && onHealthIssue &&
|
supportsOnHealthIssue && onHealthIssue &&
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
On Health Issue
|
{translate('OnHealthIssue')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ class Notification extends Component {
|
|||||||
kind={kinds.DISABLED}
|
kind={kinds.DISABLED}
|
||||||
outline={true}
|
outline={true}
|
||||||
>
|
>
|
||||||
Disabled
|
{translate('Disabled')}
|
||||||
</Label>
|
</Label>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,9 +88,9 @@ class DelayProfile extends Component {
|
|||||||
let preferred = titleCase(preferredProtocol);
|
let preferred = titleCase(preferredProtocol);
|
||||||
|
|
||||||
if (!enableUsenet) {
|
if (!enableUsenet) {
|
||||||
preferred = 'Only Torrent';
|
preferred = translate('OnlyTorrent');
|
||||||
} else if (!enableTorrent) {
|
} else if (!enableTorrent) {
|
||||||
preferred = 'Only Usenet';
|
preferred = translate('OnlyUsenet');
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -46,7 +46,7 @@ function EditDelayProfileModalContent(props) {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
{id ? 'Edit Delay Profile' : 'Add Delay Profile'}
|
{id ? translate('EditDelayProfile') : translate('AddDelayProfile')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
@ -113,7 +113,7 @@ function EditDelayProfileModalContent(props) {
|
|||||||
{
|
{
|
||||||
id === 1 ?
|
id === 1 ?
|
||||||
<Alert>
|
<Alert>
|
||||||
This is the default profile. It applies to all movies that don't have an explicit profile.
|
{translate('DefaultDelayProfile')}
|
||||||
</Alert> :
|
</Alert> :
|
||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
|
@ -5,6 +5,7 @@ import { connect } from 'react-redux';
|
|||||||
import { createSelector } from 'reselect';
|
import { createSelector } from 'reselect';
|
||||||
import { saveDelayProfile, setDelayProfileValue } from 'Store/Actions/settingsActions';
|
import { saveDelayProfile, setDelayProfileValue } from 'Store/Actions/settingsActions';
|
||||||
import selectSettings from 'Store/Selectors/selectSettings';
|
import selectSettings from 'Store/Selectors/selectSettings';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import EditDelayProfileModalContent from './EditDelayProfileModalContent';
|
import EditDelayProfileModalContent from './EditDelayProfileModalContent';
|
||||||
|
|
||||||
const newDelayProfile = {
|
const newDelayProfile = {
|
||||||
@ -17,10 +18,10 @@ const newDelayProfile = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const protocolOptions = [
|
const protocolOptions = [
|
||||||
{ key: 'preferUsenet', value: 'Prefer Usenet' },
|
{ key: 'preferUsenet', value: translate('PreferUsenet') },
|
||||||
{ key: 'preferTorrent', value: 'Prefer Torrent' },
|
{ key: 'preferTorrent', value: translate('PreferTorrent') },
|
||||||
{ key: 'onlyUsenet', value: 'Only Usenet' },
|
{ key: 'onlyUsenet', value: translate('OnlyUsenet') },
|
||||||
{ key: 'onlyTorrent', value: 'Only Torrent' }
|
{ key: 'onlyTorrent', value: translate('OnlyTorrent') }
|
||||||
];
|
];
|
||||||
|
|
||||||
function createDelayProfileSelector() {
|
function createDelayProfileSelector() {
|
||||||
|
@ -29,9 +29,9 @@ class Profiles extends Component {
|
|||||||
<QualityProfilesConnector />
|
<QualityProfilesConnector />
|
||||||
<DelayProfilesConnector />
|
<DelayProfilesConnector />
|
||||||
<div className={styles.addCustomFormatMessage}>
|
<div className={styles.addCustomFormatMessage}>
|
||||||
Looking for Release Profiles? Try
|
{translate('LookingForReleaseProfiles1')}
|
||||||
<Link to='/settings/customformats'> Custom Formats </Link>
|
<Link to='/settings/customformats'> {translate('CustomFormats')} </Link>
|
||||||
instead.
|
{translate('LookingForReleaseProfiles2')}
|
||||||
</div>
|
</div>
|
||||||
</DndProvider>
|
</DndProvider>
|
||||||
</PageContentBody>
|
</PageContentBody>
|
||||||
|
@ -140,7 +140,7 @@ class EditQualityProfileModalContent extends Component {
|
|||||||
onMeasure={this.onHeaderMeasure}
|
onMeasure={this.onHeaderMeasure}
|
||||||
>
|
>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
{id ? 'Edit Quality Profile' : 'Add Quality Profile'}
|
{id ? translate('EditQualityProfile') : translate('AddQualityProfile')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
</Measure>
|
</Measure>
|
||||||
|
|
||||||
@ -171,7 +171,7 @@ class EditQualityProfileModalContent extends Component {
|
|||||||
<div className={styles.formGroupWrapper}>
|
<div className={styles.formGroupWrapper}>
|
||||||
<FormGroup size={sizes.EXTRA_SMALL}>
|
<FormGroup size={sizes.EXTRA_SMALL}>
|
||||||
<FormLabel size={sizes.SMALL}>
|
<FormLabel size={sizes.SMALL}>
|
||||||
Name
|
{translate('Name')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
@ -184,7 +184,7 @@ class EditQualityProfileModalContent extends Component {
|
|||||||
|
|
||||||
<FormGroup size={sizes.EXTRA_SMALL}>
|
<FormGroup size={sizes.EXTRA_SMALL}>
|
||||||
<FormLabel size={sizes.SMALL}>
|
<FormLabel size={sizes.SMALL}>
|
||||||
Upgrades Allowed
|
{translate('UpgradesAllowed')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
@ -200,7 +200,7 @@ class EditQualityProfileModalContent extends Component {
|
|||||||
upgradeAllowed.value &&
|
upgradeAllowed.value &&
|
||||||
<FormGroup size={sizes.EXTRA_SMALL}>
|
<FormGroup size={sizes.EXTRA_SMALL}>
|
||||||
<FormLabel size={sizes.SMALL}>
|
<FormLabel size={sizes.SMALL}>
|
||||||
Upgrade Until Quality
|
{translate('UpgradeUntilQuality')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
@ -218,7 +218,7 @@ class EditQualityProfileModalContent extends Component {
|
|||||||
formatItems.value.length > 0 &&
|
formatItems.value.length > 0 &&
|
||||||
<FormGroup size={sizes.EXTRA_SMALL}>
|
<FormGroup size={sizes.EXTRA_SMALL}>
|
||||||
<FormLabel size={sizes.SMALL}>
|
<FormLabel size={sizes.SMALL}>
|
||||||
Minimum Custom Format Score
|
{translate('MinimumCustomFormatScore')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
@ -235,7 +235,7 @@ class EditQualityProfileModalContent extends Component {
|
|||||||
upgradeAllowed.value && formatItems.value.length > 0 &&
|
upgradeAllowed.value && formatItems.value.length > 0 &&
|
||||||
<FormGroup size={sizes.EXTRA_SMALL}>
|
<FormGroup size={sizes.EXTRA_SMALL}>
|
||||||
<FormLabel size={sizes.SMALL}>
|
<FormLabel size={sizes.SMALL}>
|
||||||
Upgrade Until Custom Format Score
|
{translate('UpgradeUntilCustomFormatScore')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
@ -250,7 +250,7 @@ class EditQualityProfileModalContent extends Component {
|
|||||||
|
|
||||||
<FormGroup size={sizes.EXTRA_SMALL}>
|
<FormGroup size={sizes.EXTRA_SMALL}>
|
||||||
<FormLabel size={sizes.SMALL}>
|
<FormLabel size={sizes.SMALL}>
|
||||||
Language
|
{translate('Language')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
@ -301,7 +301,7 @@ class EditQualityProfileModalContent extends Component {
|
|||||||
className={styles.deleteButtonContainer}
|
className={styles.deleteButtonContainer}
|
||||||
title={
|
title={
|
||||||
isInUse ?
|
isInUse ?
|
||||||
'Can\'t delete a quality profile that is attached to a movie' :
|
translate('QualityProfileInUse') :
|
||||||
undefined
|
undefined
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
|
@ -68,8 +68,8 @@ class QualityProfileFormatItems extends Component {
|
|||||||
if (profileFormatItems.length < 1) {
|
if (profileFormatItems.length < 1) {
|
||||||
return (
|
return (
|
||||||
<div className={styles.addCustomFormatMessage}>
|
<div className={styles.addCustomFormatMessage}>
|
||||||
Want more control over which downloads are preferred? Add a
|
{translate('MoreControlCFText')}
|
||||||
<Link to='/settings/customformats'> Custom Format </Link>
|
<Link to='/settings/customformats'> {translate('CustomFormat')} </Link>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -82,7 +82,7 @@ class QualityProfileFormatItems extends Component {
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<FormInputHelpText
|
<FormInputHelpText
|
||||||
text='Radarr scores each release using the sum of scores for matching custom formats. If a new release would improve the score, at the same or better quality, then Radarr will grab it.'
|
text={translate('CustomFormatHelpText')}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -114,10 +114,10 @@ class QualityProfileFormatItems extends Component {
|
|||||||
<div className={styles.formats}>
|
<div className={styles.formats}>
|
||||||
<div className={styles.headerContainer}>
|
<div className={styles.headerContainer}>
|
||||||
<div className={styles.headerTitle}>
|
<div className={styles.headerTitle}>
|
||||||
Custom Format
|
{translate('CustomFormat')}
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.headerScore}>
|
<div className={styles.headerScore}>
|
||||||
Score
|
{translate('Score')}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
|
@ -7,6 +7,7 @@ import Icon from 'Components/Icon';
|
|||||||
import Button from 'Components/Link/Button';
|
import Button from 'Components/Link/Button';
|
||||||
import Measure from 'Components/Measure';
|
import Measure from 'Components/Measure';
|
||||||
import { icons, kinds, sizes } from 'Helpers/Props';
|
import { icons, kinds, sizes } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import QualityProfileItemDragPreview from './QualityProfileItemDragPreview';
|
import QualityProfileItemDragPreview from './QualityProfileItemDragPreview';
|
||||||
import QualityProfileItemDragSource from './QualityProfileItemDragSource';
|
import QualityProfileItemDragSource from './QualityProfileItemDragSource';
|
||||||
import styles from './QualityProfileItems.css';
|
import styles from './QualityProfileItems.css';
|
||||||
@ -69,12 +70,12 @@ class QualityProfileItems extends Component {
|
|||||||
return (
|
return (
|
||||||
<FormGroup size={sizes.EXTRA_SMALL}>
|
<FormGroup size={sizes.EXTRA_SMALL}>
|
||||||
<FormLabel size={sizes.SMALL}>
|
<FormLabel size={sizes.SMALL}>
|
||||||
Qualities
|
{translate('Qualities')}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<FormInputHelpText
|
<FormInputHelpText
|
||||||
text="Qualities higher in the list are more preferred. Qualities within the same group are equal. Only checked qualities are wanted"
|
text={translate('QualitiesHelpText')}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -115,7 +116,7 @@ class QualityProfileItems extends Component {
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
{
|
{
|
||||||
editGroups ? 'Done Editing Groups' : 'Edit Groups'
|
editGroups ? translate('DoneEditingGroups') : translate('EditGroups')
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -152,10 +152,10 @@ class QualityDefinition extends Component {
|
|||||||
const minSixty = `${formatBytes(minBytes * 60)}/h`;
|
const minSixty = `${formatBytes(minBytes * 60)}/h`;
|
||||||
|
|
||||||
const preferredBytes = preferredSize * 1024 * 1024;
|
const preferredBytes = preferredSize * 1024 * 1024;
|
||||||
const preferredSixty = preferredBytes ? `${formatBytes(preferredBytes * 60)}/h` : 'Unlimited';
|
const preferredSixty = preferredBytes ? `${formatBytes(preferredBytes * 60)}/h` : translate('Unlimited');
|
||||||
|
|
||||||
const maxBytes = maxSize && maxSize * 1024 * 1024;
|
const maxBytes = maxSize && maxSize * 1024 * 1024;
|
||||||
const maxSixty = maxBytes ? `${formatBytes(maxBytes * 60)}/h` : 'Unlimited';
|
const maxSixty = maxBytes ? `${formatBytes(maxBytes * 60)}/h` : translate('Unlimited');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.qualityDefinition}>
|
<div className={styles.qualityDefinition}>
|
||||||
@ -243,7 +243,7 @@ class QualityDefinition extends Component {
|
|||||||
advancedSettings &&
|
advancedSettings &&
|
||||||
<div className={styles.megabytesPerMinute}>
|
<div className={styles.megabytesPerMinute}>
|
||||||
<div>
|
<div>
|
||||||
Min
|
{translate('Min')}
|
||||||
|
|
||||||
<NumberInput
|
<NumberInput
|
||||||
className={styles.sizeInput}
|
className={styles.sizeInput}
|
||||||
@ -258,7 +258,7 @@ class QualityDefinition extends Component {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
Preferred
|
{translate('Preferred')}
|
||||||
|
|
||||||
<NumberInput
|
<NumberInput
|
||||||
className={styles.sizeInput}
|
className={styles.sizeInput}
|
||||||
@ -273,7 +273,7 @@ class QualityDefinition extends Component {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
Max
|
{translate('Max')}
|
||||||
|
|
||||||
<NumberInput
|
<NumberInput
|
||||||
className={styles.sizeInput}
|
className={styles.sizeInput}
|
||||||
|
@ -32,7 +32,7 @@ class QualityDefinitions extends Component {
|
|||||||
{
|
{
|
||||||
advancedSettings ?
|
advancedSettings ?
|
||||||
<div className={styles.megabytesPerMinute}>
|
<div className={styles.megabytesPerMinute}>
|
||||||
Megabytes Per Minute
|
{translate('MegabytesPerMinute')}
|
||||||
</div> :
|
</div> :
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@ class QualityDefinitions extends Component {
|
|||||||
|
|
||||||
<div className={styles.sizeLimitHelpTextContainer}>
|
<div className={styles.sizeLimitHelpTextContainer}>
|
||||||
<div className={styles.sizeLimitHelpText}>
|
<div className={styles.sizeLimitHelpText}>
|
||||||
Limits are automatically adjusted for the movie runtime.
|
{translate('QualityLimitsHelpText')}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</PageSectionContent>
|
</PageSectionContent>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import titleCase from 'Utilities/String/titleCase';
|
import titleCase from 'Utilities/String/titleCase';
|
||||||
|
import translate from '../../../Utilities/String/translate';
|
||||||
|
|
||||||
function TagDetailsDelayProfile(props) {
|
function TagDetailsDelayProfile(props) {
|
||||||
const {
|
const {
|
||||||
@ -20,16 +21,16 @@ function TagDetailsDelayProfile(props) {
|
|||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
enableUsenet ?
|
enableUsenet ?
|
||||||
`Usenet Delay: ${usenetDelay}` :
|
translate('UsenetDelayTime', [usenetDelay]) :
|
||||||
'Usenet disabled'
|
translate('UsenetDisabled')
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
enableTorrent ?
|
enableTorrent ?
|
||||||
`Torrent Delay: ${torrentDelay}` :
|
translate('TorrentDelayTime', [torrentDelay]) :
|
||||||
'Torrents disabled'
|
translate('TorrentsDisabled')
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -29,7 +29,7 @@ function TagDetailsModalContent(props) {
|
|||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Tag Details - {label}
|
{translate('TagDetails', [label])}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
@ -126,7 +126,7 @@ class Tag extends Component {
|
|||||||
{
|
{
|
||||||
!isTagUsed &&
|
!isTagUsed &&
|
||||||
<div>
|
<div>
|
||||||
No links
|
{translate('NoLinks')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ import SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';
|
|||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
export const firstDayOfWeekOptions = [
|
export const firstDayOfWeekOptions = [
|
||||||
{ key: 0, value: 'Sunday' },
|
{ key: 0, value: translate('Sunday') },
|
||||||
{ key: 1, value: 'Monday' }
|
{ key: 1, value: translate('Monday') }
|
||||||
];
|
];
|
||||||
|
|
||||||
export const weekColumnOptions = [
|
export const weekColumnOptions = [
|
||||||
|
@ -14,7 +14,7 @@ import styles from './RestoreBackupModalContent.css';
|
|||||||
|
|
||||||
function getErrorMessage(error) {
|
function getErrorMessage(error) {
|
||||||
if (!error || !error.responseJSON || !error.responseJSON.message) {
|
if (!error || !error.responseJSON || !error.responseJSON.message) {
|
||||||
return 'Error restoring backup';
|
return translate('ErrorRestoringBackup');
|
||||||
}
|
}
|
||||||
|
|
||||||
return error.responseJSON.message;
|
return error.responseJSON.message;
|
||||||
@ -146,7 +146,7 @@ class RestoreBackupModalContent extends Component {
|
|||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
{
|
{
|
||||||
!!id && `Would you like to restore the backup '${name}'?`
|
!!id && translate('WouldYouLikeToRestoreBackup', [name])
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -203,7 +203,7 @@ class RestoreBackupModalContent extends Component {
|
|||||||
|
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
<div className={styles.additionalInfo}>
|
<div className={styles.additionalInfo}>
|
||||||
Note: Radarr will automatically restart and reload the UI during the restore process.
|
{translate('RestartReloadNote')}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Button onPress={onModalClose}>
|
<Button onPress={onModalClose}>
|
||||||
@ -216,7 +216,7 @@ class RestoreBackupModalContent extends Component {
|
|||||||
isSpinning={isRestoring}
|
isSpinning={isRestoring}
|
||||||
onPress={this.onRestorePress}
|
onPress={this.onRestorePress}
|
||||||
>
|
>
|
||||||
Restore
|
{translate('Restore')}
|
||||||
</SpinnerButton>
|
</SpinnerButton>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
@ -83,7 +83,7 @@ function LogsTable(props) {
|
|||||||
{
|
{
|
||||||
isPopulated && !error && !items.length &&
|
isPopulated && !error && !items.length &&
|
||||||
<div>
|
<div>
|
||||||
No events found
|
{translate('NoEventsFound')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ function LogsTableDetailsModal(props) {
|
|||||||
onModalClose={onModalClose}
|
onModalClose={onModalClose}
|
||||||
>
|
>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
Details
|
{translate('Details')}
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
|
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user