1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-09-17 15:02:34 +02: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 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 translate from 'Utilities/String/translate';
class BlacklistDetailsModal extends Component { class BlacklistDetailsModal extends Component {
@ -68,7 +69,7 @@ class BlacklistDetailsModal extends Component {
<ModalFooter> <ModalFooter>
<Button onPress={onModalClose}> <Button onPress={onModalClose}>
Close {translate('Close')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</ModalContent> </ModalContent>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -6,9 +6,9 @@ import createMovieFileSelector from 'Store/Selectors/createMovieFileSelector';
function createMapStateToProps() { function createMapStateToProps() {
return createSelector( return createSelector(
createMovieFileSelector(), createMovieFileSelector(),
(episodeFile) => { (movieFile) => {
return { 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 ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader'; import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds } from 'Helpers/Props'; import { inputTypes, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
class SelectQualityModalContent extends Component { class SelectQualityModalContent extends Component {
@ -136,7 +137,7 @@ class SelectQualityModalContent extends Component {
<ModalFooter> <ModalFooter>
<Button onPress={onModalClose}> <Button onPress={onModalClose}>
Cancel {translate('Cancel')}
</Button> </Button>
<Button <Button

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -7,6 +7,7 @@ import createAjaxRequest from 'Utilities/createAjaxRequest';
import requestAction from 'Utilities/requestAction'; import requestAction from 'Utilities/requestAction';
import getSectionState from 'Utilities/State/getSectionState'; import getSectionState from 'Utilities/State/getSectionState';
import updateSectionState from 'Utilities/State/updateSectionState'; import updateSectionState from 'Utilities/State/updateSectionState';
import translate from 'Utilities/String/translate';
import createHandleActions from './Creators/createHandleActions'; import createHandleActions from './Creators/createHandleActions';
// //
@ -59,7 +60,7 @@ function showOAuthWindow(url, payload) {
responseJSON: [ responseJSON: [
{ {
propertyName: payload.name, 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: [ filterBuilderProps: [
{ {
name: 'title', name: 'title',
label: 'Title', label: translate('Title'),
type: filterBuilderTypes.STRING type: filterBuilderTypes.STRING
}, },
{ {
name: 'age', name: 'age',
label: 'Age', label: translate('Age'),
type: filterBuilderTypes.NUMBER type: filterBuilderTypes.NUMBER
}, },
{ {
name: 'protocol', name: 'protocol',
label: 'Protocol', label: translate('Protocol'),
type: filterBuilderTypes.EXACT, type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.PROTOCOL valueType: filterBuilderValueTypes.PROTOCOL
}, },
{ {
name: 'indexerId', name: 'indexerId',
label: 'Indexer', label: translate('Indexer'),
type: filterBuilderTypes.EXACT, type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.INDEXER valueType: filterBuilderValueTypes.INDEXER
}, },
{ {
name: 'size', name: 'size',
label: 'Size', label: translate('Size'),
type: filterBuilderTypes.NUMBER type: filterBuilderTypes.NUMBER
}, },
{ {
name: 'seeders', name: 'seeders',
label: 'Seeders', label: translate('Seeders'),
type: filterBuilderTypes.NUMBER type: filterBuilderTypes.NUMBER
}, },
{ {
name: 'peers', name: 'peers',
label: 'Peers', label: translate('Peers'),
type: filterBuilderTypes.NUMBER type: filterBuilderTypes.NUMBER
}, },
{ {
name: 'quality', name: 'quality',
label: 'Quality', label: translate('Quality'),
type: filterBuilderTypes.EXACT, type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.QUALITY valueType: filterBuilderValueTypes.QUALITY
}, },
{ {
name: 'rejectionCount', name: 'rejectionCount',
label: 'Rejection Count', label: translate('RejectionCount'),
type: filterBuilderTypes.NUMBER type: filterBuilderTypes.NUMBER
} }
], ],

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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