mirror of
https://github.com/Radarr/Radarr
synced 2025-12-06 08:28:50 +01:00
Convert Media Management settings to TypeScript
(cherry picked from commit 27f81117ed188712600d8daf3ccb5121f9808458)
This commit is contained in:
parent
3945a2eeb8
commit
2ebf391f85
47 changed files with 679 additions and 840 deletions
|
|
@ -17,7 +17,7 @@ import DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadCl
|
|||
import GeneralSettingsConnector from 'Settings/General/GeneralSettingsConnector';
|
||||
import ImportListSettingsConnector from 'Settings/ImportLists/ImportListSettingsConnector';
|
||||
import IndexerSettings from 'Settings/Indexers/IndexerSettings';
|
||||
import MediaManagementConnector from 'Settings/MediaManagement/MediaManagementConnector';
|
||||
import MediaManagement from 'Settings/MediaManagement/MediaManagement';
|
||||
import MetadataSettings from 'Settings/Metadata/MetadataSettings';
|
||||
import NotificationSettings from 'Settings/Notifications/NotificationSettings';
|
||||
import Profiles from 'Settings/Profiles/Profiles';
|
||||
|
|
@ -99,10 +99,7 @@ function AppRoutes() {
|
|||
|
||||
<Route exact={true} path="/settings" component={Settings} />
|
||||
|
||||
<Route
|
||||
path="/settings/mediamanagement"
|
||||
component={MediaManagementConnector}
|
||||
/>
|
||||
<Route path="/settings/mediamanagement" component={MediaManagement} />
|
||||
|
||||
<Route path="/settings/profiles" component={Profiles} />
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import Notification from 'typings/Notification';
|
|||
import QualityProfile from 'typings/QualityProfile';
|
||||
import General from 'typings/Settings/General';
|
||||
import IndexerOptions from 'typings/Settings/IndexerOptions';
|
||||
import MediaManagement from 'typings/Settings/MediaManagement';
|
||||
import NamingConfig from 'typings/Settings/NamingConfig';
|
||||
import NamingExample from 'typings/Settings/NamingExample';
|
||||
import ReleaseProfile from 'typings/Settings/ReleaseProfile';
|
||||
|
|
@ -39,6 +40,10 @@ export interface GeneralAppState
|
|||
extends AppSectionItemState<General>,
|
||||
AppSectionSaveState {}
|
||||
|
||||
export interface MediaManagementAppState
|
||||
extends AppSectionItemState<MediaManagement>,
|
||||
AppSectionSaveState {}
|
||||
|
||||
export interface NamingAppState
|
||||
extends AppSectionItemState<NamingConfig>,
|
||||
AppSectionSaveState {}
|
||||
|
|
@ -109,6 +114,7 @@ interface SettingsAppState {
|
|||
indexerOptions: IndexerOptionsAppState;
|
||||
indexers: IndexerAppState;
|
||||
languages: LanguageSettingsAppState;
|
||||
mediaManagement: MediaManagementAppState;
|
||||
metadata: MetadataAppState;
|
||||
naming: NamingAppState;
|
||||
namingExamples: NamingExamplesAppState;
|
||||
|
|
|
|||
|
|
@ -5,18 +5,20 @@ import { ValidationError, ValidationWarning } from 'typings/pending';
|
|||
import styles from './Form.css';
|
||||
|
||||
export interface FormProps {
|
||||
id?: string;
|
||||
children: ReactNode;
|
||||
validationErrors?: ValidationError[];
|
||||
validationWarnings?: ValidationWarning[];
|
||||
}
|
||||
|
||||
function Form({
|
||||
id,
|
||||
children,
|
||||
validationErrors = [],
|
||||
validationWarnings = [],
|
||||
}: FormProps) {
|
||||
return (
|
||||
<div>
|
||||
<div id={id}>
|
||||
{validationErrors.length || validationWarnings.length ? (
|
||||
<div className={styles.validationFailures}>
|
||||
{validationErrors.map((error, index) => {
|
||||
|
|
|
|||
8
frontend/src/Helpers/Hooks/useIsWindows.ts
Normal file
8
frontend/src/Helpers/Hooks/useIsWindows.ts
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
import { useSelector } from 'react-redux';
|
||||
import AppState from 'App/State/AppState';
|
||||
|
||||
function useIsWindows() {
|
||||
return useSelector((state: AppState) => state.system.status.item.isWindows);
|
||||
}
|
||||
|
||||
export default useIsWindows;
|
||||
|
|
@ -1,149 +0,0 @@
|
|||
// https://github.com/react-bootstrap/react-element-children
|
||||
|
||||
import React from 'react';
|
||||
|
||||
/**
|
||||
* Iterates through children that are typically specified as `props.children`,
|
||||
* but only maps over children that are "valid components".
|
||||
*
|
||||
* The mapFunction provided index will be normalised to the components mapped,
|
||||
* so an invalid component would not increase the index.
|
||||
*
|
||||
* @param {?*} children Children tree container.
|
||||
* @param {function(*, int)} func.
|
||||
* @param {*} context Context for func.
|
||||
* @return {object} Object containing the ordered map of results.
|
||||
*/
|
||||
export function map(children, func, context) {
|
||||
let index = 0;
|
||||
|
||||
return React.Children.map(children, (child) => {
|
||||
if (!React.isValidElement(child)) {
|
||||
return child;
|
||||
}
|
||||
|
||||
return func.call(context, child, index++);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Iterates through children that are "valid components".
|
||||
*
|
||||
* The provided forEachFunc(child, index) will be called for each
|
||||
* leaf child with the index reflecting the position relative to "valid components".
|
||||
*
|
||||
* @param {?*} children Children tree container.
|
||||
* @param {function(*, int)} func.
|
||||
* @param {*} context Context for context.
|
||||
*/
|
||||
export function forEach(children, func, context) {
|
||||
let index = 0;
|
||||
|
||||
React.Children.forEach(children, (child) => {
|
||||
if (!React.isValidElement(child)) {
|
||||
return;
|
||||
}
|
||||
|
||||
func.call(context, child, index++);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Count the number of "valid components" in the Children container.
|
||||
*
|
||||
* @param {?*} children Children tree container.
|
||||
* @returns {number}
|
||||
*/
|
||||
export function count(children) {
|
||||
let result = 0;
|
||||
|
||||
React.Children.forEach(children, (child) => {
|
||||
if (!React.isValidElement(child)) {
|
||||
return;
|
||||
}
|
||||
|
||||
++result;
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds children that are typically specified as `props.children`,
|
||||
* but only iterates over children that are "valid components".
|
||||
*
|
||||
* The provided forEachFunc(child, index) will be called for each
|
||||
* leaf child with the index reflecting the position relative to "valid components".
|
||||
*
|
||||
* @param {?*} children Children tree container.
|
||||
* @param {function(*, int)} func.
|
||||
* @param {*} context Context for func.
|
||||
* @returns {array} of children that meet the func return statement
|
||||
*/
|
||||
export function filter(children, func, context) {
|
||||
const result = [];
|
||||
|
||||
forEach(children, (child, index) => {
|
||||
if (func.call(context, child, index)) {
|
||||
result.push(child);
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export function find(children, func, context) {
|
||||
let result = null;
|
||||
|
||||
forEach(children, (child, index) => {
|
||||
if (result) {
|
||||
return;
|
||||
}
|
||||
if (func.call(context, child, index)) {
|
||||
result = child;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export function every(children, func, context) {
|
||||
let result = true;
|
||||
|
||||
forEach(children, (child, index) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
if (!func.call(context, child, index)) {
|
||||
result = false;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export function some(children, func, context) {
|
||||
let result = false;
|
||||
|
||||
forEach(children, (child, index) => {
|
||||
if (result) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (func.call(context, child, index)) {
|
||||
result = true;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export function toArray(children) {
|
||||
const result = [];
|
||||
|
||||
forEach(children, (child) => {
|
||||
result.push(child);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
export default function getDisplayName(Component) {
|
||||
return Component.displayName || Component.name || 'Component';
|
||||
}
|
||||
|
|
@ -46,7 +46,6 @@ function createImportListExclusionSelector(id?: number) {
|
|||
const settings = selectSettings(mapping, pendingChanges, saveError);
|
||||
|
||||
return {
|
||||
id,
|
||||
isFetching,
|
||||
error,
|
||||
isSaving,
|
||||
|
|
|
|||
|
|
@ -1,500 +0,0 @@
|
|||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import FieldSet from 'Components/FieldSet';
|
||||
import Form from 'Components/Form/Form';
|
||||
import FormGroup from 'Components/Form/FormGroup';
|
||||
import FormInputGroup from 'Components/Form/FormInputGroup';
|
||||
import FormLabel from 'Components/Form/FormLabel';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import { inputTypes, kinds, sizes } from 'Helpers/Props';
|
||||
import RootFolders from 'RootFolder/RootFolders';
|
||||
import SettingsToolbar from 'Settings/SettingsToolbar';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import Naming from './Naming/Naming';
|
||||
import AddRootFolder from './RootFolder/AddRootFolder';
|
||||
|
||||
const rescanAfterRefreshOptions = [
|
||||
{
|
||||
key: 'always',
|
||||
get value() {
|
||||
return translate('Always');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'afterManual',
|
||||
get value() {
|
||||
return translate('AfterManualRefresh');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'never',
|
||||
get value() {
|
||||
return translate('Never');
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const downloadPropersAndRepacksOptions = [
|
||||
{
|
||||
key: 'preferAndUpgrade',
|
||||
get value() {
|
||||
return translate('PreferAndUpgrade');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'doNotUpgrade',
|
||||
get value() {
|
||||
return translate('DoNotUpgradeAutomatically');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'doNotPrefer',
|
||||
get value() {
|
||||
return translate('DoNotPrefer');
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const fileDateOptions = [
|
||||
{
|
||||
key: 'none',
|
||||
get value() {
|
||||
return translate('None');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'cinemas',
|
||||
get value() {
|
||||
return translate('InCinemasDate');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'release',
|
||||
get value() {
|
||||
return translate('PhysicalReleaseDate');
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
class MediaManagement extends Component {
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
const {
|
||||
advancedSettings,
|
||||
isFetching,
|
||||
error,
|
||||
settings,
|
||||
hasSettings,
|
||||
isWindows,
|
||||
onInputChange,
|
||||
onSavePress,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<PageContent title={translate('MediaManagementSettings')}>
|
||||
<SettingsToolbar
|
||||
advancedSettings={advancedSettings}
|
||||
{...otherProps}
|
||||
onSavePress={onSavePress}
|
||||
/>
|
||||
|
||||
<PageContentBody>
|
||||
<Naming />
|
||||
|
||||
{
|
||||
isFetching ?
|
||||
<FieldSet legend={translate('NamingSettings')}>
|
||||
<LoadingIndicator />
|
||||
</FieldSet> : null
|
||||
}
|
||||
|
||||
{
|
||||
!isFetching && error ?
|
||||
<FieldSet legend={translate('NamingSettings')}>
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('MediaManagementSettingsLoadError')}
|
||||
</Alert>
|
||||
</FieldSet> : null
|
||||
}
|
||||
|
||||
{
|
||||
hasSettings && !isFetching && !error ?
|
||||
<Form
|
||||
id="mediaManagementSettings"
|
||||
{...otherProps}
|
||||
>
|
||||
{
|
||||
advancedSettings ?
|
||||
<FieldSet legend={translate('Folders')}>
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('CreateEmptyMovieFolders')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
isDisabled={settings.deleteEmptyFolders.value && !settings.createEmptyMovieFolders.value}
|
||||
name="createEmptyMovieFolders"
|
||||
helpText={translate('CreateEmptyMovieFoldersHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.createEmptyMovieFolders}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('DeleteEmptyFolders')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
isDisabled={settings.createEmptyMovieFolders.value && !settings.deleteEmptyFolders.value}
|
||||
name="deleteEmptyFolders"
|
||||
helpText={translate('DeleteEmptyFoldersHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.deleteEmptyFolders}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FieldSet> : null
|
||||
}
|
||||
|
||||
{
|
||||
advancedSettings ?
|
||||
<FieldSet
|
||||
legend={translate('Importing')}
|
||||
>
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('SkipFreeSpaceCheck')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="skipFreeSpaceCheckWhenImporting"
|
||||
helpText={translate('SkipFreeSpaceCheckHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.skipFreeSpaceCheckWhenImporting}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('MinimumFreeSpace')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.NUMBER}
|
||||
unit='MB'
|
||||
name="minimumFreeSpaceWhenImporting"
|
||||
helpText={translate('MinimumFreeSpaceHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.minimumFreeSpaceWhenImporting}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('UseHardlinksInsteadOfCopy')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="copyUsingHardlinks"
|
||||
helpText={translate('CopyUsingHardlinksMovieHelpText')}
|
||||
helpTextWarning={translate('CopyUsingHardlinksHelpTextWarning')}
|
||||
onChange={onInputChange}
|
||||
{...settings.copyUsingHardlinks}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('ImportUsingScript')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="useScriptImport"
|
||||
helpText={translate('ImportUsingScriptHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.useScriptImport}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
settings.useScriptImport.value ?
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ImportScriptPath')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.PATH}
|
||||
includeFiles={true}
|
||||
name="scriptImportPath"
|
||||
helpText={translate('ImportScriptPathHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.scriptImportPath}
|
||||
/>
|
||||
</FormGroup> : null
|
||||
}
|
||||
|
||||
<FormGroup size={sizes.MEDIUM}>
|
||||
<FormLabel>{translate('ImportExtraFiles')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="importExtraFiles"
|
||||
helpText={translate('ImportExtraFilesMovieHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.importExtraFiles}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
settings.importExtraFiles.value ?
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ImportExtraFiles')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="extraFileExtensions"
|
||||
helpTexts={[
|
||||
translate('ExtraFileExtensionsHelpText'),
|
||||
translate('ExtraFileExtensionsHelpTextsExamples')
|
||||
]}
|
||||
onChange={onInputChange}
|
||||
{...settings.extraFileExtensions}
|
||||
/>
|
||||
</FormGroup> : null
|
||||
}
|
||||
</FieldSet> : null
|
||||
}
|
||||
|
||||
<FieldSet
|
||||
legend={translate('FileManagement')}
|
||||
>
|
||||
<FormGroup size={sizes.MEDIUM}>
|
||||
<FormLabel>{translate('IgnoreDeletedMovies')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="autoUnmonitorPreviouslyDownloadedMovies"
|
||||
helpText={translate('AutoUnmonitorPreviouslyDownloadedMoviesHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.autoUnmonitorPreviouslyDownloadedMovies}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('DownloadPropersAndRepacks')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="downloadPropersAndRepacks"
|
||||
helpTexts={[
|
||||
translate('DownloadPropersAndRepacksHelpText'),
|
||||
translate('DownloadPropersAndRepacksHelpTextCustomFormat')
|
||||
]}
|
||||
helpTextWarning={
|
||||
settings.downloadPropersAndRepacks.value === 'doNotPrefer' ?
|
||||
translate('DownloadPropersAndRepacksHelpTextWarning') :
|
||||
undefined
|
||||
}
|
||||
values={downloadPropersAndRepacksOptions}
|
||||
onChange={onInputChange}
|
||||
{...settings.downloadPropersAndRepacks}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('AnalyseVideoFiles')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="enableMediaInfo"
|
||||
helpText={translate('AnalyseVideoFilesHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.enableMediaInfo}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('RescanMovieFolderAfterRefresh')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="rescanAfterRefresh"
|
||||
helpText={translate('RescanAfterRefreshMovieHelpText')}
|
||||
helpTextWarning={translate('RescanAfterRefreshHelpTextWarning')}
|
||||
values={rescanAfterRefreshOptions}
|
||||
onChange={onInputChange}
|
||||
{...settings.rescanAfterRefresh}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ChangeFileDate')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="fileDate"
|
||||
helpText={translate('ChangeFileDateHelpText')}
|
||||
values={fileDateOptions}
|
||||
onChange={onInputChange}
|
||||
{...settings.fileDate}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('RecyclingBin')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.PATH}
|
||||
name="recycleBin"
|
||||
helpText={translate('RecyclingBinHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...settings.recycleBin}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('RecyclingBinCleanup')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.NUMBER}
|
||||
name="recycleBinCleanupDays"
|
||||
helpText={translate('RecyclingBinCleanupHelpText')}
|
||||
helpTextWarning={translate('RecyclingBinCleanupHelpTextWarning')}
|
||||
min={0}
|
||||
onChange={onInputChange}
|
||||
{...settings.recycleBinCleanupDays}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FieldSet>
|
||||
|
||||
{
|
||||
advancedSettings && !isWindows ?
|
||||
<FieldSet
|
||||
legend={translate('Permissions')}
|
||||
>
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('SetPermissions')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="setPermissionsLinux"
|
||||
helpText={translate('SetPermissionsLinuxHelpText')}
|
||||
helpTextWarning={translate('SetPermissionsLinuxHelpTextWarning')}
|
||||
onChange={onInputChange}
|
||||
{...settings.setPermissionsLinux}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ChmodFolder')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.UMASK}
|
||||
name="chmodFolder"
|
||||
helpText={translate('ChmodFolderHelpText')}
|
||||
helpTextWarning={translate('ChmodFolderHelpTextWarning')}
|
||||
onChange={onInputChange}
|
||||
{...settings.chmodFolder}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ChownGroup')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="chownGroup"
|
||||
helpText={translate('ChownGroupHelpText')}
|
||||
helpTextWarning={translate('ChownGroupHelpTextWarning')}
|
||||
values={fileDateOptions}
|
||||
onChange={onInputChange}
|
||||
{...settings.chownGroup}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FieldSet> : null
|
||||
}
|
||||
</Form> : null
|
||||
}
|
||||
|
||||
<FieldSet legend={translate('RootFolders')}>
|
||||
<RootFolders />
|
||||
<AddRootFolder />
|
||||
</FieldSet>
|
||||
</PageContentBody>
|
||||
</PageContent>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
MediaManagement.propTypes = {
|
||||
advancedSettings: PropTypes.bool.isRequired,
|
||||
isFetching: PropTypes.bool.isRequired,
|
||||
error: PropTypes.object,
|
||||
settings: PropTypes.object.isRequired,
|
||||
hasSettings: PropTypes.bool.isRequired,
|
||||
isWindows: PropTypes.bool.isRequired,
|
||||
onSavePress: PropTypes.func.isRequired,
|
||||
onInputChange: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default MediaManagement;
|
||||
530
frontend/src/Settings/MediaManagement/MediaManagement.tsx
Normal file
530
frontend/src/Settings/MediaManagement/MediaManagement.tsx
Normal file
|
|
@ -0,0 +1,530 @@
|
|||
import React, { useCallback, useEffect } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import AppState from 'App/State/AppState';
|
||||
import Alert from 'Components/Alert';
|
||||
import FieldSet from 'Components/FieldSet';
|
||||
import Form from 'Components/Form/Form';
|
||||
import FormGroup from 'Components/Form/FormGroup';
|
||||
import FormInputGroup from 'Components/Form/FormInputGroup';
|
||||
import FormLabel from 'Components/Form/FormLabel';
|
||||
import { EnhancedSelectInputValue } from 'Components/Form/Select/EnhancedSelectInput';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import useShowAdvancedSettings from 'Helpers/Hooks/useShowAdvancedSettings';
|
||||
import { inputTypes, kinds, sizes } from 'Helpers/Props';
|
||||
import RootFolders from 'RootFolder/RootFolders';
|
||||
import SettingsToolbar from 'Settings/SettingsToolbar';
|
||||
import { clearPendingChanges } from 'Store/Actions/baseActions';
|
||||
import {
|
||||
fetchMediaManagementSettings,
|
||||
saveMediaManagementSettings,
|
||||
saveNamingSettings,
|
||||
setMediaManagementSettingsValue,
|
||||
} from 'Store/Actions/settingsActions';
|
||||
import createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';
|
||||
import useIsWindows from 'System/useIsWindows';
|
||||
import { InputChanged } from 'typings/inputs';
|
||||
import isEmpty from 'Utilities/Object/isEmpty';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import Naming from './Naming/Naming';
|
||||
import AddRootFolder from './RootFolder/AddRootFolder';
|
||||
|
||||
const SECTION = 'mediaManagement';
|
||||
|
||||
const rescanAfterRefreshOptions: EnhancedSelectInputValue<string>[] = [
|
||||
{
|
||||
key: 'always',
|
||||
get value() {
|
||||
return translate('Always');
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'afterManual',
|
||||
get value() {
|
||||
return translate('AfterManualRefresh');
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'never',
|
||||
get value() {
|
||||
return translate('Never');
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const downloadPropersAndRepacksOptions: EnhancedSelectInputValue<string>[] = [
|
||||
{
|
||||
key: 'preferAndUpgrade',
|
||||
get value() {
|
||||
return translate('PreferAndUpgrade');
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'doNotUpgrade',
|
||||
get value() {
|
||||
return translate('DoNotUpgradeAutomatically');
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'doNotPrefer',
|
||||
get value() {
|
||||
return translate('DoNotPrefer');
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const fileDateOptions: EnhancedSelectInputValue<string>[] = [
|
||||
{
|
||||
key: 'none',
|
||||
get value() {
|
||||
return translate('None');
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'cinemas',
|
||||
get value() {
|
||||
return translate('InCinemasDate');
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'release',
|
||||
get value() {
|
||||
return translate('PhysicalReleaseDate');
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
function MediaManagement() {
|
||||
const dispatch = useDispatch();
|
||||
const showAdvancedSettings = useShowAdvancedSettings();
|
||||
const hasNamingPendingChanges = !isEmpty(
|
||||
useSelector((state: AppState) => state.settings.naming.pendingChanges)
|
||||
);
|
||||
const isWindows = useIsWindows();
|
||||
const {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
isSaving,
|
||||
error,
|
||||
settings,
|
||||
hasSettings,
|
||||
hasPendingChanges,
|
||||
validationErrors,
|
||||
validationWarnings,
|
||||
} = useSelector(createSettingsSectionSelector(SECTION));
|
||||
|
||||
const handleSavePress = useCallback(() => {
|
||||
dispatch(saveMediaManagementSettings());
|
||||
dispatch(saveNamingSettings());
|
||||
}, [dispatch]);
|
||||
|
||||
const handleInputChange = useCallback(
|
||||
(change: InputChanged) => {
|
||||
// @ts-expect-error - actions are not typed
|
||||
dispatch(setMediaManagementSettingsValue(change));
|
||||
},
|
||||
[dispatch]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
dispatch(fetchMediaManagementSettings());
|
||||
|
||||
return () => {
|
||||
dispatch(clearPendingChanges({ section: `settings.${SECTION}` }));
|
||||
};
|
||||
}, [dispatch]);
|
||||
|
||||
return (
|
||||
<PageContent title={translate('MediaManagementSettings')}>
|
||||
<SettingsToolbar
|
||||
isSaving={isSaving}
|
||||
hasPendingChanges={hasNamingPendingChanges || hasPendingChanges}
|
||||
onSavePress={handleSavePress}
|
||||
/>
|
||||
|
||||
<PageContentBody>
|
||||
<Naming />
|
||||
|
||||
{isFetching ? (
|
||||
<FieldSet legend={translate('NamingSettings')}>
|
||||
<LoadingIndicator />
|
||||
</FieldSet>
|
||||
) : null}
|
||||
|
||||
{!isFetching && error ? (
|
||||
<FieldSet legend={translate('NamingSettings')}>
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('MediaManagementSettingsLoadError')}
|
||||
</Alert>
|
||||
</FieldSet>
|
||||
) : null}
|
||||
|
||||
{hasSettings && isPopulated && !error ? (
|
||||
<Form
|
||||
id="mediaManagementSettings"
|
||||
validationErrors={validationErrors}
|
||||
validationWarnings={validationWarnings}
|
||||
>
|
||||
{showAdvancedSettings ? (
|
||||
<FieldSet legend={translate('Folders')}>
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('CreateEmptyMovieFolders')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
isDisabled={
|
||||
settings.deleteEmptyFolders.value &&
|
||||
!settings.createEmptyMovieFolders.value
|
||||
}
|
||||
name="createEmptyMovieFolders"
|
||||
helpText={translate('CreateEmptyMovieFoldersHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.createEmptyMovieFolders}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('DeleteEmptyFolders')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
isDisabled={
|
||||
settings.createEmptyMovieFolders.value &&
|
||||
!settings.deleteEmptyFolders.value
|
||||
}
|
||||
name="deleteEmptyFolders"
|
||||
helpText={translate('DeleteEmptyMovieFoldersHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.deleteEmptyFolders}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FieldSet>
|
||||
) : null}
|
||||
|
||||
{showAdvancedSettings ? (
|
||||
<FieldSet legend={translate('Importing')}>
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('SkipFreeSpaceCheck')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="skipFreeSpaceCheckWhenImporting"
|
||||
helpText={translate('SkipFreeSpaceCheckHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.skipFreeSpaceCheckWhenImporting}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('MinimumFreeSpace')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.NUMBER}
|
||||
unit="MB"
|
||||
name="minimumFreeSpaceWhenImporting"
|
||||
helpText={translate('MinimumFreeSpaceHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.minimumFreeSpaceWhenImporting}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>
|
||||
{translate('UseHardlinksInsteadOfCopy')}
|
||||
</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="copyUsingHardlinks"
|
||||
helpText={translate('CopyUsingHardlinksMovieHelpText')}
|
||||
helpTextWarning={translate(
|
||||
'CopyUsingHardlinksHelpTextWarning'
|
||||
)}
|
||||
onChange={handleInputChange}
|
||||
{...settings.copyUsingHardlinks}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('ImportUsingScript')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="useScriptImport"
|
||||
helpText={translate('ImportUsingScriptHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.useScriptImport}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{settings.useScriptImport.value ? (
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ImportScriptPath')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.PATH}
|
||||
includeFiles={true}
|
||||
name="scriptImportPath"
|
||||
helpText={translate('ImportScriptPathHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.scriptImportPath}
|
||||
/>
|
||||
</FormGroup>
|
||||
) : null}
|
||||
|
||||
<FormGroup size={sizes.MEDIUM}>
|
||||
<FormLabel>{translate('ImportExtraFiles')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="importExtraFiles"
|
||||
helpText={translate('ImportExtraFilesMovieHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.importExtraFiles}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{settings.importExtraFiles.value ? (
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ImportExtraFiles')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="extraFileExtensions"
|
||||
helpTexts={[
|
||||
translate('ExtraFileExtensionsHelpText'),
|
||||
translate('ExtraFileExtensionsHelpTextsExamples'),
|
||||
]}
|
||||
onChange={handleInputChange}
|
||||
{...settings.extraFileExtensions}
|
||||
/>
|
||||
</FormGroup>
|
||||
) : null}
|
||||
</FieldSet>
|
||||
) : null}
|
||||
|
||||
<FieldSet legend={translate('FileManagement')}>
|
||||
<FormGroup size={sizes.MEDIUM}>
|
||||
<FormLabel>{translate('UnmonitorDeletedMovies')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="autoUnmonitorPreviouslyDownloadedMovies"
|
||||
helpText={translate('UnmonitorDeletedMoviesHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.autoUnmonitorPreviouslyDownloadedMovies}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('DownloadPropersAndRepacks')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="downloadPropersAndRepacks"
|
||||
helpTexts={[
|
||||
translate('DownloadPropersAndRepacksHelpText'),
|
||||
translate('DownloadPropersAndRepacksHelpTextCustomFormat'),
|
||||
]}
|
||||
helpTextWarning={
|
||||
settings.downloadPropersAndRepacks.value === 'doNotPrefer'
|
||||
? translate('DownloadPropersAndRepacksHelpTextWarning')
|
||||
: undefined
|
||||
}
|
||||
values={downloadPropersAndRepacksOptions}
|
||||
onChange={handleInputChange}
|
||||
{...settings.downloadPropersAndRepacks}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('AnalyseVideoFiles')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="enableMediaInfo"
|
||||
helpText={translate('AnalyseVideoFilesHelpText')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.enableMediaInfo}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>
|
||||
{translate('RescanMovieFolderAfterRefresh')}
|
||||
</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="rescanAfterRefresh"
|
||||
helpText={translate('RescanAfterRefreshMovieHelpText')}
|
||||
helpTextWarning={translate(
|
||||
'RescanAfterRefreshHelpTextWarning'
|
||||
)}
|
||||
values={rescanAfterRefreshOptions}
|
||||
onChange={handleInputChange}
|
||||
{...settings.rescanAfterRefresh}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ChangeFileDate')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="fileDate"
|
||||
helpText={translate('ChangeFileDateHelpText')}
|
||||
values={fileDateOptions}
|
||||
onChange={handleInputChange}
|
||||
{...settings.fileDate}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('RecyclingBin')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.PATH}
|
||||
name="recycleBin"
|
||||
helpText={translate('RecyclingBinHelpText')}
|
||||
includeFiles={false}
|
||||
onChange={handleInputChange}
|
||||
{...settings.recycleBin}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('RecyclingBinCleanup')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.NUMBER}
|
||||
name="recycleBinCleanupDays"
|
||||
helpText={translate('RecyclingBinCleanupHelpText')}
|
||||
helpTextWarning={translate(
|
||||
'RecyclingBinCleanupHelpTextWarning'
|
||||
)}
|
||||
min={0}
|
||||
onChange={handleInputChange}
|
||||
{...settings.recycleBinCleanupDays}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FieldSet>
|
||||
|
||||
{showAdvancedSettings && !isWindows ? (
|
||||
<FieldSet legend={translate('Permissions')}>
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('SetPermissions')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="setPermissionsLinux"
|
||||
helpText={translate('SetPermissionsLinuxHelpText')}
|
||||
helpTextWarning={translate(
|
||||
'SetPermissionsLinuxHelpTextWarning'
|
||||
)}
|
||||
onChange={handleInputChange}
|
||||
{...settings.setPermissionsLinux}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ChmodFolder')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.UMASK}
|
||||
name="chmodFolder"
|
||||
helpText={translate('ChmodFolderHelpText')}
|
||||
helpTextWarning={translate('ChmodFolderHelpTextWarning')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.chmodFolder}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={showAdvancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ChownGroup')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="chownGroup"
|
||||
helpText={translate('ChownGroupHelpText')}
|
||||
helpTextWarning={translate('ChownGroupHelpTextWarning')}
|
||||
onChange={handleInputChange}
|
||||
{...settings.chownGroup}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FieldSet>
|
||||
) : null}
|
||||
</Form>
|
||||
) : null}
|
||||
|
||||
<FieldSet legend={translate('RootFolders')}>
|
||||
<RootFolders />
|
||||
<AddRootFolder />
|
||||
</FieldSet>
|
||||
</PageContentBody>
|
||||
</PageContent>
|
||||
);
|
||||
}
|
||||
|
||||
export default MediaManagement;
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import { clearPendingChanges } from 'Store/Actions/baseActions';
|
||||
import { fetchMediaManagementSettings, saveMediaManagementSettings, saveNamingSettings, setMediaManagementSettingsValue } from 'Store/Actions/settingsActions';
|
||||
import createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';
|
||||
import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';
|
||||
import MediaManagement from './MediaManagement';
|
||||
|
||||
const SECTION = 'mediaManagement';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
(state) => state.settings.advancedSettings,
|
||||
(state) => state.settings.naming,
|
||||
createSettingsSectionSelector(SECTION),
|
||||
createSystemStatusSelector(),
|
||||
(advancedSettings, namingSettings, sectionSettings, systemStatus) => {
|
||||
return {
|
||||
advancedSettings,
|
||||
...sectionSettings,
|
||||
hasPendingChanges: !_.isEmpty(namingSettings.pendingChanges) || sectionSettings.hasPendingChanges,
|
||||
isWindows: systemStatus.isWindows
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const mapDispatchToProps = {
|
||||
fetchMediaManagementSettings,
|
||||
setMediaManagementSettingsValue,
|
||||
saveMediaManagementSettings,
|
||||
saveNamingSettings,
|
||||
clearPendingChanges
|
||||
};
|
||||
|
||||
class MediaManagementConnector extends Component {
|
||||
|
||||
//
|
||||
// Lifecycle
|
||||
|
||||
componentDidMount() {
|
||||
this.props.fetchMediaManagementSettings();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.props.clearPendingChanges({ section: `settings.${SECTION}` });
|
||||
}
|
||||
|
||||
//
|
||||
// Listeners
|
||||
|
||||
onInputChange = ({ name, value }) => {
|
||||
this.props.setMediaManagementSettingsValue({ name, value });
|
||||
};
|
||||
|
||||
onSavePress = () => {
|
||||
this.props.saveMediaManagementSettings();
|
||||
this.props.saveNamingSettings();
|
||||
};
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
return (
|
||||
<MediaManagement
|
||||
onInputChange={this.onInputChange}
|
||||
onSavePress={this.onSavePress}
|
||||
{...this.props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
MediaManagementConnector.propTypes = {
|
||||
fetchMediaManagementSettings: PropTypes.func.isRequired,
|
||||
setMediaManagementSettingsValue: PropTypes.func.isRequired,
|
||||
saveMediaManagementSettings: PropTypes.func.isRequired,
|
||||
saveNamingSettings: PropTypes.func.isRequired,
|
||||
clearPendingChanges: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default connect(createMapStateToProps, mapDispatchToProps)(MediaManagementConnector);
|
||||
|
|
@ -51,7 +51,6 @@ function createReleaseProfileSelector(id?: number) {
|
|||
);
|
||||
|
||||
return {
|
||||
id,
|
||||
isFetching,
|
||||
error,
|
||||
isSaving,
|
||||
|
|
|
|||
15
frontend/src/Utilities/Object/isEmpty.ts
Normal file
15
frontend/src/Utilities/Object/isEmpty.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
function isEmpty<T extends object>(obj: T | undefined) {
|
||||
if (!obj) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const prop in obj) {
|
||||
if (Object.hasOwn(obj, prop)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
export default isEmpty;
|
||||
21
frontend/src/typings/Settings/MediaManagement.ts
Normal file
21
frontend/src/typings/Settings/MediaManagement.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
export default interface MediaManagement {
|
||||
autoUnmonitorPreviouslyDownloadedMovies: boolean;
|
||||
recycleBin: string;
|
||||
recycleBinCleanupDays: number;
|
||||
downloadPropersAndRepacks: string;
|
||||
createEmptyMovieFolders: boolean;
|
||||
deleteEmptyFolders: boolean;
|
||||
fileDate: string;
|
||||
rescanAfterRefresh: string;
|
||||
setPermissionsLinux: boolean;
|
||||
chmodFolder: string;
|
||||
chownGroup: string;
|
||||
skipFreeSpaceCheckWhenImporting: boolean;
|
||||
minimumFreeSpaceWhenImporting: number;
|
||||
copyUsingHardlinks: boolean;
|
||||
useScriptImport: boolean;
|
||||
scriptImportPath: string;
|
||||
importExtraFiles: boolean;
|
||||
extraFileExtensions: string;
|
||||
enableMediaInfo: boolean;
|
||||
}
|
||||
|
|
@ -382,7 +382,7 @@
|
|||
"IllRestartLater": "سأعيد التشغيل لاحقًا",
|
||||
"AddNewRestriction": "أضف قيدًا جديدًا",
|
||||
"IgnoredHelpText": "سيتم رفض الإصدار إذا كان يحتوي على واحد أو أكثر من المصطلحات (غير حساس لحالة الأحرف)",
|
||||
"IgnoreDeletedMovies": "غير مراقب الأفلام المحذوفة",
|
||||
"UnmonitorDeletedMovies": "غير مراقب الأفلام المحذوفة",
|
||||
"IgnoredAddresses": "العناوين التي تم تجاهلها",
|
||||
"Ignored": "تم التجاهل",
|
||||
"IconForCutoffUnmet": "رمز القطع غير الملائم",
|
||||
|
|
@ -696,7 +696,7 @@
|
|||
"DeleteMovieFiles": "احذف {0} ملفات الأفلام",
|
||||
"DeleteMovieFilesHelpText": "احذف ملفات الفيلم ومجلد الفيلم",
|
||||
"DeleteFile": "حذف ملف",
|
||||
"DeleteEmptyFoldersHelpText": "احذف مجلدات الأفلام الفارغة أثناء فحص القرص وعند حذف ملفات الأفلام",
|
||||
"DeleteEmptyMovieFoldersHelpText": "احذف مجلدات الأفلام الفارغة أثناء فحص القرص وعند حذف ملفات الأفلام",
|
||||
"DeleteEmptyFolders": "احذف المجلدات الفارغة",
|
||||
"DeleteDownloadClientMessageText": "هل أنت متأكد أنك تريد حذف برنامج التنزيل \"{0}\"؟",
|
||||
"DeleteDownloadClient": "حذف Download Client",
|
||||
|
|
@ -805,7 +805,7 @@
|
|||
"Backup": "دعم",
|
||||
"AvailabilityDelayHelpText": "مقدار الوقت قبل أو بعد التاريخ المتاح للبحث عن فيلم",
|
||||
"AvailabilityDelay": "التوفر تأخير",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "الأفلام المحذوفة من القرص لا يتم مراقبتها تلقائيًا في {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "الأفلام المحذوفة من القرص لا يتم مراقبتها تلقائيًا في {appName}",
|
||||
"AutoRedownloadFailedHelpText": "ابحث تلقائيًا عن إصدار مختلف وحاول تنزيله",
|
||||
"AutomaticSearch": "البحث التلقائي",
|
||||
"Automatic": "تلقائي",
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@
|
|||
"DeleteDelayProfile": "Изтриване на профила за забавяне",
|
||||
"DeleteDownloadClientMessageText": "Наистина ли искате да изтриете клиента за изтегляне '{0}'?",
|
||||
"DeleteEmptyFolders": "Изтрийте празни папки",
|
||||
"DeleteEmptyFoldersHelpText": "Изтрийте празни папки с филми по време на сканиране на диска и когато файловете с филми се изтриват",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Изтрийте празни папки с филми по време на сканиране на диска и когато файловете с филми се изтриват",
|
||||
"DeleteFile": "Изтрий файла",
|
||||
"DeleteMovieFilesHelpText": "Изтрийте файловете с филми и папката с филми",
|
||||
"DeleteMovieFiles": "Изтрийте {0} филмови файлове",
|
||||
|
|
@ -272,7 +272,7 @@
|
|||
"IconForCutoffUnmet": "Икона за Cutoff Unmet",
|
||||
"Ignored": "Игнориран",
|
||||
"IgnoredAddresses": "Игнорирани адреси",
|
||||
"IgnoreDeletedMovies": "Unmonitor изтрити филми",
|
||||
"UnmonitorDeletedMovies": "Unmonitor изтрити филми",
|
||||
"IgnoredHelpText": "Пускането ще бъде отхвърлено, ако съдържа един или повече от условията (без регистрация)",
|
||||
"AddNewRestriction": "Добавете ново ограничение",
|
||||
"Import": "Внос",
|
||||
|
|
@ -735,7 +735,7 @@
|
|||
"ApplyTags": "Прилагане на тагове",
|
||||
"AddMovies": "Добавяне на филми",
|
||||
"AddMovie": "Добавяне на филм",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Изтритите от диска филми автоматично се проследяват в {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Изтритите от диска филми автоматично се проследяват в {appName}",
|
||||
"AvailabilityDelayHelpText": "Количество време преди или след наличната дата за търсене на филм",
|
||||
"BackupIntervalHelpText": "Интервал между автоматичните архиви",
|
||||
"BackupNow": "Архивиране сега",
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@
|
|||
"AuthenticationMethodHelpText": "Es requereix nom d'usuari i contrasenya per a accedir a {appName}",
|
||||
"AuthForm": "Formularis (pàgina d'inici de sessió)",
|
||||
"AutoRedownloadFailedHelpText": "Cerca i intenta baixar automàticament una versió diferent",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Les pel·lícules suprimides del disc no es descarten automàticament al {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Les pel·lícules suprimides del disc no es descarten automàticament al {appName}",
|
||||
"AvailabilityDelay": "Retard de disponibilitat",
|
||||
"AvailabilityDelayHelpText": "Temps abans o després de la data disponible per a cercar una pel·lícula",
|
||||
"BackupNow": "Fes ara la còpia de seguretat",
|
||||
|
|
@ -427,7 +427,7 @@
|
|||
"DeletedMovieDescription": "La pel·lícula s'ha suprimit de TMDb",
|
||||
"DeleteDownloadClientMessageText": "Esteu segur que voleu suprimir el client de baixada '{name}'?",
|
||||
"DeleteEmptyFolders": "Suprimeix les carpetes buides",
|
||||
"DeleteEmptyFoldersHelpText": "Suprimeix les carpetes de pel·lícules buides durant l'exploració del disc i quan s'esborren els fitxers de pel·lícules",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Suprimeix les carpetes de pel·lícules buides durant l'exploració del disc i quan s'esborren els fitxers de pel·lícules",
|
||||
"DeleteFile": "Esborrar Arxiu",
|
||||
"DeleteMovieFiles": "Suprimeix {movieFileCount} fitxers de pel·lícula",
|
||||
"DeleteSelectedMovieFiles": "Suprimeix els fitxers de pel·lícules seleccionats",
|
||||
|
|
@ -991,7 +991,7 @@
|
|||
"ShowTitle": "Mostra el títol",
|
||||
"Ignored": "Ignorat",
|
||||
"IgnoredAddresses": "Adreces ignorades",
|
||||
"IgnoreDeletedMovies": "No monitores les pel·lícules suprimides",
|
||||
"UnmonitorDeletedMovies": "No monitores les pel·lícules suprimides",
|
||||
"IgnoredHelpText": "La publicació es rebutjarà si conté un o més dels termes (no distingeix entre majúscules i minúscules)",
|
||||
"IllRestartLater": "Reinicia més tard",
|
||||
"Images": "Imatges",
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
"Date": "Datum",
|
||||
"About": "O aplikaci",
|
||||
"AddIndexer": "Přidat indexer",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Filmy odstraněné z disku jsou automaticky sledovány v {appName}u",
|
||||
"UnmonitorDeletedMoviesHelpText": "Filmy odstraněné z disku jsou automaticky sledovány v {appName}u",
|
||||
"AvailabilityDelay": "Zpoždění dostupnosti",
|
||||
"Certification": "Osvědčení",
|
||||
"CleanLibraryLevel": "Čistá úroveň knihovny",
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
"CustomFormatsSettings": "Nastavení vlastních formátů",
|
||||
"UpgradeUntilCustomFormatScoreMovieHelpText": "Jakmile je dosaženo tohoto skóre vlastního formátu, {appName} již nebude stahovat filmy",
|
||||
"DeleteEmptyFolders": "Odstraňte prázdné složky",
|
||||
"DeleteEmptyFoldersHelpText": "Během skenování disku a při mazání filmových souborů odstraňte prázdné složky s filmy",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Během skenování disku a při mazání filmových souborů odstraňte prázdné složky s filmy",
|
||||
"DeleteMovieFiles": "Smažte {0} filmové soubory",
|
||||
"DeleteNotificationMessageText": "Opravdu chcete smazat oznámení '{name}'?",
|
||||
"DeleteRestrictionHelpText": "Opravdu chcete toto omezení smazat?",
|
||||
|
|
@ -612,7 +612,7 @@
|
|||
"IconForCutoffUnmet": "Ikona pro Cutoff Unmet",
|
||||
"Ignored": "Ignorováno",
|
||||
"IgnoredAddresses": "Ignorované adresy",
|
||||
"IgnoreDeletedMovies": "Unmonitor Smazané filmy",
|
||||
"UnmonitorDeletedMovies": "Unmonitor Smazané filmy",
|
||||
"IgnoredHelpText": "Vydání bude odmítnuto, pokud obsahuje jeden nebo více výrazů (nerozlišují se malá a velká písmena)",
|
||||
"Images": "snímky",
|
||||
"IMDb": "IMDb",
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@
|
|||
"EnableAutomaticAdd": "Aktivér automatisk tilføjelse",
|
||||
"EnableColorImpairedModeHelpText": "Ændret stil for at give farvehæmmede brugere bedre at skelne mellem farvekodede oplysninger",
|
||||
"EnableInteractiveSearch": "Aktivér interaktiv søgning",
|
||||
"IgnoreDeletedMovies": "Fjern overvågning af slettede film",
|
||||
"UnmonitorDeletedMovies": "Fjern overvågning af slettede film",
|
||||
"Images": "Billeder",
|
||||
"IndexerPriorityHelpText": "Indeksatorprioritet fra 1 (højest) til 50 (lavest). Standard: 25. Anvendes til at vælge mellem udgivelser med ellers lige mange point. {appName} vil stadig bruge alle aktiverede indeksatorer til RSS-synkronisering og søgning",
|
||||
"LogLevelTraceHelpTextWarning": "Sporlogning bør kun aktiveres midlertidigt",
|
||||
|
|
@ -184,7 +184,7 @@
|
|||
"ApplyTags": "Anvend tags",
|
||||
"AuthForm": "Formularer (login-side)",
|
||||
"Automatic": "Automatisk",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Film, der er slettet fra disken, overvåges automatisk i {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Film, der er slettet fra disken, overvåges automatisk i {appName}",
|
||||
"Announced": "Annonceret",
|
||||
"CleanLibraryLevel": "Rens biblioteksniveau",
|
||||
"BackupRetentionHelpText": "Automatiske sikkerhedskopier, der er ældre end opbevaringsperioden, renses automatisk",
|
||||
|
|
@ -497,7 +497,7 @@
|
|||
"DeleteDelayProfile": "Slet forsinkelsesprofil",
|
||||
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil fjerne downloadklienten »{name}«?",
|
||||
"DeleteEmptyFolders": "Slet tomme mapper",
|
||||
"DeleteEmptyFoldersHelpText": "Slet tomme filmmapper under diskscanning, og når filmfiler slettes",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Slet tomme filmmapper under diskscanning, og når filmfiler slettes",
|
||||
"DeleteMovieFilesHelpText": "Slet filmfilerne og filmmappen",
|
||||
"DeleteMovieFiles": "Fjern {movieFileCount} filmfiler",
|
||||
"DeleteHeader": "Slet - {0}",
|
||||
|
|
|
|||
|
|
@ -307,7 +307,7 @@
|
|||
"ICalShowAsAllDayEventsHelpText": "Ereignisse werden als ganztägige Ereignisse in deinem Kalender angezeigt",
|
||||
"Authentication": "Authentifizierung",
|
||||
"Automatic": "Automatisch",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Auf der Festplatte gelöschte Filme auch automatisch in {appName} nicht mehr beobachten",
|
||||
"UnmonitorDeletedMoviesHelpText": "Auf der Festplatte gelöschte Filme auch automatisch in {appName} nicht mehr beobachten",
|
||||
"AvailabilityDelay": "Verfügbarkeits Verzögerung",
|
||||
"AvailabilityDelayHelpText": "Zeit vor( - ) oder nach( + ) dem Verfügbarkeitsdatum für die Suche nach einem Film",
|
||||
"BackupIntervalHelpText": "Intervall zwischen automatischen Sicherungen",
|
||||
|
|
@ -379,7 +379,7 @@
|
|||
"ICalFeed": "iCal Feed",
|
||||
"IconForCutoffUnmet": "Symbol für Schwelle nicht erreicht",
|
||||
"IgnoredAddresses": "Ignorierte Adressen",
|
||||
"IgnoreDeletedMovies": "Gelöschte Filme nicht mehr beobachten",
|
||||
"UnmonitorDeletedMovies": "Gelöschte Filme nicht mehr beobachten",
|
||||
"IllRestartLater": "Später neustarten",
|
||||
"ImportExtraFiles": "Zusätzliche Dateien importieren",
|
||||
"Importing": "Importiere",
|
||||
|
|
@ -562,7 +562,7 @@
|
|||
"MaximumLimits": "Maximale Grenzen",
|
||||
"RecyclingBinCleanupHelpTextWarning": "Datien im Papierkorb die älter sind als der gewählte Wert, werden endgültig gelöscht",
|
||||
"RemotePathMappingsLoadError": "Kann Remote-Pfadzuordnungen nicht laden",
|
||||
"DeleteEmptyFoldersHelpText": "Lösche leere Filmeordner während des Scans oder wenn Filmdateien gelöscht werden",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Lösche leere Filmeordner während des Scans oder wenn Filmdateien gelöscht werden",
|
||||
"MaximumSizeHelpText": "Maximale Größe für einen Release, der heruntergeladen wird, in MB. Setze auf Null, um es auf unbegrenzt zu setzen.",
|
||||
"ReleaseDates": "VÖ Termine",
|
||||
"CertificationCountryHelpText": "Wähle ein Land für die Film Zertifizierungen",
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@
|
|||
"CustomFormatsSettings": "Ρυθμίσεις προσαρμοσμένων μορφών",
|
||||
"UpgradeUntilCustomFormatScoreMovieHelpText": "Μόλις επιτευχθεί ή ξεπεραστεί αυτό το σκορ προσαρμοσμένης μορφής, το {appName} δε θα πιάνει ή εισάγει αναβαθμίσεις πλέον για αυτές τις ταινίες",
|
||||
"DeleteDownloadClientMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τον πελάτη λήψης \"{0}\";",
|
||||
"DeleteEmptyFoldersHelpText": "Διαγραφή κενών φακέλων ταινιών κατά τη σάρωση δίσκου και όταν διαγράφονται τα αρχεία ταινίας",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Διαγραφή κενών φακέλων ταινιών κατά τη σάρωση δίσκου και όταν διαγράφονται τα αρχεία ταινίας",
|
||||
"DeleteTagMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε την ετικέτα \"{0}\";",
|
||||
"DestinationPath": "Διαδρομή προορισμού",
|
||||
"DetailedProgressBar": "Λεπτομερής γραμμή προόδου",
|
||||
|
|
@ -169,7 +169,7 @@
|
|||
"Announced": "Ανακοινώθηκε",
|
||||
"AuthForm": "Φόρμες (σελίδα σύνδεσης)",
|
||||
"AutoRedownloadFailedHelpText": "Αυτόματη αναζήτηση και απόπειρα λήψης διαφορετικής έκδοσης",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Οι ταινίες που διαγράφονται από το δίσκο δεν παρακολουθούνται αυτόματα στο {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Οι ταινίες που διαγράφονται από το δίσκο δεν παρακολουθούνται αυτόματα στο {appName}",
|
||||
"AvailabilityDelayHelpText": "Ποσό χρόνου πριν ή μετά τη διαθέσιμη ημερομηνία για αναζήτηση ταινίας",
|
||||
"BindAddress": "Δεσμευμένη διεύθυνση",
|
||||
"BindAddressHelpText": "Έγκυρη διεύθυνση IP, localhost ή '*' για όλες τις διεπαφές",
|
||||
|
|
@ -569,7 +569,7 @@
|
|||
"IconForCutoffUnmet": "Εικονίδιο για το Cutoff Unmet",
|
||||
"Ignored": "Αγνοήθηκε",
|
||||
"IgnoredAddresses": "Διευθύνσεις που αγνοήθηκαν",
|
||||
"IgnoreDeletedMovies": "Unmonitor Διαγραμμένες ταινίες",
|
||||
"UnmonitorDeletedMovies": "Unmonitor Διαγραμμένες ταινίες",
|
||||
"IgnoredHelpText": "Η κυκλοφορία θα απορριφθεί, εάν περιέχει έναν ή περισσότερους από τους όρους (χωρίς διάκριση πεζών-κεφαλαίων)",
|
||||
"IMDb": "IMDb",
|
||||
"Images": "Εικόνες",
|
||||
|
|
|
|||
|
|
@ -130,7 +130,6 @@
|
|||
"AutoTaggingSpecificationStatus": "Status",
|
||||
"AutoTaggingSpecificationStudio": "Studio(s)",
|
||||
"AutoTaggingSpecificationTag": "Tag",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Movies deleted from the disk are automatically unmonitored in {appName}",
|
||||
"Automatic": "Automatic",
|
||||
"AutomaticAdd": "Automatic Add",
|
||||
"AutomaticSearch": "Automatic Search",
|
||||
|
|
@ -337,7 +336,7 @@
|
|||
"DeleteDownloadClient": "Delete Download Client",
|
||||
"DeleteDownloadClientMessageText": "Are you sure you want to delete the download client '{name}'?",
|
||||
"DeleteEmptyFolders": "Delete empty folders",
|
||||
"DeleteEmptyFoldersHelpText": "Delete empty movie folders during disk scan and when movie files are deleted",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Delete empty movie folders during disk scan and when movie files are deleted",
|
||||
"DeleteFile": "Delete file",
|
||||
"DeleteFormatMessageText": "Are you sure you want to delete format tag {0} ?",
|
||||
"DeleteHeader": "Delete - {0}",
|
||||
|
|
@ -765,7 +764,6 @@
|
|||
"IMDbId": "IMDb Id",
|
||||
"IconForCutoffUnmet": "Icon for Cutoff Unmet",
|
||||
"IconForCutoffUnmetHelpText": "Show icon for files when the cutoff hasn't been met",
|
||||
"IgnoreDeletedMovies": "Unmonitor Deleted Movies",
|
||||
"IgnoreDownload": "Ignore Download",
|
||||
"IgnoreDownloadHint": "Stops {appName} from processing this download further",
|
||||
"IgnoreDownloads": "Ignore Downloads",
|
||||
|
|
@ -1958,6 +1956,8 @@
|
|||
"Unlimited": "Unlimited",
|
||||
"UnmappedFilesOnly": "Unmapped Files Only",
|
||||
"UnmappedFolders": "Unmapped Folders",
|
||||
"UnmonitorDeletedMovies": "Unmonitor Deleted Movies",
|
||||
"UnmonitorDeletedMoviesHelpText": "Movies deleted from disk are automatically unmonitored in {appName}",
|
||||
"UnmonitorSelected": "Unmonitor Selected",
|
||||
"Unmonitored": "Unmonitored",
|
||||
"Unreleased": "Unreleased",
|
||||
|
|
|
|||
|
|
@ -323,7 +323,7 @@
|
|||
"DeleteIndexer": "Borrar indexador",
|
||||
"DeleteImportListExclusion": "Eliminar exclusión de listas de importación",
|
||||
"DeleteFile": "Eliminar archivo",
|
||||
"DeleteEmptyFoldersHelpText": "Elimina las carpetas vacías durante la exploración del disco y cuando se eliminen archivos",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Elimina las carpetas vacías durante la exploración del disco y cuando se eliminen archivos",
|
||||
"DeleteEmptyFolders": "Eliminar carpetas vacías",
|
||||
"DeleteDownloadClient": "Borrar cliente de descarga",
|
||||
"DeleteDelayProfile": "Eliminar Perfil de Retraso",
|
||||
|
|
@ -355,7 +355,7 @@
|
|||
"BackupFolderHelpText": "Las rutas relativas estarán en el directorio AppData de {appName}",
|
||||
"AvailabilityDelayHelpText": "Cantidad de tiempo antes o después de la fecha disponible para buscar Película",
|
||||
"AvailabilityDelay": "Retraso de Disponibilidad",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Las películas eliminadas del disco son automáticamente desmonitorizadas en {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Las películas eliminadas del disco son automáticamente desmonitorizadas en {appName}",
|
||||
"AutoRedownloadFailedHelpText": "Busca e intenta descargar automáticamente una versión diferente",
|
||||
"Automatic": "Automático",
|
||||
"AuthenticationMethodHelpText": "Requiere usuario y contraseña para acceder a {appName}",
|
||||
|
|
@ -552,7 +552,7 @@
|
|||
"ImportedTo": "Importado a",
|
||||
"IllRestartLater": "Lo reiniciaré más tarde",
|
||||
"IgnoredHelpText": "Este lanzamiento será rechazado si contiene uno o más de estos términos (mayúsculas o minúsculas)",
|
||||
"IgnoreDeletedMovies": "No monitorizar películas eliminadas",
|
||||
"UnmonitorDeletedMovies": "No monitorizar películas eliminadas",
|
||||
"IgnoredAddresses": "Direcciones Ignoradas",
|
||||
"IconForCutoffUnmet": "Icono de límite no alcanzado",
|
||||
"ICalFeedHelpText": "Copia esta URL a tu(s) cliente(s) o pulsa para suscribirse si tu navegador soporta Webcal",
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
"GrabReleaseMessageText": "{appName} ei tunnistanut julkaisun elokuvaa, eikä sen vuoksi voi tuoda sitä automaattisesti. Haluatko kaapata julkaisun \"{0}\"?",
|
||||
"HardlinkCopyFiles": "Hardlink/tiedostojen kopiointi",
|
||||
"HideAdvanced": "Piilota lisäasetukset",
|
||||
"IgnoreDeletedMovies": "Lopeta poistettujen elokuvien valvonta",
|
||||
"UnmonitorDeletedMovies": "Lopeta poistettujen elokuvien valvonta",
|
||||
"InCinemasDate": "Teatterijulkaisu",
|
||||
"Interval": "Ajoitus",
|
||||
"IncludeUnmonitored": "Sisällytä valvomattomat",
|
||||
|
|
@ -154,7 +154,7 @@
|
|||
"AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana.",
|
||||
"AuthForm": "Lomake (kirjautumissivu)",
|
||||
"Automatic": "Automaattinen",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "{appName} lopettaa levyltä poistettujen elokuvien valvonan automaattisesti.",
|
||||
"UnmonitorDeletedMoviesHelpText": "{appName} lopettaa levyltä poistettujen elokuvien valvonan automaattisesti.",
|
||||
"BackupRetentionHelpText": "Säilytysaikaa vanhemmat varmuuskopiot siivotaan automaattisesti.",
|
||||
"Backups": "Varmuuskopiot",
|
||||
"BindAddress": "Sidososoite",
|
||||
|
|
@ -467,7 +467,7 @@
|
|||
"DeleteDelayProfile": "Poista viiveprofiili",
|
||||
"DeleteDownloadClientMessageText": "Haluatko varmasti poistaa latauspalvelun \"{name}\"?",
|
||||
"DeleteEmptyFolders": "Poista tyhjät kansiot",
|
||||
"DeleteEmptyFoldersHelpText": "Poista tyhjät elokuvakansiot kirjastotarkistuksen ja elokuvatiedostojen poiston yhteydessä.",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Poista tyhjät elokuvakansiot kirjastotarkistuksen ja elokuvatiedostojen poiston yhteydessä.",
|
||||
"DeleteFile": "Poista tiedosto",
|
||||
"DeleteMovieFilesHelpText": "Poista elokuvatiedostot ja -kansio",
|
||||
"DeleteMovieFiles": "Poista {movieFileCount} elokuvatiedostoa",
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@
|
|||
"BackupRetentionHelpText": "Les sauvegardes automatiques plus anciennes que la période de rétention seront nettoyées automatiquement",
|
||||
"BackupIntervalHelpText": "Intervalle entre les sauvegardes automatiques",
|
||||
"AvailabilityDelay": "Délai de disponibilité",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Les films effacés du disque dur ne seront plus surveillés dans {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Les films effacés du disque dur ne seront plus surveillés dans {appName}",
|
||||
"AutoRedownloadFailedHelpText": "Recherche automatique et tentative de téléchargement d'une version différente",
|
||||
"Automatic": "Automatique",
|
||||
"AuthenticationMethodHelpText": "Exiger un nom d'utilisateur et un mot de passe pour accéder à {appName}",
|
||||
|
|
@ -334,7 +334,7 @@
|
|||
"AllowHardcodedSubs": "Autoriser les sous-titres incrustés (Hardcoded)",
|
||||
"AgeWhenGrabbed": "Âge (au moment de la saisie)",
|
||||
"AddImportListExclusion": "Ajouter une liste d'exclusion",
|
||||
"IgnoreDeletedMovies": "Annuler la surveillance des films supprimés",
|
||||
"UnmonitorDeletedMovies": "Annuler la surveillance des films supprimés",
|
||||
"IgnoredAddresses": "Adresses ignorées",
|
||||
"IconForCutoffUnmet": "Icône pour la date limite non respectée",
|
||||
"ICalFeedHelpText": "Copiez cette URL dans votre/vos client(s) ou cliquez pour abonner si votre navigateur est compatible avec webcal",
|
||||
|
|
@ -378,7 +378,7 @@
|
|||
"DeleteIndexer": "Supprimer l'indexeur",
|
||||
"DeleteImportListExclusion": "Supprimer l'exclusion de la liste d'importation",
|
||||
"DeleteFile": "Supprimer le fichier",
|
||||
"DeleteEmptyFoldersHelpText": "Supprimer les dossiers film vides pendant le scan du disque dur et quand les fichiers du film sont supprimés",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Supprimer les dossiers film vides pendant le scan du disque dur et quand les fichiers du film sont supprimés",
|
||||
"DeleteEmptyFolders": "Supprimer les dossiers vides",
|
||||
"DeleteDownloadClient": "Supprimer le client de téléchargement",
|
||||
"DeleteCustomFormat": "Supprimer le format personnalisé",
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@
|
|||
"AuthenticationMethodHelpText": "דרוש שם משתמש וסיסמה כדי לגשת ל {appName}",
|
||||
"AuthForm": "טפסים (דף כניסה)",
|
||||
"AutoRedownloadFailedHelpText": "חפש אוטומטית ונסה להוריד מהדורה אחרת",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "סרטים שנמחקו מהדיסק אינם מנוטרים אוטומטית ב- {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "סרטים שנמחקו מהדיסק אינם מנוטרים אוטומטית ב- {appName}",
|
||||
"AvailabilityDelay": "עיכוב זמינות",
|
||||
"Backups": "גיבויים",
|
||||
"BackupIntervalHelpText": "מרווח בין גיבויים אוטומטיים",
|
||||
|
|
@ -461,7 +461,7 @@
|
|||
"Deleted": "נמחק",
|
||||
"DeleteDelayProfile": "מחק פרופיל עיכוב",
|
||||
"DeleteDownloadClientMessageText": "האם אתה בטוח שברצונך למחוק את לקוח ההורדות '{0}'?",
|
||||
"DeleteEmptyFoldersHelpText": "מחק תיקיות סרטים ריקות במהלך סריקת הדיסק וכאשר קבצי סרט נמחקים",
|
||||
"DeleteEmptyMovieFoldersHelpText": "מחק תיקיות סרטים ריקות במהלך סריקת הדיסק וכאשר קבצי סרט נמחקים",
|
||||
"DeleteMovieFilesHelpText": "מחק את קבצי הסרט ותיקיית הסרט",
|
||||
"DeleteMovieFiles": "מחק {0} קבצי סרט",
|
||||
"DeleteHeader": "מחק - {0}",
|
||||
|
|
@ -578,7 +578,7 @@
|
|||
"IconForCutoffUnmet": "סמל Cutoff Unmet",
|
||||
"Ignored": "התעלמו",
|
||||
"IgnoredAddresses": "כתובות שהתעלמו מהן",
|
||||
"IgnoreDeletedMovies": "לא מפקח על סרטים שנמחקו",
|
||||
"UnmonitorDeletedMovies": "לא מפקח על סרטים שנמחקו",
|
||||
"IgnoredHelpText": "המהדורה תידחה אם היא מכילה אחד או יותר מהתנאים (חסר רישיות)",
|
||||
"Images": "תמונות",
|
||||
"Import": "יְבוּא",
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@
|
|||
"AllowHardcodedSubs": "हार्डकोडेड सब्सक्रिप्शन की अनुमति दें",
|
||||
"AllowHardcodedSubsHelpText": "पता लगाया गया हार्डकोड सब्मिट अपने आप डाउनलोड हो जाएगा",
|
||||
"AlreadyInYourLibrary": "पहले से ही आपकी लाइब्रेरी में",
|
||||
"DeleteEmptyFoldersHelpText": "डिस्क स्कैन के दौरान और मूवी फ़ाइलों को हटाए जाने के दौरान खाली मूवी फ़ोल्डर हटाएं",
|
||||
"DeleteEmptyMovieFoldersHelpText": "डिस्क स्कैन के दौरान और मूवी फ़ाइलों को हटाए जाने के दौरान खाली मूवी फ़ोल्डर हटाएं",
|
||||
"DeleteMovieFiles": "{0} मूवी फ़ाइलें हटाएं",
|
||||
"DeleteImportListExclusion": "आयात सूची बहिष्करण हटाएं",
|
||||
"DeleteIndexerMessageText": "क्या आप वाकई '{0}' इंडेक्स को हटाना चाहते हैं?",
|
||||
|
|
@ -95,7 +95,7 @@
|
|||
"Health": "स्वास्थ्य",
|
||||
"NoIssuesWithYourConfiguration": "आपके कॉन्फ़िगरेशन के साथ कोई समस्या नहीं है",
|
||||
"Ignored": "अवहेलना करना",
|
||||
"IgnoreDeletedMovies": "Unmonitor हटाए गए फिल्में",
|
||||
"UnmonitorDeletedMovies": "Unmonitor हटाए गए फिल्में",
|
||||
"IgnoredHelpText": "यदि यह एक या एक से अधिक शब्द (केस असंवेदनशील) है, तो रिलीज़ को अस्वीकार कर दिया जाएगा",
|
||||
"Images": "इमेजिस",
|
||||
"IMDb": "आईएमडीबी",
|
||||
|
|
@ -328,7 +328,7 @@
|
|||
"Size": "आकार",
|
||||
"Ended": "समाप्त",
|
||||
"AuthenticationMethodHelpText": "{appName} का उपयोग करने के लिए उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "डिस्क से हटाई गई फ़िल्में स्वचालित रूप से {appName} में अनियंत्रित हैं",
|
||||
"UnmonitorDeletedMoviesHelpText": "डिस्क से हटाई गई फ़िल्में स्वचालित रूप से {appName} में अनियंत्रित हैं",
|
||||
"AvailabilityDelay": "उपलब्धता में देरी",
|
||||
"AvailabilityDelayHelpText": "मूवी की खोज के लिए उपलब्ध तारीख से पहले या उसके बाद का समय",
|
||||
"BackupIntervalHelpText": "स्वचालित बैकअप के बीच अंतराल",
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@
|
|||
"Automatic": "Automatski",
|
||||
"AutomaticSearch": "Automatska Pretraga",
|
||||
"AutoRedownloadFailedHelpText": "Automatski pretraži i pokušaj preuzeti drukčiju verziju",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "U {appName}u se automatski isključuje nadzor za filmove koji su izbrisani sa diska",
|
||||
"UnmonitorDeletedMoviesHelpText": "U {appName}u se automatski isključuje nadzor za filmove koji su izbrisani sa diska",
|
||||
"AvailabilityDelay": "Mogućnost Odgode",
|
||||
"AvailabilityDelayHelpText": "Vremenski iznos prije ili nakon dostupnog datuma za pretragu filma",
|
||||
"BackupFolderHelpText": "Relativne putanje će biti unutar {appName}ovog AppData direktorija",
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
"DeleteIndexer": "Indexelő törlése",
|
||||
"DeleteImportListExclusion": "Importálási lista kizárásának törlése",
|
||||
"DeleteFile": "Fájl Törlése",
|
||||
"DeleteEmptyFoldersHelpText": "Törölje az üres filmmappákat a lemezfrissítés és a filmfájlok törlése során",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Törölje az üres filmmappákat a lemezfrissítés és a filmfájlok törlése során",
|
||||
"DeleteEmptyFolders": "Üres Mappa Törlése",
|
||||
"DeleteDownloadClientMessageText": "Biztosan törli a(z) \"{name}\" letöltési klienst?",
|
||||
"DeleteDownloadClient": "Letöltőkliens törlése",
|
||||
|
|
@ -154,7 +154,7 @@
|
|||
"Backup": "Biztonsági mentés",
|
||||
"AvailabilityDelayHelpText": "A rendelkezésre álló dátum előtti vagy utáni idő a film kereséséhez",
|
||||
"AvailabilityDelay": "Elérhetőség Késleltetése",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "A lemezről törölt filmeket a {appName} automatikusan eltávolítja a megfigyelt filmek közül",
|
||||
"UnmonitorDeletedMoviesHelpText": "A lemezről törölt filmeket a {appName} automatikusan eltávolítja a megfigyelt filmek közül",
|
||||
"AutoRedownloadFailedHelpText": "Egy másik kiadás automatikus keresése és letöltése",
|
||||
"AutomaticSearch": "Automatikus keresés",
|
||||
"Automatic": "Automatikus",
|
||||
|
|
@ -677,7 +677,7 @@
|
|||
"Import": "Importálás",
|
||||
"IllRestartLater": "Később Újraindítom",
|
||||
"IgnoredHelpText": "A kiadás elutasításra kerül, ha egy vagy több kifejezést tartalmaz (A kis- és nagybetűket nem vesszük figyelembe)",
|
||||
"IgnoreDeletedMovies": "Törölt filmek megfigyelésének leállítása",
|
||||
"UnmonitorDeletedMovies": "Törölt filmek megfigyelésének leállítása",
|
||||
"IgnoredAddresses": "Ignorált címek",
|
||||
"Ignored": "Ignorált",
|
||||
"IconForCutoffUnmet": "Ikon a Sikertelen Küszöbszint Elérésére",
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@
|
|||
"Day": "Dagur",
|
||||
"AuthenticationMethodHelpText": "Krefjast notandanafns og lykilorðs til að fá aðgang að {appName}",
|
||||
"AuthForm": "Eyðublöð (Innskráningarsíða)",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Kvikmyndir sem eytt er af disknum eru sjálfkrafa eftirlitslausar í {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Kvikmyndir sem eytt er af disknum eru sjálfkrafa eftirlitslausar í {appName}",
|
||||
"AvailabilityDelayHelpText": "Tíminn fyrir eða eftir tiltæka dagsetningu til að leita að kvikmynd",
|
||||
"BackupIntervalHelpText": "Bil milli sjálfvirkra afrita",
|
||||
"BackupRetentionHelpText": "Sjálfvirk afrit sem eru eldri en varðveislutímabilið verða hreinsuð upp sjálfkrafa",
|
||||
|
|
@ -502,7 +502,7 @@
|
|||
"DeleteBackupMessageText": "Ertu viss um að þú viljir eyða öryggisafritinu '{0}'?",
|
||||
"DeleteDelayProfile": "Eyða seinkunarprófíl",
|
||||
"DeleteEmptyFolders": "Eyða tómum möppum",
|
||||
"DeleteEmptyFoldersHelpText": "Eyddu tómum kvikmyndamöppum við skönnun á diski og þegar kvikmyndaskrám er eytt",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Eyddu tómum kvikmyndamöppum við skönnun á diski og þegar kvikmyndaskrám er eytt",
|
||||
"DeleteMovieFilesHelpText": "Eyða kvikmyndunum og kvikmyndamöppunni",
|
||||
"DeleteMovieFiles": "Eyða {0} kvikmyndaskrám",
|
||||
"DeleteHeader": "Eyða - {0}",
|
||||
|
|
@ -618,7 +618,7 @@
|
|||
"IconForCutoffUnmet": "Táknmynd fyrir Cutoff Unmet",
|
||||
"IgnoredAddresses": "Heimilisföng hunsuð",
|
||||
"IMDb": "IMDb",
|
||||
"IgnoreDeletedMovies": "Unmonitor eytt kvikmyndum",
|
||||
"UnmonitorDeletedMovies": "Unmonitor eytt kvikmyndum",
|
||||
"Images": "Myndir",
|
||||
"Import": "Flytja inn",
|
||||
"ImportCustomFormat": "Flytja inn sérsniðið snið",
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@
|
|||
"BackupFolderHelpText": "I percorsi relativi saranno nella cartella AppData di {appName}",
|
||||
"AvailabilityDelayHelpText": "Quantità di tempo prima o dopo la data di disponibità per la ricerca del Film",
|
||||
"AvailabilityDelay": "Ritardo di Disponibilità",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "I film cancellati dal disco sono automaticamente non monitorati in {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "I film cancellati dal disco sono automaticamente non monitorati in {appName}",
|
||||
"AutoRedownloadFailedHelpText": "Cerca e prova a scaricare automaticamente un'altra versione",
|
||||
"Automatic": "Automatico",
|
||||
"AuthenticationMethodHelpText": "Utilizza nome utente e password per accedere a {appName}",
|
||||
|
|
@ -304,7 +304,7 @@
|
|||
"DeleteIndexer": "Cancella Indicizzatore",
|
||||
"DeleteImportListExclusion": "Rimuovi Esclusione dalla Lista Importazioni",
|
||||
"DeleteFile": "Cancella file",
|
||||
"DeleteEmptyFoldersHelpText": "Cancellare le cartelle vuote dei film durante la scansione del disco e quando i film vengono cancellati",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Cancellare le cartelle vuote dei film durante la scansione del disco e quando i film vengono cancellati",
|
||||
"DeleteEmptyFolders": "Cancella le cartelle vuote",
|
||||
"DeleteDownloadClient": "Cancella Client di Download",
|
||||
"DeleteDelayProfile": "Elimina Profilo di Ritardo",
|
||||
|
|
@ -534,7 +534,7 @@
|
|||
"IllRestartLater": "Riavvierò più tardi",
|
||||
"AddNewRestriction": "Aggiungi una nuova restrizione",
|
||||
"IgnoredHelpText": "Questa release sarà respinta se contiene uno o più di questi termini (Sensibile al maiuscolo)",
|
||||
"IgnoreDeletedMovies": "Ignora i film cancellati",
|
||||
"UnmonitorDeletedMovies": "Ignora i film cancellati",
|
||||
"IgnoredAddresses": "Indirizzi Ignorati",
|
||||
"IconForCutoffUnmet": "L'icona per il taglio non è soddisfatta",
|
||||
"ICalFeedHelpText": "Copia questo URL sul tuo client o clicca per sottoscrivere se il tuo browser supporta Webcal",
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@
|
|||
"AuthBasic": "基本(ブラウザポップアップ)",
|
||||
"AuthForm": "フォーム(ログインページ)",
|
||||
"Automatic": "自動",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "ディスクから削除された映画は、{appName}では自動的に監視されません。",
|
||||
"UnmonitorDeletedMoviesHelpText": "ディスクから削除された映画は、{appName}では自動的に監視されません。",
|
||||
"ListTagsHelpText": "タグリストアイテムはで追加されます",
|
||||
"ImportMechanismHealthCheckMessage": "完了したダウンロード処理を有効にする",
|
||||
"Backups": "バックアップ",
|
||||
|
|
@ -460,7 +460,7 @@
|
|||
"DeleteDelayProfile": "遅延プロファイルの削除",
|
||||
"DeleteDownloadClientMessageText": "ダウンロードクライアント「{0}」を削除してもよろしいですか?",
|
||||
"DeleteEmptyFolders": "空のフォルダを削除する",
|
||||
"DeleteEmptyFoldersHelpText": "ディスクスキャン中およびムービーファイルが削除されたときに空のムービーフォルダを削除します",
|
||||
"DeleteEmptyMovieFoldersHelpText": "ディスクスキャン中およびムービーファイルが削除されたときに空のムービーフォルダを削除します",
|
||||
"DeleteFile": "ファイルを削除する",
|
||||
"DeleteMovieFilesHelpText": "ムービーファイルとムービーフォルダを削除します",
|
||||
"DeleteMovieFiles": "{0}ムービーファイルを削除する",
|
||||
|
|
@ -566,7 +566,7 @@
|
|||
"IconForCutoffUnmet": "カットオフアンメットのアイコン",
|
||||
"Ignored": "無視されます",
|
||||
"IgnoredAddresses": "無視されたアドレス",
|
||||
"IgnoreDeletedMovies": "削除された映画の監視を解除する",
|
||||
"UnmonitorDeletedMovies": "削除された映画の監視を解除する",
|
||||
"Images": "画像",
|
||||
"IMDb": "IMDb",
|
||||
"Import": "インポート",
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
"UpgradeUntilCustomFormatScoreMovieHelpText": "이 사용자 정의 형식 점수에 도달하면 {appName}은(는) 더 이상 영화를 다운로드 하지 않습니다.",
|
||||
"DefaultDelayProfileMovie": "이것이 기본 프로필입니다. 명시적인 프로필이 없는 모든 영화에 적용됩니다.",
|
||||
"Deleted": "삭제됨",
|
||||
"DeleteEmptyFoldersHelpText": "디스크 스캔 중 및 동영상 파일 삭제 시 빈 동영상 폴더 삭제",
|
||||
"DeleteEmptyMovieFoldersHelpText": "디스크 스캔 중 및 동영상 파일 삭제 시 빈 동영상 폴더 삭제",
|
||||
"DeleteMovieFiles": "{movieFileCount}개의 영화 파일 삭제",
|
||||
"DeleteNotification": "알림 삭제",
|
||||
"DestinationPath": "대상 경로",
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
"Genres": "장르",
|
||||
"GrabReleaseMessageText": "{appName}은(는) 이 출시의 영화를 확인할 수 없음 {appName}은(는) 이 출시를 자동으로 가져오지 못할 수 있습니다. '{0}'을(를) 잡으시겠습니까?",
|
||||
"Ignored": "무시",
|
||||
"IgnoreDeletedMovies": "삭제된 영화 모니터링 해제",
|
||||
"UnmonitorDeletedMovies": "삭제된 영화 모니터링 해제",
|
||||
"IgnoredHelpText": "하나 이상의 용어가 포함된 경우 출시가 거부됩니다 (대소문자 구분 안함).",
|
||||
"ImportRootPath": "특정 영화가 아닌 모든 영화가 포함된 폴더를 {appName}로 지정합니다. 예: {1}이 아닌 {0}입니다. 또한 각 동영상은 루트 / 라이브러리 폴더 내의 자체 폴더에 있어야합니다.",
|
||||
"InCinemasDate": "영화관 날짜",
|
||||
|
|
@ -134,7 +134,7 @@
|
|||
"AuthForm": "양식 (로그인 페이지)",
|
||||
"Automatic": "자동",
|
||||
"AutoRedownloadFailedHelpText": "다른 출시를 자동으로 검색하고 다운로드 시도",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "디스크에서 삭제된 영화는 {appName}에서 자동으로 모니터링 해제됩니다.",
|
||||
"UnmonitorDeletedMoviesHelpText": "디스크에서 삭제된 영화는 {appName}에서 자동으로 모니터링 해제됩니다.",
|
||||
"AvailabilityDelay": "가용성 지연",
|
||||
"BackupIntervalHelpText": "자동 백업 간격",
|
||||
"BeforeUpdate": "업데이트 전",
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
"AuthForm": "Skjemaer (påloggingsside)",
|
||||
"Automatic": "Automatisk",
|
||||
"AutomaticSearch": "Automatisk Søk",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Filmer som er slettet fra disken, blir automatisk overvåket i {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Filmer som er slettet fra disken, blir automatisk overvåket i {appName}",
|
||||
"AvailabilityDelay": "Tilgjengelighet Forsinkelse",
|
||||
"AvailabilityDelayHelpText": "Hvor lang tid før eller etter tilgjengelig dato for å søke etter film",
|
||||
"Backup": "Sikkerhetskopiering",
|
||||
|
|
|
|||
|
|
@ -333,7 +333,7 @@
|
|||
"Docker": "Docker",
|
||||
"DestinationRelativePath": "Relatieve Doelmap",
|
||||
"DestinationPath": "Doelmap",
|
||||
"DeleteEmptyFoldersHelpText": "Lege mappen verwijderen, tijdens de schijfscan en wanneer filmbestanden worden verwijderd",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Lege mappen verwijderen, tijdens de schijfscan en wanneer filmbestanden worden verwijderd",
|
||||
"DelayProfile": "Vertragingsprofiel",
|
||||
"DatabaseMigration": "DB Migratie",
|
||||
"UpgradeUntilMovieHelpText": "Wanneer deze kwaliteit is behaald, zal {appName} niet langer films downloaden",
|
||||
|
|
@ -367,7 +367,7 @@
|
|||
"BackupFolderHelpText": "Relatieve paden zullen t.o.v. de {appName} AppData map bekeken worden",
|
||||
"AvailabilityDelayHelpText": "Hoeveelheid tijd voor of na de beschikbaarheidsdatum dat er gezocht moet worden naar een film",
|
||||
"AvailabilityDelay": "Beschikbaarheidsvertraging",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Verwijderde films zullen automatisch als onbewaakt worden gemarkeerd in {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Verwijderde films zullen automatisch als onbewaakt worden gemarkeerd in {appName}",
|
||||
"AutoRedownloadFailedHelpText": "Automatisch zoeken en probeer een andere release te downloaden",
|
||||
"ICalShowAsAllDayEventsHelpText": "Gebeurtenissen zullen als hele-dag gebeurtenissen verschijnen in uw kalender",
|
||||
"ApplyTags": "Pas Tags Toe",
|
||||
|
|
@ -382,7 +382,7 @@
|
|||
"IgnoredHelpText": "De uitgave zal worden afgekeurd als het één of meerdere van deze termen bevat (hoofdletter ongevoelig)",
|
||||
"GrabRelease": "Uitgave Ophalen",
|
||||
"Grab": "Ophalen",
|
||||
"IgnoreDeletedMovies": "Bewaak Verwijderde Films Niet Meer",
|
||||
"UnmonitorDeletedMovies": "Bewaak Verwijderde Films Niet Meer",
|
||||
"IgnoredAddresses": "Genegeerde Adressen",
|
||||
"ICalFeedHelpText": "Kopieer deze URL naar je cliënt(en) of klik om te abonneren als je browser Webcal ondersteunt",
|
||||
"Hostname": "Hostnaam",
|
||||
|
|
|
|||
|
|
@ -196,7 +196,7 @@
|
|||
"AuthenticationMethodHelpText": "Wymagaj nazwy użytkownika i hasła, aby uzyskać dostęp do {appName}",
|
||||
"AuthForm": "Formularze (strona logowania)",
|
||||
"Automatic": "Automatyczny",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Filmy usunięte z dysku automatycznie przestają być monitorowane w {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Filmy usunięte z dysku automatycznie przestają być monitorowane w {appName}",
|
||||
"BackupRetentionHelpText": "Automatyczne kopie zapasowe starsze niż okres przechowywania zostaną automatycznie wyczyszczone",
|
||||
"WhatsNew": "Co nowego?",
|
||||
"Branch": "Gałąź",
|
||||
|
|
@ -479,7 +479,7 @@
|
|||
"DeleteDelayProfile": "Usuń profil opóźnienia",
|
||||
"DeleteDownloadClientMessageText": "Czy na pewno chcesz usunąć klienta pobierania „{name}”?",
|
||||
"DeleteEmptyFolders": "Usuń puste foldery",
|
||||
"DeleteEmptyFoldersHelpText": "Usuń puste foldery z filmami podczas skanowania dysku i po usunięciu plików filmowych",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Usuń puste foldery z filmami podczas skanowania dysku i po usunięciu plików filmowych",
|
||||
"DeleteMovieFilesHelpText": "Usuń pliki filmowe i folder z filmami",
|
||||
"DeleteMovieFiles": "Usuń {0} pliki filmowe",
|
||||
"DeleteHeader": "Usuń - {0}",
|
||||
|
|
@ -593,7 +593,7 @@
|
|||
"ICalLink": "Łącze do iCal",
|
||||
"IconForCutoffUnmet": "Ikona Cutoff Unmet",
|
||||
"IgnoredAddresses": "Ignorowane adresy",
|
||||
"IgnoreDeletedMovies": "Nie monitoruj usuniętych filmów",
|
||||
"UnmonitorDeletedMovies": "Nie monitoruj usuniętych filmów",
|
||||
"IgnoredHelpText": "Zgoda zostanie odrzucona, jeśli zawiera co najmniej jeden termin (bez rozróżniania wielkości liter)",
|
||||
"Images": "Obrazy",
|
||||
"IMDb": "IMDb",
|
||||
|
|
|
|||
|
|
@ -295,7 +295,7 @@
|
|||
"Actions": "Ações",
|
||||
"About": "Sobre",
|
||||
"AvailabilityDelay": "Atraso de disponibilidade",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Filmes eliminados do disco deixam automaticamente de ser monitorados no {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Filmes eliminados do disco deixam automaticamente de ser monitorados no {appName}",
|
||||
"AutoRedownloadFailedHelpText": "Procurar automaticamente e tente baixar uma versão diferente",
|
||||
"Automatic": "Automático",
|
||||
"AuthenticationMethodHelpText": "Solicitar nome de utilizador e palavra-passe para acessar ao {appName}",
|
||||
|
|
@ -377,7 +377,7 @@
|
|||
"ImportedTo": "Importado para",
|
||||
"IllRestartLater": "Reiniciarei mais tarde",
|
||||
"IgnoredHelpText": "A versão será rejeitada caso contenha um ou mais destes termos (sem distinção de maiúsculas ou minúsculas)",
|
||||
"IgnoreDeletedMovies": "Deixar de monitorar filmes eliminados",
|
||||
"UnmonitorDeletedMovies": "Deixar de monitorar filmes eliminados",
|
||||
"IgnoredAddresses": "Endereços ignorados",
|
||||
"IconForCutoffUnmet": "Ícone para Limite não correspondido",
|
||||
"ICalFeedHelpText": "Copie este URL para seu(s) cliente(s) ou clique para subscrever-se caso seu browser suporte webcal",
|
||||
|
|
@ -421,7 +421,7 @@
|
|||
"DeleteIndexer": "Eliminar indexador",
|
||||
"DeleteImportListExclusion": "Eliminar exclusão da lista de importação",
|
||||
"DeleteFile": "Eliminar ficheiro",
|
||||
"DeleteEmptyFoldersHelpText": "Eliminar pastas de filmes vazias durante a análise do disco e quando ficheiros de filmes forem eliminados",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Eliminar pastas de filmes vazias durante a análise do disco e quando ficheiros de filmes forem eliminados",
|
||||
"DeleteEmptyFolders": "Eliminar pastas vazias",
|
||||
"DeleteDownloadClient": "Eliminar cliente de transferências",
|
||||
"DeleteDelayProfile": "Eliminar perfil de atraso",
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
"IllRestartLater": "Reiniciarei mais tarde",
|
||||
"AddNewRestriction": "Adicionar nova restrição",
|
||||
"IgnoredHelpText": "O lançamento será rejeitado se contiver um ou mais destes termos (não diferencia maiúsculas e minúsculas)",
|
||||
"IgnoreDeletedMovies": "Não monitorar filmes excluídos",
|
||||
"UnmonitorDeletedMovies": "Não monitorar filmes excluídos",
|
||||
"IgnoredAddresses": "Endereços ignorados",
|
||||
"Ignored": "Ignorado",
|
||||
"IconForCutoffUnmet": "Ícone para limite não atendido",
|
||||
|
|
@ -216,7 +216,7 @@
|
|||
"DeleteMovieFiles": "Excluir {movieFileCount} Arquivos de Filme",
|
||||
"DeleteMovieFilesHelpText": "Excluir os arquivos e a pasta do filme",
|
||||
"DeleteFile": "Excluir arquivo",
|
||||
"DeleteEmptyFoldersHelpText": "Excluir as pastas de filmes vazias durante a verificação do disco e quando os arquivos de filme forem excluídos",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Excluir as pastas de filmes vazias durante a verificação do disco e quando os arquivos de filme forem excluídos",
|
||||
"DeleteEmptyFolders": "Excluir pastas vazias",
|
||||
"DeleteDownloadClientMessageText": "Tem certeza de que deseja excluir o cliente de download '{name}'?",
|
||||
"DeleteDownloadClient": "Excluir cliente de download",
|
||||
|
|
@ -323,7 +323,7 @@
|
|||
"Backup": "Backup",
|
||||
"AvailabilityDelayHelpText": "Quantidade de tempo antes ou depois da data de disponibilidade para pesquisar pelo filme",
|
||||
"AvailabilityDelay": "Atraso de disponibilidade",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Filmes excluídos do disco automaticamente deixam de ser monitorados no {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Filmes excluídos do disco automaticamente deixam de ser monitorados no {appName}",
|
||||
"AutoRedownloadFailedHelpText": "Procurar e tentar baixar automaticamente um lançamento diferente",
|
||||
"AutomaticSearch": "Pesquisa automática",
|
||||
"Automatic": "Automático",
|
||||
|
|
|
|||
|
|
@ -562,7 +562,7 @@
|
|||
"StartupDirectory": "Director de pornire",
|
||||
"Posters": "Afise",
|
||||
"PosterSize": "Dimensiunea posterului",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Filmele șterse de pe disc sunt automat monitorizate în {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Filmele șterse de pe disc sunt automat monitorizate în {appName}",
|
||||
"TimeFormat": "Format ora",
|
||||
"AddImportListExclusion": "Adăugați excluderea listei",
|
||||
"AnalyseVideoFiles": "Analizați fișierele video",
|
||||
|
|
@ -616,7 +616,7 @@
|
|||
"DeleteDelayProfile": "Ștergeți profilul de întârziere",
|
||||
"DeleteDownloadClientMessageText": "Sigur doriți să ștergeți clientul de descărcare „{0}”?",
|
||||
"DeleteEmptyFolders": "Ștergeți folderele goale",
|
||||
"DeleteEmptyFoldersHelpText": "Ștergeți folderele de film goale în timpul scanării discului și când fișierele de film sunt șterse",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Ștergeți folderele de film goale în timpul scanării discului și când fișierele de film sunt șterse",
|
||||
"DeleteMovieFilesHelpText": "Ștergeți fișierele filmului și folderul filmului",
|
||||
"DeleteHeader": "Ștergeți - {0}",
|
||||
"DeleteIndexer": "Ștergeți Indexer",
|
||||
|
|
@ -697,7 +697,7 @@
|
|||
"HiddenClickToShow": "Ascuns, faceți clic pentru afișare",
|
||||
"IconForCutoffUnmet": "Pictogramă pentru Cutoff Unmet",
|
||||
"IgnoredAddresses": "Adrese ignorate",
|
||||
"IgnoreDeletedMovies": "Unmonitor Filme șterse",
|
||||
"UnmonitorDeletedMovies": "Unmonitor Filme șterse",
|
||||
"IgnoredHelpText": "Eliberarea va fi respinsă dacă conține unul sau mai mulți termeni (insensibili la majuscule)",
|
||||
"Images": "Imagini",
|
||||
"IMDb": "IMDb",
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
"BackupNow": "Создать бэкап",
|
||||
"BackupIntervalHelpText": "Периодичность автоматического резервного копирования",
|
||||
"Backup": "Резервное копирование",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Фильмы, удаленные с диска, автоматически перестают отслеживаться в {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Фильмы, удаленные с диска, автоматически перестают отслеживаться в {appName}",
|
||||
"AutoRedownloadFailedHelpText": "Автоматически искать и пытаться скачать другой релиз",
|
||||
"AutomaticSearch": "Автоматический поиск",
|
||||
"Authentication": "Авторизация",
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
"ChownGroupHelpText": "Имя группы или id. Используйте id для отдалённой файловой системы.",
|
||||
"Conditions": "Условия",
|
||||
"ImportFailed": "Неудачный импорт: {sourceTitle}",
|
||||
"DeleteEmptyFoldersHelpText": "Удалять пустые папки во время сканирования диска, а так же после удаления файлов фильмов",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Удалять пустые папки во время сканирования диска, а так же после удаления файлов фильмов",
|
||||
"DeleteFile": "Удалить файл",
|
||||
"DeleteImportListExclusion": "Удалить лист исключения для импорта",
|
||||
"DeleteIndexerMessageText": "Вы уверены что хотите удалить индексатор '{name}'?",
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
"HaveNotAddedMovies": "Вы не добавили никаких фильмов, желаете начать с импорта всех или нескольких фильмов?",
|
||||
"ImportCustomFormat": "Импортировать пользовательский формат",
|
||||
"Import": "Импортировать",
|
||||
"IgnoreDeletedMovies": "Не отслеживать удаленные фильмы",
|
||||
"UnmonitorDeletedMovies": "Не отслеживать удаленные фильмы",
|
||||
"IgnoredAddresses": "Игнорируемые адреса",
|
||||
"ImportHeader": "Импортируйте существующую библиотеку для добавления фильмов в {appName}",
|
||||
"ImportIncludeQuality": "Убедитесь, что имена файлов включают в себя их качество. Например {0}",
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
"AllResultsHiddenFilter": "Všetky výsledky sú skryté použitým filtrom",
|
||||
"AnalyticsEnabledHelpText": "Odosielajte anonymné informácie o používaní a chybách na servery aplikácie {appName}. Zahŕňa to informácie o vašom prehliadači, ktoré stránky webového používateľského rozhrania {appName} používate, hlásenia chýb, ako aj verziu operačného systému a spustenia. Tieto informácie použijeme na stanovenie priorít funkcií a opráv chýb.",
|
||||
"AutomaticSearch": "Automatické vyhľadávanie",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Filmy odstránené z disku sa automaticky prestanú v {appName}e sledovať",
|
||||
"UnmonitorDeletedMoviesHelpText": "Filmy odstránené z disku sa automaticky prestanú v {appName}e sledovať",
|
||||
"BackupFolderHelpText": "Relatívne cesty budú v priečinku AppData {appName}u",
|
||||
"BackupRetentionHelpText": "Automatické zálohy staršie než doba uchovania budú automaticky vyčistené",
|
||||
"BindAddressHelpText": "Platná adresa IP4 alebo '*' pre všetky rozhrania",
|
||||
|
|
|
|||
|
|
@ -365,7 +365,7 @@
|
|||
"ExistingMovies": "Befintliga film(er)",
|
||||
"ExistingTag": "Befintlig tagg",
|
||||
"Existing": "Befintlig",
|
||||
"IgnoreDeletedMovies": "Obevaka raderade filmer",
|
||||
"UnmonitorDeletedMovies": "Obevaka raderade filmer",
|
||||
"HaveNotAddedMovies": "Du har inte lagt till några filmer än, vill du importera några enstaka eller alla dina filmer först?",
|
||||
"HiddenClickToShow": "Dold, klicka för att visa",
|
||||
"Group": "Grupp",
|
||||
|
|
@ -619,7 +619,7 @@
|
|||
"UpdateScriptPathHelpText": "Sökväg till ett anpassat skript som tar ett extraherat uppdateringspaket och hanterar resten av uppdateringsprocessen",
|
||||
"MaintenanceRelease": "Underhållsversion: buggfixar och andra förbättringar. Se Github Commit History för mer information",
|
||||
"AutoRedownloadFailedHelpText": "Sök automatiskt efter och försök ladda ner en annan utgåva",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Filmer som tas bort från disken övervakas automatiskt i {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Filmer som tas bort från disken övervakas automatiskt i {appName}",
|
||||
"Released": "Släppte",
|
||||
"AuthenticationMethodHelpText": "Kräva användarnamn och lösenord för att komma åt {appName}",
|
||||
"AvailabilityDelayHelpText": "Mängden tid före eller efter tillgängligt datum för att söka efter film",
|
||||
|
|
@ -746,7 +746,7 @@
|
|||
"DefaultCase": "Standardfall",
|
||||
"DefaultDelayProfileMovie": "Detta är standardprofilen. Det gäller alla filmer som inte har en uttrycklig profil.",
|
||||
"DeleteDownloadClientMessageText": "Är du säker på att du vill ta bort nedladdningsklienten '{0}'?",
|
||||
"DeleteEmptyFoldersHelpText": "Ta bort tomma filmmappar under skivsökning och när filmfiler raderas",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Ta bort tomma filmmappar under skivsökning och när filmfiler raderas",
|
||||
"DeleteMovieFilesHelpText": "Ta bort filmfiler och filmmapp",
|
||||
"DeleteMovieFiles": "Ta bort {0} filmfiler",
|
||||
"DeleteHeader": "Radera - {0}",
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@
|
|||
"AuthForm": "แบบฟอร์ม (หน้าเข้าสู่ระบบ)",
|
||||
"Automatic": "อัตโนมัติ",
|
||||
"AutoRedownloadFailedHelpText": "ค้นหาและพยายามดาวน์โหลดรุ่นอื่นโดยอัตโนมัติ",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "ภาพยนตร์ที่ถูกลบออกจากดิสก์จะไม่ถูกตรวจสอบโดยอัตโนมัติใน {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "ภาพยนตร์ที่ถูกลบออกจากดิสก์จะไม่ถูกตรวจสอบโดยอัตโนมัติใน {appName}",
|
||||
"AvailabilityDelay": "ความล่าช้าในการวางจำหน่าย",
|
||||
"AvailabilityDelayHelpText": "ระยะเวลาก่อนหรือหลังวันที่สามารถค้นหาภาพยนตร์ได้",
|
||||
"BackupIntervalHelpText": "ช่วงเวลาระหว่างการสำรองข้อมูลอัตโนมัติ",
|
||||
|
|
@ -556,7 +556,7 @@
|
|||
"DeleteBackupMessageText": "แน่ใจไหมว่าต้องการลบข้อมูลสำรอง \"{0}\"",
|
||||
"DeleteDelayProfile": "ลบโปรไฟล์ความล่าช้า",
|
||||
"DeleteEmptyFolders": "ลบโฟลเดอร์ว่าง",
|
||||
"DeleteEmptyFoldersHelpText": "ลบโฟลเดอร์ภาพยนตร์ว่างในระหว่างการสแกนดิสก์และเมื่อไฟล์ภาพยนตร์ถูกลบ",
|
||||
"DeleteEmptyMovieFoldersHelpText": "ลบโฟลเดอร์ภาพยนตร์ว่างในระหว่างการสแกนดิสก์และเมื่อไฟล์ภาพยนตร์ถูกลบ",
|
||||
"DeleteMovieFilesHelpText": "ลบไฟล์ภาพยนตร์และโฟลเดอร์ภาพยนตร์",
|
||||
"EditMovie": "แก้ไขภาพยนตร์",
|
||||
"DeleteMovieFiles": "ลบ {0} ไฟล์ภาพยนตร์",
|
||||
|
|
@ -658,7 +658,7 @@
|
|||
"IconForCutoffUnmet": "ไอคอนสำหรับ Cutoff Unmet",
|
||||
"Ignored": "ละเว้น",
|
||||
"IgnoredAddresses": "ที่อยู่ที่ถูกละเว้น",
|
||||
"IgnoreDeletedMovies": "ยกเลิกการตรวจสอบภาพยนตร์ที่ถูกลบ",
|
||||
"UnmonitorDeletedMovies": "ยกเลิกการตรวจสอบภาพยนตร์ที่ถูกลบ",
|
||||
"Images": "รูปภาพ",
|
||||
"IMDb": "ไอเอ็ม",
|
||||
"Import": "นำเข้า",
|
||||
|
|
|
|||
|
|
@ -521,7 +521,7 @@
|
|||
"AuthenticationMethodHelpText": "{appName}'e erişmek için Kullanıcı Adı ve Parola gereklidir",
|
||||
"Automatic": "Otomatik",
|
||||
"AutoRedownloadFailedHelpText": "Farklı bir sürümü otomatik olarak ara ve indirmeyi dene",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Diskten silinen filmler otomatik olarak {appName}'da takip edilmez",
|
||||
"UnmonitorDeletedMoviesHelpText": "Diskten silinen filmler otomatik olarak {appName}'da takip edilmez",
|
||||
"AvailabilityDelay": "Kullanılabilirlik Gecikmesi",
|
||||
"AvailabilityDelayHelpText": "Film aramak için mevcut tarihten önceki veya sonraki zaman miktarı",
|
||||
"BackupIntervalHelpText": "Otomatik yedeklemeler arasındaki zaman aralığı",
|
||||
|
|
@ -670,7 +670,7 @@
|
|||
"DeleteDelayProfile": "Gecikme Profilini Sil",
|
||||
"DeleteDownloadClientMessageText": "'{name}' indirme istemcisini silmek istediğinizden emin misiniz?",
|
||||
"DeleteEmptyFolders": "Boş klasörleri sil",
|
||||
"DeleteEmptyFoldersHelpText": "Disk taraması sırasında ve film dosyaları silindiğinde boş film klasörlerini silin",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Disk taraması sırasında ve film dosyaları silindiğinde boş film klasörlerini silin",
|
||||
"DeleteFile": "Dosyayı sil",
|
||||
"DeleteImportListExclusion": "İçe Aktarma Listesi Hariç Tutmasını Sil",
|
||||
"DeleteIndexer": "İndeksleyiciyi Sil",
|
||||
|
|
@ -755,7 +755,7 @@
|
|||
"IconForCutoffUnmet": "Sınırlandırılmamış için Simge",
|
||||
"Ignored": "Yok sayıldı",
|
||||
"IgnoredAddresses": "Yoksayılan Adresler",
|
||||
"IgnoreDeletedMovies": "Silinen Filmlerin Takibini Kaldır",
|
||||
"UnmonitorDeletedMovies": "Silinen Filmlerin Takibini Kaldır",
|
||||
"IgnoredHelpText": "Bir veya daha fazla terim içeriyorsa izin reddedilecektir (büyük / küçük harfe duyarlı değildir)",
|
||||
"Images": "Görüntüler",
|
||||
"IMDb": "IMDb",
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
"AutomaticSearch": "Автоматичний пошук",
|
||||
"AvailabilityDelay": "Затримка доступності",
|
||||
"AutoRedownloadFailedHelpText": "Автоматичний пошук і спроба завантажити інший випуск",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Фільми, видалені з диска, автоматично не відстежуються в {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Фільми, видалені з диска, автоматично не відстежуються в {appName}",
|
||||
"AvailabilityDelayHelpText": "Кількість часу до або після доступної дати для пошуку фільму",
|
||||
"Backup": "Резервне копіювання",
|
||||
"BackupFolderHelpText": "Відносні шляхи будуть у каталозі AppData {appName}",
|
||||
|
|
@ -212,7 +212,7 @@
|
|||
"KeyboardShortcutsFocusSearchBox": "Перейти до вікна пошуку",
|
||||
"Filters": "Фільтри",
|
||||
"FirstDayOfWeek": "Перший день тижня",
|
||||
"IgnoreDeletedMovies": "Відключити моніторинг видалених фільмів",
|
||||
"UnmonitorDeletedMovies": "Відключити моніторинг видалених фільмів",
|
||||
"AddNewRestriction": "Додайте нове обмеження",
|
||||
"ImportedTo": "Імпортовано в",
|
||||
"ImportErrors": "Помилки імпорту",
|
||||
|
|
@ -957,7 +957,7 @@
|
|||
"DownloadClientRootFolderHealthCheckMessage": "Клієнт завантаження {downloadClientName} розміщує завантаження в кореневій папці {rootFolderPath}. Ви не повинні завантажувати в кореневу папку.",
|
||||
"DigitalRelease": "Цифровий випуск",
|
||||
"Disabled": "Вимкнено",
|
||||
"DeleteEmptyFoldersHelpText": "Видаляти порожні папки фільмів під час сканування диска та під час видалення файлів фільмів",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Видаляти порожні папки фільмів під час сканування диска та під час видалення файлів фільмів",
|
||||
"DeleteFile": "Видалити файл",
|
||||
"Discord": "Discord",
|
||||
"Docker": "Docker",
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
"MovieIsMonitored": "Phim được giám sát",
|
||||
"ChangeFileDateHelpText": "Thay đổi ngày tệp khi nhập / quét lại",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "Bao gồm trong định dạng đổi tên {Custom Formats}",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Phim bị xóa khỏi đĩa sẽ tự động không được theo dõi trong {appName}",
|
||||
"UnmonitorDeletedMoviesHelpText": "Phim bị xóa khỏi đĩa sẽ tự động không được theo dõi trong {appName}",
|
||||
"BranchUpdateMechanism": "Nhánh được sử dụng bởi cơ chế cập nhật bên ngoài",
|
||||
"CancelPendingTask": "Bạn có chắc chắn muốn hủy nhiệm vụ đang chờ xử lý này không?",
|
||||
"LaunchBrowserHelpText": " Mở trình duyệt web và điều hướng đến trang chủ {appName} khi khởi động ứng dụng.",
|
||||
|
|
@ -665,7 +665,7 @@
|
|||
"Debug": "Gỡ lỗi",
|
||||
"DefaultCase": "Trường hợp mặc định",
|
||||
"DefaultDelayProfileMovie": "Đây là cấu hình mặc định. Nó áp dụng cho tất cả các phim không có hồ sơ rõ ràng.",
|
||||
"DeleteEmptyFoldersHelpText": "Xóa các thư mục phim trống trong khi quét đĩa và khi các tệp phim bị xóa",
|
||||
"DeleteEmptyMovieFoldersHelpText": "Xóa các thư mục phim trống trong khi quét đĩa và khi các tệp phim bị xóa",
|
||||
"DeleteFile": "Xóa tài liệu",
|
||||
"DeleteMovieFilesHelpText": "Xóa các tệp phim và thư mục phim",
|
||||
"DeleteMovieFiles": "Xóa {0} Tệp Phim",
|
||||
|
|
@ -767,7 +767,7 @@
|
|||
"IconForCutoffUnmet": "Biểu tượng cho Cutoff Unmet",
|
||||
"Ignored": "Mặc kệ",
|
||||
"IgnoredAddresses": "Địa chỉ bị Bỏ qua",
|
||||
"IgnoreDeletedMovies": "Bỏ theo dõi Phim đã xóa",
|
||||
"UnmonitorDeletedMovies": "Bỏ theo dõi Phim đã xóa",
|
||||
"Images": "Hình ảnh",
|
||||
"IMDb": "IMDb",
|
||||
"Import": "Nhập khẩu",
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
"DeleteHeader": "删除 - {0}",
|
||||
"DeleteMovieFilesHelpText": "删除电影文件及文件夹",
|
||||
"DeleteFile": "删除文件",
|
||||
"DeleteEmptyFoldersHelpText": "在磁盘扫描和电影文件删除时删除空的电影文件夹",
|
||||
"DeleteEmptyMovieFoldersHelpText": "在磁盘扫描和电影文件删除时删除空的电影文件夹",
|
||||
"DeleteEmptyFolders": "删除空目录",
|
||||
"DeleteDownloadClientMessageText": "您确定要删除下载客户端 “{name}” 吗?",
|
||||
"DeleteDownloadClient": "删除下载客户端",
|
||||
|
|
@ -353,7 +353,7 @@
|
|||
"Images": "图像",
|
||||
"IllRestartLater": "稍后重启",
|
||||
"IgnoredHelpText": "如版本包含一个或多个条件则丢弃(无视大小写)",
|
||||
"IgnoreDeletedMovies": "不追踪已删除电影",
|
||||
"UnmonitorDeletedMovies": "不追踪已删除电影",
|
||||
"IgnoredAddresses": "已忽略地址",
|
||||
"Ignored": "已忽略",
|
||||
"ICalLink": "iCal链接",
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"CancelProcessing": "取消进行中",
|
||||
"BuiltIn": "内置的",
|
||||
"BeforeUpdate": "更新前",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "从磁盘中删除的电影会自动在 {appName} 中取消追踪",
|
||||
"UnmonitorDeletedMoviesHelpText": "从磁盘中删除的电影会自动在 {appName} 中取消追踪",
|
||||
"AutoRedownloadFailedHelpText": "自动搜索并尝试下载不同的发布资源",
|
||||
"AutomaticSearch": "自动搜索",
|
||||
"ICalShowAsAllDayEventsHelpText": "事件将以全天事件的形式显示在日历中",
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
"Backup": "備份",
|
||||
"UpgradeUntilMovieHelpText": "一旦達到此品質,{appName}將不再下載該電影",
|
||||
"AptUpdater": "使用apt安裝更新",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "從磁碟中刪除的電影將自動在{appName}中取消監控",
|
||||
"UnmonitorDeletedMoviesHelpText": "從磁碟中刪除的電影將自動在{appName}中取消監控",
|
||||
"BackupFolderHelpText": "相對路徑將位於{appName}的AppData目錄下",
|
||||
"Blocklist": "封鎖清單",
|
||||
"BlocklistRelease": "封鎖清單版本",
|
||||
|
|
|
|||
Loading…
Reference in a new issue