1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-11-04 10:02:40 +01:00

More Frontend Translation

This commit is contained in:
Qstick 2020-07-20 20:18:10 -04:00
parent 71492d4c6f
commit 82b546999a
83 changed files with 326 additions and 215 deletions

View File

@ -8,6 +8,7 @@ import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import translate from 'Utilities/String/translate';
class BlacklistDetailsModal extends Component {
@ -68,7 +69,7 @@ class BlacklistDetailsModal extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -8,6 +8,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import HistoryDetails from './HistoryDetails';
import styles from './HistoryDetailsModal.css';
@ -79,7 +80,7 @@ function HistoryDetailsModal(props) {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -10,6 +10,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
class RemoveQueueItemModal extends Component {
@ -116,7 +117,7 @@ class RemoveQueueItemModal extends Component {
<ModalFooter>
<Button onPress={this.onModalClose}>
Close
{translate('Close')}
</Button>
<Button

View File

@ -10,6 +10,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './RemoveQueueItemsModal.css';
class RemoveQueueItemsModal extends Component {
@ -120,7 +121,7 @@ class RemoveQueueItemsModal extends Component {
<ModalFooter>
<Button onPress={this.onModalClose}>
Close
{translate('Close')}
</Button>
<Button

View File

@ -184,7 +184,7 @@ class AddNewMovie extends Component {
to="/add/import"
kind={kinds.PRIMARY}
>
Import Existing Movies
{translate('ImportExistingMovies')}
</Button>
</div>
</div> :

View File

@ -17,17 +17,17 @@ import styles from './ImportMovieSelectFolder.css';
const rootFolderColumns = [
{
name: 'path',
label: 'Path',
label: translate('Path'),
isVisible: true
},
{
name: 'freeSpace',
label: 'Free Space',
label: translate('FreeSpace'),
isVisible: true
},
{
name: 'unmappedFolders',
label: 'Unmapped Folders',
label: translate('UnmappedFolders'),
isVisible: true
},
{

View File

@ -7,6 +7,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './ConnectionLostModal.css';
function ConnectionLostModal(props) {
@ -22,16 +23,16 @@ function ConnectionLostModal(props) {
>
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Connnection Lost
{translate('ConnectionLost')}
</ModalHeader>
<ModalBody>
<div>
Radarr has lost it's connection to the backend and will need to be reloaded to restore functionality.
{translate('ConnectionLostMessage')}
</div>
<div className={styles.automatic}>
Radarr will try to connect automatically, or you can click reload below.
{translate('ConnectionLostAutomaticMessage')}
</div>
</ModalBody>
<ModalFooter>
@ -39,7 +40,7 @@ function ConnectionLostModal(props) {
kind={kinds.PRIMARY}
onPress={onModalClose}
>
Reload
{translate('Reload')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -12,6 +12,7 @@ import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes } from 'Helpers/Props';
import { firstDayOfWeekOptions, timeFormatOptions, weekColumnOptions } from 'Settings/UI/UISettings';
import translate from 'Utilities/String/translate';
class CalendarOptionsModalContent extends Component {
@ -193,7 +194,7 @@ class CalendarOptionsModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -13,6 +13,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { icons, inputTypes, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
function getUrls(state) {
const {
@ -186,7 +187,7 @@ class CalendarLinkModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -14,18 +14,19 @@ import Scroller from 'Components/Scroller/Scroller';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { kinds, scrollDirections } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import FileBrowserRow from './FileBrowserRow';
import styles from './FileBrowserModalContent.css';
const columns = [
{
name: 'type',
label: 'Type',
label: translate('Type'),
isVisible: true
},
{
name: 'name',
label: 'Name',
label: translate('Name'),
isVisible: true
}
];
@ -223,13 +224,13 @@ class FileBrowserModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<Button
onPress={this.onOkPress}
>
Ok
{translate('Ok')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -8,6 +8,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import FilterBuilderRow from './FilterBuilderRow';
import styles from './FilterBuilderModalContent.css';
@ -192,7 +193,7 @@ class FilterBuilderModalContent extends Component {
<ModalFooter>
<Button onPress={onCancelPress}>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -200,7 +201,7 @@ class FilterBuilderModalContent extends Component {
error={saveError}
onPress={this.onSaveFilterPress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -59,7 +59,7 @@ function CustomFiltersModalContent(props) {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -6,6 +6,7 @@ import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import translate from 'Utilities/String/translate';
import styles from './ModalError.css';
function ModalError(props) {
@ -33,7 +34,7 @@ function ModalError(props) {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>);

View File

@ -6,6 +6,7 @@ import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import translate from 'Utilities/String/translate';
import styles from './KeyboardShortcutsModalContent.css';
function getShortcuts() {
@ -75,7 +76,7 @@ function KeyboardShortcutsModalContent(props) {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -214,7 +214,7 @@ class MovieSearchInput extends Component {
}
suggestionGroups.push({
title: 'Add New Movie',
title: translate('AddNewMovie'),
suggestions: [
{
type: ADD_NEW_TYPE,

View File

@ -12,7 +12,7 @@
display: flex;
align-items: center;
flex: 0 0 $sidebarWidth;
padding-left: 20px;
padding-left: 35px;
}
.logoFull,
@ -21,8 +21,8 @@
}
.logoFull {
width: 144px;
height: 48px;
width: 120px;
height: 40px;
}
.logo {

View File

@ -7,6 +7,7 @@ import MenuContent from 'Components/Menu/MenuContent';
import MenuItem from 'Components/Menu/MenuItem';
import MenuItemSeparator from 'Components/Menu/MenuItemSeparator';
import { align, icons, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './PageHeaderActionsMenu.css';
function PageHeaderActionsMenu(props) {
@ -32,7 +33,7 @@ function PageHeaderActionsMenu(props) {
className={styles.itemIcon}
name={icons.KEYBOARD}
/>
Keyboard Shortcuts
{translate('KeyboardShortcuts')}
</MenuItem>
<MenuItemSeparator />
@ -42,7 +43,7 @@ function PageHeaderActionsMenu(props) {
className={styles.itemIcon}
name={icons.RESTART}
/>
Restart
{translate('Restart')}
</MenuItem>
<MenuItem onPress={onShutdownPress}>
@ -51,7 +52,7 @@ function PageHeaderActionsMenu(props) {
name={icons.SHUTDOWN}
kind={kinds.DANGER}
/>
Shutdown
{translate('Shutdown')}
</MenuItem>
{

View File

@ -15,6 +15,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import TableOptionsColumn from './TableOptionsColumn';
import TableOptionsColumnDragPreview from './TableOptionsColumnDragPreview';
import TableOptionsColumnDragSource from './TableOptionsColumnDragSource';
@ -136,7 +137,7 @@ class TableOptionsModal extends Component {
isOpen ?
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Table Options
{translate('TableOptions')}
</ModalHeader>
<ModalBody>
@ -144,7 +145,7 @@ class TableOptionsModal extends Component {
{
hasPageSize ?
<FormGroup>
<FormLabel>Page Size</FormLabel>
<FormLabel>{translate('PageSize')}</FormLabel>
<FormInputGroup
type={inputTypes.NUMBER}
@ -168,11 +169,11 @@ class TableOptionsModal extends Component {
{
canModifyColumns ?
<FormGroup>
<FormLabel>Columns</FormLabel>
<FormLabel>{translate('Columns')}</FormLabel>
<div>
<FormInputHelpText
text="Choose which columns are visible and which order they appear in"
text={translate('TableOptionsColumnsMessage')}
/>
<div className={styles.columns}>
@ -231,7 +232,7 @@ class TableOptionsModal extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent> :

View File

@ -6,6 +6,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './ExcludeMovieModalContent.css';
class ExcludeMovieModalContent extends Component {
@ -44,7 +45,7 @@ class ExcludeMovieModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
<Button

View File

@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import Button from 'Components/Link/Button';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './NoDiscoverMovie.css';
function NoDiscoverMovie(props) {
@ -11,7 +12,7 @@ function NoDiscoverMovie(props) {
return (
<div>
<div className={styles.message}>
All movies are hidden due to the applied filter.
{translate('AllMoviesHiddenDueToFilter')}
</div>
</div>
);
@ -28,7 +29,7 @@ function NoDiscoverMovie(props) {
to="/add/import"
kind={kinds.PRIMARY}
>
Import Existing Movies
{translate('ImportExistingMovies')}
</Button>
</div>
@ -37,7 +38,7 @@ function NoDiscoverMovie(props) {
to="/add/new"
kind={kinds.PRIMARY}
>
Add New Movie
{translate('AddNewMovie')}
</Button>
</div>
@ -46,7 +47,7 @@ function NoDiscoverMovie(props) {
to="/settings/netimports"
kind={kinds.PRIMARY}
>
Add List
{translate('AddList')}
</Button>
</div>
</div>

View File

@ -11,6 +11,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
const posterSizeOptions = [
{ key: 'small', value: 'Small' },
@ -114,7 +115,7 @@ class AddListMovieOverviewOptionsModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -11,6 +11,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
const posterSizeOptions = [
{ key: 'small', value: 'Small' },
@ -115,7 +116,7 @@ class AddListMoviePosterOptionsModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -10,6 +10,7 @@ import ModalHeader from 'Components/Modal/ModalHeader';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { icons, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import RecentFolderRow from './RecentFolderRow';
import styles from './InteractiveImportSelectFolderModalContent.css';
@ -149,7 +150,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -20,6 +20,7 @@ import SelectLanguageModal from 'InteractiveImport/Language/SelectLanguageModal'
import SelectMovieModal from 'InteractiveImport/Movie/SelectMovieModal';
import SelectQualityModal from 'InteractiveImport/Quality/SelectQualityModal';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
import translate from 'Utilities/String/translate';
import getSelectedIds from 'Utilities/Table/getSelectedIds';
import selectAll from 'Utilities/Table/selectAll';
import toggleSelected from 'Utilities/Table/toggleSelected';
@ -29,31 +30,31 @@ import styles from './InteractiveImportModalContent.css';
const columns = [
{
name: 'relativePath',
label: 'Relative Path',
label: translate('RelativePath'),
isSortable: true,
isVisible: true
},
{
name: 'movie',
label: 'Movie',
label: translate('Movie'),
isSortable: true,
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isSortable: true,
isVisible: true
},
{
name: 'languages',
label: 'Languages',
label: translate('Languages'),
isSortable: true,
isVisible: true
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
isSortable: true,
isVisible: true
},
@ -73,8 +74,8 @@ const filterExistingFilesOptions = {
};
const importModeOptions = [
{ key: 'move', value: 'Move Files' },
{ key: 'copy', value: 'Hardlink/Copy Files' }
{ key: 'move', value: translate('MoveFiles') },
{ key: 'copy', value: translate('HardlinkCopyFiles') }
];
const SELECT = 'select';
@ -331,7 +332,7 @@ class InteractiveImportModalContent extends Component {
<div className={styles.rightButtons}>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
{

View File

@ -11,6 +11,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './SelectLanguageModalContent.css';
class SelectLanguageModalContent extends Component {
@ -118,7 +119,7 @@ class SelectLanguageModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button

View File

@ -13,6 +13,7 @@ import Scroller from 'Components/Scroller/Scroller';
import VirtualTable from 'Components/Table/VirtualTable';
import VirtualTableRow from 'Components/Table/VirtualTableRow';
import { scrollDirections } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import SelectMovieRow from './SelectMovieRow';
import styles from './SelectMovieModalContent.css';
@ -172,7 +173,7 @@ class SelectMovieModalContent extends Component {
<div className={styles.path}>{relativePath}</div>
<div className={styles.buttons}>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
</div>
</ModalFooter>

View File

@ -11,6 +11,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
class SelectQualityModalContent extends Component {
@ -136,7 +137,7 @@ class SelectQualityModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button

View File

@ -5,61 +5,62 @@ import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { icons, sortDirections } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import InteractiveSearchRow from './InteractiveSearchRow';
import styles from './InteractiveSearchContent.css';
const columns = [
{
name: 'protocol',
label: 'Source',
label: translate('Source'),
isSortable: true,
isVisible: true
},
{
name: 'age',
label: 'Age',
label: translate('Age'),
isSortable: true,
isVisible: true
},
{
name: 'title',
label: 'Title',
label: translate('Title'),
isSortable: true,
isVisible: true
},
{
name: 'indexer',
label: 'Indexer',
label: translate('Indexer'),
isSortable: true,
isVisible: true
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
isSortable: true,
isVisible: true
},
{
name: 'peers',
label: 'Peers',
label: translate('Peers'),
isSortable: true,
isVisible: true
},
{
name: 'languageWeight',
label: 'Language',
label: translate('Language'),
isSortable: true,
isVisible: true
},
{
name: 'qualityWeight',
label: 'Quality',
label: translate('Quality'),
isSortable: true,
isVisible: true
},
{
name: 'customFormat',
label: 'Formats',
label: translate('Formats'),
isSortable: true,
isVisible: true
},
@ -67,7 +68,7 @@ const columns = [
name: 'customFormatScore',
label: React.createElement(Icon, {
name: icons.SCORE,
title: 'Custom Format score'
title: translate('CustomFormatScore')
}),
isSortable: true,
isVisible: true

View File

@ -134,7 +134,7 @@ class DeleteMovieModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
<Button

View File

@ -3,23 +3,24 @@ import React, { Component } from 'react';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import translate from 'Utilities/String/translate';
import MovieTitlesRow from './MovieTitlesRow';
import styles from './MovieTitlesTableContent.css';
const columns = [
{
name: 'altTitle',
label: 'Alternative Title',
label: translate('AlternativeTitle'),
isVisible: true
},
{
name: 'language',
label: 'Language',
label: translate('Language'),
isVisible: true
},
{
name: 'sourceType',
label: 'Type',
label: translate('Type'),
isVisible: true
}
];

View File

@ -79,7 +79,7 @@ class EditMovieModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Edit - {title}
{translate('Edit')} - {title}
</ModalHeader>
<ModalBody>
@ -87,7 +87,7 @@ class EditMovieModalContent extends Component {
{...otherProps}
>
<FormGroup>
<FormLabel>Monitored</FormLabel>
<FormLabel>{translate('Monitored')}</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
@ -99,7 +99,7 @@ class EditMovieModalContent extends Component {
</FormGroup>
<FormGroup>
<FormLabel>Minimum Availability</FormLabel>
<FormLabel>{translate('MinimumAvailability')}</FormLabel>
<FormInputGroup
type={inputTypes.AVAILABILITY_SELECT}
@ -110,7 +110,7 @@ class EditMovieModalContent extends Component {
</FormGroup>
<FormGroup>
<FormLabel>Quality Profile</FormLabel>
<FormLabel>{translate('QualityProfile')}</FormLabel>
<FormInputGroup
type={inputTypes.QUALITY_PROFILE_SELECT}
@ -121,7 +121,7 @@ class EditMovieModalContent extends Component {
</FormGroup>
<FormGroup>
<FormLabel>Path</FormLabel>
<FormLabel>{translate('Path')}</FormLabel>
<FormInputGroup
type={inputTypes.PATH}
@ -132,7 +132,7 @@ class EditMovieModalContent extends Component {
</FormGroup>
<FormGroup>
<FormLabel>Tags</FormLabel>
<FormLabel>{translate('Tags')}</FormLabel>
<FormInputGroup
type={inputTypes.TAG}
@ -156,14 +156,14 @@ class EditMovieModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerButton
isSpinning={isSaving}
onPress={this.onSavePress}
>
Save
{translate('Save')}
</SpinnerButton>
</ModalFooter>

View File

@ -121,7 +121,7 @@ class DeleteMovieModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button

View File

@ -8,6 +8,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { icons, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './OrganizeMovieModalContent.css';
function OrganizeMovieModalContent(props) {
@ -51,7 +52,7 @@ function OrganizeMovieModalContent(props) {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button

View File

@ -12,6 +12,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './TagsModalContent.css';
class TagsModalContent extends Component {
@ -162,14 +163,14 @@ class TagsModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.PRIMARY}
onPress={this.onApplyTagsPress}
>
Apply
{translate('Apply')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -16,17 +16,17 @@ const columns = [
},
{
name: 'sourceTitle',
label: 'Source Title',
label: translate('SourceTitle'),
isVisible: true
},
{
name: 'languages',
label: 'Languages',
label: translate('Languages'),
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isVisible: true
},
{

View File

@ -4,6 +4,7 @@ import MenuContent from 'Components/Menu/MenuContent';
import SortMenu from 'Components/Menu/SortMenu';
import SortMenuItem from 'Components/Menu/SortMenuItem';
import { align, sortDirections } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
function MovieIndexSortMenu(props) {
const {
@ -34,7 +35,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Title
{translate('Title')}
</SortMenuItem>
<SortMenuItem
@ -43,7 +44,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Studio
{translate('Studio')}
</SortMenuItem>
<SortMenuItem
@ -52,7 +53,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Quality Profile
{translate('QualityProfile')}
</SortMenuItem>
<SortMenuItem
@ -61,7 +62,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Added
{translate('Added')}
</SortMenuItem>
<SortMenuItem
@ -70,7 +71,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Year
{translate('Year')}
</SortMenuItem>
<SortMenuItem
@ -79,7 +80,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
In Cinemas
{translate('InCinemas')}
</SortMenuItem>
<SortMenuItem
@ -88,7 +89,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Physical Release
{translate('PhysicalRelease')}
</SortMenuItem>
<SortMenuItem
@ -97,7 +98,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Digital Release
{translate('DigitalRelease')}
</SortMenuItem>
<SortMenuItem
@ -106,7 +107,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Path
{translate('Path')}
</SortMenuItem>
<SortMenuItem
@ -115,7 +116,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Size on Disk
{translate('SizeOnDisk')}
</SortMenuItem>
<SortMenuItem
@ -124,7 +125,7 @@ function MovieIndexSortMenu(props) {
sortDirection={sortDirection}
onPress={onSortSelect}
>
Certification
{translate('Certification')}
</SortMenuItem>
</MenuContent>
</SortMenu>

View File

@ -11,6 +11,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
const posterSizeOptions = [
{ key: 'small', value: 'Small' },
@ -242,7 +243,7 @@ class MovieIndexOverviewOptionsModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -11,6 +11,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
const posterSizeOptions = [
{ key: 'small', value: 'Small' },
@ -191,7 +192,7 @@ class MovieIndexPosterOptionsModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import Button from 'Components/Link/Button';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './NoMovie.css';
function NoMovie(props) {
@ -11,7 +12,7 @@ function NoMovie(props) {
return (
<div>
<div className={styles.message}>
All movies are hidden due to the applied filter.
{translate('AllMoviesHiddenDueToFilter')}
</div>
</div>
);
@ -28,7 +29,7 @@ function NoMovie(props) {
to="/add/import"
kind={kinds.PRIMARY}
>
Import Existing Movies
{translate('ImportExistingMovies')}
</Button>
</div>
@ -37,7 +38,7 @@ function NoMovie(props) {
to="/add/new"
kind={kinds.PRIMARY}
>
Add New Movie
{translate('AddNewMovie')}
</Button>
</div>
</div>

View File

@ -4,6 +4,7 @@ import IconButton from 'Components/Link/IconButton';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { icons } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import MovieFileEditorRow from './MovieFileEditorRow';
import styles from './MovieFileEditorTableContent.css';
@ -15,32 +16,32 @@ const columns = [
},
{
name: 'videoCodec',
label: 'Video Codec',
label: translate('VideoCodec'),
isVisible: true
},
{
name: 'audioInfo',
label: 'Audio Info',
label: translate('AudioInfo'),
isVisible: true
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
isVisible: true
},
{
name: 'languages',
label: 'Languages',
label: translate('Languages'),
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isVisible: true
},
{
name: 'quality.customFormats',
label: 'Formats',
label: translate('Formats'),
isVisible: true
},
{

View File

@ -4,23 +4,24 @@ import IconButton from 'Components/Link/IconButton';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { icons } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import ExtraFileRow from './ExtraFileRow';
import styles from './ExtraFileTableContent.css';
const columns = [
{
name: 'relativePath',
label: 'Extra File',
label: translate('RelativePath'),
isVisible: true
},
{
name: 'extension',
label: 'Extension',
label: translate('Extension'),
isVisible: true
},
{
name: 'type',
label: 'Type',
label: translate('Type'),
isVisible: true
},
{

View File

@ -7,6 +7,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import MediaInfoPopover from './Editor/MediaInfoPopover';
function FileDetailsModal(props) {
@ -26,7 +27,7 @@ function FileDetailsModal(props) {
onModalClose={onModalClose}
>
<ModalHeader>
Details
{translate('Details')}
</ModalHeader>
<ModalBody>
@ -35,7 +36,7 @@ function FileDetailsModal(props) {
<ModalFooter>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -6,9 +6,9 @@ import createMovieFileSelector from 'Store/Selectors/createMovieFileSelector';
function createMapStateToProps() {
return createSelector(
createMovieFileSelector(),
(episodeFile) => {
(movieFile) => {
return {
language: episodeFile ? episodeFile.language : undefined
language: movieFile ? movieFile.language : undefined
};
}
);

View File

@ -11,6 +11,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
class SelectQualityModalContent extends Component {
@ -136,7 +137,7 @@ class SelectQualityModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button

View File

@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import getSelectedIds from 'Utilities/Table/getSelectedIds';
import selectAll from 'Utilities/Table/selectAll';
import toggleSelected from 'Utilities/Table/toggleSelected';
@ -91,7 +92,7 @@ class OrganizePreviewModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Organize & Rename
{translate('OrganizeAndRename')}
</ModalHeader>
<ModalBody>
@ -110,8 +111,8 @@ class OrganizePreviewModalContent extends Component {
<div>
{
renameMovies ?
<div>Success! My work is done, no files to rename.</div> :
<div>Renaming is disabled, nothing to rename</div>
<div>{translate('OrganizeModalSuccess')}</div> :
<div>{translate('OrganizeModalDisabled')}</div>
}
</div>
}
@ -121,14 +122,14 @@ class OrganizePreviewModalContent extends Component {
<div>
<Alert>
<div>
All paths are relative to:
{translate('OrganizeModalAllPathsRelative')}
<span className={styles.path}>
{path}
</span>
</div>
<div>
Naming pattern:
{translate('OrganizeModalNamingPattern')}
<span className={styles.standardMovieFormat}>
{standardMovieFormat}
</span>
@ -170,14 +171,14 @@ class OrganizePreviewModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.PRIMARY}
onPress={this.onOrganizePress}
>
Organize
{translate('Organize')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -7,6 +7,7 @@ import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableRow from 'Components/Table/TableRow';
import { icons, kinds } from 'Helpers/Props';
import formatBytes from 'Utilities/Number/formatBytes';
import translate from 'Utilities/String/translate';
import styles from './RootFolderRow.css';
function RootFolderRow(props) {
@ -33,7 +34,7 @@ function RootFolderRow(props) {
className={styles.unavailableLabel}
kind={kinds.DANGER}
>
Unavailable
{translate('Unavailable')}
</Label>
</div> :
@ -56,7 +57,7 @@ function RootFolderRow(props) {
<TableRowCell className={styles.actions}>
<IconButton
title="Remove root folder"
title={translate('RemoveRootFolder')}
name={icons.REMOVE}
onPress={onDeletePress}
/>

View File

@ -3,22 +3,23 @@ import React from 'react';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import translate from 'Utilities/String/translate';
import RootFolderRowConnector from './RootFolderRowConnector';
const rootFolderColumns = [
{
name: 'path',
label: 'Path',
label: translate('Path'),
isVisible: true
},
{
name: 'freeSpace',
label: 'Free Space',
label: translate('FreeSpace'),
isVisible: true
},
{
name: 'unmappedFolders',
label: 'Unmapped Folders',
label: translate('UnmappedFolders'),
isVisible: true
},
{

View File

@ -193,7 +193,7 @@ class EditCustomFormatModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -201,7 +201,7 @@ class EditCustomFormatModalContent extends Component {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
import Menu from 'Components/Menu/Menu';
import MenuContent from 'Components/Menu/MenuContent';
import { sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddSpecificationPresetMenuItem from './AddSpecificationPresetMenuItem';
import styles from './AddSpecificationItem.css';
@ -90,7 +91,7 @@ class AddSpecificationItem extends Component {
to={infoLink}
size={sizes.SMALL}
>
More info
{translate('MoreInfo')}
</Button>
</div>
</div>

View File

@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddSpecificationItem from './AddSpecificationItem';
import styles from './AddSpecificationModalContent.css';
@ -74,7 +75,7 @@ class AddSpecificationModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -128,14 +128,14 @@ function EditSpecificationModalContent(props) {
<Button
onPress={onCancelPress}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
isSpinning={false}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
import Menu from 'Components/Menu/Menu';
import MenuContent from 'Components/Menu/MenuContent';
import { sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddDownloadClientPresetMenuItem from './AddDownloadClientPresetMenuItem';
import styles from './AddDownloadClientItem.css';
@ -90,7 +91,7 @@ class AddDownloadClientItem extends Component {
to={infoLink}
size={sizes.SMALL}
>
More info
{translate('MoreInfo')}
</Button>
</div>
</div>

View File

@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddDownloadClientItem from './AddDownloadClientItem';
import styles from './AddDownloadClientModalContent.css';
@ -94,7 +95,7 @@ class AddDownloadClientModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -154,13 +154,13 @@ class EditDownloadClientModalContent extends Component {
error={saveError}
onPress={onTestPress}
>
Test
{translate('Test')}
</SpinnerErrorButton>
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -168,7 +168,7 @@ class EditDownloadClientModalContent extends Component {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -113,7 +113,7 @@ function EditRemotePathMappingModalContent(props) {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -121,7 +121,7 @@ function EditRemotePathMappingModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
import Menu from 'Components/Menu/Menu';
import MenuContent from 'Components/Menu/MenuContent';
import { sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddIndexerPresetMenuItem from './AddIndexerPresetMenuItem';
import styles from './AddIndexerItem.css';
@ -90,7 +91,7 @@ class AddIndexerItem extends Component {
to={infoLink}
size={sizes.SMALL}
>
More info
{translate('MoreInfo')}
</Button>
</div>
</div>

View File

@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddIndexerItem from './AddIndexerItem';
import styles from './AddIndexerModalContent.css';
@ -94,7 +95,7 @@ class AddIndexerModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -153,13 +153,13 @@ function EditIndexerModalContent(props) {
error={saveError}
onPress={onTestPress}
>
Test
{translate('Test')}
</SpinnerErrorButton>
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -167,7 +167,7 @@ function EditIndexerModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -99,7 +99,7 @@ function EditRestrictionModalContent(props) {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -107,7 +107,7 @@ function EditRestrictionModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -411,7 +411,7 @@ class NamingModal extends Component {
onSelectionChange={this.onInputSelectionChange}
/>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -12,6 +12,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
function EditMetadataModalContent(props) {
const {
@ -74,7 +75,7 @@ function EditMetadataModalContent(props) {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -82,7 +83,7 @@ function EditMetadataModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
import Menu from 'Components/Menu/Menu';
import MenuContent from 'Components/Menu/MenuContent';
import { sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddNetImportPresetMenuItem from './AddNetImportPresetMenuItem';
import styles from './AddNetImportItem.css';
@ -90,7 +91,7 @@ class AddNetImportItem extends Component {
to={infoLink}
size={sizes.SMALL}
>
More info
{translate('MoreInfo')}
</Button>
</div>
</div>

View File

@ -10,6 +10,7 @@ import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import titleCase from 'Utilities/String/titleCase';
import translate from 'Utilities/String/translate';
import AddNetImportItem from './AddNetImportItem';
import styles from './AddNetImportModalContent.css';
@ -31,7 +32,7 @@ class AddNetImportModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Add List
{translate('AddList')}
</ModalHeader>
<ModalBody>
@ -83,7 +84,7 @@ class AddNetImportModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -196,13 +196,13 @@ function EditNetImportModalContent(props) {
error={saveError}
onPress={onTestPress}
>
Test
{translate('Test')}
</SpinnerErrorButton>
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -210,7 +210,7 @@ function EditNetImportModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -113,7 +113,7 @@ function EditNetImportExclusionModalContent(props) {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -121,7 +121,7 @@ function EditNetImportExclusionModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
import Menu from 'Components/Menu/Menu';
import MenuContent from 'Components/Menu/MenuContent';
import { sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddNotificationPresetMenuItem from './AddNotificationPresetMenuItem';
import styles from './AddNotificationItem.css';
@ -90,7 +91,7 @@ class AddNotificationItem extends Component {
to={infoLink}
size={sizes.SMALL}
>
More info
{translate('MoreInfo')}
</Button>
</div>
</div>

View File

@ -6,6 +6,7 @@ import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import translate from 'Utilities/String/translate';
import AddNotificationItem from './AddNotificationItem';
import styles from './AddNotificationModalContent.css';
@ -65,7 +66,7 @@ class AddNotificationModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -228,13 +228,13 @@ function EditNotificationModalContent(props) {
error={saveError}
onPress={onTestPress}
>
Test
{translate('Test')}
</SpinnerErrorButton>
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -242,7 +242,7 @@ function EditNotificationModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -144,7 +144,7 @@ function EditDelayProfileModalContent(props) {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -152,7 +152,7 @@ function EditDelayProfileModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View File

@ -307,7 +307,7 @@ class EditQualityProfileModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -315,7 +315,7 @@ class EditQualityProfileModalContent extends Component {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</Measure>

View File

@ -5,6 +5,7 @@ import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import { icons } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AdvancedSettingsButton from './AdvancedSettingsButton';
import PendingChangesModal from './PendingChangesModal';
@ -61,7 +62,7 @@ class SettingsToolbar extends Component {
{
showSave &&
<PageToolbarButton
label={hasPendingChanges ? 'Save Changes' : 'No Changes'}
label={hasPendingChanges ? translate('SaveChanges') : translate('NoChanges')}
iconName={icons.SAVE}
isSpinning={isSaving}
isDisabled={!hasPendingChanges}

View File

@ -175,7 +175,7 @@ function TagDetailsModalContent(props) {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -219,24 +219,24 @@ export const defaultState = {
filterBuilderProps: [
{
name: 'monitored',
label: 'Monitored',
label: translate('Monitored'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.BOOL
},
{
name: 'title',
label: 'Title',
label: translate('Title'),
type: filterBuilderTypes.STRING
},
{
name: 'status',
label: 'Status',
label: translate('Status'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.MOVIE_STATUS
},
{
name: 'studio',
label: 'Studio',
label: translate('Studio'),
type: filterBuilderTypes.EXACT,
optionsSelector: function(items) {
const tagList = items.reduce((acc, movie) => {
@ -255,7 +255,7 @@ export const defaultState = {
},
{
name: 'collection',
label: 'Collection',
label: translate('Collection'),
type: filterBuilderTypes.ARRAY,
optionsSelector: function(items) {
const collectionList = items.reduce((acc, movie) => {
@ -274,58 +274,58 @@ export const defaultState = {
},
{
name: 'qualityProfileId',
label: 'Quality Profile',
label: translate('QualityProfile'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.QUALITY_PROFILE
},
{
name: 'added',
label: 'Added',
label: translate('Added'),
type: filterBuilderTypes.DATE,
valueType: filterBuilderValueTypes.DATE
},
{
name: 'year',
label: 'Year',
label: translate('Year'),
type: filterBuilderTypes.NUMBER
},
{
name: 'inCinemas',
label: 'In Cinemas',
label: translate('InCinemas'),
type: filterBuilderTypes.DATE,
valueType: filterBuilderValueTypes.DATE
},
{
name: 'physicalRelease',
label: 'Physical Release',
label: translate('PhysicalRelease'),
type: filterBuilderTypes.DATE,
valueType: filterBuilderValueTypes.DATE
},
{
name: 'digitalRelease',
label: 'Digital Release',
label: translate('DigitalRelease'),
type: filterBuilderTypes.DATE,
valueType: filterBuilderValueTypes.DATE
},
{
name: 'runtime',
label: 'Runtime',
label: translate('Runtime'),
type: filterBuilderTypes.NUMBER
},
{
name: 'path',
label: 'Path',
label: translate('Path'),
type: filterBuilderTypes.STRING
},
{
name: 'sizeOnDisk',
label: 'Size on Disk',
label: translate('SizeOnDisk'),
type: filterBuilderTypes.NUMBER,
valueType: filterBuilderValueTypes.BYTES
},
{
name: 'genres',
label: 'Genres',
label: translate('Genres'),
type: filterBuilderTypes.ARRAY,
optionsSelector: function(items) {
const genreList = items.reduce((acc, movie) => {
@ -344,12 +344,12 @@ export const defaultState = {
},
{
name: 'ratings',
label: 'Rating',
label: translate('Ratings'),
type: filterBuilderTypes.NUMBER
},
{
name: 'certification',
label: 'Certification',
label: translate('Certification'),
type: filterBuilderTypes.EXACT,
optionsSelector: function(items) {
const certificationList = items.reduce((acc, movie) => {
@ -368,7 +368,7 @@ export const defaultState = {
},
{
name: 'tags',
label: 'Tags',
label: translate('Tags'),
type: filterBuilderTypes.ARRAY,
valueType: filterBuilderValueTypes.TAG
}

View File

@ -7,6 +7,7 @@ import createAjaxRequest from 'Utilities/createAjaxRequest';
import requestAction from 'Utilities/requestAction';
import getSectionState from 'Utilities/State/getSectionState';
import updateSectionState from 'Utilities/State/updateSectionState';
import translate from 'Utilities/String/translate';
import createHandleActions from './Creators/createHandleActions';
//
@ -59,7 +60,7 @@ function showOAuthWindow(url, payload) {
responseJSON: [
{
propertyName: payload.name,
errorMessage: 'Pop-ups are being blocked by your browser'
errorMessage: translate('OAuthPopupMessage')
}
]
};

View File

@ -114,50 +114,50 @@ export const defaultState = {
filterBuilderProps: [
{
name: 'title',
label: 'Title',
label: translate('Title'),
type: filterBuilderTypes.STRING
},
{
name: 'age',
label: 'Age',
label: translate('Age'),
type: filterBuilderTypes.NUMBER
},
{
name: 'protocol',
label: 'Protocol',
label: translate('Protocol'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.PROTOCOL
},
{
name: 'indexerId',
label: 'Indexer',
label: translate('Indexer'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.INDEXER
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
type: filterBuilderTypes.NUMBER
},
{
name: 'seeders',
label: 'Seeders',
label: translate('Seeders'),
type: filterBuilderTypes.NUMBER
},
{
name: 'peers',
label: 'Peers',
label: translate('Peers'),
type: filterBuilderTypes.NUMBER
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.QUALITY
},
{
name: 'rejectionCount',
label: 'Rejection Count',
label: translate('RejectionCount'),
type: filterBuilderTypes.NUMBER
}
],

View File

@ -81,27 +81,27 @@ export const defaultState = {
columns: [
{
name: 'level',
columnLabel: 'Level',
columnLabel: translate('Level'),
isSortable: false,
isVisible: true,
isModifiable: false
},
{
name: 'logger',
label: 'Component',
label: translate('Component'),
isSortable: false,
isVisible: true,
isModifiable: false
},
{
name: 'message',
label: 'Message',
label: translate('Message'),
isVisible: true,
isModifiable: false
},
{
name: 'time',
label: 'Time',
label: translate('Time'),
isSortable: true,
isVisible: true,
isModifiable: false
@ -125,7 +125,7 @@ export const defaultState = {
},
{
key: 'info',
label: 'Info',
label: translate('Info'),
filters: [
{
key: 'level',
@ -136,7 +136,7 @@ export const defaultState = {
},
{
key: 'warn',
label: 'Warn',
label: translate('Warn'),
filters: [
{
key: 'level',
@ -147,7 +147,7 @@ export const defaultState = {
},
{
key: 'error',
label: 'Error',
label: translate('Error'),
filters: [
{
key: 'level',

View File

@ -20,12 +20,12 @@ const columns = [
},
{
name: 'name',
label: 'Name',
label: translate('Name'),
isVisible: true
},
{
name: 'time',
label: 'Time',
label: translate('Time'),
isVisible: true
},
{

View File

@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { icons, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './RestoreBackupModalContent.css';
function getErrorMessage(error) {
@ -200,7 +201,7 @@ class RestoreBackupModalContent extends Component {
</div>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<SpinnerButton

View File

@ -8,6 +8,7 @@ import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import Scroller from 'Components/Scroller/Scroller';
import { scrollDirections } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './LogsTableDetailsModal.css';
function LogsTableDetailsModal(props) {
@ -56,7 +57,7 @@ function LogsTableDetailsModal(props) {
<ModalFooter>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@ -15,17 +15,17 @@ import styles from './DiskSpace.css';
const columns = [
{
name: 'path',
label: 'Location',
label: translate('Location'),
isVisible: true
},
{
name: 'freeSpace',
label: 'Free Space',
label: translate('FreeSpace'),
isVisible: true
},
{
name: 'totalSpace',
label: 'Total Space',
label: translate('TotalSpace'),
isVisible: true
},
{

View File

@ -63,7 +63,7 @@ function getTestLink(source, props) {
return (
<SpinnerIconButton
name={icons.TEST}
title="Test All"
title={translate('TestAll')}
isSpinning={props.isTestingAllIndexers}
onPress={props.dispatchTestAllIndexers}
/>
@ -73,7 +73,7 @@ function getTestLink(source, props) {
return (
<SpinnerIconButton
name={icons.TEST}
title="Test All"
title={translate('TestAll')}
isSpinning={props.isTestingAllDownloadClients}
onPress={props.dispatchTestAllDownloadClients}
/>
@ -92,12 +92,12 @@ const columns = [
},
{
name: 'message',
label: 'Message',
label: translate('Message'),
isVisible: true
},
{
name: 'actions',
label: 'Actions',
label: translate('Actions'),
isVisible: true
}
];
@ -140,7 +140,7 @@ class Health extends Component {
{
!healthIssues &&
<div className={styles.healthOk}>
No issues with your configuration
{translate('HealthNoIssues')}
</div>
}

View File

@ -11,6 +11,7 @@ import formatDate from 'Utilities/Date/formatDate';
import formatDateTime from 'Utilities/Date/formatDateTime';
import formatTimeSpan from 'Utilities/Date/formatTimeSpan';
import titleCase from 'Utilities/String/titleCase';
import translate from 'Utilities/String/translate';
import styles from './QueuedTaskRow.css';
function getStatusIconProps(status, message) {
@ -234,7 +235,7 @@ class QueuedTaskRow extends Component {
<ConfirmModal
isOpen={isCancelConfirmModalOpen}
kind={kinds.DANGER}
title="Cancel"
title={translate('Cancel')}
message={'Are you sure you want to cancel this pending task?'}
confirmLabel="Yes, Cancel"
cancelLabel="No, Leave It"

View File

@ -4,31 +4,46 @@
"Activity": "Activity",
"Added": "Added",
"AddExclusion": "Add Exclusion",
"AddList": "Add List",
"AddMovies": "Add Movies",
"AddNew": "Add New",
"AddNewMessage": "It's easy to add a new movie, just start typing the name of the movie you want to add",
"AddNewMovie": "Add New Movie",
"AddNewTmdbIdMessage": "You can also search using TMDB Id of a movie. eg. tmdb:71663",
"Age": "Age",
"Agenda": "Agenda",
"All": "All",
"AllMoviesHiddenDueToFilter": "All movies are hidden due to applied filter.",
"AlternativeTitle": "Alternative Title",
"Analytics": "Analytics",
"AndNot": "and not",
"AppDataLocationHealthCheckMessage": "Updating will not be possible to prevent deleting AppData on Update",
"Apply": "Apply",
"AudioInfo": "Audio Info",
"Backup": "Backup",
"BackupNow": "Backup Now",
"Blacklist": "Blacklist",
"Calendar": "Calendar",
"Cancel": "Cancel",
"Cast": "Cast",
"Certification": "Certification",
"ChooseAnotherFolder": "Choose another Folder",
"Clear": "Clear",
"Close": "Close",
"Collection": "Collection",
"Columns": "Columns",
"CompletedDownloadHandling": "Completed Download Handling",
"Component": "Component",
"Connect": "Connect",
"ConnectionLost": "Connection Lost",
"ConnectionLostAutomaticMessage": "Radarr will try to connect automatically, or you can click reload below.",
"ConnectionLostMessage": "Radarr has lost it's connection to the backend and will need to be reloaded to restore functionality.",
"Connections": "Connections",
"ConnectSettingsSummary": "Notifications, connections to media servers/players and custom scripts",
"Crew": "Crew",
"CustomFilters": "Custom Filters",
"CustomFormats": "Custom Formats",
"CustomFormatScore": "Custom Format score",
"CustomFormatsSettingsSummary": "Custom Formats and Settings",
"CutoffUnmet": "Cut-off Unmet",
"Date": "Date",
@ -52,8 +67,10 @@
"DownloadClientStatusCheckSingleClientMessage": "Download clients unavailable due to failures: {0}",
"Downloaded": "Downloaded",
"Edit": "Edit",
"Error": "Error",
"Events": "Events",
"EventType": "Event Type",
"Extension": "Extension",
"Failed": "Failed",
"FailedDownloadHandling": "Failed Download Handling",
"FileManagement": "File Management",
@ -70,7 +87,9 @@
"Genres": "Genres",
"Grabbed": "Grabbed",
"GrabSelected": "Grab Selected",
"HardlinkCopyFiles": "Hardlink/Copy Files",
"Health": "Health",
"HealthNoIssues": "No issues with your configuration",
"HideAdvanced": "Hide Advanced",
"History": "History",
"Host": "Host",
@ -78,6 +97,7 @@
"Ignored": "Ignored",
"Import": "Import",
"Imported": "Imported",
"ImportExistingMovies": "Import Existing Movies",
"ImportFirstTip": "Make sure that your files include the quality in their filenames. eg.",
"ImportHeader": "Import movies you already have",
"ImportMechanismHealthCheckMessage": "Enable Completed Download Handling",
@ -94,12 +114,16 @@
"IndexersSettingsSummary": "Indexers and release restrictions",
"IndexerStatusCheckAllClientMessage": "All indexers are unavailable due to failures",
"IndexerStatusCheckSingleClientMessage": "Indexers unavailable due to failures: {0}",
"Info": "Info",
"KeyboardShortcuts": "Keyboard Shortcuts",
"Language": "Language",
"Languages": "Languages",
"LastWriteTime": "Last Write Time",
"Level": "Level",
"ListExclusions": "List Exclusions",
"Lists": "Lists",
"ListsSettingsSummary": "Import Lists, list exclusions",
"Location": "Location",
"LogFiles": "Log Files",
"LogFilesLocationMessage": "Log files are located in:",
"Logging": "Logging",
@ -108,31 +132,45 @@
"MediaInfoDllCheckMessage": "MediaInfo Library could not be loaded {0}",
"MediaManagement": "Media Management",
"MediaManagementSettingsSummary": "Naming and file management settings",
"Message": "Message",
"Metadata": "Metadata",
"MetadataSettingsSummary": "Create metadata files when movies are imported or refreshed",
"MinAvailability": "Min Availability",
"MinimumAvailability": "Minimum Availability",
"Missing": "Missing",
"Monitor": "Monitor",
"Monitored": "Monitored",
"MonitoredOnly": "Monitored Only",
"MonoNotNetCoreCheckMessage": "Please upgrade to the .NET Core version of Radarr",
"MonoTlsCheckMessage": "Radarr Mono 4.x tls workaround still enabled, consider removing MONO_TLS_PROVIDER=legacy environment option",
"Month": "Month",
"MoreInfo": "More Info",
"MountCheckMessage": "Mount containing a movie path is mounted read-only: ",
"MoveFiles": "Move Files",
"Movie": "Movie",
"MovieEditor": "Movie Editor",
"MovieIndex": "Movie Index",
"MovieNaming": "Movie Naming",
"Movies": "Movies",
"MovieTitle": "Movie Title",
"Name": "Name",
"NetImportStatusCheckAllClientMessage": "All lists are unavailable due to failures",
"NetImportStatusCheckSingleClientMessage": "Lists unavailable due to failures: {0}",
"NoChange": "No Change",
"NoChanges": "No Changes",
"OAuthPopupMessage": "Pop-ups are being blocked by your browser",
"Ok": "Ok",
"Options": "Options",
"Organize": "Organize",
"OrganizeAndRename": "Organize & Rename",
"OrganizeModalAllPathsRelative": "All paths are relative to:",
"OrganizeModalDisabled": "Renaming is disabled, nothing to rename",
"OrganizeModalNamingPattern": "Naming Pattern:",
"OrganizeModalSuccess": "Success! My work is done, no files to rename.",
"OutputPath": "Output Path",
"PageSize": "Page Size",
"Path": "Path",
"Peers": "Peers",
"PhysicalRelease": "Physical Release",
"PreviewRename": "Preview Rename",
"Profiles": "Profiles",
@ -153,17 +191,22 @@
"Ratings": "Ratings",
"Refresh": "Refresh",
"RefreshAndScan": "Refresh & Scan",
"RejectionCount": "Rejection Count",
"RelativePath": "Relative Path",
"ReleaseBranchCheckOfficialBranchMessage": "Branch {0} is not a valid Radarr release branch, you will not receive updates",
"ReleaseBranchCheckPreviousVersionMessage": "Branch {0} is for a previous version of Radarr, set branch to 'Aphrodite' for further updates",
"ReleaseGroup": "Release Group",
"ReleaseStatus": "Release Status",
"ReleaseTitle": "Release Title",
"Reload": "Reload",
"RemotePathMappings": "Remote Path Mappings",
"RemovedMovieCheckMultipleMessage": "Movies {0} were removed from TMDb",
"RemovedMovieCheckSingleMessage": "Movie {0} was removed from TMDb",
"RemoveRootFolder": "Remove root folder",
"RemoveSelected": "Remove Selected",
"Renamed": "Renamed",
"RenameFiles": "Rename Files",
"Restart": "Restart",
"RestoreBackup": "Restore Backup",
"Restrictions": "Restrictions",
"RootFolder": "Root Folder",
@ -172,6 +215,7 @@
"RootFolders": "Root Folders",
"RSSSync": "RSS Sync",
"Runtime": "Runtime",
"Save": "Save",
"SaveChanges": "Save Changes",
"Scheduled": "Scheduled",
"Search": "Search",
@ -180,25 +224,37 @@
"SearchForMissing": "Search for Missing",
"SearchSelected": "Search Selected",
"Security": "Security",
"Seeders": "Seeders",
"SelectAll": "SelectAll",
"SetTags": "Set Tags",
"Settings": "Settings",
"ShowAdvanced": "Show Advanced",
"Shutdown": "Shutdown",
"Size": "Size",
"SizeOnDisk": "Size on Disk",
"Sort": "Sort",
"Source": "Source",
"SourceTitle": "Source Title",
"Status": "Status",
"Studio": "Studio",
"Style": "Style",
"System": "System",
"TableOptions": "Table Options",
"TableOptionsColumnsMessage": "Choose which columns are visible and which order they appear in",
"Tags": "Tags",
"TagsSettingsSummary": "See all tags and how they are used. Unused tags can be removed",
"Tasks": "Tasks",
"Test": "Test",
"TestAll": "Test All",
"Time": "Time",
"Timeleft": "Timeleft",
"Title": "Title",
"Titles": "Titles",
"TotalSpace": "Total Space",
"Type": "Type",
"UI": "UI",
"UISettingsSummary": "Calendar, date and color impaired options",
"Unavailable": "Unavailable",
"UnmappedFolders": "Unmapped Folders",
"Unmonitored": "Unmonitored",
"UnselectAll": "Unselect All",
@ -208,8 +264,10 @@
"UpdateCheckUINotWritableMessage": "Cannot install update because UI folder '{0}' is not writable by the user '{1}'.",
"Updates": "Updates",
"UpdateSelected": "Update Selected",
"VideoCodec": "Video Codec",
"View": "View",
"Wanted": "Wanted",
"Warn": "Warn",
"Week": "Week",
"Year": "Year"
}