translate frontend wanted
This commit is contained in:
parent
a0c2d420c7
commit
e04f36186b
|
@ -16,6 +16,7 @@ import TablePager from 'Components/Table/TablePager';
|
||||||
import { align, icons, kinds } from 'Helpers/Props';
|
import { align, icons, kinds } from 'Helpers/Props';
|
||||||
import getFilterValue from 'Utilities/Filter/getFilterValue';
|
import getFilterValue from 'Utilities/Filter/getFilterValue';
|
||||||
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
|
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import getSelectedIds from 'Utilities/Table/getSelectedIds';
|
import getSelectedIds from 'Utilities/Table/getSelectedIds';
|
||||||
import removeOldSelectedState from 'Utilities/Table/removeOldSelectedState';
|
import removeOldSelectedState from 'Utilities/Table/removeOldSelectedState';
|
||||||
import selectAll from 'Utilities/Table/selectAll';
|
import selectAll from 'Utilities/Table/selectAll';
|
||||||
|
@ -147,18 +148,18 @@ class CutoffUnmet extends Component {
|
||||||
const isShowingMonitored = getMonitoredValue(this.props);
|
const isShowingMonitored = getMonitoredValue(this.props);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PageContent title="Cutoff Unmet">
|
<PageContent title={translate('CutoffUnmet')}>
|
||||||
<PageToolbar>
|
<PageToolbar>
|
||||||
<PageToolbarSection>
|
<PageToolbarSection>
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label="Search Selected"
|
label={translate('SearchSelected')}
|
||||||
iconName={icons.SEARCH}
|
iconName={icons.SEARCH}
|
||||||
isDisabled={!itemsSelected || isSearchingForCutoffUnmetEpisodes}
|
isDisabled={!itemsSelected || isSearchingForCutoffUnmetEpisodes}
|
||||||
onPress={this.onSearchSelectedPress}
|
onPress={this.onSearchSelectedPress}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label={isShowingMonitored ? 'Unmonitor Selected' : 'Monitor Selected'}
|
label={isShowingMonitored ? translate('UnmonitorSelected') : translate('MonitorSelected')}
|
||||||
iconName={icons.MONITORED}
|
iconName={icons.MONITORED}
|
||||||
isDisabled={!itemsSelected}
|
isDisabled={!itemsSelected}
|
||||||
isSpinning={isSaving}
|
isSpinning={isSaving}
|
||||||
|
@ -168,7 +169,7 @@ class CutoffUnmet extends Component {
|
||||||
<PageToolbarSeparator />
|
<PageToolbarSeparator />
|
||||||
|
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label="Search All"
|
label={translate('SearchAll')}
|
||||||
iconName={icons.SEARCH}
|
iconName={icons.SEARCH}
|
||||||
isDisabled={!items.length}
|
isDisabled={!items.length}
|
||||||
isSpinning={isSearchingForCutoffUnmetEpisodes}
|
isSpinning={isSearchingForCutoffUnmetEpisodes}
|
||||||
|
@ -198,14 +199,14 @@ class CutoffUnmet extends Component {
|
||||||
{
|
{
|
||||||
!isFetching && error &&
|
!isFetching && error &&
|
||||||
<Alert kind={kinds.DANGER}>
|
<Alert kind={kinds.DANGER}>
|
||||||
Error fetching cutoff unmet
|
{translate('CutoffUnmetLoadError')}
|
||||||
</Alert>
|
</Alert>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
isPopulated && !error && !items.length &&
|
isPopulated && !error && !items.length &&
|
||||||
<Alert kind={kinds.INFO}>
|
<Alert kind={kinds.INFO}>
|
||||||
No cutoff unmet items
|
{translate('CutoffUnmetNoItems')}
|
||||||
</Alert>
|
</Alert>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,18 +247,18 @@ class CutoffUnmet extends Component {
|
||||||
<ConfirmModal
|
<ConfirmModal
|
||||||
isOpen={isConfirmSearchAllCutoffUnmetModalOpen}
|
isOpen={isConfirmSearchAllCutoffUnmetModalOpen}
|
||||||
kind={kinds.DANGER}
|
kind={kinds.DANGER}
|
||||||
title="Search for all Cutoff Unmet episodes"
|
title={translate('SearchForCutoffUnmet')}
|
||||||
message={
|
message={
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
Are you sure you want to search for all {totalRecords} Cutoff Unmet episodes?
|
{translate('SearchForCutoffUnmetConfirmationCount', { totalRecords })}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
This cannot be cancelled once started without restarting Sonarr or disabling all of your indexers.
|
{translate('MassSearchCancelWarning')}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
confirmLabel="Search"
|
confirmLabel={translate('Search')}
|
||||||
onConfirm={this.onSearchAllCutoffUnmetConfirmed}
|
onConfirm={this.onSearchAllCutoffUnmetConfirmed}
|
||||||
onCancel={this.onConfirmSearchAllCutoffUnmetModalClose}
|
onCancel={this.onConfirmSearchAllCutoffUnmetModalClose}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -17,6 +17,7 @@ import { align, icons, kinds } from 'Helpers/Props';
|
||||||
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
||||||
import getFilterValue from 'Utilities/Filter/getFilterValue';
|
import getFilterValue from 'Utilities/Filter/getFilterValue';
|
||||||
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
|
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
import getSelectedIds from 'Utilities/Table/getSelectedIds';
|
import getSelectedIds from 'Utilities/Table/getSelectedIds';
|
||||||
import removeOldSelectedState from 'Utilities/Table/removeOldSelectedState';
|
import removeOldSelectedState from 'Utilities/Table/removeOldSelectedState';
|
||||||
import selectAll from 'Utilities/Table/selectAll';
|
import selectAll from 'Utilities/Table/selectAll';
|
||||||
|
@ -153,18 +154,18 @@ class Missing extends Component {
|
||||||
const isShowingMonitored = getMonitoredValue(this.props);
|
const isShowingMonitored = getMonitoredValue(this.props);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PageContent title="Missing">
|
<PageContent title={translate('Missing')}>
|
||||||
<PageToolbar>
|
<PageToolbar>
|
||||||
<PageToolbarSection>
|
<PageToolbarSection>
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label="Search Selected"
|
label={translate('SearchSelected')}
|
||||||
iconName={icons.SEARCH}
|
iconName={icons.SEARCH}
|
||||||
isDisabled={!itemsSelected || isSearchingForMissingEpisodes}
|
isDisabled={!itemsSelected || isSearchingForMissingEpisodes}
|
||||||
onPress={this.onSearchSelectedPress}
|
onPress={this.onSearchSelectedPress}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label={isShowingMonitored ? 'Unmonitor Selected' : 'Monitor Selected'}
|
label={isShowingMonitored ? translate('UnmonitorSelected') : translate('MonitorSelected')}
|
||||||
iconName={icons.MONITORED}
|
iconName={icons.MONITORED}
|
||||||
isDisabled={!itemsSelected}
|
isDisabled={!itemsSelected}
|
||||||
isSpinning={isSaving}
|
isSpinning={isSaving}
|
||||||
|
@ -174,7 +175,7 @@ class Missing extends Component {
|
||||||
<PageToolbarSeparator />
|
<PageToolbarSeparator />
|
||||||
|
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label="Search All"
|
label={translate('SearchAll')}
|
||||||
iconName={icons.SEARCH}
|
iconName={icons.SEARCH}
|
||||||
isDisabled={!items.length}
|
isDisabled={!items.length}
|
||||||
isSpinning={isSearchingForMissingEpisodes}
|
isSpinning={isSearchingForMissingEpisodes}
|
||||||
|
@ -184,7 +185,7 @@ class Missing extends Component {
|
||||||
<PageToolbarSeparator />
|
<PageToolbarSeparator />
|
||||||
|
|
||||||
<PageToolbarButton
|
<PageToolbarButton
|
||||||
label="Manual Import"
|
label={translate('ManualImport')}
|
||||||
iconName={icons.INTERACTIVE}
|
iconName={icons.INTERACTIVE}
|
||||||
onPress={this.onInteractiveImportPress}
|
onPress={this.onInteractiveImportPress}
|
||||||
/>
|
/>
|
||||||
|
@ -211,14 +212,14 @@ class Missing extends Component {
|
||||||
{
|
{
|
||||||
!isFetching && error &&
|
!isFetching && error &&
|
||||||
<Alert kind={kinds.DANGER}>
|
<Alert kind={kinds.DANGER}>
|
||||||
Error fetching missing items
|
{translate('MissingLoadError')}
|
||||||
</Alert>
|
</Alert>
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
isPopulated && !error && !items.length &&
|
isPopulated && !error && !items.length &&
|
||||||
<Alert kind={kinds.INFO}>
|
<Alert kind={kinds.INFO}>
|
||||||
No missing items
|
{translate('MissingNoItems')}
|
||||||
</Alert>
|
</Alert>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,18 +260,18 @@ class Missing extends Component {
|
||||||
<ConfirmModal
|
<ConfirmModal
|
||||||
isOpen={isConfirmSearchAllMissingModalOpen}
|
isOpen={isConfirmSearchAllMissingModalOpen}
|
||||||
kind={kinds.DANGER}
|
kind={kinds.DANGER}
|
||||||
title="Search for all missing episodes"
|
title={translate('SearchForAllMissing')}
|
||||||
message={
|
message={
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
Are you sure you want to search for all {totalRecords} missing episodes?
|
{translate('SearchForAllMissingConfirmationCount', { totalRecords })}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
This cannot be cancelled once started without restarting Sonarr or disabling all of your indexers.
|
{translate('MassSearchCancelWarning')}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
confirmLabel="Search"
|
confirmLabel={translate('Search')}
|
||||||
onConfirm={this.onSearchAllMissingConfirmed}
|
onConfirm={this.onSearchAllMissingConfirmed}
|
||||||
onCancel={this.onConfirmSearchAllMissingModalClose}
|
onCancel={this.onConfirmSearchAllMissingModalClose}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -248,6 +248,8 @@
|
||||||
"CustomFormatsSettingsSummary": "Custom Formats and Settings",
|
"CustomFormatsSettingsSummary": "Custom Formats and Settings",
|
||||||
"Cutoff": "Cutoff",
|
"Cutoff": "Cutoff",
|
||||||
"CutoffUnmet": "Cutoff Unmet",
|
"CutoffUnmet": "Cutoff Unmet",
|
||||||
|
"CutoffUnmetLoadError": "Error loading cutoff unmet items",
|
||||||
|
"CutoffUnmetNoItems": "No cutoff unmet items",
|
||||||
"Daily": "Daily",
|
"Daily": "Daily",
|
||||||
"DailyEpisodeFormat": "Daily Episode Format",
|
"DailyEpisodeFormat": "Daily Episode Format",
|
||||||
"DailyTypeDescription": "Episodes released daily or less frequently that use year-month-day (2023-08-04)",
|
"DailyTypeDescription": "Episodes released daily or less frequently that use year-month-day (2023-08-04)",
|
||||||
|
@ -720,6 +722,7 @@
|
||||||
"Mapping": "Mapping",
|
"Mapping": "Mapping",
|
||||||
"MarkAsFailed": "Mark as Failed",
|
"MarkAsFailed": "Mark as Failed",
|
||||||
"MarkAsFailedConfirmation": "Are you sure you want to mark '{sourceTitle}' as failed?",
|
"MarkAsFailedConfirmation": "Are you sure you want to mark '{sourceTitle}' as failed?",
|
||||||
|
"MassSearchCancelWarning": "This cannot be cancelled once started without restarting Sonarr or disabling all of your indexers.",
|
||||||
"MatchedToEpisodes": "Matched to Episodes",
|
"MatchedToEpisodes": "Matched to Episodes",
|
||||||
"MatchedToSeason": "Matched to Season",
|
"MatchedToSeason": "Matched to Season",
|
||||||
"MatchedToSeries": "Matched to Series",
|
"MatchedToSeries": "Matched to Series",
|
||||||
|
@ -761,6 +764,8 @@
|
||||||
"MinutesThirty": "30 Minutes: {thirty}",
|
"MinutesThirty": "30 Minutes: {thirty}",
|
||||||
"Missing": "Missing",
|
"Missing": "Missing",
|
||||||
"MissingEpisodes": "Missing Episodes",
|
"MissingEpisodes": "Missing Episodes",
|
||||||
|
"MissingLoadError": "Error loading missing items",
|
||||||
|
"MissingNoItems": "No missing items",
|
||||||
"Mixed": "Mixed",
|
"Mixed": "Mixed",
|
||||||
"Mode": "Mode",
|
"Mode": "Mode",
|
||||||
"Monday": "Monday",
|
"Monday": "Monday",
|
||||||
|
@ -779,6 +784,7 @@
|
||||||
"MonitorMissingEpisodesDescription": "Monitor episodes that do not have files or have not aired yet",
|
"MonitorMissingEpisodesDescription": "Monitor episodes that do not have files or have not aired yet",
|
||||||
"MonitorNone": "None",
|
"MonitorNone": "None",
|
||||||
"MonitorNoneDescription": "No episodes will be monitored",
|
"MonitorNoneDescription": "No episodes will be monitored",
|
||||||
|
"MonitorSelected": "Monitor Selected",
|
||||||
"MonitorSeries": "Monitor Series",
|
"MonitorSeries": "Monitor Series",
|
||||||
"MonitorSpecials": "Monitor Specials",
|
"MonitorSpecials": "Monitor Specials",
|
||||||
"MonitorSpecialsDescription": "Monitor all special episodes without changing the monitored status of other episodes",
|
"MonitorSpecialsDescription": "Monitor all special episodes without changing the monitored status of other episodes",
|
||||||
|
@ -1146,14 +1152,20 @@
|
||||||
"Script": "Script",
|
"Script": "Script",
|
||||||
"ScriptPath": "Script Path",
|
"ScriptPath": "Script Path",
|
||||||
"Search": "Search",
|
"Search": "Search",
|
||||||
|
"SearchAll": "Search All",
|
||||||
"SearchByTvdbId": "You can also search using TVDB ID of a show. eg. tvdb:71663",
|
"SearchByTvdbId": "You can also search using TVDB ID of a show. eg. tvdb:71663",
|
||||||
"SearchFailedError": "Search failed, please try again later.",
|
"SearchFailedError": "Search failed, please try again later.",
|
||||||
|
"SearchForAllMissing": "Search for all missing episodes",
|
||||||
|
"SearchForAllMissingConfirmationCount": "Are you sure you want to search for all {totalRecords} missing episodes?",
|
||||||
|
"SearchForCutoffUnmet": "Search for all Cutoff Unmet episodes",
|
||||||
|
"SearchForCutoffUnmetConfirmationCount": "Are you sure you want to search for all {totalRecords} Cutoff Unmet episodes?",
|
||||||
"SearchForMissing": "Search for Missing",
|
"SearchForMissing": "Search for Missing",
|
||||||
"SearchForMonitoredEpisodes": "Search for monitored episodes",
|
"SearchForMonitoredEpisodes": "Search for monitored episodes",
|
||||||
"SearchForMonitoredEpisodesSeason": "Search for monitored episodes in this season",
|
"SearchForMonitoredEpisodesSeason": "Search for monitored episodes in this season",
|
||||||
"SearchForQuery": "Search for {query}",
|
"SearchForQuery": "Search for {query}",
|
||||||
"SearchIsNotSupportedWithThisIndexer": "Search is not supported with this indexer",
|
"SearchIsNotSupportedWithThisIndexer": "Search is not supported with this indexer",
|
||||||
"SearchMonitored": "Search Monitored",
|
"SearchMonitored": "Search Monitored",
|
||||||
|
"SearchSelected": "Search Selected",
|
||||||
"Season": "Season",
|
"Season": "Season",
|
||||||
"SeasonCount": "Season Count",
|
"SeasonCount": "Season Count",
|
||||||
"SeasonDetails": "Season Details",
|
"SeasonDetails": "Season Details",
|
||||||
|
@ -1387,6 +1399,7 @@
|
||||||
"UnmappedFolders": "Unmapped Folders",
|
"UnmappedFolders": "Unmapped Folders",
|
||||||
"UnmonitorDeletedEpisodes": "Unmonitor Deleted Episodes",
|
"UnmonitorDeletedEpisodes": "Unmonitor Deleted Episodes",
|
||||||
"UnmonitorDeletedEpisodesHelpText": "Episodes deleted from disk are automatically unmonitored in Sonarr",
|
"UnmonitorDeletedEpisodesHelpText": "Episodes deleted from disk are automatically unmonitored in Sonarr",
|
||||||
|
"UnmonitorSelected": "Unmonitor Selected",
|
||||||
"UnmonitorSpecials": "Unmonitor Specials",
|
"UnmonitorSpecials": "Unmonitor Specials",
|
||||||
"UnmonitorSpecialsDescription": "Unmonitor all special episodes without changing the monitored status of other episodes",
|
"UnmonitorSpecialsDescription": "Unmonitor all special episodes without changing the monitored status of other episodes",
|
||||||
"Unmonitored": "Unmonitored",
|
"Unmonitored": "Unmonitored",
|
||||||
|
|
Loading…
Reference in New Issue