mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-16 21:15:33 -04:00
Compare commits
22 Commits
v5.20.0.97
...
v5.20.2.97
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
954a040d6e | ||
|
|
905b23618a | ||
|
|
8decd5d8e1 | ||
|
|
8b5b177d16 | ||
|
|
e6c6fceff8 | ||
|
|
dcc8b28a07 | ||
|
|
02baf4d7a4 | ||
|
|
22ec1fe492 | ||
|
|
a7dbdadd21 | ||
|
|
93581e4a2f | ||
|
|
4c8da09df6 | ||
|
|
89666175a6 | ||
|
|
7a33e156a3 | ||
|
|
c7c07404b0 | ||
|
|
abeeee9363 | ||
|
|
23c30734d2 | ||
|
|
939e45e646 | ||
|
|
16ceba2392 | ||
|
|
94d620d878 | ||
|
|
ee0db93a0a | ||
|
|
f815b31c33 | ||
|
|
c078191b3d |
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '5.20.0'
|
||||
majorVersion: '5.20.2'
|
||||
minorVersion: $[counter('minorVersion', 2000)]
|
||||
radarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(radarrVersion)'
|
||||
|
||||
@@ -165,7 +165,7 @@ function HistoryDetails(props: HistoryDetailsProps) {
|
||||
}
|
||||
|
||||
if (eventType === 'downloadFailed') {
|
||||
const { message } = data as DownloadFailedHistory;
|
||||
const { message, indexer } = data as DownloadFailedHistory;
|
||||
|
||||
return (
|
||||
<DescriptionList>
|
||||
@@ -179,6 +179,10 @@ function HistoryDetails(props: HistoryDetailsProps) {
|
||||
<DescriptionListItem title={translate('GrabId')} data={downloadId} />
|
||||
) : null}
|
||||
|
||||
{indexer ? (
|
||||
<DescriptionListItem title={translate('Indexer')} data={indexer} />
|
||||
) : null}
|
||||
|
||||
{message ? (
|
||||
<DescriptionListItem title={translate('Message')} data={message} />
|
||||
) : null}
|
||||
|
||||
@@ -82,8 +82,7 @@ class AddNewMovie extends Component {
|
||||
const {
|
||||
error,
|
||||
items,
|
||||
hasExistingMovies,
|
||||
colorImpairedMode
|
||||
hasExistingMovies
|
||||
} = this.props;
|
||||
|
||||
const term = this.state.term;
|
||||
@@ -150,7 +149,6 @@ class AddNewMovie extends Component {
|
||||
return (
|
||||
<AddNewMovieSearchResultConnector
|
||||
key={item.tmdbId}
|
||||
colorImpairedMode={colorImpairedMode}
|
||||
{...item}
|
||||
/>
|
||||
);
|
||||
@@ -223,8 +221,7 @@ AddNewMovie.propTypes = {
|
||||
items: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
hasExistingMovies: PropTypes.bool.isRequired,
|
||||
onMovieLookupChange: PropTypes.func.isRequired,
|
||||
onClearMovieLookup: PropTypes.func.isRequired,
|
||||
colorImpairedMode: PropTypes.bool.isRequired
|
||||
onClearMovieLookup: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default AddNewMovie;
|
||||
|
||||
@@ -6,7 +6,6 @@ import { clearAddMovie, lookupMovie } from 'Store/Actions/addMovieActions';
|
||||
import { clearMovieFiles, fetchMovieFiles } from 'Store/Actions/movieFileActions';
|
||||
import { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';
|
||||
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
|
||||
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
|
||||
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
|
||||
import selectUniqueIds from 'Utilities/Object/selectUniqueIds';
|
||||
import parseUrl from 'Utilities/String/parseUrl';
|
||||
@@ -17,15 +16,13 @@ function createMapStateToProps() {
|
||||
(state) => state.addMovie,
|
||||
(state) => state.movies.items.length,
|
||||
(state) => state.router.location,
|
||||
createUISettingsSelector(),
|
||||
(addMovie, existingMoviesCount, location, uiSettings) => {
|
||||
(addMovie, existingMoviesCount, location) => {
|
||||
const { params } = parseUrl(location.search);
|
||||
|
||||
return {
|
||||
...addMovie,
|
||||
term: params.term,
|
||||
hasExistingMovies: existingMoviesCount > 0,
|
||||
colorImpairedMode: uiSettings.enableColorImpairedMode
|
||||
hasExistingMovies: existingMoviesCount > 0
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
@@ -74,12 +74,9 @@ class AddNewMovieSearchResult extends Component {
|
||||
isExistingMovie,
|
||||
isExcluded,
|
||||
isSmallScreen,
|
||||
colorImpairedMode,
|
||||
id,
|
||||
monitored,
|
||||
isAvailable,
|
||||
movieFile,
|
||||
queueItem,
|
||||
runtime,
|
||||
movieRuntimeFormat,
|
||||
certification
|
||||
@@ -285,14 +282,12 @@ class AddNewMovieSearchResult extends Component {
|
||||
{
|
||||
isExistingMovie && isSmallScreen &&
|
||||
<MovieStatusLabel
|
||||
status={status}
|
||||
hasMovieFiles={hasMovieFile}
|
||||
movieId={existingMovieId}
|
||||
monitored={monitored}
|
||||
isAvailable={isAvailable}
|
||||
queueItem={queueItem}
|
||||
id={id}
|
||||
hasMovieFiles={hasMovieFile}
|
||||
status={status}
|
||||
useLabel={true}
|
||||
colorImpairedMode={colorImpairedMode}
|
||||
/>
|
||||
}
|
||||
</div>
|
||||
@@ -337,12 +332,9 @@ AddNewMovieSearchResult.propTypes = {
|
||||
isExistingMovie: PropTypes.bool.isRequired,
|
||||
isExcluded: PropTypes.bool,
|
||||
isSmallScreen: PropTypes.bool.isRequired,
|
||||
id: PropTypes.number,
|
||||
monitored: PropTypes.bool.isRequired,
|
||||
isAvailable: PropTypes.bool.isRequired,
|
||||
movieFile: PropTypes.object,
|
||||
queueItem: PropTypes.object,
|
||||
colorImpairedMode: PropTypes.bool,
|
||||
runtime: PropTypes.number.isRequired,
|
||||
movieRuntimeFormat: PropTypes.string.isRequired,
|
||||
certification: PropTypes.string
|
||||
|
||||
@@ -8,19 +8,16 @@ function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createExistingMovieSelector(),
|
||||
createDimensionsSelector(),
|
||||
(state) => state.queue.details.items,
|
||||
(state) => state.movieFiles.items,
|
||||
(state, { internalId }) => internalId,
|
||||
(state) => state.settings.ui.item.movieRuntimeFormat,
|
||||
(isExistingMovie, dimensions, queueItems, movieFiles, internalId, movieRuntimeFormat) => {
|
||||
const queueItem = queueItems.find((item) => internalId > 0 && item.movieId === internalId);
|
||||
(isExistingMovie, dimensions, movieFiles, internalId, movieRuntimeFormat) => {
|
||||
const movieFile = movieFiles.find((item) => internalId > 0 && item.movieId === internalId);
|
||||
|
||||
return {
|
||||
existingMovieId: internalId,
|
||||
isExistingMovie,
|
||||
isSmallScreen: dimensions.isSmallScreen,
|
||||
queueItem,
|
||||
movieFile,
|
||||
movieRuntimeFormat
|
||||
};
|
||||
|
||||
@@ -10,7 +10,7 @@ import CollectionConnector from 'Collection/CollectionConnector';
|
||||
import NotFound from 'Components/NotFound';
|
||||
import Switch from 'Components/Router/Switch';
|
||||
import DiscoverMovieConnector from 'DiscoverMovie/DiscoverMovieConnector';
|
||||
import MovieDetailsPageConnector from 'Movie/Details/MovieDetailsPageConnector';
|
||||
import MovieDetailsPage from 'Movie/Details/MovieDetailsPage';
|
||||
import MovieIndex from 'Movie/Index/MovieIndex';
|
||||
import CustomFormatSettingsPage from 'Settings/CustomFormats/CustomFormatSettingsPage';
|
||||
import DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadClientSettingsConnector';
|
||||
@@ -67,7 +67,7 @@ function AppRoutes() {
|
||||
|
||||
<Route path="/add/discover" component={DiscoverMovieConnector} />
|
||||
|
||||
<Route path="/movie/:titleSlug" component={MovieDetailsPageConnector} />
|
||||
<Route path="/movie/:titleSlug" component={MovieDetailsPage} />
|
||||
|
||||
{/*
|
||||
Calendar
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import BlocklistAppState from './BlocklistAppState';
|
||||
import CalendarAppState from './CalendarAppState';
|
||||
import CommandAppState from './CommandAppState';
|
||||
import ExtraFilesAppState from './ExtraFilesAppState';
|
||||
import HistoryAppState, { MovieHistoryAppState } from './HistoryAppState';
|
||||
import InteractiveImportAppState from './InteractiveImportAppState';
|
||||
import MovieBlocklistAppState from './MovieBlocklistAppState';
|
||||
@@ -53,6 +54,7 @@ export interface CustomFilter {
|
||||
export interface AppSectionState {
|
||||
isConnected: boolean;
|
||||
isReconnecting: boolean;
|
||||
isSidebarVisible: boolean;
|
||||
version: string;
|
||||
prevVersion?: string;
|
||||
dimensions: {
|
||||
@@ -67,6 +69,7 @@ interface AppState {
|
||||
blocklist: BlocklistAppState;
|
||||
calendar: CalendarAppState;
|
||||
commands: CommandAppState;
|
||||
extraFiles: ExtraFilesAppState;
|
||||
history: HistoryAppState;
|
||||
interactiveImport: InteractiveImportAppState;
|
||||
movieBlocklist: MovieBlocklistAppState;
|
||||
|
||||
6
frontend/src/App/State/ExtraFilesAppState.ts
Normal file
6
frontend/src/App/State/ExtraFilesAppState.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import AppSectionState from 'App/State/AppSectionState';
|
||||
import { ExtraFile } from 'MovieFile/ExtraFile';
|
||||
|
||||
type ExtraFilesAppState = AppSectionState<ExtraFile>;
|
||||
|
||||
export default ExtraFilesAppState;
|
||||
@@ -11,7 +11,7 @@ import IconButton from 'Components/Link/IconButton';
|
||||
import MonitorToggleButton from 'Components/MonitorToggleButton';
|
||||
import { icons, sizes } from 'Helpers/Props';
|
||||
import MovieGenres from 'Movie/MovieGenres';
|
||||
import QualityProfileNameConnector from 'Settings/Profiles/Quality/QualityProfileNameConnector';
|
||||
import QualityProfileName from 'Settings/Profiles/Quality/QualityProfileName';
|
||||
import dimensions from 'Styles/Variables/dimensions';
|
||||
import fonts from 'Styles/Variables/fonts';
|
||||
import translate from 'Utilities/String/translate';
|
||||
@@ -212,7 +212,7 @@ class CollectionOverview extends Component {
|
||||
/>
|
||||
<span className={styles.qualityProfileName}>
|
||||
{
|
||||
<QualityProfileNameConnector
|
||||
<QualityProfileName
|
||||
qualityProfileId={qualityProfileId}
|
||||
/>
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import StackTrace from 'stacktrace-js';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './ErrorBoundaryError.css';
|
||||
|
||||
interface ErrorBoundaryErrorProps {
|
||||
@@ -18,7 +19,7 @@ function ErrorBoundaryError(props: ErrorBoundaryErrorProps) {
|
||||
className = styles.container,
|
||||
messageClassName = styles.message,
|
||||
detailsClassName = styles.details,
|
||||
message = 'There was an error loading this content',
|
||||
message = translate('ErrorLoadingContent'),
|
||||
error,
|
||||
info,
|
||||
} = props;
|
||||
|
||||
@@ -3,7 +3,10 @@ import translate from 'Utilities/String/translate';
|
||||
import FilterBuilderRowValue from './FilterBuilderRowValue';
|
||||
|
||||
const statusTagList = [
|
||||
{ id: 'tba', name: 'TBA' },
|
||||
{ id: 'tba',
|
||||
get name() {
|
||||
return translate('Tba');
|
||||
} },
|
||||
{
|
||||
id: 'announced',
|
||||
get name() {
|
||||
|
||||
@@ -53,7 +53,7 @@ function CustomFiltersModalContent(props) {
|
||||
|
||||
<div className={styles.addButtonContainer}>
|
||||
<Button onPress={onAddCustomFilter}>
|
||||
Add Custom Filter
|
||||
{translate('AddCustomFilter')}
|
||||
</Button>
|
||||
</div>
|
||||
</ModalBody>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import { fetchIndexers } from 'Store/Actions/settingsActions';
|
||||
import sortByProp from 'Utilities/Array/sortByProp';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import EnhancedSelectInput from './EnhancedSelectInput';
|
||||
|
||||
function createMapStateToProps() {
|
||||
@@ -18,15 +20,17 @@ function createMapStateToProps() {
|
||||
items
|
||||
} = indexers;
|
||||
|
||||
const values = items.sort(sortByProp('name')).map((indexer) => ({
|
||||
key: indexer.id,
|
||||
value: indexer.name
|
||||
}));
|
||||
const values = _.map(items.sort(sortByProp('name')), (indexer) => {
|
||||
return {
|
||||
key: indexer.id,
|
||||
value: indexer.name
|
||||
};
|
||||
});
|
||||
|
||||
if (includeAny) {
|
||||
values.unshift({
|
||||
key: 0,
|
||||
value: '(Any)'
|
||||
value: `(${translate('Any')})`
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ function createMapStateToProps() {
|
||||
if (includeMixed) {
|
||||
values.unshift({
|
||||
key: 'mixed',
|
||||
value: '(Mixed)',
|
||||
value: `(${translate('Mixed')})`,
|
||||
isDisabled: true
|
||||
});
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ function createMapStateToProps() {
|
||||
|
||||
values.push({
|
||||
key: ADD_NEW_KEY,
|
||||
value: 'Add a new path'
|
||||
value: translate('AddANewPath')
|
||||
});
|
||||
|
||||
return {
|
||||
|
||||
@@ -2,6 +2,7 @@ import classNames from 'classnames';
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import formatBytes from 'Utilities/Number/formatBytes';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import EnhancedSelectInputOption from './EnhancedSelectInputOption';
|
||||
import styles from './RootFolderSelectInputOption.css';
|
||||
|
||||
@@ -47,14 +48,14 @@ function RootFolderSelectInputOption(props) {
|
||||
freeSpace == null ?
|
||||
null :
|
||||
<div className={styles.freeSpace}>
|
||||
{formatBytes(freeSpace)} Free
|
||||
{translate('RootFolderSelectFreeSpace', { freeSpace: formatBytes(freeSpace) })}
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
isMissing ?
|
||||
<div className={styles.isMissing}>
|
||||
Missing
|
||||
{translate('Missing')}
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
@@ -67,8 +68,8 @@ RootFolderSelectInputOption.propTypes = {
|
||||
id: PropTypes.string.isRequired,
|
||||
value: PropTypes.string.isRequired,
|
||||
freeSpace: PropTypes.number,
|
||||
movieFolder: PropTypes.string,
|
||||
isMissing: PropTypes.bool,
|
||||
movieFolder: PropTypes.string,
|
||||
isMobile: PropTypes.bool.isRequired,
|
||||
isWindows: PropTypes.bool
|
||||
};
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import formatBytes from 'Utilities/Number/formatBytes';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import EnhancedSelectInputSelectedValue from './EnhancedSelectInputSelectedValue';
|
||||
import styles from './RootFolderSelectInputSelectedValue.css';
|
||||
|
||||
@@ -39,7 +40,7 @@ function RootFolderSelectInputSelectedValue(props) {
|
||||
{
|
||||
freeSpace != null && includeFreeSpace &&
|
||||
<div className={styles.freeSpace}>
|
||||
{formatBytes(freeSpace)} Free
|
||||
{translate('RootFolderSelectFreeSpace', { freeSpace: formatBytes(freeSpace) })}
|
||||
</div>
|
||||
}
|
||||
</EnhancedSelectInputSelectedValue>
|
||||
|
||||
@@ -8,27 +8,37 @@ import styles from './UMaskInput.css';
|
||||
const umaskOptions = [
|
||||
{
|
||||
key: '755',
|
||||
value: '755 - Owner write, Everyone else read',
|
||||
get value() {
|
||||
return translate('Umask755Description', { octal: '755' });
|
||||
},
|
||||
hint: 'drwxr-xr-x'
|
||||
},
|
||||
{
|
||||
key: '775',
|
||||
value: '775 - Owner & Group write, Other read',
|
||||
get value() {
|
||||
return translate('Umask775Description', { octal: '775' });
|
||||
},
|
||||
hint: 'drwxrwxr-x'
|
||||
},
|
||||
{
|
||||
key: '770',
|
||||
value: '770 - Owner & Group write',
|
||||
get value() {
|
||||
return translate('Umask770Description', { octal: '770' });
|
||||
},
|
||||
hint: 'drwxrwx---'
|
||||
},
|
||||
{
|
||||
key: '750',
|
||||
value: '750 - Owner write, Group read',
|
||||
get value() {
|
||||
return translate('Umask750Description', { octal: '750' });
|
||||
},
|
||||
hint: 'drwxr-x---'
|
||||
},
|
||||
{
|
||||
key: '777',
|
||||
value: '777 - Everyone write',
|
||||
get value() {
|
||||
return translate('Umask777Description', { octal: '777' });
|
||||
},
|
||||
hint: 'drwxrwxrwx'
|
||||
}
|
||||
];
|
||||
|
||||
@@ -8,17 +8,20 @@ import { kinds } from 'Helpers/Props';
|
||||
import { Kind } from 'Helpers/Props/kinds';
|
||||
import styles from './Icon.css';
|
||||
|
||||
export type IconName = FontAwesomeIconProps['icon'];
|
||||
export type IconKind = Extract<Kind, keyof typeof styles>;
|
||||
|
||||
export interface IconProps
|
||||
extends Omit<
|
||||
FontAwesomeIconProps,
|
||||
'icon' | 'spin' | 'name' | 'title' | 'size'
|
||||
> {
|
||||
containerClassName?: ComponentProps<'span'>['className'];
|
||||
name: FontAwesomeIconProps['icon'];
|
||||
kind?: Extract<Kind, keyof typeof styles>;
|
||||
name: IconName;
|
||||
kind?: IconKind;
|
||||
size?: number;
|
||||
isSpinning?: FontAwesomeIconProps['spin'];
|
||||
title?: string | (() => string);
|
||||
title?: string | (() => string) | null;
|
||||
}
|
||||
|
||||
export default function Icon({
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
|
||||
/** Kinds **/
|
||||
|
||||
.default {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/** Sizes **/
|
||||
|
||||
.small {
|
||||
|
||||
1
frontend/src/Components/InfoLabel.css.d.ts
vendored
1
frontend/src/Components/InfoLabel.css.d.ts
vendored
@@ -1,6 +1,7 @@
|
||||
// This file is automatically generated.
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'default': string;
|
||||
'label': string;
|
||||
'large': string;
|
||||
'medium': string;
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
import classNames from 'classnames';
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import { kinds, sizes } from 'Helpers/Props';
|
||||
import styles from './InfoLabel.css';
|
||||
|
||||
function InfoLabel(props) {
|
||||
const {
|
||||
className,
|
||||
name,
|
||||
kind,
|
||||
size,
|
||||
outline,
|
||||
children,
|
||||
...otherProps
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<span
|
||||
className={classNames(
|
||||
className,
|
||||
styles[kind],
|
||||
styles[size],
|
||||
outline && styles.outline
|
||||
)}
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.name}>
|
||||
{name}
|
||||
</div>
|
||||
<div>
|
||||
{children}
|
||||
</div>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
InfoLabel.propTypes = {
|
||||
className: PropTypes.string.isRequired,
|
||||
name: PropTypes.string.isRequired,
|
||||
kind: PropTypes.oneOf(kinds.all).isRequired,
|
||||
size: PropTypes.oneOf(sizes.all).isRequired,
|
||||
outline: PropTypes.bool.isRequired,
|
||||
children: PropTypes.node.isRequired
|
||||
};
|
||||
|
||||
InfoLabel.defaultProps = {
|
||||
className: styles.label,
|
||||
kind: kinds.DEFAULT,
|
||||
size: sizes.SMALL,
|
||||
outline: false
|
||||
};
|
||||
|
||||
export default InfoLabel;
|
||||
41
frontend/src/Components/InfoLabel.tsx
Normal file
41
frontend/src/Components/InfoLabel.tsx
Normal file
@@ -0,0 +1,41 @@
|
||||
import classNames from 'classnames';
|
||||
import React, { ComponentProps, ReactNode } from 'react';
|
||||
import { Kind } from 'Helpers/Props/kinds';
|
||||
import { Size } from 'Helpers/Props/sizes';
|
||||
import styles from './InfoLabel.css';
|
||||
|
||||
interface InfoLabelProps extends ComponentProps<'span'> {
|
||||
className?: string;
|
||||
name: string;
|
||||
kind?: Extract<Kind, keyof typeof styles>;
|
||||
size?: Extract<Size, keyof typeof styles>;
|
||||
outline?: boolean;
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
function InfoLabel({
|
||||
className = styles.label,
|
||||
name,
|
||||
kind = 'default',
|
||||
size = 'small',
|
||||
outline = false,
|
||||
children,
|
||||
...otherProps
|
||||
}: InfoLabelProps) {
|
||||
return (
|
||||
<span
|
||||
className={classNames(
|
||||
className,
|
||||
styles[kind],
|
||||
styles[size],
|
||||
outline && styles.outline
|
||||
)}
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.name}>{name}</div>
|
||||
<div>{children}</div>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
export default InfoLabel;
|
||||
@@ -1,3 +1,4 @@
|
||||
import classNames from 'classnames';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
|
||||
@@ -7,26 +8,15 @@ const TIMEOUT = 1 / FPS * 1000;
|
||||
|
||||
class Marquee extends Component {
|
||||
|
||||
static propTypes = {
|
||||
text: PropTypes.string,
|
||||
title: PropTypes.string,
|
||||
hoverToStop: PropTypes.bool,
|
||||
loop: PropTypes.bool,
|
||||
className: PropTypes.string
|
||||
};
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
static defaultProps = {
|
||||
text: '',
|
||||
title: '',
|
||||
hoverToStop: true,
|
||||
loop: false
|
||||
};
|
||||
|
||||
state = {
|
||||
animatedWidth: 0,
|
||||
overflowWidth: 0,
|
||||
direction: 0
|
||||
};
|
||||
this.state = {
|
||||
animatedWidth: 0,
|
||||
overflowWidth: 0,
|
||||
direction: 0
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.measureText();
|
||||
@@ -138,7 +128,7 @@ class Marquee extends Component {
|
||||
ref={(el) => {
|
||||
this.container = el;
|
||||
}}
|
||||
className={`ui-marquee ${this.props.className}`}
|
||||
className={classNames('ui-marquee', this.props.className)}
|
||||
style={{ overflow: 'hidden' }}
|
||||
>
|
||||
<span
|
||||
@@ -159,7 +149,7 @@ class Marquee extends Component {
|
||||
ref={(el) => {
|
||||
this.container = el;
|
||||
}}
|
||||
className={`ui-marquee ${this.props.className}`.trim()}
|
||||
className={classNames('ui-marquee', this.props.className)}
|
||||
style={{ overflow: 'hidden' }}
|
||||
onMouseEnter={this.onHandleMouseEnter}
|
||||
onMouseLeave={this.onHandleMouseLeave}
|
||||
@@ -178,4 +168,20 @@ class Marquee extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
Marquee.propTypes = {
|
||||
text: PropTypes.string,
|
||||
title: PropTypes.string,
|
||||
hoverToStop: PropTypes.bool,
|
||||
loop: PropTypes.bool,
|
||||
className: PropTypes.string
|
||||
};
|
||||
|
||||
Marquee.defaultProps = {
|
||||
text: '',
|
||||
title: '',
|
||||
hoverToStop: true,
|
||||
loop: false,
|
||||
className: ''
|
||||
};
|
||||
|
||||
export default Marquee;
|
||||
|
||||
@@ -58,9 +58,9 @@ class FilterMenu extends Component {
|
||||
>
|
||||
<ButtonComponent
|
||||
iconName={icons.FILTER}
|
||||
showIndicator={selectedFilterKey !== 'all'}
|
||||
text={translate('Filter')}
|
||||
isDisabled={isDisabled}
|
||||
showIndicator={selectedFilterKey !== 'all'}
|
||||
/>
|
||||
|
||||
<FilterMenuContent
|
||||
|
||||
@@ -3,7 +3,7 @@ import React, { Component } from 'react';
|
||||
import { Manager, Popper, Reference } from 'react-popper';
|
||||
import Portal from 'Components/Portal';
|
||||
import { align } from 'Helpers/Props';
|
||||
import getUniqueElememtId from 'Utilities/getUniqueElementId';
|
||||
import getUniqueElementId from 'Utilities/getUniqueElementId';
|
||||
import styles from './Menu.css';
|
||||
|
||||
const sharedPopperOptions = {
|
||||
@@ -38,8 +38,8 @@ class Menu extends Component {
|
||||
super(props, context);
|
||||
|
||||
this._scheduleUpdate = null;
|
||||
this._menuButtonId = getUniqueElememtId();
|
||||
this._menuContentId = getUniqueElememtId();
|
||||
this._menuButtonId = getUniqueElementId();
|
||||
this._menuContentId = getUniqueElementId();
|
||||
|
||||
this.state = {
|
||||
isMenuOpen: false,
|
||||
|
||||
@@ -18,7 +18,7 @@ function ModalError(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Error
|
||||
{translate('Error')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
@@ -26,7 +26,7 @@ function ModalError(props) {
|
||||
messageClassName={styles.message}
|
||||
detailsClassName={styles.details}
|
||||
{...otherProps}
|
||||
message={translate('ThereWasAnErrorLoadingThisItem')}
|
||||
message={translate('ErrorLoadingItem')}
|
||||
/>
|
||||
</ModalBody>
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ function KeyboardShortcutsModalContent(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Keyboard Shortcuts
|
||||
{translate('KeyboardShortcuts')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
||||
@@ -92,7 +92,7 @@ class MovieSearchInput extends Component {
|
||||
if (item.type === ADD_NEW_TYPE) {
|
||||
return (
|
||||
<div className={styles.addNewMovieSuggestion}>
|
||||
Search for {query}
|
||||
{translate('SearchForQuery', { query })}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ class PageHeader extends Component {
|
||||
<IconButton
|
||||
className={styles.donate}
|
||||
name={icons.HEART}
|
||||
aria-label="Donate"
|
||||
aria-label={translate('Donate')}
|
||||
to="https://radarr.video/donate"
|
||||
size={14}
|
||||
title={translate('Donate')}
|
||||
|
||||
@@ -10,7 +10,7 @@ function PageContentError(props) {
|
||||
<PageContentBody>
|
||||
<ErrorBoundaryError
|
||||
{...props}
|
||||
message={translate('ThereWasAnErrorLoadingThisPage')}
|
||||
message={translate('ErrorLoadingPage')}
|
||||
/>
|
||||
</PageContentBody>
|
||||
</div>
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
composes: link;
|
||||
|
||||
padding: 10px 24px;
|
||||
padding-left: 35px;
|
||||
}
|
||||
|
||||
.isActiveLink {
|
||||
@@ -41,10 +42,6 @@
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.noIcon {
|
||||
margin-left: 25px;
|
||||
}
|
||||
|
||||
.status {
|
||||
float: right;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ interface CssExports {
|
||||
'isActiveParentLink': string;
|
||||
'item': string;
|
||||
'link': string;
|
||||
'noIcon': string;
|
||||
'status': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
|
||||
@@ -63,9 +63,7 @@ class PageSidebarItem extends Component {
|
||||
</span>
|
||||
}
|
||||
|
||||
<span className={isChildItem ? styles.noIcon : null}>
|
||||
{typeof title === 'function' ? title() : title}
|
||||
</span>
|
||||
{typeof title === 'function' ? title() : title}
|
||||
|
||||
{
|
||||
!!StatusComponent &&
|
||||
|
||||
@@ -23,11 +23,14 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.label {
|
||||
padding: 0 3px;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
color: var(--toolbarLabelColor);
|
||||
font-size: $extraSmallFontSize;
|
||||
line-height: calc($extraSmallFontSize + 1px);
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
import classNames from 'classnames';
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import Icon from 'Components/Icon';
|
||||
import Link from 'Components/Link/Link';
|
||||
import { icons } from 'Helpers/Props';
|
||||
import styles from './PageToolbarButton.css';
|
||||
|
||||
function PageToolbarButton(props) {
|
||||
const {
|
||||
label,
|
||||
iconName,
|
||||
spinningName,
|
||||
isDisabled,
|
||||
isSpinning,
|
||||
...otherProps
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<Link
|
||||
className={classNames(
|
||||
styles.toolbarButton,
|
||||
isDisabled && styles.isDisabled
|
||||
)}
|
||||
isDisabled={isDisabled || isSpinning}
|
||||
{...otherProps}
|
||||
>
|
||||
<Icon
|
||||
name={isSpinning ? (spinningName || iconName) : iconName}
|
||||
isSpinning={isSpinning}
|
||||
size={21}
|
||||
/>
|
||||
|
||||
<div className={styles.labelContainer}>
|
||||
<div className={styles.label}>
|
||||
{label}
|
||||
</div>
|
||||
</div>
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
|
||||
PageToolbarButton.propTypes = {
|
||||
label: PropTypes.string.isRequired,
|
||||
iconName: PropTypes.object.isRequired,
|
||||
spinningName: PropTypes.object,
|
||||
isSpinning: PropTypes.bool,
|
||||
isDisabled: PropTypes.bool,
|
||||
onPress: PropTypes.func
|
||||
};
|
||||
|
||||
PageToolbarButton.defaultProps = {
|
||||
spinningName: icons.SPINNER,
|
||||
isDisabled: false,
|
||||
isSpinning: false
|
||||
};
|
||||
|
||||
export default PageToolbarButton;
|
||||
50
frontend/src/Components/Page/Toolbar/PageToolbarButton.tsx
Normal file
50
frontend/src/Components/Page/Toolbar/PageToolbarButton.tsx
Normal file
@@ -0,0 +1,50 @@
|
||||
import classNames from 'classnames';
|
||||
import React from 'react';
|
||||
import Icon, { IconName } from 'Components/Icon';
|
||||
import Link, { LinkProps } from 'Components/Link/Link';
|
||||
import { icons } from 'Helpers/Props';
|
||||
import styles from './PageToolbarButton.css';
|
||||
|
||||
export interface PageToolbarButtonProps extends LinkProps {
|
||||
label: string;
|
||||
iconName: IconName;
|
||||
spinningName?: IconName;
|
||||
isSpinning?: boolean;
|
||||
isDisabled?: boolean;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
overflowComponent?: React.ComponentType<any>;
|
||||
}
|
||||
|
||||
function PageToolbarButton({
|
||||
label,
|
||||
iconName,
|
||||
spinningName = icons.SPINNER,
|
||||
isDisabled = false,
|
||||
isSpinning = false,
|
||||
overflowComponent,
|
||||
...otherProps
|
||||
}: PageToolbarButtonProps) {
|
||||
return (
|
||||
<Link
|
||||
className={classNames(
|
||||
styles.toolbarButton,
|
||||
isDisabled && styles.isDisabled
|
||||
)}
|
||||
isDisabled={isDisabled || isSpinning}
|
||||
title={label}
|
||||
{...otherProps}
|
||||
>
|
||||
<Icon
|
||||
name={isSpinning ? spinningName || iconName : iconName}
|
||||
isSpinning={isSpinning}
|
||||
size={21}
|
||||
/>
|
||||
|
||||
<div className={styles.labelContainer}>
|
||||
<div className={styles.label}>{label}</div>
|
||||
</div>
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
|
||||
export default PageToolbarButton;
|
||||
@@ -170,11 +170,11 @@ class TableOptionsModal extends Component {
|
||||
{
|
||||
canModifyColumns ?
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('Columns')}</FormLabel>
|
||||
<FormLabel>{translate('TableColumns')}</FormLabel>
|
||||
|
||||
<div>
|
||||
<FormInputHelpText
|
||||
text={translate('TableOptionsColumnsMessage')}
|
||||
text={translate('TableColumnsHelpText')}
|
||||
/>
|
||||
|
||||
<div className={styles.columns}>
|
||||
|
||||
@@ -6,6 +6,7 @@ import Icon from 'Components/Icon';
|
||||
import Link from 'Components/Link/Link';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import { icons } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './TablePager.css';
|
||||
|
||||
class TablePager extends Component {
|
||||
@@ -156,7 +157,7 @@ class TablePager extends Component {
|
||||
|
||||
<div className={styles.recordsContainer}>
|
||||
<div className={styles.records}>
|
||||
Total records: {totalRecords}
|
||||
{translate('TotalRecords', { totalRecords })}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -7,63 +7,63 @@ export const shortcuts = {
|
||||
OPEN_KEYBOARD_SHORTCUTS_MODAL: {
|
||||
key: '?',
|
||||
get name() {
|
||||
return translate('OpenThisModal');
|
||||
return translate('KeyboardShortcutsOpenModal');
|
||||
}
|
||||
},
|
||||
|
||||
CLOSE_MODAL: {
|
||||
key: 'Esc',
|
||||
get name() {
|
||||
return translate('CloseCurrentModal');
|
||||
return translate('KeyboardShortcutsCloseModal');
|
||||
}
|
||||
},
|
||||
|
||||
ACCEPT_CONFIRM_MODAL: {
|
||||
key: 'Enter',
|
||||
get name() {
|
||||
return translate('AcceptConfirmationModal');
|
||||
return translate('KeyboardShortcutsConfirmModal');
|
||||
}
|
||||
},
|
||||
|
||||
MOVIE_SEARCH_INPUT: {
|
||||
key: 's',
|
||||
get name() {
|
||||
return translate('FocusSearchBox');
|
||||
return translate('KeyboardShortcutsFocusSearchBox');
|
||||
}
|
||||
},
|
||||
|
||||
SAVE_SETTINGS: {
|
||||
key: 'mod+s',
|
||||
get name() {
|
||||
return translate('SaveSettings');
|
||||
return translate('KeyboardShortcutsSaveSettings');
|
||||
}
|
||||
},
|
||||
|
||||
SCROLL_TOP: {
|
||||
key: 'mod+home',
|
||||
get name() {
|
||||
return translate('MovieIndexScrollTop');
|
||||
return translate('KeyboardShortcutsMovieIndexScrollTop');
|
||||
}
|
||||
},
|
||||
|
||||
SCROLL_BOTTOM: {
|
||||
key: 'mod+end',
|
||||
get name() {
|
||||
return translate('MovieIndexScrollBottom');
|
||||
return translate('KeyboardShortcutsMovieIndexScrollBottom');
|
||||
}
|
||||
},
|
||||
|
||||
DETAILS_NEXT: {
|
||||
key: '→',
|
||||
get name() {
|
||||
return translate('MovieDetailsNextMovie');
|
||||
return translate('KeyboardShortcutsMovieDetailsNextMovie');
|
||||
}
|
||||
},
|
||||
|
||||
DETAILS_PREVIOUS: {
|
||||
key: '←',
|
||||
get name() {
|
||||
return translate('MovieDetailsPreviousMovie');
|
||||
return translate('KeyboardShortcutsMovieDetailsPreviousMovie');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import translate from 'Utilities/String/translate';
|
||||
import * as filterTypes from './filterTypes';
|
||||
|
||||
export const ARRAY = 'array';
|
||||
@@ -20,49 +21,127 @@ export const all = [
|
||||
|
||||
export const possibleFilterTypes = {
|
||||
[ARRAY]: [
|
||||
{ key: filterTypes.CONTAINS, value: 'contains' },
|
||||
{ key: filterTypes.NOT_CONTAINS, value: 'does not contain' }
|
||||
{
|
||||
key: filterTypes.CONTAINS,
|
||||
value: () => translate('FilterContains')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_CONTAINS,
|
||||
value: () => translate('FilterDoesNotContain')
|
||||
}
|
||||
],
|
||||
|
||||
[CONTAINS]: [
|
||||
{ key: filterTypes.CONTAINS, value: 'contains' }
|
||||
{
|
||||
key: filterTypes.CONTAINS,
|
||||
value: () => translate('FilterContains')
|
||||
}
|
||||
],
|
||||
|
||||
[DATE]: [
|
||||
{ key: filterTypes.LESS_THAN, value: 'is before' },
|
||||
{ key: filterTypes.GREATER_THAN, value: 'is after' },
|
||||
{ key: filterTypes.IN_LAST, value: 'in the last' },
|
||||
{ key: filterTypes.NOT_IN_LAST, value: 'not in the last' },
|
||||
{ key: filterTypes.IN_NEXT, value: 'in the next' },
|
||||
{ key: filterTypes.NOT_IN_NEXT, value: 'not in the next' }
|
||||
{
|
||||
key: filterTypes.LESS_THAN,
|
||||
value: () => translate('FilterIsBefore')
|
||||
},
|
||||
{
|
||||
key: filterTypes.GREATER_THAN,
|
||||
value: () => translate('FilterIsAfter')
|
||||
},
|
||||
{
|
||||
key: filterTypes.IN_LAST,
|
||||
value: () => translate('FilterInLast')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_IN_LAST,
|
||||
value: () => translate('FilterNotInLast')
|
||||
},
|
||||
{
|
||||
key: filterTypes.IN_NEXT,
|
||||
value: () => translate('FilterInNext')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_IN_NEXT,
|
||||
value: () => translate('FilterNotInNext')
|
||||
}
|
||||
],
|
||||
|
||||
[EQUAL]: [
|
||||
{ key: filterTypes.EQUAL, value: 'is' }
|
||||
{
|
||||
key: filterTypes.EQUAL,
|
||||
value: () => translate('FilterIs')
|
||||
}
|
||||
],
|
||||
|
||||
[EXACT]: [
|
||||
{ key: filterTypes.EQUAL, value: 'is' },
|
||||
{ key: filterTypes.NOT_EQUAL, value: 'is not' }
|
||||
{
|
||||
key: filterTypes.EQUAL,
|
||||
value: () => translate('FilterIs')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_EQUAL,
|
||||
value: () => translate('FilterIsNot')
|
||||
}
|
||||
],
|
||||
|
||||
[NUMBER]: [
|
||||
{ key: filterTypes.EQUAL, value: 'equal' },
|
||||
{ key: filterTypes.GREATER_THAN, value: 'greater than' },
|
||||
{ key: filterTypes.GREATER_THAN_OR_EQUAL, value: 'greater than or equal' },
|
||||
{ key: filterTypes.LESS_THAN, value: 'less than' },
|
||||
{ key: filterTypes.LESS_THAN_OR_EQUAL, value: 'less than or equal' },
|
||||
{ key: filterTypes.NOT_EQUAL, value: 'not equal' }
|
||||
{
|
||||
key: filterTypes.EQUAL,
|
||||
value: () => translate('FilterEqual')
|
||||
},
|
||||
{
|
||||
key: filterTypes.GREATER_THAN,
|
||||
value: () => translate('FilterGreaterThan')
|
||||
},
|
||||
{
|
||||
key: filterTypes.GREATER_THAN_OR_EQUAL,
|
||||
value: () => translate('FilterGreaterThanOrEqual')
|
||||
},
|
||||
{
|
||||
key: filterTypes.LESS_THAN,
|
||||
value: () => translate('FilterLessThan')
|
||||
},
|
||||
{
|
||||
key: filterTypes.LESS_THAN_OR_EQUAL,
|
||||
value: () => translate('FilterLessThanOrEqual')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_EQUAL,
|
||||
value: () => translate('FilterNotEqual')
|
||||
}
|
||||
],
|
||||
|
||||
[STRING]: [
|
||||
{ key: filterTypes.CONTAINS, value: 'contains' },
|
||||
{ key: filterTypes.NOT_CONTAINS, value: 'does not contain' },
|
||||
{ key: filterTypes.EQUAL, value: 'equal' },
|
||||
{ key: filterTypes.NOT_EQUAL, value: 'not equal' },
|
||||
{ key: filterTypes.STARTS_WITH, value: 'starts with' },
|
||||
{ key: filterTypes.NOT_STARTS_WITH, value: 'does not start with' },
|
||||
{ key: filterTypes.ENDS_WITH, value: 'ends with' },
|
||||
{ key: filterTypes.NOT_ENDS_WITH, value: 'does not end with' }
|
||||
{
|
||||
key: filterTypes.CONTAINS,
|
||||
value: () => translate('FilterContains')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_CONTAINS,
|
||||
value: () => translate('FilterDoesNotContain')
|
||||
},
|
||||
{
|
||||
key: filterTypes.EQUAL,
|
||||
value: () => translate('FilterEqual')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_EQUAL,
|
||||
value: () => translate('FilterNotEqual')
|
||||
},
|
||||
{
|
||||
key: filterTypes.STARTS_WITH,
|
||||
value: () => translate('FilterStartsWith')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_STARTS_WITH,
|
||||
value: () => translate('FilterDoesNotStartWith')
|
||||
},
|
||||
{
|
||||
key: filterTypes.ENDS_WITH,
|
||||
value: () => translate('FilterEndsWith')
|
||||
},
|
||||
{
|
||||
key: filterTypes.NOT_ENDS_WITH,
|
||||
value: () => translate('FilterDoesNotEndWith')
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -36,4 +36,5 @@ export type Kind =
|
||||
| 'primary'
|
||||
| 'purple'
|
||||
| 'success'
|
||||
| 'warning';
|
||||
| 'warning'
|
||||
| 'queue';
|
||||
|
||||
@@ -192,10 +192,9 @@ const importModeSelector = createSelector(
|
||||
}
|
||||
);
|
||||
|
||||
interface InteractiveImportModalContentProps {
|
||||
export interface InteractiveImportModalContentProps {
|
||||
downloadId?: string;
|
||||
movieId?: number;
|
||||
seasonNumber?: number;
|
||||
showMovie?: boolean;
|
||||
allowMovieChange?: boolean;
|
||||
showDelete?: boolean;
|
||||
@@ -217,7 +216,6 @@ function InteractiveImportModalContent(
|
||||
const {
|
||||
downloadId,
|
||||
movieId,
|
||||
seasonNumber,
|
||||
allowMovieChange = true,
|
||||
showMovie = true,
|
||||
showFilterExistingFiles = false,
|
||||
@@ -343,7 +341,6 @@ function InteractiveImportModalContent(
|
||||
fetchInteractiveImportItems({
|
||||
downloadId,
|
||||
movieId,
|
||||
seasonNumber,
|
||||
folder,
|
||||
filterExistingFiles,
|
||||
})
|
||||
|
||||
@@ -4,9 +4,12 @@ import usePrevious from 'Helpers/Hooks/usePrevious';
|
||||
import { sizes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import InteractiveImportSelectFolderModalContent from './Folder/InteractiveImportSelectFolderModalContent';
|
||||
import InteractiveImportModalContent from './Interactive/InteractiveImportModalContent';
|
||||
import InteractiveImportModalContent, {
|
||||
InteractiveImportModalContentProps,
|
||||
} from './Interactive/InteractiveImportModalContent';
|
||||
|
||||
interface InteractiveImportModalProps {
|
||||
interface InteractiveImportModalProps
|
||||
extends Omit<InteractiveImportModalContentProps, 'modalTitle'> {
|
||||
isOpen: boolean;
|
||||
folder?: string;
|
||||
downloadId?: string;
|
||||
|
||||
@@ -179,7 +179,9 @@ function SelectMovieModalContent(props: SelectMovieModalContentProps) {
|
||||
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>{modalTitle} - Select Movie</ModalHeader>
|
||||
<ModalHeader>
|
||||
{translate('SelectMovieModalTitle', { modalTitle })}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody
|
||||
className={styles.modalBody}
|
||||
@@ -187,7 +189,7 @@ function SelectMovieModalContent(props: SelectMovieModalContentProps) {
|
||||
>
|
||||
<TextInput
|
||||
className={styles.filterInput}
|
||||
placeholder="Filter movies"
|
||||
placeholder={translate('FilterMoviePlaceholder')}
|
||||
name="filter"
|
||||
value={filter}
|
||||
autoFocus={true}
|
||||
@@ -223,7 +225,7 @@ function SelectMovieModalContent(props: SelectMovieModalContentProps) {
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>Cancel</Button>
|
||||
<Button onPress={onModalClose}>{translate('Cancel')}</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
);
|
||||
|
||||
@@ -160,10 +160,10 @@
|
||||
}
|
||||
|
||||
.overview {
|
||||
flex: 1 0 auto;
|
||||
flex: 1 0 0;
|
||||
margin-top: 8px;
|
||||
padding-left: 7px;
|
||||
min-height: 0;
|
||||
text-wrap: balance;
|
||||
font-size: $intermediateFontSize;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,835 +0,0 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import TextTruncate from 'react-text-truncate';
|
||||
import Alert from 'Components/Alert';
|
||||
import FieldSet from 'Components/FieldSet';
|
||||
import Icon from 'Components/Icon';
|
||||
import ImdbRating from 'Components/ImdbRating';
|
||||
import InfoLabel from 'Components/InfoLabel';
|
||||
import IconButton from 'Components/Link/IconButton';
|
||||
import Marquee from 'Components/Marquee';
|
||||
import Measure from 'Components/Measure';
|
||||
import MonitorToggleButton from 'Components/MonitorToggleButton';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
|
||||
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
|
||||
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
|
||||
import RottenTomatoRating from 'Components/RottenTomatoRating';
|
||||
import TmdbRating from 'Components/TmdbRating';
|
||||
import Popover from 'Components/Tooltip/Popover';
|
||||
import Tooltip from 'Components/Tooltip/Tooltip';
|
||||
import TraktRating from 'Components/TraktRating';
|
||||
import { icons, kinds, sizes, sortDirections, tooltipPositions } from 'Helpers/Props';
|
||||
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
||||
import DeleteMovieModal from 'Movie/Delete/DeleteMovieModal';
|
||||
import EditMovieModal from 'Movie/Edit/EditMovieModal';
|
||||
import getMovieStatusDetails from 'Movie/getMovieStatusDetails';
|
||||
import MovieHistoryModal from 'Movie/History/MovieHistoryModal';
|
||||
import MovieCollectionLabel from 'Movie/MovieCollectionLabel';
|
||||
import MovieGenres from 'Movie/MovieGenres';
|
||||
import MoviePoster from 'Movie/MoviePoster';
|
||||
import MovieInteractiveSearchModal from 'Movie/Search/MovieInteractiveSearchModal';
|
||||
import MovieFileEditorTable from 'MovieFile/Editor/MovieFileEditorTable';
|
||||
import ExtraFileTable from 'MovieFile/Extras/ExtraFileTable';
|
||||
import OrganizePreviewModal from 'Organize/OrganizePreviewModal';
|
||||
import QualityProfileNameConnector from 'Settings/Profiles/Quality/QualityProfileNameConnector';
|
||||
import fonts from 'Styles/Variables/fonts';
|
||||
import * as keyCodes from 'Utilities/Constants/keyCodes';
|
||||
import formatRuntime from 'Utilities/Date/formatRuntime';
|
||||
import formatBytes from 'Utilities/Number/formatBytes';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import MovieCastPosters from './Credits/Cast/MovieCastPosters';
|
||||
import MovieCrewPosters from './Credits/Crew/MovieCrewPosters';
|
||||
import MovieDetailsLinks from './MovieDetailsLinks';
|
||||
import MovieReleaseDates from './MovieReleaseDates';
|
||||
import MovieStatusLabel from './MovieStatusLabel';
|
||||
import MovieTagsConnector from './MovieTagsConnector';
|
||||
import MovieTitlesTable from './Titles/MovieTitlesTable';
|
||||
import styles from './MovieDetails.css';
|
||||
|
||||
const defaultFontSize = parseInt(fonts.defaultFontSize);
|
||||
const lineHeight = parseFloat(fonts.lineHeight);
|
||||
|
||||
function getFanartUrl(images) {
|
||||
const image = images.find((img) => img.coverType === 'fanart');
|
||||
return image?.url ?? image?.remoteUrl;
|
||||
}
|
||||
|
||||
class MovieDetails extends Component {
|
||||
|
||||
//
|
||||
// Lifecycle
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
this.state = {
|
||||
isOrganizeModalOpen: false,
|
||||
isEditMovieModalOpen: false,
|
||||
isDeleteMovieModalOpen: false,
|
||||
isInteractiveImportModalOpen: false,
|
||||
isInteractiveSearchModalOpen: false,
|
||||
isMovieHistoryModalOpen: false,
|
||||
overviewHeight: 0,
|
||||
titleWidth: 0
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
window.addEventListener('touchstart', this.onTouchStart);
|
||||
window.addEventListener('touchend', this.onTouchEnd);
|
||||
window.addEventListener('touchcancel', this.onTouchCancel);
|
||||
window.addEventListener('touchmove', this.onTouchMove);
|
||||
window.addEventListener('keyup', this.onKeyUp);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
window.removeEventListener('touchstart', this.onTouchStart);
|
||||
window.removeEventListener('touchend', this.onTouchEnd);
|
||||
window.removeEventListener('touchcancel', this.onTouchCancel);
|
||||
window.removeEventListener('touchmove', this.onTouchMove);
|
||||
window.removeEventListener('keyup', this.onKeyUp);
|
||||
}
|
||||
|
||||
//
|
||||
// Listeners
|
||||
|
||||
onOrganizePress = () => {
|
||||
this.setState({ isOrganizeModalOpen: true });
|
||||
};
|
||||
|
||||
onOrganizeModalClose = () => {
|
||||
this.setState({ isOrganizeModalOpen: false });
|
||||
};
|
||||
|
||||
onInteractiveImportPress = () => {
|
||||
this.setState({ isInteractiveImportModalOpen: true });
|
||||
};
|
||||
|
||||
onInteractiveImportModalClose = () => {
|
||||
this.setState({ isInteractiveImportModalOpen: false });
|
||||
};
|
||||
|
||||
onEditMoviePress = () => {
|
||||
this.setState({ isEditMovieModalOpen: true });
|
||||
};
|
||||
|
||||
onEditMovieModalClose = () => {
|
||||
this.setState({ isEditMovieModalOpen: false });
|
||||
};
|
||||
|
||||
onInteractiveSearchPress = () => {
|
||||
this.setState({ isInteractiveSearchModalOpen: true });
|
||||
};
|
||||
|
||||
onInteractiveSearchModalClose = () => {
|
||||
this.setState({ isInteractiveSearchModalOpen: false });
|
||||
};
|
||||
|
||||
onDeleteMoviePress = () => {
|
||||
this.setState({
|
||||
isEditMovieModalOpen: false,
|
||||
isDeleteMovieModalOpen: true
|
||||
});
|
||||
};
|
||||
|
||||
onDeleteMovieModalClose = () => {
|
||||
this.setState({ isDeleteMovieModalOpen: false });
|
||||
};
|
||||
|
||||
onMovieHistoryPress = () => {
|
||||
this.setState({ isMovieHistoryModalOpen: true });
|
||||
};
|
||||
|
||||
onMovieHistoryModalClose = () => {
|
||||
this.setState({ isMovieHistoryModalOpen: false });
|
||||
};
|
||||
|
||||
onMeasure = ({ height }) => {
|
||||
this.setState({ overviewHeight: height });
|
||||
};
|
||||
|
||||
onTitleMeasure = ({ width }) => {
|
||||
this.setState({ titleWidth: width });
|
||||
};
|
||||
|
||||
onKeyUp = (event) => {
|
||||
if (event.composedPath && event.composedPath().length === 4) {
|
||||
if (event.keyCode === keyCodes.LEFT_ARROW) {
|
||||
this.props.onGoToMovie(this.props.previousMovie.titleSlug);
|
||||
}
|
||||
if (event.keyCode === keyCodes.RIGHT_ARROW) {
|
||||
this.props.onGoToMovie(this.props.nextMovie.titleSlug);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
onTouchStart = (event) => {
|
||||
const touches = event.touches;
|
||||
const touchStart = touches[0].pageX;
|
||||
const touchY = touches[0].pageY;
|
||||
|
||||
// Only change when swipe is on header, we need horizontal scroll on tables
|
||||
if (touchY > 470) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (touches.length !== 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
touchStart < 50 ||
|
||||
this.props.isSidebarVisible ||
|
||||
this.state.isOrganizeModalOpen ||
|
||||
this.state.isEditMovieModalOpen ||
|
||||
this.state.isDeleteMovieModalOpen ||
|
||||
this.state.isInteractiveImportModalOpen ||
|
||||
this.state.isInteractiveSearchModalOpen ||
|
||||
this.state.isMovieHistoryModalOpen
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._touchStart = touchStart;
|
||||
};
|
||||
|
||||
onTouchEnd = (event) => {
|
||||
const touches = event.changedTouches;
|
||||
const currentTouch = touches[0].pageX;
|
||||
|
||||
if (!this._touchStart) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentTouch > this._touchStart && currentTouch - this._touchStart > 100) {
|
||||
this.props.onGoToMovie(this.props.previousMovie.titleSlug);
|
||||
} else if (currentTouch < this._touchStart && this._touchStart - currentTouch > 100) {
|
||||
this.props.onGoToMovie(this.props.nextMovie.titleSlug);
|
||||
}
|
||||
|
||||
this._touchStart = null;
|
||||
};
|
||||
|
||||
onTouchCancel = (event) => {
|
||||
this._touchStart = null;
|
||||
};
|
||||
|
||||
onTouchMove = (event) => {
|
||||
if (!this._touchStart) {
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
const {
|
||||
id,
|
||||
tmdbId,
|
||||
imdbId,
|
||||
title,
|
||||
originalTitle,
|
||||
year,
|
||||
inCinemas,
|
||||
physicalRelease,
|
||||
digitalRelease,
|
||||
runtime,
|
||||
certification,
|
||||
ratings,
|
||||
path,
|
||||
statistics,
|
||||
qualityProfileId,
|
||||
monitored,
|
||||
studio,
|
||||
originalLanguage,
|
||||
genres,
|
||||
collection,
|
||||
overview,
|
||||
status,
|
||||
youTubeTrailerId,
|
||||
isAvailable,
|
||||
images,
|
||||
tags,
|
||||
isSaving,
|
||||
isRefreshing,
|
||||
isSearching,
|
||||
isFetching,
|
||||
isSmallScreen,
|
||||
movieFilesError,
|
||||
movieCreditsError,
|
||||
extraFilesError,
|
||||
hasMovieFiles,
|
||||
previousMovie,
|
||||
nextMovie,
|
||||
onMonitorTogglePress,
|
||||
onRefreshPress,
|
||||
onSearchPress,
|
||||
queueItem,
|
||||
movieRuntimeFormat
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
sizeOnDisk = 0
|
||||
} = statistics;
|
||||
|
||||
const {
|
||||
isOrganizeModalOpen,
|
||||
isEditMovieModalOpen,
|
||||
isDeleteMovieModalOpen,
|
||||
isInteractiveImportModalOpen,
|
||||
isInteractiveSearchModalOpen,
|
||||
isMovieHistoryModalOpen,
|
||||
overviewHeight,
|
||||
titleWidth
|
||||
} = this.state;
|
||||
|
||||
const statusDetails = getMovieStatusDetails(status);
|
||||
|
||||
const fanartUrl = getFanartUrl(images);
|
||||
const marqueeWidth = isSmallScreen ? titleWidth : (titleWidth - 150);
|
||||
|
||||
const titleWithYear = `${title}${year > 0 ? ` (${year})` : ''}`;
|
||||
|
||||
return (
|
||||
<PageContent title={titleWithYear}>
|
||||
<PageToolbar>
|
||||
<PageToolbarSection>
|
||||
<PageToolbarButton
|
||||
label={translate('RefreshAndScan')}
|
||||
iconName={icons.REFRESH}
|
||||
spinningName={icons.REFRESH}
|
||||
title={translate('RefreshInformationAndScanDisk')}
|
||||
isSpinning={isRefreshing}
|
||||
onPress={onRefreshPress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('SearchMovie')}
|
||||
iconName={icons.SEARCH}
|
||||
isSpinning={isSearching}
|
||||
title={undefined}
|
||||
onPress={onSearchPress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('InteractiveSearch')}
|
||||
iconName={icons.INTERACTIVE}
|
||||
isSpinning={isSearching}
|
||||
title={undefined}
|
||||
onPress={this.onInteractiveSearchPress}
|
||||
/>
|
||||
|
||||
<PageToolbarSeparator />
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('PreviewRename')}
|
||||
iconName={icons.ORGANIZE}
|
||||
isDisabled={!hasMovieFiles}
|
||||
onPress={this.onOrganizePress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('ManageFiles')}
|
||||
iconName={icons.MOVIE_FILE}
|
||||
onPress={this.onInteractiveImportPress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('History')}
|
||||
iconName={icons.HISTORY}
|
||||
onPress={this.onMovieHistoryPress}
|
||||
/>
|
||||
|
||||
<PageToolbarSeparator />
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('Edit')}
|
||||
iconName={icons.EDIT}
|
||||
onPress={this.onEditMoviePress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('Delete')}
|
||||
iconName={icons.DELETE}
|
||||
onPress={this.onDeleteMoviePress}
|
||||
/>
|
||||
</PageToolbarSection>
|
||||
</PageToolbar>
|
||||
|
||||
<PageContentBody innerClassName={styles.innerContentBody}>
|
||||
<div className={styles.header}>
|
||||
<div
|
||||
className={styles.backdrop}
|
||||
style={
|
||||
fanartUrl ?
|
||||
{ backgroundImage: `url(${fanartUrl})` } :
|
||||
null
|
||||
}
|
||||
>
|
||||
<div className={styles.backdropOverlay} />
|
||||
</div>
|
||||
|
||||
<div className={styles.headerContent}>
|
||||
<MoviePoster
|
||||
className={styles.poster}
|
||||
images={images}
|
||||
size={500}
|
||||
lazy={false}
|
||||
/>
|
||||
|
||||
<div className={styles.info}>
|
||||
<Measure onMeasure={this.onTitleMeasure}>
|
||||
<div className={styles.titleRow}>
|
||||
<div className={styles.titleContainer}>
|
||||
<div className={styles.toggleMonitoredContainer}>
|
||||
<MonitorToggleButton
|
||||
className={styles.monitorToggleButton}
|
||||
monitored={monitored}
|
||||
isSaving={isSaving}
|
||||
size={40}
|
||||
onPress={onMonitorTogglePress}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className={styles.title} style={{ width: marqueeWidth }}>
|
||||
<Marquee text={title} title={originalTitle} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.movieNavigationButtons}>
|
||||
<IconButton
|
||||
className={styles.movieNavigationButton}
|
||||
name={icons.ARROW_LEFT}
|
||||
size={30}
|
||||
title={translate('GoToInterp', [previousMovie.title])}
|
||||
to={`/movie/${previousMovie.titleSlug}`}
|
||||
/>
|
||||
|
||||
<IconButton
|
||||
className={styles.movieNavigationButton}
|
||||
name={icons.ARROW_RIGHT}
|
||||
size={30}
|
||||
title={translate('GoToInterp', [nextMovie.title])}
|
||||
to={`/movie/${nextMovie.titleSlug}`}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</Measure>
|
||||
|
||||
<div className={styles.details}>
|
||||
<div>
|
||||
{
|
||||
certification ?
|
||||
<span className={styles.certification} title={translate('Certification')}>
|
||||
{certification}
|
||||
</span> :
|
||||
null
|
||||
}
|
||||
|
||||
<span className={styles.year}>
|
||||
<Popover
|
||||
anchor={
|
||||
year > 0 ? (
|
||||
year
|
||||
) : (
|
||||
<Icon
|
||||
name={icons.WARNING}
|
||||
kind={kinds.WARNING}
|
||||
size={20}
|
||||
/>
|
||||
)
|
||||
}
|
||||
title={translate('ReleaseDates')}
|
||||
body={
|
||||
<MovieReleaseDates
|
||||
tmdbId={tmdbId}
|
||||
inCinemas={inCinemas}
|
||||
digitalRelease={digitalRelease}
|
||||
physicalRelease={physicalRelease}
|
||||
/>
|
||||
}
|
||||
position={tooltipPositions.BOTTOM}
|
||||
/>
|
||||
</span>
|
||||
|
||||
{
|
||||
runtime ?
|
||||
<span className={styles.runtime} title={translate('Runtime')}>
|
||||
{formatRuntime(runtime, movieRuntimeFormat)}
|
||||
</span> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
<span className={styles.links}>
|
||||
<Tooltip
|
||||
anchor={
|
||||
<Icon
|
||||
name={icons.EXTERNAL_LINK}
|
||||
size={20}
|
||||
/>
|
||||
}
|
||||
tooltip={
|
||||
<MovieDetailsLinks
|
||||
tmdbId={tmdbId}
|
||||
imdbId={imdbId}
|
||||
youTubeTrailerId={youTubeTrailerId}
|
||||
/>
|
||||
}
|
||||
position={tooltipPositions.BOTTOM}
|
||||
/>
|
||||
</span>
|
||||
}
|
||||
|
||||
{
|
||||
!!tags.length &&
|
||||
<span>
|
||||
<Tooltip
|
||||
anchor={
|
||||
<Icon
|
||||
name={icons.TAGS}
|
||||
size={20}
|
||||
/>
|
||||
}
|
||||
tooltip={
|
||||
<MovieTagsConnector movieId={id} />
|
||||
}
|
||||
position={tooltipPositions.BOTTOM}
|
||||
/>
|
||||
</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.details}>
|
||||
{
|
||||
ratings.tmdb ?
|
||||
<span className={styles.rating}>
|
||||
<TmdbRating
|
||||
ratings={ratings}
|
||||
iconSize={20}
|
||||
/>
|
||||
</span> :
|
||||
null
|
||||
}
|
||||
{
|
||||
ratings.imdb ?
|
||||
<span className={styles.rating}>
|
||||
<ImdbRating
|
||||
ratings={ratings}
|
||||
iconSize={20}
|
||||
/>
|
||||
</span> :
|
||||
null
|
||||
}
|
||||
{
|
||||
ratings.rottenTomatoes ?
|
||||
<span className={styles.rating}>
|
||||
<RottenTomatoRating
|
||||
ratings={ratings}
|
||||
iconSize={20}
|
||||
/>
|
||||
</span> :
|
||||
null
|
||||
}
|
||||
{
|
||||
ratings.trakt ?
|
||||
<span className={styles.rating}>
|
||||
<TraktRating
|
||||
ratings={ratings}
|
||||
iconSize={20}
|
||||
/>
|
||||
</span> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
|
||||
<div className={styles.detailsLabels}>
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Path')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.path}>
|
||||
{path}
|
||||
</span>
|
||||
</InfoLabel>
|
||||
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Status')}
|
||||
title={statusDetails.message}
|
||||
kind={kinds.DELETE}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.statusName}>
|
||||
<MovieStatusLabel
|
||||
status={status}
|
||||
hasMovieFiles={hasMovieFiles}
|
||||
monitored={monitored}
|
||||
isAvailable={isAvailable}
|
||||
queueItem={queueItem}
|
||||
/>
|
||||
</span>
|
||||
</InfoLabel>
|
||||
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('QualityProfile')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.qualityProfileName}>
|
||||
{
|
||||
<QualityProfileNameConnector
|
||||
qualityProfileId={qualityProfileId}
|
||||
/>
|
||||
}
|
||||
</span>
|
||||
</InfoLabel>
|
||||
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Size')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.sizeOnDisk}>
|
||||
{formatBytes(sizeOnDisk)}
|
||||
</span>
|
||||
</InfoLabel>
|
||||
|
||||
{
|
||||
collection ?
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Collection')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<div className={styles.collection}>
|
||||
<MovieCollectionLabel
|
||||
tmdbId={collection.tmdbId}
|
||||
/>
|
||||
</div>
|
||||
</InfoLabel> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
originalLanguage?.name && !isSmallScreen ?
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('OriginalLanguage')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.originalLanguage}>
|
||||
{originalLanguage.name}
|
||||
</span>
|
||||
</InfoLabel> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
studio && !isSmallScreen ?
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Studio')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.studio}>
|
||||
{studio}
|
||||
</span>
|
||||
</InfoLabel> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
genres.length && !isSmallScreen ?
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Genres')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<MovieGenres className={styles.genres} genres={genres} />
|
||||
</InfoLabel> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
|
||||
<Measure onMeasure={this.onMeasure}>
|
||||
<div className={styles.overview}>
|
||||
<TextTruncate
|
||||
line={Math.floor(overviewHeight / (defaultFontSize * lineHeight))}
|
||||
text={overview}
|
||||
/>
|
||||
</div>
|
||||
</Measure>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.contentContainer}>
|
||||
{
|
||||
!isFetching && movieFilesError ?
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('LoadingMovieFilesFailed')}
|
||||
</Alert> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
!isFetching && movieCreditsError ?
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('LoadingMovieCreditsFailed')}
|
||||
</Alert> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
!isFetching && extraFilesError ?
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('LoadingMovieExtraFilesFailed')}
|
||||
</Alert> :
|
||||
null
|
||||
}
|
||||
|
||||
<FieldSet legend={translate('Files')}>
|
||||
<MovieFileEditorTable
|
||||
movieId={id}
|
||||
/>
|
||||
|
||||
<ExtraFileTable
|
||||
movieId={id}
|
||||
/>
|
||||
</FieldSet>
|
||||
|
||||
<FieldSet legend={translate('Cast')}>
|
||||
<MovieCastPosters
|
||||
isSmallScreen={isSmallScreen}
|
||||
/>
|
||||
</FieldSet>
|
||||
|
||||
<FieldSet legend={translate('Crew')}>
|
||||
<MovieCrewPosters
|
||||
isSmallScreen={isSmallScreen}
|
||||
/>
|
||||
</FieldSet>
|
||||
|
||||
<FieldSet legend={translate('Titles')}>
|
||||
<MovieTitlesTable
|
||||
movieId={id}
|
||||
/>
|
||||
</FieldSet>
|
||||
</div>
|
||||
|
||||
<OrganizePreviewModal
|
||||
isOpen={isOrganizeModalOpen}
|
||||
movieId={id}
|
||||
onModalClose={this.onOrganizeModalClose}
|
||||
/>
|
||||
|
||||
<EditMovieModal
|
||||
isOpen={isEditMovieModalOpen}
|
||||
movieId={id}
|
||||
onModalClose={this.onEditMovieModalClose}
|
||||
onDeleteMoviePress={this.onDeleteMoviePress}
|
||||
/>
|
||||
|
||||
<MovieHistoryModal
|
||||
isOpen={isMovieHistoryModalOpen}
|
||||
movieId={id}
|
||||
onModalClose={this.onMovieHistoryModalClose}
|
||||
/>
|
||||
|
||||
<DeleteMovieModal
|
||||
isOpen={isDeleteMovieModalOpen}
|
||||
movieId={id}
|
||||
onModalClose={this.onDeleteMovieModalClose}
|
||||
/>
|
||||
|
||||
<InteractiveImportModal
|
||||
isOpen={isInteractiveImportModalOpen}
|
||||
movieId={id}
|
||||
title={title}
|
||||
folder={path}
|
||||
initialSortKey="relativePath"
|
||||
initialSortDirection={sortDirections.ASCENDING}
|
||||
showMovie={false}
|
||||
allowMovieChange={false}
|
||||
showDelete={true}
|
||||
showImportMode={false}
|
||||
modalTitle={translate('ManageFiles')}
|
||||
onModalClose={this.onInteractiveImportModalClose}
|
||||
/>
|
||||
|
||||
<MovieInteractiveSearchModal
|
||||
isOpen={isInteractiveSearchModalOpen}
|
||||
movieId={id}
|
||||
movieTitle={title}
|
||||
onModalClose={this.onInteractiveSearchModalClose}
|
||||
/>
|
||||
</PageContentBody>
|
||||
</PageContent>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
MovieDetails.propTypes = {
|
||||
id: PropTypes.number.isRequired,
|
||||
tmdbId: PropTypes.number.isRequired,
|
||||
imdbId: PropTypes.string,
|
||||
title: PropTypes.string.isRequired,
|
||||
originalTitle: PropTypes.string,
|
||||
year: PropTypes.number.isRequired,
|
||||
runtime: PropTypes.number.isRequired,
|
||||
certification: PropTypes.string,
|
||||
ratings: PropTypes.object.isRequired,
|
||||
path: PropTypes.string.isRequired,
|
||||
statistics: PropTypes.object.isRequired,
|
||||
qualityProfileId: PropTypes.number.isRequired,
|
||||
monitored: PropTypes.bool.isRequired,
|
||||
status: PropTypes.string.isRequired,
|
||||
studio: PropTypes.string,
|
||||
originalLanguage: PropTypes.object,
|
||||
genres: PropTypes.arrayOf(PropTypes.string).isRequired,
|
||||
collection: PropTypes.object,
|
||||
youTubeTrailerId: PropTypes.string,
|
||||
isAvailable: PropTypes.bool.isRequired,
|
||||
inCinemas: PropTypes.string,
|
||||
physicalRelease: PropTypes.string,
|
||||
digitalRelease: PropTypes.string,
|
||||
overview: PropTypes.string.isRequired,
|
||||
images: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
alternateTitles: PropTypes.arrayOf(PropTypes.string).isRequired,
|
||||
tags: PropTypes.arrayOf(PropTypes.number).isRequired,
|
||||
isSaving: PropTypes.bool.isRequired,
|
||||
isRefreshing: PropTypes.bool.isRequired,
|
||||
isSearching: PropTypes.bool.isRequired,
|
||||
isFetching: PropTypes.bool.isRequired,
|
||||
isPopulated: PropTypes.bool.isRequired,
|
||||
isSmallScreen: PropTypes.bool.isRequired,
|
||||
isSidebarVisible: PropTypes.bool.isRequired,
|
||||
movieFilesError: PropTypes.object,
|
||||
movieCreditsError: PropTypes.object,
|
||||
extraFilesError: PropTypes.object,
|
||||
hasMovieFiles: PropTypes.bool.isRequired,
|
||||
previousMovie: PropTypes.object.isRequired,
|
||||
nextMovie: PropTypes.object.isRequired,
|
||||
onMonitorTogglePress: PropTypes.func.isRequired,
|
||||
onRefreshPress: PropTypes.func.isRequired,
|
||||
onSearchPress: PropTypes.func.isRequired,
|
||||
onGoToMovie: PropTypes.func.isRequired,
|
||||
queueItem: PropTypes.object,
|
||||
movieRuntimeFormat: PropTypes.string.isRequired
|
||||
};
|
||||
|
||||
MovieDetails.defaultProps = {
|
||||
genres: [],
|
||||
statistics: {},
|
||||
tags: [],
|
||||
isSaving: false
|
||||
};
|
||||
|
||||
export default MovieDetails;
|
||||
981
frontend/src/Movie/Details/MovieDetails.tsx
Normal file
981
frontend/src/Movie/Details/MovieDetails.tsx
Normal file
@@ -0,0 +1,981 @@
|
||||
import React, {
|
||||
useCallback,
|
||||
useEffect,
|
||||
useMemo,
|
||||
useRef,
|
||||
useState,
|
||||
} from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { useHistory } from 'react-router';
|
||||
import TextTruncate from 'react-text-truncate';
|
||||
import { createSelector } from 'reselect';
|
||||
import AppState from 'App/State/AppState';
|
||||
import * as commandNames from 'Commands/commandNames';
|
||||
import Alert from 'Components/Alert';
|
||||
import FieldSet from 'Components/FieldSet';
|
||||
import Icon from 'Components/Icon';
|
||||
import ImdbRating from 'Components/ImdbRating';
|
||||
import InfoLabel from 'Components/InfoLabel';
|
||||
import IconButton from 'Components/Link/IconButton';
|
||||
import Marquee from 'Components/Marquee';
|
||||
import MonitorToggleButton from 'Components/MonitorToggleButton';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
|
||||
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
|
||||
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
|
||||
import RottenTomatoRating from 'Components/RottenTomatoRating';
|
||||
import TmdbRating from 'Components/TmdbRating';
|
||||
import Popover from 'Components/Tooltip/Popover';
|
||||
import Tooltip from 'Components/Tooltip/Tooltip';
|
||||
import TraktRating from 'Components/TraktRating';
|
||||
import useMeasure from 'Helpers/Hooks/useMeasure';
|
||||
import usePrevious from 'Helpers/Hooks/usePrevious';
|
||||
import {
|
||||
icons,
|
||||
kinds,
|
||||
sizes,
|
||||
sortDirections,
|
||||
tooltipPositions,
|
||||
} from 'Helpers/Props';
|
||||
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
||||
import DeleteMovieModal from 'Movie/Delete/DeleteMovieModal';
|
||||
import EditMovieModal from 'Movie/Edit/EditMovieModal';
|
||||
import getMovieStatusDetails from 'Movie/getMovieStatusDetails';
|
||||
import MovieHistoryModal from 'Movie/History/MovieHistoryModal';
|
||||
import { Image, Statistics } from 'Movie/Movie';
|
||||
import MovieCollectionLabel from 'Movie/MovieCollectionLabel';
|
||||
import MovieGenres from 'Movie/MovieGenres';
|
||||
import MoviePoster from 'Movie/MoviePoster';
|
||||
import MovieInteractiveSearchModal from 'Movie/Search/MovieInteractiveSearchModal';
|
||||
import MovieFileEditorTable from 'MovieFile/Editor/MovieFileEditorTable';
|
||||
import ExtraFileTable from 'MovieFile/Extras/ExtraFileTable';
|
||||
import OrganizePreviewModal from 'Organize/OrganizePreviewModal';
|
||||
import QualityProfileName from 'Settings/Profiles/Quality/QualityProfileName';
|
||||
import { executeCommand } from 'Store/Actions/commandActions';
|
||||
import {
|
||||
clearExtraFiles,
|
||||
fetchExtraFiles,
|
||||
} from 'Store/Actions/extraFileActions';
|
||||
import { toggleMovieMonitored } from 'Store/Actions/movieActions';
|
||||
import {
|
||||
clearMovieCredits,
|
||||
fetchMovieCredits,
|
||||
} from 'Store/Actions/movieCreditsActions';
|
||||
import {
|
||||
clearMovieFiles,
|
||||
fetchMovieFiles,
|
||||
} from 'Store/Actions/movieFileActions';
|
||||
import {
|
||||
clearQueueDetails,
|
||||
fetchQueueDetails,
|
||||
} from 'Store/Actions/queueActions';
|
||||
import {
|
||||
cancelFetchReleases,
|
||||
clearReleases,
|
||||
} from 'Store/Actions/releaseActions';
|
||||
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
|
||||
import { fetchImportListSchema } from 'Store/Actions/Settings/importLists';
|
||||
import createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';
|
||||
import createCommandsSelector from 'Store/Selectors/createCommandsSelector';
|
||||
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
|
||||
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
|
||||
import fonts from 'Styles/Variables/fonts';
|
||||
import sortByProp from 'Utilities/Array/sortByProp';
|
||||
import { findCommand, isCommandExecuting } from 'Utilities/Command';
|
||||
import formatRuntime from 'Utilities/Date/formatRuntime';
|
||||
import getPathWithUrlBase from 'Utilities/getPathWithUrlBase';
|
||||
import formatBytes from 'Utilities/Number/formatBytes';
|
||||
import {
|
||||
registerPagePopulator,
|
||||
unregisterPagePopulator,
|
||||
} from 'Utilities/pagePopulator';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import MovieCastPosters from './Credits/Cast/MovieCastPosters';
|
||||
import MovieCrewPosters from './Credits/Crew/MovieCrewPosters';
|
||||
import MovieDetailsLinks from './MovieDetailsLinks';
|
||||
import MovieReleaseDates from './MovieReleaseDates';
|
||||
import MovieStatusLabel from './MovieStatusLabel';
|
||||
import MovieTags from './MovieTags';
|
||||
import MovieTitlesTable from './Titles/MovieTitlesTable';
|
||||
import styles from './MovieDetails.css';
|
||||
|
||||
const defaultFontSize = parseInt(fonts.defaultFontSize);
|
||||
const lineHeight = parseFloat(fonts.lineHeight);
|
||||
|
||||
function getFanartUrl(images: Image[]) {
|
||||
const image = images.find((image) => image.coverType === 'fanart');
|
||||
return image?.url ?? image?.remoteUrl;
|
||||
}
|
||||
|
||||
function createMovieFilesSelector() {
|
||||
return createSelector(
|
||||
(state: AppState) => state.movieFiles,
|
||||
({ items, isFetching, isPopulated, error }) => {
|
||||
const hasMovieFiles = !!items.length;
|
||||
|
||||
return {
|
||||
isMovieFilesFetching: isFetching,
|
||||
isMovieFilesPopulated: isPopulated,
|
||||
movieFilesError: error,
|
||||
hasMovieFiles,
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function createExtraFilesSelector() {
|
||||
return createSelector(
|
||||
(state: AppState) => state.extraFiles,
|
||||
({ isFetching, isPopulated, error }) => {
|
||||
return {
|
||||
isExtraFilesFetching: isFetching,
|
||||
isExtraFilesPopulated: isPopulated,
|
||||
extraFilesError: error,
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function createMovieCreditsSelector() {
|
||||
return createSelector(
|
||||
(state: AppState) => state.movieCredits,
|
||||
({ isFetching, isPopulated, error }) => {
|
||||
return {
|
||||
isMovieCreditsFetching: isFetching,
|
||||
isMovieCreditsPopulated: isPopulated,
|
||||
movieCreditsError: error,
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function createMovieSelector(movieId: number) {
|
||||
return createSelector(createAllMoviesSelector(), (allMovies) => {
|
||||
const sortedMovies = [...allMovies].sort(sortByProp('sortTitle'));
|
||||
const movieIndex = sortedMovies.findIndex((movie) => movie.id === movieId);
|
||||
|
||||
if (movieIndex === -1) {
|
||||
return {
|
||||
movie: undefined,
|
||||
nextMovie: undefined,
|
||||
previousMovie: undefined,
|
||||
};
|
||||
}
|
||||
|
||||
const movie = sortedMovies[movieIndex];
|
||||
const nextMovie = sortedMovies[movieIndex + 1] ?? sortedMovies[0];
|
||||
const previousMovie =
|
||||
sortedMovies[movieIndex - 1] ?? sortedMovies[sortedMovies.length - 1];
|
||||
|
||||
return {
|
||||
movie,
|
||||
nextMovie: {
|
||||
title: nextMovie.title,
|
||||
titleSlug: nextMovie.titleSlug,
|
||||
},
|
||||
previousMovie: {
|
||||
title: previousMovie.title,
|
||||
titleSlug: previousMovie.titleSlug,
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
interface MovieDetailsProps {
|
||||
movieId: number;
|
||||
}
|
||||
|
||||
function MovieDetails({ movieId }: MovieDetailsProps) {
|
||||
const dispatch = useDispatch();
|
||||
const history = useHistory();
|
||||
|
||||
const { movie, nextMovie, previousMovie } = useSelector(
|
||||
createMovieSelector(movieId)
|
||||
);
|
||||
const { isMovieFilesFetching, movieFilesError, hasMovieFiles } = useSelector(
|
||||
createMovieFilesSelector()
|
||||
);
|
||||
const { isExtraFilesFetching, extraFilesError } = useSelector(
|
||||
createExtraFilesSelector()
|
||||
);
|
||||
const { isMovieCreditsFetching, movieCreditsError } = useSelector(
|
||||
createMovieCreditsSelector()
|
||||
);
|
||||
const { movieRuntimeFormat } = useSelector(createUISettingsSelector());
|
||||
const isSidebarVisible = useSelector(
|
||||
(state: AppState) => state.app.isSidebarVisible
|
||||
);
|
||||
const { isSmallScreen } = useSelector(createDimensionsSelector());
|
||||
|
||||
const commands = useSelector(createCommandsSelector());
|
||||
|
||||
const { isRefreshing, isRenaming, isSearching } = useMemo(() => {
|
||||
const movieRefreshingCommand = findCommand(commands, {
|
||||
name: commandNames.REFRESH_MOVIE,
|
||||
});
|
||||
|
||||
const isMovieRefreshingCommandExecuting = isCommandExecuting(
|
||||
movieRefreshingCommand
|
||||
);
|
||||
|
||||
const allMoviesRefreshing =
|
||||
isMovieRefreshingCommandExecuting &&
|
||||
!movieRefreshingCommand?.body.movieIds?.length;
|
||||
|
||||
const isMovieRefreshing =
|
||||
isMovieRefreshingCommandExecuting &&
|
||||
movieRefreshingCommand?.body.movieIds?.includes(movieId);
|
||||
|
||||
const isSearchingExecuting = isCommandExecuting(
|
||||
findCommand(commands, {
|
||||
name: commandNames.MOVIE_SEARCH,
|
||||
movieIds: [movieId],
|
||||
})
|
||||
);
|
||||
|
||||
const isRenamingFiles = isCommandExecuting(
|
||||
findCommand(commands, {
|
||||
name: commandNames.RENAME_FILES,
|
||||
movieId,
|
||||
})
|
||||
);
|
||||
|
||||
const isRenamingMovieCommand = findCommand(commands, {
|
||||
name: commandNames.RENAME_MOVIE,
|
||||
});
|
||||
|
||||
const isRenamingMovie =
|
||||
isCommandExecuting(isRenamingMovieCommand) &&
|
||||
isRenamingMovieCommand?.body?.movieIds?.includes(movieId);
|
||||
|
||||
return {
|
||||
isRefreshing: isMovieRefreshing || allMoviesRefreshing,
|
||||
isRenaming: isRenamingFiles || isRenamingMovie,
|
||||
isSearching: isSearchingExecuting,
|
||||
};
|
||||
}, [movieId, commands]);
|
||||
|
||||
const touchStart = useRef<number | null>(null);
|
||||
const [isOrganizeModalOpen, setIsOrganizeModalOpen] = useState(false);
|
||||
const [isManageMoviesModalOpen, setIsManageMoviesModalOpen] = useState(false);
|
||||
const [isInteractiveSearchModalOpen, setIsInteractiveSearchModalOpen] =
|
||||
useState(false);
|
||||
const [isEditMovieModalOpen, setIsEditMovieModalOpen] = useState(false);
|
||||
const [isDeleteMovieModalOpen, setIsDeleteMovieModalOpen] = useState(false);
|
||||
const [isMovieHistoryModalOpen, setIsMovieHistoryModalOpen] = useState(false);
|
||||
const [titleRef, { width: titleWidth }] = useMeasure();
|
||||
const [overviewRef, { height: overviewHeight }] = useMeasure();
|
||||
const wasRefreshing = usePrevious(isRefreshing);
|
||||
const wasRenaming = usePrevious(isRenaming);
|
||||
|
||||
const handleOrganizePress = useCallback(() => {
|
||||
setIsOrganizeModalOpen(true);
|
||||
}, []);
|
||||
|
||||
const handleOrganizeModalClose = useCallback(() => {
|
||||
setIsOrganizeModalOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleManageMoviesPress = useCallback(() => {
|
||||
setIsManageMoviesModalOpen(true);
|
||||
}, []);
|
||||
|
||||
const handleManageMoviesModalClose = useCallback(() => {
|
||||
setIsManageMoviesModalOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleInteractiveSearchPress = useCallback(() => {
|
||||
setIsInteractiveSearchModalOpen(true);
|
||||
}, []);
|
||||
|
||||
const handleInteractiveSearchModalClose = useCallback(() => {
|
||||
setIsInteractiveSearchModalOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleEditMoviePress = useCallback(() => {
|
||||
setIsEditMovieModalOpen(true);
|
||||
}, []);
|
||||
|
||||
const handleEditMovieModalClose = useCallback(() => {
|
||||
setIsEditMovieModalOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleDeleteMoviePress = useCallback(() => {
|
||||
setIsEditMovieModalOpen(false);
|
||||
setIsDeleteMovieModalOpen(true);
|
||||
}, []);
|
||||
|
||||
const handleDeleteMovieModalClose = useCallback(() => {
|
||||
setIsDeleteMovieModalOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleMovieHistoryPress = useCallback(() => {
|
||||
setIsMovieHistoryModalOpen(true);
|
||||
}, []);
|
||||
|
||||
const handleMovieHistoryModalClose = useCallback(() => {
|
||||
setIsMovieHistoryModalOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleMonitorTogglePress = useCallback(
|
||||
(value: boolean) => {
|
||||
dispatch(
|
||||
toggleMovieMonitored({
|
||||
movieId,
|
||||
monitored: value,
|
||||
})
|
||||
);
|
||||
},
|
||||
[movieId, dispatch]
|
||||
);
|
||||
|
||||
const handleRefreshPress = useCallback(() => {
|
||||
dispatch(
|
||||
executeCommand({
|
||||
name: commandNames.REFRESH_MOVIE,
|
||||
movieIds: [movieId],
|
||||
})
|
||||
);
|
||||
}, [movieId, dispatch]);
|
||||
|
||||
const handleSearchPress = useCallback(() => {
|
||||
dispatch(
|
||||
executeCommand({
|
||||
name: commandNames.MOVIE_SEARCH,
|
||||
movieIds: [movieId],
|
||||
})
|
||||
);
|
||||
}, [movieId, dispatch]);
|
||||
|
||||
const handleTouchStart = useCallback(
|
||||
(event: TouchEvent) => {
|
||||
const touches = event.touches;
|
||||
const currentTouch = touches[0].pageX;
|
||||
const touchY = touches[0].pageY;
|
||||
|
||||
// Only change when swipe is on header, we need horizontal scroll on tables
|
||||
if (touchY > 470) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (touches.length !== 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
currentTouch < 50 ||
|
||||
isSidebarVisible ||
|
||||
isOrganizeModalOpen ||
|
||||
isEditMovieModalOpen ||
|
||||
isDeleteMovieModalOpen ||
|
||||
isManageMoviesModalOpen ||
|
||||
isInteractiveSearchModalOpen ||
|
||||
isMovieHistoryModalOpen
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
touchStart.current = currentTouch;
|
||||
},
|
||||
[
|
||||
isSidebarVisible,
|
||||
isOrganizeModalOpen,
|
||||
isEditMovieModalOpen,
|
||||
isDeleteMovieModalOpen,
|
||||
isManageMoviesModalOpen,
|
||||
isInteractiveSearchModalOpen,
|
||||
isMovieHistoryModalOpen,
|
||||
]
|
||||
);
|
||||
|
||||
const handleTouchEnd = useCallback(
|
||||
(event: TouchEvent) => {
|
||||
const touches = event.changedTouches;
|
||||
const currentTouch = touches[0].pageX;
|
||||
|
||||
if (!touchStart.current) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
currentTouch > touchStart.current &&
|
||||
currentTouch - touchStart.current > 100 &&
|
||||
previousMovie !== undefined
|
||||
) {
|
||||
history.push(getPathWithUrlBase(`/movie/${previousMovie.titleSlug}`));
|
||||
} else if (
|
||||
currentTouch < touchStart.current &&
|
||||
touchStart.current - currentTouch > 100 &&
|
||||
nextMovie !== undefined
|
||||
) {
|
||||
history.push(getPathWithUrlBase(`/movie/${nextMovie.titleSlug}`));
|
||||
}
|
||||
|
||||
touchStart.current = null;
|
||||
},
|
||||
[previousMovie, nextMovie, history]
|
||||
);
|
||||
|
||||
const handleTouchCancel = useCallback(() => {
|
||||
touchStart.current = null;
|
||||
}, []);
|
||||
|
||||
const handleTouchMove = useCallback(() => {
|
||||
if (!touchStart.current) {
|
||||
return;
|
||||
}
|
||||
}, []);
|
||||
|
||||
const handleKeyUp = useCallback(
|
||||
(event: KeyboardEvent) => {
|
||||
if (
|
||||
isOrganizeModalOpen ||
|
||||
isManageMoviesModalOpen ||
|
||||
isInteractiveSearchModalOpen ||
|
||||
isEditMovieModalOpen ||
|
||||
isDeleteMovieModalOpen ||
|
||||
isMovieHistoryModalOpen
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.composedPath && event.composedPath().length === 4) {
|
||||
if (event.key === 'ArrowLeft' && previousMovie !== undefined) {
|
||||
history.push(getPathWithUrlBase(`/movie/${previousMovie.titleSlug}`));
|
||||
}
|
||||
|
||||
if (event.key === 'ArrowRight' && nextMovie !== undefined) {
|
||||
history.push(getPathWithUrlBase(`/movie/${nextMovie.titleSlug}`));
|
||||
}
|
||||
}
|
||||
},
|
||||
[
|
||||
isOrganizeModalOpen,
|
||||
isManageMoviesModalOpen,
|
||||
isInteractiveSearchModalOpen,
|
||||
isEditMovieModalOpen,
|
||||
isDeleteMovieModalOpen,
|
||||
isMovieHistoryModalOpen,
|
||||
previousMovie,
|
||||
nextMovie,
|
||||
history,
|
||||
]
|
||||
);
|
||||
|
||||
const populate = useCallback(() => {
|
||||
dispatch(fetchMovieFiles({ movieId }));
|
||||
dispatch(fetchExtraFiles({ movieId }));
|
||||
dispatch(fetchMovieCredits({ movieId }));
|
||||
dispatch(fetchQueueDetails({ movieId }));
|
||||
dispatch(fetchImportListSchema());
|
||||
dispatch(fetchRootFolders());
|
||||
}, [movieId, dispatch]);
|
||||
|
||||
useEffect(() => {
|
||||
populate();
|
||||
}, [populate]);
|
||||
|
||||
useEffect(() => {
|
||||
registerPagePopulator(populate, ['movieUpdated']);
|
||||
|
||||
return () => {
|
||||
unregisterPagePopulator(populate);
|
||||
dispatch(clearMovieFiles());
|
||||
dispatch(clearExtraFiles());
|
||||
dispatch(clearMovieCredits());
|
||||
dispatch(clearQueueDetails());
|
||||
dispatch(cancelFetchReleases());
|
||||
dispatch(clearReleases());
|
||||
};
|
||||
}, [populate, dispatch]);
|
||||
|
||||
useEffect(() => {
|
||||
if ((!isRefreshing && wasRefreshing) || (!isRenaming && wasRenaming)) {
|
||||
populate();
|
||||
}
|
||||
}, [isRefreshing, wasRefreshing, isRenaming, wasRenaming, populate]);
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener('touchstart', handleTouchStart);
|
||||
window.addEventListener('touchend', handleTouchEnd);
|
||||
window.addEventListener('touchcancel', handleTouchCancel);
|
||||
window.addEventListener('touchmove', handleTouchMove);
|
||||
window.addEventListener('keyup', handleKeyUp);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('touchstart', handleTouchStart);
|
||||
window.removeEventListener('touchend', handleTouchEnd);
|
||||
window.removeEventListener('touchcancel', handleTouchCancel);
|
||||
window.removeEventListener('touchmove', handleTouchMove);
|
||||
window.removeEventListener('keyup', handleKeyUp);
|
||||
};
|
||||
}, [
|
||||
handleTouchStart,
|
||||
handleTouchEnd,
|
||||
handleTouchCancel,
|
||||
handleTouchMove,
|
||||
handleKeyUp,
|
||||
]);
|
||||
|
||||
if (!movie) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const {
|
||||
id,
|
||||
tmdbId,
|
||||
imdbId,
|
||||
title,
|
||||
originalTitle,
|
||||
year,
|
||||
inCinemas,
|
||||
physicalRelease,
|
||||
digitalRelease,
|
||||
runtime,
|
||||
certification,
|
||||
ratings,
|
||||
path,
|
||||
statistics = {} as Statistics,
|
||||
qualityProfileId,
|
||||
monitored,
|
||||
studio,
|
||||
originalLanguage,
|
||||
genres = [],
|
||||
collection,
|
||||
overview,
|
||||
status,
|
||||
youTubeTrailerId,
|
||||
isAvailable,
|
||||
images,
|
||||
tags,
|
||||
isSaving = false,
|
||||
} = movie;
|
||||
|
||||
const { sizeOnDisk = 0 } = statistics;
|
||||
|
||||
const statusDetails = getMovieStatusDetails(status);
|
||||
|
||||
const fanartUrl = getFanartUrl(images);
|
||||
const isFetching =
|
||||
isMovieFilesFetching || isExtraFilesFetching || isMovieCreditsFetching;
|
||||
|
||||
const marqueeWidth = isSmallScreen ? titleWidth : titleWidth - 150;
|
||||
|
||||
const titleWithYear = `${title}${year > 0 ? ` (${year})` : ''}`;
|
||||
|
||||
return (
|
||||
<PageContent title={titleWithYear}>
|
||||
<PageToolbar>
|
||||
<PageToolbarSection>
|
||||
<PageToolbarButton
|
||||
label={translate('RefreshAndScan')}
|
||||
iconName={icons.REFRESH}
|
||||
spinningName={icons.REFRESH}
|
||||
title={translate('RefreshInformationAndScanDisk')}
|
||||
isSpinning={isRefreshing}
|
||||
onPress={handleRefreshPress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('SearchMovie')}
|
||||
iconName={icons.SEARCH}
|
||||
isSpinning={isSearching}
|
||||
title={undefined}
|
||||
onPress={handleSearchPress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('InteractiveSearch')}
|
||||
iconName={icons.INTERACTIVE}
|
||||
isSpinning={isSearching}
|
||||
title={undefined}
|
||||
onPress={handleInteractiveSearchPress}
|
||||
/>
|
||||
|
||||
<PageToolbarSeparator />
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('PreviewRename')}
|
||||
iconName={icons.ORGANIZE}
|
||||
isDisabled={!hasMovieFiles}
|
||||
onPress={handleOrganizePress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('ManageFiles')}
|
||||
iconName={icons.MOVIE_FILE}
|
||||
onPress={handleManageMoviesPress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('History')}
|
||||
iconName={icons.HISTORY}
|
||||
onPress={handleMovieHistoryPress}
|
||||
/>
|
||||
|
||||
<PageToolbarSeparator />
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('Edit')}
|
||||
iconName={icons.EDIT}
|
||||
onPress={handleEditMoviePress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('Delete')}
|
||||
iconName={icons.DELETE}
|
||||
onPress={handleDeleteMoviePress}
|
||||
/>
|
||||
</PageToolbarSection>
|
||||
</PageToolbar>
|
||||
|
||||
<PageContentBody innerClassName={styles.innerContentBody}>
|
||||
<div className={styles.header}>
|
||||
<div
|
||||
className={styles.backdrop}
|
||||
style={
|
||||
fanartUrl ? { backgroundImage: `url(${fanartUrl})` } : undefined
|
||||
}
|
||||
>
|
||||
<div className={styles.backdropOverlay} />
|
||||
</div>
|
||||
|
||||
<div className={styles.headerContent}>
|
||||
<MoviePoster
|
||||
className={styles.poster}
|
||||
images={images}
|
||||
size={500}
|
||||
lazy={false}
|
||||
/>
|
||||
|
||||
<div className={styles.info}>
|
||||
<div ref={titleRef} className={styles.titleRow}>
|
||||
<div className={styles.titleContainer}>
|
||||
<div className={styles.toggleMonitoredContainer}>
|
||||
<MonitorToggleButton
|
||||
className={styles.monitorToggleButton}
|
||||
monitored={monitored}
|
||||
isSaving={isSaving}
|
||||
size={40}
|
||||
onPress={handleMonitorTogglePress}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className={styles.title} style={{ width: marqueeWidth }}>
|
||||
<Marquee text={title} title={originalTitle} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.movieNavigationButtons}>
|
||||
<IconButton
|
||||
className={styles.movieNavigationButton}
|
||||
name={icons.ARROW_LEFT}
|
||||
size={30}
|
||||
title={translate('MovieDetailsGoTo', {
|
||||
title: previousMovie.title,
|
||||
})}
|
||||
to={`/movie/${previousMovie.titleSlug}`}
|
||||
/>
|
||||
|
||||
<IconButton
|
||||
className={styles.movieNavigationButton}
|
||||
name={icons.ARROW_RIGHT}
|
||||
size={30}
|
||||
title={translate('MovieDetailsGoTo', {
|
||||
title: nextMovie.title,
|
||||
})}
|
||||
to={`/movie/${nextMovie.titleSlug}`}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.details}>
|
||||
<div>
|
||||
{certification ? (
|
||||
<span
|
||||
className={styles.certification}
|
||||
title={translate('Certification')}
|
||||
>
|
||||
{certification}
|
||||
</span>
|
||||
) : null}
|
||||
|
||||
<span className={styles.year}>
|
||||
<Popover
|
||||
anchor={
|
||||
year > 0 ? (
|
||||
year
|
||||
) : (
|
||||
<Icon
|
||||
name={icons.WARNING}
|
||||
kind={kinds.WARNING}
|
||||
size={20}
|
||||
/>
|
||||
)
|
||||
}
|
||||
title={translate('ReleaseDates')}
|
||||
body={
|
||||
<MovieReleaseDates
|
||||
tmdbId={tmdbId}
|
||||
inCinemas={inCinemas}
|
||||
digitalRelease={digitalRelease}
|
||||
physicalRelease={physicalRelease}
|
||||
/>
|
||||
}
|
||||
position={tooltipPositions.BOTTOM}
|
||||
/>
|
||||
</span>
|
||||
|
||||
{runtime ? (
|
||||
<span
|
||||
className={styles.runtime}
|
||||
title={translate('Runtime')}
|
||||
>
|
||||
{formatRuntime(runtime, movieRuntimeFormat)}
|
||||
</span>
|
||||
) : null}
|
||||
|
||||
<span className={styles.links}>
|
||||
<Tooltip
|
||||
anchor={<Icon name={icons.EXTERNAL_LINK} size={20} />}
|
||||
tooltip={
|
||||
<MovieDetailsLinks
|
||||
tmdbId={tmdbId}
|
||||
imdbId={imdbId}
|
||||
youTubeTrailerId={youTubeTrailerId}
|
||||
/>
|
||||
}
|
||||
position={tooltipPositions.BOTTOM}
|
||||
/>
|
||||
</span>
|
||||
|
||||
{!!tags.length && (
|
||||
<span>
|
||||
<Tooltip
|
||||
anchor={<Icon name={icons.TAGS} size={20} />}
|
||||
tooltip={<MovieTags movieId={id} />}
|
||||
position={tooltipPositions.BOTTOM}
|
||||
/>
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.details}>
|
||||
{ratings.tmdb ? (
|
||||
<span className={styles.rating}>
|
||||
<TmdbRating ratings={ratings} iconSize={20} />
|
||||
</span>
|
||||
) : null}
|
||||
{ratings.imdb ? (
|
||||
<span className={styles.rating}>
|
||||
<ImdbRating ratings={ratings} iconSize={20} />
|
||||
</span>
|
||||
) : null}
|
||||
{ratings.rottenTomatoes ? (
|
||||
<span className={styles.rating}>
|
||||
<RottenTomatoRating ratings={ratings} iconSize={20} />
|
||||
</span>
|
||||
) : null}
|
||||
{ratings.trakt ? (
|
||||
<span className={styles.rating}>
|
||||
<TraktRating ratings={ratings} iconSize={20} />
|
||||
</span>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Path')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.path}>{path}</span>
|
||||
</InfoLabel>
|
||||
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Status')}
|
||||
title={statusDetails.message}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.statusName}>
|
||||
<MovieStatusLabel
|
||||
movieId={id}
|
||||
monitored={monitored}
|
||||
isAvailable={isAvailable}
|
||||
hasMovieFiles={hasMovieFiles}
|
||||
status={status}
|
||||
/>
|
||||
</span>
|
||||
</InfoLabel>
|
||||
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('QualityProfile')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.qualityProfileName}>
|
||||
<QualityProfileName qualityProfileId={qualityProfileId} />
|
||||
</span>
|
||||
</InfoLabel>
|
||||
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Size')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.sizeOnDisk}>
|
||||
{formatBytes(sizeOnDisk)}
|
||||
</span>
|
||||
</InfoLabel>
|
||||
|
||||
{collection ? (
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Collection')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<div className={styles.collection}>
|
||||
<MovieCollectionLabel tmdbId={collection.tmdbId} />
|
||||
</div>
|
||||
</InfoLabel>
|
||||
) : null}
|
||||
|
||||
{originalLanguage?.name && !isSmallScreen ? (
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('OriginalLanguage')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.originalLanguage}>
|
||||
{originalLanguage.name}
|
||||
</span>
|
||||
</InfoLabel>
|
||||
) : null}
|
||||
|
||||
{studio && !isSmallScreen ? (
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Studio')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<span className={styles.studio}>{studio}</span>
|
||||
</InfoLabel>
|
||||
) : null}
|
||||
|
||||
{genres.length && !isSmallScreen ? (
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
name={translate('Genres')}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
<MovieGenres className={styles.genres} genres={genres} />
|
||||
</InfoLabel>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
<div ref={overviewRef} className={styles.overview}>
|
||||
<TextTruncate
|
||||
line={Math.floor(
|
||||
overviewHeight / (defaultFontSize * lineHeight)
|
||||
)}
|
||||
text={overview}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.contentContainer}>
|
||||
{!isFetching && movieFilesError ? (
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('LoadingMovieFilesFailed')}
|
||||
</Alert>
|
||||
) : null}
|
||||
|
||||
{!isFetching && extraFilesError ? (
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('LoadingMovieExtraFilesFailed')}
|
||||
</Alert>
|
||||
) : null}
|
||||
|
||||
{!isFetching && movieCreditsError ? (
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('LoadingMovieCreditsFailed')}
|
||||
</Alert>
|
||||
) : null}
|
||||
|
||||
<FieldSet legend={translate('Files')}>
|
||||
<MovieFileEditorTable movieId={id} />
|
||||
|
||||
<ExtraFileTable movieId={id} />
|
||||
</FieldSet>
|
||||
|
||||
<FieldSet legend={translate('Cast')}>
|
||||
<MovieCastPosters isSmallScreen={isSmallScreen} />
|
||||
</FieldSet>
|
||||
|
||||
<FieldSet legend={translate('Crew')}>
|
||||
<MovieCrewPosters isSmallScreen={isSmallScreen} />
|
||||
</FieldSet>
|
||||
|
||||
<FieldSet legend={translate('Titles')}>
|
||||
<MovieTitlesTable movieId={id} />
|
||||
</FieldSet>
|
||||
</div>
|
||||
|
||||
<OrganizePreviewModal
|
||||
isOpen={isOrganizeModalOpen}
|
||||
movieId={id}
|
||||
onModalClose={handleOrganizeModalClose}
|
||||
/>
|
||||
|
||||
<EditMovieModal
|
||||
isOpen={isEditMovieModalOpen}
|
||||
movieId={id}
|
||||
onModalClose={handleEditMovieModalClose}
|
||||
onDeleteMoviePress={handleDeleteMoviePress}
|
||||
/>
|
||||
|
||||
<MovieHistoryModal
|
||||
isOpen={isMovieHistoryModalOpen}
|
||||
movieId={id}
|
||||
onModalClose={handleMovieHistoryModalClose}
|
||||
/>
|
||||
|
||||
<DeleteMovieModal
|
||||
isOpen={isDeleteMovieModalOpen}
|
||||
movieId={id}
|
||||
onModalClose={handleDeleteMovieModalClose}
|
||||
/>
|
||||
|
||||
<InteractiveImportModal
|
||||
isOpen={isManageMoviesModalOpen}
|
||||
movieId={id}
|
||||
title={title}
|
||||
folder={path}
|
||||
initialSortKey="relativePath"
|
||||
initialSortDirection={sortDirections.ASCENDING}
|
||||
showMovie={false}
|
||||
allowMovieChange={false}
|
||||
showDelete={true}
|
||||
showImportMode={false}
|
||||
modalTitle={translate('ManageFiles')}
|
||||
onModalClose={handleManageMoviesModalClose}
|
||||
/>
|
||||
|
||||
<MovieInteractiveSearchModal
|
||||
isOpen={isInteractiveSearchModalOpen}
|
||||
movieId={id}
|
||||
movieTitle={title}
|
||||
onModalClose={handleInteractiveSearchModalClose}
|
||||
/>
|
||||
</PageContentBody>
|
||||
</PageContent>
|
||||
);
|
||||
}
|
||||
|
||||
export default MovieDetails;
|
||||
@@ -1,334 +0,0 @@
|
||||
import { push } from 'connected-react-router';
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import * as commandNames from 'Commands/commandNames';
|
||||
import { executeCommand } from 'Store/Actions/commandActions';
|
||||
import { clearExtraFiles, fetchExtraFiles } from 'Store/Actions/extraFileActions';
|
||||
import { toggleMovieMonitored } from 'Store/Actions/movieActions';
|
||||
import { clearMovieCredits, fetchMovieCredits } from 'Store/Actions/movieCreditsActions';
|
||||
import { clearMovieFiles, fetchMovieFiles } from 'Store/Actions/movieFileActions';
|
||||
import { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';
|
||||
import { fetchImportListSchema } from 'Store/Actions/settingsActions';
|
||||
import createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';
|
||||
import createCommandsSelector from 'Store/Selectors/createCommandsSelector';
|
||||
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
|
||||
import { findCommand, isCommandExecuting } from 'Utilities/Command';
|
||||
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
|
||||
import MovieDetails from './MovieDetails';
|
||||
|
||||
const selectMovieFiles = createSelector(
|
||||
(state) => state.movieFiles,
|
||||
(movieFiles) => {
|
||||
const {
|
||||
items,
|
||||
isFetching,
|
||||
isPopulated,
|
||||
error
|
||||
} = movieFiles;
|
||||
|
||||
const hasMovieFiles = !!items.length;
|
||||
|
||||
return {
|
||||
isMovieFilesFetching: isFetching,
|
||||
isMovieFilesPopulated: isPopulated,
|
||||
movieFilesError: error,
|
||||
hasMovieFiles
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
const selectMovieCredits = createSelector(
|
||||
(state) => state.movieCredits,
|
||||
(movieCredits) => {
|
||||
const {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
error
|
||||
} = movieCredits;
|
||||
|
||||
return {
|
||||
isMovieCreditsFetching: isFetching,
|
||||
isMovieCreditsPopulated: isPopulated,
|
||||
movieCreditsError: error
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
const selectExtraFiles = createSelector(
|
||||
(state) => state.extraFiles,
|
||||
(extraFiles) => {
|
||||
const {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
error
|
||||
} = extraFiles;
|
||||
|
||||
return {
|
||||
isExtraFilesFetching: isFetching,
|
||||
isExtraFilesPopulated: isPopulated,
|
||||
extraFilesError: error
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
(state, { titleSlug }) => titleSlug,
|
||||
selectMovieFiles,
|
||||
selectMovieCredits,
|
||||
selectExtraFiles,
|
||||
createAllMoviesSelector(),
|
||||
createCommandsSelector(),
|
||||
createDimensionsSelector(),
|
||||
(state) => state.queue.details.items,
|
||||
(state) => state.app.isSidebarVisible,
|
||||
(state) => state.settings.ui.item.movieRuntimeFormat,
|
||||
(titleSlug, movieFiles, movieCredits, extraFiles, allMovies, commands, dimensions, queueItems, isSidebarVisible, movieRuntimeFormat) => {
|
||||
const sortedMovies = _.orderBy(allMovies, 'sortTitle');
|
||||
const movieIndex = _.findIndex(sortedMovies, { titleSlug });
|
||||
const movie = sortedMovies[movieIndex];
|
||||
|
||||
if (!movie) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const {
|
||||
isMovieFilesFetching,
|
||||
isMovieFilesPopulated,
|
||||
movieFilesError,
|
||||
hasMovieFiles
|
||||
} = movieFiles;
|
||||
|
||||
const {
|
||||
isMovieCreditsFetching,
|
||||
isMovieCreditsPopulated,
|
||||
movieCreditsError
|
||||
} = movieCredits;
|
||||
|
||||
const {
|
||||
isExtraFilesFetching,
|
||||
isExtraFilesPopulated,
|
||||
extraFilesError
|
||||
} = extraFiles;
|
||||
|
||||
const previousMovie = sortedMovies[movieIndex - 1] || _.last(sortedMovies);
|
||||
const nextMovie = sortedMovies[movieIndex + 1] || _.first(sortedMovies);
|
||||
const isMovieRefreshing = isCommandExecuting(findCommand(commands, { name: commandNames.REFRESH_MOVIE, movieIds: [movie.id] }));
|
||||
const movieRefreshingCommand = findCommand(commands, { name: commandNames.REFRESH_MOVIE });
|
||||
const allMoviesRefreshing = (
|
||||
isCommandExecuting(movieRefreshingCommand) &&
|
||||
!movieRefreshingCommand.body.movieId
|
||||
);
|
||||
const isRefreshing = isMovieRefreshing || allMoviesRefreshing;
|
||||
const isSearching = isCommandExecuting(findCommand(commands, { name: commandNames.MOVIE_SEARCH, movieIds: [movie.id] }));
|
||||
const isRenamingFiles = isCommandExecuting(findCommand(commands, { name: commandNames.RENAME_FILES, movieId: movie.id }));
|
||||
const isRenamingMovieCommand = findCommand(commands, { name: commandNames.RENAME_MOVIE });
|
||||
const isRenamingMovie = (
|
||||
isCommandExecuting(isRenamingMovieCommand) &&
|
||||
isRenamingMovieCommand.body.movieIds.indexOf(movie.id) > -1
|
||||
);
|
||||
|
||||
const isFetching = isMovieFilesFetching || isMovieCreditsFetching || isExtraFilesFetching;
|
||||
const isPopulated = isMovieFilesPopulated && isMovieCreditsPopulated && isExtraFilesPopulated;
|
||||
const alternateTitles = _.reduce(movie.alternateTitles, (acc, alternateTitle) => {
|
||||
acc.push(alternateTitle.title);
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
const queueItem = queueItems.find((item) => item.movieId === movie.id);
|
||||
|
||||
return {
|
||||
...movie,
|
||||
alternateTitles,
|
||||
isMovieRefreshing,
|
||||
allMoviesRefreshing,
|
||||
isRefreshing,
|
||||
isSearching,
|
||||
isRenamingFiles,
|
||||
isRenamingMovie,
|
||||
isFetching,
|
||||
isPopulated,
|
||||
movieFilesError,
|
||||
movieCreditsError,
|
||||
extraFilesError,
|
||||
hasMovieFiles,
|
||||
previousMovie,
|
||||
nextMovie,
|
||||
isSmallScreen: dimensions.isSmallScreen,
|
||||
isSidebarVisible,
|
||||
queueItem,
|
||||
movieRuntimeFormat
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function createMapDispatchToProps(dispatch, props) {
|
||||
return {
|
||||
dispatchFetchMovieFiles({ movieId }) {
|
||||
dispatch(fetchMovieFiles({ movieId }));
|
||||
},
|
||||
dispatchClearMovieFiles() {
|
||||
dispatch(clearMovieFiles());
|
||||
},
|
||||
dispatchFetchMovieCredits({ movieId }) {
|
||||
dispatch(fetchMovieCredits({ movieId }));
|
||||
},
|
||||
dispatchClearMovieCredits() {
|
||||
dispatch(clearMovieCredits());
|
||||
},
|
||||
dispatchFetchExtraFiles({ movieId }) {
|
||||
dispatch(fetchExtraFiles({ movieId }));
|
||||
},
|
||||
dispatchClearExtraFiles() {
|
||||
dispatch(clearExtraFiles());
|
||||
},
|
||||
dispatchFetchQueueDetails({ movieId }) {
|
||||
dispatch(fetchQueueDetails({ movieId }));
|
||||
},
|
||||
dispatchClearQueueDetails() {
|
||||
dispatch(clearQueueDetails());
|
||||
},
|
||||
dispatchFetchImportListSchema() {
|
||||
dispatch(fetchImportListSchema());
|
||||
},
|
||||
dispatchToggleMovieMonitored(payload) {
|
||||
dispatch(toggleMovieMonitored(payload));
|
||||
},
|
||||
dispatchExecuteCommand(payload) {
|
||||
dispatch(executeCommand(payload));
|
||||
},
|
||||
onGoToMovie(titleSlug) {
|
||||
dispatch(push(`${window.Radarr.urlBase}/movie/${titleSlug}`));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
class MovieDetailsConnector extends Component {
|
||||
|
||||
//
|
||||
// Lifecycle
|
||||
|
||||
componentDidMount() {
|
||||
registerPagePopulator(this.populate, ['movieUpdated']);
|
||||
this.populate();
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
const {
|
||||
id,
|
||||
isMovieRefreshing,
|
||||
allMoviesRefreshing,
|
||||
isRenamingFiles,
|
||||
isRenamingMovie
|
||||
} = this.props;
|
||||
|
||||
if (
|
||||
(prevProps.isMovieRefreshing && !isMovieRefreshing) ||
|
||||
(prevProps.allMoviesRefreshing && !allMoviesRefreshing) ||
|
||||
(prevProps.isRenamingFiles && !isRenamingFiles) ||
|
||||
(prevProps.isRenamingMovie && !isRenamingMovie)
|
||||
) {
|
||||
this.populate();
|
||||
}
|
||||
|
||||
// If the id has changed we need to clear the episodes/episode
|
||||
// files and fetch from the server.
|
||||
|
||||
if (prevProps.id !== id) {
|
||||
this.unpopulate();
|
||||
this.populate();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
unregisterPagePopulator(this.populate);
|
||||
this.unpopulate();
|
||||
}
|
||||
|
||||
//
|
||||
// Control
|
||||
|
||||
populate = () => {
|
||||
const movieId = this.props.id;
|
||||
|
||||
this.props.dispatchFetchMovieFiles({ movieId });
|
||||
this.props.dispatchFetchExtraFiles({ movieId });
|
||||
this.props.dispatchFetchMovieCredits({ movieId });
|
||||
this.props.dispatchFetchQueueDetails({ movieId });
|
||||
this.props.dispatchFetchImportListSchema();
|
||||
};
|
||||
|
||||
unpopulate = () => {
|
||||
this.props.dispatchClearMovieFiles();
|
||||
this.props.dispatchClearExtraFiles();
|
||||
this.props.dispatchClearMovieCredits();
|
||||
this.props.dispatchClearQueueDetails();
|
||||
};
|
||||
|
||||
//
|
||||
// Listeners
|
||||
|
||||
onMonitorTogglePress = (monitored) => {
|
||||
this.props.dispatchToggleMovieMonitored({
|
||||
movieId: this.props.id,
|
||||
monitored
|
||||
});
|
||||
};
|
||||
|
||||
onRefreshPress = () => {
|
||||
this.props.dispatchExecuteCommand({
|
||||
name: commandNames.REFRESH_MOVIE,
|
||||
movieIds: [this.props.id]
|
||||
});
|
||||
};
|
||||
|
||||
onSearchPress = () => {
|
||||
this.props.dispatchExecuteCommand({
|
||||
name: commandNames.MOVIE_SEARCH,
|
||||
movieIds: [this.props.id]
|
||||
});
|
||||
};
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
return (
|
||||
<MovieDetails
|
||||
{...this.props}
|
||||
onMonitorTogglePress={this.onMonitorTogglePress}
|
||||
onRefreshPress={this.onRefreshPress}
|
||||
onSearchPress={this.onSearchPress}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
MovieDetailsConnector.propTypes = {
|
||||
id: PropTypes.number.isRequired,
|
||||
titleSlug: PropTypes.string.isRequired,
|
||||
isMovieRefreshing: PropTypes.bool.isRequired,
|
||||
allMoviesRefreshing: PropTypes.bool.isRequired,
|
||||
isRefreshing: PropTypes.bool.isRequired,
|
||||
isRenamingFiles: PropTypes.bool.isRequired,
|
||||
isRenamingMovie: PropTypes.bool.isRequired,
|
||||
isSmallScreen: PropTypes.bool.isRequired,
|
||||
dispatchFetchMovieFiles: PropTypes.func.isRequired,
|
||||
dispatchClearMovieFiles: PropTypes.func.isRequired,
|
||||
dispatchFetchExtraFiles: PropTypes.func.isRequired,
|
||||
dispatchClearExtraFiles: PropTypes.func.isRequired,
|
||||
dispatchFetchMovieCredits: PropTypes.func.isRequired,
|
||||
dispatchClearMovieCredits: PropTypes.func.isRequired,
|
||||
dispatchToggleMovieMonitored: PropTypes.func.isRequired,
|
||||
dispatchFetchQueueDetails: PropTypes.func.isRequired,
|
||||
dispatchClearQueueDetails: PropTypes.func.isRequired,
|
||||
dispatchFetchImportListSchema: PropTypes.func.isRequired,
|
||||
dispatchExecuteCommand: PropTypes.func.isRequired,
|
||||
onGoToMovie: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default connect(createMapStateToProps, createMapDispatchToProps)(MovieDetailsConnector);
|
||||
39
frontend/src/Movie/Details/MovieDetailsPage.tsx
Normal file
39
frontend/src/Movie/Details/MovieDetailsPage.tsx
Normal file
@@ -0,0 +1,39 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useParams } from 'react-router';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import NotFound from 'Components/NotFound';
|
||||
import usePrevious from 'Helpers/Hooks/usePrevious';
|
||||
import createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import MovieDetails from './MovieDetails';
|
||||
|
||||
function MovieDetailsPage() {
|
||||
const allMovies = useSelector(createAllMoviesSelector());
|
||||
const { titleSlug } = useParams<{ titleSlug: string }>();
|
||||
const history = useHistory();
|
||||
|
||||
const movieIndex = allMovies.findIndex(
|
||||
(movie) => movie.titleSlug === titleSlug
|
||||
);
|
||||
|
||||
const previousIndex = usePrevious(movieIndex);
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
movieIndex === -1 &&
|
||||
previousIndex !== -1 &&
|
||||
previousIndex !== undefined
|
||||
) {
|
||||
history.push(`${window.Radarr.urlBase}/`);
|
||||
}
|
||||
}, [movieIndex, previousIndex, history]);
|
||||
|
||||
if (movieIndex === -1) {
|
||||
return <NotFound message={translate('MovieCannotBeFound')} />;
|
||||
}
|
||||
|
||||
return <MovieDetails movieId={allMovies[movieIndex].id} />;
|
||||
}
|
||||
|
||||
export default MovieDetailsPage;
|
||||
@@ -1,125 +0,0 @@
|
||||
import { push } from 'connected-react-router';
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import NotFound from 'Components/NotFound';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
|
||||
import getErrorMessage from 'Utilities/Object/getErrorMessage';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import MovieDetailsConnector from './MovieDetailsConnector';
|
||||
import styles from './MovieDetails.css';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
(state, { match }) => match,
|
||||
(state) => state.movies,
|
||||
(match, movies) => {
|
||||
const titleSlug = match.params.titleSlug;
|
||||
const {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
error,
|
||||
items
|
||||
} = movies;
|
||||
|
||||
const movieIndex = _.findIndex(items, { titleSlug });
|
||||
|
||||
if (movieIndex > -1) {
|
||||
return {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
titleSlug
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
error
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const mapDispatchToProps = {
|
||||
push,
|
||||
fetchRootFolders
|
||||
};
|
||||
|
||||
class MovieDetailsPageConnector extends Component {
|
||||
|
||||
//
|
||||
// Lifecycle
|
||||
|
||||
componentDidMount() {
|
||||
this.props.fetchRootFolders();
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
if (!this.props.titleSlug) {
|
||||
this.props.push(`${window.Radarr.urlBase}/`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
const {
|
||||
titleSlug,
|
||||
isFetching,
|
||||
isPopulated,
|
||||
error
|
||||
} = this.props;
|
||||
|
||||
if (isFetching && !isPopulated) {
|
||||
return (
|
||||
<PageContent title={translate('Loading')}>
|
||||
<PageContentBody>
|
||||
<LoadingIndicator />
|
||||
</PageContentBody>
|
||||
</PageContent>
|
||||
);
|
||||
}
|
||||
|
||||
if (!isFetching && !!error) {
|
||||
return (
|
||||
<div className={styles.errorMessage}>
|
||||
{getErrorMessage(error, translate('FailedToLoadMovieFromAPI'))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (!titleSlug) {
|
||||
return (
|
||||
<NotFound
|
||||
message={translate('SorryThatMovieCannotBeFound')}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<MovieDetailsConnector
|
||||
titleSlug={titleSlug}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
MovieDetailsPageConnector.propTypes = {
|
||||
titleSlug: PropTypes.string,
|
||||
isFetching: PropTypes.bool.isRequired,
|
||||
isPopulated: PropTypes.bool.isRequired,
|
||||
error: PropTypes.object,
|
||||
match: PropTypes.shape({ params: PropTypes.shape({ titleSlug: PropTypes.string.isRequired }).isRequired }).isRequired,
|
||||
push: PropTypes.func.isRequired,
|
||||
fetchRootFolders: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default connect(createMapStateToProps, mapDispatchToProps)(MovieDetailsPageConnector);
|
||||
@@ -1,13 +1,23 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import Label from 'Components/Label';
|
||||
import { kinds, sizes } from 'Helpers/Props';
|
||||
import { Kind } from 'Helpers/Props/kinds';
|
||||
import { MovieStatus } from 'Movie/Movie';
|
||||
import { createQueueItemSelectorForHook } from 'Store/Selectors/createQueueItemSelector';
|
||||
import Queue from 'typings/Queue';
|
||||
import getQueueStatusText from 'Utilities/Movie/getQueueStatusText';
|
||||
import firstCharToUpper from 'Utilities/String/firstCharToUpper';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './MovieStatusLabel.css';
|
||||
|
||||
function getMovieStatus(status, hasFile, isMonitored, isAvailable, queueItem = false) {
|
||||
function getMovieStatus(
|
||||
status: MovieStatus,
|
||||
isMonitored: boolean,
|
||||
isAvailable: boolean,
|
||||
hasFiles: boolean,
|
||||
queueItem: Queue | null = null
|
||||
) {
|
||||
if (queueItem) {
|
||||
const queueStatus = queueItem.status;
|
||||
const queueState = queueItem.trackedDownloadStatus;
|
||||
@@ -18,11 +28,11 @@ function getMovieStatus(status, hasFile, isMonitored, isAvailable, queueItem = f
|
||||
}
|
||||
}
|
||||
|
||||
if (hasFile && !isMonitored) {
|
||||
if (hasFiles && !isMonitored) {
|
||||
return 'availNotMonitored';
|
||||
}
|
||||
|
||||
if (hasFile) {
|
||||
if (hasFiles) {
|
||||
return 'ended';
|
||||
}
|
||||
|
||||
@@ -30,34 +40,52 @@ function getMovieStatus(status, hasFile, isMonitored, isAvailable, queueItem = f
|
||||
return 'deleted';
|
||||
}
|
||||
|
||||
if (isAvailable && !isMonitored && !hasFile) {
|
||||
if (isAvailable && !isMonitored && !hasFiles) {
|
||||
return 'missingUnmonitored';
|
||||
}
|
||||
|
||||
if (isAvailable && !hasFile) {
|
||||
if (isAvailable && !hasFiles) {
|
||||
return 'missingMonitored';
|
||||
}
|
||||
|
||||
return 'continuing';
|
||||
}
|
||||
|
||||
function MovieStatusLabel(props) {
|
||||
const {
|
||||
interface MovieStatusLabelProps {
|
||||
movieId: number;
|
||||
monitored: boolean;
|
||||
isAvailable: boolean;
|
||||
hasMovieFiles: boolean;
|
||||
status: MovieStatus;
|
||||
useLabel?: boolean;
|
||||
}
|
||||
|
||||
function MovieStatusLabel({
|
||||
movieId,
|
||||
monitored,
|
||||
isAvailable,
|
||||
hasMovieFiles,
|
||||
status,
|
||||
useLabel = false,
|
||||
}: MovieStatusLabelProps) {
|
||||
const queueItem = useSelector(createQueueItemSelectorForHook(movieId));
|
||||
|
||||
let movieStatus = getMovieStatus(
|
||||
status,
|
||||
hasMovieFiles,
|
||||
monitored,
|
||||
isAvailable,
|
||||
queueItem,
|
||||
useLabel,
|
||||
colorImpairedMode
|
||||
} = props;
|
||||
hasMovieFiles,
|
||||
queueItem
|
||||
);
|
||||
|
||||
let movieStatus = getMovieStatus(status, hasMovieFiles, monitored, isAvailable, queueItem);
|
||||
let statusClass = movieStatus;
|
||||
|
||||
if (movieStatus === 'availNotMonitored' || movieStatus === 'ended') {
|
||||
movieStatus = 'downloaded';
|
||||
} else if (movieStatus === 'missingMonitored' || movieStatus === 'missingUnmonitored') {
|
||||
} else if (
|
||||
movieStatus === 'missingMonitored' ||
|
||||
movieStatus === 'missingUnmonitored'
|
||||
) {
|
||||
movieStatus = 'missing';
|
||||
} else if (movieStatus === 'continuing') {
|
||||
movieStatus = 'notAvailable';
|
||||
@@ -68,7 +96,7 @@ function MovieStatusLabel(props) {
|
||||
}
|
||||
|
||||
if (useLabel) {
|
||||
let kind = kinds.SUCCESS;
|
||||
let kind: Kind = kinds.SUCCESS;
|
||||
|
||||
switch (statusClass) {
|
||||
case 'queue':
|
||||
@@ -93,11 +121,7 @@ function MovieStatusLabel(props) {
|
||||
}
|
||||
|
||||
return (
|
||||
<Label
|
||||
kind={kind}
|
||||
size={sizes.LARGE}
|
||||
colorImpairedMode={colorImpairedMode}
|
||||
>
|
||||
<Label kind={kind} size={sizes.LARGE}>
|
||||
{translate(firstCharToUpper(movieStatus))}
|
||||
</Label>
|
||||
);
|
||||
@@ -105,6 +129,8 @@ function MovieStatusLabel(props) {
|
||||
|
||||
return (
|
||||
<span
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
className={styles[statusClass]}
|
||||
>
|
||||
{translate(firstCharToUpper(movieStatus))}
|
||||
@@ -112,19 +138,4 @@ function MovieStatusLabel(props) {
|
||||
);
|
||||
}
|
||||
|
||||
MovieStatusLabel.propTypes = {
|
||||
status: PropTypes.string.isRequired,
|
||||
hasMovieFiles: PropTypes.bool.isRequired,
|
||||
monitored: PropTypes.bool.isRequired,
|
||||
isAvailable: PropTypes.bool.isRequired,
|
||||
queueItem: PropTypes.object,
|
||||
useLabel: PropTypes.bool,
|
||||
colorImpairedMode: PropTypes.bool
|
||||
};
|
||||
|
||||
MovieStatusLabel.defaultProps = {
|
||||
useLabel: false,
|
||||
colorImpairedMode: false
|
||||
};
|
||||
|
||||
export default MovieStatusLabel;
|
||||
@@ -1,30 +0,0 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import Label from 'Components/Label';
|
||||
import { kinds, sizes } from 'Helpers/Props';
|
||||
|
||||
function MovieTags({ tags }) {
|
||||
return (
|
||||
<div>
|
||||
{
|
||||
tags.map((tag) => {
|
||||
return (
|
||||
<Label
|
||||
key={tag}
|
||||
kind={kinds.INFO}
|
||||
size={sizes.LARGE}
|
||||
>
|
||||
{tag}
|
||||
</Label>
|
||||
);
|
||||
})
|
||||
}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
MovieTags.propTypes = {
|
||||
tags: PropTypes.arrayOf(PropTypes.string).isRequired
|
||||
};
|
||||
|
||||
export default MovieTags;
|
||||
35
frontend/src/Movie/Details/MovieTags.tsx
Normal file
35
frontend/src/Movie/Details/MovieTags.tsx
Normal file
@@ -0,0 +1,35 @@
|
||||
import React from 'react';
|
||||
import Label from 'Components/Label';
|
||||
import { kinds, sizes } from 'Helpers/Props';
|
||||
import useMovie from 'Movie/useMovie';
|
||||
import useTags from 'Tags/useTags';
|
||||
import sortByProp from 'Utilities/Array/sortByProp';
|
||||
|
||||
interface MovieTagsProps {
|
||||
movieId: number;
|
||||
}
|
||||
|
||||
function MovieTags({ movieId }: MovieTagsProps) {
|
||||
const movie = useMovie(movieId)!;
|
||||
const tagList = useTags();
|
||||
|
||||
const tags = movie.tags
|
||||
.map((tagId) => tagList.find((tag) => tag.id === tagId))
|
||||
.filter((tag) => !!tag)
|
||||
.sort(sortByProp('label'))
|
||||
.map((tag) => tag.label);
|
||||
|
||||
return (
|
||||
<div>
|
||||
{tags.map((tag) => {
|
||||
return (
|
||||
<Label key={tag} kind={kinds.INFO} size={sizes.LARGE}>
|
||||
{tag}
|
||||
</Label>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default MovieTags;
|
||||
@@ -1,26 +0,0 @@
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import createMovieSelector from 'Store/Selectors/createMovieSelector';
|
||||
import createTagsSelector from 'Store/Selectors/createTagsSelector';
|
||||
import sortByProp from 'Utilities/Array/sortByProp';
|
||||
import MovieTags from './MovieTags';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createMovieSelector(),
|
||||
createTagsSelector(),
|
||||
(movie, tagList) => {
|
||||
const tags = movie.tags
|
||||
.map((tagId) => tagList.find((tag) => tag.id === tagId))
|
||||
.filter((tag) => !!tag)
|
||||
.sort(sortByProp('label'))
|
||||
.map((tag) => tag.label);
|
||||
|
||||
return {
|
||||
tags
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
export default connect(createMapStateToProps)(MovieTags);
|
||||
@@ -1,53 +0,0 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Menu from 'Components/Menu/Menu';
|
||||
import MenuContent from 'Components/Menu/MenuContent';
|
||||
import SearchMenuItem from 'Components/Menu/SearchMenuItem';
|
||||
import ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton';
|
||||
import { align, icons } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
|
||||
class MovieIndexSearchMenu extends Component {
|
||||
|
||||
render() {
|
||||
const {
|
||||
isDisabled,
|
||||
onSearchPress
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<Menu
|
||||
isDisabled={isDisabled}
|
||||
alignMenu={align.RIGHT}
|
||||
>
|
||||
<ToolbarMenuButton
|
||||
iconName={icons.SEARCH}
|
||||
text="Search"
|
||||
isDisabled={isDisabled}
|
||||
/>
|
||||
<MenuContent>
|
||||
<SearchMenuItem
|
||||
name="missingMoviesSearch"
|
||||
onPress={onSearchPress}
|
||||
>
|
||||
{translate('SearchMissing')}
|
||||
</SearchMenuItem>
|
||||
|
||||
<SearchMenuItem
|
||||
name="cutoffUnmetMoviesSearch"
|
||||
onPress={onSearchPress}
|
||||
>
|
||||
{translate('SearchCutoffUnmet')}
|
||||
</SearchMenuItem>
|
||||
</MenuContent>
|
||||
</Menu>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
MovieIndexSearchMenu.propTypes = {
|
||||
isDisabled: PropTypes.bool.isRequired,
|
||||
onSearchPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default MovieIndexSearchMenu;
|
||||
@@ -14,13 +14,15 @@ function createMovieIndexItemSelector(movieId: number) {
|
||||
(movie: Movie, qualityProfile, executingCommands: Command[]) => {
|
||||
const isRefreshingMovie = executingCommands.some((command) => {
|
||||
return (
|
||||
command.name === REFRESH_MOVIE && command.body.movieId === movieId
|
||||
command.name === REFRESH_MOVIE &&
|
||||
command.body.movieIds?.includes(movieId)
|
||||
);
|
||||
});
|
||||
|
||||
const isSearchingMovie = executingCommands.some((command) => {
|
||||
return (
|
||||
command.name === MOVIE_SEARCH && command.body.movieId === movieId
|
||||
command.name === MOVIE_SEARCH &&
|
||||
command.body.movieIds?.includes(movieId)
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import MonitorToggleButton from 'Components/MonitorToggleButton';
|
||||
import { toggleCollectionMonitored } from 'Store/Actions/movieCollectionActions';
|
||||
import { createCollectionSelectorForHook } from 'Store/Selectors/createCollectionSelector';
|
||||
import MovieCollection from 'typings/MovieCollection';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './MovieCollectionLabel.css';
|
||||
|
||||
interface MovieCollectionLabelProps {
|
||||
@@ -16,7 +17,8 @@ function MovieCollectionLabel({ tmdbId }: MovieCollectionLabelProps) {
|
||||
monitored,
|
||||
title,
|
||||
isSaving = false,
|
||||
} = useSelector(createCollectionSelectorForHook(tmdbId)) as MovieCollection;
|
||||
} = useSelector(createCollectionSelectorForHook(tmdbId)) ||
|
||||
({} as MovieCollection);
|
||||
|
||||
const dispatch = useDispatch();
|
||||
|
||||
@@ -29,6 +31,10 @@ function MovieCollectionLabel({ tmdbId }: MovieCollectionLabelProps) {
|
||||
[id, dispatch]
|
||||
);
|
||||
|
||||
if (!id) {
|
||||
return translate('Unknown');
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<MonitorToggleButton
|
||||
|
||||
@@ -9,5 +9,5 @@ export default {
|
||||
MOVIES,
|
||||
INTERACTIVE_IMPORT,
|
||||
WANTED_CUTOFF_UNMET,
|
||||
WANTED_MISSING
|
||||
};
|
||||
WANTED_MISSING,
|
||||
} as const;
|
||||
@@ -1 +1,11 @@
|
||||
import ModelBase from 'App/ModelBase';
|
||||
|
||||
export type ExtraFileType = 'subtitle' | 'metadata' | 'other';
|
||||
|
||||
export interface ExtraFile extends ModelBase {
|
||||
movieId: number;
|
||||
movieFileId?: number;
|
||||
relativePath: string;
|
||||
extension: string;
|
||||
type: ExtraFileType;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import React from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { createQualityProfileSelectorForHook } from 'Store/Selectors/createQualityProfileSelector';
|
||||
import translate from 'Utilities/String/translate';
|
||||
|
||||
interface QualityProfileNameProps {
|
||||
qualityProfileId: number;
|
||||
}
|
||||
|
||||
function QualityProfileName({ qualityProfileId }: QualityProfileNameProps) {
|
||||
const qualityProfile = useSelector(
|
||||
createQualityProfileSelectorForHook(qualityProfileId)
|
||||
);
|
||||
|
||||
return <span>{qualityProfile?.name ?? translate('Unknown')}</span>;
|
||||
}
|
||||
|
||||
export default QualityProfileName;
|
||||
@@ -1,31 +0,0 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import createQualityProfileSelector from 'Store/Selectors/createQualityProfileSelector';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createQualityProfileSelector(),
|
||||
(qualityProfile) => {
|
||||
return {
|
||||
name: qualityProfile.name
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function QualityProfileNameConnector({ name, ...otherProps }) {
|
||||
return (
|
||||
<span>
|
||||
{name}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
QualityProfileNameConnector.propTypes = {
|
||||
qualityProfileId: PropTypes.number.isRequired,
|
||||
name: PropTypes.string.isRequired
|
||||
};
|
||||
|
||||
export default connect(createMapStateToProps)(QualityProfileNameConnector);
|
||||
@@ -1,25 +0,0 @@
|
||||
import { createSelector } from 'reselect';
|
||||
import translate from 'Utilities/String/translate';
|
||||
|
||||
function createHealthCheckSelector() {
|
||||
return createSelector(
|
||||
(state) => state.system.health,
|
||||
(state) => state.app,
|
||||
(health, app) => {
|
||||
const items = [...health.items];
|
||||
|
||||
if (!app.isConnected) {
|
||||
items.push({
|
||||
source: 'UI',
|
||||
type: 'warning',
|
||||
message: translate('CouldNotConnectSignalR'),
|
||||
wikiUrl: 'https://wiki.servarr.com/radarr/system#could-not-connect-to-signalr'
|
||||
});
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
export default createHealthCheckSelector;
|
||||
8
frontend/src/Tags/useTags.ts
Normal file
8
frontend/src/Tags/useTags.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { useSelector } from 'react-redux';
|
||||
import createTagsSelector from 'Store/Selectors/createTagsSelector';
|
||||
|
||||
const useTags = () => {
|
||||
return useSelector(createTagsSelector());
|
||||
};
|
||||
|
||||
export default useTags;
|
||||
@@ -1,11 +0,0 @@
|
||||
function getErrorMessage(xhr, fallbackErrorMessage) {
|
||||
if (!xhr || !xhr.responseJSON || !xhr.responseJSON.message) {
|
||||
return fallbackErrorMessage;
|
||||
}
|
||||
|
||||
const message = xhr.responseJSON.message;
|
||||
|
||||
return message || fallbackErrorMessage;
|
||||
}
|
||||
|
||||
export default getErrorMessage;
|
||||
15
frontend/src/Utilities/Object/getErrorMessage.ts
Normal file
15
frontend/src/Utilities/Object/getErrorMessage.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { Error } from 'App/State/AppSectionState';
|
||||
|
||||
function getErrorMessage(xhr: Error, fallbackErrorMessage?: string) {
|
||||
if (!xhr || !xhr.responseJSON) {
|
||||
return fallbackErrorMessage;
|
||||
}
|
||||
|
||||
if ('message' in xhr.responseJSON && xhr.responseJSON.message) {
|
||||
return xhr.responseJSON.message;
|
||||
}
|
||||
|
||||
return fallbackErrorMessage;
|
||||
}
|
||||
|
||||
export default getErrorMessage;
|
||||
@@ -35,6 +35,7 @@ export interface GrabbedHistoryData {
|
||||
|
||||
export interface DownloadFailedHistory {
|
||||
message: string;
|
||||
indexer?: string;
|
||||
}
|
||||
|
||||
export interface DownloadFolderImportedHistory {
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
"eslint-plugin-import": "2.31.0",
|
||||
"eslint-plugin-prettier": "4.2.1",
|
||||
"eslint-plugin-react": "7.37.1",
|
||||
"eslint-plugin-react-hooks": "4.6.2",
|
||||
"eslint-plugin-react-hooks": "5.2.0",
|
||||
"eslint-plugin-simple-import-sort": "12.1.1",
|
||||
"file-loader": "6.2.0",
|
||||
"filemanager-webpack-plugin": "8.0.0",
|
||||
|
||||
@@ -355,6 +355,23 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc
|
||||
video.Add(new XElement("durationinseconds", Math.Round(movieFile.MediaInfo.RunTime.TotalSeconds)));
|
||||
}
|
||||
|
||||
if (movieFile.MediaInfo.VideoHdrFormat is HdrFormat.DolbyVision or HdrFormat.DolbyVisionHdr10 or HdrFormat.DolbyVisionHdr10Plus or HdrFormat.DolbyVisionHlg or HdrFormat.DolbyVisionSdr)
|
||||
{
|
||||
video.Add(new XElement("hdrtype", "dolbyvision"));
|
||||
}
|
||||
else if (movieFile.MediaInfo.VideoHdrFormat is HdrFormat.Hdr10 or HdrFormat.Hdr10Plus or HdrFormat.Pq10)
|
||||
{
|
||||
video.Add(new XElement("hdrtype", "hdr10"));
|
||||
}
|
||||
else if (movieFile.MediaInfo.VideoHdrFormat == HdrFormat.Hlg10)
|
||||
{
|
||||
video.Add(new XElement("hdrtype", "hlg"));
|
||||
}
|
||||
else if (movieFile.MediaInfo.VideoHdrFormat == HdrFormat.None)
|
||||
{
|
||||
video.Add(new XElement("hdrtype", ""));
|
||||
}
|
||||
|
||||
streamDetails.Add(video);
|
||||
|
||||
var audio = new XElement("audio");
|
||||
|
||||
@@ -12,6 +12,9 @@ namespace NzbDrone.Core.History
|
||||
public const string DOWNLOAD_CLIENT = "downloadClient";
|
||||
public const string MOVIE_MATCH_TYPE = "movieMatchType";
|
||||
public const string RELEASE_SOURCE = "releaseSource";
|
||||
public const string RELEASE_GROUP = "releaseGroup";
|
||||
public const string SIZE = "size";
|
||||
public const string INDEXER = "indexer";
|
||||
|
||||
public MovieHistory()
|
||||
{
|
||||
|
||||
@@ -282,6 +282,7 @@ namespace NzbDrone.Core.History
|
||||
history.Data.Add("Message", message.Message);
|
||||
history.Data.Add("ReleaseGroup", message.TrackedDownload?.RemoteMovie?.ParsedMovieInfo?.ReleaseGroup);
|
||||
history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString());
|
||||
history.Data.Add("Indexer", message.TrackedDownload?.RemoteMovie?.Release?.Indexer);
|
||||
|
||||
_historyRepository.Insert(history);
|
||||
}
|
||||
@@ -307,8 +308,9 @@ namespace NzbDrone.Core.History
|
||||
history.Data.Add("DownloadClient", message.DownloadClient);
|
||||
history.Data.Add("DownloadClientName", message.TrackedDownload?.DownloadItem.DownloadClientInfo.Name);
|
||||
history.Data.Add("Message", message.Message);
|
||||
history.Data.Add("ReleaseGroup", message.TrackedDownload?.RemoteMovie?.ParsedMovieInfo?.ReleaseGroup);
|
||||
history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString());
|
||||
history.Data.Add("ReleaseGroup", message.TrackedDownload?.RemoteMovie?.ParsedMovieInfo?.ReleaseGroup ?? message.Data.GetValueOrDefault(MovieHistory.RELEASE_GROUP));
|
||||
history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString() ?? message.Data.GetValueOrDefault(MovieHistory.SIZE));
|
||||
history.Data.Add("Indexer", message.TrackedDownload?.RemoteMovie?.Release?.Indexer ?? message.Data.GetValueOrDefault(MovieHistory.INDEXER));
|
||||
|
||||
_historyRepository.Insert(history);
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@
|
||||
"OrganizeConfirm": "هل تريد بالتأكيد تنظيم جميع الملفات في {0} فيلم (أفلام) محدد؟",
|
||||
"Organize": "تنظم",
|
||||
"Options": "خيارات",
|
||||
"OpenThisModal": "افتح هذا النموذج",
|
||||
"KeyboardShortcutsOpenModal": "افتح هذا النموذج",
|
||||
"OpenBrowserOnStart": "افتح المتصفح عند البدء",
|
||||
"OnRename": "عند إعادة التسمية",
|
||||
"OnlyUsenet": "يوزنت فقط",
|
||||
@@ -291,8 +291,8 @@
|
||||
"MovieInfoLanguageHelpTextWarning": "يلزم إعادة تحميل المتصفح",
|
||||
"MovieInfoLanguageHelpText": "اللغة التي سيستخدمها {appName} لمعلومات الفيلم في واجهة المستخدم",
|
||||
"MovieInfoLanguage": "لغة معلومات الفيلم",
|
||||
"MovieIndexScrollTop": "فهرس الفيلم: قم بالتمرير لأعلى",
|
||||
"MovieIndexScrollBottom": "فهرس الفيلم: التمرير لأسفل",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "فهرس الفيلم: قم بالتمرير لأعلى",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "فهرس الفيلم: التمرير لأسفل",
|
||||
"MovieIndex": "فهرس الفيلم",
|
||||
"MovieID": "معرف الفيلم",
|
||||
"MovieFolderFormat": "تنسيق مجلد الفيلم",
|
||||
@@ -407,7 +407,7 @@
|
||||
"GrabRelease": "انتزاع الإصدار",
|
||||
"Grabbed": "اقتطف",
|
||||
"Grab": "إختطاف",
|
||||
"GoToInterp": "انتقل إلى {0}",
|
||||
"MovieDetailsGoTo": "انتقل إلى {0}",
|
||||
"Global": "عالمي",
|
||||
"Genres": "الأنواع",
|
||||
"GeneralSettingsSummary": "المنفذ ، SSL ، اسم المستخدم / كلمة المرور ، الوكيل ، التحليلات والتحديثات",
|
||||
@@ -423,10 +423,10 @@
|
||||
"Folders": "المجلدات",
|
||||
"MoveMovieFoldersRenameFolderWarning": "سيؤدي هذا أيضًا إلى إعادة تسمية مجلد الفيلم لكل تنسيق مجلد الفيلم في الإعدادات.",
|
||||
"Folder": "مجلد",
|
||||
"FocusSearchBox": "التركيز على مربع البحث",
|
||||
"KeyboardShortcutsFocusSearchBox": "التركيز على مربع البحث",
|
||||
"Fixed": "ثابت",
|
||||
"FirstDayOfWeek": "اليوم الأول من الأسبوع",
|
||||
"FilterPlaceHolder": "البحث في الأفلام",
|
||||
"FilterMoviePlaceholder": "البحث في الأفلام",
|
||||
"Filter": "منقي",
|
||||
"Files": "الملفات",
|
||||
"FileNameTokens": "رموز اسم الملف",
|
||||
@@ -435,7 +435,6 @@
|
||||
"FileManagement": "إدارة الملفات",
|
||||
"ChangeFileDateHelpText": "تغيير تاريخ الملف عند الاستيراد / إعادة الفحص",
|
||||
"FeatureRequests": "طلبات مخصصة",
|
||||
"FailedToLoadMovieFromAPI": "فشل تحميل الفيلم من API",
|
||||
"FailedLoadingSearchResults": "فشل تحميل نتائج البحث ، يرجى المحاولة مرة أخرى.",
|
||||
"FailedDownloadHandling": "فشل معالجة التنزيل",
|
||||
"Failed": "فشل",
|
||||
@@ -488,7 +487,7 @@
|
||||
"TagIsNotUsedAndCanBeDeleted": "العلامة غير مستخدمة ويمكن حذفها",
|
||||
"TagDetails": "تفاصيل العلامة - {0}",
|
||||
"TagCannotBeDeletedWhileInUse": "لا يمكن حذفه أثناء الاستخدام",
|
||||
"TableOptionsColumnsMessage": "اختر الأعمدة المرئية والترتيب الذي تظهر به",
|
||||
"TableColumnsHelpText": "اختر الأعمدة المرئية والترتيب الذي تظهر به",
|
||||
"TableOptions": "خيارات الجدول",
|
||||
"Table": "الطاولة",
|
||||
"SystemTimeHealthCheckMessage": "توقف وقت النظام بأكثر من يوم واحد. قد لا تعمل المهام المجدولة بشكل صحيح حتى يتم تصحيح الوقت",
|
||||
@@ -516,7 +515,7 @@
|
||||
"SourcePath": "مسار المصدر",
|
||||
"Source": "مصدر",
|
||||
"Sort": "فرز",
|
||||
"SorryThatMovieCannotBeFound": "آسف ، لا يمكن العثور على هذا الفيلم.",
|
||||
"MovieCannotBeFound": "آسف ، لا يمكن العثور على هذا الفيلم.",
|
||||
"SomeResultsHiddenFilter": "بعض النتائج مخفية بواسطة عامل التصفية المطبق",
|
||||
"Socks5": "Socks5 (دعم TOR)",
|
||||
"Socks4": "الجوارب 4",
|
||||
@@ -593,7 +592,7 @@
|
||||
"Script": "النصي",
|
||||
"Score": "أحرز هدفا",
|
||||
"Scheduled": "المقرر",
|
||||
"SaveSettings": "احفظ التغييرات",
|
||||
"KeyboardShortcutsSaveSettings": "احفظ التغييرات",
|
||||
"SaveChanges": "حفظ التغييرات",
|
||||
"Save": "حفظ",
|
||||
"Runtime": "مدة العرض",
|
||||
@@ -752,11 +751,11 @@
|
||||
"Conditions": "الظروف",
|
||||
"Component": "مكون",
|
||||
"CompletedDownloadHandling": "معالجة التحميل الكامل",
|
||||
"Columns": "الأعمدة",
|
||||
"TableColumns": "الأعمدة",
|
||||
"ColonReplacementFormatHelpText": "تغيير طريقة معالجة {appName} لاستبدال القولون",
|
||||
"ColonReplacement": "استبدال القولون",
|
||||
"Collection": "مجموعة",
|
||||
"CloseCurrentModal": "إغلاق Modal الحالي",
|
||||
"KeyboardShortcutsCloseModal": "إغلاق Modal الحالي",
|
||||
"Close": "قريب",
|
||||
"CloneProfile": "الملف الشخصي استنساخ",
|
||||
"CloneIndexer": "مفهرس استنساخ",
|
||||
@@ -824,8 +823,8 @@
|
||||
"AppDataDirectory": "دليل AppData",
|
||||
"ApiKey": "مفتاح API",
|
||||
"Announced": "أعلن",
|
||||
"MovieDetailsPreviousMovie": "تفاصيل الفيلم: الفيلم السابق",
|
||||
"MovieDetailsNextMovie": "تفاصيل الفيلم: الفيلم القادم",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "تفاصيل الفيلم: الفيلم السابق",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "تفاصيل الفيلم: الفيلم القادم",
|
||||
"MovieChat": "دردشة الفيلم",
|
||||
"MovieAlreadyExcluded": "الفيلم مستبعد بالفعل",
|
||||
"Movie": "فيلم",
|
||||
@@ -947,7 +946,7 @@
|
||||
"Add": "إضافة",
|
||||
"Activity": "نشاط",
|
||||
"Actions": "أجراءات",
|
||||
"AcceptConfirmationModal": "نموذج قبول التأكيد",
|
||||
"KeyboardShortcutsConfirmModal": "نموذج قبول التأكيد",
|
||||
"About": "نبدة عن",
|
||||
"OnMovieDelete": "عند حذف الفيلم",
|
||||
"OnMovieFileDelete": "عند حذف ملف الفيلم",
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
"Collection": "колекция",
|
||||
"ColonReplacement": "Подмяна на дебелото черво",
|
||||
"ColonReplacementFormatHelpText": "Променете начина, по който {appName} се справя с подмяна на дебелото черво",
|
||||
"Columns": "Колони",
|
||||
"TableColumns": "Колони",
|
||||
"CompletedDownloadHandling": "Завършено обработване на изтегляне",
|
||||
"Conditions": "Условия",
|
||||
"Connect": "Свържете",
|
||||
@@ -227,17 +227,16 @@
|
||||
"ExtraFileExtensionsHelpText": "Списък с допълнителни файлове за импортиране, разделени със запетая (.nfo ще бъде импортиран като .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Примери: '.sub, .nfo' или 'sub, nfo'",
|
||||
"FailedLoadingSearchResults": "Неуспешно зареждане на резултатите от търсенето, моля, опитайте отново.",
|
||||
"FailedToLoadMovieFromAPI": "Зареждането на филм от API не бе успешно",
|
||||
"FeatureRequests": "Заявки за функции",
|
||||
"ChangeFileDateHelpText": "Променете датата на файла при импортиране / пресканиране",
|
||||
"FileManagement": "Управление на файлове",
|
||||
"Filename": "Име на файл",
|
||||
"FileNames": "Имена на файлове",
|
||||
"Files": "Файлове",
|
||||
"FilterPlaceHolder": "Търсене на филми",
|
||||
"FilterMoviePlaceholder": "Търсене на филми",
|
||||
"FirstDayOfWeek": "Първи ден от седмицата",
|
||||
"Fixed": "Фиксирана",
|
||||
"FocusSearchBox": "Фокусно поле за търсене",
|
||||
"KeyboardShortcutsFocusSearchBox": "Фокусно поле за търсене",
|
||||
"Folder": "Папка",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Това също ще преименува папката с филм във формата на папката с филм в настройките.",
|
||||
"Folders": "Папки",
|
||||
@@ -253,7 +252,7 @@
|
||||
"GeneralSettingsSummary": "Порт, SSL, потребителско име / парола, прокси, анализи и актуализации",
|
||||
"Genres": "Жанрове",
|
||||
"Global": "Глобален",
|
||||
"GoToInterp": "Отидете на {0}",
|
||||
"MovieDetailsGoTo": "Отидете на {0}",
|
||||
"Grab": "Грабнете",
|
||||
"Grabbed": "Грабната",
|
||||
"GrabRelease": "Grab Release",
|
||||
@@ -359,9 +358,9 @@
|
||||
"Movie": "Филм",
|
||||
"MovieAlreadyExcluded": "Филмът вече е изключен",
|
||||
"MovieChat": "Чат за филми",
|
||||
"MovieDetailsNextMovie": "Подробности за филма: Следващ филм",
|
||||
"MovieIndexScrollBottom": "Индекс на филма: Превъртане отдолу",
|
||||
"MovieIndexScrollTop": "Индекс на филма: Превъртете отгоре",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Подробности за филма: Следващ филм",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Индекс на филма: Превъртане отдолу",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Индекс на филма: Превъртете отгоре",
|
||||
"MovieInfoLanguage": "Информация за филма Език",
|
||||
"MovieInvalidFormat": "Филм: Невалиден формат",
|
||||
"MovieIsOnImportExclusionList": "Филмът е в списъка за изключване на внос",
|
||||
@@ -464,7 +463,7 @@
|
||||
"Runtime": "Времетраене",
|
||||
"Save": "Запазете",
|
||||
"SaveChanges": "Запазите промените",
|
||||
"SaveSettings": "Запазване на настройките",
|
||||
"KeyboardShortcutsSaveSettings": "Запазване на настройките",
|
||||
"Scheduled": "Планиран",
|
||||
"Score": "Резултат",
|
||||
"Script": "Сценарий",
|
||||
@@ -532,7 +531,7 @@
|
||||
"Socks4": "Чорапи4",
|
||||
"Socks5": "Чорапи5 (Поддръжка на TOR)",
|
||||
"SomeResultsHiddenFilter": "Някои резултати са скрити от прилагания филтър",
|
||||
"SorryThatMovieCannotBeFound": "За съжаление този филм не може да бъде намерен.",
|
||||
"MovieCannotBeFound": "За съжаление този филм не може да бъде намерен.",
|
||||
"Sort": "Вид",
|
||||
"Source": "Източник",
|
||||
"SourcePath": "Път на източника",
|
||||
@@ -554,7 +553,7 @@
|
||||
"Sunday": "Неделя",
|
||||
"Table": "Таблица",
|
||||
"TableOptions": "Опции на таблицата",
|
||||
"TableOptionsColumnsMessage": "Изберете кои колони да се виждат и в кой ред да се показват",
|
||||
"TableColumnsHelpText": "Изберете кои колони да се виждат и в кой ред да се показват",
|
||||
"TagDetails": "Подробности за маркера - {0}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Етикетът не се използва и може да бъде изтрит",
|
||||
"Tags": "Етикети",
|
||||
@@ -669,7 +668,7 @@
|
||||
"MissingMonitoredAndConsideredAvailable": "Липсва (Мониториран)",
|
||||
"MissingNotMonitored": "Липсва (без наблюдение)",
|
||||
"MoveMovieFoldersToNewPath": "Искате ли да преместите филмовите файлове от „{0}“ в „{1}“?",
|
||||
"MovieDetailsPreviousMovie": "Подробности за филма: Предишен филм",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Подробности за филма: Предишен филм",
|
||||
"MovieEditor": "Редактор на филми",
|
||||
"MovieExcludedFromAutomaticAdd": "Филмът е изключен от автоматично добавяне",
|
||||
"Search": "Търсене",
|
||||
@@ -679,7 +678,7 @@
|
||||
"AddExclusion": "Добавяне на изключване",
|
||||
"Actions": "Действия",
|
||||
"About": "относно",
|
||||
"AcceptConfirmationModal": "Приемете модал за потвърждение",
|
||||
"KeyboardShortcutsConfirmModal": "Приемете модал за потвърждение",
|
||||
"ApiKey": "API ключ",
|
||||
"Automatic": "Автоматично",
|
||||
"CantFindMovie": "Защо не мога да намеря своя филм?",
|
||||
@@ -846,7 +845,7 @@
|
||||
"OnlyUsenet": "Само Usenet",
|
||||
"OnRename": "При преименуване",
|
||||
"Cast": "В ролите",
|
||||
"OpenThisModal": "Отворете този модал",
|
||||
"KeyboardShortcutsOpenModal": "Отворете този модал",
|
||||
"PreferTorrent": "Предпочитайте Torrent",
|
||||
"PreferUsenet": "Предпочитайте Usenet",
|
||||
"QueueIsEmpty": "Опашката е празна",
|
||||
@@ -930,7 +929,7 @@
|
||||
"View": "Изглед",
|
||||
"Real": "Истински",
|
||||
"Close": "Близо",
|
||||
"CloseCurrentModal": "Затворете текущия режим",
|
||||
"KeyboardShortcutsCloseModal": "Затворете текущия режим",
|
||||
"Connection": "Връзка",
|
||||
"Connections": "Връзки",
|
||||
"CreateEmptyMovieFolders": "Създайте празни папки с филми",
|
||||
@@ -1198,5 +1197,8 @@
|
||||
"Theme": "Тема",
|
||||
"ImportListsTraktSettingsCertification": "Сертифициране",
|
||||
"ImportListsTraktSettingsGenres": "Жанрове",
|
||||
"ImportListsTraktSettingsRating": "Оценки"
|
||||
"ImportListsTraktSettingsRating": "Оценки",
|
||||
"AddCustomFilter": "Добави персонализиран филтър",
|
||||
"AddANewPath": "Добави нов път",
|
||||
"Tba": "TBA"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"About": "সম্পর্কিত",
|
||||
"AcceptConfirmationModal": "নিশ্চিতকরণ মডেল গ্রহণ করুন",
|
||||
"KeyboardShortcutsConfirmModal": "নিশ্চিতকরণ মডেল গ্রহণ করুন",
|
||||
"Actions": "ক্রিয়াকাণ্ড",
|
||||
"Activity": "কার্যকলাপ",
|
||||
"Add": "যোগ করুন"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"Add": "Afegeix",
|
||||
"Actions": "Accions",
|
||||
"AcceptConfirmationModal": "Accepta el modal de confirmació",
|
||||
"KeyboardShortcutsConfirmModal": "Accepta el modal de confirmació",
|
||||
"About": "Quant a",
|
||||
"Movie": "Pel·lícula",
|
||||
"Movies": "Pel·lícules",
|
||||
@@ -154,7 +154,7 @@
|
||||
"StandardMovieFormat": "Format de pel·lícula estàndard",
|
||||
"Started": "Començat",
|
||||
"StartSearchForMissingMovie": "Comenceu a cercar per pel·lícula absent",
|
||||
"TableOptionsColumnsMessage": "Trieu quines columnes són visibles i en quin ordre apareixen",
|
||||
"TableColumnsHelpText": "Trieu quines columnes són visibles i en quin ordre apareixen",
|
||||
"CollectionOptions": "Opcions de col·leccions",
|
||||
"CollectionShowPostersHelpText": "Mostra cartells d'articles de la col·lecció",
|
||||
"RemotePathMappingsLoadError": "No s'han pogut carregar els mapes de camins remots",
|
||||
@@ -180,7 +180,7 @@
|
||||
"MovieInfoLanguageHelpTextWarning": "Es requereix una recàrrega del navegador",
|
||||
"MovieIsDownloading": "La pel·lícula s'està baixant",
|
||||
"OpenBrowserOnStart": "Obriu el navegador a l'inici",
|
||||
"OpenThisModal": "Obriu aquest modal",
|
||||
"KeyboardShortcutsOpenModal": "Obriu aquest modal",
|
||||
"Overview": "Visió general",
|
||||
"OverviewOptions": "Opcions de visió general",
|
||||
"QualitySettings": "Configuració de qualitat",
|
||||
@@ -276,7 +276,7 @@
|
||||
"DownloadPropersAndRepacksHelpTextCustomFormat": "Utilitzeu 'No prefereixo' per a ordenar per puntuació de format personalitzat sobre Propers/Repacks",
|
||||
"EditCustomFormat": "Edita el format personalitzat",
|
||||
"EnableInteractiveSearch": "Activa la cerca interactiva",
|
||||
"FilterPlaceHolder": "Cerca pel·lícules",
|
||||
"FilterMoviePlaceholder": "Cerca pel·lícules",
|
||||
"Filters": "Filtres",
|
||||
"InCinemas": "Estrenes",
|
||||
"InCinemasDate": "Data d'estrena",
|
||||
@@ -284,7 +284,7 @@
|
||||
"Socks5": "Socks5 (suport TOR)",
|
||||
"Monitored": "Monitorat",
|
||||
"MovieChat": "Xat de pel·lícula",
|
||||
"MovieDetailsNextMovie": "Detalls de la pel·lícula: propera pel·lícula",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Detalls de la pel·lícula: propera pel·lícula",
|
||||
"MovieInvalidFormat": "Pel·lícula: Format no vàlid",
|
||||
"NegateHelpText": "Si està marcat, el format personalitzat no s'aplicarà si la condició {implementationName} coincideix.",
|
||||
"DotNetVersion": ".NET",
|
||||
@@ -388,12 +388,12 @@
|
||||
"ClientPriority": "Prioritat del client",
|
||||
"CloneIndexer": "Clona l'indexador",
|
||||
"CollectionShowOverviewsHelpText": "Mostra la vista general de la col·lecció",
|
||||
"CloseCurrentModal": "Tanca el modal actual",
|
||||
"KeyboardShortcutsCloseModal": "Tanca el modal actual",
|
||||
"CollectionShowDetailsHelpText": "Mostra l'estat i les propietats de la col·lecció",
|
||||
"CountCollectionsSelected": "{count} Col·lecció(ns) seleccionades",
|
||||
"ColonReplacement": "Substitució de dos punts",
|
||||
"ColonReplacementFormatHelpText": "Canvieu com {appName} gestiona la substitució de dos punts",
|
||||
"Columns": "Columnes",
|
||||
"TableColumns": "Columnes",
|
||||
"CompletedDownloadHandling": "Gestió de descàrregues completades",
|
||||
"Component": "Component",
|
||||
"Conditions": "Condicions",
|
||||
@@ -492,7 +492,6 @@
|
||||
"Failed": "S'ha produït un error",
|
||||
"FailedDownloadHandling": "No s'ha pogut gestionar la baixada",
|
||||
"FailedLoadingSearchResults": "No s'han pogut carregar els resultats de la cerca, torneu-ho a provar.",
|
||||
"FailedToLoadMovieFromAPI": "No s'ha pogut carregar la pel·lícula des de l'API",
|
||||
"FeatureRequests": "Sol·licitud de noves característiques",
|
||||
"ChangeFileDateHelpText": "Canvia la data del fitxer en importar/reescanejar",
|
||||
"FileManagement": "Gestió del fitxers",
|
||||
@@ -500,7 +499,7 @@
|
||||
"FileNames": "Noms de fitxers",
|
||||
"FileNameTokens": "Testimonis de nom de fitxer",
|
||||
"Files": "Fitxers",
|
||||
"FocusSearchBox": "Posa el focus a la caixa de cerca",
|
||||
"KeyboardShortcutsFocusSearchBox": "Posa el focus a la caixa de cerca",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Això també reanomenarà la carpeta de pel·lícules segons el format de la carpeta de pel·lícules a la configuració.",
|
||||
"Forecast": "Previsió",
|
||||
"Formats": "Formats",
|
||||
@@ -511,7 +510,7 @@
|
||||
"General": "General",
|
||||
"GeneralSettings": "Configuració general",
|
||||
"Global": "Global",
|
||||
"GoToInterp": "Vés a {0}",
|
||||
"MovieDetailsGoTo": "Vés a {0}",
|
||||
"Grab": "Captura",
|
||||
"Grabbed": "Capturat",
|
||||
"ICalFeedHelpText": "Copieu aquest URL als vostres clients o feu clic per a subscriure's si el vostre navegador és compatible amb webcal",
|
||||
@@ -610,11 +609,11 @@
|
||||
"MoveFiles": "Mou arxius",
|
||||
"MovieCollectionRootFolderMissingRootHealthCheckMessage": "Falta la carpeta arrel per a la col·lecció de pel·lícules: {rootFolderInfo}",
|
||||
"MovieCollectionFolderMultipleMissingRootsHealthCheckMessage": "Falten diverses carpetes arrel per a les col·leccions de pel·lícules: {rootFoldersInfo}",
|
||||
"MovieDetailsPreviousMovie": "Detalls: pel·lícula anterior",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Detalls: pel·lícula anterior",
|
||||
"MovieExcludedFromAutomaticAdd": "Pel·lícula exclosa de l'addició automàtica",
|
||||
"MovieID": "Identificador de pel·lícula",
|
||||
"MovieIndexScrollBottom": "Índex de pel·lícules: Desplaçament inferior",
|
||||
"MovieIndexScrollTop": "Índex de pel·lícules: Desplaçament superior",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Índex de pel·lícules: Desplaçament inferior",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Índex de pel·lícules: Desplaçament superior",
|
||||
"MovieInfoLanguage": "Idioma de la informació de la pel·lícula",
|
||||
"MovieInfoLanguageHelpText": "Idioma que utilitzarà {appName} per a la informació de la pel·lícula a la interfície d'usuari",
|
||||
"MovieIsMonitored": "La pel·lícula està monitorada",
|
||||
@@ -952,7 +951,7 @@
|
||||
"RottenTomatoesRating": "Valoració de Tomato",
|
||||
"Save": "Desa",
|
||||
"SaveChanges": "Desa els canvis",
|
||||
"SaveSettings": "Desa la configuració",
|
||||
"KeyboardShortcutsSaveSettings": "Desa la configuració",
|
||||
"Score": "Puntuació",
|
||||
"ScriptPath": "Camí de l'script",
|
||||
"ScrollMovies": "Desplaça't per les pel·lícules",
|
||||
@@ -965,7 +964,7 @@
|
||||
"SetPermissions": "Estableix permisos",
|
||||
"Small": "Petita",
|
||||
"SomeResultsHiddenFilter": "Alguns resultats estan ocults pel filtre aplicat",
|
||||
"SorryThatMovieCannotBeFound": "Ho sentim, aquesta pel·lícula no s'ha trobat.",
|
||||
"MovieCannotBeFound": "Ho sentim, aquesta pel·lícula no s'ha trobat.",
|
||||
"Sort": "Ordena",
|
||||
"Source": "Font",
|
||||
"SourcePath": "Camí de la font",
|
||||
@@ -1429,5 +1428,11 @@
|
||||
"DownloadClientSettingsAddPaused": "Afegeix pausats",
|
||||
"ImportListsTraktSettingsCertification": "Certificació",
|
||||
"ImportListsTraktSettingsRating": "Valoració",
|
||||
"ImportListsTraktSettingsGenres": "Gèneres"
|
||||
"ImportListsTraktSettingsGenres": "Gèneres",
|
||||
"AddANewPath": "Afegeix una nova ruta",
|
||||
"AddCustomFilter": "Afegeix un filtre personalitzat",
|
||||
"FilterContains": "conté",
|
||||
"FilterEqual": "igual",
|
||||
"FilterIs": "és",
|
||||
"Tba": "Pendent el seu anunci"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"EditDelayProfile": "Upravit profil zpoždění",
|
||||
"AcceptConfirmationModal": "Přijměte potvrzovací modální okno",
|
||||
"KeyboardShortcutsConfirmModal": "Přijměte potvrzovací modální okno",
|
||||
"Automatic": "Automatický",
|
||||
"CertificateValidation": "Ověřování certifikátu",
|
||||
"CertificateValidationHelpText": "Změňte přísnost ověřování certifikátů HTTPS. Neměňte, pokud nerozumíte rizikům.",
|
||||
@@ -64,7 +64,7 @@
|
||||
"SupportedDownloadClientsMoreInfo": "Další informace o jednotlivých klientech pro stahování získáte kliknutím na informační tlačítka.",
|
||||
"SupportedListsMoreInfo": "Další informace o jednotlivých seznamech importů získáte kliknutím na informační tlačítka.",
|
||||
"GeneralSettingsSummary": "Port, SSL, uživatelské jméno / heslo, proxy, analytika a aktualizace",
|
||||
"GoToInterp": "Přejít na {0}",
|
||||
"MovieDetailsGoTo": "Přejít na {0}",
|
||||
"Interval": "Interval",
|
||||
"LanguageHelpText": "Jazyk pro zprávy",
|
||||
"LastWriteTime": "Čas posledního zápisu",
|
||||
@@ -132,7 +132,7 @@
|
||||
"Version": "Verze",
|
||||
"VisitTheWikiForMoreDetails": "Další podrobnosti naleznete na wiki: ",
|
||||
"Weeks": "Týdny",
|
||||
"MovieDetailsPreviousMovie": "Detaily filmu: Předchozí film",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Detaily filmu: Předchozí film",
|
||||
"CouldNotConnectSignalR": "Nelze se připojit k SignalR, uživatelské rozhraní se neaktualizuje",
|
||||
"Added": "Přidáno",
|
||||
"AddExclusion": "Přidat vyjímku",
|
||||
@@ -289,7 +289,7 @@
|
||||
"OnlyUsenet": "Pouze Usenet",
|
||||
"OnRename": "Při přejmenování",
|
||||
"OpenBrowserOnStart": "Při spuštění otevřete prohlížeč",
|
||||
"OpenThisModal": "Otevřete tento modální",
|
||||
"KeyboardShortcutsOpenModal": "Otevřete tento modální",
|
||||
"PendingChangesDiscardChanges": "Zahodit změny a odejít",
|
||||
"PendingChangesMessage": "Máte neuložené změny. Opravdu chcete tuto stránku opustit?",
|
||||
"PendingChangesStayReview": "Zůstaňte a zkontrolujte změny",
|
||||
@@ -471,10 +471,10 @@
|
||||
"CloneIndexer": "Klonovat indexátor",
|
||||
"CloneProfile": "Klonovat profil",
|
||||
"Close": "Zavřít",
|
||||
"CloseCurrentModal": "Zavřít aktuální modální okno",
|
||||
"KeyboardShortcutsCloseModal": "Zavřít aktuální modální okno",
|
||||
"Collection": "Sbírka",
|
||||
"ColonReplacement": "Nahrazení dvojtečky",
|
||||
"Columns": "Sloupce",
|
||||
"TableColumns": "Sloupce",
|
||||
"CompletedDownloadHandling": "Zpracování stahování bylo dokončeno",
|
||||
"ConnectionLost": "Ztráta spojení",
|
||||
"Connections": "Připojení",
|
||||
@@ -577,16 +577,15 @@
|
||||
"Extension": "Rozšíření",
|
||||
"ExtraFileExtensionsHelpText": "Seznam extra souborů k importu oddělených čárkami (.nfo bude importován jako .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Příklady: „.sub, .nfo“ nebo „sub, nfo“",
|
||||
"FailedToLoadMovieFromAPI": "Načtení filmu z API se nezdařilo",
|
||||
"FeatureRequests": "Žádosti o funkce",
|
||||
"FileManagement": "Správa souborů",
|
||||
"Filename": "Název souboru",
|
||||
"FileNames": "Názvy souborů",
|
||||
"Files": "Soubory",
|
||||
"Filter": "Filtr",
|
||||
"FilterPlaceHolder": "Hledat filmy",
|
||||
"FilterMoviePlaceholder": "Hledat filmy",
|
||||
"FirstDayOfWeek": "První den v týdnu",
|
||||
"FocusSearchBox": "Zaostřovací vyhledávací pole",
|
||||
"KeyboardShortcutsFocusSearchBox": "Zaostřovací vyhledávací pole",
|
||||
"Folder": "Složka",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Tím se také přejmenuje složka filmu na formát složky filmu v nastavení.",
|
||||
"Folders": "Složky",
|
||||
@@ -691,9 +690,9 @@
|
||||
"Movie": "Film",
|
||||
"MovieAlreadyExcluded": "Film je již vyloučen",
|
||||
"MovieChat": "Filmový chat",
|
||||
"MovieDetailsNextMovie": "Detaily filmu: Další film",
|
||||
"MovieIndexScrollBottom": "Rejstřík filmů: Posun dolů",
|
||||
"MovieIndexScrollTop": "Rejstřík filmů: Posun nahoru",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Detaily filmu: Další film",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Rejstřík filmů: Posun dolů",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Rejstřík filmů: Posun nahoru",
|
||||
"MovieInfoLanguage": "Jazyk informací o filmu",
|
||||
"MovieInvalidFormat": "Film: Neplatný formát",
|
||||
"MovieIsOnImportExclusionList": "Film je na seznamu vyloučených z importu",
|
||||
@@ -779,7 +778,7 @@
|
||||
"RssSyncIntervalHelpTextWarning": "To bude platit pro všechny indexery, dodržujte prosím pravidla stanovená nimi",
|
||||
"Save": "Uložit",
|
||||
"SaveChanges": "Uložit změny",
|
||||
"SaveSettings": "Uložit nastavení",
|
||||
"KeyboardShortcutsSaveSettings": "Uložit nastavení",
|
||||
"Scheduled": "Naplánováno",
|
||||
"Score": "Skóre",
|
||||
"Script": "Skript",
|
||||
@@ -832,7 +831,7 @@
|
||||
"Socks4": "4. ponožky",
|
||||
"Socks5": "Ponožky5 (podpora TOR)",
|
||||
"SomeResultsHiddenFilter": "Některé výsledky jsou použitým filtrem skryty",
|
||||
"SorryThatMovieCannotBeFound": "Je nám líto, ale tento film nelze najít.",
|
||||
"MovieCannotBeFound": "Je nám líto, ale tento film nelze najít.",
|
||||
"Sort": "Třídit",
|
||||
"SourcePath": "Cesta zdroje",
|
||||
"SourceRelativePath": "Cesta relativního zdroje",
|
||||
@@ -848,7 +847,7 @@
|
||||
"Sunday": "Neděle",
|
||||
"Table": "Stůl",
|
||||
"TableOptions": "Možnosti tabulky",
|
||||
"TableOptionsColumnsMessage": "Vyberte, které sloupce jsou viditelné a v jakém pořadí se zobrazují",
|
||||
"TableColumnsHelpText": "Vyberte, které sloupce jsou viditelné a v jakém pořadí se zobrazují",
|
||||
"TagDetails": "Podrobnosti značky - {0}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Značka se nepoužívá a lze ji smazat",
|
||||
"Tags": "Značky",
|
||||
@@ -1306,5 +1305,9 @@
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "Nepovinné - umístění stahovaných souborů, pokud ponecháte prázné, použije se výchozí umístění Deluge",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Nepovinné - umístění kam přesunout dokončená stahování, pokud ponecháte prázné, použije se výchozí umístění Deluge",
|
||||
"DownloadClientDelugeValidationLabelPluginInactiveDetail": "Pro použití kategorií je nutné mít v {clientName} aktivovaný plugin pro štítky.",
|
||||
"DownloadClientDownloadStationProviderMessage": "Pokud je ve vašem účtu DSM zapnuto dvoufázové ověření, {appName} se nebude moci připojit k Download station"
|
||||
"DownloadClientDownloadStationProviderMessage": "Pokud je ve vašem účtu DSM zapnuto dvoufázové ověření, {appName} se nebude moci připojit k Download station",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent má historii zahrnování kryptoměnových těžařů, malwaru a reklam, důrazně vám doporučujeme zvolit jiného klienta.",
|
||||
"AddANewPath": "Přidat novou cestu",
|
||||
"AddCustomFilter": "Přidat vlastní filtr",
|
||||
"Tba": "TBA"
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
"Connect": "Tilslut",
|
||||
"Component": "Komponent",
|
||||
"CompletedDownloadHandling": "Færdig Download Håndtering",
|
||||
"Columns": "Kolonner",
|
||||
"TableColumns": "Kolonner",
|
||||
"Collection": "Samling",
|
||||
"Close": "Luk",
|
||||
"Clear": "Ryd",
|
||||
@@ -166,7 +166,7 @@
|
||||
"Restrictions": "Begrænsninger",
|
||||
"NoBackupsAreAvailable": "Ingen sikkerhedskopier er tilgængelige",
|
||||
"Pending": "Verserende",
|
||||
"AcceptConfirmationModal": "Accepter bekræftelsesmodal",
|
||||
"KeyboardShortcutsConfirmModal": "Accepter bekræftelsesmodal",
|
||||
"AddRemotePathMapping": "Tilføj kortlægning af fjernsti",
|
||||
"AddDelayProfile": "Tilføj forsinkelsesprofil",
|
||||
"AddDownloadClient": "Tilføj downloadklient",
|
||||
@@ -290,7 +290,7 @@
|
||||
"OnlyTorrent": "Kun Torrent",
|
||||
"OnlyUsenet": "Kun Usenet",
|
||||
"OnRename": "Om omdøb",
|
||||
"OpenThisModal": "Åbn denne modal",
|
||||
"KeyboardShortcutsOpenModal": "Åbn denne modal",
|
||||
"PendingChangesDiscardChanges": "Kassér ændringer og gå ud",
|
||||
"PendingChangesMessage": "Du har ikke gemte ændringer. Er du sikker på, at du vil forlade denne side?",
|
||||
"PendingChangesStayReview": "Bliv og gennemgå ændringer",
|
||||
@@ -465,7 +465,7 @@
|
||||
"CloneCustomFormat": "Klon brugerdefineret format",
|
||||
"CloneIndexer": "Klonindekser",
|
||||
"CloneProfile": "Klonprofil",
|
||||
"CloseCurrentModal": "Luk Nuværende Modal",
|
||||
"KeyboardShortcutsCloseModal": "Luk Nuværende Modal",
|
||||
"ColonReplacement": "Udskiftning af kolon",
|
||||
"ColonReplacementFormatHelpText": "Skift hvordan {appName} håndterer kolonudskiftning",
|
||||
"Conditions": "Betingelser",
|
||||
@@ -561,14 +561,13 @@
|
||||
"ExtraFileExtensionsHelpText": "Kommasepareret liste over ekstra filer, der skal importeres (.nfo importeres som .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Eksempler: '.sub, .nfo' eller 'sub, nfo'",
|
||||
"FailedLoadingSearchResults": "Kunne ikke indlæse søgeresultater. Prøv igen.",
|
||||
"FailedToLoadMovieFromAPI": "Kunne ikke indlæse film fra API",
|
||||
"FeatureRequests": "Funktionsanmodninger",
|
||||
"ChangeFileDateHelpText": "Skift fildato ved import / genscanning",
|
||||
"FileNames": "Filnavne",
|
||||
"Filter": "Filter",
|
||||
"FilterPlaceHolder": "Søg i film",
|
||||
"FilterMoviePlaceholder": "Søg i film",
|
||||
"Fixed": "Fast",
|
||||
"FocusSearchBox": "Fokus søgefelt",
|
||||
"KeyboardShortcutsFocusSearchBox": "Fokus søgefelt",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Dette omdøber også filmmappen i henhold til filmmappens format i indstillingerne.",
|
||||
"Folders": "Mapper",
|
||||
"FollowPerson": "Følg Person",
|
||||
@@ -578,7 +577,7 @@
|
||||
"SupportedIndexersMoreInfo": "Klik på info-knapperne for at få flere oplysninger om de enkelte indeksatorer.",
|
||||
"GeneralSettings": "Generelle indstillinger",
|
||||
"Global": "Global",
|
||||
"GoToInterp": "Gå til {0}",
|
||||
"MovieDetailsGoTo": "Gå til {0}",
|
||||
"Grab": "Tag fat",
|
||||
"GrabRelease": "Hent udgivelse",
|
||||
"GrabReleaseMessageText": "{appName} var ikke i stand til at bestemme, hvilken film denne udgivelse var til. {appName} kan muligvis ikke automatisk importere denne udgivelse. Vil du hente '{0}'?",
|
||||
@@ -653,9 +652,9 @@
|
||||
"Movie": "Film",
|
||||
"MovieAlreadyExcluded": "Film allerede ekskluderet",
|
||||
"MovieChat": "Filmchat",
|
||||
"MovieDetailsNextMovie": "Filmoplysninger: Næste film",
|
||||
"MovieIndexScrollBottom": "Filmindeks: Rul ned",
|
||||
"MovieIndexScrollTop": "Filmindeks: Scroll Top",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Filmoplysninger: Næste film",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Filmindeks: Rul ned",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Filmindeks: Scroll Top",
|
||||
"MovieInfoLanguage": "Film Info sprog",
|
||||
"MovieInvalidFormat": "Film: Ugyldigt format",
|
||||
"MovieIsOnImportExclusionList": "Filmen er på listen over importundtagelser",
|
||||
@@ -743,7 +742,7 @@
|
||||
"RssSyncIntervalHelpTextWarning": "Dette gælder for alle indeksører. Følg de regler, der er angivet af dem",
|
||||
"Save": "Gemme",
|
||||
"SaveChanges": "Gem ændringer",
|
||||
"SaveSettings": "Gem indstillinger",
|
||||
"KeyboardShortcutsSaveSettings": "Gem indstillinger",
|
||||
"Scheduled": "Planlagt",
|
||||
"Score": "Score",
|
||||
"Script": "Manuskript",
|
||||
@@ -807,7 +806,7 @@
|
||||
"Socks4": "Strømper 4",
|
||||
"Socks5": "Socks5 (Understøtter TOR)",
|
||||
"SomeResultsHiddenFilter": "Nogle resultater skjules af det anvendte filter",
|
||||
"SorryThatMovieCannotBeFound": "Beklager, den film kan ikke findes.",
|
||||
"MovieCannotBeFound": "Beklager, den film kan ikke findes.",
|
||||
"Sort": "Sortere",
|
||||
"Source": "Kilde",
|
||||
"SourcePath": "Kildesti",
|
||||
@@ -829,7 +828,7 @@
|
||||
"Sunday": "Søndag",
|
||||
"Table": "Tabel",
|
||||
"TableOptions": "Tabelindstillinger",
|
||||
"TableOptionsColumnsMessage": "Vælg hvilke kolonner der er synlige og hvilken rækkefølge de vises i",
|
||||
"TableColumnsHelpText": "Vælg hvilke kolonner der er synlige og hvilken rækkefølge de vises i",
|
||||
"TagDetails": "Etiketdetaljer - {label}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tag bruges ikke og kan slettes",
|
||||
"Tags": "Mærker",
|
||||
@@ -940,7 +939,7 @@
|
||||
"MissingMonitoredAndConsideredAvailable": "Mangler (overvåges)",
|
||||
"MissingNotMonitored": "Mangler (ikke overvåget)",
|
||||
"MoveMovieFoldersToNewPath": "Vil du flytte filmfilerne fra '{0}' til '{1}'?",
|
||||
"MovieDetailsPreviousMovie": "Filmdetaljer: Forrige film",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Filmdetaljer: Forrige film",
|
||||
"MovieEditor": "Filmredaktør",
|
||||
"MovieExcludedFromAutomaticAdd": "Film ekskluderet fra automatisk tilføjelse",
|
||||
"Search": "Søg",
|
||||
@@ -1109,5 +1108,8 @@
|
||||
"Mixed": "Fast",
|
||||
"ImportListsTraktSettingsCertification": "Certifikation",
|
||||
"ImportListsTraktSettingsGenres": "Genrer",
|
||||
"ImportListsTraktSettingsRating": "Bedømmelse"
|
||||
"ImportListsTraktSettingsRating": "Bedømmelse",
|
||||
"AddANewPath": "Tilføj en ny sti",
|
||||
"AddCustomFilter": "Tilføj tilpasset filter",
|
||||
"Tba": "Afventer"
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
"Time": "Zeit",
|
||||
"TestAll": "Alle prüfen",
|
||||
"Test": "Prüfen",
|
||||
"TableOptionsColumnsMessage": "Wähle aus welche Spalten angezeigt werden und in welcher Reihenfolge",
|
||||
"TableColumnsHelpText": "Wähle aus welche Spalten angezeigt werden und in welcher Reihenfolge",
|
||||
"TableOptions": "Tabellenoptionen",
|
||||
"Source": "Quelle",
|
||||
"Shutdown": "Herunterfahren",
|
||||
@@ -237,7 +237,7 @@
|
||||
"Error": "Fehler",
|
||||
"ConnectionLost": "Verbindung unterbrochen",
|
||||
"Component": "Komponente",
|
||||
"Columns": "Spalten",
|
||||
"TableColumns": "Spalten",
|
||||
"Close": "Schließen",
|
||||
"AudioInfo": "Audioinformationen",
|
||||
"Cancel": "Abbrechen",
|
||||
@@ -483,7 +483,7 @@
|
||||
"ShowTitleHelpText": "Filmtitel unter dem Plakat anzeigen",
|
||||
"ShowUnknownMovieItems": "Unzugeordente Filmeinträge anzeigen",
|
||||
"SkipFreeSpaceCheck": "Prüfung des freien Speichers überspringen",
|
||||
"SorryThatMovieCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.",
|
||||
"MovieCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.",
|
||||
"SourcePath": "Quellpfad",
|
||||
"SourceRelativePath": "Relativer Quellpfad",
|
||||
"SslCertPassword": "SSL Zertifikat Passwort",
|
||||
@@ -610,7 +610,7 @@
|
||||
"ImportFailed": "Import fehlgeschlagen: {0}",
|
||||
"HiddenClickToShow": "Versteckt, zum Anzeigen anklicken",
|
||||
"GrabReleaseMessageText": "{appName} konnte nicht bestimmen, für welchen Film dieser Release ist. {appName} könnte diesen Release möglicherweise nicht automatisch importieren. Möchtest du '{0}' grabben?",
|
||||
"GoToInterp": "Zu {0} gehen",
|
||||
"MovieDetailsGoTo": "Zu {0} gehen",
|
||||
"ExistingTag": "Vorhandener Tag",
|
||||
"ExcludeMovie": "Film ausschließen",
|
||||
"SearchIsNotSupportedWithThisIndexer": "Suche wird von diesem Indexer nicht unterstützt",
|
||||
@@ -684,7 +684,7 @@
|
||||
"SupportedIndexersMoreInfo": "Für mehr Infomationen klicke auf die Info-Knöpfe.",
|
||||
"SupportedListsMoreInfo": "Für mehr Infomationen klicke auf die Info-Knöpfe.",
|
||||
"SupportedDownloadClientsMoreInfo": "Für mehr Informationen zu den einzelnen Download-Clients klicke auf die 'Mehr Infos'-Schaltflächen.",
|
||||
"FilterPlaceHolder": "Filme suchen",
|
||||
"FilterMoviePlaceholder": "Filme suchen",
|
||||
"FailedLoadingSearchResults": "Suchergebnisse konnten nicht geladen werden, bitte erneut versuchen.",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Beispiele: '.sub, .nfo' oder 'sub,nfo'",
|
||||
"ExtraFileExtensionsHelpText": "Kommagetrennte Liste von zusätzlichen Dateien, die importiert werden sollen (.nfo wird als .nfo-orig importiert)",
|
||||
@@ -717,15 +717,15 @@
|
||||
"Disabled": "Deaktiviert",
|
||||
"AutomaticSearch": "Automatische Suche",
|
||||
"AddIndexer": "Indexer hinzufügen",
|
||||
"SaveSettings": "Einstellungen speichern",
|
||||
"OpenThisModal": "Dieses Modal öffnen",
|
||||
"MovieIndexScrollTop": "Filmindex: Nach oben scrollen",
|
||||
"MovieIndexScrollBottom": "Filmindex: Nach unten scrollen",
|
||||
"MovieDetailsPreviousMovie": "Film Details: Vorheriger Film",
|
||||
"MovieDetailsNextMovie": "Film Details: Nächster Film",
|
||||
"FocusSearchBox": "Suchbox fokussieren",
|
||||
"CloseCurrentModal": "Momentanes Modal schließen",
|
||||
"AcceptConfirmationModal": "Bestätigung akzeptieren Modal",
|
||||
"KeyboardShortcutsSaveSettings": "Einstellungen speichern",
|
||||
"KeyboardShortcutsOpenModal": "Dieses Modal öffnen",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Filmindex: Nach oben scrollen",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Filmindex: Nach unten scrollen",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Film Details: Vorheriger Film",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Film Details: Nächster Film",
|
||||
"KeyboardShortcutsFocusSearchBox": "Suchbox fokussieren",
|
||||
"KeyboardShortcutsCloseModal": "Momentanes Modal schließen",
|
||||
"KeyboardShortcutsConfirmModal": "Bestätigung akzeptieren Modal",
|
||||
"StartSearchForMissingMovie": "Suche für fehlenden Film starten",
|
||||
"StartImport": "Import starten",
|
||||
"SearchFailedPleaseTryAgainLater": "Suche fehlgeschlagen, bitte versuche es später nocheinmal.",
|
||||
@@ -878,7 +878,6 @@
|
||||
"HomePage": "Hauptseite",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Dies wird auch den Filmordner nach dem Filmordnerformat aus den Einstellungen umbenennen.",
|
||||
"FeatureRequests": "Feature Anfragen",
|
||||
"FailedToLoadMovieFromAPI": "Film konnte nicht über die API geladen werden",
|
||||
"ExternalUpdater": "{appName} ist so konfiguriert, dass es einen externen Aktualisierungsmechanismus verwendet",
|
||||
"ExcludeTitle": "{0} ausschließen? Dies wird {appName} daran hindern, es automatisch beim Listen synchronisieren hinzuzufügen.",
|
||||
"ErrorRestoringBackup": "Fehler beim Wiederherstellen der Sicherung",
|
||||
@@ -1066,8 +1065,8 @@
|
||||
"OnHealthRestored": "Bei Wiederherstellung der Gesundheit",
|
||||
"Loading": "Lade",
|
||||
"UpdateFiltered": "Update gefiltert",
|
||||
"ThereWasAnErrorLoadingThisItem": "Beim Laden des Eintrags ist ein Fehler aufgetreten",
|
||||
"ThereWasAnErrorLoadingThisPage": "Beim Laden der Seite ist ein Fehler aufgetreten",
|
||||
"ErrorLoadingItem": "Beim Laden des Eintrags ist ein Fehler aufgetreten",
|
||||
"ErrorLoadingPage": "Beim Laden der Seite ist ein Fehler aufgetreten",
|
||||
"DeleteRemotePathMapping": "Remote-Pfad-Zuordnung löschen",
|
||||
"RemoveSelectedItemQueueMessageText": "Bist du sicher, dass du ein Eintrag aus der Warteschlange entfernen willst?",
|
||||
"RemoveSelectedItemsQueueMessageText": "Bist du sicher, dass du {selectedCount} Einträge aus der Warteschlange entfernen willst?",
|
||||
@@ -1910,5 +1909,37 @@
|
||||
"ImportListsTraktSettingsWatchListSorting": "Sortierung der Gesehenen Liste",
|
||||
"ImportListsTraktSettingsUserListUsernameHelpText": "Benutzername für die Liste, von der du importieren möchtest (leer lassen, um den Authentifizierten Benutzer zu verwenden)",
|
||||
"ImportListsTraktSettingsWatchListSortingHelpText": "Wenn der Listentyp 'Gesehen' ist, wähle die Reihenfolge, in der die Liste sortiert werden soll",
|
||||
"EditMovieModalHeader": "Bearbeiten - {title}"
|
||||
"EditMovieModalHeader": "Bearbeiten - {title}",
|
||||
"FilterDoesNotEndWith": "endet nicht mit",
|
||||
"FilterDoesNotStartWith": "beginnt nicht mit",
|
||||
"FilterEndsWith": "endet mit",
|
||||
"FilterInNext": "im nächsten",
|
||||
"FilterIs": "ist",
|
||||
"FilterIsAfter": "ist nach",
|
||||
"FilterIsBefore": "ist vor",
|
||||
"FilterIsNot": "ist nicht",
|
||||
"FilterLessThan": "weniger als",
|
||||
"FilterNotInLast": "nicht im letzten",
|
||||
"FilterNotInNext": "nicht im nächsten",
|
||||
"FilterStartsWith": "beginnt mit",
|
||||
"Umask775Description": "{octal} – Eigentümer und Gruppe schreiben, andere lesen",
|
||||
"AddANewPath": "Neuen Pfad hinzufügen",
|
||||
"AddCustomFilter": "Eigenen Filter hinzufügen",
|
||||
"ErrorLoadingContent": "Es ist ein Fehler beim Laden dieses Inhalts aufgetreten",
|
||||
"FilterContains": "enthält",
|
||||
"FilterDoesNotContain": "enthält nicht",
|
||||
"FilterEqual": "gleich",
|
||||
"FilterGreaterThan": "größer als",
|
||||
"FilterGreaterThanOrEqual": "größer als oder gleich",
|
||||
"FilterInLast": "im letzten",
|
||||
"FilterLessThanOrEqual": "kleiner als oder gleich",
|
||||
"FilterNotEqual": "nicht gleich",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} frei",
|
||||
"SearchForQuery": "Suche nach {query}",
|
||||
"Tba": "TBA",
|
||||
"TotalRecords": "Gesamtzahl der Datensätze: {totalRecords}",
|
||||
"Umask750Description": "{octal} – Besitzer schreibt, Gruppe liest",
|
||||
"Umask755Description": "{octal} – Besitzer schreibt, alle anderen lesen",
|
||||
"Umask770Description": "{octal} – Besitzer und Gruppe schreiben",
|
||||
"Umask777Description": "{octal} – Jeder schreibt"
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
"AddNewTmdbIdMessage": "Μπορείτε επίσης να ψάξετε μέσω του TMDB Id της ταινίας. π.χ. tmdb:71663",
|
||||
"AddNewMessage": "Είναι εύκολο να προσθέσετε μια καινούρια ταινία, απλά πληκτρολογήστε το όνομα της ταινίας",
|
||||
"Component": "Στοιχείο",
|
||||
"Columns": "Στήλες",
|
||||
"TableColumns": "Στήλες",
|
||||
"Close": "Κλείσιμο",
|
||||
"Cancel": "Ακύρωση",
|
||||
"AudioInfo": "Στοιχεία ήχου",
|
||||
@@ -130,7 +130,7 @@
|
||||
"ProxyPasswordHelpText": "Πρέπει να εισαγάγετε ένα όνομα χρήστη και έναν κωδικό πρόσβασης μόνο εάν απαιτείται. Αφήστε τα κενά διαφορετικά.",
|
||||
"RemovedFromTaskQueue": "Καταργήθηκε από την ουρά εργασιών",
|
||||
"ReplaceIllegalCharactersHelpText": "Αντικαταστήστε τους παράνομους χαρακτήρες. Εάν δεν είναι επιλεγμένο, το {appName} θα τα καταργήσει",
|
||||
"SorryThatMovieCannotBeFound": "Δυστυχώς, δεν είναι δυνατή η εύρεση αυτής της ταινίας.",
|
||||
"MovieCannotBeFound": "Δυστυχώς, δεν είναι δυνατή η εύρεση αυτής της ταινίας.",
|
||||
"Source": "Πηγή",
|
||||
"ICalTagsMoviesHelpText": "Ισχύει για ταινίες με τουλάχιστον μία αντίστοιχη ετικέτα",
|
||||
"TheLogLevelDefault": "Το επίπεδο καταγραφής είναι από προεπιλογή σε «Πληροφορίες» και μπορεί να αλλάξει",
|
||||
@@ -151,7 +151,7 @@
|
||||
"MovieNaming": "Ονομασία ταινιών",
|
||||
"NotMonitored": "Δεν παρακολουθείται",
|
||||
"NoUpdatesAreAvailable": "Δεν υπάρχουν διαθέσιμες ενημερώσεις",
|
||||
"AcceptConfirmationModal": "Αποδοχή Modal επιβεβαίωσης",
|
||||
"KeyboardShortcutsConfirmModal": "Αποδοχή Modal επιβεβαίωσης",
|
||||
"DatabaseMigration": "Μετεγκατάσταση DB",
|
||||
"AddDownloadClient": "Προσθήκη προγράμματος-πελάτη λήψης",
|
||||
"AddedToDownloadQueue": "Προστέθηκε στην ουρά λήψης",
|
||||
@@ -276,7 +276,7 @@
|
||||
"OnlyUsenet": "Μόνο Usenet",
|
||||
"OnRename": "Μετονομασία",
|
||||
"OpenBrowserOnStart": "Ανοίξτε το πρόγραμμα περιήγησης κατά την έναρξη",
|
||||
"OpenThisModal": "Ανοίξτε αυτό το Modal",
|
||||
"KeyboardShortcutsOpenModal": "Ανοίξτε αυτό το Modal",
|
||||
"PendingChangesDiscardChanges": "Απορρίψτε τις αλλαγές και φύγετε",
|
||||
"PendingChangesMessage": "Έχετε μη αποθηκευμένες αλλαγές, είστε βέβαιοι ότι θέλετε να αποχωρήσετε από αυτήν τη σελίδα;",
|
||||
"PendingChangesStayReview": "Παραμείνετε και ελέγξτε τις αλλαγές",
|
||||
@@ -359,7 +359,7 @@
|
||||
"Imported": "Εισαγόμενος",
|
||||
"IllRestartLater": "Θα επανεκκινήσω αργότερα",
|
||||
"Hostname": "Όνομα κεντρικού υπολογιστή",
|
||||
"FilterPlaceHolder": "Αναζήτηση ταινιών",
|
||||
"FilterMoviePlaceholder": "Αναζήτηση ταινιών",
|
||||
"FirstDayOfWeek": "Πρώτη ημέρα της εβδομάδας",
|
||||
"Fixed": "Σταθερός",
|
||||
"Folders": "Φάκελοι",
|
||||
@@ -459,7 +459,7 @@
|
||||
"CloneCustomFormat": "Προσαρμοσμένη μορφή κλώνου",
|
||||
"CloneIndexer": "Δείκτης κλώνου",
|
||||
"CloneProfile": "Προφίλ κλώνου",
|
||||
"CloseCurrentModal": "Κλείσιμο τρέχοντος modal",
|
||||
"KeyboardShortcutsCloseModal": "Κλείσιμο τρέχοντος modal",
|
||||
"ColonReplacement": "Αντικατάσταση παχέος εντέρου",
|
||||
"Conditions": "Συνθήκες",
|
||||
"Connection": "Συνδέσεις",
|
||||
@@ -546,18 +546,17 @@
|
||||
"ExtraFileExtensionsHelpText": "Λίστα πρόσθετων αρχείων που διαχωρίζονται με κόμμα για εισαγωγή (το .nfo θα εισαχθεί ως .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Παραδείγματα: «.sub, .nfo» ή «sub, nfo»",
|
||||
"FailedLoadingSearchResults": "Αποτυχία φόρτωσης αποτελεσμάτων αναζήτησης, δοκιμάστε ξανά.",
|
||||
"FailedToLoadMovieFromAPI": "Αποτυχία φόρτωσης ταινίας από το API",
|
||||
"FeatureRequests": "Αιτήματα χαρακτηριστικών",
|
||||
"ChangeFileDateHelpText": "Αλλαγή ημερομηνίας αρχείου κατά την εισαγωγή / επανασύνδεση",
|
||||
"FileNames": "Ονόματα αρχείων",
|
||||
"FocusSearchBox": "Πλαίσιο αναζήτησης εστίασης",
|
||||
"KeyboardShortcutsFocusSearchBox": "Πλαίσιο αναζήτησης εστίασης",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Αυτό θα μετονομάσει επίσης το φάκελο ταινίας ανά μορφή φακέλου ταινίας στις ρυθμίσεις.",
|
||||
"FollowPerson": "Ακολουθήστε το άτομο",
|
||||
"SupportedListsMoreInfo": "Για περισσότερες πληροφορίες σχετικά με τις μεμονωμένες λίστες εισαγωγής, κάντε κλικ στα κουμπιά πληροφοριών.",
|
||||
"SupportedIndexersMoreInfo": "Για περισσότερες πληροφορίες σχετικά με τους μεμονωμένους δείκτες, κάντε κλικ στα κουμπιά πληροφοριών.",
|
||||
"GeneralSettings": "Γενικές Ρυθμίσεις",
|
||||
"Global": "Παγκόσμια",
|
||||
"GoToInterp": "Μετάβαση στο {0}",
|
||||
"MovieDetailsGoTo": "Μετάβαση στο {0}",
|
||||
"Grab": "Αρπάζω",
|
||||
"Grabbed": "Αρπαξε",
|
||||
"GrabRelease": "Πιάσε την απελευθέρωση",
|
||||
@@ -646,9 +645,9 @@
|
||||
"Movie": "Ταινία",
|
||||
"MovieAlreadyExcluded": "Η ταινία εξαιρείται ήδη",
|
||||
"MovieChat": "Συνομιλία ταινίας",
|
||||
"MovieDetailsNextMovie": "Λεπτομέρειες ταινίας: Επόμενη ταινία",
|
||||
"MovieIndexScrollBottom": "Ευρετήριο ταινιών: Κύλιση κάτω",
|
||||
"MovieIndexScrollTop": "Ευρετήριο ταινιών: Κύλιση στην κορυφή",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Λεπτομέρειες ταινίας: Επόμενη ταινία",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Ευρετήριο ταινιών: Κύλιση κάτω",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Ευρετήριο ταινιών: Κύλιση στην κορυφή",
|
||||
"MovieInfoLanguage": "Γλώσσα πληροφοριών ταινίας",
|
||||
"MovieInvalidFormat": "Ταινία: Μη έγκυρη μορφή",
|
||||
"MovieIsOnImportExclusionList": "Η ταινία βρίσκεται στη λίστα εξαίρεσης εισαγωγής",
|
||||
@@ -743,7 +742,7 @@
|
||||
"Runtime": "Χρόνος εκτέλεσης",
|
||||
"Save": "Σώσει",
|
||||
"SaveChanges": "Αποθήκευσε τις αλλαγές",
|
||||
"SaveSettings": "Αποθήκευση ρυθμίσεων",
|
||||
"KeyboardShortcutsSaveSettings": "Αποθήκευση ρυθμίσεων",
|
||||
"Scheduled": "Προγραμματισμένος",
|
||||
"Score": "Σκορ",
|
||||
"Script": "Γραφή",
|
||||
@@ -831,7 +830,7 @@
|
||||
"Sunday": "Κυριακή",
|
||||
"Table": "Τραπέζι",
|
||||
"TableOptions": "Επιλογές πίνακα",
|
||||
"TableOptionsColumnsMessage": "Επιλέξτε ποιες στήλες είναι ορατές και με ποια σειρά εμφανίζονται",
|
||||
"TableColumnsHelpText": "Επιλέξτε ποιες στήλες είναι ορατές και με ποια σειρά εμφανίζονται",
|
||||
"TagDetails": "Λεπτομέρειες ετικέτας - {0}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Η ετικέτα δεν χρησιμοποιείται και μπορεί να διαγραφεί",
|
||||
"Tags": "Ετικέτες",
|
||||
@@ -940,7 +939,7 @@
|
||||
"MissingMonitoredAndConsideredAvailable": "Λείπει (παρακολουθείται)",
|
||||
"MissingNotMonitored": "Λείπει (Χωρίς παρακολούθηση)",
|
||||
"MoveMovieFoldersToNewPath": "Θέλετε να μετακινήσετε τα αρχεία ταινιών από το \"{0}\" στο \"{1}\";",
|
||||
"MovieDetailsPreviousMovie": "Λεπτομέρειες ταινίας: Προηγούμενη ταινία",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Λεπτομέρειες ταινίας: Προηγούμενη ταινία",
|
||||
"MovieEditor": "Πρόγραμμα επεξεργασίας ταινιών",
|
||||
"MovieExcludedFromAutomaticAdd": "Η ταινία εξαιρείται από την αυτόματη προσθήκη",
|
||||
"Search": "Αναζήτηση",
|
||||
@@ -1068,12 +1067,12 @@
|
||||
"ImportScriptPath": "Εισαγωγή Μονοπατιού Script",
|
||||
"ImportUsingScript": "Εισαγωγή με χρήση Script",
|
||||
"ImportScriptPathHelpText": "Μονοπάτι για το script που θα χρησιμοποιηθεί για την εισαγωγή",
|
||||
"ThereWasAnErrorLoadingThisItem": "Υπήρξε ένα σφάλμα κατά τη φόρτωση του αρχείου",
|
||||
"ErrorLoadingItem": "Υπήρξε ένα σφάλμα κατά τη φόρτωση του αρχείου",
|
||||
"Loading": "Φόρτωση",
|
||||
"EditSelectedMovies": "Επεξεργασία Επιλεγμένων Ταινιών",
|
||||
"ApiKeyValidationHealthCheckMessage": "Παρακαλούμε ενημερώστε το κλείδι API ώστε να έχει τουλάχιστον {length} χαρακτήρες. Μπορείτε να το κάνετε αυτό μέσα από τις ρυθμίσεις ή το αρχείο ρυθμίσεων",
|
||||
"StopSelecting": "Διακοπή Επιλογής",
|
||||
"ThereWasAnErrorLoadingThisPage": "Υπήρξε ένα σφάλμα κατά τη φόρτωση της σελίδας",
|
||||
"ErrorLoadingPage": "Υπήρξε ένα σφάλμα κατά τη φόρτωση της σελίδας",
|
||||
"DeleteRemotePathMapping": "Επεξεργασία αντιστοίχισης απομακρυσμένης διαδρομής",
|
||||
"DeleteRemotePathMappingMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την αντιστοίχιση απομακρυσμένης διαδρομής;",
|
||||
"MovieMatchType": "Τύπος αντιστοίχισης ταινίας",
|
||||
@@ -1245,5 +1244,7 @@
|
||||
"Mixed": "Σταθερός",
|
||||
"ImportListsTraktSettingsCertification": "Πιστοποιητικό",
|
||||
"ImportListsTraktSettingsGenres": "Είδη",
|
||||
"ImportListsTraktSettingsRating": "Ακροαματικότητα"
|
||||
"ImportListsTraktSettingsRating": "Ακροαματικότητα",
|
||||
"ErrorLoadingContent": "Υπήρξε ένα σφάλμα κατά τη φόρτωση του αρχείου",
|
||||
"Tba": "TBA"
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"About": "About",
|
||||
"AcceptConfirmationModal": "Accept Confirmation Modal",
|
||||
"Actions": "Actions",
|
||||
"Activity": "Activity",
|
||||
"Add": "Add",
|
||||
"AddANewPath": "Add a new path",
|
||||
"AddAutoTag": "Add Auto Tag",
|
||||
"AddAutoTagError": "Unable to add a new auto tag, please try again.",
|
||||
"AddCondition": "Add Condition",
|
||||
@@ -11,6 +11,7 @@
|
||||
"AddConditionImplementation": "Add Condition - {implementationName}",
|
||||
"AddConnection": "Add Connection",
|
||||
"AddConnectionImplementation": "Add Connection - {implementationName}",
|
||||
"AddCustomFilter": "Add Custom Filter",
|
||||
"AddCustomFormat": "Add Custom Format",
|
||||
"AddCustomFormatError": "Unable to add a new custom format, please try again.",
|
||||
"AddDelayProfile": "Add Delay Profile",
|
||||
@@ -221,7 +222,6 @@
|
||||
"CloneIndexer": "Clone Indexer",
|
||||
"CloneProfile": "Clone Profile",
|
||||
"Close": "Close",
|
||||
"CloseCurrentModal": "Close Current Modal",
|
||||
"Collection": "Collection",
|
||||
"CollectionOptions": "Collection Options",
|
||||
"CollectionShowDetailsHelpText": "Show collection status and properties",
|
||||
@@ -230,7 +230,6 @@
|
||||
"Collections": "Collections",
|
||||
"ColonReplacement": "Colon Replacement",
|
||||
"ColonReplacementFormatHelpText": "Change how {appName} handles colon replacement",
|
||||
"Columns": "Columns",
|
||||
"Complete": "Complete",
|
||||
"Completed": "Completed",
|
||||
"CompletedDownloadHandling": "Completed Download Handling",
|
||||
@@ -538,7 +537,7 @@
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Download clients unavailable due to failures: {downloadClientNames}",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Transmission location",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Adds a prefix to the {clientName} rpc url, eg {url}, defaults to '{defaultUrl}'",
|
||||
"DownloadClientUTorrentProviderMessage": "Because uTorrent is known for cryptoware, malware and ads we'd suggest switching to a better client like qBittorrent, Deluge or ruTorrent.",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent has a history of including cryptominers, malware and ads, we strongly encourage you to choose a different client.",
|
||||
"DownloadClientUTorrentTorrentStateError": "uTorrent is reporting an error",
|
||||
"DownloadClientUnavailable": "Download Client Unavailable",
|
||||
"DownloadClientValidationApiKeyIncorrect": "API Key Incorrect",
|
||||
@@ -627,7 +626,10 @@
|
||||
"Enabled": "Enabled",
|
||||
"Ended": "Ended",
|
||||
"Error": "Error",
|
||||
"ErrorLoadingContent": "There was an error loading this content",
|
||||
"ErrorLoadingContents": "Error loading contents",
|
||||
"ErrorLoadingItem": "There was an error loading this item",
|
||||
"ErrorLoadingPage": "There was an error loading this page",
|
||||
"ErrorRestoringBackup": "Error restoring backup",
|
||||
"EventType": "Event Type",
|
||||
"Events": "Events",
|
||||
@@ -651,7 +653,6 @@
|
||||
"FailedDownloadHandling": "Failed Download Handling",
|
||||
"FailedLoadingSearchResults": "Failed to load search results, please try again.",
|
||||
"FailedToFetchUpdates": "Failed to fetch updates",
|
||||
"FailedToLoadMovieFromAPI": "Failed to load movie from API",
|
||||
"FailedToUpdateSettings": "Failed to update settings",
|
||||
"Fallback": "Fallback",
|
||||
"False": "False",
|
||||
@@ -668,11 +669,30 @@
|
||||
"Filename": "Filename",
|
||||
"Files": "Files",
|
||||
"Filter": "Filter",
|
||||
"FilterPlaceHolder": "Search movies",
|
||||
"FilterContains": "contains",
|
||||
"FilterDoesNotContain": "does not contain",
|
||||
"FilterDoesNotEndWith": "does not end with",
|
||||
"FilterDoesNotStartWith": "does not start with",
|
||||
"FilterEndsWith": "ends with",
|
||||
"FilterEqual": "equal",
|
||||
"FilterGreaterThan": "greater than",
|
||||
"FilterGreaterThanOrEqual": "greater than or equal",
|
||||
"FilterInLast": "in the last",
|
||||
"FilterInNext": "in the next",
|
||||
"FilterIs": "is",
|
||||
"FilterIsAfter": "is after",
|
||||
"FilterIsBefore": "is before",
|
||||
"FilterIsNot": "is not",
|
||||
"FilterLessThan": "less than",
|
||||
"FilterLessThanOrEqual": "less than or equal",
|
||||
"FilterMoviePlaceholder": "Filter movies",
|
||||
"FilterNotEqual": "not equal",
|
||||
"FilterNotInLast": "not in the last",
|
||||
"FilterNotInNext": "not in the next",
|
||||
"FilterStartsWith": "starts with",
|
||||
"Filters": "Filters",
|
||||
"FirstDayOfWeek": "First Day of Week",
|
||||
"Fixed": "Fixed",
|
||||
"FocusSearchBox": "Focus Search Box",
|
||||
"Folder": "Folder",
|
||||
"FolderNameTokens": "Folder Name Tokens",
|
||||
"Folders": "Folders",
|
||||
@@ -703,7 +723,6 @@
|
||||
"GeneralSettingsSummary": "Port, SSL, username/password, proxy, analytics and updates",
|
||||
"Genres": "Genres",
|
||||
"Global": "Global",
|
||||
"GoToInterp": "Go to {0}",
|
||||
"Grab": "Grab",
|
||||
"GrabId": "Grab ID",
|
||||
"GrabRelease": "Grab Release",
|
||||
@@ -886,6 +905,15 @@
|
||||
"InvalidUILanguage": "Your UI is set to an invalid language, correct it and save your settings",
|
||||
"KeepAndUnmonitorMovie": "Keep and Unmonitor Movie",
|
||||
"KeyboardShortcuts": "Keyboard Shortcuts",
|
||||
"KeyboardShortcutsCloseModal": "Close Current Modal",
|
||||
"KeyboardShortcutsConfirmModal": "Accept Confirmation Modal",
|
||||
"KeyboardShortcutsFocusSearchBox": "Focus Search Box",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Movie Details: Next Movie",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Movie Details: Previous Movie",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Movie Index: Scroll Bottom",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Movie Index: Scroll Top",
|
||||
"KeyboardShortcutsOpenModal": "Open This Modal",
|
||||
"KeyboardShortcutsSaveSettings": "Save Settings",
|
||||
"Label": "Label",
|
||||
"LabelIsRequired": "Label is required",
|
||||
"Language": "Language",
|
||||
@@ -1042,11 +1070,11 @@
|
||||
"Movie": "Movie",
|
||||
"MovieAlreadyExcluded": "Movie already Excluded",
|
||||
"MovieAndCollection": "Movie and Collection",
|
||||
"MovieCannotBeFound": "Sorry, that movie cannot be found.",
|
||||
"MovieChat": "Movie Chat",
|
||||
"MovieCollectionFolderMultipleMissingRootsHealthCheckMessage": "Multiple root folders are missing for movie collections: {rootFoldersInfo}",
|
||||
"MovieCollectionRootFolderMissingRootHealthCheckMessage": "Missing root folder for movie collection: {rootFolderInfo}",
|
||||
"MovieDetailsNextMovie": "Movie Details: Next Movie",
|
||||
"MovieDetailsPreviousMovie": "Movie Details: Previous Movie",
|
||||
"MovieDetailsGoTo": "Go to {0}",
|
||||
"MovieDownloaded": "Movie Downloaded",
|
||||
"MovieEditor": "Movie Editor",
|
||||
"MovieExcludedFromAutomaticAdd": "Movie Excluded From Automatic Add",
|
||||
@@ -1066,8 +1094,6 @@
|
||||
"MovieImported": "Movie Imported",
|
||||
"MovieImportedTooltip": "Movie downloaded successfully and picked up from download client",
|
||||
"MovieIndex": "Movie Index",
|
||||
"MovieIndexScrollBottom": "Movie Index: Scroll Bottom",
|
||||
"MovieIndexScrollTop": "Movie Index: Scroll Top",
|
||||
"MovieInfoLanguage": "Movie Info Language",
|
||||
"MovieInfoLanguageHelpText": "Language that {appName} will use for Movie Information in UI",
|
||||
"MovieInfoLanguageHelpTextWarning": "Browser Reload Required",
|
||||
@@ -1352,7 +1378,6 @@
|
||||
"OnlyTorrent": "Only Torrent",
|
||||
"OnlyUsenet": "Only Usenet",
|
||||
"OpenBrowserOnStart": "Open browser on start",
|
||||
"OpenThisModal": "Open This Modal",
|
||||
"OptionalName": "Optional name",
|
||||
"Options": "Options",
|
||||
"Or": "or",
|
||||
@@ -1612,6 +1637,7 @@
|
||||
"RootFolderCheckMultipleMessage": "Multiple root folders are missing: {rootFolderPaths}",
|
||||
"RootFolderCheckSingleMessage": "Missing root folder: {rootFolderPath}",
|
||||
"RootFolderPath": "Root Folder Path",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} Free",
|
||||
"RootFolders": "Root Folders",
|
||||
"RottenTomatoesRating": "Tomato Rating",
|
||||
"Rss": "RSS",
|
||||
@@ -1624,7 +1650,6 @@
|
||||
"RuntimeFormat": "Runtime Format",
|
||||
"Save": "Save",
|
||||
"SaveChanges": "Save Changes",
|
||||
"SaveSettings": "Save Settings",
|
||||
"Scheduled": "Scheduled",
|
||||
"Score": "Score",
|
||||
"Script": "Script",
|
||||
@@ -1641,6 +1666,7 @@
|
||||
"SearchForCutoffUnmetMoviesConfirmationCount": "Are you sure you want to search for all {totalRecords} Cutoff Unmet movies?",
|
||||
"SearchForMissing": "Search for Missing",
|
||||
"SearchForMovie": "Search for movie",
|
||||
"SearchForQuery": "Search for {query}",
|
||||
"SearchIsNotSupportedWithThisIndexer": "Search is not supported with this indexer",
|
||||
"SearchMissing": "Search Missing",
|
||||
"SearchMovie": "Search Movie",
|
||||
@@ -1663,6 +1689,7 @@
|
||||
"SelectLanguageModalTitle": "{modalTitle} - Select Language",
|
||||
"SelectLanguages": "Select Languages",
|
||||
"SelectMovie": "Select Movie",
|
||||
"SelectMovieModalTitle": "{modalTitle} - Select Movie",
|
||||
"SelectQuality": "Select Quality",
|
||||
"SelectReleaseGroup": "Select Release Group",
|
||||
"SendAnonymousUsageData": "Send Anonymous Usage Data",
|
||||
@@ -1735,7 +1762,6 @@
|
||||
"Socks4": "Socks4",
|
||||
"Socks5": "Socks5 (Support TOR)",
|
||||
"SomeResultsHiddenFilter": "Some results are hidden by the applied filter",
|
||||
"SorryThatMovieCannotBeFound": "Sorry, that movie cannot be found.",
|
||||
"Sort": "Sort",
|
||||
"Source": "Source",
|
||||
"SourcePath": "Source Path",
|
||||
@@ -1775,9 +1801,10 @@
|
||||
"TMDBId": "TMDb Id",
|
||||
"TMDb": "TMDb",
|
||||
"Table": "Table",
|
||||
"TableColumns": "Columns",
|
||||
"TableColumnsHelpText": "Choose which columns are visible and which order they appear in",
|
||||
"TableOptions": "Table Options",
|
||||
"TableOptionsButton": "Table Options Button",
|
||||
"TableOptionsColumnsMessage": "Choose which columns are visible and which order they appear in",
|
||||
"TablePageSize": "Page Size",
|
||||
"TablePageSizeHelpText": "Number of items to show on each page",
|
||||
"TablePageSizeMaximum": "Page size must not exceed {maximumValue}",
|
||||
@@ -1790,6 +1817,7 @@
|
||||
"TagsSettingsSummary": "See all tags and how they are used. Unused tags can be removed",
|
||||
"TaskUserAgentTooltip": "User-Agent provided by the app that called the API",
|
||||
"Tasks": "Tasks",
|
||||
"Tba": "TBA",
|
||||
"Test": "Test",
|
||||
"TestAll": "Test All",
|
||||
"TestAllClients": "Test All Clients",
|
||||
@@ -1799,8 +1827,6 @@
|
||||
"TheLogLevelDefault": "The log level defaults to 'Info' and can be changed in [General Settings](/settings/general)",
|
||||
"Theme": "Theme",
|
||||
"ThemeHelpText": "Change Application UI Theme, 'Auto' Theme will use your OS Theme to set Light or Dark mode. Inspired by Theme.Park",
|
||||
"ThereWasAnErrorLoadingThisItem": "There was an error loading this item",
|
||||
"ThereWasAnErrorLoadingThisPage": "There was an error loading this page",
|
||||
"ThisCannotBeCancelled": "This cannot be cancelled once started without disabling all of your indexers.",
|
||||
"Time": "Time",
|
||||
"TimeFormat": "Time Format",
|
||||
@@ -1831,6 +1857,7 @@
|
||||
"TorrentsDisabled": "Torrents Disabled",
|
||||
"TotalFileSize": "Total File Size",
|
||||
"TotalMovies": "Total Movies",
|
||||
"TotalRecords": "Total records: {totalRecords}",
|
||||
"TotalSpace": "Total Space",
|
||||
"Trace": "Trace",
|
||||
"Trailer": "Trailer",
|
||||
@@ -1849,6 +1876,11 @@
|
||||
"UiSettingsLoadError": "Unable to load UI settings",
|
||||
"UiSettingsSummary": "Calendar, date and color impaired options",
|
||||
"Umask": "Umask",
|
||||
"Umask750Description": "{octal} - Owner write, Group read",
|
||||
"Umask755Description": "{octal} - Owner write, Everyone else read",
|
||||
"Umask770Description": "{octal} - Owner & Group write",
|
||||
"Umask775Description": "{octal} - Owner & Group write, Other read",
|
||||
"Umask777Description": "{octal} - Everyone write",
|
||||
"UnableToImportAutomatically": "Unable to Import Automatically",
|
||||
"UnableToLoadCollections": "Unable to load collections",
|
||||
"UnableToLoadManualImportItems": "Unable to load manual import items",
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
"Time": "Tiempo",
|
||||
"TestAll": "Probar todo",
|
||||
"Test": "Prueba",
|
||||
"TableOptionsColumnsMessage": "Escoger qué columnas son visibles y en que orden aparecerán",
|
||||
"TableColumnsHelpText": "Escoger qué columnas son visibles y en que orden aparecerán",
|
||||
"TableOptions": "Opciones de tabla",
|
||||
"Source": "Fuente",
|
||||
"Shutdown": "Apagar",
|
||||
@@ -239,7 +239,7 @@
|
||||
"CustomFormatScore": "Puntuación de formato personalizado",
|
||||
"ConnectionLost": "Conexión perdida",
|
||||
"Component": "Componente",
|
||||
"Columns": "Columnas",
|
||||
"TableColumns": "Columnas",
|
||||
"Cancel": "Cancelar",
|
||||
"AudioInfo": "Audio Info",
|
||||
"Apply": "Aplicar",
|
||||
@@ -422,7 +422,7 @@
|
||||
"SslCertPassword": "Contraseña del Certificado SSL",
|
||||
"SourceRelativePath": "Ruta relativa de la fuente",
|
||||
"SourcePath": "Ruta de la fuente",
|
||||
"SorryThatMovieCannotBeFound": "Lo siento, no he encontrado esa película.",
|
||||
"MovieCannotBeFound": "Lo siento, no he encontrado esa película.",
|
||||
"SkipFreeSpaceCheck": "Saltar comprobación de espacio libre",
|
||||
"ShowUnknownMovieItems": "Mostrar Elementos Desconocidos",
|
||||
"ShowTitleHelpText": "Mostrar el título de la película debajo del poster",
|
||||
@@ -611,7 +611,7 @@
|
||||
"ImportFailed": "Error de importación: {sourceTitle}",
|
||||
"HiddenClickToShow": "Oculto, pulsa para mostrar",
|
||||
"GrabReleaseMessageText": "{appName} no pudo determinar para qué película es este lanzamiento. {appName} no podrá importar este lanzamiento automáticamente. ¿Quieres descargar '{0}'?",
|
||||
"GoToInterp": "Ir a {0}",
|
||||
"MovieDetailsGoTo": "Ir a {0}",
|
||||
"ExistingTag": "Etiquetas existentes",
|
||||
"ExcludeMovie": "Excluir Película",
|
||||
"SearchIsNotSupportedWithThisIndexer": "La búsqueda no está soportada con este indexador",
|
||||
@@ -686,7 +686,7 @@
|
||||
"SupportedIndexersMoreInfo": "Para más información de indexadores individuales, pulsa en los botones de información.",
|
||||
"SupportedListsMoreInfo": "Para más información individual sobre las listas de importación, haz clic en los botones de información.",
|
||||
"SupportedDownloadClientsMoreInfo": "Para más información en los clientes de descarga individuales, haz clic en los botones de más información.",
|
||||
"FilterPlaceHolder": "Buscar películas",
|
||||
"FilterMoviePlaceholder": "Buscar películas",
|
||||
"FailedLoadingSearchResults": "Error al cargar los resultados de la búsqueda, prueba otra vez.",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Ejemplos : '.sub, .nfo' o 'sub,nfo'",
|
||||
"ExtraFileExtensionsHelpText": "Lista separada con comas de los archivos adicionales a importar (.nfo será importado como .nfo-orig)",
|
||||
@@ -718,15 +718,15 @@
|
||||
"Disabled": "Deshabilitado",
|
||||
"AutomaticSearch": "Búsqueda Automática",
|
||||
"AddIndexer": "Añadir Indexador",
|
||||
"FocusSearchBox": "Enfocar Campo de Búsqueda",
|
||||
"SaveSettings": "Guardar ajustes",
|
||||
"OpenThisModal": "Abrir esta Ventana Modal",
|
||||
"MovieIndexScrollTop": "Índice de Películas: Desplazar hacia arriba",
|
||||
"MovieIndexScrollBottom": "Índice de Películas: Desplazar hacia abajo",
|
||||
"MovieDetailsPreviousMovie": "Detalles de la película: Película Anterior",
|
||||
"MovieDetailsNextMovie": "Detalles de la película: Siguiente Película",
|
||||
"CloseCurrentModal": "Cerrar esta Ventana Modal",
|
||||
"AcceptConfirmationModal": "Aceptar Confirmación de esta Ventana Modal",
|
||||
"KeyboardShortcutsFocusSearchBox": "Enfocar Campo de Búsqueda",
|
||||
"KeyboardShortcutsSaveSettings": "Guardar ajustes",
|
||||
"KeyboardShortcutsOpenModal": "Abrir esta Ventana Modal",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Índice de Películas: Desplazar hacia arriba",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Índice de Películas: Desplazar hacia abajo",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Detalles de la película: Película Anterior",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Detalles de la película: Siguiente Película",
|
||||
"KeyboardShortcutsCloseModal": "Cerrar esta Ventana Modal",
|
||||
"KeyboardShortcutsConfirmModal": "Aceptar Confirmación de esta Ventana Modal",
|
||||
"StartSearchForMissingMovie": "Empezar a buscar por película ausente",
|
||||
"StartProcessing": "Iniciar procesamiento",
|
||||
"StartImport": "Iniciar importación",
|
||||
@@ -854,7 +854,6 @@
|
||||
"EditQualityProfile": "Editar perfil de calidad",
|
||||
"ErrorRestoringBackup": "Error restaurando la copia de seguridad",
|
||||
"ExternalUpdater": "{appName} está configurado para usar un mecanismo de actualización externo",
|
||||
"FailedToLoadMovieFromAPI": "No se pudo cargar la película desde la API",
|
||||
"FeatureRequests": "Peticiones de características",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Esto también renombrará la carpeta de películas según el formato de carpeta de películas en la configuración.",
|
||||
"IMDb": "IMDb",
|
||||
@@ -1686,7 +1685,7 @@
|
||||
"Popularity": "Popularidad",
|
||||
"OverrideGrabNoMovie": "La película debe ser seleccionada",
|
||||
"RecycleBinUnableToWriteHealthCheck": "No se pudo escribir a la carpeta de papelera de reciclaje configurada: {path}. Asegúrate de que existe esta ruta y es modificable por el usuario que ejecuta {appName}",
|
||||
"ThereWasAnErrorLoadingThisItem": "Hubo un error cargando este elemento",
|
||||
"ErrorLoadingItem": "Hubo un error cargando este elemento",
|
||||
"DownloadClientSabnzbdValidationCheckBeforeDownloadDetail": "Usar 'Verificar antes de descargar' afecta a la habilidad de {appName} para rastrear nuevas descargas. Sabnzbd recomienda 'Abortar trabajos que no pueden ser completados' en su lugar ya que es más efectivo.",
|
||||
"AddListExclusion": "Añadir lista de exclusión",
|
||||
"AddReleaseProfile": "Añadir perfil de lanzamiento",
|
||||
@@ -1695,7 +1694,7 @@
|
||||
"AutoTaggingLoadError": "No se pudo cargar el etiquetado automático",
|
||||
"DownloadClientRTorrentProviderMessage": "rTorrent no pausará torrents cuando cumplan el criterio de sembrado. {appName} manejará la eliminación automática de torrents basados en el criterio de sembrado actual en Opciones -> Indexadores solo cuando Eliminar completados esté habilitado. Después de importarlo también se establecerá {importedView} como una vista de rTorrent, lo que puede ser usado en los scripts de rTorrent para personalizar su comportamiento.",
|
||||
"DownloadClientValidationAuthenticationFailureDetail": "Por favor verifica tu usuario y contraseña. Verifica también si al host que ejecuta {appName} no se le ha bloqueado el acceso a {clientName} por limitaciones en la lista blanca en la configuración de {clientName}.",
|
||||
"ThereWasAnErrorLoadingThisPage": "Hubo un error cargando esta página",
|
||||
"ErrorLoadingPage": "Hubo un error cargando esta página",
|
||||
"MovieIsTrending": "La película es tendencia en TMDb",
|
||||
"MovieIsPopular": "La película es popular en TMDb",
|
||||
"RemotePathMappingsInfo": "El mapeo de rutas remotas es muy raramente requerido, si {appName} y tu cliente de descarga están en el mismo sistema es mejor para coincidir tus rutas. Para más información consulta la [wiki]({wikiLink}).",
|
||||
@@ -1932,6 +1931,39 @@
|
||||
"FailedAt": "Error el {date}",
|
||||
"GrabbedAt": "Capturado el {date}",
|
||||
"ReleaseSource": "Origen del lanzamiento",
|
||||
"DownloadClientUTorrentProviderMessage": "Debido a que uTorrent es conocido por el cryptoware, el malware y la publicidad, sugerimos cambiar a un cliente mejor como qBittorrent, Deluge o ruTorrent.",
|
||||
"EditMovieModalHeader": "Editar - {title}"
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent tiene un amplio historial de incluir criptomineros, malware y publicidad, por lo que recomendamos encarecidamente que elijas un cliente diferente.",
|
||||
"EditMovieModalHeader": "Editar - {title}",
|
||||
"AddCustomFilter": "Añadir Filtro Personalizado",
|
||||
"FilterDoesNotEndWith": "no termina en",
|
||||
"FilterGreaterThanOrEqual": "menor o igual que",
|
||||
"FilterInLast": "en el último",
|
||||
"FilterIsBefore": "es antes",
|
||||
"FilterIsNot": "no es",
|
||||
"FilterLessThan": "menos que",
|
||||
"FilterLessThanOrEqual": "menos o igual que",
|
||||
"FilterNotEqual": "no igual",
|
||||
"AddANewPath": "Añadir una nueva ruta",
|
||||
"ErrorLoadingContent": "Hubo un error cargando este contenido",
|
||||
"FilterContains": "contiene",
|
||||
"FilterDoesNotContain": "no contiene",
|
||||
"FilterDoesNotStartWith": "no empieza con",
|
||||
"FilterEndsWith": "termina en",
|
||||
"FilterEqual": "igual",
|
||||
"FilterGreaterThan": "mayor que",
|
||||
"FilterInNext": "en el próximo",
|
||||
"FilterIs": "es",
|
||||
"FilterIsAfter": "es después",
|
||||
"FilterNotInLast": "no en el último",
|
||||
"FilterNotInNext": "no en el próximo",
|
||||
"FilterStartsWith": "empieza con",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} libres",
|
||||
"SearchForQuery": "Buscar {query}",
|
||||
"Tba": "Por determinar",
|
||||
"TotalRecords": "Total de registros: {totalRecords}",
|
||||
"Umask750Description": "{octal} - Usuario escribe, Grupo lee",
|
||||
"Umask755Description": "{octal} - Usuario escribe, Todos los demás leen",
|
||||
"Umask770Description": "{octal} - Usuario y grupo escriben",
|
||||
"Umask775Description": "{octal} - Usuario y grupo escriben, Otros leen",
|
||||
"Umask777Description": "{octal} - Todos escriben",
|
||||
"SelectMovieModalTitle": "{modalTitle} - Seleccionar película"
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
"SetPermissionsLinuxHelpTextWarning": "Jollet ole varma mitä nämä asetukset tekevät, älä muuta niitä.",
|
||||
"RemotePathMappingRemotePathHelpText": "Latauspalvelun käyttämän kansion juurisijainti.",
|
||||
"ShowRelativeDatesHelpText": "Korvaa absoluuttiset päiväykset suhteellisilla päiväyksillä (tänään/eilen/yms.).",
|
||||
"TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys.",
|
||||
"TableColumnsHelpText": "Valitse näytettävät sarakkeet ja niiden järjestys.",
|
||||
"Time": "Aika",
|
||||
"BrowserReloadRequired": "Vaatii selaimen sivupäivityksen (F5).",
|
||||
"UiSettingsSummary": "Kalenterin, päiväyksen ja kellonajan, sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.",
|
||||
@@ -83,7 +83,7 @@
|
||||
"Day": "Päivä",
|
||||
"DatabaseMigration": "Tietokannan siirto",
|
||||
"ApiKey": "Rajapinnan avain",
|
||||
"AcceptConfirmationModal": "Hyväksy vahvistus",
|
||||
"KeyboardShortcutsConfirmModal": "Hyväksy vahvistus",
|
||||
"AvailabilityDelay": "Saatavuusviive",
|
||||
"AvailabilityDelayHelpText": "Saatavilla-päiväystä edeltävä tai seuraava viive päivinä.",
|
||||
"BackupIntervalHelpText": "Tietokannan ja asetusten automaattisen varmuuskopioinnin ajoitus.",
|
||||
@@ -172,7 +172,7 @@
|
||||
"Component": "Komponentti",
|
||||
"ColonReplacement": "Kaksoispisteen korvaus",
|
||||
"ColonReplacementFormatHelpText": "Määritä, mitä {appName} tekee tiedostonimien kaksoispisteille.",
|
||||
"Columns": "Sarakkeet",
|
||||
"TableColumns": "Sarakkeet",
|
||||
"CompletedDownloadHandling": "Valmistuneiden latausten käsittely",
|
||||
"Connection": "Yhteys",
|
||||
"CopyToClipboard": "Kopioi leikepöydälle",
|
||||
@@ -217,7 +217,7 @@
|
||||
"OnlyTorrent": "Vain Torrent",
|
||||
"OnlyUsenet": "Vain Usenet",
|
||||
"OnRename": "Uudelleennimeäminen",
|
||||
"OpenThisModal": "Avaa tämä ikkuna",
|
||||
"KeyboardShortcutsOpenModal": "Avaa tämä ikkuna",
|
||||
"PendingChangesDiscardChanges": "Hylkää muutokset ja poistu",
|
||||
"PreferTorrent": "Suosi torrentia",
|
||||
"PreferUsenet": "Suosi Usenetiä",
|
||||
@@ -423,7 +423,7 @@
|
||||
"CloneIndexer": "Monista hakupalvelu",
|
||||
"CloneProfile": "Monista profiili",
|
||||
"Close": "Sulje",
|
||||
"CloseCurrentModal": "Sulje nykyinen ikkuna",
|
||||
"KeyboardShortcutsCloseModal": "Sulje nykyinen ikkuna",
|
||||
"Collection": "Kokoelma",
|
||||
"Conditions": "Ehdot",
|
||||
"Connect": "Ilmoituspalvelut",
|
||||
@@ -543,17 +543,16 @@
|
||||
"ExternalUpdater": "{appName} on määritetty käyttämään ulkoista päivitysratkaisua.",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Esimerkiksi \"sub, .nfo\" tai \"sub,nfo\".",
|
||||
"FailedLoadingSearchResults": "Hakutulosten lataus epäonnistui. Yritä uudelleen.",
|
||||
"FailedToLoadMovieFromAPI": "Elokuvan lataus rajapinnasta epäonnistui",
|
||||
"FeatureRequests": "Kehitysehdotukset",
|
||||
"ChangeFileDateHelpText": "Muuta tiedoston päiväys tuonnin/kirjaston uudelleentarkistuksen yhteydessä.",
|
||||
"FileManagement": "Tiedostojen hallinta",
|
||||
"Filename": "Tiedostonimi",
|
||||
"FileNames": "Tiedostonimet",
|
||||
"Files": "Tiedostot",
|
||||
"FilterPlaceHolder": "Suodata elokuvia",
|
||||
"FilterMoviePlaceholder": "Suodata elokuvia",
|
||||
"FirstDayOfWeek": "Viikon ensimmäinen päivä",
|
||||
"Fixed": "Korjattu",
|
||||
"FocusSearchBox": "Kohdista hakukenttä",
|
||||
"KeyboardShortcutsFocusSearchBox": "Kohdista hakukenttä",
|
||||
"Folder": "Kansio",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Tämä nimeää myös elokuvakansion uudelleen asetuksissa määritettyjen nimeämissääntöjen mukaisesti.",
|
||||
"Folders": "Kansiot",
|
||||
@@ -566,7 +565,7 @@
|
||||
"GeneralSettings": "Yleiset asetukset",
|
||||
"GeneralSettingsSummary": "Portti, SSL-salaus, käyttäjätunnus ja salasana, välityspalvelin, analytiikka ja päivitykset.",
|
||||
"Global": "Yleiset",
|
||||
"GoToInterp": "Siirry kohteeseen '{0}'",
|
||||
"MovieDetailsGoTo": "Siirry kohteeseen '{0}'",
|
||||
"Grab": "Kaappaa",
|
||||
"Grabbed": "Kaapattu",
|
||||
"GrabRelease": "Kaappaa julkaisu",
|
||||
@@ -653,9 +652,9 @@
|
||||
"MoreInfo": "Lisätietoja",
|
||||
"Movie": "Elokuva",
|
||||
"MovieAlreadyExcluded": "Elokuva on jo määritetty ohitettavaksi",
|
||||
"MovieDetailsNextMovie": "Elokuvan tiedot: Seuraava elokuva",
|
||||
"MovieIndexScrollBottom": "Elokuvakirjasto: vieritä alas",
|
||||
"MovieIndexScrollTop": "Elokuvakirjasto: vieritä ylös",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Elokuvan tiedot: Seuraava elokuva",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Elokuvakirjasto: vieritä alas",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Elokuvakirjasto: vieritä ylös",
|
||||
"MovieInfoLanguage": "Elokuvatietojen kieli",
|
||||
"MovieInvalidFormat": "Elokuva: virheellinen kaava",
|
||||
"MovieIsOnImportExclusionList": "Elokuva on tuontilistojen poikkeussäännöissä",
|
||||
@@ -748,7 +747,7 @@
|
||||
"RssSyncIntervalHelpTextWarning": "Tämä koskee kaikkia hakupalveluita. Noudata niiden asettamia sääntöjä.",
|
||||
"Save": "Tallenna",
|
||||
"SaveChanges": "Tallenna muutokset",
|
||||
"SaveSettings": "Tallenna asetukset",
|
||||
"KeyboardShortcutsSaveSettings": "Tallenna asetukset",
|
||||
"Scheduled": "Ajoitukset",
|
||||
"Score": "Pisteytys",
|
||||
"Script": "Komentosarja",
|
||||
@@ -811,7 +810,7 @@
|
||||
"Socks4": "SOCKS4",
|
||||
"Socks5": "SOCKS5 (TOR-tuki)",
|
||||
"SomeResultsHiddenFilter": "Aktiivinen suodatin piilottaa joitakin tuloksia.",
|
||||
"SorryThatMovieCannotBeFound": "Valitettavasti elokuvaa ei löydy.",
|
||||
"MovieCannotBeFound": "Valitettavasti elokuvaa ei löydy.",
|
||||
"Sort": "Järjestys",
|
||||
"Source": "Lähde",
|
||||
"SourcePath": "Lähdesijainti",
|
||||
@@ -939,7 +938,7 @@
|
||||
"MissingMonitoredAndConsideredAvailable": "Puuttuu (valvotaan)",
|
||||
"MissingNotMonitored": "Puuttuu (valvomattomat)",
|
||||
"MoveMovieFoldersToNewPath": "Haluatko siirtää elokuvatiedostot lähteestä \"{originalPath}\" kohteeseen \"{destinationPath}\"?",
|
||||
"MovieDetailsPreviousMovie": "Elokuvan tiedot: Edellinen elokuva",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Elokuvan tiedot: Edellinen elokuva",
|
||||
"MovieEditor": "Elokuvien monivalinta",
|
||||
"MovieExcludedFromAutomaticAdd": "Elokuvaa ei huomioida automaattisessa lisäyksessä.",
|
||||
"Edit": "Muokkaa",
|
||||
@@ -1348,7 +1347,7 @@
|
||||
"MovieImported": "Elokuva tuotiin",
|
||||
"MovieSearchResultsLoadError": "Elokuvahaun tulosten lataus epäonnistui. Yritä myöhemmin uudelleen.",
|
||||
"ShowUnknownMovieItemsHelpText": "Näytä jonossa elokuvattomat kohteet. Tämä voi sisältää elokuvia tai mitä tahansa muuta {appName}in kategoriaan kuuluvaa.",
|
||||
"ThereWasAnErrorLoadingThisPage": "Virhe ladattaessa sivua",
|
||||
"ErrorLoadingPage": "Virhe ladattaessa sivua",
|
||||
"BlocklistAndSearchHint": "Etsi korvaavaa kohdetta kun kohde lisätään estolistalle.",
|
||||
"BlocklistMultipleOnlyHint": "Lisää estolistalle etsimättä korvaavia kohteita.",
|
||||
"NotificationsValidationUnableToSendTestMessageApiResponse": "Testiviestin lähetys ei onnistu. API vastasi: {error}",
|
||||
@@ -1462,7 +1461,7 @@
|
||||
"DownloadFailedMovieTooltip": "Elokuvan lataus epäonnistui",
|
||||
"MovieFileDeleted": "Elokuvatiedosto poistettiin",
|
||||
"MovieFileDeletedTooltip": "Elokuvatiedosto poistettiin",
|
||||
"ThereWasAnErrorLoadingThisItem": "Virhe ladattaessa kohdetta",
|
||||
"ErrorLoadingItem": "Virhe ladattaessa kohdetta",
|
||||
"Rejections": "Hylkäykset",
|
||||
"CutoffNotMet": "Katkaisutasoa ei ole saavutettu",
|
||||
"IndexerSettingsRejectBlocklistedTorrentHashes": "Hylkää estetyt torrent-hajautusarvot kaapattaessa",
|
||||
@@ -1928,10 +1927,42 @@
|
||||
"ImportListsTraktSettingsUserListTypeWatched": "Käyttäjän katseltujen lista",
|
||||
"ImportListsTraktSettingsUserListUsernameHelpText": "Listan tuontiin käytettävä käyttäjänimi. Käytä tunnistautunutta käyttäjää jättämällä tyhjäksi.",
|
||||
"ImportListsTraktSettingsWatchListSorting": "Katselulistan järjestys",
|
||||
"DownloadClientUTorrentProviderMessage": "Koska uTorrent on tunnettu crypto-, haitta- and mainossisällöstä ja sovelluksista, suosittelemme esimerkiksi qBittorrentin, Delugen ja ruTorrentin kaltaisia parempia sovelluksia.",
|
||||
"DownloadClientUTorrentProviderMessage": "Koska uTorrent on tunnettu crypto-, haitta- and mainossisällöstä ja sovelluksista, suosittelemme qBittorrentin, Delugen ja ruTorrentin kaltaisten vaihtoehtojen käyttämistä.",
|
||||
"ImportListsTraktSettingsWatchListSortingHelpText": "Jos \"Listan tyyppi\" on \"Katselu\", valitse listan järjestysperuste.",
|
||||
"BlocklistedAt": "Estetty {date}",
|
||||
"FailedAt": "Epäonnistui {date}",
|
||||
"GrabbedAt": "Kaapattu {date}",
|
||||
"EditMovieModalHeader": "Muokataan – {title}"
|
||||
"EditMovieModalHeader": "Muokataan – {title}",
|
||||
"FilterInLast": "kuluneina",
|
||||
"FilterNotInLast": "ei kuluneina",
|
||||
"FilterNotInNext": "ei seuraavina",
|
||||
"FilterStartsWith": "alkaa",
|
||||
"AddCustomFilter": "Lisää oma suodatin",
|
||||
"AddANewPath": "Lisää uusi polku",
|
||||
"ErrorLoadingContent": "Virhe ladattaessa tätä sisältöä",
|
||||
"FilterContains": "sisältää",
|
||||
"FilterDoesNotContain": "ei sisällä",
|
||||
"FilterDoesNotEndWith": "ei pääty",
|
||||
"FilterDoesNotStartWith": "päättyy",
|
||||
"FilterEndsWith": "päättyy",
|
||||
"FilterEqual": "on sama kuin",
|
||||
"FilterGreaterThan": "on suurempi kuin",
|
||||
"FilterGreaterThanOrEqual": "on suurempi kuin tai sama",
|
||||
"FilterInNext": "seuraavina",
|
||||
"FilterIs": "on",
|
||||
"FilterIsAfter": "on jälkeen",
|
||||
"FilterIsBefore": "on ennen",
|
||||
"FilterIsNot": "ei ole",
|
||||
"FilterLessThan": "on pienempi kuin",
|
||||
"FilterLessThanOrEqual": "on pienempi kuin tai sama",
|
||||
"FilterNotEqual": "ei ole sama kuin",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} vapaana",
|
||||
"SearchForQuery": "Etsi haulla {query}",
|
||||
"Tba": "Selviää myöhemmin",
|
||||
"TotalRecords": "Rivien kokonaismäärä: {totalRecords}",
|
||||
"Umask750Description": "{octal} – Omistajalla kirjoitus, ryhmällä luku",
|
||||
"Umask755Description": "{octal} – Omistajalla kirjoitus, muilla luku",
|
||||
"Umask770Description": "{octal} – Omistajalla ja ryhmällä kirjoitus",
|
||||
"Umask775Description": "{octal} – Omistajalla ja ryhmällä kirjoitus, muilla luku",
|
||||
"Umask777Description": "{octal} – Kaikilla kirjoitus"
|
||||
}
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
"Error": "Erreur",
|
||||
"ConnectionLost": "Connexion perdue",
|
||||
"Component": "Composant",
|
||||
"Columns": "Colonnes",
|
||||
"TableColumns": "Colonnes",
|
||||
"Close": "Fermer",
|
||||
"Cancel": "Annuler",
|
||||
"AudioInfo": "Info audio",
|
||||
@@ -222,7 +222,7 @@
|
||||
"Time": "Heure",
|
||||
"TestAll": "Tout tester",
|
||||
"Test": "Tester",
|
||||
"TableOptionsColumnsMessage": "Choisissez quelles colonnes sont visibles et dans quel ordre elles apparaissent",
|
||||
"TableColumnsHelpText": "Choisissez quelles colonnes sont visibles et dans quel ordre elles apparaissent",
|
||||
"TableOptions": "Options des tableaux",
|
||||
"Source": "Source",
|
||||
"Shutdown": "Éteindre",
|
||||
@@ -424,10 +424,10 @@
|
||||
"DeleteRestrictionHelpText": "Voulez-vous vraiment supprimer cette restriction ?",
|
||||
"DeleteIndexerMessageText": "Voulez-vous vraiment supprimer l'indexeur « {name} » ?",
|
||||
"CopyToClipboard": "Copier dans le presse-papier",
|
||||
"GoToInterp": "Aller à {0}",
|
||||
"MovieDetailsGoTo": "Aller à {0}",
|
||||
"SupportedListsMoreInfo": "Pour plus d'informations sur les listes d'importation individuelles, cliquez sur les boutons d'information.",
|
||||
"SupportedDownloadClientsMoreInfo": "Pour plus d'informations sur chaque client de téléchargement, cliquez sur les boutons plus d'information.",
|
||||
"FilterPlaceHolder": "Chercher les films",
|
||||
"FilterMoviePlaceholder": "Chercher les films",
|
||||
"FailedLoadingSearchResults": "Échec du chargement des résultats de la recherche, veuillez réessayer.",
|
||||
"Excluded": "Exclu",
|
||||
"Exception": "Exception",
|
||||
@@ -526,7 +526,7 @@
|
||||
"LoadingMovieCreditsFailed": "Échec du chargement des crédits du film",
|
||||
"ImportListSettings": "Paramètres liste",
|
||||
"HiddenClickToShow": "Masqué, cliquez pour afficher",
|
||||
"FocusSearchBox": "Placer le curseur sur la barre de recherche",
|
||||
"KeyboardShortcutsFocusSearchBox": "Placer le curseur sur la barre de recherche",
|
||||
"RequiredHelpText": "Cette condition {implementationName} doit être remplie pour que le format personnalisé s'applique. Dans le cas contraire, une seule correspondance avec {implementationName} suffit.",
|
||||
"ProxyBypassFilterHelpText": "Utilisez ',' comme séparateur et '*.' comme caractère générique pour les sous-domaines",
|
||||
"NegateHelpText": "Si coché, le format personnalisé ne s'appliquera pas si cette condition {implementationName} correspond.",
|
||||
@@ -606,7 +606,7 @@
|
||||
"SslCertPassword": "Mot de passe du certificat SSL",
|
||||
"SourceRelativePath": "Chemin relatif de la source",
|
||||
"SourcePath": "Chemin source",
|
||||
"SorryThatMovieCannotBeFound": "Désolé, ce film est introuvable.",
|
||||
"MovieCannotBeFound": "Désolé, ce film est introuvable.",
|
||||
"SkipFreeSpaceCheck": "Ignorer la vérification de l'espace libre",
|
||||
"ShowYear": "Afficher l'année",
|
||||
"ShowUnknownMovieItems": "Afficher les éléments de film inconnus",
|
||||
@@ -630,7 +630,7 @@
|
||||
"ListSearchOnAddMovieHelpText": "Rechercher les films de cette liste lorsqu'ils sont ajoutés à la bibliothèque",
|
||||
"SearchForMovie": "Rechercher un film",
|
||||
"ScriptPath": "Chemin du script",
|
||||
"SaveSettings": "Enregistrer les paramètres",
|
||||
"KeyboardShortcutsSaveSettings": "Enregistrer les paramètres",
|
||||
"RssSyncIntervalHelpTextWarning": "Cela s'appliquera à tous les indexeurs, veuillez suivre les règles définies par eux",
|
||||
"RssSyncInterval": "Intervalle de synchronisation RSS",
|
||||
"RssIsNotSupportedWithThisIndexer": "RSS n'est pas pris en charge avec cet indexeur",
|
||||
@@ -720,10 +720,10 @@
|
||||
"MustContain": "Doit contenir",
|
||||
"MovieYear": "Année du film",
|
||||
"MovieTitleToExcludeHelpText": "Le titre du film à exclure (peut être quelque chose de significatif)",
|
||||
"MovieIndexScrollTop": "Index des films : faire défiler vers le haut",
|
||||
"MovieIndexScrollBottom": "Index des films : faire défiler vers le bas",
|
||||
"MovieDetailsPreviousMovie": "Détails du film : Film Précédent",
|
||||
"MovieDetailsNextMovie": "Détails du film : Prochain Film",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Index des films : faire défiler vers le haut",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Index des films : faire défiler vers le bas",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Détails du film : Film Précédent",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Détails du film : Prochain Film",
|
||||
"MoviesSelectedInterp": "{count} film(s) sélectionné(s)",
|
||||
"MovieIsUnmonitored": "Le film n'est pas surveillé",
|
||||
"MovieIsOnImportExclusionList": "Film sur la liste d'exclusion d'importation",
|
||||
@@ -731,16 +731,16 @@
|
||||
"MinimumFreeSpaceHelpText": "Empêcher l'importation si elle laisse moins d'espace disque disponible que cette quantité",
|
||||
"MIA": "MIA",
|
||||
"LaunchBrowserHelpText": " Ouvrer un navigateur et accéder à la page d'accueil de {appName} au démarrage de l'application.",
|
||||
"CloseCurrentModal": "Fermer cette fenêtre modale",
|
||||
"KeyboardShortcutsCloseModal": "Fermer cette fenêtre modale",
|
||||
"AddingTag": "Ajout d'une étiquette",
|
||||
"AcceptConfirmationModal": "Accepter les modalités d'utilisation",
|
||||
"KeyboardShortcutsConfirmModal": "Accepter les modalités d'utilisation",
|
||||
"StartSearchForMissingMovie": "Lancer la recherche de film manquant",
|
||||
"StartProcessing": "Démarrer le traitement",
|
||||
"StartImport": "Démarrer l'importation",
|
||||
"SearchFailedPleaseTryAgainLater": "La recherche a échoué, veuillez réessayer plus tard.",
|
||||
"Released": "Sorti",
|
||||
"ProcessingFolders": "Dossiers de traitement",
|
||||
"OpenThisModal": "Ouvrir cette fenêtre modale",
|
||||
"KeyboardShortcutsOpenModal": "Ouvrir cette fenêtre modale",
|
||||
"NoMatchFound": "Pas de résultat trouvé !",
|
||||
"ImportRootPath": "Pointer {appName} vers le dossier contenant tous vos films, pas un en particulier. Par exemple {0} et non {1}. De plus, chaque film doit être dans son propre dossier dans la racine.",
|
||||
"ImportIncludeQuality": "Assurez-vous que vos fichiers incluent la qualité dans leurs noms de fichiers. par exemple. {0}",
|
||||
@@ -815,7 +815,6 @@
|
||||
"EditImportListExclusion": "Modifier l'exclusion de liste",
|
||||
"Enabled": "Activé",
|
||||
"ExcludeTitle": "Exclure {0} ? {appName} n'importera plus automatiquement ce film des listes de synchronisation.",
|
||||
"FailedToLoadMovieFromAPI": "Erreur lors du chargement du film via l'API",
|
||||
"FeatureRequests": "Requêtes de nouvelles fonctionnalités",
|
||||
"FileNameTokens": "Jetons de nom de fichier",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Ceci va également renommer le dossier du film par le format de dossier défini dans les paramètres.",
|
||||
@@ -1061,8 +1060,8 @@
|
||||
"File": "Fichier",
|
||||
"MovieMatchType": "Film correspond du même type",
|
||||
"Loading": "Chargement",
|
||||
"ThereWasAnErrorLoadingThisItem": "Une erreur s'est produite lors du chargement de cet élément",
|
||||
"ThereWasAnErrorLoadingThisPage": "Une erreur s'est produite lors du chargement de cette page",
|
||||
"ErrorLoadingItem": "Une erreur s'est produite lors du chargement de cet élément",
|
||||
"ErrorLoadingPage": "Une erreur s'est produite lors du chargement de cette page",
|
||||
"EditMovies": "Modifier les Films",
|
||||
"EditSelectedMovies": "Modifier films sélectionnés",
|
||||
"StopSelecting": "Effacer la sélection",
|
||||
@@ -1910,5 +1909,37 @@
|
||||
"ImportListsTraktSettingsUserListTypeWatch": "Liste de surveillance des utilisateurs",
|
||||
"ImportListsTraktSettingsUserListTypeWatched": "Liste des utilisateurs surveillés",
|
||||
"ImportListsTraktSettingsWatchListSortingHelpText": "Si le type de liste est surveillé, sélectionnez l'ordre de tri de la liste",
|
||||
"EditMovieModalHeader": "Modifier - {title}"
|
||||
"EditMovieModalHeader": "Modifier - {title}",
|
||||
"FilterDoesNotStartWith": "ne commence pas par",
|
||||
"FilterInNext": "ensuite",
|
||||
"FilterIs": "est",
|
||||
"FilterIsAfter": "est après",
|
||||
"FilterIsBefore": "est avant",
|
||||
"FilterIsNot": "n'est pas",
|
||||
"FilterStartsWith": "commence avec",
|
||||
"AddANewPath": "Ajouter un nouveau chemin",
|
||||
"AddCustomFilter": "Ajouter un filtre personnalisé",
|
||||
"ErrorLoadingContent": "Une erreur s'est produite lors du chargement de ce contenu",
|
||||
"FilterContains": "contient",
|
||||
"FilterDoesNotContain": "ne contient pas",
|
||||
"FilterDoesNotEndWith": "ne se termine pas par",
|
||||
"FilterEndsWith": "se termine par",
|
||||
"FilterEqual": "égale",
|
||||
"FilterGreaterThan": "plus grand que",
|
||||
"FilterGreaterThanOrEqual": "supérieur ou égal à",
|
||||
"FilterInLast": "à la fin",
|
||||
"FilterLessThan": "moins que",
|
||||
"FilterLessThanOrEqual": "inférieur ou égal",
|
||||
"FilterNotEqual": "inégal",
|
||||
"FilterNotInLast": "pas dans le dernier",
|
||||
"FilterNotInNext": "pas dans le prochain",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} Libre",
|
||||
"SearchForQuery": "Rechercher {query}",
|
||||
"Tba": "À déterminer",
|
||||
"TotalRecords": "Enregistrements totaux : {totalRecords}",
|
||||
"Umask750Description": "Écriture du propriétaire, lecture pour le groupe - {octal}",
|
||||
"Umask755Description": "Le propriétaire écrit, tous les autres lisent - {octal}",
|
||||
"Umask770Description": "Propriétaire et groupe écrivent - {octal}",
|
||||
"Umask775Description": "Propriétaire et groupe écrivent, autre lecture - {octal}",
|
||||
"Umask777Description": "Tout le monde écrit - {octal}"
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
"LinkHere": "כאן",
|
||||
"LogLevel": "רמת יומן",
|
||||
"MinimumAvailability": "זמינות מינימלית",
|
||||
"MovieIndexScrollTop": "אינדקס הסרטים: גלול למעלה",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "אינדקס הסרטים: גלול למעלה",
|
||||
"RecyclingBinCleanupHelpText": "הגדר ל 0 כדי להשבית ניקוי אוטומטי",
|
||||
"ReleaseDates": "תאריכי שחרור",
|
||||
"RemovedMovieCheckSingleMessage": "הסרט {movie} הוסר מ- TMDb",
|
||||
@@ -88,7 +88,7 @@
|
||||
"DownloadPropersAndRepacksHelpTextCustomFormat": "השתמש ב'אל תעדיף 'כדי למיין לפי ציון פורמט מותאם אישית על פני Propers / Repacks",
|
||||
"AddListExclusionMovieHelpText": "מנע מלהוסיף סרט לרדאר על ידי רשימות",
|
||||
"CustomFormatUnknownCondition": "מצב פורמט מותאם אישית לא ידוע '{0}'",
|
||||
"AcceptConfirmationModal": "קבל את מודל האישור",
|
||||
"KeyboardShortcutsConfirmModal": "קבל את מודל האישור",
|
||||
"AddNewMessage": "קל להוסיף סרט חדש, פשוט התחל להקליד את שם הסרט שתרצה להוסיף",
|
||||
"AddNewMovie": "הוסף סרט חדש",
|
||||
"AddCustomFormat": "הוסף פורמט מותאם אישית",
|
||||
@@ -294,7 +294,7 @@
|
||||
"OnlyTorrent": "רק סיקור",
|
||||
"OnlyUsenet": "רק Usenet",
|
||||
"OnRename": "על שינוי שם",
|
||||
"OpenThisModal": "פתח את המודאל הזה",
|
||||
"KeyboardShortcutsOpenModal": "פתח את המודאל הזה",
|
||||
"LocalPath": "נתיב מקומי",
|
||||
"Uptime": "זמן עבודה",
|
||||
"Added": "נוסף",
|
||||
@@ -420,11 +420,11 @@
|
||||
"CloneCustomFormat": "תבנית מותאמת אישית של שיבוט",
|
||||
"CloneProfile": "פרופיל שיבוט",
|
||||
"Close": "סגור",
|
||||
"CloseCurrentModal": "סגור את המודול הנוכחי",
|
||||
"KeyboardShortcutsCloseModal": "סגור את המודול הנוכחי",
|
||||
"Collection": "אוסף",
|
||||
"ColonReplacement": "החלפת המעי הגס",
|
||||
"ColonReplacementFormatHelpText": "שנה את האופן שבו {appName} מטפל בהחלפת המעי הגס",
|
||||
"Columns": "עמודות",
|
||||
"TableColumns": "עמודות",
|
||||
"CompletedDownloadHandling": "הטיפול בהורדות הושלם",
|
||||
"Conditions": "תנאים",
|
||||
"Connection": "חיבור",
|
||||
@@ -541,15 +541,14 @@
|
||||
"ExtraFileExtensionsHelpText": "רשימה מופרדת באמצעות פסיקים של קבצים נוספים לייבוא (.nfo יובא כ- nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "דוגמאות: '.sub, .nfo' או 'sub, nfo'",
|
||||
"FailedLoadingSearchResults": "טעינת תוצאות החיפוש נכשלה, נסה שוב.",
|
||||
"FailedToLoadMovieFromAPI": "טעינת הסרט נכשלה מה- API נכשלה",
|
||||
"FeatureRequests": "בקשות תכונה",
|
||||
"ChangeFileDateHelpText": "שנה את תאריך הקובץ בעת הייבוא / סריקה מחדש",
|
||||
"Filename": "שם קובץ",
|
||||
"FileNames": "שמות קבצים",
|
||||
"Files": "קבצים",
|
||||
"FilterPlaceHolder": "חפש סרטים",
|
||||
"FilterMoviePlaceholder": "חפש סרטים",
|
||||
"Fixed": "תוקן",
|
||||
"FocusSearchBox": "תיבת חיפוש פוקוס",
|
||||
"KeyboardShortcutsFocusSearchBox": "תיבת חיפוש פוקוס",
|
||||
"MoveMovieFoldersRenameFolderWarning": "זה גם ישנה את שם תיקיית הסרט לפי פורמט תיקיית הסרט בהגדרות.",
|
||||
"Folders": "תיקיות",
|
||||
"FollowPerson": "עקוב אחר האדם",
|
||||
@@ -563,7 +562,7 @@
|
||||
"GeneralSettingsSummary": "יציאה, SSL, שם משתמש / סיסמה, פרוקסי, ניתוחים ועדכונים",
|
||||
"Genres": "ז'אנרים",
|
||||
"Global": "גלוֹבָּלִי",
|
||||
"GoToInterp": "עבור אל {0}",
|
||||
"MovieDetailsGoTo": "עבור אל {0}",
|
||||
"Grab": "לִתְפּוֹס",
|
||||
"Grabbed": "תפס",
|
||||
"GrabRelease": "שחרור תפוס",
|
||||
@@ -657,8 +656,8 @@
|
||||
"Movie": "סרט",
|
||||
"MovieAlreadyExcluded": "הסרט כבר לא נכלל",
|
||||
"MovieChat": "צ'אט בסרט",
|
||||
"MovieDetailsNextMovie": "פרטי הסרט: הסרט הבא",
|
||||
"MovieIndexScrollBottom": "אינדקס סרטים: גלילה תחתונה",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "פרטי הסרט: הסרט הבא",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "אינדקס סרטים: גלילה תחתונה",
|
||||
"MovieInfoLanguage": "שפת פרטי הסרט",
|
||||
"MovieInvalidFormat": "סרט: פורמט לא חוקי",
|
||||
"MovieIsOnImportExclusionList": "הסרט נמצא ברשימת אי הכללת ייבוא",
|
||||
@@ -750,7 +749,7 @@
|
||||
"Runtime": "זמן ריצה",
|
||||
"Save": "להציל",
|
||||
"SaveChanges": "שמור שינויים",
|
||||
"SaveSettings": "שמור הגדרות",
|
||||
"KeyboardShortcutsSaveSettings": "שמור הגדרות",
|
||||
"Scheduled": "מתוזמן",
|
||||
"Score": "ציון",
|
||||
"Script": "תַסרִיט",
|
||||
@@ -812,7 +811,7 @@
|
||||
"Socks4": "גרביים 4",
|
||||
"Socks5": "Socks5 (תמיכה ב- TOR)",
|
||||
"SomeResultsHiddenFilter": "חלק מהתוצאות מוסתרות על ידי המסנן שהוחל",
|
||||
"SorryThatMovieCannotBeFound": "מצטערים, הסרט הזה לא נמצא.",
|
||||
"MovieCannotBeFound": "מצטערים, הסרט הזה לא נמצא.",
|
||||
"Sort": "סוג",
|
||||
"SourcePath": "נתיב מקור",
|
||||
"SourceRelativePath": "נתיב יחסי מקור",
|
||||
@@ -833,7 +832,7 @@
|
||||
"Sunday": "יוֹם רִאשׁוֹן",
|
||||
"Table": "שולחן",
|
||||
"TableOptions": "אפשרויות טבלה",
|
||||
"TableOptionsColumnsMessage": "בחר אילו עמודות גלויות ובאיזה סדר הן יופיעו",
|
||||
"TableColumnsHelpText": "בחר אילו עמודות גלויות ובאיזה סדר הן יופיעו",
|
||||
"TagDetails": "פרטי התג - {0}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "לא משתמשים בתג וניתן למחוק אותו",
|
||||
"Tags": "תגים",
|
||||
@@ -939,7 +938,7 @@
|
||||
"MaintenanceRelease": "שחרור תחזוקה: תיקוני באגים ושיפורים אחרים. לפרטים נוספים, ראה היסטוריית התחייבויות של Github",
|
||||
"MissingNotMonitored": "חסר (ללא פיקוח)",
|
||||
"MoveMovieFoldersToNewPath": "האם ברצונך להעביר את קובצי הסרט מ- '{0}' ל '{1}'?",
|
||||
"MovieDetailsPreviousMovie": "פרטי הסרט: הסרט הקודם",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "פרטי הסרט: הסרט הקודם",
|
||||
"MovieEditor": "עורך סרטים",
|
||||
"MovieExcludedFromAutomaticAdd": "סרט שאינו הוסף אוטומטי",
|
||||
"Search": "לחפש",
|
||||
@@ -1130,5 +1129,7 @@
|
||||
"Mixed": "תוקן",
|
||||
"ImportListsTraktSettingsCertification": "תעודה",
|
||||
"ImportListsTraktSettingsGenres": "ז'אנרים",
|
||||
"ImportListsTraktSettingsRating": "דירוגים"
|
||||
"ImportListsTraktSettingsRating": "דירוגים",
|
||||
"AddANewPath": "הוסף נתיב חדש",
|
||||
"AddCustomFilter": "הוספת פילטר מותאם"
|
||||
}
|
||||
|
||||
@@ -129,9 +129,9 @@
|
||||
"Monitor": "मॉनिटर",
|
||||
"MonitoredStatus": "नजर रखी / स्थिति",
|
||||
"Movie": "चलचित्र",
|
||||
"MovieDetailsNextMovie": "मूवी विवरण: अगली फिल्म",
|
||||
"MovieIndexScrollBottom": "मूवी इंडेक्स: नीचे स्क्रॉल करें",
|
||||
"MovieIndexScrollTop": "मूवी इंडेक्स: टॉप स्क्रॉल करें",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "मूवी विवरण: अगली फिल्म",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "मूवी इंडेक्स: नीचे स्क्रॉल करें",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "मूवी इंडेक्स: टॉप स्क्रॉल करें",
|
||||
"MultiLanguage": "बहु-भाषा",
|
||||
"NoListRecommendations": "कोई सूची आइटम या सिफारिशें नहीं मिलीं, आरंभ करने के लिए आप एक नई फिल्म जोड़ना चाहते हैं, कुछ मौजूदा चीजें आयात करेंगे, या एक सूची जोड़ें।",
|
||||
"Organize": "व्यवस्थित",
|
||||
@@ -212,7 +212,7 @@
|
||||
"StandardMovieFormat": "मानक मूवी प्रारूप",
|
||||
"StartSearchForMissingMovie": "लापता फिल्म की खोज शुरू करें",
|
||||
"SubfolderWillBeCreatedAutomaticallyInterp": "'{0}' सबफ़ोल्डर स्वचालित रूप से बनाया जाएगा",
|
||||
"TableOptionsColumnsMessage": "चुनें कि कौन से कॉलम दिखाई दे रहे हैं और वे किस क्रम में दिखाई देते हैं",
|
||||
"TableColumnsHelpText": "चुनें कि कौन से कॉलम दिखाई दे रहे हैं और वे किस क्रम में दिखाई देते हैं",
|
||||
"TagDetails": "टैग विवरण - {0}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "टैग का उपयोग नहीं किया जाता है और इसे हटाया जा सकता है",
|
||||
"ICalTagsMoviesHelpText": "कम से कम एक मिलान टैग के साथ फिल्मों पर लागू होता है",
|
||||
@@ -294,7 +294,6 @@
|
||||
"FailedDownloadHandling": "डाउनलोड हैंडलिंग विफल",
|
||||
"Failed": "अनुत्तीर्ण होना",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "उदाहरण: '.sub, .nfo' या 'सब, nfo'",
|
||||
"FailedToLoadMovieFromAPI": "API से मूवी लोड करने में विफल",
|
||||
"HaveNotAddedMovies": "आपने अभी तक कोई फ़िल्में नहीं जोड़ी हैं, क्या आप पहले कुछ या सभी फ़िल्में आयात करना चाहते हैं?",
|
||||
"HomePage": "मुख पृष्ठ",
|
||||
"ImportIncludeQuality": "सुनिश्चित करें कि आपकी फ़ाइल में उनके फ़ाइल नाम में गुणवत्ता शामिल है। जैसे {0}",
|
||||
@@ -307,7 +306,7 @@
|
||||
"UpgradesAllowed": "अपग्रेड की अनुमति है",
|
||||
"Pending": "विचाराधीन",
|
||||
"DownloadPropersAndRepacksHelpTextCustomFormat": "Propers / Repacks पर कस्टम प्रारूप स्कोर द्वारा सॉर्ट करने के लिए 'डोंट प्रेफर' का उपयोग करें",
|
||||
"AcceptConfirmationModal": "पुष्टि मोडल स्वीकार करें",
|
||||
"KeyboardShortcutsConfirmModal": "पुष्टि मोडल स्वीकार करें",
|
||||
"About": "के बारे में",
|
||||
"AddQualityProfile": "गुणवत्ता प्रोफ़ाइल जोड़ें",
|
||||
"Date": "दिनांक",
|
||||
@@ -345,7 +344,7 @@
|
||||
"AutomaticSearch": "स्वचालित खोज",
|
||||
"CustomFormatUnknownCondition": "अज्ञात कस्टम प्रारूप स्थिति '{0}'",
|
||||
"Name": "नाम",
|
||||
"OpenThisModal": "इस मोडल को खोलें",
|
||||
"KeyboardShortcutsOpenModal": "इस मोडल को खोलें",
|
||||
"ChownGroupHelpText": "समूह का नाम या गिद। दूरस्थ फ़ाइल सिस्टम के लिए gid का उपयोग करें।",
|
||||
"CleanLibraryLevel": "स्वच्छ पुस्तकालय स्तर",
|
||||
"ClientPriority": "ग्राहक प्राथमिकता",
|
||||
@@ -593,11 +592,11 @@
|
||||
"ClickToChangeLanguage": "भाषा बदलने के लिए क्लिक करें",
|
||||
"ClickToChangeMovie": "फिल्म बदलने के लिए क्लिक करें",
|
||||
"CloneProfile": "क्लोन प्रोफ़ाइल",
|
||||
"CloseCurrentModal": "वर्तमान मोडल को बंद करें",
|
||||
"KeyboardShortcutsCloseModal": "वर्तमान मोडल को बंद करें",
|
||||
"Collection": "संग्रह",
|
||||
"ColonReplacement": "कोलन रिप्लेसमेंट",
|
||||
"ColonReplacementFormatHelpText": "बदलें कि रेडर कोलन प्रतिस्थापन को कैसे संभालता है",
|
||||
"Columns": "कॉलम",
|
||||
"TableColumns": "कॉलम",
|
||||
"Conditions": "शर्तेँ",
|
||||
"Connection": "संबंध",
|
||||
"ConnectionLost": "संपर्क टूट गया",
|
||||
@@ -687,9 +686,9 @@
|
||||
"Filename": "फ़ाइल का नाम",
|
||||
"FileNames": "फ़ाइल नाम",
|
||||
"Files": "फ़ाइलें",
|
||||
"FilterPlaceHolder": "फिल्में खोजें",
|
||||
"FilterMoviePlaceholder": "फिल्में खोजें",
|
||||
"Fixed": "फिक्स्ड",
|
||||
"FocusSearchBox": "फोकस बॉक्स खोजें",
|
||||
"KeyboardShortcutsFocusSearchBox": "फोकस बॉक्स खोजें",
|
||||
"Folder": "फ़ोल्डर",
|
||||
"Folders": "फ़ोल्डर",
|
||||
"FollowPerson": "व्यक्ति का पालन करें",
|
||||
@@ -700,7 +699,7 @@
|
||||
"GeneralSettings": "सामान्य सेटिंग्स",
|
||||
"Genres": "शैलियां",
|
||||
"Global": "वैश्विक",
|
||||
"GoToInterp": "{0} पर जाएं",
|
||||
"MovieDetailsGoTo": "{0} पर जाएं",
|
||||
"Grab": "लपकना",
|
||||
"Grabbed": "पकड़ा",
|
||||
"GrabRelease": "पकड़ो रिलीज",
|
||||
@@ -820,7 +819,7 @@
|
||||
"RssSyncInterval": "RSS सिंक अंतराल",
|
||||
"Runtime": "क्रम",
|
||||
"Save": "सहेजें",
|
||||
"SaveSettings": "समायोजन बचाओ",
|
||||
"KeyboardShortcutsSaveSettings": "समायोजन बचाओ",
|
||||
"Script": "लिपि",
|
||||
"ScriptPath": "पटकथा पथ",
|
||||
"SearchAll": "सभी खोजें",
|
||||
@@ -861,7 +860,7 @@
|
||||
"SkipFreeSpaceCheck": "फ्री स्पेस चेक छोड़ें",
|
||||
"Small": "छोटा",
|
||||
"SomeResultsHiddenFilter": "कुछ परिणाम लागू फ़िल्टर द्वारा छिपे हुए हैं",
|
||||
"SorryThatMovieCannotBeFound": "क्षमा करें, वह फिल्म नहीं मिल रही है।",
|
||||
"MovieCannotBeFound": "क्षमा करें, वह फिल्म नहीं मिल रही है।",
|
||||
"Sort": "तरह",
|
||||
"Source": "स्रोत",
|
||||
"SourcePath": "स्रोत पथ",
|
||||
@@ -941,7 +940,7 @@
|
||||
"Yesterday": "बिता कल",
|
||||
"MaintenanceRelease": "रखरखाव रिलीज: बग फिक्स और अन्य सुधार। अधिक जानकारी के लिए गितुब कमिट इतिहास देखें",
|
||||
"MissingNotMonitored": "अनुपलब्ध (अज्ञात)",
|
||||
"MovieDetailsPreviousMovie": "मूवी का विवरण: पिछला मूवी",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "मूवी का विवरण: पिछला मूवी",
|
||||
"MovieEditor": "मूवी एडिटर",
|
||||
"Edit": "संपादित करें",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "वर्तमान में स्थापित SQLite संस्करण {0} अब समर्थित नहीं है। कृपया SQLite को कम से कम संस्करण {1} में अपग्रेड करें।",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"Actions": "Akcije",
|
||||
"AddedToDownloadQueue": "Dodano u red za preuzimanje",
|
||||
"Activity": "Aktivnost",
|
||||
"AcceptConfirmationModal": "Prihvati Modal Potvrde",
|
||||
"KeyboardShortcutsConfirmModal": "Prihvati Modal Potvrde",
|
||||
"AddCustomFormat": "Dodaj Prilagođeni Format",
|
||||
"AddDelayProfile": "Dodaj Profil Odgode",
|
||||
"AddDownloadClient": "Dodaj Klijenta za Preuzimanje",
|
||||
@@ -219,7 +219,7 @@
|
||||
"CloneIndexer": "Kloniraj Indekser",
|
||||
"CloneProfile": "Kloniraj Profil",
|
||||
"Close": "Zatvori",
|
||||
"CloseCurrentModal": "Zatvori Trenutni Modal",
|
||||
"KeyboardShortcutsCloseModal": "Zatvori Trenutni Modal",
|
||||
"CollectionOptions": "Opcije Kolekcije",
|
||||
"CollectionShowDetailsHelpText": "Prikaži status i svojstva kolekcije",
|
||||
"CollectionShowOverviewsHelpText": "Prikaži pregled kolekcije",
|
||||
@@ -227,7 +227,7 @@
|
||||
"CountCollectionsSelected": "{count} Kolekcija odabrano",
|
||||
"ColonReplacement": "Zamjena Zareza",
|
||||
"ColonReplacementFormatHelpText": "izmijeni kako {appName} upravlja zamjenama zareza",
|
||||
"Columns": "Stupci",
|
||||
"TableColumns": "Stupci",
|
||||
"DeleteBackupMessageText": "Jeste li sigurni da želite obrisati oznaku formata {0}?",
|
||||
"DeleteCustomFormat": "Kloniraj Prilagođeni Format",
|
||||
"DeleteDownloadClientMessageText": "Jeste li sigurni da želite obrisati oznaku formata {0}?",
|
||||
@@ -275,7 +275,7 @@
|
||||
"Style": "Stil",
|
||||
"Save": "Spremi",
|
||||
"SaveChanges": "Spremi izmjene",
|
||||
"SaveSettings": "Spremi postavke",
|
||||
"KeyboardShortcutsSaveSettings": "Spremi postavke",
|
||||
"Options": "Opcije",
|
||||
"Security": "Sigurnost",
|
||||
"SelectAll": "Odaberi sve",
|
||||
|
||||
@@ -111,9 +111,9 @@
|
||||
"Conditions": "Állapot",
|
||||
"Component": "Összetevő",
|
||||
"CompletedDownloadHandling": "Befejezett letöltéskezelés",
|
||||
"Columns": "Oszlopok",
|
||||
"TableColumns": "Oszlopok",
|
||||
"Collection": "Kollekció",
|
||||
"CloseCurrentModal": "Aktuális Mód Bezárása",
|
||||
"KeyboardShortcutsCloseModal": "Aktuális Mód Bezárása",
|
||||
"Close": "Bezárás",
|
||||
"CloneProfile": "Profil klónozása",
|
||||
"CloneIndexer": "Indexelő klónozása",
|
||||
@@ -170,7 +170,7 @@
|
||||
"ApiKey": "API Kulcs",
|
||||
"All": "Összes",
|
||||
"Agenda": "Teendők",
|
||||
"AcceptConfirmationModal": "Változás Megerősítése",
|
||||
"KeyboardShortcutsConfirmModal": "Változás Megerősítése",
|
||||
"Apply": "Alkamaz",
|
||||
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges az alkalmazás adatok törlése nélkül",
|
||||
"AppDataDirectory": "AppData Könyvtár",
|
||||
@@ -188,7 +188,7 @@
|
||||
"HardlinkCopyFiles": "Hardlinkelés/Fájl(ok) Másolása",
|
||||
"Group": "Csoport",
|
||||
"GrabReleaseMessageText": "{appName} nem tudta meghatározni, hogy melyik filmhez készült ez a kiadás. Lehet, hogy a {appName} nem tudja automatikusan importálni ezt a kiadást. Meg szeretnéd ragadni a (z) „{0}”-t?",
|
||||
"GoToInterp": "Ugrás ide: {0}",
|
||||
"MovieDetailsGoTo": "Ugrás ide: {0}",
|
||||
"Genres": "Műfajok",
|
||||
"GeneralSettingsSummary": "Port, SSL, felhasználónév/jelszó, proxy, elemzések és frissítések",
|
||||
"FreeSpace": "Szabad hely",
|
||||
@@ -200,10 +200,10 @@
|
||||
"FollowPerson": "Személy Követése",
|
||||
"Folders": "Mappák",
|
||||
"Folder": "Mappa",
|
||||
"FocusSearchBox": "Fókusz Keresőmező",
|
||||
"KeyboardShortcutsFocusSearchBox": "Fókusz Keresőmező",
|
||||
"Fixed": "Rögzített",
|
||||
"FirstDayOfWeek": "A hét első napja",
|
||||
"FilterPlaceHolder": "Filmek Keresése",
|
||||
"FilterMoviePlaceholder": "Filmek Keresése",
|
||||
"Filter": "Szűrő",
|
||||
"Files": "Fájlok",
|
||||
"FileNames": "Fájlnevek",
|
||||
@@ -258,7 +258,7 @@
|
||||
"SourcePath": "Forrás útvonala",
|
||||
"Source": "Forrás",
|
||||
"Sort": "Fajta",
|
||||
"SorryThatMovieCannotBeFound": "Sajnáljuk, ez a film nem található.",
|
||||
"MovieCannotBeFound": "Sajnáljuk, ez a film nem található.",
|
||||
"SkipFreeSpaceCheck": "Kihagyja a szabad hely ellenőrzését",
|
||||
"SizeOnDisk": "Méret a lemezen",
|
||||
"Size": "Méret",
|
||||
@@ -322,7 +322,7 @@
|
||||
"Search": "Keresés",
|
||||
"ScriptPath": "Script útvonal",
|
||||
"Scheduled": "Ütemezve",
|
||||
"SaveSettings": "Beállítások mentése",
|
||||
"KeyboardShortcutsSaveSettings": "Beállítások mentése",
|
||||
"SaveChanges": "Változtatások mentése",
|
||||
"Save": "Mentés",
|
||||
"Runtime": "Futási Idő",
|
||||
@@ -456,7 +456,7 @@
|
||||
"OutputPath": "Kimeneti út",
|
||||
"Organize": "Rendezés",
|
||||
"Options": "Lehetőségek",
|
||||
"OpenThisModal": "Nyissa meg ezt a modált",
|
||||
"KeyboardShortcutsOpenModal": "Nyissa meg ezt a modált",
|
||||
"OpenBrowserOnStart": "Indításkor nyissa meg a böngészőt",
|
||||
"Ok": "Ok",
|
||||
"OAuthPopupMessage": "A böngésződ blokkolja az előugró ablakokat",
|
||||
@@ -494,16 +494,16 @@
|
||||
"MovieInfoLanguageHelpTextWarning": "Böngésző újratöltése szükséges",
|
||||
"MovieInfoLanguageHelpText": "A {appName} által a filminformációkhoz használt nyelv",
|
||||
"MovieInfoLanguage": "Film információ nyelve",
|
||||
"MovieIndexScrollTop": "Film Index: Görgess fel",
|
||||
"MovieIndexScrollBottom": "Film Index: Görgess le",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Film Index: Görgess fel",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Film Index: Görgess le",
|
||||
"MovieIndex": "Film Index",
|
||||
"MovieID": "Film ID",
|
||||
"MovieFolderFormat": "Film mappaformátum",
|
||||
"MovieFiles": "Filmfájl(ok)",
|
||||
"MovieExcludedFromAutomaticAdd": "Az automatikus hozzáadásból kizárt film",
|
||||
"MovieEditor": "Filmszerkesztő",
|
||||
"MovieDetailsPreviousMovie": "A film részletei: Előző film",
|
||||
"MovieDetailsNextMovie": "A film részletei: Következő film",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "A film részletei: Előző film",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "A film részletei: Következő film",
|
||||
"MovieAlreadyExcluded": "A film már ki lett zárva",
|
||||
"Movie": "Film",
|
||||
"MoveFiles": "Fájlok áthelyezése",
|
||||
@@ -634,7 +634,7 @@
|
||||
"Tags": "Címkék",
|
||||
"TagIsNotUsedAndCanBeDeleted": "A címke nincs használatban, törölhető",
|
||||
"TagCannotBeDeletedWhileInUse": "Használat közben nem törölhető",
|
||||
"TableOptionsColumnsMessage": "Válasszd ki, mely oszlopok legyenek láthatóak, és milyen sorrendben jelenjenek meg",
|
||||
"TableColumnsHelpText": "Válasszd ki, mely oszlopok legyenek láthatóak, és milyen sorrendben jelenjenek meg",
|
||||
"SystemTimeHealthCheckMessage": "A rendszeridő több mint 1 napja nem frissült. Előfordulhat, hogy az ütemezett feladatok az idő kijavításáig nem futnak megfelelően",
|
||||
"ColonReplacementFormatHelpText": "Változtassa meg, hogy a {appName} hogyan helyettesíti a kettőspontokat",
|
||||
"ColonReplacement": "Kettőspont Helyettesítés",
|
||||
@@ -818,7 +818,6 @@
|
||||
"Add": "Hozzáadás",
|
||||
"FileNameTokens": "Fájlnév-tokenek",
|
||||
"FeatureRequests": "Funkciókérés",
|
||||
"FailedToLoadMovieFromAPI": "Nem sikerült betölteni a filmet az API-ból",
|
||||
"ExternalUpdater": "A {appName} egy külső frissítési mechanizmus használatára van konfigurálva",
|
||||
"ExcludeTitle": "Kizárja a következőt: {0}? Ez megakadályozza, hogy a {appName} automatikusan hozzáadja a listaszinkronizáláshoz.",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Ezzel a filmmappa a filmmappa formátuma szerint is átnevezésre kerül a beállításokban.",
|
||||
@@ -1305,12 +1304,12 @@
|
||||
"RemoveMultipleFromDownloadClientHint": "Eltávolítja a letöltéseket és fájlokat a letöltési kliensből",
|
||||
"RemoveQueueItemRemovalMethod": "Eltávolítási módszer",
|
||||
"RemoveQueueItemRemovalMethodHelpTextWarning": "Az „Eltávolítás a letöltési kliensből” eltávolítja a letöltést és a fájl(oka)t a letöltési kliensből.",
|
||||
"ThereWasAnErrorLoadingThisPage": "Hiba történt az oldal betöltésekor",
|
||||
"ErrorLoadingPage": "Hiba történt az oldal betöltésekor",
|
||||
"RemoveQueueItemConfirmation": "Biztosan eltávolítja a következőt a sorból: \"{sourceTitle}\"?",
|
||||
"IgnoreDownloads": "Letöltések figyelmen kívül hagyása",
|
||||
"ListRefreshInterval": "Lista frissítési időköz",
|
||||
"DownloadClientValidationTestTorrents": "Nem sikerült lekérni a torrentek listáját: {exceptionMessage}",
|
||||
"ThereWasAnErrorLoadingThisItem": "Hiba történt az elem betöltésekor",
|
||||
"ErrorLoadingItem": "Hiba történt az elem betöltésekor",
|
||||
"ResetQualityDefinitionsMessageText": "Biztosan vissza szeretné állítani a minőségi definíciókat?",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexelők érvénytelen letöltési kliensekkel: {indexerNames}.",
|
||||
"RemoveQueueItem": "Eltávolítás – {sourceTitle}",
|
||||
@@ -1478,5 +1477,24 @@
|
||||
"ImportListsTraktSettingsUserListUsernameHelpText": "Felhasználónév az importálandó listához (hagyja üresen az Auth User használatához)",
|
||||
"ImportListsTraktSettingsWatchListSorting": "Figyelőlista rendezése",
|
||||
"ImportListsTraktSettingsWatchListSortingHelpText": "Ha a Lista típusa Figyelt, válassza ki a sorrendet a lista rendezéséhez",
|
||||
"EditMovieModalHeader": "Szerkesztés – {title}"
|
||||
"EditMovieModalHeader": "Szerkesztés – {title}",
|
||||
"FilterGreaterThan": "nagyobb, mint",
|
||||
"AddANewPath": "Új útvonal hozzáadása",
|
||||
"AddCustomFilter": "Egyéni szűrő hozzáadása",
|
||||
"ErrorLoadingContent": "Hiba történt a tartalom betöltésekor",
|
||||
"FilterContains": "tartalmaz",
|
||||
"FilterDoesNotContain": "nem tartalmaz",
|
||||
"FilterDoesNotEndWith": "nem ér véget",
|
||||
"FilterDoesNotStartWith": "nem azzal kezdődik",
|
||||
"FilterEqual": "egyenlő",
|
||||
"FilterGreaterThanOrEqual": "nagyobb vagy egyenlő",
|
||||
"FilterInLast": "az utolsóban",
|
||||
"FilterInNext": "a következőben",
|
||||
"FilterIsAfter": "után van",
|
||||
"FilterIsBefore": "előtt van",
|
||||
"FilterLessThan": "kevesebb, mint",
|
||||
"FilterIsNot": "nem",
|
||||
"FilterLessThanOrEqual": "kisebb vagy egyenlő",
|
||||
"FilterNotInNext": "nem a következőben",
|
||||
"Tba": "TBA"
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
"ShowUnknownMovieItems": "Sýna óþekktar kvikmyndir",
|
||||
"SkipFreeSpaceCheck": "Slepptu ókeypis plássathugun",
|
||||
"Socks5": "Socks5 (stuðningur TOR)",
|
||||
"SorryThatMovieCannotBeFound": "Því miður er ekki hægt að finna þá kvikmynd.",
|
||||
"MovieCannotBeFound": "Því miður er ekki hægt að finna þá kvikmynd.",
|
||||
"SslCertPassword": "SSL vottorð lykilorð",
|
||||
"SslCertPathHelpText": "Leið að pfx skrá",
|
||||
"SslPort": "SSL höfn",
|
||||
@@ -207,7 +207,7 @@
|
||||
"Automatic": "Sjálfskiptur",
|
||||
"AutomaticSearch": "Sjálfvirk leit",
|
||||
"MinimumAge": "Lágmarksaldur",
|
||||
"AcceptConfirmationModal": "Samþykkja staðfestingarform",
|
||||
"KeyboardShortcutsConfirmModal": "Samþykkja staðfestingarform",
|
||||
"Failed": "Mistókst",
|
||||
"RejectionCount": "Höfnunartalning",
|
||||
"CertificationCountry": "Vottunarland",
|
||||
@@ -266,7 +266,7 @@
|
||||
"OnRename": "Um Endurnefna",
|
||||
"Cast": "Leikarar",
|
||||
"OpenBrowserOnStart": "Opnaðu vafra við byrjun",
|
||||
"OpenThisModal": "Opnaðu þetta módel",
|
||||
"KeyboardShortcutsOpenModal": "Opnaðu þetta módel",
|
||||
"PendingChangesDiscardChanges": "Fargaðu breytingum og farðu",
|
||||
"PendingChangesMessage": "Þú ert með óvistaðar breytingar, ertu viss um að þú viljir yfirgefa þessa síðu?",
|
||||
"PreferTorrent": "Kjósa Torrent",
|
||||
@@ -461,11 +461,11 @@
|
||||
"CloneIndexer": "Clone Indexer",
|
||||
"CloneProfile": "Klónasnið",
|
||||
"Close": "Lokaðu",
|
||||
"CloseCurrentModal": "Lokaðu núverandi modal",
|
||||
"KeyboardShortcutsCloseModal": "Lokaðu núverandi modal",
|
||||
"Collection": "Söfnun",
|
||||
"ColonReplacement": "Skipt um ristil",
|
||||
"ColonReplacementFormatHelpText": "Breyttu því hvernig {appName} sér um ristilskiptingu",
|
||||
"Columns": "Súlur",
|
||||
"TableColumns": "Súlur",
|
||||
"CompletedDownloadHandling": "Lokið meðhöndlun niðurhals",
|
||||
"Conditions": "Aðstæður",
|
||||
"Connect": "Tengjast",
|
||||
@@ -579,16 +579,15 @@
|
||||
"ExternalUpdater": "{appName} er stilltur til að nota ytri uppfærslu",
|
||||
"ExtraFileExtensionsHelpText": "Komma aðskilinn listi yfir auka skrár til að flytja inn (.nfo verður fluttur inn sem .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Dæmi: '.sub, .nfo' eða 'sub, nfo'",
|
||||
"FailedToLoadMovieFromAPI": "Mistókst að hlaða kvikmynd frá API",
|
||||
"FeatureRequests": "Aðgerðarbeiðnir",
|
||||
"ChangeFileDateHelpText": "Breyttu dagsetningu skráar við innflutning / endurskoðun",
|
||||
"FileNames": "Skráarnöfn",
|
||||
"Files": "Skrár",
|
||||
"Filter": "Sía",
|
||||
"FilterPlaceHolder": "Leitaðu kvikmynda",
|
||||
"FilterMoviePlaceholder": "Leitaðu kvikmynda",
|
||||
"FirstDayOfWeek": "Fyrsti dagur vikunnar",
|
||||
"Fixed": "Fastur",
|
||||
"FocusSearchBox": "Fókus leitarreitur",
|
||||
"KeyboardShortcutsFocusSearchBox": "Fókus leitarreitur",
|
||||
"Folder": "Mappa",
|
||||
"Folders": "Möppur",
|
||||
"FollowPerson": "Fylgdu Persónu",
|
||||
@@ -602,7 +601,7 @@
|
||||
"GeneralSettingsSummary": "Gátt, SSL, notandanafn / lykilorð, umboð, greining og uppfærslur",
|
||||
"Genres": "Tegundir",
|
||||
"Global": "Alheimslegt",
|
||||
"GoToInterp": "Farðu í {0}",
|
||||
"MovieDetailsGoTo": "Farðu í {0}",
|
||||
"Grab": "Grípa",
|
||||
"Grabbed": "Greip",
|
||||
"GrabRelease": "Grípa losun",
|
||||
@@ -687,10 +686,10 @@
|
||||
"Movie": "Kvikmynd",
|
||||
"MovieAlreadyExcluded": "Kvikmynd þegar undanskilin",
|
||||
"MovieChat": "Kvikmyndaspjall",
|
||||
"MovieDetailsNextMovie": "Upplýsingar um kvikmynd: Næsta kvikmynd",
|
||||
"MovieIndexScrollBottom": "Kvikmyndavísitala: Flettu neðst",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Upplýsingar um kvikmynd: Næsta kvikmynd",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Kvikmyndavísitala: Flettu neðst",
|
||||
"Queue": "Biðröð",
|
||||
"MovieIndexScrollTop": "Kvikmyndavísitala: Scroll Top",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Kvikmyndavísitala: Scroll Top",
|
||||
"MovieInfoLanguage": "Tungumál kvikmyndaupplýsinga",
|
||||
"MovieInvalidFormat": "Kvikmynd: Ógilt snið",
|
||||
"MultiLanguage": "Fjöltyngt",
|
||||
@@ -771,7 +770,7 @@
|
||||
"Runtime": "Runtime",
|
||||
"Save": "Vista",
|
||||
"SaveChanges": "Vista breytingar",
|
||||
"SaveSettings": "Vista stillingar",
|
||||
"KeyboardShortcutsSaveSettings": "Vista stillingar",
|
||||
"Scheduled": "Tímaáætlun",
|
||||
"Score": "Mark",
|
||||
"Script": "Handrit",
|
||||
@@ -842,7 +841,7 @@
|
||||
"Sunday": "Sunnudag",
|
||||
"Table": "Tafla",
|
||||
"TableOptions": "Borðvalkostir",
|
||||
"TableOptionsColumnsMessage": "Veldu hvaða dálkar eru sýnilegir og í hvaða röð þeir birtast",
|
||||
"TableColumnsHelpText": "Veldu hvaða dálkar eru sýnilegir og í hvaða röð þeir birtast",
|
||||
"TagDetails": "Upplýsingar um merki - {0}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Merkið er ekki notað og hægt er að eyða því",
|
||||
"Tags": "Merkimiðar",
|
||||
@@ -940,7 +939,7 @@
|
||||
"MaintenanceRelease": "Útgáfa viðhalds: villuleiðréttingar og aðrar úrbætur. Sjá Github skuldbindingarferil fyrir frekari upplýsingar",
|
||||
"MissingNotMonitored": "Vantar (óeftirlit)",
|
||||
"MoveMovieFoldersToNewPath": "Viltu færa kvikmyndaskrárnar frá '{0}' til '{1}'?",
|
||||
"MovieDetailsPreviousMovie": "Upplýsingar um kvikmynd: Fyrri kvikmynd",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Upplýsingar um kvikmynd: Fyrri kvikmynd",
|
||||
"MovieExcludedFromAutomaticAdd": "Kvikmynd útilokuð frá sjálfvirkri viðbót",
|
||||
"Search": "Leitaðu",
|
||||
"Edit": "Breyta",
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
"Time": "Orario",
|
||||
"TestAll": "Prova Tutto",
|
||||
"Test": "Prova",
|
||||
"TableOptionsColumnsMessage": "Scegli quali colonne rendere visibili ed il loro ordine",
|
||||
"TableColumnsHelpText": "Scegli quali colonne rendere visibili ed il loro ordine",
|
||||
"TableOptions": "Opzioni Tabella",
|
||||
"SystemTimeHealthCheckMessage": "L'orario di sistema è sbagliato di più di un giorno. Le attività pianificate potrebbero non essere eseguite correttamente fino alla correzione",
|
||||
"Source": "Fonte",
|
||||
@@ -325,7 +325,7 @@
|
||||
"ConnectionLost": "Connessione Persa",
|
||||
"Conditions": "Condizioni",
|
||||
"Component": "Componente",
|
||||
"Columns": "Colonne",
|
||||
"TableColumns": "Colonne",
|
||||
"ColonReplacementFormatHelpText": "Cambia il modo in cui {appName} gestisce la sostituzione dei due punti",
|
||||
"ColonReplacement": "Sostituzione Due Punti",
|
||||
"DestinationRelativePath": "Percorso Relativo della destinazione",
|
||||
@@ -542,7 +542,7 @@
|
||||
"HaveNotAddedMovies": "Non hai ancora aggiunto nessun film, vuoi prima importarne alcuni o tutti i tuoi film?",
|
||||
"Group": "Gruppo",
|
||||
"GrabReleaseMessageText": "{appName} non è stato in grado di determinare a quale film si riferisce questa release. {appName} potrebbe non essere in grado di importarla automaticamente. Vuoi catturare '{0}'?",
|
||||
"GoToInterp": "Vai a {0}",
|
||||
"MovieDetailsGoTo": "Vai a {0}",
|
||||
"Global": "Globale",
|
||||
"GeneralSettings": "Impostazioni Generali",
|
||||
"SupportedIndexersMoreInfo": "Per maggiori informazioni sui singoli Indexer clicca sul pulsante info.",
|
||||
@@ -556,7 +556,7 @@
|
||||
"Excluded": "Escluso",
|
||||
"Ended": "Finito",
|
||||
"SearchIsNotSupportedWithThisIndexer": "Ricerca non supportata con questo indicizzatore",
|
||||
"FilterPlaceHolder": "Cerca Films",
|
||||
"FilterMoviePlaceholder": "Cerca Films",
|
||||
"ChangeFileDateHelpText": "Modifica la data dei file in importazione/rescan",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Esempi: '.sub, .nfo' or 'sub,nfo'",
|
||||
"ExistingTag": "Etichetta esistente",
|
||||
@@ -675,7 +675,7 @@
|
||||
"SslCertPassword": "Password Certificato SSL",
|
||||
"SourceRelativePath": "Percorso relativo origine",
|
||||
"SourcePath": "Percorso origine",
|
||||
"SorryThatMovieCannotBeFound": "Mi spiace, impossibile trovare il film.",
|
||||
"MovieCannotBeFound": "Mi spiace, impossibile trovare il film.",
|
||||
"SkipFreeSpaceCheck": "Salta controllo spazio libero",
|
||||
"ShowYear": "Mostra anno",
|
||||
"ShowUnknownMovieItems": "Mostra film sconosciuti",
|
||||
@@ -724,15 +724,15 @@
|
||||
"Disabled": "Disabilitato",
|
||||
"AutomaticSearch": "Ricerca Automatica",
|
||||
"AddIndexer": "Aggiungi Indicizzatore",
|
||||
"SaveSettings": "Salva Impostazioni",
|
||||
"OpenThisModal": "Apri questa Modale",
|
||||
"MovieIndexScrollTop": "Indice film: scorri in alto",
|
||||
"MovieIndexScrollBottom": "Indice Film: scorri in basso",
|
||||
"MovieDetailsNextMovie": "Dettagli del film: film successivo",
|
||||
"MovieDetailsPreviousMovie": "Dettagli del film: film precedente",
|
||||
"FocusSearchBox": "Evidenzia casella di ricerca",
|
||||
"CloseCurrentModal": "Chiudi la Modale Attuale",
|
||||
"AcceptConfirmationModal": "Accetta Conferma Modale",
|
||||
"KeyboardShortcutsSaveSettings": "Salva Impostazioni",
|
||||
"KeyboardShortcutsOpenModal": "Apri questa Modale",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Indice film: scorri in alto",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Indice Film: scorri in basso",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Dettagli del film: film successivo",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Dettagli del film: film precedente",
|
||||
"KeyboardShortcutsFocusSearchBox": "Evidenzia casella di ricerca",
|
||||
"KeyboardShortcutsCloseModal": "Chiudi la Modale Attuale",
|
||||
"KeyboardShortcutsConfirmModal": "Accetta Conferma Modale",
|
||||
"StartSearchForMissingMovie": "Avvia ricerca film mancanti",
|
||||
"StartProcessing": "Avvia Lavorazione",
|
||||
"StartImport": "Inizia Importazione",
|
||||
@@ -856,7 +856,6 @@
|
||||
"EditImportListExclusion": "Modifica Esclusione da Lista",
|
||||
"EditQualityProfile": "Modifica Profilo Qualità",
|
||||
"ErrorRestoringBackup": "Errore durante il ripristino del backup",
|
||||
"FailedToLoadMovieFromAPI": "Impossibile caricare il film dall'API",
|
||||
"FeatureRequests": "Richieste di funzionalità",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Questo rinominerà anche la cartella del film in base al formato della cartella del film nelle impostazioni.",
|
||||
"Images": "immagini",
|
||||
@@ -1323,7 +1322,7 @@
|
||||
"NotificationsGotifySettingsServerHelpText": "URL server Gotify, includendo http(s):// e porta se necessario",
|
||||
"RestartRequiredToApplyChanges": "{appName} richiede un riavvio per applicare i cambiamenti, vuoi riavviare ora?",
|
||||
"Complete": "Completo",
|
||||
"ThereWasAnErrorLoadingThisItem": "Si è verificato un errore caricando questo elemento",
|
||||
"ErrorLoadingItem": "Si è verificato un errore caricando questo elemento",
|
||||
"FormatDateTimeRelative": "{relativeDay}, {formattedDate} {formattedTime}",
|
||||
"InteractiveImportNoLanguage": "Una lingua deve essere scelta per ogni file selezionato",
|
||||
"InteractiveImportNoQuality": "Una qualità deve essere scelta per ogni file selezionato",
|
||||
@@ -1361,7 +1360,7 @@
|
||||
"UseSsl": "Usa SSL",
|
||||
"DownloadClientSettingsInitialStateHelpText": "Stato iniziale per i torrent aggiunti a {clientName}",
|
||||
"DownloadClientSettingsInitialState": "Stato Iniziale",
|
||||
"ThereWasAnErrorLoadingThisPage": "Si è verificato un errore caricando questa pagina",
|
||||
"ErrorLoadingPage": "Si è verificato un errore caricando questa pagina",
|
||||
"InteractiveImportNoImportMode": "Una modalità di importazione deve essere selezionata",
|
||||
"SelectLanguageModalTitle": "{modalTitle} - Seleziona Lingua",
|
||||
"EditSelectedMovies": "Modifica Film Selezionati",
|
||||
@@ -1502,5 +1501,26 @@
|
||||
"ImportListsTraktSettingsGenres": "Generi",
|
||||
"ImportListsTraktSettingsLimit": "Limite",
|
||||
"ImportListsTraktSettingsListType": "Tipo Lista",
|
||||
"EditMovieModalHeader": "Modifica - {title}"
|
||||
"EditMovieModalHeader": "Modifica - {title}",
|
||||
"AddANewPath": "Aggiungi nuovo percorso",
|
||||
"AddCustomFilter": "Aggiungi Filtro Personalizzato",
|
||||
"ErrorLoadingContent": "Si è verificato un errore caricando questo contenuto",
|
||||
"FilterContains": "contiene",
|
||||
"FilterDoesNotContain": "non contiene",
|
||||
"FilterDoesNotEndWith": "non termina con",
|
||||
"FilterDoesNotStartWith": "non inizia con",
|
||||
"FilterEndsWith": "termina con",
|
||||
"FilterEqual": "uguale",
|
||||
"FilterGreaterThan": "più grande di",
|
||||
"FilterGreaterThanOrEqual": "più grande o uguale di",
|
||||
"FilterIs": "è",
|
||||
"FilterIsAfter": "è dopo",
|
||||
"FilterIsBefore": "è prima",
|
||||
"FilterIsNot": "non è",
|
||||
"FilterLessThan": "meno di",
|
||||
"FilterLessThanOrEqual": "meno o uguale di",
|
||||
"FilterNotEqual": "non uguale",
|
||||
"FilterStartsWith": "inizia con",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} Libero",
|
||||
"Tba": "TBA"
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"Username": "ユーザー名",
|
||||
"ImportIncludeQuality": "ファイルのファイル名に品質が含まれていることを確認してください。例えば{0}",
|
||||
"ImportLibrary": "ライブラリのインポート",
|
||||
"AcceptConfirmationModal": "確認モーダルを受け入れる",
|
||||
"KeyboardShortcutsConfirmModal": "確認モーダルを受け入れる",
|
||||
"AddNewMessage": "新しい映画を追加するのは簡単です。追加したい映画の名前を入力し始めるだけです。",
|
||||
"CantFindMovie": "映画が見つからないのはなぜですか?",
|
||||
"PtpOldSettingsCheckMessage": "次のPassThePopcornインデクサーは非推奨の設定であり、更新する必要があります:{0}",
|
||||
@@ -244,7 +244,7 @@
|
||||
"OnRename": "名前の変更について",
|
||||
"Cast": "キャスト",
|
||||
"OpenBrowserOnStart": "起動時にブラウザを開く",
|
||||
"OpenThisModal": "このモーダルを開く",
|
||||
"KeyboardShortcutsOpenModal": "このモーダルを開く",
|
||||
"PendingChangesDiscardChanges": "変更を破棄してそのままにします",
|
||||
"PendingChangesMessage": "保存されていない変更があります。このページを離れてもよろしいですか?",
|
||||
"PreferTorrent": "トレントを好む",
|
||||
@@ -424,9 +424,9 @@
|
||||
"CloneIndexer": "クローンインデクサー",
|
||||
"CloneProfile": "クローンプロファイル",
|
||||
"Close": "閉じる",
|
||||
"CloseCurrentModal": "現在のモーダルを閉じる",
|
||||
"KeyboardShortcutsCloseModal": "現在のモーダルを閉じる",
|
||||
"Collection": "コレクション",
|
||||
"Columns": "列",
|
||||
"TableColumns": "列",
|
||||
"CompletedDownloadHandling": "完了したダウンロード処理",
|
||||
"Connect": "接続する",
|
||||
"Connection": "接続",
|
||||
@@ -528,17 +528,16 @@
|
||||
"ExistingTag": "既存のタグ",
|
||||
"ExportCustomFormat": "カスタムフォーマットのエクスポート",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "例: '。sub、.nfo'または 'sub、nfo'",
|
||||
"FailedToLoadMovieFromAPI": "APIからムービーを読み込めませんでした",
|
||||
"FeatureRequests": "機能リクエスト",
|
||||
"FileManagement": "ファイル管理",
|
||||
"Filename": "ファイル名",
|
||||
"FileNames": "ファイル名",
|
||||
"Files": "ファイル",
|
||||
"Filter": "フィルタ",
|
||||
"FilterPlaceHolder": "映画を検索する",
|
||||
"FilterMoviePlaceholder": "映画を検索する",
|
||||
"FirstDayOfWeek": "週の最初の日",
|
||||
"Fixed": "修繕",
|
||||
"FocusSearchBox": "フォーカス検索ボックス",
|
||||
"KeyboardShortcutsFocusSearchBox": "フォーカス検索ボックス",
|
||||
"Folder": "フォルダ",
|
||||
"Folders": "フォルダー",
|
||||
"FollowPerson": "フォローパーソン",
|
||||
@@ -550,7 +549,7 @@
|
||||
"GeneralSettings": "一般設定",
|
||||
"GeneralSettingsSummary": "ポート、SSL、ユーザー名/パスワード、プロキシ、分析、更新",
|
||||
"Global": "グローバル",
|
||||
"GoToInterp": "{0}に移動",
|
||||
"MovieDetailsGoTo": "{0}に移動",
|
||||
"Grab": "つかむ",
|
||||
"Grabbed": "掴んだ",
|
||||
"GrabRelease": "グラブリリース",
|
||||
@@ -644,10 +643,10 @@
|
||||
"Movie": "映画",
|
||||
"MovieAlreadyExcluded": "映画はすでに除外されています",
|
||||
"MovieChat": "ムービーチャット",
|
||||
"MovieDetailsNextMovie": "映画の詳細:次の映画",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "映画の詳細:次の映画",
|
||||
"Priority": "優先",
|
||||
"MovieIndexScrollBottom": "映画インデックス:下にスクロール",
|
||||
"MovieIndexScrollTop": "映画インデックス:スクロールトップ",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "映画インデックス:下にスクロール",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "映画インデックス:スクロールトップ",
|
||||
"MovieInfoLanguage": "映画情報言語",
|
||||
"MovieInvalidFormat": "映画:無効な形式",
|
||||
"MovieIsOnImportExclusionList": "映画は輸入除外リストにあります",
|
||||
@@ -743,7 +742,7 @@
|
||||
"Runtime": "ランタイム",
|
||||
"Save": "保存する",
|
||||
"SaveChanges": "変更内容を保存",
|
||||
"SaveSettings": "設定を保存する",
|
||||
"KeyboardShortcutsSaveSettings": "設定を保存する",
|
||||
"Scheduled": "予定",
|
||||
"Score": "スコア",
|
||||
"Script": "脚本",
|
||||
@@ -807,7 +806,7 @@
|
||||
"Socks4": "ソックス4",
|
||||
"Socks5": "Socks5(TORをサポート)",
|
||||
"SomeResultsHiddenFilter": "一部の結果は、適用されたフィルターによって非表示になります",
|
||||
"SorryThatMovieCannotBeFound": "申し訳ありませんが、その映画は見つかりません。",
|
||||
"MovieCannotBeFound": "申し訳ありませんが、その映画は見つかりません。",
|
||||
"Sort": "ソート",
|
||||
"Source": "ソース",
|
||||
"SourcePath": "ソースパス",
|
||||
@@ -829,7 +828,7 @@
|
||||
"Sunday": "日曜日",
|
||||
"Table": "テーブル",
|
||||
"TableOptions": "テーブルオプション",
|
||||
"TableOptionsColumnsMessage": "表示する列と表示する順序を選択します",
|
||||
"TableColumnsHelpText": "表示する列と表示する順序を選択します",
|
||||
"TagDetails": "タグの詳細-{0}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "タグは使用されておらず、削除できます",
|
||||
"Tags": "タグ",
|
||||
@@ -939,7 +938,7 @@
|
||||
"YouCanAlsoSearch": "映画のTMDbIDまたはIMDbIDを使用して検索することもできます。例えば`tmdb:71663`",
|
||||
"MissingMonitoredAndConsideredAvailable": "行方不明(監視済み)",
|
||||
"MissingNotMonitored": "行方不明(監視なし)",
|
||||
"MovieDetailsPreviousMovie": "映画の詳細:前の映画",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "映画の詳細:前の映画",
|
||||
"MovieEditor": "映画編集者",
|
||||
"MovieExcludedFromAutomaticAdd": "自動追加から除外された映画",
|
||||
"Search": "探す",
|
||||
@@ -1084,5 +1083,6 @@
|
||||
"Mixed": "修繕",
|
||||
"ImportListsTraktSettingsCertification": "認証",
|
||||
"ImportListsTraktSettingsGenres": "ジャンル",
|
||||
"ImportListsTraktSettingsRating": "評価"
|
||||
"ImportListsTraktSettingsRating": "評価",
|
||||
"AddANewPath": "新しいパスを追加"
|
||||
}
|
||||
|
||||
@@ -97,14 +97,14 @@
|
||||
"Dates": "날짜",
|
||||
"Day": "일",
|
||||
"DatabaseMigration": "데이터베이스 마이그레이션",
|
||||
"AcceptConfirmationModal": "수락 확인 모달",
|
||||
"KeyboardShortcutsConfirmModal": "수락 확인 모달",
|
||||
"DownloadPropersAndRepacksHelpTextCustomFormat": "Propers/Repack보다사용자 정의 형식 점수별로 정렬하려면 '선호 안함'을 사용",
|
||||
"Announced": "발표됨",
|
||||
"BindAddressHelpText": "모든 인터페이스에 유효한 IP4 주소 또는 '*'",
|
||||
"ClientPriority": "클라이언트 우선 순위",
|
||||
"ClickToChangeMovie": "영화를 변경하려면 클릭",
|
||||
"ClickToChangeQuality": "품질을 변경하려면 클릭",
|
||||
"CloseCurrentModal": "현재 모달 닫기",
|
||||
"KeyboardShortcutsCloseModal": "현재 모달 닫기",
|
||||
"AddNewMovie": "새 영화 추가",
|
||||
"Add": "추가",
|
||||
"AddCustomFormat": "사용자 정의 형식 추가",
|
||||
@@ -244,7 +244,7 @@
|
||||
"OnlyUsenet": "유즈넷 만",
|
||||
"OnRename": "이름 변경시",
|
||||
"OpenBrowserOnStart": "시작시 브라우저 열기",
|
||||
"OpenThisModal": "이 모달 열기",
|
||||
"KeyboardShortcutsOpenModal": "이 모달 열기",
|
||||
"PendingChangesDiscardChanges": "변경 사항을 취소하고 나가기",
|
||||
"PendingChangesStayReview": "변경 사항 유지 및 검토",
|
||||
"PreferTorrent": "토렌트 선호",
|
||||
@@ -431,7 +431,7 @@
|
||||
"Collection": "컬렉션",
|
||||
"ColonReplacement": "콜론 바꾸기",
|
||||
"ColonReplacementFormatHelpText": "{appName}이(가) 콜론 바꾸기를 처리하는 방법 변경",
|
||||
"Columns": "열",
|
||||
"TableColumns": "열",
|
||||
"CompletedDownloadHandling": "완료된 다운로드 처리",
|
||||
"Conditions": "조건",
|
||||
"Connect": "연결",
|
||||
@@ -540,15 +540,14 @@
|
||||
"ExtraFileExtensionsHelpText": "가져올 추가 파일의 쉼표로 구분 된 목록 (.nfo는 .nfo-orig로 가져옴)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "예: '.sub, .nfo'또는 'sub, nfo'",
|
||||
"FailedLoadingSearchResults": "검색 결과를 로드하지 못함 재시도하세요.",
|
||||
"FailedToLoadMovieFromAPI": "API에서 영화를 로드하지 못함",
|
||||
"FeatureRequests": "기능 요청",
|
||||
"ChangeFileDateHelpText": "가져오기 / 재검색시 파일 날짜 변경",
|
||||
"Filename": "파일이름",
|
||||
"FileNames": "파일 이름",
|
||||
"Files": "파일",
|
||||
"FilterPlaceHolder": "영화 검색",
|
||||
"FilterMoviePlaceholder": "영화 검색",
|
||||
"Fixed": "고정됨",
|
||||
"FocusSearchBox": "포커스 검색 창",
|
||||
"KeyboardShortcutsFocusSearchBox": "포커스 검색 창",
|
||||
"MoveMovieFoldersRenameFolderWarning": "설정에서 동영상 폴더 형식에 따라 동영상 폴더의 이름도 변경됩니다.",
|
||||
"Folders": "폴더",
|
||||
"FollowPerson": "사람을 따르십시오",
|
||||
@@ -561,7 +560,7 @@
|
||||
"GeneralSettings": "일반 설정",
|
||||
"GeneralSettingsSummary": "포트, SSL, 사용자 이름 / 암호, 프록시, 분석 및 업데이트",
|
||||
"Global": "글로벌",
|
||||
"GoToInterp": "{0}로 이동",
|
||||
"MovieDetailsGoTo": "{0}로 이동",
|
||||
"Grab": "잡아",
|
||||
"Grabbed": "잡았다",
|
||||
"GrabRelease": "그랩 출시",
|
||||
@@ -652,9 +651,9 @@
|
||||
"Movie": "영화",
|
||||
"MovieAlreadyExcluded": "이미 제외된 영화",
|
||||
"MovieChat": "영화 채팅",
|
||||
"MovieDetailsNextMovie": "영화 세부 사항: 다음 영화",
|
||||
"MovieIndexScrollBottom": "영화 색인: 아래로 스크롤",
|
||||
"MovieIndexScrollTop": "영화 색인: 상단 스크롤",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "영화 세부 사항: 다음 영화",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "영화 색인: 아래로 스크롤",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "영화 색인: 상단 스크롤",
|
||||
"MovieInfoLanguage": "영화 정보 언어",
|
||||
"MovieInvalidFormat": "영화: 잘못된 형식",
|
||||
"MovieIsOnImportExclusionList": "영화가 수입 제외 목록에 있습니다.",
|
||||
@@ -751,7 +750,7 @@
|
||||
"Runtime": "런타임",
|
||||
"Save": "저장",
|
||||
"SaveChanges": "변경 사항 저장",
|
||||
"SaveSettings": "설정 저장",
|
||||
"KeyboardShortcutsSaveSettings": "설정 저장",
|
||||
"Scheduled": "예정된 작업",
|
||||
"Score": "점수",
|
||||
"Script": "스크립트",
|
||||
@@ -815,7 +814,7 @@
|
||||
"Small": "작게",
|
||||
"Socks4": "Socks4",
|
||||
"Socks5": "Socks5 (TOR 지원)",
|
||||
"SorryThatMovieCannotBeFound": "죄송합니다, 해당 영화를 찾을 수 없음",
|
||||
"MovieCannotBeFound": "죄송합니다, 해당 영화를 찾을 수 없음",
|
||||
"Sort": "정렬",
|
||||
"Source": "원본",
|
||||
"SourcePath": "원본 경로",
|
||||
@@ -836,7 +835,7 @@
|
||||
"SubfolderWillBeCreatedAutomaticallyInterp": "'{0}' 하위 폴더가 자동으로 생성됩니다",
|
||||
"Sunday": "일요일",
|
||||
"Table": "테이블",
|
||||
"TableOptionsColumnsMessage": "표시되는 열과 표시되는 순서를 선택하세요",
|
||||
"TableColumnsHelpText": "표시되는 열과 표시되는 순서를 선택하세요",
|
||||
"TagDetails": "태그 세부 사항 - {label}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "태그는 사용되지 않으며 삭제할 수 있습니다",
|
||||
"Tags": "태그",
|
||||
@@ -939,7 +938,7 @@
|
||||
"MissingMonitoredAndConsideredAvailable": "누락 (모니터링 됨)",
|
||||
"MissingNotMonitored": "누락 (모니터링되지 않음)",
|
||||
"MoveMovieFoldersToNewPath": "동영상 파일을 '{0}'에서 '{1}'(으)로 이동 하시겠습니까?",
|
||||
"MovieDetailsPreviousMovie": "영화 정보: 이전 영화",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "영화 정보: 이전 영화",
|
||||
"MovieEditor": "영화 편집기",
|
||||
"MovieExcludedFromAutomaticAdd": "자동 추가에서 제외된 영화",
|
||||
"Search": "검색",
|
||||
@@ -1677,10 +1676,10 @@
|
||||
"TablePageSizeMinimum": "페이지 크기는 최소 {minimumValue} 이상이어야 합니다",
|
||||
"TaskUserAgentTooltip": "API를 호출한 앱에서 제공하는 사용자 에이전트",
|
||||
"TestParsing": "테스트 파싱",
|
||||
"ThereWasAnErrorLoadingThisItem": "이 항목을 로드하는 중에 오류가 발생했습니다",
|
||||
"ErrorLoadingItem": "이 항목을 로드하는 중에 오류가 발생했습니다",
|
||||
"Theme": "테마",
|
||||
"ThemeHelpText": "애플리케이션 UI 테마 변경, '자동' 테마는 OS 테마를 사용하여 라이트 또는 다크 모드를 설정합니다. Theme.Park에서 영감을 받음",
|
||||
"ThereWasAnErrorLoadingThisPage": "이 페이지를 로드하는 중ㅇ 오류가 발생했습니다",
|
||||
"ErrorLoadingPage": "이 페이지를 로드하는 중ㅇ 오류가 발생했습니다",
|
||||
"TorrentBlackhole": "Torrent Blackhole",
|
||||
"TmdbRating": "TMDb 평점",
|
||||
"TmdbVotes": "TMDb 투표",
|
||||
@@ -1902,5 +1901,25 @@
|
||||
"ImportListsTraktSettingsAdditionalParameters": "매개 변수 추가",
|
||||
"MediaInfoFootNote2": "MediaInfo AudioLanguages는 영어가 유일한 언어인 경우 영어를 제외합니다. MediaInfo AudioLanguagesAll을 사용하여 영어만 포함합니다",
|
||||
"ImportListsTraktSettingsLimit": "한도",
|
||||
"ImportListsTraktSettingsListType": "목록 유형"
|
||||
"ImportListsTraktSettingsListType": "목록 유형",
|
||||
"Umask775Description": "{octal} - 소유자 및 그룹 쓰기, 다른 사람 읽기",
|
||||
"Umask777Description": "{octal} - 모두 쓰기",
|
||||
"AddANewPath": "새 경로 추가",
|
||||
"AddCustomFilter": "사용자 정의 필터 추가",
|
||||
"ErrorLoadingContent": "이 콘텐트를 로드하는 중 오류가 발생했습니다",
|
||||
"FilterContains": "다음을 포함",
|
||||
"FilterDoesNotContain": "다음을 포함하지 않음",
|
||||
"FilterEndsWith": "로 끝남",
|
||||
"FilterGreaterThan": "보다 큰",
|
||||
"FilterIs": "이다",
|
||||
"FilterIsAfter": "다음 이후",
|
||||
"FilterIsBefore": "다음 이전",
|
||||
"FilterIsNot": "아니다",
|
||||
"FilterLessThan": "미만",
|
||||
"FilterLessThanOrEqual": "다음 보다 작거나 같음",
|
||||
"FilterStartsWith": "시작하다",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} 남음",
|
||||
"Umask750Description": "{octal} - 소유자 쓰기, 그룹 읽기",
|
||||
"Umask755Description": "{octal} - 소유자 쓰기, 나머지 읽기",
|
||||
"Umask770Description": "{octal} - 소유자 및 그룹 쓰기"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"About": "Par",
|
||||
"AcceptConfirmationModal": "Apstiprināt Apstiprināšanas Modālu",
|
||||
"KeyboardShortcutsConfirmModal": "Apstiprināt Apstiprināšanas Modālu",
|
||||
"Actions": "Darbības",
|
||||
"Activity": "Aktivitāte",
|
||||
"Add": "Pievienot",
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
"CleanLibraryLevel": "Rengjør biblioteksnivå",
|
||||
"Clear": "Klar",
|
||||
"About": "Om",
|
||||
"AcceptConfirmationModal": "Godta bekreftelsesmodal",
|
||||
"KeyboardShortcutsConfirmModal": "Godta bekreftelsesmodal",
|
||||
"Actions": "Handlinger",
|
||||
"Added": "La til",
|
||||
"AddedToDownloadQueue": "Lagt til i nedlastingskø",
|
||||
@@ -140,7 +140,7 @@
|
||||
"Collections": "Samlinger",
|
||||
"CountCollectionsSelected": "{count} samling(er) valgt",
|
||||
"ColonReplacement": "Kolon erstatntning",
|
||||
"Columns": "Kolonner",
|
||||
"TableColumns": "Kolonner",
|
||||
"Conditions": "Tilstander",
|
||||
"Connect": "Koble til",
|
||||
"Connection": "Tilkobling",
|
||||
@@ -334,5 +334,7 @@
|
||||
"AddDownloadClientImplementation": "Ny Nedlastingsklient - {implementationName}",
|
||||
"AddImportListImplementation": "Legg til importliste - {implementationName}",
|
||||
"ImportListsTraktSettingsCertification": "Sertifisering",
|
||||
"ImportListsTraktSettingsRating": "Vurdering"
|
||||
"ImportListsTraktSettingsRating": "Vurdering",
|
||||
"AddANewPath": "Legg til ny filsti",
|
||||
"AddCustomFilter": "Legg til eget filter"
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"Time": "Tijd",
|
||||
"TestAll": "Test Alle",
|
||||
"Test": "Test",
|
||||
"TableOptionsColumnsMessage": "Kies welke kolommen zichtbaar zijn en in welke volgorde",
|
||||
"TableColumnsHelpText": "Kies welke kolommen zichtbaar zijn en in welke volgorde",
|
||||
"TableOptions": "Tabel Opties",
|
||||
"SystemTimeHealthCheckMessage": "De systeemtijd loopt verkeerd met meer dan 1 dag. Geplande taken worden mogelijk niet goed uitgevoerd tot dit is opgelost",
|
||||
"Source": "Bron",
|
||||
@@ -241,7 +241,7 @@
|
||||
"CustomFormatScore": "Eigen Formaat Score",
|
||||
"ConnectionLost": "Verbinding Onderbroken",
|
||||
"Component": "Component",
|
||||
"Columns": "Kolommen",
|
||||
"TableColumns": "Kolommen",
|
||||
"Close": "Sluit",
|
||||
"Cancel": "Annuleer",
|
||||
"AudioInfo": "Audio Info",
|
||||
@@ -464,7 +464,7 @@
|
||||
"SetPermissionsLinuxHelpText": "Moet chmod worden uitgevoerd wanneer bestanden worden geïmporteerd/hernoemd?",
|
||||
"IconForCutoffUnmetHelpText": "Toon icoon voor bestanden waarbij de drempel niet behaald werd",
|
||||
"ShowUnknownMovieItems": "Toon onbekende film items",
|
||||
"SorryThatMovieCannotBeFound": "Sorry, deze film kan niet worden gevonden.",
|
||||
"MovieCannotBeFound": "Sorry, deze film kan niet worden gevonden.",
|
||||
"StandardMovieFormat": "Standaard Film Formaat",
|
||||
"TestAllIndexers": "Test Alle Indexeerders",
|
||||
"TorrentDelayHelpText": "Wachttijd in minuten alvorens een torrent op te halen",
|
||||
@@ -617,7 +617,7 @@
|
||||
"ImportFailed": "Importeren mislukt: {sourceTitle}",
|
||||
"HiddenClickToShow": "Verborgen, klik om te tonen",
|
||||
"GrabReleaseMessageText": "{appName} was niet in staat om deze uitgave aan een film te koppelen. {appName} zal waarschijnlijk deze uitgave niet automatisch kunnen importeren. Wilt u '{0}' ophalen?",
|
||||
"GoToInterp": "Ga naar {0}",
|
||||
"MovieDetailsGoTo": "Ga naar {0}",
|
||||
"ExistingTag": "Bestaande tag",
|
||||
"ExcludeMovie": "Film Uitsluiten",
|
||||
"SearchIsNotSupportedWithThisIndexer": "Zoeken wordt niet ondersteund door deze indexeerder",
|
||||
@@ -696,7 +696,7 @@
|
||||
"LoadingMovieCreditsFailed": "Laden van film aftiteling mislukt",
|
||||
"LinkHere": "hier",
|
||||
"AddNewRestriction": "Voeg nieuwe restrictie toe",
|
||||
"FilterPlaceHolder": "Zoek films",
|
||||
"FilterMoviePlaceholder": "Zoek films",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Voorbeelden: '.sub, .nfo' of 'sub,nfo'",
|
||||
"Excluded": "Uitgezonderd",
|
||||
"Exception": "Uitzondering",
|
||||
@@ -727,14 +727,14 @@
|
||||
"AutomaticSearch": "Automatisch Zoeken",
|
||||
"AddIndexer": "Voeg Indexeerder Toe",
|
||||
"ImportErrors": "Importeer Fouten",
|
||||
"FocusSearchBox": "Focus Zoekvak",
|
||||
"KeyboardShortcutsFocusSearchBox": "Focus Zoekvak",
|
||||
"Existing": "Bestaande",
|
||||
"EditRestriction": "Bewerk Restrictie",
|
||||
"CloseCurrentModal": "Sluit Huidig Bericht",
|
||||
"KeyboardShortcutsCloseModal": "Sluit Huidig Bericht",
|
||||
"CancelProcessing": "Annuleer Verwerking",
|
||||
"AddRestriction": "Voeg Restrictie Toe",
|
||||
"AddMovie": "Voeg Film Toe",
|
||||
"AcceptConfirmationModal": "Accepteer Bevestigingsbericht",
|
||||
"KeyboardShortcutsConfirmModal": "Accepteer Bevestigingsbericht",
|
||||
"AddDelayProfile": "Voeg vertragingsprofiel toe",
|
||||
"AddCustomFormat": "Voeg aangepast formaat toe",
|
||||
"BuiltIn": "Ingebouwd",
|
||||
@@ -752,8 +752,8 @@
|
||||
"AddDownloadClient": "Download Client Toevoegen",
|
||||
"Add": "Toevoegen",
|
||||
"ChmodFolderHelpTextWarning": "Dit werkt alleen als de gebruiker die {appName} draait de eigenaar is van het bestand. Het is beter om zeker te zijn dat de downloader de juiste rechten zet.",
|
||||
"MovieDetailsPreviousMovie": "Film Details: Vorige Film",
|
||||
"MovieDetailsNextMovie": "Film Details: Volgende Film",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Film Details: Vorige Film",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Film Details: Volgende Film",
|
||||
"MovieChat": "Film Chat",
|
||||
"MoveMovieFoldersToNewPath": "Wil je de film bestanden verplaatsen van '{0}' naar '{1}'?",
|
||||
"MoveMovieFoldersToRootFolder": "Wil je de film mappen naar '{0}' verplaatsen?",
|
||||
@@ -795,7 +795,6 @@
|
||||
"HomePage": "Startpagina",
|
||||
"FileNameTokens": "Bestandsnaam Tokens",
|
||||
"FeatureRequests": "Functieverzoeken",
|
||||
"FailedToLoadMovieFromAPI": "Kan film niet laden vanuit de API",
|
||||
"ExternalUpdater": "{appName} is geconfigureerd om een extern update mechanisme te gebruiken",
|
||||
"ExcludeTitle": "{0} uitzonderen? Dit zal voorkomen dat {appName} deze automatisch toevoegt via lijst synchronisatie.",
|
||||
"ErrorRestoringBackup": "Fout bij het herstellen van de back-up",
|
||||
@@ -852,7 +851,7 @@
|
||||
"SearchCutoffUnmet": "Zoek Cutoff Onbereikt",
|
||||
"Script": "Script",
|
||||
"Score": "Score",
|
||||
"SaveSettings": "Instellingen Opslaan",
|
||||
"KeyboardShortcutsSaveSettings": "Instellingen Opslaan",
|
||||
"Rss": "RSS",
|
||||
"RestartReloadNote": "Aantekening: {appName} zal automatisch de Ui herstarten en herladen gedurende het herstel proces.",
|
||||
"RequiredRestrictionHelpText": "De release moet tenminste één van deze termen bevatten (hoofdletter gevoelig)",
|
||||
@@ -882,7 +881,7 @@
|
||||
"Preferred": "Voorkeur gegeven",
|
||||
"PreferAndUpgrade": "Prefereer en Waardeer Op",
|
||||
"PhysicalReleaseDate": "Fysieke Release Datum",
|
||||
"OpenThisModal": "Open deze modal",
|
||||
"KeyboardShortcutsOpenModal": "Open deze modal",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Dit zal ook de naam van de film map per film formaat in instellingen wijzigen.",
|
||||
"NextExecution": "Volgende uitvoering",
|
||||
"MovieFilesTotaling": "Totaal aantal filmbestanden",
|
||||
@@ -909,8 +908,8 @@
|
||||
"MultiLanguage": "Meertalig",
|
||||
"MovieIsRecommend": "Film is aanbevolen gebaseerd op recentelijk toegevoegd",
|
||||
"MovieInvalidFormat": "Film: Ongeldig formaat",
|
||||
"MovieIndexScrollTop": "Film Index: Scroll omhoog",
|
||||
"MovieIndexScrollBottom": "Film Index: Scroll naar onder",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Film Index: Scroll omhoog",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Film Index: Scroll naar onder",
|
||||
"ListTagsHelpText": "Tags waarmee lijst items toegevoegd worden",
|
||||
"ImportLibrary": "Bibliotheek Import",
|
||||
"DoNotUpgradeAutomatically": "Niet Automatisch Upgraden",
|
||||
@@ -1060,11 +1059,11 @@
|
||||
"RottenTomatoesRating": "Tomato-score",
|
||||
"SearchOnAddCollectionHelpText": "Zoek naar films in deze collectie na toevoeging aan de bibliotheek",
|
||||
"ShowPosters": "Toon posters",
|
||||
"ThereWasAnErrorLoadingThisPage": "Er ging iets fout bij het laden van deze pagina",
|
||||
"ErrorLoadingPage": "Er ging iets fout bij het laden van deze pagina",
|
||||
"UnableToLoadCollections": "Kon collecties niet laden",
|
||||
"RefreshCollections": "Ververs collecties",
|
||||
"RecycleBinUnableToWriteHealthCheck": "Kan niet schrijven naar prullenbak: {path}. Zorg dat dit pad bestaat en schrijfbaar is voor de gebruiker waaronder {appName} draait",
|
||||
"ThereWasAnErrorLoadingThisItem": "Er ging iets fout bij het laden van dit item",
|
||||
"ErrorLoadingItem": "Er ging iets fout bij het laden van dit item",
|
||||
"DeleteRemotePathMapping": "Bewerk Externe Pad Verwijzing",
|
||||
"DownloadClientMovieTagHelpText": "Gebruik deze indexer alleen voor films met ten minste één overeenkomende tag. Laat leeg om te gebruiken met alle films.",
|
||||
"DeleteDelayProfileMessageText": "Weet u zeker dat u dit vertragingsprofiel wilt verwijderen?",
|
||||
@@ -1257,5 +1256,9 @@
|
||||
"Mixed": "Opgelost",
|
||||
"ImportListsTraktSettingsCertification": "Certificatie",
|
||||
"ImportListsTraktSettingsRating": "Score",
|
||||
"ImportListsTraktSettingsGenres": "Genres"
|
||||
"ImportListsTraktSettingsGenres": "Genres",
|
||||
"AddANewPath": "Voeg een nieuw pad toe",
|
||||
"AddCustomFilter": "Aangepaste Filter Toevoegen",
|
||||
"ErrorLoadingContent": "Er ging iets fout bij het laden van dit item",
|
||||
"Tba": "NNB"
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
"Restore": "Przywracać",
|
||||
"UpgradesAllowedHelpText": "Jeśli niepełnosprawne cechy nie zostaną ulepszone",
|
||||
"EditMovie": "Edytuj film",
|
||||
"CloseCurrentModal": "Zamknij bieżący tryb",
|
||||
"KeyboardShortcutsCloseModal": "Zamknij bieżący tryb",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Czasami blokady plików mogą uniemożliwić zmianę nazw plików, które są wysyłane. Możesz tymczasowo wyłączyć wysyłanie i użyć funkcji zmiany nazwy {appName} jako obejścia.",
|
||||
"Crew": "Załoga",
|
||||
"CustomFilters": "Filtry niestandardowe",
|
||||
@@ -144,7 +144,7 @@
|
||||
"DownloadPropersAndRepacksHelpText": "Czy automatycznie uaktualnić do Propers / Repacks",
|
||||
"DownloadPropersAndRepacksHelpTextCustomFormat": "Użyj opcji „Nie preferuj”, aby posortować wyniki według niestandardowego formatu w porównaniu z properami / przepakowaniami",
|
||||
"BackupIntervalHelpText": "Odstęp czasu między automatycznymi kopiami zapasowymi",
|
||||
"AcceptConfirmationModal": "Zaakceptuj tryb potwierdzenia",
|
||||
"KeyboardShortcutsConfirmModal": "Zaakceptuj tryb potwierdzenia",
|
||||
"AddedToDownloadQueue": "Dodano do kolejki pobierania",
|
||||
"AddingTag": "Dodawanie tagu",
|
||||
"AddQualityProfile": "Dodaj profil jakości",
|
||||
@@ -254,7 +254,7 @@
|
||||
"MovieFiles": "Pliki filmowe",
|
||||
"OnGrab": "Na Grab",
|
||||
"OnHealthIssue": "W kwestii zdrowia",
|
||||
"OpenThisModal": "Otwórz ten modal",
|
||||
"KeyboardShortcutsOpenModal": "Otwórz ten modal",
|
||||
"PreferTorrent": "Wolisz Torrent",
|
||||
"PreferUsenet": "Preferuj Usenet",
|
||||
"Presets": "Presety",
|
||||
@@ -443,7 +443,7 @@
|
||||
"Close": "Zamknij",
|
||||
"ColonReplacement": "Wymiana okrężnicy",
|
||||
"ColonReplacementFormatHelpText": "Zmień sposób, w jaki {appName} obsługuje wymianę okrężnicy",
|
||||
"Columns": "Kolumny",
|
||||
"TableColumns": "Kolumny",
|
||||
"CompletedDownloadHandling": "Ukończono obsługę pobierania",
|
||||
"Conditions": "Warunki",
|
||||
"Connect": "Połączyć",
|
||||
@@ -554,16 +554,15 @@
|
||||
"ExtraFileExtensionsHelpText": "Rozdzielana przecinkami lista dodatkowych plików do zaimportowania (.nfo zostanie zaimportowane jako .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Przykłady: „.sub, .nfo” lub „sub, nfo”",
|
||||
"FailedLoadingSearchResults": "Nie udało się załadować wyników wyszukiwania, spróbuj ponownie.",
|
||||
"FailedToLoadMovieFromAPI": "Nie udało się załadować filmu z interfejsu API",
|
||||
"FeatureRequests": "Żądania funkcji",
|
||||
"FileManagement": "Zarządzanie plikami",
|
||||
"Filename": "Nazwa pliku",
|
||||
"FileNames": "Nazwy plików",
|
||||
"Files": "Akta",
|
||||
"Filter": "Filtr",
|
||||
"FilterPlaceHolder": "Szukaj filmów",
|
||||
"FilterMoviePlaceholder": "Szukaj filmów",
|
||||
"Fixed": "Naprawiony",
|
||||
"FocusSearchBox": "Zaznacz pole wyszukiwania",
|
||||
"KeyboardShortcutsFocusSearchBox": "Zaznacz pole wyszukiwania",
|
||||
"Folder": "Teczka",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Spowoduje to również zmianę nazwy folderu filmów zgodnie z formatem folderu filmów w ustawieniach.",
|
||||
"Folders": "Lornetka składana",
|
||||
@@ -577,7 +576,7 @@
|
||||
"GeneralSettings": "Ustawienia główne",
|
||||
"GeneralSettingsSummary": "Port, SSL, nazwa użytkownika / hasło, proxy, analizy i aktualizacje",
|
||||
"Global": "Światowy",
|
||||
"GoToInterp": "Idź do {0}",
|
||||
"MovieDetailsGoTo": "Idź do {0}",
|
||||
"Grab": "Chwycić",
|
||||
"Grabbed": "Złapał",
|
||||
"GrabRelease": "Pobierz Wydanie",
|
||||
@@ -667,9 +666,9 @@
|
||||
"Movie": "Film",
|
||||
"MovieAlreadyExcluded": "Film już wykluczony",
|
||||
"MovieChat": "Czat filmowy",
|
||||
"MovieDetailsNextMovie": "Szczegóły filmu: następny film",
|
||||
"MovieIndexScrollBottom": "Indeks filmów: przewiń w dół",
|
||||
"MovieIndexScrollTop": "Indeks filmów: przewiń do góry",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Szczegóły filmu: następny film",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Indeks filmów: przewiń w dół",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Indeks filmów: przewiń do góry",
|
||||
"MovieInfoLanguage": "Język informacji o filmie",
|
||||
"MovieInvalidFormat": "Film: nieprawidłowy format",
|
||||
"MultiLanguage": "Wielojęzyczny",
|
||||
@@ -760,7 +759,7 @@
|
||||
"Runtime": "Długość",
|
||||
"Save": "Zapisać",
|
||||
"SaveChanges": "Zapisz zmiany",
|
||||
"SaveSettings": "Zapisz ustawienia",
|
||||
"KeyboardShortcutsSaveSettings": "Zapisz ustawienia",
|
||||
"Scheduled": "Planowy",
|
||||
"Score": "Wynik",
|
||||
"Script": "Scenariusz",
|
||||
@@ -822,7 +821,7 @@
|
||||
"Socks4": "Skarpetki 4",
|
||||
"Socks5": "Socks5 (Wsparcie TOR)",
|
||||
"SomeResultsHiddenFilter": "Niektóre wyniki są ukrywane przez zastosowany filtr",
|
||||
"SorryThatMovieCannotBeFound": "Przepraszamy, nie można znaleźć tego filmu.",
|
||||
"MovieCannotBeFound": "Przepraszamy, nie można znaleźć tego filmu.",
|
||||
"Sort": "Sortować",
|
||||
"Source": "Źródło",
|
||||
"SourcePath": "Ścieżka źródłowa",
|
||||
@@ -843,7 +842,7 @@
|
||||
"Sunday": "niedziela",
|
||||
"Table": "Stół",
|
||||
"TableOptions": "Opcje tabeli",
|
||||
"TableOptionsColumnsMessage": "Wybierz, które kolumny są widoczne i w jakiej kolejności się pojawiają",
|
||||
"TableColumnsHelpText": "Wybierz, które kolumny są widoczne i w jakiej kolejności się pojawiają",
|
||||
"TagDetails": "Szczegóły tagu - {0}",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Znacznik nie jest używany i można go usunąć",
|
||||
"Tags": "Tagi",
|
||||
@@ -938,7 +937,7 @@
|
||||
"MaintenanceRelease": "Wersja konserwacyjna: poprawki błędów i inne ulepszenia. Aby uzyskać więcej informacji, zobacz historię zatwierdzeń na Github",
|
||||
"MissingMonitoredAndConsideredAvailable": "Brak (monitorowany)",
|
||||
"MissingNotMonitored": "Brakujący (niemonitorowany)",
|
||||
"MovieDetailsPreviousMovie": "Szczegóły filmu: poprzedni film",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Szczegóły filmu: poprzedni film",
|
||||
"MovieEditor": "Edytor filmów",
|
||||
"MovieExcludedFromAutomaticAdd": "Film wykluczony z automatycznego dodawania",
|
||||
"Search": "Szukaj",
|
||||
@@ -1202,5 +1201,8 @@
|
||||
"ImportListsTraktSettingsGenres": "Gatunki",
|
||||
"True": "Prawda",
|
||||
"Umask": "Umask",
|
||||
"Or": "lub"
|
||||
"Or": "lub",
|
||||
"AddANewPath": "Dodaj nową ścieżkę",
|
||||
"AddCustomFilter": "Dodaj niestandardowy filtr",
|
||||
"Tba": "Do ogłoszenia"
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"Tasks": "Tarefas",
|
||||
"TagsSettingsSummary": "Ver todas as etiquetas e como são utilizadas. Etiquetas não utilizadas podem ser removidas",
|
||||
"Tags": "Etiquetas",
|
||||
"TableOptionsColumnsMessage": "Escolha quais colunas são visíveis e em qual ordem aparecem",
|
||||
"TableColumnsHelpText": "Escolha quais colunas são visíveis e em qual ordem aparecem",
|
||||
"TableOptions": "Opções da tabela",
|
||||
"Table": "Tabela",
|
||||
"SystemTimeHealthCheckMessage": "A hora do sistema está atrasada em mais de 1 dia. As tarefas agendadas podem não ocorrer corretamente até a hora ser corrigida",
|
||||
@@ -264,7 +264,7 @@
|
||||
"Connect": "Conexões",
|
||||
"Component": "Componente",
|
||||
"CompletedDownloadHandling": "Processamento de transferência concluída",
|
||||
"Columns": "Colunas",
|
||||
"TableColumns": "Colunas",
|
||||
"Collection": "Coleção",
|
||||
"Close": "Fechar",
|
||||
"Clear": "Limpar",
|
||||
@@ -561,10 +561,10 @@
|
||||
"HiddenClickToShow": "Oculto, clique para mostrar",
|
||||
"HaveNotAddedMovies": "Você ainda não adicionou nenhum filme. Quer importar alguns ou todos os seus filmes primeiro?",
|
||||
"GrabReleaseMessageText": "O {appName} não pode determinar a que filme pertence esta versão. O {appName} pode ser incapaz de importar automaticamente esta versão. Deseja capturar \"{0}\"?",
|
||||
"GoToInterp": "Ir para {0}",
|
||||
"MovieDetailsGoTo": "Ir para {0}",
|
||||
"SupportedListsMoreInfo": "Para obter mais informações sobre cada lista de importação, clique nos botões de informação.",
|
||||
"SupportedDownloadClientsMoreInfo": "Para obter mais informações sobre cada cliente de transferências, clique nos botões de mais informação.",
|
||||
"FilterPlaceHolder": "Pesquisar filmes",
|
||||
"FilterMoviePlaceholder": "Pesquisar filmes",
|
||||
"FailedLoadingSearchResults": "Erro ao carregar resultados da pesquisa. Tenta novamente.",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemplos: \".sub, .nfo\" ou \"sub,nfo\"",
|
||||
"ExtraFileExtensionsHelpText": "Lista separada por vírgulas de ficheiros adicionais a importar (.nfo será importado como .nfo-orig)",
|
||||
@@ -620,7 +620,7 @@
|
||||
"SslCertPassword": "Palavra-passe do certificado SSL",
|
||||
"SourceRelativePath": "Caminho relativo de origem",
|
||||
"SourcePath": "Caminho de origem",
|
||||
"SorryThatMovieCannotBeFound": "Desculpe, este filme não foi encontrado.",
|
||||
"MovieCannotBeFound": "Desculpe, este filme não foi encontrado.",
|
||||
"SkipFreeSpaceCheck": "Pular verificação de espaço livre",
|
||||
"ShowYear": "Mostrar ano",
|
||||
"ShowUnknownMovieItems": "Mostrar itens desconhecidos do filme",
|
||||
@@ -726,15 +726,15 @@
|
||||
"UiLanguage": "Idioma da IU",
|
||||
"TotalFileSize": "Tamanho total do ficheiro",
|
||||
"Torrents": "Torrents",
|
||||
"FocusSearchBox": "Focar no campo de pesquisa",
|
||||
"CloseCurrentModal": "Fechar pop-up atual",
|
||||
"AcceptConfirmationModal": "Aceitar pop-up de confirmação",
|
||||
"OpenThisModal": "Abrir este pop-up",
|
||||
"SaveSettings": "Guardar definições",
|
||||
"MovieIndexScrollTop": "Índice do filme: deslocar para cima",
|
||||
"MovieIndexScrollBottom": "Índice do filme: deslocar para baixo",
|
||||
"MovieDetailsPreviousMovie": "Detalhes do filme: filme anterior",
|
||||
"MovieDetailsNextMovie": "Detalhes do filme: próximo filme",
|
||||
"KeyboardShortcutsFocusSearchBox": "Focar no campo de pesquisa",
|
||||
"KeyboardShortcutsCloseModal": "Fechar pop-up atual",
|
||||
"KeyboardShortcutsConfirmModal": "Aceitar pop-up de confirmação",
|
||||
"KeyboardShortcutsOpenModal": "Abrir este pop-up",
|
||||
"KeyboardShortcutsSaveSettings": "Guardar definições",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Índice do filme: deslocar para cima",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Índice do filme: deslocar para baixo",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Detalhes do filme: filme anterior",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Detalhes do filme: próximo filme",
|
||||
"StartSearchForMissingMovie": "Iniciar pesquisa por filme ausente",
|
||||
"StartProcessing": "Iniciar processamento",
|
||||
"StartImport": "Iniciar importação",
|
||||
@@ -861,7 +861,6 @@
|
||||
"EditQualityProfile": "Editar perfil de qualidade",
|
||||
"ErrorRestoringBackup": "Erro ao restaurar cópia de segurança",
|
||||
"ExternalUpdater": "O {appName} está definido para usar um mecanismo de atualização externo",
|
||||
"FailedToLoadMovieFromAPI": "Falha ao carregar filme da API",
|
||||
"FeatureRequests": "Solicitações de funcionalidades",
|
||||
"Images": "Imagens",
|
||||
"IMDb": "IMDb",
|
||||
@@ -1279,5 +1278,7 @@
|
||||
"ImportListsTraktSettingsCertification": "Certificação",
|
||||
"ImportListsTraktSettingsGenres": "Gêneros",
|
||||
"ImportListsTraktSettingsRating": "Classificação",
|
||||
"AutoTaggingSpecificationGenre": "Gênero(s)"
|
||||
"AutoTaggingSpecificationGenre": "Gênero(s)",
|
||||
"AddANewPath": "Adicionar um novo caminho",
|
||||
"AddCustomFilter": "Adicionar Filtro Personalizado"
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
"GrabRelease": "Baixar lançamento",
|
||||
"Grabbed": "Obtido",
|
||||
"Grab": "Obter",
|
||||
"GoToInterp": "Ir para {0}",
|
||||
"MovieDetailsGoTo": "Ir para {0}",
|
||||
"Global": "Global",
|
||||
"Genres": "Gêneros",
|
||||
"GeneralSettingsSummary": "Porta, SSL, nome de usuário/senha, proxy, análises e atualizações",
|
||||
@@ -100,10 +100,10 @@
|
||||
"Folders": "Pastas",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Isso também renomeará a pasta do filme de acordo com o formato para pastas de filmes nas Configurações.",
|
||||
"Folder": "Pasta",
|
||||
"FocusSearchBox": "Selecionar a caixa de pesquisa",
|
||||
"KeyboardShortcutsFocusSearchBox": "Selecionar a caixa de pesquisa",
|
||||
"Fixed": "Corrigido",
|
||||
"FirstDayOfWeek": "Primeiro dia da semana",
|
||||
"FilterPlaceHolder": "Pesquisar filmes",
|
||||
"FilterMoviePlaceholder": "Pesquisar filmes",
|
||||
"Filter": "Filtro",
|
||||
"Files": "Arquivos",
|
||||
"FileNameTokens": "Tokens de nome de arquivo",
|
||||
@@ -112,7 +112,6 @@
|
||||
"FileManagement": "Gerenciamento de arquivo",
|
||||
"ChangeFileDateHelpText": "Alterar a data do arquivo ao importar/verificar novamente",
|
||||
"FeatureRequests": "Solicitação de recursos",
|
||||
"FailedToLoadMovieFromAPI": "Falha ao carregar o filme da API",
|
||||
"FailedLoadingSearchResults": "Falha ao carregar os resultados da pesquisa. Tente novamente.",
|
||||
"FailedDownloadHandling": "Falha no gerenciamento de download",
|
||||
"Failed": "Falhou",
|
||||
@@ -271,11 +270,11 @@
|
||||
"Conditions": "Condições",
|
||||
"Component": "Componente",
|
||||
"CompletedDownloadHandling": "Gerenciamento de downloads concluídos",
|
||||
"Columns": "Colunas",
|
||||
"TableColumns": "Colunas",
|
||||
"ColonReplacementFormatHelpText": "Mude como o {appName} lida com a substituição do dois-pontos",
|
||||
"ColonReplacement": "Substituto para dois-pontos",
|
||||
"Collection": "Coleção",
|
||||
"CloseCurrentModal": "Fechar pop-up atual",
|
||||
"KeyboardShortcutsCloseModal": "Fechar pop-up atual",
|
||||
"Close": "Fechar",
|
||||
"CloneProfile": "Clonar perfil",
|
||||
"CloneIndexer": "Clonar indexador",
|
||||
@@ -457,7 +456,7 @@
|
||||
"Add": "Adicionar",
|
||||
"Activity": "Atividade",
|
||||
"Actions": "Ações",
|
||||
"AcceptConfirmationModal": "Pop-up Aceitar confirmação",
|
||||
"KeyboardShortcutsConfirmModal": "Pop-up Aceitar confirmação",
|
||||
"About": "Sobre",
|
||||
"Analytics": "Análises",
|
||||
"Month": "Mês",
|
||||
@@ -477,8 +476,8 @@
|
||||
"MovieInfoLanguageHelpTextWarning": "É necessário recarregar o navegador",
|
||||
"MovieInfoLanguageHelpText": "Idioma que o {appName} usará para as informações do filme na interface",
|
||||
"MovieInfoLanguage": "Idioma das informações do filme",
|
||||
"MovieIndexScrollTop": "Índice do filme: rolar para cima",
|
||||
"MovieIndexScrollBottom": "Índice do filme: rolar pra baixo",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Índice do filme: rolar para cima",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Índice do filme: rolar pra baixo",
|
||||
"MovieIndex": "Índice do filme",
|
||||
"MovieID": "ID do filme",
|
||||
"MovieFolderFormat": "Formato da pasta do filme",
|
||||
@@ -486,8 +485,8 @@
|
||||
"MovieFiles": "Arquivos do filme",
|
||||
"MovieExcludedFromAutomaticAdd": "Filme excluído da adição automática",
|
||||
"MovieEditor": "Editor de filme",
|
||||
"MovieDetailsPreviousMovie": "Detalhes do filme: filme anterior",
|
||||
"MovieDetailsNextMovie": "Detalhes do filme: próximo filme",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Detalhes do filme: filme anterior",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Detalhes do filme: próximo filme",
|
||||
"MovieChat": "Bate-papo sobre o filme",
|
||||
"MovieAlreadyExcluded": "Filme já excluído",
|
||||
"Movie": "Filme",
|
||||
@@ -596,7 +595,7 @@
|
||||
"TagIsNotUsedAndCanBeDeleted": "A tag não é usada e pode ser excluída",
|
||||
"TagDetails": "Detalhes da Tag - {label}",
|
||||
"TagCannotBeDeletedWhileInUse": "Não pode ser excluído durante o uso",
|
||||
"TableOptionsColumnsMessage": "Escolha quais colunas são visíveis e em que ordem aparecem",
|
||||
"TableColumnsHelpText": "Escolha quais colunas são visíveis e em que ordem aparecem",
|
||||
"TableOptions": "Opções de Tabela",
|
||||
"Table": "Tabela",
|
||||
"SystemTimeHealthCheckMessage": "A hora do sistema está desligada por mais de 1 dia. Tarefas agendadas podem não ser executadas corretamente até que o horário seja corrigido",
|
||||
@@ -619,7 +618,7 @@
|
||||
"SourcePath": "Caminho da Fonte",
|
||||
"Source": "Origem",
|
||||
"Sort": "Ordenar",
|
||||
"SorryThatMovieCannotBeFound": "Desculpe, esse filme não pode ser encontrado.",
|
||||
"MovieCannotBeFound": "Desculpe, esse filme não pode ser encontrado.",
|
||||
"SomeResultsHiddenFilter": "Alguns resultados estão ocultos pelo filtro aplicado",
|
||||
"Socks5": "Socks5 (Suporte à TOR)",
|
||||
"Small": "Pequeno",
|
||||
@@ -688,7 +687,7 @@
|
||||
"ScriptPath": "Caminho do Script",
|
||||
"Score": "Pontuação",
|
||||
"Scheduled": "Programado",
|
||||
"SaveSettings": "Salvar configurações",
|
||||
"KeyboardShortcutsSaveSettings": "Salvar configurações",
|
||||
"SaveChanges": "Salvar Mudanças",
|
||||
"Save": "Salvar",
|
||||
"Runtime": "Duração",
|
||||
@@ -852,7 +851,7 @@
|
||||
"OrganizeConfirm": "Tem certeza de que deseja organizar todos os arquivos no(s) {count} filme(s) selecionado(s)?",
|
||||
"Organize": "Organizar",
|
||||
"Options": "Opções",
|
||||
"OpenThisModal": "Abrir este pop-up",
|
||||
"KeyboardShortcutsOpenModal": "Abrir este pop-up",
|
||||
"OpenBrowserOnStart": "Abrir navegador ao iniciar",
|
||||
"OnRename": "Ao Renomear",
|
||||
"OnlyUsenet": "Só Usenet",
|
||||
@@ -1066,8 +1065,8 @@
|
||||
"RecycleBinUnableToWriteHealthCheck": "Não é possível gravar na pasta da lixeira configurada: {path}. Certifique-se de que este caminho exista e seja gravável pelo usuário executando o {appName}",
|
||||
"MovieMatchType": "Tipo de filme correspondente",
|
||||
"Loading": "Carregando",
|
||||
"ThereWasAnErrorLoadingThisItem": "Ocorreu um erro ao carregar este item",
|
||||
"ThereWasAnErrorLoadingThisPage": "Ocorreu um erro ao carregar esta página",
|
||||
"ErrorLoadingItem": "Ocorreu um erro ao carregar este item",
|
||||
"ErrorLoadingPage": "Ocorreu um erro ao carregar esta página",
|
||||
"ShowCinemaReleaseHelpText": "Mostrar data de lançamento do cinema sob o pôster",
|
||||
"OnHealthRestored": "Com a Saúde Restaurada",
|
||||
"OnManualInteractionRequired": "Na Interação Manual Necessária",
|
||||
@@ -1929,9 +1928,42 @@
|
||||
"ImportListsTraktSettingsUserListTypeWatched": "Lista de Assistidos do Usuário",
|
||||
"ImportListsTraktSettingsUserListUsernameHelpText": "Nome de usuário da lista a importar (deixe em branco para usar o Usuário autenticado)",
|
||||
"ImportListsTraktSettingsWatchListSorting": "Classificação da Lista para Assistir",
|
||||
"DownloadClientUTorrentProviderMessage": "Como o uTorrent é conhecido por CryptoWare, malware e anúncios, sugerimos mudar para um cliente melhor como Qbittorrent, Deluge ou ruTorrent.",
|
||||
"DownloadClientUTorrentProviderMessage": "O uTorrent tem um histórico de incluir criptos mineradores, malware e anúncios. Recomendamos fortemente que você escolha um cliente diferente.",
|
||||
"BlocklistedAt": "Lista de bloqueio em {date}",
|
||||
"FailedAt": "Falhou em {date}",
|
||||
"GrabbedAt": "Obtido em {date}",
|
||||
"EditMovieModalHeader": "Editar - {title}"
|
||||
"EditMovieModalHeader": "Editar - {title}",
|
||||
"FilterGreaterThanOrEqual": "maior ou igual a",
|
||||
"FilterInLast": "no(a) último(a)",
|
||||
"FilterInNext": "no(a) próximo(a)",
|
||||
"FilterLessThan": "menor que",
|
||||
"FilterLessThanOrEqual": "menor ou igual a",
|
||||
"FilterNotEqual": "não é igual a",
|
||||
"FilterNotInLast": "não no(a) último(a)",
|
||||
"FilterNotInNext": "não no(a) próximo(a)",
|
||||
"Umask775Description": "{octal} - gravação do proprietário e do grupo, leitura de outros",
|
||||
"AddANewPath": "Adicionar um novo caminho",
|
||||
"AddCustomFilter": "Adicionar filtro personalizado",
|
||||
"ErrorLoadingContent": "Ocorreu um erro ao carregar este conteúdo",
|
||||
"FilterContains": "contém",
|
||||
"FilterDoesNotContain": "não contém",
|
||||
"FilterDoesNotEndWith": "não termina com",
|
||||
"FilterDoesNotStartWith": "não começa com",
|
||||
"FilterEndsWith": "termina com",
|
||||
"FilterEqual": "igual a",
|
||||
"FilterGreaterThan": "maior que",
|
||||
"FilterIs": "é",
|
||||
"FilterIsAfter": "está depois de",
|
||||
"FilterIsBefore": "está antes de",
|
||||
"FilterIsNot": "não é",
|
||||
"FilterStartsWith": "começa com",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} Livre",
|
||||
"SearchForQuery": "Pesquisar por {query}",
|
||||
"Tba": "A ser anunciado",
|
||||
"TotalRecords": "Total de registros: {totalRecords}",
|
||||
"Umask750Description": "{octal} - gravação do proprietário, leitura do grupo",
|
||||
"Umask755Description": "{octal} - Escrita do proprietário, todos os outros lêem",
|
||||
"Umask770Description": "{octal} - proprietário e gravação do grupo",
|
||||
"Umask777Description": "{octal} - Todo mundo escreve",
|
||||
"SelectMovieModalTitle": "{modalTitle} - Selecionar filme"
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
"CustomFormatScore": "Scorul formatului personalizat",
|
||||
"ConnectionLost": "Conexiune Pierdută",
|
||||
"Component": "Componentă",
|
||||
"Columns": "Coloane",
|
||||
"TableColumns": "Coloane",
|
||||
"Close": "Închide",
|
||||
"Cancel": "Anulează",
|
||||
"AudioInfo": "Info Audio",
|
||||
@@ -197,7 +197,7 @@
|
||||
"Tasks": "Operațiuni",
|
||||
"TagsSettingsSummary": "Vezi toate etichetele și cum sunt folosite. Etichetele nefolosite pot fi eliminate",
|
||||
"Tags": "Etichete",
|
||||
"TableOptionsColumnsMessage": "Alege ce coloane sunt vizibile și în ce ordine apar",
|
||||
"TableColumnsHelpText": "Alege ce coloane sunt vizibile și în ce ordine apar",
|
||||
"TableOptions": "Opțiuni tabel",
|
||||
"SystemTimeHealthCheckMessage": "Ora sistemului este diferită cu mai mult de 1 zi. Operațiunile programate s-ar putea să nu funcționeze corect până când ora nu este corectată",
|
||||
"System": "Sistem",
|
||||
@@ -316,7 +316,7 @@
|
||||
"ShowSearchHelpText": "Afișați butonul de căutare pe hover",
|
||||
"Socks5": "Șosete5 (Suport TOR)",
|
||||
"SomeResultsHiddenFilter": "Unele rezultate sunt ascunse de filtrul aplicat",
|
||||
"SorryThatMovieCannotBeFound": "Ne pare rău, filmul respectiv nu poate fi găsit.",
|
||||
"MovieCannotBeFound": "Ne pare rău, filmul respectiv nu poate fi găsit.",
|
||||
"TheLogLevelDefault": "Nivelul jurnalului este implicit la „Informații” și poate fi modificat în",
|
||||
"ThisCannotBeCancelled": "Acest lucru nu poate fi anulat odată pornit fără a reporni {appName}.",
|
||||
"TorrentDelayHelpText": "Întârziați în câteva minute pentru a aștepta înainte de a apuca un torent",
|
||||
@@ -346,7 +346,7 @@
|
||||
"ImportExtraFilesMovieHelpText": "Importați fișiere suplimentare potrivite (subtitrări, nfo etc.) după importarea unui fișier de film",
|
||||
"ImportNotForDownloads": "Nu utilizați pentru importul de descărcări de la clientul dvs. de descărcare, aceasta este doar pentru bibliotecile organizate existente, nu fișiere nesortate.",
|
||||
"Importing": "Importând",
|
||||
"AcceptConfirmationModal": "Acceptare modal de confirmare",
|
||||
"KeyboardShortcutsConfirmModal": "Acceptare modal de confirmare",
|
||||
"LastExecution": "Ultima executare",
|
||||
"DatabaseMigration": "Migrarea BD",
|
||||
"Manual": "Manual",
|
||||
@@ -356,7 +356,7 @@
|
||||
"OnlyUsenet": "Doar Usenet",
|
||||
"OnRename": "La Redenumire",
|
||||
"OpenBrowserOnStart": "Deschideți browserul la pornire",
|
||||
"OpenThisModal": "Deschideți acest modal",
|
||||
"KeyboardShortcutsOpenModal": "Deschideți acest modal",
|
||||
"PendingChangesDiscardChanges": "Aruncați modificările și plecați",
|
||||
"PendingChangesMessage": "Aveți modificări nesalvate, sunteți sigur că doriți să părăsiți această pagină?",
|
||||
"Pending": "In asteptarea",
|
||||
@@ -590,7 +590,7 @@
|
||||
"ClickToChangeQuality": "Faceți clic pentru a schimba calitatea",
|
||||
"CloneIndexer": "Clonează Indexer",
|
||||
"CloneProfile": "Clonează Profil",
|
||||
"CloseCurrentModal": "Închideți modul curent",
|
||||
"KeyboardShortcutsCloseModal": "Închideți modul curent",
|
||||
"ColonReplacement": "Înlocuirea colonului",
|
||||
"ColonReplacementFormatHelpText": "Schimbați modul în care {appName} gestionează înlocuirea colonului",
|
||||
"Conditions": "Condiții",
|
||||
@@ -676,13 +676,12 @@
|
||||
"ExternalUpdater": "{appName} este configurat pentru a utiliza un mecanism de actualizare extern",
|
||||
"ExtraFileExtensionsHelpText": "Lista separată prin virgulă a fișierelor suplimentare de importat (.nfo va fi importat ca .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemple: „.sub, .nfo” sau „sub, nfo”",
|
||||
"FailedToLoadMovieFromAPI": "Nu s-a putut încărca filmul din API",
|
||||
"FeatureRequests": "Cereri de caracteristici",
|
||||
"ChangeFileDateHelpText": "Schimbați data fișierului la import / rescanare",
|
||||
"FileNames": "Numele fișierelor",
|
||||
"FilterPlaceHolder": "Căutați filme",
|
||||
"FilterMoviePlaceholder": "Căutați filme",
|
||||
"Fixed": "Fix",
|
||||
"FocusSearchBox": "Caseta de căutare Focus",
|
||||
"KeyboardShortcutsFocusSearchBox": "Caseta de căutare Focus",
|
||||
"MoveMovieFoldersRenameFolderWarning": "Aceasta va redenumi și folderul filmului în funcție de formatul folderului filmului în setări.",
|
||||
"Folders": "Dosare",
|
||||
"FollowPerson": "Urmărește persoana",
|
||||
@@ -690,7 +689,7 @@
|
||||
"SupportedIndexersMoreInfo": "Pentru mai multe informații despre indexatorii individuali, faceți clic pe butoanele de informații.",
|
||||
"GeneralSettings": "Setări generale",
|
||||
"Global": "Global",
|
||||
"GoToInterp": "Accesați {0}",
|
||||
"MovieDetailsGoTo": "Accesați {0}",
|
||||
"Grab": "Apuca",
|
||||
"GrabRelease": "Grab Release",
|
||||
"GrabReleaseMessageText": "{appName} nu a putut stabili pentru ce film a fost lansată această lansare. Este posibil ca {appName} să nu poată importa automat această versiune. Doriți să luați „{0}”?",
|
||||
@@ -751,9 +750,9 @@
|
||||
"MonitorMovie": "Monitorizați filmul",
|
||||
"MovieAlreadyExcluded": "Filmul deja a fost exclus",
|
||||
"MovieChat": "Film Chat",
|
||||
"MovieDetailsNextMovie": "Detalii film: Următorul film",
|
||||
"MovieIndexScrollBottom": "Index film: Derulați partea de jos",
|
||||
"MovieIndexScrollTop": "Index film: Derulați sus",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Detalii film: Următorul film",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Index film: Derulați partea de jos",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Index film: Derulați sus",
|
||||
"MovieInfoLanguage": "Limba informațiilor despre film",
|
||||
"MovieIsOnImportExclusionList": "Filmul se află pe lista de excluderi de import",
|
||||
"MultiLanguage": "Multi-Limbaj",
|
||||
@@ -808,7 +807,7 @@
|
||||
"RssIsNotSupportedWithThisIndexer": "RSS nu este suportat de acest indexator",
|
||||
"RssSyncInterval": "Interval de sincronizare RSS",
|
||||
"RssSyncIntervalHelpTextWarning": "Acest lucru se va aplica tuturor indexatorilor, vă rugăm să urmați regulile stabilite de aceștia",
|
||||
"SaveSettings": "Salvează setările",
|
||||
"KeyboardShortcutsSaveSettings": "Salvează setările",
|
||||
"Score": "Scor",
|
||||
"Script": "Script",
|
||||
"ScriptPath": "Calea Scriptului",
|
||||
@@ -943,7 +942,7 @@
|
||||
"Yesterday": "Ieri",
|
||||
"MaintenanceRelease": "Versiune de întreținere: remedieri de erori și alte îmbunătățiri. Consultați Istoricul comiterilor Github pentru mai multe detalii",
|
||||
"MissingNotMonitored": "Lipsește (fără monitorizare)",
|
||||
"MovieDetailsPreviousMovie": "Detalii film: Filmul anterior",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Detalii film: Filmul anterior",
|
||||
"MovieExcludedFromAutomaticAdd": "Filmul este exclus din adăugarea automată",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "Versiunea SQLite instalată în prezent {0} nu mai este acceptată. Actualizați SQLite la cel puțin versiunea {1}.",
|
||||
"ShowReleaseDate": "Afișează data lansării",
|
||||
@@ -1169,5 +1168,6 @@
|
||||
"ApiKeyValidationHealthCheckMessage": "Te rugăm să actualizezi cheia API astfel încât să aibă cel puțin {length} caractere. Poți face acest lucru din setări sau din fișierul de configurare",
|
||||
"ImportListsTraktSettingsCertification": "Certificare",
|
||||
"ImportListsTraktSettingsGenres": "Genuri",
|
||||
"ImportListsTraktSettingsRating": "Recenzii"
|
||||
"ImportListsTraktSettingsRating": "Recenzii",
|
||||
"AddCustomFilter": "Adaugă filtru personalizat"
|
||||
}
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
"CalendarOptions": "Настройки календаря",
|
||||
"ChangeHasNotBeenSavedYet": "Изменения ещё не вступили в силу",
|
||||
"ColonReplacementFormatHelpText": "Изменить как {appName} обрабатывает замену двоеточий",
|
||||
"Columns": "Столбцы",
|
||||
"TableColumns": "Столбцы",
|
||||
"Component": "Компонент",
|
||||
"Connection": "Подключение",
|
||||
"CouldNotFindResults": "Не найдено результатов для '{term}'",
|
||||
@@ -448,7 +448,7 @@
|
||||
"OrganizeConfirm": "Вы действительно хотите организовать все файлы в {count} выбранных фильм(ах)?",
|
||||
"Organize": "Организовать",
|
||||
"Options": "Параметры",
|
||||
"OpenThisModal": "Открыть это модальное окно",
|
||||
"KeyboardShortcutsOpenModal": "Открыть это модальное окно",
|
||||
"OpenBrowserOnStart": "Открыть браузер при запуске",
|
||||
"OnRename": "При переименовании",
|
||||
"OnlyUsenet": "Только Usenet",
|
||||
@@ -505,8 +505,8 @@
|
||||
"MovieInfoLanguageHelpTextWarning": "Необходимо перезапустить браузер",
|
||||
"MovieInfoLanguageHelpText": "Язык, который {appName} будет использовать в интерфейсе",
|
||||
"MovieInfoLanguage": "Язык информации о фильме",
|
||||
"MovieIndexScrollTop": "Индекс фильма: Прокрутить вверх",
|
||||
"MovieIndexScrollBottom": "Индекс фильма: Прокрутить вниз",
|
||||
"KeyboardShortcutsMovieIndexScrollTop": "Индекс фильма: Прокрутить вверх",
|
||||
"KeyboardShortcutsMovieIndexScrollBottom": "Индекс фильма: Прокрутить вниз",
|
||||
"MovieIndex": "Индекс фильма",
|
||||
"MovieID": "ID фильма",
|
||||
"MovieFolderFormat": "Форматирование папки фильма",
|
||||
@@ -514,8 +514,8 @@
|
||||
"MovieFiles": "Файлы фильма",
|
||||
"MovieExcludedFromAutomaticAdd": "Фильм исключён из автоматического добавления",
|
||||
"MovieEditor": "Редактор фильма",
|
||||
"MovieDetailsPreviousMovie": "Подробности фильма: предыдущий фильм",
|
||||
"MovieDetailsNextMovie": "Подробности фильма: следующий фильм",
|
||||
"KeyboardShortcutsMovieDetailsPreviousMovie": "Подробности фильма: предыдущий фильм",
|
||||
"KeyboardShortcutsMovieDetailsNextMovie": "Подробности фильма: следующий фильм",
|
||||
"MovieChat": "Чат по фильму",
|
||||
"MovieAlreadyExcluded": "Фильм уже добавлен в исключения",
|
||||
"Movie": "Фильм",
|
||||
@@ -575,7 +575,7 @@
|
||||
"GrabRelease": "Захватить релиз",
|
||||
"Grabbed": "Захвачено",
|
||||
"Grab": "Захватить",
|
||||
"GoToInterp": "Перейти {0}",
|
||||
"MovieDetailsGoTo": "Перейти {0}",
|
||||
"Global": "Глобальный",
|
||||
"Genres": "Жанры",
|
||||
"GeneralSettingsSummary": "Порт, SSL, имя пользователя/пароль, прокси, аналитика и обновления",
|
||||
@@ -593,7 +593,7 @@
|
||||
"Folder": "Каталог",
|
||||
"Fixed": "Исправлено",
|
||||
"FirstDayOfWeek": "Первый день недели",
|
||||
"FilterPlaceHolder": "Искать фильмы",
|
||||
"FilterMoviePlaceholder": "Искать фильмы",
|
||||
"Filter": "Фильтр",
|
||||
"Files": "Файлы",
|
||||
"FileNameTokens": "Токены имени файла",
|
||||
@@ -602,7 +602,6 @@
|
||||
"FileManagement": "Управление файлами",
|
||||
"ChangeFileDateHelpText": "Заменить дату файла при импорте/сканировании",
|
||||
"FeatureRequests": "Запросы функций",
|
||||
"FailedToLoadMovieFromAPI": "Не удалось загрузить фильмы из API",
|
||||
"FailedLoadingSearchResults": "Не удалось загрузить результат поиска, попробуйте еще раз.",
|
||||
"Failed": "Неудачно",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Например: '.sub, .nfo' или 'sub,nfo'",
|
||||
@@ -643,7 +642,7 @@
|
||||
"MaintenanceRelease": "Технический релиз: исправление ошибок и другие улучшения. Подробнее см. в истории коммитов Github.",
|
||||
"IconForCutoffUnmet": "Значок для невыполненного порога",
|
||||
"ICalFeed": "Лента iCal",
|
||||
"FocusSearchBox": "Поле поиска в фокусе",
|
||||
"KeyboardShortcutsFocusSearchBox": "Поле поиска в фокусе",
|
||||
"DownloadPropersAndRepacksHelpTextCustomFormat": "Используйте 'Не предпочитать' для сортировки по рейтингу пользовательского формата по сравнению с Propers / Repacks",
|
||||
"DownloadPropersAndRepacksHelpText": "Следует ли автоматически обновляться до Propers / Repacks",
|
||||
"DownloadPropersAndRepacks": "Проперы и репаки",
|
||||
@@ -673,7 +672,7 @@
|
||||
"Debug": "Отладка",
|
||||
"CutoffUnmet": "Порог невыполнен",
|
||||
"CopyUsingHardlinksMovieHelpText": "Прямые ссылки позволяют {appName} импортировать исходные торренты в папку с фильмами, не занимая дополнительного места на диске и не копируя все содержимое файла. Прямые ссылки будут работать только в том случае, если источник и пункт назначения находятся на одном томе",
|
||||
"CloseCurrentModal": "Закрыть текущее окно",
|
||||
"KeyboardShortcutsCloseModal": "Закрыть текущее окно",
|
||||
"ClickToChangeMovie": "Нажмите, чтобы сменить фильм",
|
||||
"CleanLibraryLevel": "Очистить уровень библиотеки",
|
||||
"ChmodFolderHelpText": "Восьмеричный, применяется при импорте / переименовании к медиа-папкам и файлам (без битов выполнения)",
|
||||
@@ -691,7 +690,7 @@
|
||||
"AuthBasic": "Базовый (Всплывающее окно браузера)",
|
||||
"AgeWhenGrabbed": "Возраст (когда захвачен)",
|
||||
"AddQualityProfile": "Добавить профиль качества",
|
||||
"AcceptConfirmationModal": "Окно подтверждения",
|
||||
"KeyboardShortcutsConfirmModal": "Окно подтверждения",
|
||||
"WhitelistedSubtitleTags": "Теги субтитров в белом списке",
|
||||
"Username": "Имя пользователя",
|
||||
"UseProxy": "Использовать прокси",
|
||||
@@ -778,7 +777,7 @@
|
||||
"Script": "Скрипт",
|
||||
"Score": "Счет",
|
||||
"Scheduled": "Запланировано",
|
||||
"SaveSettings": "Сохранить настройки",
|
||||
"KeyboardShortcutsSaveSettings": "Сохранить настройки",
|
||||
"SaveChanges": "Сохранить изменения",
|
||||
"Save": "Сохранить",
|
||||
"Runtime": "Продолжительность",
|
||||
@@ -847,7 +846,7 @@
|
||||
"TagIsNotUsedAndCanBeDeleted": "Тег не используется и может быть удалён",
|
||||
"TagDetails": "Сведения о теге - {label}",
|
||||
"TagCannotBeDeletedWhileInUse": "Удаление невозможно во время использования",
|
||||
"TableOptionsColumnsMessage": "Выберите видимые столбцы и порядок их отображения",
|
||||
"TableColumnsHelpText": "Выберите видимые столбцы и порядок их отображения",
|
||||
"TableOptions": "Параметры таблицы",
|
||||
"Table": "Таблица",
|
||||
"SystemTimeHealthCheckMessage": "Системное время отклонилось более чем на 1 день. Запланированные задания могут не работать правильно, пока время не будет исправлено",
|
||||
@@ -874,7 +873,7 @@
|
||||
"SourcePath": "Исходный путь",
|
||||
"Source": "Исходный код",
|
||||
"Sort": "Сортировка",
|
||||
"SorryThatMovieCannotBeFound": "Извините, этот фильм не найден.",
|
||||
"MovieCannotBeFound": "Извините, этот фильм не найден.",
|
||||
"SomeResultsHiddenFilter": "Некоторые результаты скрыты примененным фильтром",
|
||||
"Socks5": "Socks5 (Поддержка TOR)",
|
||||
"Socks4": "Socks4 прокси",
|
||||
@@ -1166,8 +1165,8 @@
|
||||
"ShowRottenTomatoesRating": "Показать рейтинг Tomato",
|
||||
"ShowRottenTomatoesRatingHelpText": "Показать рейтинг Tomato под постером",
|
||||
"ShowTmdbRating": "Показать рейтинг TMDb",
|
||||
"ThereWasAnErrorLoadingThisItem": "Произошла ошибка при загрузке этого элемента",
|
||||
"ThereWasAnErrorLoadingThisPage": "Произошла ошибка при загрузке этой страницы",
|
||||
"ErrorLoadingItem": "Произошла ошибка при загрузке этого элемента",
|
||||
"ErrorLoadingPage": "Произошла ошибка при загрузке этой страницы",
|
||||
"MatchedToMovie": "Соответствует фильму",
|
||||
"TestParsing": "Тест сбора данных",
|
||||
"ShowTmdbRatingHelpText": "Показать рейтинг TMDb под постером",
|
||||
@@ -1895,7 +1894,7 @@
|
||||
"ShowTraktRating": "Показывать рейтинг в Trakt",
|
||||
"MovieRequested": "Фильм запрошен",
|
||||
"NoCustomFormatsFound": "Нет пользовательских форматов",
|
||||
"DownloadClientUTorrentProviderMessage": "Мы советуем использовать клиенты вроде qBittorrent, Deluge или ruTorrent, т.к. uTorrent известен как программа-шифровальщик и в целом вредоносное ПО.",
|
||||
"DownloadClientUTorrentProviderMessage": "Мы настоятельно советуем не использовать uTorrent, т.к. он известен как программа-шифровальщик и в целом вредоносное ПО.",
|
||||
"ExistsInLibrary": "Существует в библиотеке",
|
||||
"Fallback": "Резервный",
|
||||
"FavoriteFolderAdd": "Добавить избранную папку",
|
||||
@@ -1929,5 +1928,41 @@
|
||||
"MovieFileRenamedTooltip": "Файл фильма переименован",
|
||||
"MovieFolderImportedTooltip": "Фильм импортирован из папки фильма",
|
||||
"Recommended": "Рекомендуемое",
|
||||
"EditMovieModalHeader": "Изменить – {title}"
|
||||
"EditMovieModalHeader": "Изменить – {title}",
|
||||
"FilterContains": "содержит",
|
||||
"FilterDoesNotContain": "не содержит",
|
||||
"FilterDoesNotEndWith": "не заканчивается",
|
||||
"FilterDoesNotStartWith": "не начинается с",
|
||||
"FilterEndsWith": "заканчивается",
|
||||
"FilterEqual": "равно",
|
||||
"FilterGreaterThan": "больше чем",
|
||||
"FilterIsAfter": "после",
|
||||
"FilterIsBefore": "до",
|
||||
"FilterIsNot": "не является",
|
||||
"FilterLessThan": "меньше, чем",
|
||||
"FilterLessThanOrEqual": "меньше или равно",
|
||||
"FilterNotEqual": "не равно",
|
||||
"FilterNotInLast": "не в последнем",
|
||||
"FilterNotInNext": "не в следующем",
|
||||
"FilterStartsWith": "начинается с",
|
||||
"Umask777Description": "{octal} - пишут все",
|
||||
"AddANewPath": "Добавить новый путь",
|
||||
"AddCustomFilter": "Добавить специальный фильтр",
|
||||
"ErrorLoadingContent": "Произошла ошибка при загрузке этого контента",
|
||||
"FilterGreaterThanOrEqual": "больше или равно",
|
||||
"FilterInLast": "напоследок",
|
||||
"FilterInNext": "в следующий",
|
||||
"FilterIs": "является",
|
||||
"SearchForQuery": "Искать {query}",
|
||||
"RootFolderSelectFreeSpace": "{freeSpace} свободно",
|
||||
"Tba": "Будет объявлено позже",
|
||||
"TotalRecords": "Всего записей: {totalRecords}",
|
||||
"Umask750Description": "{octal} - Владелец (запись), Группы (чтение)",
|
||||
"Umask755Description": "{octal} - Владелец (запись), остальные (чтение)",
|
||||
"Umask770Description": "{octal} - Владелец и группа - запись",
|
||||
"Umask775Description": "{octal} - Владелец и группа - запись, другое - чтение",
|
||||
"GrabbedAt": "Получено {date}",
|
||||
"BlocklistedAt": "Заблокировано {date}",
|
||||
"FailedAt": "Ошибка {date}",
|
||||
"SelectMovieModalTitle": "{modalTitle} - выберите фильм"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user