1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-22 22:16:13 -04:00

Add translations to frontend/InteractiveImport

This commit is contained in:
Stevie Robinson
2023-08-14 01:28:16 +02:00
committed by GitHub
parent 16d95ea6bf
commit 060b66aa39
13 changed files with 161 additions and 63 deletions
@@ -147,9 +147,19 @@ const COLUMNS = [
];
const importModeOptions = [
{ key: 'chooseImportMode', value: 'Choose Import Mode', disabled: true },
{ key: 'move', value: 'Move Files' },
{ key: 'copy', value: 'Hardlink/Copy Files' },
{
key: 'chooseImportMode',
value: () => translate('ChooseImportMode'),
disabled: true,
},
{
key: 'move',
value: () => translate('MoveFiles'),
},
{
key: 'copy',
value: () => translate('HardlinkCopyFiles'),
},
];
function isSameEpisodeFile(
@@ -260,12 +270,31 @@ function InteractiveImportModalContent(
useState<string | null>(null);
const [selectState, setSelectState] = useSelectState();
const [bulkSelectOptions, setBulkSelectOptions] = useState([
{ key: 'select', value: 'Select...', disabled: true },
{ key: 'season', value: 'Select Season' },
{ key: 'episode', value: 'Select Episode(s)' },
{ key: 'quality', value: 'Select Quality' },
{ key: 'releaseGroup', value: 'Select Release Group' },
{ key: 'language', value: 'Select Language' },
{
key: 'select',
value: translate('SelectDropdown'),
disabled: true,
},
{
key: 'season',
value: translate('SelectSeason'),
},
{
key: 'episode',
value: translate('SelectEpisodes'),
},
{
key: 'quality',
value: translate('SelectQuality'),
},
{
key: 'releaseGroup',
value: translate('SelectReleaseGroup'),
},
{
key: 'language',
value: translate('SelectLanguage'),
},
]);
const { allSelected, allUnselected, selectedState } = selectState;
const previousIsDeleting = usePrevious(isDeleting);
@@ -296,7 +325,7 @@ function InteractiveImportModalContent(
newBulkSelectOptions.splice(1, 0, {
key: 'series',
value: 'Select Series',
value: translate('SelectSeries'),
});
setBulkSelectOptions(newBulkSelectOptions);
@@ -410,7 +439,9 @@ function InteractiveImportModalContent(
const files: InteractiveImportCommandOptions[] = [];
if (finalImportMode === 'chooseImportMode') {
setInteractiveImportErrorMessage('An import mode must be selected');
setInteractiveImportErrorMessage(
translate('InteractiveImportNoImportMode')
);
return;
}
@@ -431,35 +462,35 @@ function InteractiveImportModalContent(
if (!series) {
setInteractiveImportErrorMessage(
'Series must be chosen for each selected file'
translate('InteractiveImportNoSeries')
);
return;
}
if (isNaN(seasonNumber)) {
setInteractiveImportErrorMessage(
'Season must be chosen for each selected file'
translate('InteractiveImportNoSeason')
);
return;
}
if (!episodes || !episodes.length) {
setInteractiveImportErrorMessage(
'One or more episodes must be chosen for each selected file'
translate('InteractiveImportNoEpisode')
);
return;
}
if (!quality) {
setInteractiveImportErrorMessage(
'Quality must be chosen for each selected file'
translate('InteractiveImportNoQuality')
);
return;
}
if (!languages) {
setInteractiveImportErrorMessage(
'Language(s) must be chosen for each selected file'
translate('InteractiveImportNoLanguage')
);
return;
}
@@ -699,7 +730,7 @@ function InteractiveImportModalContent(
const errorMessage = getErrorMessage(
error,
'Unable to load manual import items'
translate('InteractiveImportLoadError')
);
return (
@@ -716,7 +747,9 @@ function InteractiveImportModalContent(
<Icon name={icons.FILTER} size={22} />
<div className={styles.filterText}>
{filterExistingFiles ? 'Unmapped Files Only' : 'All Files'}
{filterExistingFiles
? translate('UnmappedFilesOnly')
: translate('AllFiles')}
</div>
</MenuButton>
@@ -726,7 +759,7 @@ function InteractiveImportModalContent(
isSelected={!filterExistingFiles}
onPress={onFilterExistingFilesChange}
>
All Files
{translate('AllFiles')}
</SelectedMenuItem>
<SelectedMenuItem
@@ -734,7 +767,7 @@ function InteractiveImportModalContent(
isSelected={filterExistingFiles}
onPress={onFilterExistingFilesChange}
>
Unmapped Files Only
{translate('UnmappedFilesOnly')}
</SelectedMenuItem>
</MenuContent>
</Menu>
@@ -777,7 +810,7 @@ function InteractiveImportModalContent(
) : null}
{isPopulated && !items.length && !isFetching
? 'No video files were found in the selected folder'
? translate('InteractiveImportNoFilesFound')
: null}
</ModalBody>
@@ -793,7 +826,7 @@ function InteractiveImportModalContent(
}
onPress={onDeleteSelectedPress}
>
Delete
{translate('Delete')}
</SpinnerButton>
) : null}
@@ -831,7 +864,7 @@ function InteractiveImportModalContent(
isDisabled={!selectedIds.length || !!invalidRowsSelected.length}
onPress={onImportSelectedPress}
>
Import
{translate('Import')}
</Button>
</div>
</ModalFooter>
@@ -891,9 +924,9 @@ function InteractiveImportModalContent(
<ConfirmModal
isOpen={isConfirmDeleteModalOpen}
kind={kinds.DANGER}
title="Delete Selected Episode Files"
message={'Are you sure you want to delete the selected episode files?'}
confirmLabel="Delete"
title={translate('DeleteSelectedEpisodeFiles')}
message={translate('DeleteSelectedEpisodeFilesHelpText')}
confirmLabel={translate('Delete')}
onConfirm={onConfirmDelete}
onCancel={onConfirmDeleteModalClose}
/>
@@ -348,7 +348,9 @@ function InteractiveImportRow(props: InteractiveImportRowProps) {
{isSeriesColumnVisible ? (
<TableRowCellButton
isDisabled={!allowSeriesChange}
title={allowSeriesChange ? 'Click to change series' : undefined}
title={
allowSeriesChange ? translate('ClickToChangeSeries') : undefined
}
onPress={onSelectSeriesPress}
>
{showSeriesPlaceholder ? (
@@ -361,7 +363,7 @@ function InteractiveImportRow(props: InteractiveImportRowProps) {
<TableRowCellButton
isDisabled={!series}
title={series ? 'Click to change season' : undefined}
title={series ? translate('ClickToChangeSeason') : undefined}
onPress={onSelectSeasonPress}
>
{showSeasonNumberPlaceholder ? (
@@ -379,7 +381,7 @@ function InteractiveImportRow(props: InteractiveImportRowProps) {
isDisabled={!series || requiresSeasonNumber}
title={
series && !requiresSeasonNumber
? 'Click to change episode'
? translate('ClickToChangeEpisode')
: undefined
}
onPress={onSelectEpisodePress}
@@ -392,7 +394,7 @@ function InteractiveImportRow(props: InteractiveImportRowProps) {
</TableRowCellButton>
<TableRowCellButton
title="Click to change release group"
title={translate('ClickToChangeReleaseGroup')}
onPress={onSelectReleaseGroupPress}
>
{showReleaseGroupPlaceholder ? (
@@ -404,7 +406,7 @@ function InteractiveImportRow(props: InteractiveImportRowProps) {
<TableRowCellButton
className={styles.quality}
title="Click to change quality"
title={translate('ClickToChangeQuality')}
onPress={onSelectQualityPress}
>
{showQualityPlaceholder && <InteractiveImportRowCellPlaceholder />}
@@ -416,7 +418,7 @@ function InteractiveImportRow(props: InteractiveImportRowProps) {
<TableRowCellButton
className={styles.languages}
title="Click to change language"
title={translate('ClickToChangeLanguage')}
onPress={onSelectLanguagePress}
>
{showLanguagePlaceholder && <InteractiveImportRowCellPlaceholder />}
@@ -450,7 +452,7 @@ function InteractiveImportRow(props: InteractiveImportRowProps) {
{rejections.length ? (
<Popover
anchor={<Icon name={icons.DANGER} kind={kinds.DANGER} />}
title="Release Rejected"
title={translate('ReleaseRejected')}
body={
<ul>
{rejections.map((rejection, index) => {