mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
Fixed: Missing Translates
This commit is contained in:
@@ -6,6 +6,7 @@ import TableRowCell from 'Components/Table/Cells/TableRowCell';
|
|||||||
import TableRow from 'Components/Table/TableRow';
|
import TableRow from 'Components/Table/TableRow';
|
||||||
import { icons } from 'Helpers/Props';
|
import { icons } from 'Helpers/Props';
|
||||||
import CapabilitiesLabel from 'Indexer/Index/Table/CapabilitiesLabel';
|
import CapabilitiesLabel from 'Indexer/Index/Table/CapabilitiesLabel';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import HistoryDetailsModal from './Details/HistoryDetailsModal';
|
import HistoryDetailsModal from './Details/HistoryDetailsModal';
|
||||||
import HistoryEventTypeCell from './HistoryEventTypeCell';
|
import HistoryEventTypeCell from './HistoryEventTypeCell';
|
||||||
import HistoryRowParameter from './HistoryRowParameter';
|
import HistoryRowParameter from './HistoryRowParameter';
|
||||||
@@ -193,7 +194,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.season ?
|
data.season ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Season'
|
title={translate('Season')}
|
||||||
value={data.season}
|
value={data.season}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -202,7 +203,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.episode ?
|
data.episode ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Episode'
|
title={translate('Episode')}
|
||||||
value={data.episode}
|
value={data.episode}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -211,7 +212,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.artist ?
|
data.artist ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Artist'
|
title={translate('Artist')}
|
||||||
value={data.artist}
|
value={data.artist}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -220,7 +221,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.album ?
|
data.album ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Album'
|
title={translate('Album')}
|
||||||
value={data.album}
|
value={data.album}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -229,7 +230,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.label ?
|
data.label ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Label'
|
title={translate('Label')}
|
||||||
value={data.label}
|
value={data.label}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -238,7 +239,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.track ?
|
data.track ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Track'
|
title={translate('Track')}
|
||||||
value={data.track}
|
value={data.track}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -247,7 +248,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.year ?
|
data.year ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Year'
|
title={translate('Year')}
|
||||||
value={data.year}
|
value={data.year}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -256,7 +257,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.genre ?
|
data.genre ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Genre'
|
title={translate('Genre')}
|
||||||
value={data.genre}
|
value={data.genre}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -265,7 +266,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.author ?
|
data.author ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Author'
|
title={translate('Author')}
|
||||||
value={data.author}
|
value={data.author}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -274,7 +275,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.bookTitle ?
|
data.bookTitle ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Book'
|
title={translate('Book')}
|
||||||
value={data.bookTitle}
|
value={data.bookTitle}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -283,7 +284,7 @@ class HistoryRow extends Component {
|
|||||||
{
|
{
|
||||||
data.publisher ?
|
data.publisher ?
|
||||||
<HistoryRowParameter
|
<HistoryRowParameter
|
||||||
title='Publisher'
|
title={translate('Publisher')}
|
||||||
value={data.publisher}
|
value={data.publisher}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
@@ -381,14 +382,14 @@ class HistoryRow extends Component {
|
|||||||
<IconButton
|
<IconButton
|
||||||
name={icons.SEARCH}
|
name={icons.SEARCH}
|
||||||
onPress={this.onSearchPress}
|
onPress={this.onSearchPress}
|
||||||
title='Repeat Search'
|
title={translate('RepeatSearch')}
|
||||||
/> :
|
/> :
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
<IconButton
|
<IconButton
|
||||||
name={icons.INFO}
|
name={icons.INFO}
|
||||||
onPress={this.onDetailsPress}
|
onPress={this.onDetailsPress}
|
||||||
title='History Details'
|
title={translate('HistoryDetails')}
|
||||||
/>
|
/>
|
||||||
</TableRowCell>
|
</TableRowCell>
|
||||||
);
|
);
|
||||||
|
@@ -222,7 +222,11 @@ const IndexerIndex = withScrollPosition((props: IndexerIndexProps) => {
|
|||||||
<PageToolbarSeparator />
|
<PageToolbarSeparator />
|
||||||
|
|
||||||
<IndexerIndexSelectModeButton
|
<IndexerIndexSelectModeButton
|
||||||
label={isSelectMode ? 'Stop Selecting' : 'Select Indexer'}
|
label={
|
||||||
|
isSelectMode
|
||||||
|
? translate('StopSelecting')
|
||||||
|
: translate('SelectIndexer')
|
||||||
|
}
|
||||||
iconName={isSelectMode ? icons.SERIES_ENDED : icons.CHECK}
|
iconName={isSelectMode ? icons.SERIES_ENDED : icons.CHECK}
|
||||||
isSelectMode={isSelectMode}
|
isSelectMode={isSelectMode}
|
||||||
overflowComponent={IndexerIndexSelectModeMenuItem}
|
overflowComponent={IndexerIndexSelectModeMenuItem}
|
||||||
@@ -230,7 +234,7 @@ const IndexerIndex = withScrollPosition((props: IndexerIndexProps) => {
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<IndexerIndexSelectAllButton
|
<IndexerIndexSelectAllButton
|
||||||
label="SelectAll"
|
label={translate('SelectAll')}
|
||||||
isSelectMode={isSelectMode}
|
isSelectMode={isSelectMode}
|
||||||
overflowComponent={IndexerIndexSelectAllMenuItem}
|
overflowComponent={IndexerIndexSelectAllMenuItem}
|
||||||
/>
|
/>
|
||||||
@@ -245,7 +249,10 @@ const IndexerIndex = withScrollPosition((props: IndexerIndexProps) => {
|
|||||||
optionsComponent={IndexerIndexTableOptions}
|
optionsComponent={IndexerIndexTableOptions}
|
||||||
onTableOptionChange={onTableOptionChange}
|
onTableOptionChange={onTableOptionChange}
|
||||||
>
|
>
|
||||||
<PageToolbarButton label="Options" iconName={icons.TABLE} />
|
<PageToolbarButton
|
||||||
|
label={translate('Options')}
|
||||||
|
iconName={icons.TABLE}
|
||||||
|
/>
|
||||||
</TableOptionsModalWrapper>
|
</TableOptionsModalWrapper>
|
||||||
|
|
||||||
<PageToolbarSeparator />
|
<PageToolbarSeparator />
|
||||||
@@ -276,7 +283,9 @@ const IndexerIndex = withScrollPosition((props: IndexerIndexProps) => {
|
|||||||
>
|
>
|
||||||
{isFetching && !isPopulated ? <LoadingIndicator /> : null}
|
{isFetching && !isPopulated ? <LoadingIndicator /> : null}
|
||||||
|
|
||||||
{!isFetching && !!error ? <div>Unable to load indexers</div> : null}
|
{!isFetching && !!error ? (
|
||||||
|
<div>{translate('UnableToLoadIndexers')}</div>
|
||||||
|
) : null}
|
||||||
|
|
||||||
{isLoaded ? (
|
{isLoaded ? (
|
||||||
<div className={styles.contentBodyContainer}>
|
<div className={styles.contentBodyContainer}>
|
||||||
|
@@ -2,6 +2,7 @@ import React, { useCallback } from 'react';
|
|||||||
import { SelectActionType, useSelect } from 'App/SelectContext';
|
import { SelectActionType, useSelect } from 'App/SelectContext';
|
||||||
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
|
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
|
||||||
import { icons } from 'Helpers/Props';
|
import { icons } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
interface IndexerIndexSelectAllButtonProps {
|
interface IndexerIndexSelectAllButtonProps {
|
||||||
label: string;
|
label: string;
|
||||||
@@ -32,7 +33,7 @@ function IndexerIndexSelectAllButton(props: IndexerIndexSelectAllButtonProps) {
|
|||||||
|
|
||||||
return isSelectMode ? (
|
return isSelectMode ? (
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label={allSelected ? 'Unselect All' : 'Select All'}
|
label={allSelected ? translate('UnselectAll') : translate('SelectAll')}
|
||||||
iconName={icon}
|
iconName={icon}
|
||||||
onPress={onPress}
|
onPress={onPress}
|
||||||
/>
|
/>
|
||||||
|
@@ -2,6 +2,7 @@ import React, { useCallback } from 'react';
|
|||||||
import { SelectActionType, useSelect } from 'App/SelectContext';
|
import { SelectActionType, useSelect } from 'App/SelectContext';
|
||||||
import PageToolbarOverflowMenuItem from 'Components/Page/Toolbar/PageToolbarOverflowMenuItem';
|
import PageToolbarOverflowMenuItem from 'Components/Page/Toolbar/PageToolbarOverflowMenuItem';
|
||||||
import { icons } from 'Helpers/Props';
|
import { icons } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
interface IndexerIndexSelectAllMenuItemProps {
|
interface IndexerIndexSelectAllMenuItemProps {
|
||||||
label: string;
|
label: string;
|
||||||
@@ -33,7 +34,7 @@ function IndexerIndexSelectAllMenuItem(
|
|||||||
|
|
||||||
return isSelectMode ? (
|
return isSelectMode ? (
|
||||||
<PageToolbarOverflowMenuItem
|
<PageToolbarOverflowMenuItem
|
||||||
label={allSelected ? 'Unselect All' : 'Select All'}
|
label={allSelected ? translate('UnselectAll') : translate('SelectAll')}
|
||||||
iconName={iconName}
|
iconName={iconName}
|
||||||
onPress={onPressWrapper}
|
onPress={onPressWrapper}
|
||||||
/>
|
/>
|
||||||
|
@@ -14,6 +14,7 @@ import ModalHeader from 'Components/Modal/ModalHeader';
|
|||||||
import { inputTypes, kinds, sizes } from 'Helpers/Props';
|
import { inputTypes, kinds, sizes } from 'Helpers/Props';
|
||||||
import createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector';
|
import createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector';
|
||||||
import createTagsSelector from 'Store/Selectors/createTagsSelector';
|
import createTagsSelector from 'Store/Selectors/createTagsSelector';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import styles from './TagsModalContent.css';
|
import styles from './TagsModalContent.css';
|
||||||
|
|
||||||
interface TagsModalContentProps {
|
interface TagsModalContentProps {
|
||||||
@@ -70,7 +71,7 @@ function TagsModalContent(props: TagsModalContentProps) {
|
|||||||
<ModalBody>
|
<ModalBody>
|
||||||
<Form>
|
<Form>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>Tags</FormLabel>
|
<FormLabel>{translate('Tags')}</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.TAG}
|
type={inputTypes.TAG}
|
||||||
@@ -81,7 +82,7 @@ function TagsModalContent(props: TagsModalContentProps) {
|
|||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>Apply Tags</FormLabel>
|
<FormLabel>{translate('ApplyTags')}</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.SELECT}
|
type={inputTypes.SELECT}
|
||||||
@@ -89,17 +90,17 @@ function TagsModalContent(props: TagsModalContentProps) {
|
|||||||
value={applyTags}
|
value={applyTags}
|
||||||
values={applyTagsOptions}
|
values={applyTagsOptions}
|
||||||
helpTexts={[
|
helpTexts={[
|
||||||
'How to apply tags to the selected series',
|
translate('ApplyTagsHelpTexts1'),
|
||||||
'Add: Add the tags the existing list of tags',
|
translate('ApplyTagsHelpTexts2'),
|
||||||
'Remove: Remove the entered tags',
|
translate('ApplyTagsHelpTexts3'),
|
||||||
'Replace: Replace the tags with the entered tags (enter no tags to clear all tags)',
|
translate('ApplyTagsHelpTexts4'),
|
||||||
]}
|
]}
|
||||||
onChange={onApplyTagsChange}
|
onChange={onApplyTagsChange}
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>Result</FormLabel>
|
<FormLabel>{translate('Result')}</FormLabel>
|
||||||
|
|
||||||
<div className={styles.result}>
|
<div className={styles.result}>
|
||||||
{indexerTags.map((id) => {
|
{indexerTags.map((id) => {
|
||||||
@@ -116,7 +117,11 @@ function TagsModalContent(props: TagsModalContentProps) {
|
|||||||
return (
|
return (
|
||||||
<Label
|
<Label
|
||||||
key={tag.id}
|
key={tag.id}
|
||||||
title={removeTag ? 'Removing tag' : 'Existing tag'}
|
title={
|
||||||
|
removeTag
|
||||||
|
? translate('RemoveTagRemovingTag')
|
||||||
|
: translate('RemoveTagExistingTag')
|
||||||
|
}
|
||||||
kind={removeTag ? kinds.INVERSE : kinds.INFO}
|
kind={removeTag ? kinds.INVERSE : kinds.INFO}
|
||||||
size={sizes.LARGE}
|
size={sizes.LARGE}
|
||||||
>
|
>
|
||||||
@@ -140,7 +145,7 @@ function TagsModalContent(props: TagsModalContentProps) {
|
|||||||
return (
|
return (
|
||||||
<Label
|
<Label
|
||||||
key={tag.id}
|
key={tag.id}
|
||||||
title={'Adding tag'}
|
title={translate('AddingTag')}
|
||||||
kind={kinds.SUCCESS}
|
kind={kinds.SUCCESS}
|
||||||
size={sizes.LARGE}
|
size={sizes.LARGE}
|
||||||
>
|
>
|
||||||
|
@@ -4,6 +4,7 @@ import FormGroup from 'Components/Form/FormGroup';
|
|||||||
import FormInputGroup from 'Components/Form/FormInputGroup';
|
import FormInputGroup from 'Components/Form/FormInputGroup';
|
||||||
import FormLabel from 'Components/Form/FormLabel';
|
import FormLabel from 'Components/Form/FormLabel';
|
||||||
import { inputTypes } from 'Helpers/Props';
|
import { inputTypes } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import selectTableOptions from './selectTableOptions';
|
import selectTableOptions from './selectTableOptions';
|
||||||
|
|
||||||
interface IndexerIndexTableOptionsProps {
|
interface IndexerIndexTableOptionsProps {
|
||||||
@@ -32,13 +33,13 @@ function IndexerIndexTableOptions(props: IndexerIndexTableOptionsProps) {
|
|||||||
return (
|
return (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLabel>Show Search</FormLabel>
|
<FormLabel>{translate('ShowSearch')}</FormLabel>
|
||||||
|
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.CHECK}
|
type={inputTypes.CHECK}
|
||||||
name="showSearchAction"
|
name="showSearchAction"
|
||||||
value={showSearchAction}
|
value={showSearchAction}
|
||||||
helpText="Show search button on hover"
|
helpText={translate('ShowSearchActionHelpText')}
|
||||||
onChange={onTableOptionChangeWrapper}
|
onChange={onTableOptionChangeWrapper}
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
@@ -33,8 +33,8 @@ function IndexerStatusCell(props: IndexerStatusCellProps) {
|
|||||||
const enableKind = redirect ? kinds.INFO : kinds.SUCCESS;
|
const enableKind = redirect ? kinds.INFO : kinds.SUCCESS;
|
||||||
const enableIcon = redirect ? icons.REDIRECT : icons.CHECK;
|
const enableIcon = redirect ? icons.REDIRECT : icons.CHECK;
|
||||||
const enableTitle = redirect
|
const enableTitle = redirect
|
||||||
? 'Indexer is Enabled, Redirect is Enabled'
|
? translate('EnabledRedirected')
|
||||||
: 'Indexer is Enabled';
|
: translate('Enabled');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Component className={className} {...otherProps}>
|
<Component className={className} {...otherProps}>
|
||||||
@@ -43,7 +43,7 @@ function IndexerStatusCell(props: IndexerStatusCellProps) {
|
|||||||
className={styles.statusIcon}
|
className={styles.statusIcon}
|
||||||
kind={enabled ? enableKind : kinds.DEFAULT}
|
kind={enabled ? enableKind : kinds.DEFAULT}
|
||||||
name={enabled ? enableIcon : icons.BLOCKLIST}
|
name={enabled ? enableIcon : icons.BLOCKLIST}
|
||||||
title={enabled ? enableTitle : 'Indexer is Disabled'}
|
title={enabled ? enableTitle : translate('EnabledIndexerIsDisabled')}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
{status ? (
|
{status ? (
|
||||||
|
@@ -10,6 +10,7 @@ import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
|
|||||||
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||||
import { align, kinds } from 'Helpers/Props';
|
import { align, kinds } from 'Helpers/Props';
|
||||||
import getErrorMessage from 'Utilities/Object/getErrorMessage';
|
import getErrorMessage from 'Utilities/Object/getErrorMessage';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import StatsFilterMenu from './StatsFilterMenu';
|
import StatsFilterMenu from './StatsFilterMenu';
|
||||||
import styles from './Stats.css';
|
import styles from './Stats.css';
|
||||||
|
|
||||||
@@ -188,53 +189,53 @@ function Stats(props) {
|
|||||||
<div className={styles.fullWidthChart}>
|
<div className={styles.fullWidthChart}>
|
||||||
<BarChart
|
<BarChart
|
||||||
data={getAverageResponseTimeData(item.indexers)}
|
data={getAverageResponseTimeData(item.indexers)}
|
||||||
title='Average Response Times (ms)'
|
title={translate('AverageResponseTimesMs')}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.fullWidthChart}>
|
<div className={styles.fullWidthChart}>
|
||||||
<BarChart
|
<BarChart
|
||||||
data={getFailureRateData(item.indexers)}
|
data={getFailureRateData(item.indexers)}
|
||||||
title='Indexer Failure Rate'
|
title={translate('IndexerFailureRate')}
|
||||||
kind={kinds.WARNING}
|
kind={kinds.WARNING}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.halfWidthChart}>
|
<div className={styles.halfWidthChart}>
|
||||||
<StackedBarChart
|
<StackedBarChart
|
||||||
data={getTotalRequestsData(item.indexers)}
|
data={getTotalRequestsData(item.indexers)}
|
||||||
title='Total Indexer Queries'
|
title={translate('TotalIndexerQueries')}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.halfWidthChart}>
|
<div className={styles.halfWidthChart}>
|
||||||
<BarChart
|
<BarChart
|
||||||
data={getNumberGrabsData(item.indexers)}
|
data={getNumberGrabsData(item.indexers)}
|
||||||
title='Total Indexer Successful Grabs'
|
title={translate('TotalIndexerSuccessfulGrabs')}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.halfWidthChart}>
|
<div className={styles.halfWidthChart}>
|
||||||
<BarChart
|
<BarChart
|
||||||
data={getUserAgentQueryData(item.userAgents)}
|
data={getUserAgentQueryData(item.userAgents)}
|
||||||
title='Total User Agent Queries'
|
title={translate('TotalUserAgentQueries')}
|
||||||
horizontal={true}
|
horizontal={true}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.halfWidthChart}>
|
<div className={styles.halfWidthChart}>
|
||||||
<BarChart
|
<BarChart
|
||||||
data={getUserAgentGrabsData(item.userAgents)}
|
data={getUserAgentGrabsData(item.userAgents)}
|
||||||
title='Total User Agent Grabs'
|
title={translate('TotalUserAgentGrabs')}
|
||||||
horizontal={true}
|
horizontal={true}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.halfWidthChart}>
|
<div className={styles.halfWidthChart}>
|
||||||
<DoughnutChart
|
<DoughnutChart
|
||||||
data={getHostQueryData(item.hosts)}
|
data={getHostQueryData(item.hosts)}
|
||||||
title='Total Host Queries'
|
title={translate('TotalHostQueries')}
|
||||||
horizontal={true}
|
horizontal={true}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.halfWidthChart}>
|
<div className={styles.halfWidthChart}>
|
||||||
<DoughnutChart
|
<DoughnutChart
|
||||||
data={getHostGrabsData(item.hosts)}
|
data={getHostGrabsData(item.hosts)}
|
||||||
title='Total Host Grabs'
|
title={translate('TotalHostGrabs')}
|
||||||
horizontal={true}
|
horizontal={true}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
"AddSyncProfile": "Add Sync Profile",
|
"AddSyncProfile": "Add Sync Profile",
|
||||||
"AddToDownloadClient": "Add release to download client",
|
"AddToDownloadClient": "Add release to download client",
|
||||||
"Age": "Age",
|
"Age": "Age",
|
||||||
|
"Album": "Album",
|
||||||
"All": "All",
|
"All": "All",
|
||||||
"AllIndexersHiddenDueToFilter": "All indexers are hidden due to applied filter.",
|
"AllIndexersHiddenDueToFilter": "All indexers are hidden due to applied filter.",
|
||||||
"Analytics": "Analytics",
|
"Analytics": "Analytics",
|
||||||
@@ -43,6 +44,7 @@
|
|||||||
"AppSettingsSummary": "Applications and settings to configure how Prowlarr interacts with your PVR programs",
|
"AppSettingsSummary": "Applications and settings to configure how Prowlarr interacts with your PVR programs",
|
||||||
"AreYouSureYouWantToDeleteCategory": "Are you sure you want to delete mapped category?",
|
"AreYouSureYouWantToDeleteCategory": "Are you sure you want to delete mapped category?",
|
||||||
"AreYouSureYouWantToResetYourAPIKey": "Are you sure you want to reset your API Key?",
|
"AreYouSureYouWantToResetYourAPIKey": "Are you sure you want to reset your API Key?",
|
||||||
|
"Artist": "Artist",
|
||||||
"AudioSearch": "Audio Search",
|
"AudioSearch": "Audio Search",
|
||||||
"Auth": "Auth",
|
"Auth": "Auth",
|
||||||
"Authentication": "Authentication",
|
"Authentication": "Authentication",
|
||||||
@@ -50,8 +52,10 @@
|
|||||||
"AuthenticationRequired": "Authentication Required",
|
"AuthenticationRequired": "Authentication Required",
|
||||||
"AuthenticationRequiredHelpText": "Change which requests authentication is required for. Do not change unless you understand the risks.",
|
"AuthenticationRequiredHelpText": "Change which requests authentication is required for. Do not change unless you understand the risks.",
|
||||||
"AuthenticationRequiredWarning": "To prevent remote access without authentication, Prowlarr now requires authentication to be enabled. Configure your authentication method and credentials. You can optionally disable authentication from local addresses. Refer to the FAQ for additional information.",
|
"AuthenticationRequiredWarning": "To prevent remote access without authentication, Prowlarr now requires authentication to be enabled. Configure your authentication method and credentials. You can optionally disable authentication from local addresses. Refer to the FAQ for additional information.",
|
||||||
|
"Author": "Author",
|
||||||
"Automatic": "Automatic",
|
"Automatic": "Automatic",
|
||||||
"AutomaticSearch": "Automatic Search",
|
"AutomaticSearch": "Automatic Search",
|
||||||
|
"AverageResponseTimesMs": "Average Response Times (Ms)",
|
||||||
"Backup": "Backup",
|
"Backup": "Backup",
|
||||||
"BackupFolderHelpText": "Relative paths will be under Prowlarr's AppData directory",
|
"BackupFolderHelpText": "Relative paths will be under Prowlarr's AppData directory",
|
||||||
"BackupIntervalHelpText": "Interval between automatic backups",
|
"BackupIntervalHelpText": "Interval between automatic backups",
|
||||||
@@ -61,6 +65,7 @@
|
|||||||
"BeforeUpdate": "Before update",
|
"BeforeUpdate": "Before update",
|
||||||
"BindAddress": "Bind Address",
|
"BindAddress": "Bind Address",
|
||||||
"BindAddressHelpText": "Valid IP address, localhost or '*' for all interfaces",
|
"BindAddressHelpText": "Valid IP address, localhost or '*' for all interfaces",
|
||||||
|
"Book": "Book",
|
||||||
"BookSearch": "Book Search",
|
"BookSearch": "Book Search",
|
||||||
"BookSearchTypes": "Book Search Types",
|
"BookSearchTypes": "Book Search Types",
|
||||||
"Branch": "Branch",
|
"Branch": "Branch",
|
||||||
@@ -146,6 +151,7 @@
|
|||||||
"EnableSslHelpText": " Requires restart running as administrator to take effect",
|
"EnableSslHelpText": " Requires restart running as administrator to take effect",
|
||||||
"Encoding": "Encoding",
|
"Encoding": "Encoding",
|
||||||
"Ended": "Ended",
|
"Ended": "Ended",
|
||||||
|
"Episode": "Episode",
|
||||||
"Error": "Error",
|
"Error": "Error",
|
||||||
"ErrorLoadingContents": "Error loading contents",
|
"ErrorLoadingContents": "Error loading contents",
|
||||||
"Events": "Events",
|
"Events": "Events",
|
||||||
@@ -167,6 +173,7 @@
|
|||||||
"General": "General",
|
"General": "General",
|
||||||
"GeneralSettings": "General Settings",
|
"GeneralSettings": "General Settings",
|
||||||
"GeneralSettingsSummary": "Port, SSL, username/password, proxy, analytics, and updates",
|
"GeneralSettingsSummary": "Port, SSL, username/password, proxy, analytics, and updates",
|
||||||
|
"Genre": "Genre",
|
||||||
"Grabbed": "Grabbed",
|
"Grabbed": "Grabbed",
|
||||||
"GrabReleases": "Grab Release(s)",
|
"GrabReleases": "Grab Release(s)",
|
||||||
"Grabs": "Grabs",
|
"Grabs": "Grabs",
|
||||||
@@ -179,6 +186,7 @@
|
|||||||
"HistoryCleanup": "History Cleanup",
|
"HistoryCleanup": "History Cleanup",
|
||||||
"HistoryCleanupDaysHelpText": "Set to 0 to disable automatic cleanup",
|
"HistoryCleanupDaysHelpText": "Set to 0 to disable automatic cleanup",
|
||||||
"HistoryCleanupDaysHelpTextWarning": "History items older than the selected number of days will be cleaned up automatically",
|
"HistoryCleanupDaysHelpTextWarning": "History items older than the selected number of days will be cleaned up automatically",
|
||||||
|
"HistoryDetails": "History Details",
|
||||||
"HomePage": "Home Page",
|
"HomePage": "Home Page",
|
||||||
"Host": "Host",
|
"Host": "Host",
|
||||||
"Hostname": "Hostname",
|
"Hostname": "Hostname",
|
||||||
@@ -192,6 +200,7 @@
|
|||||||
"IndexerAuth": "Indexer Auth",
|
"IndexerAuth": "Indexer Auth",
|
||||||
"IndexerDetails": "Indexer Details",
|
"IndexerDetails": "Indexer Details",
|
||||||
"IndexerDisabled": "Indexer Disabled",
|
"IndexerDisabled": "Indexer Disabled",
|
||||||
|
"IndexerFailureRate": "Indexer Failure Rate",
|
||||||
"IndexerFlags": "Indexer Flags",
|
"IndexerFlags": "Indexer Flags",
|
||||||
"IndexerHealthCheckNoIndexers": "No indexers enabled, Prowlarr will not return search results",
|
"IndexerHealthCheckNoIndexers": "No indexers enabled, Prowlarr will not return search results",
|
||||||
"IndexerInfo": "Indexer Info",
|
"IndexerInfo": "Indexer Info",
|
||||||
@@ -224,6 +233,7 @@
|
|||||||
"InteractiveSearch": "Interactive Search",
|
"InteractiveSearch": "Interactive Search",
|
||||||
"Interval": "Interval",
|
"Interval": "Interval",
|
||||||
"KeyboardShortcuts": "Keyboard Shortcuts",
|
"KeyboardShortcuts": "Keyboard Shortcuts",
|
||||||
|
"Label": "Label",
|
||||||
"Language": "Language",
|
"Language": "Language",
|
||||||
"LastDuration": "Last Duration",
|
"LastDuration": "Last Duration",
|
||||||
"LastExecution": "Last Execution",
|
"LastExecution": "Last Execution",
|
||||||
@@ -248,6 +258,7 @@
|
|||||||
"MinimumSeeders": "Minimum Seeders",
|
"MinimumSeeders": "Minimum Seeders",
|
||||||
"MinimumSeedersHelpText": "Minimum seeders required by the Application for the indexer to grab",
|
"MinimumSeedersHelpText": "Minimum seeders required by the Application for the indexer to grab",
|
||||||
"Mode": "Mode",
|
"Mode": "Mode",
|
||||||
|
"More": "More",
|
||||||
"MoreInfo": "More Info",
|
"MoreInfo": "More Info",
|
||||||
"MovieIndexScrollBottom": "Movie Index: Scroll Bottom",
|
"MovieIndexScrollBottom": "Movie Index: Scroll Bottom",
|
||||||
"MovieIndexScrollTop": "Movie Index: Scroll Top",
|
"MovieIndexScrollTop": "Movie Index: Scroll Top",
|
||||||
@@ -313,8 +324,8 @@
|
|||||||
"ProxyPasswordHelpText": "You only need to enter a username and password if one is required. Leave them blank otherwise.",
|
"ProxyPasswordHelpText": "You only need to enter a username and password if one is required. Leave them blank otherwise.",
|
||||||
"ProxyType": "Proxy Type",
|
"ProxyType": "Proxy Type",
|
||||||
"ProxyUsernameHelpText": "You only need to enter a username and password if one is required. Leave them blank otherwise.",
|
"ProxyUsernameHelpText": "You only need to enter a username and password if one is required. Leave them blank otherwise.",
|
||||||
"PtpOldSettingsCheckMessage": "The following PassThePopcorn indexers have deprecated settings and should be updated: {0}",
|
|
||||||
"Public": "Public",
|
"Public": "Public",
|
||||||
|
"Publisher": "Publisher",
|
||||||
"Query": "Query",
|
"Query": "Query",
|
||||||
"QueryOptions": "Query Options",
|
"QueryOptions": "Query Options",
|
||||||
"QueryResults": "Query Results",
|
"QueryResults": "Query Results",
|
||||||
@@ -335,6 +346,7 @@
|
|||||||
"RemoveFilter": "Remove filter",
|
"RemoveFilter": "Remove filter",
|
||||||
"RemovingTag": "Removing tag",
|
"RemovingTag": "Removing tag",
|
||||||
"Replace": "Replace",
|
"Replace": "Replace",
|
||||||
|
"RepeatSearch": "Repeat Search",
|
||||||
"Reset": "Reset",
|
"Reset": "Reset",
|
||||||
"ResetAPIKey": "Reset API Key",
|
"ResetAPIKey": "Reset API Key",
|
||||||
"Restart": "Restart",
|
"Restart": "Restart",
|
||||||
@@ -358,6 +370,7 @@
|
|||||||
"SearchIndexers": "Search Indexers",
|
"SearchIndexers": "Search Indexers",
|
||||||
"SearchType": "Search Type",
|
"SearchType": "Search Type",
|
||||||
"SearchTypes": "Search Types",
|
"SearchTypes": "Search Types",
|
||||||
|
"Season": "Season",
|
||||||
"Security": "Security",
|
"Security": "Security",
|
||||||
"Seeders": "Seeders",
|
"Seeders": "Seeders",
|
||||||
"SelectAll": "Select All",
|
"SelectAll": "Select All",
|
||||||
@@ -423,6 +436,7 @@
|
|||||||
"TestAllClients": "Test All Clients",
|
"TestAllClients": "Test All Clients",
|
||||||
"TestAllIndexers": "Test All Indexers",
|
"TestAllIndexers": "Test All Indexers",
|
||||||
"TheLatestVersionIsAlreadyInstalled": "The latest version of {0} is already installed",
|
"TheLatestVersionIsAlreadyInstalled": "The latest version of {0} is already installed",
|
||||||
|
"Theme": "Theme",
|
||||||
"ThemeHelpText": "Change Application UI Theme, 'Auto' Theme will use your OS Theme to set Light or Dark mode. Inspired by {0}",
|
"ThemeHelpText": "Change Application UI Theme, 'Auto' Theme will use your OS Theme to set Light or Dark mode. Inspired by {0}",
|
||||||
"Time": "Time",
|
"Time": "Time",
|
||||||
"Title": "Title",
|
"Title": "Title",
|
||||||
@@ -430,6 +444,13 @@
|
|||||||
"Tomorrow": "Tomorrow",
|
"Tomorrow": "Tomorrow",
|
||||||
"Torrent": "Torrent",
|
"Torrent": "Torrent",
|
||||||
"Torrents": "Torrents",
|
"Torrents": "Torrents",
|
||||||
|
"TotalHostGrabs": "Total Host Grabs",
|
||||||
|
"TotalHostQueries": "Total Host Queries",
|
||||||
|
"TotalIndexerQueries": "Total Indexer Queries",
|
||||||
|
"TotalIndexerSuccessfulGrabs": "Total Indexer Successful Grabs",
|
||||||
|
"TotalUserAgentGrabs": "Total User Agent Grabs",
|
||||||
|
"TotalUserAgentQueries": "Total User Agent Queries",
|
||||||
|
"Track": "Track",
|
||||||
"TvSearch": "TV Search",
|
"TvSearch": "TV Search",
|
||||||
"TVSearchTypes": "TV Search Types",
|
"TVSearchTypes": "TV Search Types",
|
||||||
"Type": "Type",
|
"Type": "Type",
|
||||||
@@ -481,6 +502,7 @@
|
|||||||
"Website": "Website",
|
"Website": "Website",
|
||||||
"Wiki": "Wiki",
|
"Wiki": "Wiki",
|
||||||
"Yes": "Yes",
|
"Yes": "Yes",
|
||||||
|
"Year": "Year",
|
||||||
"YesCancel": "Yes, Cancel",
|
"YesCancel": "Yes, Cancel",
|
||||||
"Yesterday": "Yesterday"
|
"Yesterday": "Yesterday"
|
||||||
}
|
}
|
Reference in New Issue
Block a user