Translation Updates

Fixes #3058
Fixes #2889
This commit is contained in:
Qstick 2022-11-03 22:28:55 -05:00
parent 651a4358fc
commit 000ccf78ad
75 changed files with 665 additions and 461 deletions

View file

@ -108,14 +108,14 @@ class EditAlbumModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerButton
isSpinning={isSaving}
onPress={this.onSavePress}
>
Save
{translate('Save')}
</SpinnerButton>
</ModalFooter>

View file

@ -32,13 +32,13 @@ const columns = [
},
{
name: 'sortName',
label: 'Name',
label: translate('Name'),
isSortable: true,
isVisible: true
},
{
name: 'albumCount',
label: 'Albums',
label: translate('Albums'),
isSortable: false,
isVisible: true
}

View file

@ -211,14 +211,14 @@ class EditArtistModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerButton
isSpinning={isSaving}
onPress={this.onSavePress}
>
Save
{translate('Save')}
</SpinnerButton>
</ModalFooter>

View file

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

View file

@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './DeleteArtistModalContent.css';
class DeleteArtistModalContent extends Component {
@ -51,7 +52,7 @@ class DeleteArtistModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Delete Selected Artist
{translate('DeleteArtist')}
</ModalHeader>
<ModalBody>
@ -99,14 +100,14 @@ class DeleteArtistModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.DANGER}
onPress={this.onDeleteArtistConfirmed}
>
Delete
{translate('Delete')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -8,6 +8,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { icons, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './OrganizeArtistModalContent.css';
function OrganizeArtistModalContent(props) {
@ -20,7 +21,7 @@ function OrganizeArtistModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Organize Selected Artist
{translate('OrganizeArtist')}
</ModalHeader>
<ModalBody>
@ -51,14 +52,14 @@ function OrganizeArtistModalContent(props) {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.DANGER}
onPress={onOrganizeArtistPress}
>
Organize
{translate('Organize')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -61,9 +61,9 @@ class TagsModalContent extends Component {
} = this.state;
const applyTagsOptions = [
{ key: 'add', value: 'Add' },
{ key: 'remove', value: 'Remove' },
{ key: 'replace', value: 'Replace' }
{ key: 'add', value: translate('Add') },
{ key: 'remove', value: translate('Remove') },
{ key: 'replace', value: translate('Replace') }
];
return (
@ -169,14 +169,14 @@ class TagsModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.PRIMARY}
onPress={this.onApplyTagsPress}
>
Apply
{translate('Apply')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -18,32 +18,32 @@ const columns = [
},
{
name: 'album',
label: 'Album',
label: translate('Album'),
isVisible: true
},
{
name: 'sourceTitle',
label: 'Source Title',
label: translate('SourceTitle'),
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isVisible: true
},
{
name: 'date',
label: 'Date',
label: translate('Date'),
isVisible: true
},
{
name: 'details',
label: 'Details',
label: translate('Details'),
isVisible: true
},
{
name: 'actions',
label: 'Actions',
label: translate('Actions'),
isVisible: true
}
];

View file

@ -21,12 +21,12 @@ import styles from './FileBrowserModalContent.css';
const columns = [
{
name: 'type',
label: 'Type',
label: translate('Type'),
isVisible: true
},
{
name: 'name',
label: 'Name',
label: translate('Name'),
isVisible: true
}
];
@ -226,13 +226,13 @@ class FileBrowserModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<Button
onPress={this.onOkPress}
>
Ok
{translate('Ok')}
</Button>
</ModalFooter>
</ModalContent>

View file

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

View file

@ -5,6 +5,7 @@ import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import translate from 'Utilities/String/translate';
import CustomFilter from './CustomFilter';
import styles from './CustomFiltersModalContent.css';
@ -24,7 +25,7 @@ function CustomFiltersModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Custom Filters
{translate('CustomFilters')}
</ModalHeader>
<ModalBody>

View file

@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import Link from 'Components/Link/Link';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AlbumReleaseSelectInputConnector from './AlbumReleaseSelectInputConnector';
import AutoCompleteInput from './AutoCompleteInput';
import CaptchaInputConnector from './CaptchaInputConnector';
@ -227,7 +228,7 @@ function FormInputGroup(props) {
<Link
to={helpLink}
>
More Info
{translate('MoreInfo')}
</Link>
}

View file

@ -8,6 +8,7 @@ import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import TableRow from 'Components/Table/TableRow';
import tagShape from 'Helpers/Props/Shapes/tagShape';
import translate from 'Utilities/String/translate';
import getSelectedIds from 'Utilities/Table/getSelectedIds';
import selectAll from 'Utilities/Table/selectAll';
import toggleSelected from 'Utilities/Table/toggleSelected';
@ -16,7 +17,7 @@ import styles from './PlaylistInput.css';
const columns = [
{
name: 'name',
label: 'Playlist',
label: translate('Playlist'),
isSortable: false,
isVisible: true
}

View file

@ -1,5 +1,6 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import translate from 'Utilities/String/translate';
import FilterMenuItem from './FilterMenuItem';
import MenuContent from './MenuContent';
import MenuItem from './MenuItem';
@ -61,7 +62,7 @@ class FilterMenuContent extends Component {
{
showCustomFilters &&
<MenuItem onPress={onCustomFiltersPress}>
Custom Filters
{translate('CustomFilters')}
</MenuItem>
}
</MenuContent>

View file

@ -10,6 +10,7 @@ import { icons } from 'Helpers/Props';
import locationShape from 'Helpers/Props/Shapes/locationShape';
import dimensions from 'Styles/Variables/dimensions';
import HealthStatusConnector from 'System/Status/Health/HealthStatusConnector';
import translate from 'Utilities/String/translate';
import MessagesConnector from './Messages/MessagesConnector';
import PageSidebarItem from './PageSidebarItem';
import styles from './PageSidebar.css';
@ -20,24 +21,24 @@ const SIDEBAR_WIDTH = parseInt(dimensions.sidebarWidth);
const links = [
{
iconName: icons.ARTIST_CONTINUING,
title: 'Library',
title: translate('Library'),
to: '/',
alias: '/artist',
children: [
{
title: 'Add New',
title: translate('AddNew'),
to: '/add/search'
},
{
title: 'Mass Editor',
title: translate('MassEditor'),
to: '/artisteditor'
},
{
title: 'Album Studio',
title: translate('AlbumStudio'),
to: '/albumstudio'
},
{
title: 'Unmapped Files',
title: translate('UnmappedFiles'),
to: '/unmapped'
}
]
@ -45,26 +46,26 @@ const links = [
{
iconName: icons.CALENDAR,
title: 'Calendar',
title: translate('Calendar'),
to: '/calendar'
},
{
iconName: icons.ACTIVITY,
title: 'Activity',
title: translate('Activity'),
to: '/activity/queue',
children: [
{
title: 'Queue',
title: translate('Queue'),
to: '/activity/queue',
statusComponent: QueueStatusConnector
},
{
title: 'History',
title: translate('History'),
to: '/activity/history'
},
{
title: 'Blocklist',
title: translate('Blocklist'),
to: '/activity/blocklist'
}
]
@ -72,15 +73,15 @@ const links = [
{
iconName: icons.WARNING,
title: 'Wanted',
title: translate('Wanted'),
to: '/wanted/missing',
children: [
{
title: 'Missing',
title: translate('Missing'),
to: '/wanted/missing'
},
{
title: 'Cutoff Unmet',
title: translate('CutoffUnmet'),
to: '/wanted/cutoffunmet'
}
]
@ -88,51 +89,51 @@ const links = [
{
iconName: icons.SETTINGS,
title: 'Settings',
title: translate('Settings'),
to: '/settings',
children: [
{
title: 'Media Management',
title: translate('MediaManagement'),
to: '/settings/mediamanagement'
},
{
title: 'Profiles',
title: translate('Profiles'),
to: '/settings/profiles'
},
{
title: 'Quality',
title: translate('Quality'),
to: '/settings/quality'
},
{
title: 'Indexers',
title: translate('Indexers'),
to: '/settings/indexers'
},
{
title: 'Download Clients',
title: translate('DownloadClients'),
to: '/settings/downloadclients'
},
{
title: 'Import Lists',
title: translate('ImportLists'),
to: '/settings/importlists'
},
{
title: 'Connect',
title: translate('Connect'),
to: '/settings/connect'
},
{
title: 'Metadata',
title: translate('Metadata'),
to: '/settings/metadata'
},
{
title: 'Tags',
title: translate('Tags'),
to: '/settings/tags'
},
{
title: 'General',
title: translate('General'),
to: '/settings/general'
},
{
title: 'UI',
title: translate('UI'),
to: '/settings/ui'
}
]
@ -140,32 +141,32 @@ const links = [
{
iconName: icons.SYSTEM,
title: 'System',
title: translate('System'),
to: '/system/status',
children: [
{
title: 'Status',
title: translate('Status'),
to: '/system/status',
statusComponent: HealthStatusConnector
},
{
title: 'Tasks',
title: translate('Tasks'),
to: '/system/tasks'
},
{
title: 'Backup',
title: translate('Backup'),
to: '/system/backup'
},
{
title: 'Updates',
title: translate('Updates'),
to: '/system/updates'
},
{
title: 'Events',
title: translate('Events'),
to: '/system/events'
},
{
title: 'Log Files',
title: translate('LogFiles'),
to: '/system/logs/files'
}
]

View file

@ -18,22 +18,22 @@ import styles from './SelectAlbumModalContent.css';
const columns = [
{
name: 'title',
label: 'Album Title',
label: translate('AlbumTitle'),
isVisible: true
},
{
name: 'albumType',
label: 'Album Type',
label: translate('AlbumType'),
isVisible: true
},
{
name: 'releaseDate',
label: 'Release Date',
label: translate('ReleaseDate'),
isVisible: true
},
{
name: 'status',
label: 'Album Status',
label: translate('AlbumStatus'),
isVisible: true
}
];
@ -124,7 +124,7 @@ class SelectAlbumModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -10,18 +10,19 @@ import Scroller from 'Components/Scroller/Scroller';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { scrollDirections } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import SelectAlbumReleaseRow from './SelectAlbumReleaseRow';
import styles from './SelectAlbumReleaseModalContent.css';
const columns = [
{
name: 'album',
label: 'Album',
label: translate('Album'),
isVisible: true
},
{
name: 'release',
label: 'Album Release',
label: translate('AlbumRelease'),
isVisible: true
}
];
@ -42,7 +43,7 @@ class SelectAlbumReleaseModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Manual Import - Select Album Release
{translate('ManualImport')} - {translate('SelectAlbumRelease')}
</ModalHeader>
<ModalBody
@ -81,7 +82,7 @@ class SelectAlbumReleaseModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -47,7 +47,7 @@ class SelectArtistModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Manual Import - Select Artist
{translate('ManualImport')} - {translate('SelectArtist')}
</ModalHeader>
<ModalBody
@ -83,7 +83,7 @@ class SelectArtistModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
function formatAlbumFiles(items, album) {
@ -73,7 +74,7 @@ class ConfirmImportModalContent extends Component {
{
!isFetching && isPopulated &&
<ModalHeader>
Are you sure?
{translate('AreYouSure')}
</ModalHeader>
}
@ -105,14 +106,14 @@ class ConfirmImportModalContent extends Component {
!isFetching && isPopulated &&
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.DANGER}
onPress={onConfirmImportPress}
>
Proceed
{translate('Proceed')}
</Button>
</ModalFooter>

View file

@ -10,17 +10,18 @@ import ModalHeader from 'Components/Modal/ModalHeader';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { icons, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import RecentFolderRow from './RecentFolderRow';
import styles from './InteractiveImportSelectFolderModalContent.css';
const recentFoldersColumns = [
{
name: 'folder',
label: 'Folder'
label: translate('Folder')
},
{
name: 'lastUsed',
label: 'Last Used'
label: translate('LastUsed')
},
{
name: 'actions',
@ -75,7 +76,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Manual Import - Select Folder
{translate('ManualImport')} - {translate('SelectFolder')}
</ModalHeader>
<ModalBody>
@ -124,7 +125,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
name={icons.QUICK}
/>
Move Automatically
{translate('MoveAutomatically')}
</Button>
</div>
@ -141,7 +142,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
name={icons.INTERACTIVE}
/>
Interactive Import
{translate('InteractiveImport')}
</Button>
</div>
</div>
@ -149,7 +150,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -22,6 +22,7 @@ import SelectArtistModal from 'InteractiveImport/Artist/SelectArtistModal';
import ConfirmImportModal from 'InteractiveImport/Confirmation/ConfirmImportModal';
import SelectQualityModal from 'InteractiveImport/Quality/SelectQualityModal';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
import translate from 'Utilities/String/translate';
import getSelectedIds from 'Utilities/Table/getSelectedIds';
import selectAll from 'Utilities/Table/selectAll';
import toggleSelected from 'Utilities/Table/toggleSelected';
@ -31,35 +32,35 @@ import styles from './InteractiveImportModalContent.css';
const columns = [
{
name: 'path',
label: 'Path',
label: translate('Path'),
isSortable: true,
isVisible: true
},
{
name: 'artist',
label: 'Artist',
label: translate('Artist'),
isSortable: true,
isVisible: true
},
{
name: 'album',
label: 'Album',
label: translate('Album'),
isVisible: true
},
{
name: 'tracks',
label: 'Track(s)',
label: translate('Tracks'),
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isSortable: true,
isVisible: true
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
isSortable: true,
isVisible: true
},
@ -80,8 +81,8 @@ const filterExistingFilesOptions = {
};
const importModeOptions = [
{ key: 'move', value: 'Move Files' },
{ key: 'copy', value: 'Hardlink/Copy Files' }
{ key: 'move', value: translate('MoveFiles') },
{ key: 'copy', value: translate('HardlinkCopyFiles') }
];
const SELECT = 'select';
@ -288,23 +289,23 @@ class InteractiveImportModalContent extends Component {
const errorMessage = getErrorMessage(error, 'Unable to load manual import items');
const bulkSelectOptions = [
{ key: SELECT, value: 'Select...', disabled: true },
{ key: ALBUM, value: 'Select Album' },
{ key: ALBUM_RELEASE, value: 'Select Album Release' },
{ key: QUALITY, value: 'Select Quality' }
{ key: SELECT, value: translate('Select...'), disabled: true },
{ key: ALBUM, value: translate('SelectAlbum') },
{ key: ALBUM_RELEASE, value: translate('SelectAlbumRelease') },
{ key: QUALITY, value: translate('SelectQuality') }
];
if (allowArtistChange) {
bulkSelectOptions.splice(1, 0, {
key: ARTIST,
value: 'Select Artist'
value: translate('SelectArtist')
});
}
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Manual Import - {title || folder}
{translate('ManualImport')} - {title || folder}
</ModalHeader>
<ModalBody scrollDirection={scrollDirections.BOTH}>
@ -320,7 +321,7 @@ class InteractiveImportModalContent extends Component {
<div className={styles.filterText}>
{
filterExistingFiles ? 'Unmapped Files Only' : 'All Files'
filterExistingFiles ? translate('UnmappedFilesOnly') : translate('AllFiles')
}
</div>
</MenuButton>
@ -331,7 +332,7 @@ class InteractiveImportModalContent extends Component {
isSelected={!filterExistingFiles}
onPress={this.onFilterExistingFilesChange}
>
All Files
{translate('AllFiles')}
</SelectedMenuItem>
<SelectedMenuItem
@ -339,7 +340,7 @@ class InteractiveImportModalContent extends Component {
isSelected={filterExistingFiles}
onPress={this.onFilterExistingFilesChange}
>
Unmapped Files Only
{translate('UnmappedFilesOnly')}
</SelectedMenuItem>
</MenuContent>
</Menu>
@ -366,7 +367,7 @@ class InteractiveImportModalContent extends Component {
isSelected={!replaceExistingFiles}
onPress={this.onReplaceExistingFilesChange}
>
Combine With Existing Files
{translate('CombineWithExistingFiles')}
</SelectedMenuItem>
<SelectedMenuItem
@ -374,7 +375,7 @@ class InteractiveImportModalContent extends Component {
isSelected={replaceExistingFiles}
onPress={this.onReplaceExistingFilesChange}
>
Replace Existing Files
{translate('ReplaceExistingFiles')}
</SelectedMenuItem>
</MenuContent>
</Menu>
@ -474,7 +475,7 @@ class InteractiveImportModalContent extends Component {
<div className={styles.rightButtons}>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
{
@ -487,7 +488,7 @@ class InteractiveImportModalContent extends Component {
isDisabled={!selectedIds.length || !!invalidRowsSelected.length || inconsistentAlbumReleases}
onPress={this.onImportSelectedPress}
>
Import
{translate('Import')}
</Button>
</div>
</ModalFooter>

View file

@ -81,7 +81,7 @@ class SelectQualityModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Manual Import - Select Quality
{translate('ManualImport')} - {translate('SelectQuality')}
</ModalHeader>
<ModalBody>
@ -145,14 +145,14 @@ class SelectQualityModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.SUCCESS}
onPress={this.onQualitySelect}
>
Select Quality
{translate('SelectQuality')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -12,6 +12,7 @@ import TableBody from 'Components/Table/TableBody';
import { kinds } from 'Helpers/Props';
import ExpandingFileDetails from 'TrackFile/ExpandingFileDetails';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
import translate from 'Utilities/String/translate';
import getSelectedIds from 'Utilities/Table/getSelectedIds';
import selectAll from 'Utilities/Table/selectAll';
import toggleSelected from 'Utilities/Table/toggleSelected';
@ -20,7 +21,7 @@ import SelectTrackRow from './SelectTrackRow';
const columns = [
{
name: 'mediumNumber',
label: 'Medium',
label: translate('Medium'),
isSortable: true,
isVisible: true
},
@ -32,12 +33,12 @@ const columns = [
},
{
name: 'title',
label: 'Title',
label: translate('Title'),
isVisible: true
},
{
name: 'trackStatus',
label: 'Status',
label: translate('Status'),
isVisible: true
}
];
@ -137,7 +138,7 @@ class SelectTrackModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Manual Import - Select Track(s):
{translate('ManualImport')} - {translate('SelectTracks')}
</ModalHeader>
<ModalBody>
@ -201,14 +202,14 @@ class SelectTrackModalContent extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.SUCCESS}
onPress={this.onTracksSelect}
>
Select Tracks
{translate('SelectTracks')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -7,6 +7,7 @@ import PageMenuButton from 'Components/Menu/PageMenuButton';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { align, icons, sortDirections } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import InteractiveSearchFilterModalConnector from './InteractiveSearchFilterModalConnector';
import InteractiveSearchRow from './InteractiveSearchRow';
import styles from './InteractiveSearch.css';
@ -14,43 +15,43 @@ import styles from './InteractiveSearch.css';
const columns = [
{
name: 'protocol',
label: 'Source',
label: translate('Source'),
isSortable: true,
isVisible: true
},
{
name: 'age',
label: 'Age',
label: translate('Age'),
isSortable: true,
isVisible: true
},
{
name: 'title',
label: 'Title',
label: translate('Title'),
isSortable: true,
isVisible: true
},
{
name: 'indexer',
label: 'Indexer',
label: translate('Indexer'),
isSortable: true,
isVisible: true
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
isSortable: true,
isVisible: true
},
{
name: 'peers',
label: 'Peers',
label: translate('Peers'),
isSortable: true,
isVisible: true
},
{
name: 'qualityWeight',
label: 'Quality',
label: translate('Quality'),
isSortable: true,
isVisible: true
},
@ -58,7 +59,7 @@ const columns = [
name: 'preferredWordScore',
label: React.createElement(Icon, {
name: icons.SCORE,
title: 'Preferred word score'
title: translate('PreferredWordScore')
}),
isSortable: true,
isVisible: true
@ -67,7 +68,7 @@ const columns = [
name: 'rejections',
label: React.createElement(Icon, {
name: icons.DANGER,
title: 'Rejections'
title: translate('rejections')
}),
isSortable: true,
fixedSortDirection: sortDirections.ASCENDING,
@ -125,7 +126,7 @@ function InteractiveSearch(props) {
{
!isFetching && error ?
<div>
Unable to load results for this album search. Try again later
{translate('UnableToLoadInteractiveSearch')}
</div> :
null
}
@ -133,7 +134,7 @@ function InteractiveSearch(props) {
{
!isFetching && isPopulated && !totalReleasesCount ?
<div>
No results found
{translate('NoResults')}
</div> :
null
}
@ -141,7 +142,7 @@ function InteractiveSearch(props) {
{
!!totalReleasesCount && isPopulated && !items.length ?
<div>
All results are hidden by the applied filter
{translate('AllResultsFiltered')}
</div> :
null
}
@ -177,7 +178,7 @@ function InteractiveSearch(props) {
{
totalReleasesCount !== items.length && !!items.length ?
<div className={styles.filteredMessage}>
Some results are hidden by the applied filter
{translate('SomeResultsFiltered')}
</div> :
null
}

View file

@ -160,14 +160,14 @@ class OrganizePreviewModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.PRIMARY}
onPress={this.onOrganizePress}
>
Organize
{translate('Organize')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -89,7 +89,7 @@ class RetagPreviewModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Write Metadata Tags
{translate('WriteMetadataTags')}
</ModalHeader>
<ModalBody>
@ -156,14 +156,14 @@ class RetagPreviewModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<Button
kind={kinds.PRIMARY}
onPress={this.onRetagPress}
>
Retag
{translate('Retag')}
</Button>
</ModalFooter>
</ModalContent>

View file

@ -45,7 +45,7 @@ function AdvancedSettingsButton(props) {
<div className={styles.labelContainer}>
<div className={styles.label}>
{advancedSettings ? 'Hide Advanced' : 'Show Advanced'}
{advancedSettings ? translate('HideAdvanced') : translate('ShowAdvanced')}
</div>
</div>
</Link>

View file

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

View file

@ -189,7 +189,7 @@ class EditDownloadClientModalContent extends Component {
kind={kinds.DANGER}
onPress={onDeleteDownloadClientPress}
>
Delete
{translate('Delete')}
</Button>
}
@ -198,13 +198,13 @@ class EditDownloadClientModalContent extends Component {
error={saveError}
onPress={onTestPress}
>
Test
{translate('Test')}
</SpinnerErrorButton>
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -212,7 +212,7 @@ class EditDownloadClientModalContent extends Component {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

@ -41,7 +41,7 @@ function EditRemotePathMappingModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{id ? 'Edit Remote Path Mapping' : 'Add Remote Path Mapping'}
{id ? translate('EditRemotePathMapping') : translate('AddRemotePathMapping')}
</ModalHeader>
<ModalBody className={styles.body}>
@ -114,14 +114,14 @@ function EditRemotePathMappingModalContent(props) {
kind={kinds.DANGER}
onPress={onDeleteRemotePathMappingPress}
>
Delete
{translate('Delete')}
</Button>
}
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -129,7 +129,7 @@ function EditRemotePathMappingModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

@ -51,9 +51,15 @@ class RemotePathMappings extends Component {
{...otherProps}
>
<div className={styles.remotePathMappingsHeader}>
<div className={styles.host}>Host</div>
<div className={styles.path}>Remote Path</div>
<div className={styles.path}>Local Path</div>
<div className={styles.host}>
{translate('Host')}
</div>
<div className={styles.path}>
{translate('RemotePath')}
</div>
<div className={styles.path}>
{translate('LocalPath')}
</div>
</div>
<div>

View file

@ -39,7 +39,7 @@ function EditImportListExclusionModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{id ? 'Edit Import List Exclusion' : 'Add Import List Exclusion'}
{id ? translate('EditImportListExclusion') : translate('AddImportListExclusion')}
</ModalHeader>
<ModalBody className={styles.body}>
@ -99,14 +99,14 @@ function EditImportListExclusionModalContent(props) {
kind={kinds.DANGER}
onPress={onDeleteImportListExclusionPress}
>
Delete
{translate('Delete')}
</Button>
}
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -114,7 +114,7 @@ function EditImportListExclusionModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
import Menu from 'Components/Menu/Menu';
import MenuContent from 'Components/Menu/MenuContent';
import { sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddImportListPresetMenuItem from './AddImportListPresetMenuItem';
import styles from './AddImportListItem.css';
@ -57,7 +58,7 @@ class AddImportListItem extends Component {
size={sizes.SMALL}
onPress={this.onListSelect}
>
Custom
{translate('Custom')}
</Button>
<Menu className={styles.presetsMenu}>
@ -65,7 +66,7 @@ class AddImportListItem extends Component {
className={styles.presetsMenuButton}
size={sizes.SMALL}
>
Presets
{translate('Presets')}
</Button>
<MenuContent>
@ -90,7 +91,7 @@ class AddImportListItem extends Component {
to={infoLink}
size={sizes.SMALL}
>
More info
{translate('MoreInfo')}
</Button>
</div>
</div>

View file

@ -28,17 +28,17 @@ function ImportListMonitoringOptionsPopoverContent() {
<DescriptionList>
<DescriptionListItem
title={translate('None')}
data="Do not monitor artists or albums"
data={translate('NoneMonitoringOptionHelpText')}
/>
<DescriptionListItem
title={translate('SpecificAlbum')}
data="Monitor artists but only monitor albums explicitly included in the list"
data={translate('SecificMonitoringOptionHelpText')}
/>
<DescriptionListItem
title={translate('AllArtistAlbums')}
data="Monitor artists and all albums for each artist included on the import list"
data={translate('AllMonitoringOptionHelpText')}
/>
</DescriptionList>
);
@ -47,9 +47,9 @@ function ImportListMonitoringOptionsPopoverContent() {
function EditImportListModalContent(props) {
const monitorOptions = [
{ key: 'none', value: 'None' },
{ key: 'specificAlbum', value: 'Specific Album' },
{ key: 'entireArtist', value: 'All Artist Albums' }
{ key: 'none', value: translate('None') },
{ key: 'specificAlbum', value: translate('SpecificAlbum') },
{ key: 'entireArtist', value: translate('All Artist Albums') }
];
const {
@ -89,7 +89,7 @@ function EditImportListModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{id ? 'Edit List' : 'Add List'}
{id ? translate('EditList') : translate('AddList')}
</ModalHeader>
<ModalBody>
@ -318,7 +318,7 @@ function EditImportListModalContent(props) {
kind={kinds.DANGER}
onPress={onDeleteImportListPress}
>
Delete
{translate('Delete')}
</Button>
}
@ -327,13 +327,13 @@ function EditImportListModalContent(props) {
error={saveError}
onPress={onTestPress}
>
Test
{translate('Test')}
</SpinnerErrorButton>
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -341,7 +341,7 @@ function EditImportListModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

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

View file

@ -53,7 +53,7 @@ function EditIndexerModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{`${id ? 'Edit' : 'Add'} Indexer - ${implementationName}`}
{`${id ? translate('EditIndexer') : translate('AddIndexer')} - ${implementationName}`}
</ModalHeader>
<ModalBody>
@ -204,7 +204,7 @@ function EditIndexerModalContent(props) {
kind={kinds.DANGER}
onPress={onDeleteIndexerPress}
>
Delete
{translate('Delete')}
</Button>
}
@ -213,13 +213,13 @@ function EditIndexerModalContent(props) {
error={saveError}
onPress={onTestPress}
>
Test
{translate('Test')}
</SpinnerErrorButton>
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -227,7 +227,7 @@ function EditIndexerModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

@ -15,26 +15,26 @@ import NamingConnector from './Naming/NamingConnector';
import RootFoldersConnector from './RootFolder/RootFoldersConnector';
const rescanAfterRefreshOptions = [
{ key: 'always', value: 'Always' },
{ key: 'afterManual', value: 'After Manual Refresh' },
{ key: 'never', value: 'Never' }
{ key: 'always', value: translate('Always') },
{ key: 'afterManual', value: translate('AfterManualRefresh') },
{ key: 'never', value: translate('Never') }
];
const allowFingerprintingOptions = [
{ key: 'allFiles', value: 'Always' },
{ key: 'newFiles', value: 'For new imports only' },
{ key: 'never', value: 'Never' }
{ key: 'allFiles', value: translate('Always') },
{ key: 'newFiles', value: translate('ForNewImportsOnly') },
{ key: 'never', value: translate('Never') }
];
const downloadPropersAndRepacksOptions = [
{ key: 'preferAndUpgrade', value: 'Prefer and Upgrade' },
{ key: 'doNotUpgrade', value: 'Do not Upgrade Automatically' },
{ key: 'doNotPrefer', value: 'Do not Prefer' }
{ key: 'preferAndUpgrade', value: translate('PreferAndUpgrade') },
{ key: 'doNotUpgrade', value: translate('DoNotUpgradeAutomatically') },
{ key: 'doNotPrefer', value: translate('DoNotPrefer') }
];
const fileDateOptions = [
{ key: 'none', value: 'None' },
{ key: 'albumReleaseDate', value: 'Album Release Date' }
{ key: 'none', value: translate('None') },
{ key: 'albumReleaseDate', value: translate('AlbumReleaseDate') }
];
class MediaManagement extends Component {

View file

@ -51,7 +51,7 @@ function EditRootFolderModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{id ? 'Edit Root Folder' : 'Add Root Folder'}
{id ? translate('EditRootFolder') : translate('AddRootFolder')}
</ModalHeader>
<ModalBody>
@ -216,14 +216,14 @@ function EditRootFolderModalContent(props) {
kind={kinds.DANGER}
onPress={onDeleteRootFolderPress}
>
Delete
{translate('Delete')}
</Button>
}
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -231,7 +231,7 @@ function EditRootFolderModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

@ -35,7 +35,7 @@ function EditMetadataModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Edit {name.value} Metadata
{translate('EditMetadata')} - {name.value}
</ModalHeader>
<ModalBody>
@ -75,7 +75,7 @@ function EditMetadataModalContent(props) {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -83,7 +83,7 @@ function EditMetadataModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

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

View file

@ -48,7 +48,7 @@ function EditNotificationModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{`${id ? 'Edit' : 'Add'} Connection - ${implementationName}`}
{`${id ? translate('EditConnection') : translate('AddConnection')} - ${implementationName}`}
</ModalHeader>
<ModalBody>
@ -136,7 +136,7 @@ function EditNotificationModalContent(props) {
kind={kinds.DANGER}
onPress={onDeleteNotificationPress}
>
Delete
{translate('Delete')}
</Button>
}
@ -145,13 +145,13 @@ function EditNotificationModalContent(props) {
error={saveError}
onPress={onTestPress}
>
Test
{translate('Test')}
</SpinnerErrorButton>
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -159,7 +159,7 @@ function EditNotificationModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

@ -88,9 +88,9 @@ class DelayProfile extends Component {
let preferred = titleCase(preferredProtocol);
if (!enableUsenet) {
preferred = 'Only Torrent';
preferred = translate('OnlyTorrent');
} else if (!enableTorrent) {
preferred = 'Only Usenet';
preferred = translate('OnlyUsenet');
}
return (

View file

@ -82,10 +82,18 @@ class DelayProfiles extends Component {
>
<div>
<div className={styles.delayProfilesHeader}>
<div className={styles.column}>Protocol</div>
<div className={styles.column}>Usenet Delay</div>
<div className={styles.column}>Torrent Delay</div>
<div className={styles.tags}>Tags</div>
<div className={styles.column}>
{translate('PreferredProtocol')}
</div>
<div className={styles.column}>
{translate('UsenetDelay')}
</div>
<div className={styles.column}>
{translate('TorrentDelay')}
</div>
<div className={styles.tags}>
{translate('Tags')}
</div>
</div>
<div className={styles.delayProfiles}>

View file

@ -17,6 +17,13 @@ import { boolSettingShape, numberSettingShape, tagSettingShape } from 'Helpers/P
import translate from 'Utilities/String/translate';
import styles from './EditDelayProfileModalContent.css';
const protocolOptions = [
{ key: 'preferUsenet', value: translate('PreferUsenet') },
{ key: 'preferTorrent', value: translate('PreferTorrent') },
{ key: 'onlyUsenet', value: translate('OnlyUsenet') },
{ key: 'onlyTorrent', value: translate('OnlyTorrent') }
];
function EditDelayProfileModalContent(props) {
const {
id,
@ -26,7 +33,6 @@ function EditDelayProfileModalContent(props) {
saveError,
item,
protocol,
protocolOptions,
onInputChange,
onProtocolChange,
onSavePress,
@ -46,29 +52,29 @@ function EditDelayProfileModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{id ? 'Edit Delay Profile' : 'Add Delay Profile'}
{id ? translate('EditDelayProfile') : translate('AddDelayProfile')}
</ModalHeader>
<ModalBody>
{
isFetching &&
<LoadingIndicator />
isFetching ?
<LoadingIndicator /> :
null
}
{
!isFetching && !!error &&
!isFetching && !!error ?
<div>
{translate('UnableToAddANewQualityProfilePleaseTryAgain')}
</div>
</div> :
null
}
{
!isFetching && !error &&
!isFetching && !error ?
<Form {...otherProps}>
<FormGroup>
<FormLabel>
{translate('Protocol')}
</FormLabel>
<FormLabel>{translate('PreferredProtocol')}</FormLabel>
<FormInputGroup
type={inputTypes.SELECT}
@ -83,9 +89,7 @@ function EditDelayProfileModalContent(props) {
{
enableUsenet.value &&
<FormGroup>
<FormLabel>
{translate('UsenetDelay')}
</FormLabel>
<FormLabel>{translate('UsenetDelay')}</FormLabel>
<FormInputGroup
type={inputTypes.NUMBER}
@ -101,9 +105,7 @@ function EditDelayProfileModalContent(props) {
{
enableTorrent.value &&
<FormGroup>
<FormLabel>
{translate('TorrentDelay')}
</FormLabel>
<FormLabel>{translate('TorrentDelay')}</FormLabel>
<FormInputGroup
type={inputTypes.NUMBER}
@ -119,13 +121,11 @@ function EditDelayProfileModalContent(props) {
{
id === 1 ?
<Alert>
This is the default profile. It applies to all artist that don't have an explicit profile.
{translate('DefaultDelayProfileHelpText')}
</Alert> :
<FormGroup>
<FormLabel>
{translate('Tags')}
</FormLabel>
<FormLabel>{translate('Tags')}</FormLabel>
<FormInputGroup
type={inputTypes.TAG}
@ -136,25 +136,27 @@ function EditDelayProfileModalContent(props) {
/>
</FormGroup>
}
</Form>
</Form> :
null
}
</ModalBody>
<ModalFooter>
{
id && id > 1 &&
id && id > 1 ?
<Button
className={styles.deleteButton}
kind={kinds.DANGER}
onPress={onDeleteDelayProfilePress}
>
Delete
</Button>
{translate('Delete')}
</Button> :
null
}
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -162,7 +164,7 @@ function EditDelayProfileModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>
@ -186,7 +188,6 @@ EditDelayProfileModalContent.propTypes = {
saveError: PropTypes.object,
item: PropTypes.shape(delayProfileShape).isRequired,
protocol: PropTypes.string.isRequired,
protocolOptions: PropTypes.arrayOf(PropTypes.object).isRequired,
onInputChange: PropTypes.func.isRequired,
onProtocolChange: PropTypes.func.isRequired,
onSavePress: PropTypes.func.isRequired,

View file

@ -16,13 +16,6 @@ const newDelayProfile = {
tags: []
};
const protocolOptions = [
{ key: 'preferUsenet', value: 'Prefer Usenet' },
{ key: 'preferTorrent', value: 'Prefer Torrent' },
{ key: 'onlyUsenet', value: 'Only Usenet' },
{ key: 'onlyTorrent', value: 'Only Torrent' }
];
function createDelayProfileSelector() {
return createSelector(
(state, { id }) => id,
@ -78,7 +71,6 @@ function createMapStateToProps() {
return {
protocol,
protocolOptions,
...delayProfile
};
}

View file

@ -46,7 +46,7 @@ function EditMetadataProfileModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{id ? 'Edit Metadata Profile' : 'Add Metadata Profile'}
{id ? translate('EditMetadataProfile') : translate('AddMetadataProfile')}
</ModalHeader>
<ModalBody>
@ -117,7 +117,7 @@ function EditMetadataProfileModalContent(props) {
isDisabled={isInUse}
onPress={onDeleteMetadataProfilePress}
>
Delete
{translate('Delete')}
</Button>
</div>
}
@ -125,7 +125,7 @@ function EditMetadataProfileModalContent(props) {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -133,7 +133,7 @@ function EditMetadataProfileModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

@ -119,7 +119,7 @@ class EditQualityProfileModalContent extends Component {
onMeasure={this.onHeaderMeasure}
>
<ModalHeader>
{id ? 'Edit Quality Profile' : 'Add Quality Profile'}
{id ? translate('EditQualityProfile') : translate('AddQualityProfile')}
</ModalHeader>
</Measure>
@ -161,7 +161,7 @@ class EditQualityProfileModalContent extends Component {
<FormGroup size={sizes.EXTRA_SMALL}>
<FormLabel size={sizes.SMALL}>
Upgrades Allowed
{translate('UpgradesAllowed')}
</FormLabel>
<FormInputGroup
@ -226,7 +226,7 @@ class EditQualityProfileModalContent extends Component {
isDisabled={isInUse}
onPress={onDeleteQualityProfilePress}
>
Delete
{translate('Delete')}
</Button>
</div>
}
@ -234,7 +234,7 @@ class EditQualityProfileModalContent extends Component {
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -242,7 +242,7 @@ class EditQualityProfileModalContent extends Component {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</Measure>

View file

@ -43,7 +43,7 @@ function EditReleaseProfileModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{id ? 'Edit Release Profile' : 'Add Release Profile'}
{id ? translate('EditReleaseProfile') : translate('AddReleaseProfile')}
</ModalHeader>
<ModalBody>
@ -170,14 +170,14 @@ function EditReleaseProfileModalContent(props) {
kind={kinds.DANGER}
onPress={onDeleteReleaseProfilePress}
>
Delete
{translate('Delete')}
</Button>
}
<Button
onPress={onModalClose}
>
Cancel
{translate('Cancel')}
</Button>
<SpinnerErrorButton
@ -185,7 +185,7 @@ function EditReleaseProfileModalContent(props) {
error={saveError}
onPress={onSavePress}
>
Save
{translate('Save')}
</SpinnerErrorButton>
</ModalFooter>
</ModalContent>

View file

@ -25,9 +25,16 @@ class QualityDefinitions extends Component {
{...otherProps}
>
<div className={styles.header}>
<div className={styles.quality}>Quality</div>
<div className={styles.title}>Title</div>
<div className={styles.sizeLimit}>Size Limit</div>
<div className={styles.quality}>
{translate('Quality')}
</div>
<div className={styles.title}>
{translate('Title')}
</div>
<div className={styles.sizeLimit}>
{translate('SizeLimit')}
</div>
{
advancedSettings ?
<div className={styles.kilobitsPerSecond}>
@ -53,7 +60,7 @@ class QualityDefinitions extends Component {
<div className={styles.sizeLimitHelpTextContainer}>
<div className={styles.sizeLimitHelpText}>
Limits are automatically adjusted for the album duration.
{translate('QualityLimitsHelpText')}
</div>
</div>
</PageSectionContent>

View file

@ -187,23 +187,19 @@ class UISettings extends Component {
legend={translate('Style')}
>
<FormGroup>
<FormLabel>Theme</FormLabel>
<FormLabel>{translate('Theme')}</FormLabel>
<FormInputGroup
type={inputTypes.SELECT}
name="theme"
helpText="Change Application UI Theme, Inspired by Theme.Park"
helpText={translate('ThemeHelpText')}
values={themeOptions}
onChange={onInputChange}
{...settings.theme}
/>
</FormGroup>
<FormLabel>
{translate('EnableColorImpairedMode')}
</FormLabel>
<FormGroup>
<FormLabel>Enable Color-Impaired Mode</FormLabel>
<FormLabel>{translate('EnableColorImpairedMode')}</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="enableColorImpairedMode"

View file

@ -5,6 +5,7 @@ import albumEntities from 'Album/albumEntities';
import { sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import translate from 'Utilities/String/translate';
import { updateItem } from './baseActions';
import createFetchHandler from './Creators/createFetchHandler';
import createHandleActions from './Creators/createHandleActions';
@ -41,58 +42,58 @@ export const defaultState = {
columns: [
{
name: 'monitored',
columnLabel: 'Monitored',
columnLabel: translate('Monitored'),
isVisible: true,
isModifiable: false
},
{
name: 'title',
label: 'Title',
label: translate('Title'),
isSortable: true,
isVisible: true
},
{
name: 'releaseDate',
label: 'Release Date',
label: translate('ReleaseDate'),
isSortable: true,
isVisible: true
},
{
name: 'secondaryTypes',
label: 'Secondary Types',
label: translate('SecondaryTypes'),
isSortable: true,
isVisible: false
},
{
name: 'mediumCount',
label: 'Media Count',
label: translate('MediaCount'),
isVisible: false
},
{
name: 'trackCount',
label: 'Track Count',
label: translate('TrackCount'),
isVisible: false
},
{
name: 'duration',
label: 'Duration',
label: translate('Duration'),
isSortable: true,
isVisible: false
},
{
name: 'rating',
label: 'Rating',
label: translate('Rating'),
isSortable: true,
isVisible: true
},
{
name: 'status',
label: 'Status',
label: translate('Status'),
isVisible: true
},
{
name: 'actions',
columnLabel: 'Actions',
columnLabel: translate('Actions'),
isVisible: true,
isModifiable: false
}

View file

@ -2,6 +2,7 @@ import { createAction } from 'redux-actions';
import { filterBuilderTypes, filterBuilderValueTypes, sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import translate from 'Utilities/String/translate';
import { fetchAlbums } from './albumActions';
import { filterPredicates, filters } from './artistActions';
import { set } from './baseActions';
@ -31,41 +32,41 @@ export const defaultState = {
filterBuilderProps: [
{
name: 'monitored',
label: 'Monitored',
label: translate('Monitored'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.BOOL
},
{
name: 'status',
label: 'Status',
label: translate('Status'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.ARTIST_STATUS
},
{
name: 'artistType',
label: 'Artist Type',
label: translate('ArtistType'),
type: filterBuilderTypes.EXACT
},
{
name: 'qualityProfileId',
label: 'Quality Profile',
label: translate('QualityProfile'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.QUALITY_PROFILE
},
{
name: 'metadataProfileId',
label: 'Metadata Profile',
label: translate('MetadataProfile'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.METADATA_PROFILE
},
{
name: 'rootFolderPath',
label: 'Root Folder Path',
label: translate('Root Folder Path'),
type: filterBuilderTypes.EXACT
},
{
name: 'tags',
label: 'Tags',
label: translate('Tags'),
type: filterBuilderTypes.ARRAY,
valueType: filterBuilderValueTypes.TAG
}

View file

@ -5,6 +5,7 @@ import { filterTypePredicates, filterTypes, sortDirections } from 'Helpers/Props
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import dateFilterPredicate from 'Utilities/Date/dateFilterPredicate';
import translate from 'Utilities/String/translate';
import { updateItem } from './baseActions';
import createFetchHandler from './Creators/createFetchHandler';
import createHandleActions from './Creators/createHandleActions';
@ -20,12 +21,12 @@ export const section = 'artist';
export const filters = [
{
key: 'all',
label: 'All',
label: translate('All'),
filters: []
},
{
key: 'monitored',
label: 'Monitored Only',
label: translate('MonitoredOnly'),
filters: [
{
key: 'monitored',
@ -36,7 +37,7 @@ export const filters = [
},
{
key: 'unmonitored',
label: 'Unmonitored Only',
label: translate('UnmonitoredOnly'),
filters: [
{
key: 'monitored',
@ -47,7 +48,7 @@ export const filters = [
},
{
key: 'continuing',
label: 'Continuing Only',
label: translate('ContinuingOnly'),
filters: [
{
key: 'status',
@ -58,7 +59,7 @@ export const filters = [
},
{
key: 'ended',
label: 'Ended Only',
label: translate('EndedOnly'),
filters: [
{
key: 'status',
@ -69,7 +70,7 @@ export const filters = [
},
{
key: 'missing',
label: 'Missing Tracks',
label: translate('MissingTracks'),
filters: [
{
key: 'missing',

View file

@ -3,6 +3,7 @@ import { batchActions } from 'redux-batched-actions';
import { filterBuilderTypes, filterBuilderValueTypes, sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import translate from 'Utilities/String/translate';
import { filterPredicates, filters, sortPredicates } from './artistActions';
import { set, updateItem } from './baseActions';
import createHandleActions from './Creators/createHandleActions';
@ -34,44 +35,44 @@ export const defaultState = {
columns: [
{
name: 'status',
columnLabel: 'Status',
columnLabel: translate('Status'),
isSortable: true,
isVisible: true,
isModifiable: false
},
{
name: 'sortName',
label: 'Name',
label: translate('Name'),
isSortable: true,
isVisible: true
},
{
name: 'qualityProfileId',
label: 'Quality Profile',
label: translate('QualityProfile'),
isSortable: true,
isVisible: true
},
{
name: 'metadataProfileId',
label: 'Metadata Profile',
label: translate('MetadataProfile'),
isSortable: true,
isVisible: false
},
{
name: 'path',
label: 'Path',
label: translate('Path'),
isSortable: true,
isVisible: true
},
{
name: 'sizeOnDisk',
label: 'Size on Disk',
label: translate('SizeOnDisk'),
isSortable: true,
isVisible: false
},
{
name: 'tags',
label: 'Tags',
label: translate('Tags'),
isSortable: false,
isVisible: true
}
@ -80,47 +81,47 @@ export const defaultState = {
filterBuilderProps: [
{
name: 'monitored',
label: 'Monitored',
label: translate('Monitored'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.BOOL
},
{
name: 'status',
label: 'Status',
label: translate('Status'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.ARTIST_STATUS
},
{
name: 'qualityProfileId',
label: 'Quality Profile',
label: translate('QualityProfile'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.QUALITY_PROFILE
},
{
name: 'metadataProfileId',
label: 'Metadata Profile',
label: translate('MetadataProfile'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.METADATA_PROFILE
},
{
name: 'path',
label: 'Path',
label: translate('Path'),
type: filterBuilderTypes.STRING
},
{
name: 'rootFolderPath',
label: 'Root Folder Path',
label: translate('RootFolderPath'),
type: filterBuilderTypes.EXACT
},
{
name: 'sizeOnDisk',
label: 'Size on Disk',
label: translate('SizeOnDisk'),
type: filterBuilderTypes.NUMBER,
valueType: filterBuilderValueTypes.BYTES
},
{
name: 'tags',
label: 'Tags',
label: translate('Tags'),
type: filterBuilderTypes.ARRAY,
valueType: filterBuilderValueTypes.TAG
}

View file

@ -1,6 +1,7 @@
import { createAction } from 'redux-actions';
import { filterBuilderTypes, filterBuilderValueTypes, filterTypePredicates, sortDirections } from 'Helpers/Props';
import sortByName from 'Utilities/Array/sortByName';
import translate from 'Utilities/String/translate';
import { filterPredicates, filters, sortPredicates } from './artistActions';
import createHandleActions from './Creators/createHandleActions';
import createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';
@ -61,105 +62,105 @@ export const defaultState = {
columns: [
{
name: 'status',
columnLabel: 'Status',
columnLabel: translate('Status'),
isSortable: true,
isVisible: true,
isModifiable: false
},
{
name: 'sortName',
label: 'Artist Name',
label: translate('ArtistName'),
isSortable: true,
isVisible: true,
isModifiable: false
},
{
name: 'artistType',
label: 'Type',
label: translate('Type'),
isSortable: true,
isVisible: true
},
{
name: 'qualityProfileId',
label: 'Quality Profile',
label: translate('QualityProfile'),
isSortable: true,
isVisible: true
},
{
name: 'metadataProfileId',
label: 'Metadata Profile',
label: translate('MetadataProfile'),
isSortable: true,
isVisible: false
},
{
name: 'nextAlbum',
label: 'Next Album',
label: translate('NextAlbum'),
isSortable: true,
isVisible: true
},
{
name: 'lastAlbum',
label: 'Last Album',
label: translate('LastAlbum'),
isSortable: true,
isVisible: false
},
{
name: 'added',
label: 'Added',
label: translate('Added'),
isSortable: true,
isVisible: false
},
{
name: 'albumCount',
label: 'Albums',
label: translate('Albums'),
isSortable: true,
isVisible: true
},
{
name: 'trackProgress',
label: 'Tracks',
label: translate('Tracks'),
isSortable: true,
isVisible: true
},
{
name: 'trackCount',
label: 'Track Count',
label: translate('TrackCount'),
isSortable: true,
isVisible: false
},
{
name: 'path',
label: 'Path',
label: translate('Path'),
isSortable: true,
isVisible: false
},
{
name: 'sizeOnDisk',
label: 'Size on Disk',
label: translate('SizeOnDisk'),
isSortable: true,
isVisible: false
},
{
name: 'genres',
label: 'Genres',
label: translate('Genres'),
isSortable: false,
isVisible: false
},
{
name: 'ratings',
label: 'Rating',
label: translate('Rating'),
isSortable: true,
isVisible: false
},
{
name: 'tags',
label: 'Tags',
label: translate('Tags'),
isSortable: false,
isVisible: false
},
{
name: 'actions',
columnLabel: 'Actions',
columnLabel: translate('Actions'),
isVisible: true,
isModifiable: false
}
@ -242,70 +243,70 @@ export const defaultState = {
filterBuilderProps: [
{
name: 'monitored',
label: 'Monitored',
label: translate('Monitored'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.BOOL
},
{
name: 'status',
label: 'Status',
label: translate('Status'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.ARTIST_STATUS
},
{
name: 'qualityProfileId',
label: 'Quality Profile',
label: translate('QualityProfile'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.QUALITY_PROFILE
},
{
name: 'metadataProfileId',
label: 'Metadata Profile',
label: translate('MetadataProfile'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.METADATA_PROFILE
},
{
name: 'nextAlbum',
label: 'Next Album',
label: translate('NextAlbum'),
type: filterBuilderTypes.DATE,
valueType: filterBuilderValueTypes.DATE
},
{
name: 'lastAlbum',
label: 'Last Album',
label: translate('LastAlbum'),
type: filterBuilderTypes.DATE,
valueType: filterBuilderValueTypes.DATE
},
{
name: 'added',
label: 'Added',
label: translate('Added'),
type: filterBuilderTypes.DATE,
valueType: filterBuilderValueTypes.DATE
},
{
name: 'albumCount',
label: 'Album Count',
label: translate('AlbumCount'),
type: filterBuilderTypes.NUMBER
},
{
name: 'trackProgress',
label: 'Track Progress',
label: translate('TrackProgress'),
type: filterBuilderTypes.NUMBER
},
{
name: 'path',
label: 'Path',
label: translate('Path'),
type: filterBuilderTypes.STRING
},
{
name: 'sizeOnDisk',
label: 'Size on Disk',
label: translate('SizeOnDisk'),
type: filterBuilderTypes.NUMBER,
valueType: filterBuilderValueTypes.BYTES
},
{
name: 'genres',
label: 'Genres',
label: translate('Genres'),
type: filterBuilderTypes.ARRAY,
optionsSelector: function(items) {
const tagList = items.reduce((acc, artist) => {
@ -324,12 +325,12 @@ export const defaultState = {
},
{
name: 'ratings',
label: 'Rating',
label: translate('Rating'),
type: filterBuilderTypes.NUMBER
},
{
name: 'tags',
label: 'Tags',
label: translate('Tags'),
type: filterBuilderTypes.ARRAY,
valueType: filterBuilderValueTypes.TAG
}

View file

@ -4,6 +4,7 @@ import { sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
import translate from 'Utilities/String/translate';
import { set, updateItem } from './baseActions';
import createHandleActions from './Creators/createHandleActions';
import createRemoveItemHandler from './Creators/createRemoveItemHandler';
@ -32,36 +33,36 @@ export const defaultState = {
columns: [
{
name: 'artists.sortName',
label: 'Artist Name',
label: translate('ArtistName'),
isSortable: true,
isVisible: true
},
{
name: 'sourceTitle',
label: 'Source Title',
label: translate('SourceTitle'),
isSortable: true,
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isVisible: true
},
{
name: 'date',
label: 'Date',
label: translate('Date'),
isSortable: true,
isVisible: true
},
{
name: 'indexer',
label: 'Indexer',
label: translate('Indexer'),
isSortable: true,
isVisible: false
},
{
name: 'actions',
columnLabel: 'Actions',
columnLabel: translate('Actions'),
isVisible: true,
isModifiable: false
}

View file

@ -7,6 +7,7 @@ import * as commandNames from 'Commands/commandNames';
import { filterTypes } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import translate from 'Utilities/String/translate';
import { set, update } from './baseActions';
import { executeCommandHelper } from './commandActions';
import createHandleActions from './Creators/createHandleActions';
@ -50,7 +51,7 @@ export const defaultState = {
filters: [
{
key: 'all',
label: 'All',
label: translate('All'),
filters: [
{
key: 'monitored',
@ -61,7 +62,7 @@ export const defaultState = {
},
{
key: 'monitored',
label: 'Monitored Only',
label: translate('MonitoredOnly'),
filters: [
{
key: 'monitored',

View file

@ -3,6 +3,7 @@ import { filterTypes, sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
import translate from 'Utilities/String/translate';
import { updateItem } from './baseActions';
import createHandleActions from './Creators/createHandleActions';
import createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';
@ -29,61 +30,61 @@ export const defaultState = {
columns: [
{
name: 'eventType',
columnLabel: 'Event Type',
columnLabel: translate('EventType'),
isVisible: true,
isModifiable: false
},
{
name: 'artists.sortName',
label: 'Artist',
label: translate('Artist'),
isSortable: true,
isVisible: true
},
{
name: 'albums.title',
label: 'Album Title',
label: translate('AlbumTitle'),
isSortable: true,
isVisible: true
},
{
name: 'trackTitle',
label: 'Track Title',
label: translate('TrackTitle'),
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isVisible: true
},
{
name: 'date',
label: 'Date',
label: translate('Date'),
isSortable: true,
isVisible: true
},
{
name: 'downloadClient',
label: 'Download Client',
label: translate('DownloadClient'),
isVisible: false
},
{
name: 'indexer',
label: 'Indexer',
label: translate('Indexer'),
isVisible: false
},
{
name: 'releaseGroup',
label: 'Release Group',
label: translate('ReleaseGroup'),
isVisible: false
},
{
name: 'sourceTitle',
label: 'Source Title',
label: translate('SourceTitle'),
isVisible: false
},
{
name: 'details',
columnLabel: 'Details',
columnLabel: translate('Details'),
isVisible: true,
isModifiable: false
}
@ -94,12 +95,12 @@ export const defaultState = {
filters: [
{
key: 'all',
label: 'All',
label: translate('All'),
filters: []
},
{
key: 'grabbed',
label: 'Grabbed',
label: translate('Grabbed'),
filters: [
{
key: 'eventType',
@ -110,7 +111,7 @@ export const defaultState = {
},
{
key: 'trackFileImported',
label: 'Track Imported',
label: translate('TrackImported'),
filters: [
{
key: 'eventType',
@ -121,7 +122,7 @@ export const defaultState = {
},
{
key: 'failed',
label: 'Download Failed',
label: translate('DownloadFailed'),
filters: [
{
key: 'eventType',
@ -132,7 +133,7 @@ export const defaultState = {
},
{
key: 'importFailed',
label: 'Import Failed',
label: translate('ImportFailed'),
filters: [
{
key: 'eventType',
@ -143,7 +144,7 @@ export const defaultState = {
},
{
key: 'downloadImported',
label: 'Download Imported',
label: translate('DownloadImported'),
filters: [
{
key: 'eventType',
@ -154,7 +155,7 @@ export const defaultState = {
},
{
key: 'deleted',
label: 'Deleted',
label: translate('Deleted'),
filters: [
{
key: 'eventType',
@ -165,7 +166,7 @@ export const defaultState = {
},
{
key: 'renamed',
label: 'Renamed',
label: translate('Renamed'),
filters: [
{
key: 'eventType',
@ -176,7 +177,7 @@ export const defaultState = {
},
{
key: 'retagged',
label: 'Retagged',
label: translate('Retagged'),
filters: [
{
key: 'eventType',
@ -187,7 +188,7 @@ export const defaultState = {
},
{
key: 'ignored',
label: 'Ignored',
label: translate('Ignored'),
filters: [
{
key: 'eventType',

View file

@ -5,6 +5,7 @@ import { sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
import translate from 'Utilities/String/translate';
import { set, updateItem } from './baseActions';
import createFetchHandler from './Creators/createFetchHandler';
import createHandleActions from './Creators/createHandleActions';
@ -57,86 +58,86 @@ export const defaultState = {
columns: [
{
name: 'status',
columnLabel: 'Status',
columnLabel: translate('Status'),
isSortable: true,
isVisible: true,
isModifiable: false
},
{
name: 'artists.sortName',
label: 'Artist',
label: translate('Artist'),
isSortable: true,
isVisible: true
},
{
name: 'albums.title',
label: 'Album Title',
label: translate('AlbumTitle'),
isSortable: true,
isVisible: true
},
{
name: 'albums.releaseDate',
label: 'Album Release Date',
label: translate('AlbumReleaseDate'),
isSortable: true,
isVisible: false
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isSortable: true,
isVisible: true
},
{
name: 'protocol',
label: 'Protocol',
label: translate('Protocol'),
isSortable: true,
isVisible: false
},
{
name: 'indexer',
label: 'Indexer',
label: translate('Indexer'),
isSortable: true,
isVisible: false
},
{
name: 'downloadClient',
label: 'Download Client',
label: translate('DownloadClient'),
isSortable: true,
isVisible: false
},
{
name: 'title',
label: 'Release Title',
label: translate('ReleaseTitle'),
isSortable: true,
isVisible: false
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
isSortable: true,
isVisibile: false
},
{
name: 'outputPath',
label: 'Output Path',
label: translate('OutputPath'),
isSortable: false,
isVisible: false
},
{
name: 'estimatedCompletionTime',
label: 'Time Left',
label: translate('TimeLeft'),
isSortable: true,
isVisible: true
},
{
name: 'progress',
label: 'Progress',
label: translate('Progress'),
isSortable: true,
isVisible: true
},
{
name: 'actions',
columnLabel: 'Actions',
columnLabel: translate('Actions'),
isVisible: true,
isModifiable: false
}

View file

@ -2,6 +2,7 @@ import { createAction } from 'redux-actions';
import { filterBuilderTypes, filterBuilderValueTypes, filterTypes, sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import translate from 'Utilities/String/translate';
import createFetchHandler from './Creators/createFetchHandler';
import createHandleActions from './Creators/createHandleActions';
import createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';
@ -51,12 +52,12 @@ export const defaultState = {
filters: [
{
key: 'all',
label: 'All',
label: translate('All'),
filters: []
},
{
key: 'discography-pack',
label: 'Discography',
label: translate('Discography'),
filters: [
{
key: 'discography',
@ -67,7 +68,7 @@ export const defaultState = {
},
{
key: 'not-discography-pack',
label: 'Not Discography',
label: translate('NotDiscography'),
filters: [
{
key: 'discography',
@ -154,51 +155,51 @@ export const defaultState = {
filterBuilderProps: [
{
name: 'title',
label: 'Title',
label: translate('Title'),
type: filterBuilderTypes.STRING
},
{
name: 'age',
label: 'Age',
label: translate('Age'),
type: filterBuilderTypes.NUMBER
},
{
name: 'protocol',
label: 'Protocol',
label: translate('Protocol'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.PROTOCOL
},
{
name: 'indexerId',
label: 'Indexer',
label: translate('Indexer'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.INDEXER
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
type: filterBuilderTypes.NUMBER,
valueType: filterBuilderValueTypes.BYTES
},
{
name: 'seeders',
label: 'Seeders',
label: translate('Seeders'),
type: filterBuilderTypes.NUMBER
},
{
name: 'leechers',
label: 'Peers',
label: translate('Peers'),
type: filterBuilderTypes.NUMBER
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.QUALITY
},
{
name: 'rejectionCount',
label: 'Rejection Count',
label: translate('RejectionCount'),
type: filterBuilderTypes.NUMBER
}
],

View file

@ -121,12 +121,12 @@ export const defaultState = {
filters: [
{
key: 'all',
label: 'All',
label: translate('All'),
filters: []
},
{
key: 'info',
label: 'Info',
label: translate('Info'),
filters: [
{
key: 'level',
@ -137,7 +137,7 @@ export const defaultState = {
},
{
key: 'warn',
label: 'Warn',
label: translate('Warn'),
filters: [
{
key: 'level',
@ -148,7 +148,7 @@ export const defaultState = {
},
{
key: 'error',
label: 'Error',
label: translate('Error'),
filters: [
{
key: 'level',

View file

@ -1,6 +1,7 @@
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import translate from 'Utilities/String/translate';
import createFetchHandler from './Creators/createFetchHandler';
import createHandleActions from './Creators/createHandleActions';
import createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';
@ -27,42 +28,42 @@ export const defaultState = {
columns: [
{
name: 'medium',
label: 'Medium',
label: translate('Medium'),
isVisible: false
},
{
name: 'absoluteTrackNumber',
label: 'Track',
label: translate('Track'),
isVisible: true
},
{
name: 'title',
label: 'Title',
label: translate('Title'),
isVisible: true
},
{
name: 'path',
label: 'Path',
label: translate('Path'),
isVisible: false
},
{
name: 'duration',
label: 'Duration',
label: translate('Duration'),
isVisible: true
},
{
name: 'audioInfo',
label: 'Audio Info',
label: translate('AudioInfo'),
isVisible: true
},
{
name: 'status',
label: 'Status',
label: translate('Status'),
isVisible: true
},
{
name: 'actions',
columnLabel: 'Actions',
columnLabel: translate('Actions'),
isVisible: true,
isModifiable: false
}

View file

@ -5,6 +5,7 @@ import albumEntities from 'Album/albumEntities';
import { sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import translate from 'Utilities/String/translate';
import { removeItem, set, updateItem } from './baseActions';
import createFetchHandler from './Creators/createFetchHandler';
import createHandleActions from './Creators/createHandleActions';
@ -43,32 +44,32 @@ export const defaultState = {
columns: [
{
name: 'path',
label: 'Path',
label: translate('Path'),
isSortable: true,
isVisible: true,
isModifiable: false
},
{
name: 'size',
label: 'Size',
label: translate('Size'),
isSortable: true,
isVisible: true
},
{
name: 'dateAdded',
label: 'Date Added',
label: translate('DateAdded'),
isSortable: true,
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isSortable: true,
isVisible: true
},
{
name: 'actions',
columnLabel: 'Actions',
columnLabel: translate('Actions'),
isVisible: true,
isModifiable: false
}

View file

@ -2,6 +2,7 @@ import { createAction } from 'redux-actions';
import { filterTypes, sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
import translate from 'Utilities/String/translate';
import createBatchToggleAlbumMonitoredHandler from './Creators/createBatchToggleAlbumMonitoredHandler';
import createHandleActions from './Creators/createHandleActions';
import createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';
@ -29,25 +30,25 @@ export const defaultState = {
columns: [
{
name: 'artists.sortName',
label: 'Artist Name',
label: translate('ArtistName'),
isSortable: true,
isVisible: true
},
{
name: 'albums.title',
label: 'Album Title',
label: translate('AlbumTitle'),
isSortable: true,
isVisible: true
},
{
name: 'albumType',
label: 'Album Type',
label: translate('AlbumType'),
isSortable: true,
isVisible: true
},
{
name: 'releaseDate',
label: 'Release Date',
label: translate('ReleaseDate'),
isSortable: true,
isVisible: true
},
@ -58,7 +59,7 @@ export const defaultState = {
// },
{
name: 'actions',
columnLabel: 'Actions',
columnLabel: translate('Actions'),
isVisible: true,
isModifiable: false
}
@ -69,7 +70,7 @@ export const defaultState = {
filters: [
{
key: 'monitored',
label: 'Monitored',
label: translate('Monitored'),
filters: [
{
key: 'monitored',
@ -80,7 +81,7 @@ export const defaultState = {
},
{
key: 'unmonitored',
label: 'Unmonitored',
label: translate('Unmonitored'),
filters: [
{
key: 'monitored',
@ -103,25 +104,25 @@ export const defaultState = {
columns: [
{
name: 'artists.sortName',
label: 'Artist Name',
label: translate('ArtistName'),
isSortable: true,
isVisible: true
},
{
name: 'albums.title',
label: 'Album Title',
label: translate('AlbumTitle'),
isSortable: true,
isVisible: true
},
{
name: 'albumType',
label: 'Album Type',
label: translate('AlbumType'),
isSortable: true,
isVisible: true
},
{
name: 'releaseDate',
label: 'Release Date',
label: translate('ReleaseDate'),
isSortable: true,
isVisible: true
},
@ -132,7 +133,7 @@ export const defaultState = {
// },
{
name: 'actions',
columnLabel: 'Actions',
columnLabel: translate('Actions'),
isVisible: true,
isModifiable: false
}
@ -143,7 +144,7 @@ export const defaultState = {
filters: [
{
key: 'monitored',
label: 'Monitored',
label: translate('Monitored'),
filters: [
{
key: 'monitored',
@ -154,7 +155,7 @@ export const defaultState = {
},
{
key: 'unmonitored',
label: 'Unmonitored',
label: translate('Unmonitored'),
filters: [
{
key: 'monitored',

View file

@ -76,14 +76,14 @@ class BackupRow extends Component {
} = this.state;
let iconClassName = icons.SCHEDULED;
let iconTooltip = translate('IconTooltip');
let iconTooltip = translate('Scheduled');
if (type === 'manual') {
iconClassName = icons.INTERACTIVE;
iconTooltip = 'Manual';
iconTooltip = translate('Manual');
} else if (type === 'update') {
iconClassName = icons.UPDATE;
iconTooltip = 'Before update';
iconTooltip = translate('BeforeUpdate');
}
return (

View file

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

View file

@ -14,7 +14,7 @@ import styles from './RestoreBackupModalContent.css';
function getErrorMessage(error) {
if (!error || !error.responseJSON || !error.responseJSON.message) {
return 'Error restoring backup';
return translate('ErrorRestoringBackup');
}
return error.responseJSON.message;
@ -146,7 +146,7 @@ class RestoreBackupModalContent extends Component {
<ModalBody>
{
!!id && `Would you like to restore the backup '${name}'?`
!!id && translate('WouldYouLikeToRestoreBackup', [name])
}
{
@ -203,11 +203,11 @@ class RestoreBackupModalContent extends Component {
<ModalFooter>
<div className={styles.additionalInfo}>
Note: Lidarr will automatically restart and reload the UI during the restore process.
{translate('RestoreBackupAdditionalInfo')}
</div>
<Button onPress={onModalClose}>
Cancel
{translate('Cancel')}
</Button>
<SpinnerButton
@ -216,7 +216,7 @@ class RestoreBackupModalContent extends Component {
isSpinning={isRestoring}
onPress={this.onRestorePress}
>
Restore
{translate('Restore')}
</SpinnerButton>
</ModalFooter>
</ModalContent>

View file

@ -19,12 +19,12 @@ import LogFilesTableRow from './LogFilesTableRow';
const columns = [
{
name: 'filename',
label: 'Filename',
label: translate('Filename'),
isVisible: true
},
{
name: 'lastWriteTime',
label: 'Last Write Time',
label: translate('LastWriteTime'),
isVisible: true
},
{

View file

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

View file

@ -1,6 +1,7 @@
import React, { Component } from 'react';
import FieldSet from 'Components/FieldSet';
import Link from 'Components/Link/Link';
import translate from 'Utilities/String/translate';
import styles from '../styles.css';
class Donations extends Component {
@ -10,7 +11,7 @@ class Donations extends Component {
render() {
return (
<FieldSet legend='Donations'>
<FieldSet legend={translate('Donations')}>
<div className={styles.logoContainer} title="Radarr">
<Link to="https://radarr.video/donate">
<img

View file

@ -95,12 +95,12 @@ const columns = [
},
{
name: 'message',
label: 'Message',
label: translate('Message'),
isVisible: true
},
{
name: 'actions',
label: 'Actions',
label: translate('Actions'),
isVisible: true
}
];

View file

@ -15,27 +15,27 @@ const columns = [
},
{
name: 'commandName',
label: 'Name',
label: translate('Name'),
isVisible: true
},
{
name: 'queued',
label: 'Queued',
label: translate('Queued'),
isVisible: true
},
{
name: 'started',
label: 'Started',
label: translate('Started'),
isVisible: true
},
{
name: 'ended',
label: 'Ended',
label: translate('Ended'),
isVisible: true
},
{
name: 'duration',
label: 'Duration',
label: translate('Duration'),
isVisible: true
},
{

View file

@ -10,27 +10,27 @@ import ScheduledTaskRowConnector from './ScheduledTaskRowConnector';
const columns = [
{
name: 'name',
label: 'Name',
label: translate('Name'),
isVisible: true
},
{
name: 'interval',
label: 'Interval',
label: translate('Interval'),
isVisible: true
},
{
name: 'lastExecution',
label: 'Last Execution',
label: translate('Last Execution'),
isVisible: true
},
{
name: 'lastDuration',
label: 'Last Duration',
label: translate('Last Duration'),
isVisible: true
},
{
name: 'nextExecution',
label: 'Next Execution',
label: translate('Next Execution'),
isVisible: true
},
{

View file

@ -25,17 +25,17 @@ import styles from './TrackFileEditorModalContent.css';
const columns = [
{
name: 'trackNumber',
label: 'Track',
label: translate('Track'),
isVisible: true
},
{
name: 'path',
label: 'Path',
label: translate('Path'),
isVisible: true
},
{
name: 'quality',
label: 'Quality',
label: translate('Quality'),
isVisible: true
}
];
@ -230,7 +230,7 @@ class TrackFileEditorModalContent extends Component {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>