1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-03-28 18:05:41 -04:00

Compare commits

...

61 Commits

Author SHA1 Message Date
Bogdan
7e83180e50 Remove title for actions in movie history
Closes #9549
2024-01-04 13:24:28 +02:00
Stevie Robinson
e60eed49c7 Translate Notifications settings
(cherry picked from commit 8f7f23c9380036e87669fa663e846321cf7ebf87)

Closes #9550
2024-01-04 12:49:26 +02:00
Gabriel Patzleiner
74cfc94b4c New: Correctly parse German DL and ML tags in releases 2024-01-02 18:58:28 -06:00
Gabriel Patzleiner
213c55c7af Fixed: Don't parse some movies with German in the movie title
fixes #6474
2024-01-02 18:58:28 -06:00
Gabriel Patzleiner
c066fa5e27 Delete tests that are not needed and not working anymore since 7ec0fd1cea 2024-01-02 18:58:28 -06:00
Gabriel Patzleiner
2741ecb968 Added new IndexerBaseFixture to test Multi tag in releases 2024-01-02 18:58:28 -06:00
Qstick
7965c29425 Fixed: Change "Manual Import" to "Manage Files" in MovieDetails
Prevent confusion with interactive search icon being identical and align to Sonarr naming.
2024-01-01 11:35:11 -06:00
Bogdan
d2cbab70a9 New: Confirmation for searching movies 2024-01-01 17:35:01 +02:00
Weblate
16381a1aef Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Mario Rodriguez <mario2423@gmail.com>
Co-authored-by: Norbi <kovinor123@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/
Translation: Servarr/Radarr
2024-01-01 14:11:00 +02:00
Bogdan
b92e08b850 Fixed: Disable movie search button if none are listed 2024-01-01 08:20:35 +02:00
Bogdan
eab470c67f New: Movie search will look for movies that haven't been searched recently first 2024-01-01 08:20:35 +02:00
Mark McDowall
7f11659d95 New: Store last search time for MovieSearch
(cherry picked from commit 9af57c6786)
2024-01-01 08:20:35 +02:00
Mark McDowall
03dec07cbe Fixed: Disable SSL on start if certificate path is not set
(cherry picked from commit 4e19fec123900b8ba1252b640f26f2a4983683ff)
2023-12-31 18:40:21 -06:00
Qstick
554c696ee6 Fixed: MovieDetails size incorrect when moviefile store changes
Use movie prop instead

Closes #9309
2023-12-31 16:47:44 -06:00
Qstick
093f8a39fe New: Custom sort crew by job in movie details 2023-12-31 12:55:09 -06:00
Servarr
8a1663f136 Automated API Docs update 2023-12-31 12:03:51 -06:00
bakerboy448
251d2dde97 Improve Import Custom Format Compare Logging 2023-12-31 11:37:02 -06:00
Qstick
996542a4a5 Reduce size of Collection on Movie endpoint
Ensures we don't send false data and reduces the object size to only what's necessary here.

Closes #9521
2023-12-31 11:29:32 -06:00
randomllama
0914d6250c New: Add Movie Status to Kodi .nfo
Closes #9115

(cherry picked from commit b76de3987b0c30e6509d37d82e3163d067a9c6c8)
2023-12-31 11:19:25 -06:00
Bogdan
3ff8e511b5 New: Tags field for Discord 2023-12-31 18:58:39 +02:00
Qstick
3a7b27fb45 Fixed: Parse HebDubbed as Hebrew
Fixes #9513
2023-12-31 10:48:13 -06:00
Weblate
c81d2c97f5 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Koch Norbert <kochnorbert@icloud.com>
Co-authored-by: Nicola <nicola.neri@gmail.com>
Co-authored-by: SunStorm <me@sunstorm.rocks>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: chiral-lab <jan.eltner@googlemail.com>
Co-authored-by: chrizl <chrizl@gmail.com>
Co-authored-by: resi23 <x-resistant-x@gmx.de>
Co-authored-by: slammingdeath <sebastianbrudny97@gmail.com>
Co-authored-by: ube <ube@alienautopsy.net>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/sv/
Translation: Servarr/Radarr
2023-12-31 12:26:08 +02:00
Bogdan
dae46524c4 Fix possible multiple enumeration in update collections 2023-12-31 09:49:17 +02:00
Stevie Robinson
3c6386f318 Translate fields on the backend
(cherry picked from commit 48b12f5b00429a7cd218d23f0544641b0da62a06)
2023-12-31 09:38:03 +02:00
Mark McDowall
1400a8806d New: Add qBittorrent option for Content Layout
(cherry picked from commit 4b22200708ca120cfdcf9cb796be92183adb95d1)

Closes #9522
2023-12-31 09:38:03 +02:00
Stevie Robinson
e3f33f5a61 New: Add sorting to Manage Indexer and Download Client modals
(cherry picked from commit 91053ca51ded804739f94ee936c1376a755dbe11)

Closes #9524
2023-12-31 09:38:03 +02:00
Stevie Robinson
e6f4b88cf3 New: Show Proper or Repack tag in interactive search
(cherry picked from commit efb000529b5dff42829df3ef151e4750a7b15cf6)

Closes #9523
2023-12-31 09:38:03 +02:00
Bogdan
b788464487 Fixed: Show errors when adding Root Folder
(cherry picked from commit 16d60a6586aeb458601214258da021ee154e5b6e)

Closes #9527
2023-12-31 09:38:03 +02:00
Bogdan
e29717ec6c New: Retry on failed downloads of torrent and nzb files
(cherry picked from commit bc20ef73bdd47b7cdad43d4c7d4b4bd534e49252)

Closes #9528
2023-12-31 09:38:03 +02:00
Bogdan
5d7e23092f Bump version to 5.3.0 2023-12-31 09:38:03 +02:00
Bogdan
9921d51451 Cleanup unused code in movie credit posters 2023-12-25 15:45:33 +02:00
Bogdan
213620cb29 Fixed: Navigation for cast and crew 2023-12-25 14:56:41 +02:00
Bogdan
bdc4aade0f Use extra release fields in PassThePopcorn parser 2023-12-24 06:56:48 +02:00
Weblate
b2300dbf41 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Pietro Ribeiro <xxb1exuv6@mozmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt/
Translation: Servarr/Radarr
2023-12-23 23:31:39 +02:00
Weblate
44289d30f9 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Aitzol Garmendia <aitzolgarmendia@gmail.com>
Co-authored-by: Andrés Reyes Monge <armonge@gmail.com>
Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Michael Schönenberger <muchi94@gmail.com>
Co-authored-by: VisoTC <szlytlyt@outlook.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: ηg <jonas.konrath@icloud.com>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/tr/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/zh_CN/
Translation: Servarr/Radarr
2023-12-22 04:24:19 +02:00
luz paz
260fb88f85 Fix various typos
Found via `codespell -q 3`

(cherry picked from commit 209a250079fdf7ad2bc9168f81bfb45b9531d6b3)
2023-12-19 20:18:54 +02:00
Bogdan
119cdf6f09 Fixed: Cleanup orphaned import list movies by movie metadata 2023-12-18 00:51:59 +02:00
Bogdan
c8d30fd214 Cleanup convert root folders to TS 2023-12-17 23:23:08 +02:00
Bogdan
7e9e528d3b Fixed: Ignore empty tags when adding items to Flood
Fixed #8145
2023-12-17 22:09:13 +02:00
Bogdan
8554c0d9cb Refactor movie alternative titles connector 2023-12-17 19:57:22 +02:00
Bogdan
22cc34b4fe Bump version to 5.2.6 2023-12-17 16:01:10 +02:00
Weblate
990785ebfc Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Menno Liefstingh <mennoliefstingh@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: lifeisfreedom048 <koyuncu.ozgur@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/tr/
Translation: Servarr/Radarr
2023-12-16 02:41:57 +02:00
Bogdan
957be99401 Fixed: Bump media info revision for DV HDR10Plus 2023-12-16 02:41:34 +02:00
Bogdan
4bcde25e29 Improve messaging for accepted Custom Formats scoring upgrades
Co-authored-by: bakerboy448 <55419169+bakerboy448@users.noreply.github.com>

Closes #9496
2023-12-16 00:38:05 +02:00
Bogdan
1d70f36e7d New: 3D and HDR metadata for Trakt connection 2023-12-15 17:13:47 +02:00
Bogdan
cc0a448bc8 New: Rate limiting for Trakt connection 2023-12-15 17:13:47 +02:00
Bogdan
c9e977baea Simplify mapping in Trakt connection 2023-12-15 17:13:47 +02:00
Mark McDowall
6cb9a46cd4 Fixed: Imported movies updating on Calendar
(cherry picked from commit 5a3bc49392b700650a34536ff3794bce614f64a4)

Closes #9491
2023-12-15 16:50:06 +02:00
Agneev Mukherjee
eef379277a Enable browser navigation buttons for PWA
(cherry picked from commit da9a60691f363323565a293ed9eaeb6349ceccb6)

Closes #9487
2023-12-15 16:36:28 +02:00
Chad A Simmons
41fef47684 New: Support for DV HDR10Plus from media info 2023-12-15 03:36:32 +02:00
Weblate
fcda6faf3d Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: ROSERAT Ugo <roserat.ugo@gmail.com>
Co-authored-by: RicardoVelaC <ricardovelac@gmail.com>
Co-authored-by: SHUAI.W <x@ousui.org>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/lv/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/zh_CN/
Translation: Servarr/Radarr
2023-12-13 16:41:49 +02:00
Bogdan
79bbf9c50b Fixed: Movie status label in add movie search results 2023-12-12 21:55:41 +02:00
Bogdan
43d2f2804b New: IMDb ratings and genres in add movie search results 2023-12-12 21:55:09 +02:00
Qstick
fa62f3f66a Fixed: Correctly handle Migration when PG Host has ".db"
(cherry picked from commit 97ee24507f4306e3b62c3d00cd3ade6a09d1b957)

Closes #9478
2023-12-12 15:36:21 +02:00
Bogdan
229d91fe40 Implement DatabaseConnectionInfo
Co-authored-by: Qstick <qstick@gmail.com>
2023-12-12 15:36:14 +02:00
Bogdan
2673d1eee4 Fixed: Movie poster in search results after adding
Fixes #8029
2023-12-11 19:30:31 +02:00
Bogdan
e59fd1118f Fixed: Downloading status post-adding movie 2023-12-11 19:27:05 +02:00
Bogdan
c1fd33b152 Fix categories for NZBFinder 2023-12-10 15:50:19 +02:00
Bogdan
2f58c8676f Bump dotnet to 6.0.25 2023-12-10 15:35:59 +02:00
Fossil
defc448304 Update NZBFinder categories and remove OZnzb & NZB-Tortuga from default definitions (#9474)
NZB Finder will consolidate WEBDL & X265 into SD,HD,UHD so removed 2080 and 2090 categories.

OZnzb and NZB Tortuga are dead so removed it from the presets list.
2023-12-10 15:14:13 +02:00
Bogdan
3ec3358728 Bump version to 5.2.5 2023-12-10 13:47:06 +02:00
187 changed files with 1881 additions and 1509 deletions

View File

@@ -9,13 +9,13 @@ variables:
testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '5.2.4'
majorVersion: '5.3.0'
minorVersion: $[counter('minorVersion', 2000)]
radarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(radarrVersion)'
sentryOrg: 'servarr'
sentryUrl: 'https://sentry.servarr.com'
dotnetVersion: '6.0.413'
dotnetVersion: '6.0.417'
nodeVersion: '16.X'
innoVersion: '6.2.0'
windowsImage: 'windows-2022'

View File

@@ -85,8 +85,13 @@
margin-top: 20px;
}
.studio,
.genres {
margin-left: 5px;
}
.links {
margin-left: 8px;
margin-left: 5px;
pointer-events: all;
}

View File

@@ -5,6 +5,7 @@ interface CssExports {
'certification': string;
'content': string;
'exclusionIcon': string;
'genres': string;
'icons': string;
'links': string;
'overlay': string;
@@ -14,6 +15,7 @@ interface CssExports {
'runtime': string;
'searchResult': string;
'statusContainer': string;
'studio': string;
'title': string;
'titleContainer': string;
'titleRow': string;

View File

@@ -1,6 +1,7 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Icon from 'Components/Icon';
import ImdbRating from 'Components/ImdbRating';
import Label from 'Components/Label';
import Link from 'Components/Link/Link';
import TmdbRating from 'Components/TmdbRating';
@@ -61,6 +62,7 @@ class AddNewMovieSearchResult extends Component {
titleSlug,
year,
studio,
genres,
status,
overview,
ratings,
@@ -76,6 +78,7 @@ class AddNewMovieSearchResult extends Component {
hasFile,
isAvailable,
movieFile,
queueItem,
runtime,
movieRuntimeFormat,
certification
@@ -197,13 +200,46 @@ class AddNewMovieSearchResult extends Component {
/>
</Label>
{
ratings.imdb ?
<Label size={sizes.LARGE}>
<ImdbRating
ratings={ratings}
iconSize={13}
/>
</Label> :
null
}
{
!!studio &&
<Label size={sizes.LARGE}>
{studio}
<Icon
name={icons.STUDIO}
size={13}
/>
<span className={styles.studio}>
{studio}
</span>
</Label>
}
{
genres.length > 0 ?
<Label size={sizes.LARGE}>
<Icon
name={icons.GENRE}
size={13}
/>
<span className={styles.genres}>
{genres.slice(0, 3).join(', ')}
</span>
</Label> :
null
}
<Tooltip
anchor={
<Label
@@ -215,15 +251,15 @@ class AddNewMovieSearchResult extends Component {
/>
<span className={styles.links}>
Links
{translate('Links')}
</span>
</Label>
}
tooltip={
<MovieDetailsLinks
tmdbId={tmdbId}
youTubeTrailerId={youTubeTrailerId}
imdbId={imdbId}
youTubeTrailerId={youTubeTrailerId}
/>
}
canFlip={true}
@@ -237,6 +273,7 @@ class AddNewMovieSearchResult extends Component {
hasMovieFiles={hasFile}
monitored={monitored}
isAvailable={isAvailable}
queueItem={queueItem}
id={id}
useLabel={true}
colorImpairedMode={colorImpairedMode}
@@ -273,6 +310,7 @@ AddNewMovieSearchResult.propTypes = {
titleSlug: PropTypes.string.isRequired,
year: PropTypes.number.isRequired,
studio: PropTypes.string,
genres: PropTypes.arrayOf(PropTypes.string),
status: PropTypes.string.isRequired,
overview: PropTypes.string,
ratings: PropTypes.object.isRequired,
@@ -283,15 +321,19 @@ AddNewMovieSearchResult.propTypes = {
isExclusionMovie: PropTypes.bool.isRequired,
isSmallScreen: PropTypes.bool.isRequired,
id: PropTypes.number,
queueItems: PropTypes.arrayOf(PropTypes.object),
monitored: PropTypes.bool.isRequired,
hasFile: 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
};
AddNewMovieSearchResult.defaultProps = {
genres: []
};
export default AddNewMovieSearchResult;

View File

@@ -10,14 +10,18 @@ function createMapStateToProps() {
createExistingMovieSelector(),
createExclusionMovieSelector(),
createDimensionsSelector(),
(state) => state.queue.details.items,
(state, { internalId }) => internalId,
(state) => state.settings.ui.item.movieRuntimeFormat,
(isExistingMovie, isExclusionMovie, dimensions, internalId, movieRuntimeFormat) => {
(isExistingMovie, isExclusionMovie, dimensions, queueItems, internalId, movieRuntimeFormat) => {
const queueItem = queueItems.find((item) => internalId > 0 && item.movieId === internalId);
return {
existingMovieId: internalId,
isExistingMovie,
isExclusionMovie,
isSmallScreen: dimensions.isSmallScreen,
queueItem,
movieRuntimeFormat
};
}

View File

@@ -32,7 +32,7 @@
.contentContainer {
z-index: $popperZIndex;
margin-top: 4px;
/* 400px container witdh with 8px padding on each side */
/* 400px container width with 8px padding on each side */
width: 384px;
}

View File

@@ -148,7 +148,7 @@ class ImportMovieSelectFolder extends Component {
className={styles.addErrorAlert}
kind={kinds.DANGER}
>
{translate('UnableToAddRootFolder')}
{translate('AddRootFolderError')}
<ul>
{

View File

@@ -55,7 +55,7 @@ class CalendarConnector extends Component {
gotoCalendarToday
} = this.props;
registerPagePopulator(this.repopulate);
registerPagePopulator(this.repopulate, ['movieFileUpdated', 'movieFileDeleted']);
if (useCurrentPage) {
fetchCalendar();

View File

@@ -167,7 +167,7 @@ class SignalRConnector extends Component {
const resource = body.resource;
const status = resource.status;
// Both sucessful and failed commands need to be
// Both successful and failed commands need to be
// completed, otherwise they spin until they timeout.
if (status === 'completed' || status === 'failed') {
@@ -187,6 +187,8 @@ class SignalRConnector extends Component {
repopulatePage('movieFileUpdated');
} else if (body.action === 'deleted') {
this.props.dispatchRemoveItem({ section, id: body.resource.id });
repopulatePage('movieFileDeleted');
}
};

View File

@@ -15,5 +15,5 @@
"start_url": "../../../../",
"theme_color": "#3a3f51",
"background_color": "#3a3f51",
"display": "standalone"
"display": "minimal-ui"
}

View File

@@ -22,6 +22,10 @@
composes: cell from '~Components/Table/Cells/TableRowCell.css';
}
.quality {
white-space: nowrap;
}
.languages {
width: 100px;
}

View File

@@ -266,7 +266,7 @@ function InteractiveSearchRow(props: InteractiveSearchRowProps) {
</TableRowCell>
<TableRowCell className={styles.quality}>
<MovieQuality quality={quality} />
<MovieQuality quality={quality} showRevision={true} />
</TableRowCell>
<TableRowCell className={styles.customFormatScore}>

View File

@@ -5,6 +5,29 @@ import { createSelector } from 'reselect';
import MovieCreditPosters from '../MovieCreditPosters';
import MovieCrewPoster from './MovieCrewPoster';
function crewSort(a, b) {
const jobOrder = ['Director', 'Writer', 'Producer', 'Executive Producer', 'Director of Photography'];
const indexA = jobOrder.indexOf(a.job);
const indexB = jobOrder.indexOf(b.job);
if (indexA === -1 && indexB === -1) {
return 0;
} else if (indexA === -1) {
return 1;
} else if (indexB === -1) {
return -1;
}
if (indexA < indexB) {
return -1;
} else if (indexA > indexB) {
return 1;
}
return 0;
}
function createMapStateToProps() {
return createSelector(
(state) => state.movieCredits.items,
@@ -17,8 +40,10 @@ function createMapStateToProps() {
return acc;
}, []);
const sortedCrew = crew.sort(crewSort);
return {
items: _.uniqBy(crew, 'personName')
items: _.uniqBy(sortedCrew, 'personName')
};
}
);

View File

@@ -9,3 +9,9 @@
.container {
padding: 10px;
}
.sliderContainer {
--swiper-navigation-color: var(--white);
display: block;
}

View File

@@ -4,6 +4,7 @@ interface CssExports {
'container': string;
'grid': string;
'movie': string;
'sliderContainer': string;
}
export const cssExports: CssExports;
export default cssExports;

View File

@@ -14,24 +14,6 @@ import 'swiper/css/navigation';
const columnPadding = parseInt(dimensions.movieIndexColumnPadding);
const columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen);
const additionalColumnCount = {
small: 3,
medium: 2,
large: 1
};
function calculateColumnWidth(width, posterSize, isSmallScreen) {
const maxiumColumnWidth = isSmallScreen ? 172 : 182;
const columns = Math.floor(width / maxiumColumnWidth);
const remainder = width % maxiumColumnWidth;
if (remainder === 0 && posterSize === 'large') {
return maxiumColumnWidth;
}
return Math.floor(width / (columns + additionalColumnCount[posterSize]));
}
function calculateRowHeight(posterHeight, isSmallScreen) {
const titleHeight = 19;
const characterHeight = 19;
@@ -46,10 +28,6 @@ function calculateRowHeight(posterHeight, isSmallScreen) {
return heights.reduce((acc, height) => acc + height, 0);
}
function calculatePosterHeight(posterWidth) {
return Math.ceil((250 / 170) * posterWidth);
}
class MovieCreditPosters extends Component {
//
@@ -66,32 +44,8 @@ class MovieCreditPosters extends Component {
posterHeight: 238,
rowHeight: calculateRowHeight(238, props.isSmallScreen)
};
this._isInitialized = false;
}
//
// Control
calculateGrid = (width = this.state.width, isSmallScreen) => {
const padding = isSmallScreen ? columnPaddingSmallScreen : columnPadding;
const columnWidth = calculateColumnWidth(width, 'small', isSmallScreen);
const columnCount = Math.max(Math.floor(width / columnWidth), 1);
const posterWidth = columnWidth - padding;
const posterHeight = calculatePosterHeight(posterWidth);
const rowHeight = calculateRowHeight(posterHeight, isSmallScreen);
this.setState({
width,
columnWidth,
columnCount,
posterWidth,
posterHeight,
rowHeight
});
};
//
// Render
@@ -114,13 +68,12 @@ class MovieCreditPosters extends Component {
slidesPerView='auto'
spaceBetween={10}
slidesPerGroup={3}
navigation={true}
loop={false}
loopFillGroupWithBlank={true}
className="mySwiper"
modules={[Navigation]}
onInit={(swiper) => {
swiper.params.navigation.prevEl = this._swiperPrevRef;
swiper.params.navigation.nextEl = this._swiperNextRef;
swiper.navigation.init();
swiper.navigation.update();
}}

View File

@@ -320,8 +320,8 @@ class MovieDetails extends Component {
/>
<PageToolbarButton
label={translate('ManualImport')}
iconName={icons.INTERACTIVE}
label={translate('ManageFiles')}
iconName={icons.MOVIE_FILE}
onPress={this.onInteractiveImportPress}
/>
@@ -704,6 +704,7 @@ class MovieDetails extends Component {
<InteractiveImportModal
isOpen={isInteractiveImportModalOpen}
movieId={id}
modalTitle={translate('ManageFiles')}
folder={path}
allowMovieChange={false}
showFilterExistingFiles={true}

View File

@@ -33,14 +33,11 @@ const selectMovieFiles = createSelector(
const hasMovieFiles = !!items.length;
const sizeOnDisk = items.map((item) => item.size).reduce((prev, curr) => prev + curr, 0);
return {
isMovieFilesFetching: isFetching,
isMovieFilesPopulated: isPopulated,
movieFilesError: error,
hasMovieFiles,
sizeOnDisk
hasMovieFiles
};
}
);
@@ -104,8 +101,7 @@ function createMapStateToProps() {
isMovieFilesFetching,
isMovieFilesPopulated,
movieFilesError,
hasMovieFiles,
sizeOnDisk
hasMovieFiles
} = movieFiles;
const {
@@ -161,7 +157,6 @@ function createMapStateToProps() {
movieCreditsError,
extraFilesError,
hasMovieFiles,
sizeOnDisk,
previousMovie,
nextMovie,
isSmallScreen: dimensions.isSmallScreen,

View File

@@ -6,31 +6,43 @@ import MovieTitlesTableContent from './MovieTitlesTableContent';
function createMapStateToProps() {
return createSelector(
(state, { movieId }) => movieId,
(state) => state.movies,
(movies) => {
return movies;
(movieId, movies) => {
const {
isFetching,
isPopulated,
error,
items
} = movies;
const alternateTitles = items.find((m) => m.id === movieId)?.alternateTitles;
return {
isFetching,
isPopulated,
error,
alternateTitles
};
}
);
}
const mapDispatchToProps = {
// fetchMovies
};
class MovieTitlesTableContentConnector extends Component {
//
// Render
render() {
const movie = this.props.items.filter((obj) => {
return obj.id === this.props.movieId;
});
const {
alternateTitles,
...otherProps
} = this.props;
return (
<MovieTitlesTableContent
{...this.props}
items={movie[0].alternateTitles}
{...otherProps}
items={alternateTitles}
/>
);
}
@@ -38,7 +50,11 @@ class MovieTitlesTableContentConnector extends Component {
MovieTitlesTableContentConnector.propTypes = {
movieId: PropTypes.number.isRequired,
items: PropTypes.arrayOf(PropTypes.object).isRequired
alternateTitles: PropTypes.arrayOf(PropTypes.object).isRequired
};
export default connect(createMapStateToProps, mapDispatchToProps)(MovieTitlesTableContentConnector);
MovieTitlesTableContentConnector.defaultProps = {
alternateTitles: []
};
export default connect(createMapStateToProps)(MovieTitlesTableContentConnector);

View File

@@ -56,7 +56,6 @@ const columns = [
},
{
name: 'actions',
label: () => translate('Actions'),
isVisible: true
}
];

View File

@@ -7,8 +7,7 @@ import ConfirmModal from 'Components/Modal/ConfirmModal';
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableRow from 'Components/Table/TableRow';
import Tooltip from 'Components/Tooltip/Tooltip';
import { icons, kinds, tooltipPositions } from 'Helpers/Props';
import { icons, kinds } from 'Helpers/Props';
import MovieFormats from 'Movie/MovieFormats';
import MovieLanguage from 'Movie/MovieLanguage';
import MovieQuality from 'Movie/MovieQuality';
@@ -103,20 +102,11 @@ class MovieHistoryRow extends Component {
</TableRowCell>
<TableRowCell>
<MovieFormats
formats={customFormats}
/>
<MovieFormats formats={customFormats} />
</TableRowCell>
<TableRowCell className={styles.customFormatScore}>
<Tooltip
anchor={formatCustomFormatScore(
customFormatScore,
customFormats.length
)}
tooltip={<MovieFormats formats={customFormats} />}
position={tooltipPositions.TOP}
/>
{formatCustomFormatScore(customFormatScore, customFormats.length)}
</TableRowCell>
<RelativeDateCellConnector
@@ -134,6 +124,7 @@ class MovieHistoryRow extends Component {
<IconButton
title={translate('MarkAsFailed')}
name={icons.REMOVE}
size={14}
onPress={this.onMarkAsFailedPress}
/>
}

View File

@@ -1,11 +1,12 @@
import React, { useCallback, useMemo } from 'react';
import React, { useCallback, useMemo, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { useSelect } from 'App/SelectContext';
import ClientSideCollectionAppState from 'App/State/ClientSideCollectionAppState';
import MoviesAppState, { MovieIndexAppState } from 'App/State/MoviesAppState';
import { MOVIE_SEARCH } from 'Commands/commandNames';
import ConfirmModal from 'Components/Modal/ConfirmModal';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import { icons } from 'Helpers/Props';
import { icons, kinds } from 'Helpers/Props';
import { executeCommand } from 'Store/Actions/commandActions';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import createMovieClientSideCollectionItemsSelector from 'Store/Selectors/createMovieClientSideCollectionItemsSelector';
@@ -21,11 +22,12 @@ function MovieIndexSearchButton(props: MovieIndexSearchButtonProps) {
const isSearching = useSelector(createCommandExecutingSelector(MOVIE_SEARCH));
const {
items,
totalItems,
}: MoviesAppState & MovieIndexAppState & ClientSideCollectionAppState =
useSelector(createMovieClientSideCollectionItemsSelector('movieIndex'));
const dispatch = useDispatch();
const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false);
const { isSelectMode, selectedFilterKey } = props;
const [selectState] = useSelect();
const { selectedState } = selectState;
@@ -50,6 +52,8 @@ function MovieIndexSearchButton(props: MovieIndexSearchButtonProps) {
: translate('SearchAll');
const onPress = useCallback(() => {
setIsConfirmModalOpen(false);
dispatch(
executeCommand({
name: MOVIE_SEARCH,
@@ -58,14 +62,36 @@ function MovieIndexSearchButton(props: MovieIndexSearchButtonProps) {
);
}, [dispatch, moviesToSearch]);
const onConfirmPress = useCallback(() => {
setIsConfirmModalOpen(true);
}, [setIsConfirmModalOpen]);
const onConfirmModalClose = useCallback(() => {
setIsConfirmModalOpen(false);
}, [setIsConfirmModalOpen]);
return (
<PageToolbarButton
label={isSelectMode ? searchSelectLabel : searchIndexLabel}
isSpinning={isSearching}
isDisabled={!totalItems}
iconName={icons.SEARCH}
onPress={onPress}
/>
<>
<PageToolbarButton
label={isSelectMode ? searchSelectLabel : searchIndexLabel}
isSpinning={isSearching}
isDisabled={!items.length}
iconName={icons.SEARCH}
onPress={moviesToSearch.length > 5 ? onConfirmPress : onPress}
/>
<ConfirmModal
isOpen={isConfirmModalOpen}
kind={kinds.DANGER}
title={isSelectMode ? searchSelectLabel : searchIndexLabel}
message={translate('SearchMoviesConfirmationMessageText', {
count: moviesToSearch.length,
})}
confirmLabel={isSelectMode ? searchSelectLabel : searchIndexLabel}
onConfirm={onPress}
onCancel={onConfirmModalClose}
/>
</>
);
}

View File

@@ -3,6 +3,7 @@ import React from 'react';
import Label from 'Components/Label';
import { kinds } from 'Helpers/Props';
import formatBytes from 'Utilities/Number/formatBytes';
import translate from 'Utilities/String/translate';
function getTooltip(title, quality, size, isMonitored, isCutoffNotMet) {
const revision = quality.revision;
@@ -28,6 +29,36 @@ function getTooltip(title, quality, size, isMonitored, isCutoffNotMet) {
return title;
}
function revisionLabel(className, quality, showRevision) {
if (!showRevision) {
return;
}
if (quality.revision.isRepack) {
return (
<Label
className={className}
kind={kinds.PRIMARY}
title={translate('Repack')}
>
R
</Label>
);
}
if (quality.revision.version && quality.revision.version > 1) {
return (
<Label
className={className}
kind={kinds.PRIMARY}
title={translate('Proper')}
>
P
</Label>
);
}
}
function MovieQuality(props) {
const {
className,
@@ -35,7 +66,8 @@ function MovieQuality(props) {
quality,
size,
isMonitored,
isCutoffNotMet
isCutoffNotMet,
showRevision
} = props;
let kind = kinds.DEFAULT;
@@ -50,13 +82,15 @@ function MovieQuality(props) {
}
return (
<Label
className={className}
kind={kind}
title={getTooltip(title, quality, size, isMonitored, isCutoffNotMet)}
>
{quality.quality.name}
</Label>
<span>
<Label
className={className}
kind={kind}
title={getTooltip(title, quality, size, isMonitored, isCutoffNotMet)}
>
{quality.quality.name}
</Label>{revisionLabel(className, quality, showRevision)}
</span>
);
}
@@ -66,12 +100,14 @@ MovieQuality.propTypes = {
quality: PropTypes.object.isRequired,
size: PropTypes.number,
isMonitored: PropTypes.bool,
isCutoffNotMet: PropTypes.bool
isCutoffNotMet: PropTypes.bool,
showRevision: PropTypes.bool
};
MovieQuality.defaultProps = {
title: '',
isMonitored: true
isMonitored: true,
showRevision: false
};
export default MovieQuality;

View File

@@ -1,82 +0,0 @@
import PropTypes from 'prop-types';
import React from 'react';
import Label from 'Components/Label';
import IconButton from 'Components/Link/IconButton';
import Link from 'Components/Link/Link';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableRow from 'Components/Table/TableRow';
import { icons, kinds } from 'Helpers/Props';
import formatBytes from 'Utilities/Number/formatBytes';
import translate from 'Utilities/String/translate';
import styles from './RootFolderRow.css';
function RootFolderRow(props) {
const {
id,
path,
accessible,
freeSpace,
unmappedFolders,
onDeletePress
} = props;
const isUnavailable = !accessible;
return (
<TableRow>
<TableRowCell>
{
isUnavailable ?
<div className={styles.unavailablePath}>
{path}
<Label
className={styles.unavailableLabel}
kind={kinds.DANGER}
>
{translate('Unavailable')}
</Label>
</div> :
<Link
className={styles.link}
to={`/add/import/${id}`}
>
{path}
</Link>
}
</TableRowCell>
<TableRowCell className={styles.freeSpace}>
{(isUnavailable || isNaN(freeSpace)) ? '-' : formatBytes(freeSpace)}
</TableRowCell>
<TableRowCell className={styles.unmappedFolders}>
{isUnavailable ? '-' : unmappedFolders.length}
</TableRowCell>
<TableRowCell className={styles.actions}>
<IconButton
title={translate('RemoveRootFolder')}
name={icons.REMOVE}
onPress={onDeletePress}
/>
</TableRowCell>
</TableRow>
);
}
RootFolderRow.propTypes = {
id: PropTypes.number.isRequired,
path: PropTypes.string.isRequired,
accessible: PropTypes.bool.isRequired,
freeSpace: PropTypes.number,
unmappedFolders: PropTypes.arrayOf(PropTypes.object).isRequired,
onDeletePress: PropTypes.func.isRequired
};
RootFolderRow.defaultProps = {
unmappedFolders: []
};
export default RootFolderRow;

View File

@@ -1,92 +0,0 @@
import PropTypes from 'prop-types';
import React from 'react';
import Alert from 'Components/Alert';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import RootFolderRowConnector from './RootFolderRowConnector';
const rootFolderColumns = [
{
name: 'path',
get label() {
return translate('Path');
},
isVisible: true
},
{
name: 'freeSpace',
get label() {
return translate('FreeSpace');
},
isVisible: true
},
{
name: 'unmappedFolders',
get label() {
return translate('UnmappedFolders');
},
isVisible: true
},
{
name: 'actions',
isVisible: true
}
];
function RootFolders(props) {
const {
isFetching,
isPopulated,
error,
items
} = props;
if (isFetching && !isPopulated) {
return (
<LoadingIndicator />
);
}
if (!isFetching && !!error) {
return (
<Alert kind={kinds.DANGER}>
{translate('UnableToLoadRootFolders')}
</Alert>
);
}
return (
<Table
columns={rootFolderColumns}
>
<TableBody>
{
items.map((rootFolder) => {
return (
<RootFolderRowConnector
key={rootFolder.id}
id={rootFolder.id}
path={rootFolder.path}
accessible={rootFolder.accessible}
freeSpace={rootFolder.freeSpace}
unmappedFolders={rootFolder.unmappedFolders}
/>
);
})
}
</TableBody>
</Table>
);
}
RootFolders.propTypes = {
isFetching: PropTypes.bool.isRequired,
isPopulated: PropTypes.bool.isRequired,
error: PropTypes.object,
items: PropTypes.arrayOf(PropTypes.object).isRequired
};
export default RootFolders;

View File

@@ -49,7 +49,7 @@ function RootFolders() {
if (!isFetching && !!error) {
return (
<Alert kind={kinds.DANGER}>{translate('UnableToLoadRootFolders')}</Alert>
<Alert kind={kinds.DANGER}>{translate('RootFoldersLoadError')}</Alert>
);
}

View File

@@ -14,9 +14,11 @@ import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import useSelectState from 'Helpers/Hooks/useSelectState';
import { kinds } from 'Helpers/Props';
import SortDirection from 'Helpers/Props/SortDirection';
import {
bulkDeleteDownloadClients,
bulkEditDownloadClients,
setManageDownloadClientsSort,
} from 'Store/Actions/settingsActions';
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
import { SelectStateInputProps } from 'typings/props';
@@ -80,6 +82,8 @@ const COLUMNS = [
interface ManageDownloadClientsModalContentProps {
onModalClose(): void;
sortKey?: string;
sortDirection?: SortDirection;
}
function ManageDownloadClientsModalContent(
@@ -94,6 +98,8 @@ function ManageDownloadClientsModalContent(
isSaving,
error,
items,
sortKey,
sortDirection,
}: DownloadClientAppState = useSelector(
createClientSideCollectionSelector('settings.downloadClients')
);
@@ -114,6 +120,13 @@ function ManageDownloadClientsModalContent(
const selectedCount = selectedIds.length;
const onSortPress = useCallback(
(value: string) => {
dispatch(setManageDownloadClientsSort({ sortKey: value }));
},
[dispatch]
);
const onDeletePress = useCallback(() => {
setIsDeleteModalOpen(true);
}, [setIsDeleteModalOpen]);
@@ -219,6 +232,9 @@ function ManageDownloadClientsModalContent(
allSelected={allSelected}
allUnselected={allUnselected}
onSelectAllChange={onSelectAllChange}
sortKey={sortKey}
sortDirection={sortDirection}
onSortPress={onSortPress}
>
<TableBody>
{items.map((item) => {

View File

@@ -14,9 +14,11 @@ import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import useSelectState from 'Helpers/Hooks/useSelectState';
import { kinds } from 'Helpers/Props';
import SortDirection from 'Helpers/Props/SortDirection';
import {
bulkDeleteIndexers,
bulkEditIndexers,
setManageIndexersSort,
} from 'Store/Actions/settingsActions';
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
import { SelectStateInputProps } from 'typings/props';
@@ -80,6 +82,8 @@ const COLUMNS = [
interface ManageIndexersModalContentProps {
onModalClose(): void;
sortKey?: string;
sortDirection?: SortDirection;
}
function ManageIndexersModalContent(props: ManageIndexersModalContentProps) {
@@ -92,6 +96,8 @@ function ManageIndexersModalContent(props: ManageIndexersModalContentProps) {
isSaving,
error,
items,
sortKey,
sortDirection,
}: IndexerAppState = useSelector(
createClientSideCollectionSelector('settings.indexers')
);
@@ -112,6 +118,13 @@ function ManageIndexersModalContent(props: ManageIndexersModalContentProps) {
const selectedCount = selectedIds.length;
const onSortPress = useCallback(
(value: string) => {
dispatch(setManageIndexersSort({ sortKey: value }));
},
[dispatch]
);
const onDeletePress = useCallback(() => {
setIsDeleteModalOpen(true);
}, [setIsDeleteModalOpen]);
@@ -214,6 +227,9 @@ function ManageIndexersModalContent(props: ManageIndexersModalContentProps) {
allSelected={allSelected}
allUnselected={allUnselected}
onSelectAllChange={onSelectAllChange}
sortKey={sortKey}
sortDirection={sortDirection}
onSortPress={onSortPress}
>
<TableBody>
{items.map((item) => {

View File

@@ -1,72 +0,0 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';
import Icon from 'Components/Icon';
import Button from 'Components/Link/Button';
import { icons, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './AddRootFolder.css';
class AddRootFolder extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
isAddNewRootFolderModalOpen: false
};
}
//
// Lifecycle
onAddNewRootFolderPress = () => {
this.setState({ isAddNewRootFolderModalOpen: true });
};
onNewRootFolderSelect = ({ value }) => {
this.props.onNewRootFolderSelect(value);
};
onAddRootFolderModalClose = () => {
this.setState({ isAddNewRootFolderModalOpen: false });
};
//
// Render
render() {
return (
<div className={styles.addRootFolderButtonContainer}>
<Button
kind={kinds.PRIMARY}
size={sizes.LARGE}
onPress={this.onAddNewRootFolderPress}
>
<Icon
className={styles.importButtonIcon}
name={icons.DRIVE}
/>
{translate('AddRootFolder')}
</Button>
<FileBrowserModal
isOpen={this.state.isAddNewRootFolderModalOpen}
name="rootFolderPath"
value=""
onChange={this.onNewRootFolderSelect}
onModalClose={this.onAddRootFolderModalClose}
/>
</div>
);
}
}
AddRootFolder.propTypes = {
onNewRootFolderSelect: PropTypes.func.isRequired
};
export default AddRootFolder;

View File

@@ -1,14 +1,18 @@
import React, { useCallback, useState } from 'react';
import { useDispatch } from 'react-redux';
import { useDispatch, useSelector } from 'react-redux';
import Alert from 'Components/Alert';
import FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';
import Icon from 'Components/Icon';
import Button from 'Components/Link/Button';
import { icons, kinds, sizes } from 'Helpers/Props';
import { addRootFolder } from 'Store/Actions/rootFolderActions';
import createRootFoldersSelector from 'Store/Selectors/createRootFoldersSelector';
import translate from 'Utilities/String/translate';
import styles from './AddRootFolder.css';
function AddRootFolder() {
const { isSaving, saveError } = useSelector(createRootFoldersSelector());
const dispatch = useDispatch();
const [isAddNewRootFolderModalOpen, setIsAddNewRootFolderModalOpen] =
@@ -30,24 +34,42 @@ function AddRootFolder() {
}, [setIsAddNewRootFolderModalOpen]);
return (
<div className={styles.addRootFolderButtonContainer}>
<Button
kind={kinds.PRIMARY}
size={sizes.LARGE}
onPress={onAddNewRootFolderPress}
>
<Icon className={styles.importButtonIcon} name={icons.DRIVE} />
{translate('AddRootFolder')}
</Button>
<>
{!isSaving && saveError ? (
<Alert kind={kinds.DANGER}>
{translate('AddRootFolderError')}
<FileBrowserModal
isOpen={isAddNewRootFolderModalOpen}
name="rootFolderPath"
value=""
onChange={onNewRootFolderSelect}
onModalClose={onAddRootFolderModalClose}
/>
</div>
<ul>
{Array.isArray(saveError.responseJSON) ? (
saveError.responseJSON.map((e, index) => {
return <li key={index}>{e.errorMessage}</li>;
})
) : (
<li>{JSON.stringify(saveError.responseJSON)}</li>
)}
</ul>
</Alert>
) : null}
<div className={styles.addRootFolderButtonContainer}>
<Button
kind={kinds.PRIMARY}
size={sizes.LARGE}
onPress={onAddNewRootFolderPress}
>
<Icon className={styles.importButtonIcon} name={icons.DRIVE} />
{translate('AddRootFolder')}
</Button>
<FileBrowserModal
isOpen={isAddNewRootFolderModalOpen}
name="rootFolderPath"
value=""
onChange={onNewRootFolderSelect}
onModalClose={onAddRootFolderModalClose}
/>
</div>
</>
);
}

View File

@@ -1,4 +1,5 @@
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';
import createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
@@ -7,6 +8,7 @@ import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHand
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
import createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';
import createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';
import createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';
import createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';
import createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';
import { createThunk } from 'Store/thunks';
@@ -31,9 +33,9 @@ export const DELETE_DOWNLOAD_CLIENT = 'settings/downloadClients/deleteDownloadCl
export const TEST_DOWNLOAD_CLIENT = 'settings/downloadClients/testDownloadClient';
export const CANCEL_TEST_DOWNLOAD_CLIENT = 'settings/downloadClients/cancelTestDownloadClient';
export const TEST_ALL_DOWNLOAD_CLIENTS = 'settings/downloadClients/testAllDownloadClients';
export const BULK_DELETE_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkDeleteDownloadClients';
export const BULK_EDIT_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkEditDownloadClients';
export const BULK_DELETE_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkDeleteDownloadClients';
export const SET_MANAGE_DOWNLOAD_CLIENTS_SORT = 'settings/downloadClients/setManageDownloadClientsSort';
//
// Action Creators
@@ -48,9 +50,9 @@ export const deleteDownloadClient = createThunk(DELETE_DOWNLOAD_CLIENT);
export const testDownloadClient = createThunk(TEST_DOWNLOAD_CLIENT);
export const cancelTestDownloadClient = createThunk(CANCEL_TEST_DOWNLOAD_CLIENT);
export const testAllDownloadClients = createThunk(TEST_ALL_DOWNLOAD_CLIENTS);
export const bulkDeleteDownloadClients = createThunk(BULK_DELETE_DOWNLOAD_CLIENTS);
export const bulkEditDownloadClients = createThunk(BULK_EDIT_DOWNLOAD_CLIENTS);
export const bulkDeleteDownloadClients = createThunk(BULK_DELETE_DOWNLOAD_CLIENTS);
export const setManageDownloadClientsSort = createAction(SET_MANAGE_DOWNLOAD_CLIENTS_SORT);
export const setDownloadClientValue = createAction(SET_DOWNLOAD_CLIENT_VALUE, (payload) => {
return {
@@ -90,7 +92,9 @@ export default {
isTesting: false,
isTestingAll: false,
items: [],
pendingChanges: {}
pendingChanges: {},
sortKey: 'name',
sortDirection: sortDirections.DESCENDING
},
//
@@ -124,7 +128,10 @@ export default {
return selectedSchema;
});
}
},
[SET_MANAGE_DOWNLOAD_CLIENTS_SORT]: createSetClientSideCollectionSortReducer(section)
}
};

View File

@@ -1,4 +1,5 @@
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';
import createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
@@ -7,6 +8,7 @@ import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHand
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
import createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';
import createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';
import createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';
import createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';
import createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';
import { createThunk } from 'Store/thunks';
@@ -35,9 +37,9 @@ export const DELETE_INDEXER = 'settings/indexers/deleteIndexer';
export const TEST_INDEXER = 'settings/indexers/testIndexer';
export const CANCEL_TEST_INDEXER = 'settings/indexers/cancelTestIndexer';
export const TEST_ALL_INDEXERS = 'settings/indexers/testAllIndexers';
export const BULK_DELETE_INDEXERS = 'settings/indexers/bulkDeleteIndexers';
export const BULK_EDIT_INDEXERS = 'settings/indexers/bulkEditIndexers';
export const BULK_DELETE_INDEXERS = 'settings/indexers/bulkDeleteIndexers';
export const SET_MANAGE_INDEXERS_SORT = 'settings/indexers/setManageIndexersSort';
//
// Action Creators
@@ -53,9 +55,9 @@ export const deleteIndexer = createThunk(DELETE_INDEXER);
export const testIndexer = createThunk(TEST_INDEXER);
export const cancelTestIndexer = createThunk(CANCEL_TEST_INDEXER);
export const testAllIndexers = createThunk(TEST_ALL_INDEXERS);
export const bulkDeleteIndexers = createThunk(BULK_DELETE_INDEXERS);
export const bulkEditIndexers = createThunk(BULK_EDIT_INDEXERS);
export const bulkDeleteIndexers = createThunk(BULK_DELETE_INDEXERS);
export const setManageIndexersSort = createAction(SET_MANAGE_INDEXERS_SORT);
export const setIndexerValue = createAction(SET_INDEXER_VALUE, (payload) => {
return {
@@ -95,7 +97,9 @@ export default {
isTesting: false,
isTestingAll: false,
items: [],
pendingChanges: {}
pendingChanges: {},
sortKey: 'name',
sortDirection: sortDirections.DESCENDING
},
//
@@ -157,7 +161,10 @@ export default {
};
return updateSectionState(state, section, newState);
}
},
[SET_MANAGE_INDEXERS_SORT]: createSetClientSideCollectionSortReducer(section)
}
};

View File

@@ -130,7 +130,10 @@ export const actionHandlers = handleThunks({
promise.done((data) => {
const updatedItem = _.cloneDeep(data);
updatedItem.internalId = updatedItem.id;
updatedItem.id = updatedItem.tmdbId;
delete updatedItem.images;
const actions = [
updateItem({ section: 'movies', ...data }),
updateItem({ section: 'addMovie', ...updatedItem }),

View File

@@ -28,7 +28,7 @@
"@fortawesome/free-solid-svg-icons": "6.4.0",
"@fortawesome/react-fontawesome": "0.2.0",
"@juggle/resize-observer": "3.4.0",
"@microsoft/signalr": "6.0.21",
"@microsoft/signalr": "6.0.25",
"@sentry/browser": "7.51.2",
"@sentry/integrations": "7.51.2",
"@types/node": "18.16.8",

View File

@@ -1,6 +1,9 @@
using System.Collections.Generic;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Annotations;
using NzbDrone.Core.Localization;
using NzbDrone.Test.Common;
using Radarr.Http.ClientSchema;
@@ -9,6 +12,16 @@ namespace NzbDrone.Api.Test.ClientSchemaTests
[TestFixture]
public class SchemaBuilderFixture : TestBase
{
[SetUp]
public void Setup()
{
Mocker.GetMock<ILocalizationService>()
.Setup(s => s.GetLocalizedString(It.IsAny<string>(), It.IsAny<Dictionary<string, object>>()))
.Returns<string, Dictionary<string, object>>((s, d) => s);
SchemaBuilder.Initialize(Mocker.Container);
}
[Test]
public void should_return_field_for_every_property()
{

View File

@@ -47,7 +47,7 @@ namespace NzbDrone.Common.Test.Http
// Use mirrors for tests that use two hosts
var candidates = new[] { "httpbin1.servarr.com" };
// httpbin.org is broken right now, occassionally redirecting to https if it's unavailable.
// httpbin.org is broken right now, occasionally redirecting to https if it's unavailable.
_httpBinHost = mainHost;
_httpBinHosts = candidates.Where(IsTestSiteAvailable).ToArray();

View File

@@ -67,7 +67,7 @@ namespace NzbDrone.Common.EnvironmentInfo
}
catch (Exception ex)
{
_logger.Warn(ex, "Coudn't set app folder permission");
_logger.Warn(ex, "Couldn't set app folder permission");
}
}

View File

@@ -123,7 +123,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
_debounce = new SentryDebounce();
// initialize to true and reconfigure later
// Otherwise it will default to false and any errors occuring
// Otherwise it will default to false and any errors occurring
// before config file gets read will not be filtered
FilterEvents = true;
SentryEnabled = true;

View File

@@ -260,7 +260,7 @@ namespace NzbDrone.Common.OAuth
}
/// <summary>
/// Creates a request elements concatentation value to send with a request.
/// Creates a request elements concatenation value to send with a request.
/// This is also known as the signature base.
/// </summary>
/// <seealso href="http://oauth.net/core/1.0#rfc.section.9.1.3"/>

View File

@@ -4,17 +4,17 @@
<DefineConstants Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64' or '$(RuntimeIdentifier)' == 'linux-musl-arm64'">ISMUSL</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DryIoc.dll" Version="5.4.1" />
<PackageReference Include="DryIoc.dll" Version="5.4.3" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.2.3" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.3" />
<PackageReference Include="Npgsql" Version="7.0.4" />
<PackageReference Include="Npgsql" Version="7.0.6" />
<PackageReference Include="Sentry" Version="3.23.1" />
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
<PackageReference Include="SharpZipLib" Version="1.3.3" />
<PackageReference Include="System.Text.Json" Version="6.0.8" />
<PackageReference Include="System.Text.Json" Version="6.0.9" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.1" />

View File

@@ -215,7 +215,7 @@ namespace NzbDrone.Common
if (dacls.Contains(authenticatedUsersDacl))
{
// Permssions already set
// Permissions already set
return;
}

View File

@@ -4,6 +4,7 @@ using NUnit.Framework;
using NzbDrone.Core.Housekeeping.Housekeepers;
using NzbDrone.Core.ImportLists;
using NzbDrone.Core.ImportLists.ImportListMovies;
using NzbDrone.Core.Movies;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
@@ -42,8 +43,13 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
{
GivenImportList();
var movieMetadata = Builder<MovieMetadata>.CreateNew().BuildNew();
Db.Insert(movieMetadata);
var status = Builder<ImportListMovie>.CreateNew()
.With(h => h.ListId = _importList.Id)
.With(b => b.MovieMetadataId = movieMetadata.Id)
.BuildNew();
Db.Insert(status);

View File

@@ -0,0 +1,49 @@
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
using Moq;
using NLog;
using NUnit.Framework;
using NzbDrone.Common.Http;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.Languages;
using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.IndexerTests;
[TestFixture]
public class IndexerBaseFixture : CoreTest<IndexerBase<TestIndexerSettings>>
{
private TestIndexer _indexer;
[SetUp]
public void Setup()
{
_indexer = new TestIndexer(new Mock<IHttpClient>().Object,
new Mock<IIndexerStatusService>().Object,
new Mock<IConfigService>().Object,
new Mock<IParsingService>().Object,
new Mock<Logger>().Object)
{
Definition = new IndexerDefinition
{
Settings = new TestIndexerSettings
{
MultiLanguages = new List<int> { Language.German.Id, Language.English.Id }
}
}
};
}
[TestCase("The.Movie.Name.2016.Multi.DTS.720p.BluRay.x264-RlsGrp")]
public void should_parse_multi_language(string postTitle)
{
var result = _indexer.CleanupReleases(new ReleaseInfo[] { new () { Title = postTitle, Languages = new List<Language>() } });
result.Single().Languages.Count.Should().Be(2);
result.Single().Languages.Should().Contain(Language.German);
result.Single().Languages.Should().Contain(Language.English);
}
}

View File

@@ -1,8 +1,10 @@
using NLog;
using System.Collections.Generic;
using NLog;
using NzbDrone.Common.Http;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.Test.IndexerTests
{
@@ -31,5 +33,10 @@ namespace NzbDrone.Core.Test.IndexerTests
{
return _parser;
}
public new IList<ReleaseInfo> CleanupReleases(IEnumerable<ReleaseInfo> releases)
{
return base.CleanupReleases(releases);
}
}
}

View File

@@ -15,6 +15,7 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaInfo.MediaInfoFormatterTests
[TestCase(HdrFormat.Hdr10Plus, "HDR10Plus")]
[TestCase(HdrFormat.DolbyVision, "DV")]
[TestCase(HdrFormat.DolbyVisionHdr10, "DV HDR10")]
[TestCase(HdrFormat.DolbyVisionHdr10Plus, "DV HDR10Plus")]
[TestCase(HdrFormat.DolbyVisionHlg, "DV HLG")]
[TestCase(HdrFormat.DolbyVisionSdr, "DV SDR")]
public void should_format_video_dynamic_range_type(HdrFormat format, string expectedVideoDynamicRangeType)

View File

@@ -116,6 +116,8 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaInfo
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.HdrDynamicMetadataSpmte2094", null, HdrFormat.Hdr10Plus)]
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", null, HdrFormat.DolbyVision)]
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", 1, HdrFormat.DolbyVisionHdr10)]
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData,FFMpegCore.HdrDynamicMetadataSpmte2094", 1, HdrFormat.DolbyVisionHdr10Plus)]
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData,FFMpegCore.HdrDynamicMetadataSpmte2094", 6, HdrFormat.DolbyVisionHdr10Plus)]
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", 2, HdrFormat.DolbyVisionSdr)]
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", 4, HdrFormat.DolbyVisionHlg)]
public void should_detect_hdr_correctly(int bitDepth, string colourPrimaries, string transferFunction, string sideDataTypes, int? doviConfigId, HdrFormat expected)

View File

@@ -48,13 +48,14 @@ namespace NzbDrone.Core.Test.NotificationTests
Subject.Definition = _traktDefinition;
}
private void GiventValidMediaInfo(Quality quality, string audioChannels, string audioFormat, string scanType)
private void GiventValidMediaInfo(Quality quality, string audioChannels, string audioFormat, string scanType, HdrFormat hdrFormat = HdrFormat.None)
{
_downloadMessage.MovieFile.MediaInfo = new MediaInfoModel
{
AudioChannelPositions = audioChannels,
AudioFormat = audioFormat,
ScanType = scanType
ScanType = scanType,
VideoHdrFormat = hdrFormat
};
_downloadMessage.MovieFile.Quality.Quality = quality;
@@ -72,7 +73,7 @@ namespace NzbDrone.Core.Test.NotificationTests
[Test]
public void should_add_collection_movie_if_valid_mediainfo()
{
GiventValidMediaInfo(Quality.Bluray1080p, "5.1", "DTS", "Progressive");
GiventValidMediaInfo(Quality.Bluray2160p, "5.1", "DTS", "Progressive", HdrFormat.DolbyVisionHdr10);
Subject.OnDownload(_downloadMessage);
@@ -80,15 +81,16 @@ namespace NzbDrone.Core.Test.NotificationTests
.Verify(v => v.AddToCollection(It.Is<TraktCollectMoviesResource>(t =>
t.Movies.First().Audio == "dts" &&
t.Movies.First().AudioChannels == "5.1" &&
t.Movies.First().Resolution == "hd_1080p" &&
t.Movies.First().MediaType == "bluray"),
t.Movies.First().Resolution == "uhd_4k" &&
t.Movies.First().MediaType == "bluray" &&
t.Movies.First().Hdr == "hdr10"),
It.IsAny<string>()), Times.Once());
}
[Test]
public void should_format_audio_channels_to_one_decimal_when_adding_collection_movie()
{
GiventValidMediaInfo(Quality.Bluray1080p, "2.0", "DTS", "Progressive");
GiventValidMediaInfo(Quality.Bluray2160p, "2.0", "DTS", "Progressive", HdrFormat.DolbyVisionHdr10);
Subject.OnDownload(_downloadMessage);
@@ -96,8 +98,9 @@ namespace NzbDrone.Core.Test.NotificationTests
.Verify(v => v.AddToCollection(It.Is<TraktCollectMoviesResource>(t =>
t.Movies.First().Audio == "dts" &&
t.Movies.First().AudioChannels == "2.0" &&
t.Movies.First().Resolution == "hd_1080p" &&
t.Movies.First().MediaType == "bluray"),
t.Movies.First().Resolution == "uhd_4k" &&
t.Movies.First().MediaType == "bluray" &&
t.Movies.First().Hdr == "hdr10"),
It.IsAny<string>()), Times.Once());
}
}

View File

@@ -300,6 +300,7 @@ namespace NzbDrone.Core.Test.ParserTests
}
[TestCase("Movie.Title.1994.Hebrew.1080p.XviD-LOL")]
[TestCase("Movie.Title.1994.1080p.BluRay.HebDubbed.Also.English.x264-P2P")]
public void should_parse_language_hebrew(string postTitle)
{
var result = Parser.Parser.ParseMovieTitle(postTitle, true);
@@ -429,5 +430,35 @@ namespace NzbDrone.Core.Test.ParserTests
var result = LanguageParser.ParseSubtitleLanguage(fileName);
result.Should().Be(Language.Unknown);
}
[TestCase("The.Movie.Name.2016.German.DTS.DL.720p.BluRay.x264-RlsGrp")]
public void should_add_original_language_to_german_release_with_dl_tag(string postTitle)
{
var result = Parser.Parser.ParseMovieTitle(postTitle);
result.Languages.Count.Should().Be(2);
result.Languages.Should().Contain(Language.German);
result.Languages.Should().Contain(Language.Original);
}
[TestCase("The.Movie.Name.2016.GERMAN.WEB-DL.h264-RlsGrp")]
[TestCase("The.Movie.Name.2016.GERMAN.WEB.DL.h264-RlsGrp")]
[TestCase("The Movie Name 2016 GERMAN WEB DL h264-RlsGrp")]
[TestCase("The.Movie.Name.2016.GERMAN.WEBDL.h264-RlsGrp")]
public void should_not_add_original_language_to_german_release_when_title_contains_web_dl(string postTitle)
{
var result = Parser.Parser.ParseMovieTitle(postTitle);
result.Languages.Count.Should().Be(1);
result.Languages.Should().Contain(Language.German);
}
[TestCase("The.Movie.Name.2023.German.ML.EAC3.720p.NF.WEB.H264-RlsGrp")]
public void should_add_original_language_and_english_to_german_release_with_ml_tag(string postTitle)
{
var result = Parser.Parser.ParseMovieTitle(postTitle);
result.Languages.Count.Should().Be(3);
result.Languages.Should().Contain(Language.German);
result.Languages.Should().Contain(Language.Original);
result.Languages.Should().Contain(Language.English);
}
}
}

View File

@@ -62,6 +62,7 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("G.I.Movie.Movie.2013.THEATRiCAL.COMPLETE.BLURAY-GLiMMER", "G.I. Movie Movie")]
[TestCase("www.Torrenting.org - Movie.2008.720p.X264-DIMENSION", "Movie")]
[TestCase("The.French.Movie.2013.720p.BluRay.x264 - ROUGH[PublicHD]", "The French Movie")]
[TestCase("The.Good.German.2006.720p.BluRay.x264-RlsGrp", "The Good German", Description = "Hardcoded to exclude from German regex")]
public void should_parse_movie_title(string postTitle, string title)
{
Parser.Parser.ParseMovieTitle(postTitle).PrimaryMovieTitle.Should().Be(title);
@@ -124,6 +125,7 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("Die.fantastische.Reise.des.Dr.Dolittle.2020.German.DL.LD.1080p.WEBRip.x264-PRD", "Die fantastische Reise des Dr. Dolittle", "", 2020, Description = "dot after dr")]
[TestCase("Der.Film.deines.Lebens.German.2011.PAL.DVDR-ETM", "Der Film deines Lebens", "", 2011, Description = "year at wrong position")]
[TestCase("Kick.Ass.2.2013.German.DTS.DL.720p.BluRay.x264-Pate_", "Kick Ass 2", "", 2013, Description = "underscore at the end")]
[TestCase("The.Good.German.2006.GERMAN.720p.HDTV.x264-RLsGrp", "The Good German", "", 2006, Description = "German in the title")]
public void should_parse_german_movie(string postTitle, string title, string edition, int year)
{
var movie = Parser.Parser.ParseMovieTitle(postTitle);
@@ -238,6 +240,10 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("The.Italian.Movie.2025.720p.BluRay.X264-AMIABLE")]
[TestCase("The.French.Movie.2013.720p.BluRay.x264 - ROUGH[PublicHD]")]
[TestCase("The.German.Doctor.2013.LIMITED.DVDRip.x264-RedBlade", Description = "When German is not followed by a year or a SCENE word it is not matched")]
[TestCase("The.Good.German.2006.720p.HDTV.x264-TVP", Description = "The Good German is hardcoded not to match")]
[TestCase("German.Lancers.2019.720p.BluRay.x264-UNiVERSUM", Description = "German at the beginning is never matched")]
[TestCase("The.German.2019.720p.BluRay.x264-UNiVERSUM", Description = "The German is hardcoded not to match")]
public void should_not_parse_wrong_language_in_title(string postTitle)
{
var parsed = Parser.Parser.ParseMovieTitle(postTitle, true);
@@ -245,22 +251,6 @@ namespace NzbDrone.Core.Test.ParserTests
parsed.Languages.First().Should().Be(Language.Unknown);
}
[TestCase("The.Movie.Name.2016.German.DTS.DL.720p.BluRay.x264-MULTiPLEX")]
public void should_not_parse_multi_language_in_releasegroup(string postTitle)
{
var parsed = Parser.Parser.ParseMovieTitle(postTitle, true);
parsed.Languages.Count.Should().Be(1);
parsed.Languages.First().Should().Be(Language.German);
}
[TestCase("The.Movie.Name.2016.German.Multi.DTS.DL.720p.BluRay.x264-MULTiPLEX")]
public void should_parse_multi_language(string postTitle)
{
var parsed = Parser.Parser.ParseMovieTitle(postTitle, true);
parsed.Languages.Count.Should().Be(1);
parsed.Languages.Should().Contain(Language.German);
}
[TestCase("Movie.Title.2016.1080p.KORSUB.WEBRip.x264.AAC2.0-RADARR", "KORSUB")]
[TestCase("Movie.Title.2016.1080p.KORSUBS.WEBRip.x264.AAC2.0-RADARR", "KORSUBS")]
[TestCase("Movie Title 2017 HC 720p HDRiP DD5 1 x264-LEGi0N", "Generic Hardcoded Subs")]

View File

@@ -41,6 +41,23 @@ namespace NzbDrone.Core.Annotations
public string Hint { get; set; }
}
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class FieldTokenAttribute : Attribute
{
public FieldTokenAttribute(TokenField field, string label = "", string token = "", object value = null)
{
Label = label;
Field = field;
Token = token;
Value = value?.ToString();
}
public string Label { get; set; }
public TokenField Field { get; set; }
public string Token { get; set; }
public string Value { get; set; }
}
public class FieldSelectOption
{
public int Value { get; set; }
@@ -84,4 +101,11 @@ namespace NzbDrone.Core.Annotations
ApiKey,
UserName
}
public enum TokenField
{
Label,
HelpText,
HelpTextWarning
}
}

View File

@@ -330,8 +330,8 @@ namespace NzbDrone.Core.Configuration
return;
}
// If SSL is enabled and a cert hash is still in the config file disable SSL
if (EnableSsl && GetValue("SslCertHash", null).IsNotNullOrWhiteSpace())
// If SSL is enabled and a cert hash is still in the config file or cert path is empty disable SSL
if (EnableSsl && (GetValue("SslCertHash", null).IsNotNullOrWhiteSpace() || SslCertPath.IsNullOrWhiteSpace()))
{
SetValue("EnableSsl", false);
}

View File

@@ -9,8 +9,8 @@ namespace NzbDrone.Core.Datastore
{
public interface IConnectionStringFactory
{
string MainDbConnectionString { get; }
string LogDbConnectionString { get; }
DatabaseConnectionInfo MainDbConnection { get; }
DatabaseConnectionInfo LogDbConnection { get; }
string GetDatabasePath(string connectionString);
}
@@ -22,15 +22,15 @@ namespace NzbDrone.Core.Datastore
{
_configFileProvider = configFileProvider;
MainDbConnectionString = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresMainDb) :
MainDbConnection = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresMainDb) :
GetConnectionString(appFolderInfo.GetDatabase());
LogDbConnectionString = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresLogDb) :
LogDbConnection = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresLogDb) :
GetConnectionString(appFolderInfo.GetLogDatabase());
}
public string MainDbConnectionString { get; private set; }
public string LogDbConnectionString { get; private set; }
public DatabaseConnectionInfo MainDbConnection { get; private set; }
public DatabaseConnectionInfo LogDbConnection { get; private set; }
public string GetDatabasePath(string connectionString)
{
@@ -39,7 +39,7 @@ namespace NzbDrone.Core.Datastore
return connectionBuilder.DataSource;
}
private static string GetConnectionString(string dbPath)
private static DatabaseConnectionInfo GetConnectionString(string dbPath)
{
var connectionBuilder = new SQLiteConnectionStringBuilder
{
@@ -57,21 +57,22 @@ namespace NzbDrone.Core.Datastore
connectionBuilder.Add("Full FSync", true);
}
return connectionBuilder.ConnectionString;
return new DatabaseConnectionInfo(DatabaseType.SQLite, connectionBuilder.ConnectionString);
}
private string GetPostgresConnectionString(string dbName)
private DatabaseConnectionInfo GetPostgresConnectionString(string dbName)
{
var connectionBuilder = new NpgsqlConnectionStringBuilder();
var connectionBuilder = new NpgsqlConnectionStringBuilder
{
Database = dbName,
Host = _configFileProvider.PostgresHost,
Username = _configFileProvider.PostgresUser,
Password = _configFileProvider.PostgresPassword,
Port = _configFileProvider.PostgresPort,
Enlist = false
};
connectionBuilder.Database = dbName;
connectionBuilder.Host = _configFileProvider.PostgresHost;
connectionBuilder.Username = _configFileProvider.PostgresUser;
connectionBuilder.Password = _configFileProvider.PostgresPassword;
connectionBuilder.Port = _configFileProvider.PostgresPort;
connectionBuilder.Enlist = false;
return connectionBuilder.ConnectionString;
return new DatabaseConnectionInfo(DatabaseType.PostgreSQL, connectionBuilder.ConnectionString);
}
}
}

View File

@@ -0,0 +1,14 @@
namespace NzbDrone.Core.Datastore
{
public class DatabaseConnectionInfo
{
public DatabaseConnectionInfo(DatabaseType databaseType, string connectionString)
{
DatabaseType = databaseType;
ConnectionString = connectionString;
}
public DatabaseType DatabaseType { get; internal set; }
public string ConnectionString { get; internal set; }
}
}

View File

@@ -2,6 +2,7 @@ using System;
using System.Data.Common;
using System.Data.SQLite;
using System.Net.Sockets;
using System.Threading;
using NLog;
using Npgsql;
using NzbDrone.Common.Disk;
@@ -60,22 +61,22 @@ namespace NzbDrone.Core.Datastore
public IDatabase Create(MigrationContext migrationContext)
{
string connectionString;
DatabaseConnectionInfo connectionInfo;
switch (migrationContext.MigrationType)
{
case MigrationType.Main:
{
connectionString = _connectionStringFactory.MainDbConnectionString;
CreateMain(connectionString, migrationContext);
connectionInfo = _connectionStringFactory.MainDbConnection;
CreateMain(connectionInfo.ConnectionString, migrationContext, connectionInfo.DatabaseType);
break;
}
case MigrationType.Log:
{
connectionString = _connectionStringFactory.LogDbConnectionString;
CreateLog(connectionString, migrationContext);
connectionInfo = _connectionStringFactory.LogDbConnection;
CreateLog(connectionInfo.ConnectionString, migrationContext, connectionInfo.DatabaseType);
break;
}
@@ -90,14 +91,14 @@ namespace NzbDrone.Core.Datastore
{
DbConnection conn;
if (connectionString.Contains(".db"))
if (connectionInfo.DatabaseType == DatabaseType.SQLite)
{
conn = SQLiteFactory.Instance.CreateConnection();
conn.ConnectionString = connectionString;
conn.ConnectionString = connectionInfo.ConnectionString;
}
else
{
conn = new NpgsqlConnection(connectionString);
conn = new NpgsqlConnection(connectionInfo.ConnectionString);
}
conn.Open();
@@ -107,12 +108,12 @@ namespace NzbDrone.Core.Datastore
return db;
}
private void CreateMain(string connectionString, MigrationContext migrationContext)
private void CreateMain(string connectionString, MigrationContext migrationContext, DatabaseType databaseType)
{
try
{
_restoreDatabaseService.Restore();
_migrationController.Migrate(connectionString, migrationContext);
_migrationController.Migrate(connectionString, migrationContext, databaseType);
}
catch (SQLiteException e)
{
@@ -135,15 +136,17 @@ namespace NzbDrone.Core.Datastore
{
Logger.Error(e, "Failure to connect to Postgres DB, {0} retries remaining", retryCount);
Thread.Sleep(5000);
try
{
_migrationController.Migrate(connectionString, migrationContext);
_migrationController.Migrate(connectionString, migrationContext, databaseType);
return;
}
catch (Exception ex)
{
if (--retryCount > 0)
{
System.Threading.Thread.Sleep(5000);
continue;
}
@@ -162,11 +165,11 @@ namespace NzbDrone.Core.Datastore
}
}
private void CreateLog(string connectionString, MigrationContext migrationContext)
private void CreateLog(string connectionString, MigrationContext migrationContext, DatabaseType databaseType)
{
try
{
_migrationController.Migrate(connectionString, migrationContext);
_migrationController.Migrate(connectionString, migrationContext, databaseType);
}
catch (SQLiteException e)
{
@@ -186,7 +189,7 @@ namespace NzbDrone.Core.Datastore
Logger.Error("Unable to recreate logging database automatically. It will need to be removed manually.");
}
_migrationController.Migrate(connectionString, migrationContext);
_migrationController.Migrate(connectionString, migrationContext, databaseType);
}
catch (Exception e)
{

View File

@@ -87,7 +87,7 @@ namespace NzbDrone.Core.Datastore
}
/// <summary>
/// Visits the memeber access expression. To be implemented by user.
/// Visits the member access expression. To be implemented by user.
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>

View File

@@ -0,0 +1,14 @@
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(234)]
public class movie_last_searched_time : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Alter.Table("Movies").AddColumn("LastSearchTime").AsDateTimeOffset().Nullable();
}
}
}

View File

@@ -14,7 +14,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
{
public interface IMigrationController
{
void Migrate(string connectionString, MigrationContext migrationContext);
void Migrate(string connectionString, MigrationContext migrationContext, DatabaseType databaseType);
}
public class MigrationController : IMigrationController
@@ -29,7 +29,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
_migrationLoggerProvider = migrationLoggerProvider;
}
public void Migrate(string connectionString, MigrationContext migrationContext)
public void Migrate(string connectionString, MigrationContext migrationContext, DatabaseType databaseType)
{
var sw = Stopwatch.StartNew();
@@ -37,7 +37,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
ServiceProvider serviceProvider;
var db = connectionString.Contains(".db") ? "sqlite" : "postgres";
var db = databaseType == DatabaseType.SQLite ? "sqlite" : "postgres";
serviceProvider = new ServiceCollection()
.AddLogging(b => b.AddNLog())

View File

@@ -108,7 +108,7 @@ namespace NzbDrone.Core.DecisionEngine
private int ComparePeersIfTorrent(DownloadDecision x, DownloadDecision y)
{
// Different protocols should get caught when checking the preferred protocol,
// since we're dealing with the same movie in our comparisions
// since we're dealing with the same movie in our comparisons
if (x.RemoteMovie.Release.DownloadProtocol != DownloadProtocol.Torrent ||
y.RemoteMovie.Release.DownloadProtocol != DownloadProtocol.Torrent)
{

View File

@@ -78,7 +78,12 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
return false;
}
_logger.Debug("New item has a better custom format score");
_logger.Debug("New item's custom formats [{0}] ({1}) improve on [{2}] ({3}), accepting",
newCustomFormats.ConcatToString(),
newFormatScore,
currentCustomFormats.ConcatToString(),
currentFormatScore);
return true;
}

View File

@@ -78,7 +78,7 @@ namespace NzbDrone.Core.Download.Clients.Flood
}
}
return result;
return result.Where(t => t.IsNotNullOrWhiteSpace());
}
public override string Name => "Flood";

View File

@@ -0,0 +1,9 @@
namespace NzbDrone.Core.Download.Clients.QBittorrent
{
public enum QBittorrentContentLayout
{
Default = 0,
Original = 1,
Subfolder = 2
}
}

View File

@@ -265,6 +265,15 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
{
request.AddFormParameter("firstLastPiecePrio", true);
}
if ((QBittorrentContentLayout)settings.ContentLayout == QBittorrentContentLayout.Original)
{
request.AddFormParameter("contentLayout", "Original");
}
else if ((QBittorrentContentLayout)settings.ContentLayout == QBittorrentContentLayout.Subfolder)
{
request.AddFormParameter("contentLayout", "Subfolder");
}
}
public void SetTorrentSeedingConfiguration(string hash, TorrentSeedConfiguration seedConfiguration, QBittorrentSettings settings)

View File

@@ -69,6 +69,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
[FieldDefinition(12, Label = "First and Last First", Type = FieldType.Checkbox, HelpText = "Download first and last pieces first (qBittorrent 4.1.0+)")]
public bool FirstAndLast { get; set; }
[FieldDefinition(13, Label = "DownloadClientQbittorrentSettingsContentLayout", Type = FieldType.Select, SelectOptions = typeof(QBittorrentContentLayout), HelpText = "DownloadClientQbittorrentSettingsContentLayoutHelpText")]
public int ContentLayout { get; set; }
public NzbDroneValidationResult Validate()
{
return new NzbDroneValidationResult(Validator.Validate(this));

View File

@@ -141,7 +141,8 @@ namespace NzbDrone.Core.Download.Clients.Transmission
private TransmissionResponse GetSessionVariables(TransmissionSettings settings)
{
// Retrieve transmission information such as the default download directory, bandwith throttling and seed ratio.
// Retrieve transmission information such as the default download directory, bandwidth throttling and seed ratio.
return ProcessRequest("session-get", null, settings);
}

View File

@@ -1,9 +1,11 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
using FluentValidation.Results;
using NLog;
using NzbDrone.Common.Disk;
using NzbDrone.Common.Http;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.Organizer;
@@ -11,6 +13,8 @@ using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.RemotePathMappings;
using NzbDrone.Core.ThingiProvider;
using NzbDrone.Core.Validation;
using Polly;
using Polly.Retry;
namespace NzbDrone.Core.Download
{
@@ -23,6 +27,37 @@ namespace NzbDrone.Core.Download
protected readonly IRemotePathMappingService _remotePathMappingService;
protected readonly Logger _logger;
protected ResiliencePipeline<HttpResponse> RetryStrategy => new ResiliencePipelineBuilder<HttpResponse>()
.AddRetry(new RetryStrategyOptions<HttpResponse>
{
ShouldHandle = static args => args.Outcome switch
{
{ Result.HasHttpServerError: true } => PredicateResult.True(),
{ Result.StatusCode: HttpStatusCode.RequestTimeout } => PredicateResult.True(),
_ => PredicateResult.False()
},
Delay = TimeSpan.FromSeconds(3),
MaxRetryAttempts = 2,
BackoffType = DelayBackoffType.Exponential,
UseJitter = true,
OnRetry = args =>
{
var exception = args.Outcome.Exception;
if (exception is not null)
{
_logger.Info(exception, "Request for {0} failed with exception '{1}'. Retrying in {2}s.", Definition.Name, exception.Message, args.RetryDelay.TotalSeconds);
}
else
{
_logger.Info("Request for {0} failed with status {1}. Retrying in {2}s.", Definition.Name, args.Outcome.Result?.StatusCode, args.RetryDelay.TotalSeconds);
}
return default;
}
})
.Build();
public abstract string Name { get; }
public Type ConfigContract => typeof(TSettings);
@@ -58,10 +93,7 @@ namespace NzbDrone.Core.Download
return GetType().Name;
}
public abstract DownloadProtocol Protocol
{
get;
}
public abstract DownloadProtocol Protocol { get; }
public abstract Task<string> Download(RemoteMovie remoteMovie, IIndexer indexer);
public abstract IEnumerable<DownloadClientItem> GetItems();

View File

@@ -134,7 +134,9 @@ namespace NzbDrone.Core.Download
request.Headers.Accept = "application/x-bittorrent";
request.AllowAutoRedirect = false;
var response = await _httpClient.GetAsync(request);
var response = await RetryStrategy
.ExecuteAsync(static async (state, _) => await state._httpClient.GetAsync(state.request), (_httpClient, request))
.ConfigureAwait(false);
if (response.StatusCode == HttpStatusCode.MovedPermanently ||
response.StatusCode == HttpStatusCode.Found ||

View File

@@ -48,7 +48,9 @@ namespace NzbDrone.Core.Download
var request = indexer?.GetDownloadRequest(url) ?? new HttpRequest(url);
request.RateLimitKey = remoteMovie?.Release?.IndexerId.ToString();
var response = await _httpClient.GetAsync(request);
var response = await RetryStrategy
.ExecuteAsync(static async (state, _) => await state._httpClient.GetAsync(state.request), (_httpClient, request))
.ConfigureAwait(false);
nzbData = response.ResponseData;

View File

@@ -273,13 +273,18 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc
details.Add(setElement);
}
var tags = _tagRepository.Get(movie.Tags);
foreach (var tag in tags)
if (movie.Tags.Any())
{
details.Add(new XElement("tag", tag.Label));
var tags = _tagRepository.Get(movie.Tags);
foreach (var tag in tags)
{
details.Add(new XElement("tag", tag.Label));
}
}
details.Add(new XElement("status", movie.MovieMetadata.Value.Status));
foreach (var credit in credits)
{
if (credit.Name != null && credit.Job == "Screenplay")

View File

@@ -40,7 +40,8 @@ namespace NzbDrone.Core.Extras.Metadata
foreach (var possibleMetadataFile in filterResult.FilesOnDisk)
{
// Don't process files that have known Subtitle file extensions (saves a bit of unecessary processing)
// Don't process files that have known Subtitle file extensions (saves a bit of unnecessary processing)
if (SubtitleFileExtensions.Extensions.Contains(Path.GetExtension(possibleMetadataFile)))
{
continue;

View File

@@ -13,15 +13,33 @@ namespace NzbDrone.Core.Housekeeping.Housekeepers
}
public void Clean()
{
CleanupOrphanedByImportLists();
CleanupOrphanedByMovieMetadata();
}
private void CleanupOrphanedByImportLists()
{
using var mapper = _database.OpenConnection();
mapper.Execute(@"DELETE FROM ""ImportListMovies""
WHERE ""Id"" IN (
SELECT ""ImportListMovies"".""Id"" FROM ""ImportListMovies""
LEFT OUTER JOIN ""ImportLists""
ON ""ImportListMovies"".""ListId"" = ""ImportLists"".""Id""
WHERE ""ImportLists"".""Id"" IS NULL)");
WHERE ""Id"" IN (
SELECT ""ImportListMovies"".""Id""
FROM ""ImportListMovies""
LEFT OUTER JOIN ""ImportLists"" ON ""ImportListMovies"".""ListId"" = ""ImportLists"".""Id""
WHERE ""ImportLists"".""Id"" IS NULL)");
}
private void CleanupOrphanedByMovieMetadata()
{
using var mapper = _database.OpenConnection();
mapper.Execute(@"DELETE FROM ""ImportListMovies""
WHERE ""Id"" IN (
SELECT ""ImportListMovies"".""Id""
FROM ""ImportListMovies""
LEFT OUTER JOIN ""MovieMetadata"" ON ""ImportListMovies"".""MovieMetadataId"" = ""MovieMetadata"".""Id""
WHERE ""MovieMetadata"".""Id"" IS NULL)");
}
}
}

View File

@@ -93,7 +93,7 @@ namespace NzbDrone.Core.ImportLists
if (excludedMovie != null)
{
_logger.Debug("{0} [{1}] Rejected due to list exlcusion", report.TmdbId, report.Title);
_logger.Debug("{0} [{1}] Rejected due to list exclusion", report.TmdbId, report.Title);
return;
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using NLog;
using NzbDrone.Common.Instrumentation.Extensions;
using NzbDrone.Core.Datastore;
@@ -38,24 +39,13 @@ namespace NzbDrone.Core.IndexerSearch
public void Execute(MoviesSearchCommand message)
{
var downloadedCount = 0;
foreach (var movieId in message.MovieIds)
{
var movie = _movieService.GetMovie(movieId);
var userInvokedSearch = message.Trigger == CommandTrigger.Manual;
var userInvokedSearch = message.Trigger == CommandTrigger.Manual;
if (!movie.Monitored && !userInvokedSearch)
{
_logger.Debug("Movie {0} is not monitored, skipping search", movie.Title);
continue;
}
var movies = _movieService.GetMovies(message.MovieIds)
.Where(m => (m.Monitored && m.IsAvailable()) || userInvokedSearch)
.ToList();
var decisions = _releaseSearchService.MovieSearch(movieId, userInvokedSearch, false).GetAwaiter().GetResult();
var processDecisions = _processDownloadDecisions.ProcessDecisions(decisions).GetAwaiter().GetResult();
downloadedCount += processDecisions.Grabbed.Count;
}
_logger.ProgressInfo("Movie search completed. {0} reports downloaded.", downloadedCount);
SearchForBulkMovies(movies, userInvokedSearch).GetAwaiter().GetResult();
}
public void Execute(MissingMoviesSearchCommand message)
@@ -69,12 +59,13 @@ namespace NzbDrone.Core.IndexerSearch
};
pagingSpec.FilterExpressions.Add(v => v.Monitored == true);
var movies = _movieService.MoviesWithoutFiles(pagingSpec).Records.ToList();
var queue = _queueService.GetQueue().Where(q => q.Movie != null).Select(q => q.Movie.Id);
var missing = movies.Where(e => !queue.Contains(e.Id)).ToList();
SearchForMissingMovies(missing, message.Trigger == CommandTrigger.Manual);
SearchForBulkMovies(missing, message.Trigger == CommandTrigger.Manual).GetAwaiter().GetResult();
}
public void Execute(CutoffUnmetMoviesSearchCommand message)
@@ -94,34 +85,34 @@ namespace NzbDrone.Core.IndexerSearch
var queue = _queueService.GetQueue().Where(q => q.Movie != null).Select(q => q.Movie.Id);
var missing = movies.Where(e => !queue.Contains(e.Id)).ToList();
SearchForMissingMovies(missing, message.Trigger == CommandTrigger.Manual);
SearchForBulkMovies(missing, message.Trigger == CommandTrigger.Manual).GetAwaiter().GetResult();
}
private void SearchForMissingMovies(List<Movie> movies, bool userInvokedSearch)
private async Task SearchForBulkMovies(List<Movie> movies, bool userInvokedSearch)
{
_logger.ProgressInfo("Performing missing search for {0} movies", movies.Count);
_logger.ProgressInfo("Performing search for {0} movies", movies.Count);
var downloadedCount = 0;
foreach (var movieId in movies.GroupBy(e => e.Id))
foreach (var movieId in movies.GroupBy(e => e.Id).OrderBy(g => g.Min(m => m.LastSearchTime ?? DateTime.MinValue)))
{
List<DownloadDecision> decisions;
try
{
decisions = _releaseSearchService.MovieSearch(movieId.Key, userInvokedSearch, false).GetAwaiter().GetResult();
decisions = await _releaseSearchService.MovieSearch(movieId.Key, userInvokedSearch, false);
}
catch (Exception ex)
{
var message = string.Format("Unable to search for missing movie {0}", movieId.Key);
_logger.Error(ex, message);
_logger.Error(ex, "Unable to search for movie: [{0}]", movieId.Key);
continue;
}
var processDecisions = _processDownloadDecisions.ProcessDecisions(decisions).GetAwaiter().GetResult();
var processDecisions = await _processDownloadDecisions.ProcessDecisions(decisions);
downloadedCount += processDecisions.Grabbed.Count;
}
_logger.ProgressInfo("Completed missing search for {0} movies. {1} reports downloaded.", movies.Count, downloadedCount);
_logger.ProgressInfo("Completed search for {0} movies. {1} reports downloaded.", movies.Count, downloadedCount);
}
}
}

View File

@@ -114,6 +114,16 @@ namespace NzbDrone.Core.IndexerSearch
_logger.Debug("Total of {0} reports were found for {1} from {2} indexers", reports.Count, criteriaBase, indexers.Count);
// Update the last search time for movie if at least 1 indexer was searched.
if (indexers.Any())
{
var lastSearchTime = DateTime.UtcNow;
_logger.Debug("Setting last search time to: {0}", lastSearchTime);
criteriaBase.Movie.LastSearchTime = lastSearchTime;
_movieService.UpdateLastSearchTime(criteriaBase.Movie);
}
return _makeDownloadDecision.GetSearchDecision(reports, criteriaBase).ToList();
}

View File

@@ -48,13 +48,11 @@ namespace NzbDrone.Core.Indexers.Newznab
{
yield return GetDefinition("DOGnzb", GetSettings("https://api.dognzb.cr"));
yield return GetDefinition("DrunkenSlug", GetSettings("https://drunkenslug.com"));
yield return GetDefinition("Nzb-Tortuga", GetSettings("https://www.nzb-tortuga.com"));
yield return GetDefinition("Nzb.su", GetSettings("https://api.nzb.su"));
yield return GetDefinition("NZBCat", GetSettings("https://nzb.cat"));
yield return GetDefinition("NZBFinder.ws", GetSettings("https://nzbfinder.ws", categories: new[] { 2030, 2040, 2045, 2050, 2060, 2070, 2080, 2090 }));
yield return GetDefinition("NZBFinder.ws", GetSettings("https://nzbfinder.ws", categories: new[] { 2030, 2040, 2045, 2050, 2060, 2070 }));
yield return GetDefinition("NZBgeek", GetSettings("https://api.nzbgeek.info"));
yield return GetDefinition("nzbplanet.net", GetSettings("https://api.nzbplanet.net"));
yield return GetDefinition("OZnzb.com", GetSettings("https://api.oznzb.com"));
yield return GetDefinition("SimplyNZBs", GetSettings("https://simplynzbs.com"));
yield return GetDefinition("Tabula Rasa", GetSettings("https://www.tabula-rasa.pw", apiPath: @"/api/v1/api"));
yield return GetDefinition("Usenet Crawler", GetSettings("https://www.usenet-crawler.com"));

View File

@@ -91,6 +91,10 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
Scene = torrent.Scene,
Approved = torrent.Checked,
ImdbId = result.ImdbId.IsNotNullOrWhiteSpace() ? int.Parse(result.ImdbId) : 0,
Source = torrent.Source,
Container = torrent.Container,
Codec = torrent.Codec,
Resolution = torrent.Resolution,
IndexerFlags = flags
});
}

View File

@@ -88,16 +88,15 @@ namespace NzbDrone.Core.Instrumentation
log.Level = logEvent.Level.Name;
var connectionString = _connectionStringFactory.LogDbConnectionString;
var connectionInfo = _connectionStringFactory.LogDbConnection;
// TODO: Probably need more robust way to differentiate what's being used
if (connectionString.Contains(".db"))
if (connectionInfo.DatabaseType == DatabaseType.SQLite)
{
WriteSqliteLog(log, connectionString);
WriteSqliteLog(log, connectionInfo.ConnectionString);
}
else
{
WritePostgresLog(log, connectionString);
WritePostgresLog(log, connectionInfo.ConnectionString);
}
}
catch (NpgsqlException ex)
@@ -136,8 +135,10 @@ namespace NzbDrone.Core.Instrumentation
private void WriteSqliteLog(Log log, string connectionString)
{
using (var connection =
new SQLiteConnection(connectionString).OpenAndReturn())
SQLiteFactory.Instance.CreateConnection())
{
connection.ConnectionString = connectionString;
connection.Open();
using (var sqlCommand = connection.CreateCommand())
{
sqlCommand.CommandText = INSERT_COMMAND;

View File

@@ -983,7 +983,6 @@
"Download": "تحميل",
"DownloadClientCheckDownloadingToRoot": "يقوم برنامج التنزيل {downloadClientName} بوضع التنزيلات في المجلد الجذر {path}. يجب ألا تقوم بالتنزيل إلى مجلد جذر.",
"DeleteFileLabel": "احذف {0} ملفات الأفلام",
"UnableToAddRootFolder": "تعذر تحميل مجلدات الجذر",
"Blocklist": "القائمة السوداء",
"BlocklistRelease": "إصدار القائمة السوداء",
"RemoveFromBlocklist": "إزالة من القائمة السوداء",

View File

@@ -982,7 +982,6 @@
"Download": "Изтегли",
"DownloadClientCheckDownloadingToRoot": "Клиентът за изтегляне {downloadClientName} поставя изтеглянията в основната папка {path}. Не трябва да изтегляте в основна папка.",
"DeleteFileLabel": "Изтрийте {0} филмови файлове",
"UnableToAddRootFolder": "Не може да се заредят коренови папки",
"Blocklist": "Черен списък",
"BlocklistRelease": "Освобождаване на черния списък",
"RemoveFromBlocklist": "Премахване от черния списък",

View File

@@ -977,7 +977,6 @@
"Language": "Idioma",
"Languages": "Idiomes",
"RenameFiles": "Reanomena els fitxers",
"UnableToAddRootFolder": "No es pot afegir la carpeta arrel",
"UpperCase": "Majúscula",
"RottenTomatoesRating": "Valoració de Tomato",
"Save": "Desa",

View File

@@ -982,7 +982,6 @@
"Download": "Stažení",
"DownloadClientCheckDownloadingToRoot": "Stahovací klient {downloadClientName} umístí stažené soubory do kořenové složky {path}. Neměli byste stahovat do kořenové složky.",
"DeleteFileLabel": "Smažte {0} filmové soubory",
"UnableToAddRootFolder": "Nelze načíst kořenové složky",
"Blocklist": "Blocklist",
"BlocklistRelease": "Blocklist pro vydání",
"RemoveFromBlocklist": "Odebrat z černé listiny",

View File

@@ -982,7 +982,6 @@
"Download": "Hent",
"DownloadClientCheckDownloadingToRoot": "Download klient {downloadClientName} placerer downloads i rodmappen {path}. Du skal ikke downloade til en rodmappe.",
"DeleteFileLabel": "Slet {0} filmfiler",
"UnableToAddRootFolder": "Kan ikke indlæse rodmapper",
"Blocklist": "Blacklist",
"BlocklistRelease": "Udgivelse af sortliste",
"RemoveFromBlocklist": "Fjern fra sortlisten",

View File

@@ -6,29 +6,29 @@
"AddNew": "Neue hinzufügen",
"AddNewMessage": "Es ist einfach einen neuen Film hinzuzufügen. Gib einfach den Namen des Filmes ein, den du hinzufügen möchtest",
"AddNewTmdbIdMessage": "Du kannst auch mit der TMDb-ID eines Films suchen. Z.B. 'tmdb:71663'",
"Agenda": "Agenda",
"Agenda": "Tagesordnung",
"All": "Alle",
"Analytics": "Analytik",
"Analytics": "Analysen",
"AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern",
"Backup": "Backups",
"Backup": "Sicherung",
"BackupNow": "Jetzt sichern",
"Calendar": "Kalender",
"Cast": "Besetzung",
"ChooseAnotherFolder": "Wähle einen anderen Ordner",
"Clear": "Leeren",
"CompletedDownloadHandling": "Verarbeitung abgeschlossener Downloads",
"CompletedDownloadHandling": "Download-Handhabung abgeschlossen",
"Connect": "Verbinden",
"Connections": "Verbindungen",
"Crew": "Besatzung",
"CustomFilters": "Eigene Filter",
"CustomFormats": "Eigene Formate",
"CustomFilters": "Benutzerdefinierte Filter",
"CustomFormats": "Benutzerdefinierte Formate",
"Date": "Datum",
"Dates": "Termine",
"Day": "Tag",
"DelayProfiles": "Verzögerungsprofile",
"Delete": "Löschen",
"Discover": "Entdecken",
"DiskSpace": "Speicherplatz",
"DiskSpace": "Festplattenplatz",
"DownloadClientCheckNoneAvailableMessage": "Kein Download Client verfügbar",
"DownloadClientCheckUnableToCommunicateMessage": "Kommunikation mit {downloadClientName} nicht möglich.",
"DownloadClientStatusCheckAllClientMessage": "Alle Download Clients sind aufgrund von Fehlern nicht verfügbar",
@@ -110,7 +110,7 @@
"RemovedMovieCheckMultipleMessage": "Filme {movies} wurden aus TMDb entfernt",
"RemovedMovieCheckSingleMessage": "Film {movie} wurde aus TMDb entfernt",
"RenameFiles": "Dateien umbenennen",
"RestoreBackup": "Backup einspielen",
"RestoreBackup": "Sicherung wiederherstellen",
"Restrictions": "Beschränkungen",
"RootFolder": "Stammordner",
"RootFolderCheckMultipleMessage": "Es fehlen mehrere Stammordner: {rootFolderPaths}",
@@ -124,39 +124,37 @@
"SearchForMissing": "Suche fehlende",
"SearchSelected": "Auswahl suchen",
"Security": "Sicherheit",
"SelectAll": "Alle wählen",
"SetTags": "Tags setzen",
"SelectAll": "Alles auswählen",
"SetTags": "Tags festlegen",
"Settings": "Einstellungen",
"ShowAdvanced": "Einfache Ansicht",
"ShowAdvanced": "Erweitert anzeigen",
"Sort": "Sortieren",
"Status": "Status",
"Studio": "Studio",
"Style": "Stil",
"System": "System",
"Tags": "Tags",
"Tasks": "Aufgaben",
"Titles": "Titel",
"UI": "Oberfläche",
"UnmappedFolders": "Nicht zugeordnete Ordner",
"Unmonitored": "Nicht beobachtet",
"UnselectAll": "Keine wählen",
"UnselectAll": "Alle abwählen",
"UpdateAll": "Alle aktualisieren",
"UpdateCheckStartupNotWritableMessage": "Update kann nicht installiert werden, da der Startordner '{startupFolder}' vom Benutzer '{userName}' nicht beschreibbar ist.",
"UpdateCheckStartupTranslocationMessage": "Update kann nicht installiert werden, da sich der Startordner '{startupFolder}' in einem App Translocation-Ordner befindet.",
"UpdateCheckUINotWritableMessage": "Update kann nicht installiert werden, da der Benutzeroberflächenordner '{startupFolder}' vom Benutzer '{userName}' nicht beschreibbar ist.",
"Updates": "Updates",
"Updates": "Aktualisierung",
"View": "Ansicht",
"Week": "Woche",
"iCalLink": "iCal Link",
"Language": "Sprache",
"MediaManagementSettingsSummary": "Einstellungen für Bennenung und Dateiverwaltung",
"Year": "Jahr",
"Wanted": " Gesuchte",
"UpdateSelected": "Auswahl aktualisieren",
"Wanted": "Gesucht",
"UpdateSelected": "Update ausgewählt",
"UISettingsSummary": "Einstellungen für Kalender, Datumsformat und Farbbeeinträchtigung",
"Timeleft": "Restzeit",
"TagsSettingsSummary": "Alle Tags und deren Benutzung anzeigen. Unbenutzte Tags können entfernt werden",
"SourceTitle": "Release Titel",
"TagsSettingsSummary": "Sehen Sie sich alle Tags und deren Verwendung an. Nicht verwendete Tags können entfernt werden",
"SourceTitle": "Quellentitel",
"SizeOnDisk": "Größe",
"Size": "Größe",
"Runtime": "Laufzeit",
@@ -189,34 +187,33 @@
"Filename": "Dateiname",
"Failed": "Fehlgeschlagen",
"EventType": "Event Typ",
"DownloadClient": "Downloader",
"DigitalRelease": "VÖ Digital",
"Details": "Details",
"Details": "Einzelheiten",
"Deleted": "Gelöscht",
"CutoffUnmet": " Schwelle nicht erreicht",
"CustomFormatsSettingsSummary": "Eigene Formate und Einstellungen",
"ConnectSettingsSummary": "Benachrichtigungen, Verbindungen zu Medien Server/Clients und eigene Scripte",
"CustomFormatsSettingsSummary": "Benutzerdefinierte Formate und Einstellungen",
"ConnectSettingsSummary": "Benachrichtigungen, Verbindungen zu Medienservern/-playern und benutzerdefinierte Skripte",
"Collection": "Sammlung",
"Certification": "Zertifizierung",
"Added": "Hinzugefügt",
"Actions": "Aktionen",
"CustomFormatScore": "Eigenes Format Bewertungspunkte",
"Warn": "Warnung",
"VideoCodec": "Video Codec",
"Warn": "Achtung",
"VideoCodec": "Video-Codec",
"Unavailable": "Nicht verfügbar",
"Type": "Typ",
"TotalSpace": "Speicherkapazität",
"TotalSpace": "Gesamter Speicherplatz",
"Title": "Titel",
"Time": "Zeit",
"TestAll": "Alle testen",
"Test": "Testen",
"TestAll": "Alle prüfen",
"Test": "Prüfen",
"TableOptionsColumnsMessage": "Wähle aus welche Spalten angezeigt werden und in welcher Reihenfolge",
"TableOptions": "Tabellen Optionen",
"Source": "Quelle",
"Shutdown": "Herunterfahren",
"Seeders": "Seeders",
"Save": "Speichern",
"Restart": "Neustarten",
"Restart": "Neu starten",
"RemoveRootFolder": "Stammverzeichnis entfernen",
"Reload": "Neuladen",
"RelativePath": "Relativer Pfad",
@@ -242,7 +239,7 @@
"Component": "Komponente",
"Columns": "Spalten",
"Close": "Schließen",
"AudioInfo": "Audio-Info",
"AudioInfo": "Audioinformationen",
"Cancel": "Abbrechen",
"Apply": "Anwenden",
"AlternativeTitle": "Alternative Titel",
@@ -250,7 +247,7 @@
"Age": "Alter",
"AddNewMovie": "Neuen Film hinzufügen",
"SystemTimeCheckMessage": "Die Systemzeit ist um einen Tag versetzt. Bis die Zeit korrigiert wurde, könnten die geplanten Aufgaben nicht korrekt ausgeführt werden",
"UnsavedChanges": "Ungespeicherte Änderungen",
"UnsavedChanges": "Nicht gespeicherte Änderungen",
"Table": "Tabelle",
"ShowTitle": "Titel anzeigen",
"ShowStudio": "Studio anzeigen",
@@ -259,8 +256,7 @@
"ShowSearch": "Suche anzeigen",
"ShowQualityProfile": "Qualitätsdefinition anzeigen",
"ShowPath": "Pfad anzeigen",
"ShowMonitored": "Beobachtete anzeigen",
"ShowDateAdded": "Datum \"Hinzugefügt\" anzeigen",
"ShowDateAdded": "Datum der Hinzufügung anzeigen",
"SettingsWeekColumnHeaderHelpText": "Wird in der Wochenansicht über jeder Spalte angezeigt",
"SettingsWeekColumnHeader": "Wochen Spalten Titel",
"SettingsTimeFormat": "Zeitformat",
@@ -294,60 +290,59 @@
"ExistingMovies": "Vorhandene Filme",
"EditRemotePathMapping": "Entfernte Pfadzuordnung bearbeiten",
"DetailedProgressBarHelpText": "Text auf Fortschrittsbalken anzeigen",
"DetailedProgressBar": "Erweiterter Fortschrittsbalken",
"AddRemotePathMapping": "Entfernte Pfadzuordnung hinzufügen",
"UpdateAutomaticallyHelpText": "Updates automatisch herunteraden und installieren. Es kann weiterhin unter \"System -> Updates\" ein manuelles Update angestoßen werden",
"UrlBaseHelpText": "Für Reverse-Proxy-Unterstützung. Die Standardeinstellung leer",
"UsenetDelayHelpText": "Verzögerung in Minuten before ein Usenet-Release erfasst wird",
"DetailedProgressBar": "Detaillierter Fortschrittsbalken",
"AddRemotePathMapping": "Remote Pfad Zuordnung hinzufügen",
"UpdateAutomaticallyHelpText": "Updates automatisch herunterladen und installieren. Sie können weiterhin über System: Updates installieren",
"UrlBaseHelpText": "Für die Reverse-Proxy-Unterstützung ist der Standardwert leer",
"UsenetDelayHelpText": "Verzögerung in Minuten, bevor Sie eine Veröffentlichung aus dem Usenet erhalten",
"WhitelistedHardcodedSubsHelpText": "Hier gesetzte Untertitel Tags werden nciht als hartcodiert erachtet",
"EnableAutoHelpText": "Wenn aktiviert werden Filme dieser Liste automatisch hinzugefügt",
"AddImportExclusionHelpText": "Automatisches ( wieder- ) hinzufügen durch Listen verhindern",
"AgeWhenGrabbed": "Alter (beim erfassen)",
"AddImportExclusionHelpText": "Automatisches ( wieder- ) hinzufügen zu {appName} durch Listen verhindern",
"AgeWhenGrabbed": "Alter (zum Zeitpunkt der Entführung)",
"AllowHardcodedSubs": "Hartcodierte Untertitel erlauben",
"AlreadyInYourLibrary": "Bereits in deiner Mediathek",
"AlreadyInYourLibrary": "Bereits in Ihrer Bibliothek",
"AnalyseVideoFiles": "Video Dateien analysieren",
"AppDataDirectory": "AppData Ordner",
"ApplyTags": "Tags setzen",
"AppDataDirectory": "AppData-Verzeichnis",
"ApplyTags": "Schlagworte anwenden",
"AsAllDayHelpText": "Events werden als ganztags Event in deinem Kalender angezeigt",
"Authentication": "Authentifizierung",
"Automatic": "Automatisch",
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Auf der Festplatte gelöschte Filme auch automatisch in {appName} nicht mehr beobachten",
"AvailabilityDelay": "Verfügbarkeits Verzögerung",
"AvailabilityDelayHelpText": "Zeit vor( - ) oder nach( + ) dem Verfügbarkeitsdatum für die Suche nach einem Film",
"BackupIntervalHelpText": "Intervall zum sichern der Datenbank und Einstellungen",
"BackupRetentionHelpText": "Automatische Backups, die älter als die Aufbewahrungsfrist sind, werden automatisch gelöscht",
"BackupIntervalHelpText": "Intervall zwischen automatischen Sicherungen",
"BackupRetentionHelpText": "Automatische Backups, die älter als der Aufbewahrungszeitraum sind, werden automatisch bereinigt",
"Backups": "Sicherungen",
"BindAddress": "Adresse binden",
"BindAddressHelpText": "Gültige IP Adresse oder \"*\" für alle Netzwerke",
"Branch": "Git-Branch",
"BindAddressHelpText": "Gültige IP-Adresse, localhost oder „*“ für alle Schnittstellen",
"Branch": "Branch",
"BypassProxyForLocalAddresses": "Proxy für lokale Adressen umgehen",
"CertificateValidation": "Zertifikat Validierung",
"CertificateValidationHelpText": "Ändere wie streng die Validierung der HTTPS-Zertifizierung ist. Ändern Sie nicht wenn Ihnen die Risiken nicht bewusst sind.",
"CertificateValidation": "Zertifikatsvalidierung",
"CertificateValidationHelpText": "Ändern Sie, wie streng die Validierung der HTTPS-Zertifizierung ist. Ändern Sie nichts, es sei denn, Sie verstehen die Risiken.",
"CertificationCountry": "Zertifizierungsland",
"ChangeFileDate": "Erstelldatum der Datei anpassen",
"ChangeFileDate": "Ändern Sie das Dateidatum",
"ChangeHasNotBeenSavedYet": "Änderung wurde noch nicht gespeichert",
"CheckForFinishedDownloadsInterval": "Intervall zum prüfen von fertigen Downloads",
"CleanLibraryLevel": "Mediathek aufräumen",
"ClickToChangeLanguage": "Sprache ändern",
"ClickToChangeQuality": "Hier klicken um die Qualität zu ändern",
"ClickToChangeLanguage": "Klicken Sie, um die Sprache zu ändern",
"ClickToChangeQuality": "Klicken Sie, um die Qualität zu ändern",
"ClientPriority": "Priorität",
"CloneProfile": "Profil kopieren",
"ColonReplacement": "Doppelpunkt-Ersatz",
"ColonReplacementFormatHelpText": "Ändere wie {appName} Doppelpunkte ersetzt",
"CloneProfile": "Profil klonen",
"ColonReplacement": "Doppelpunktersatz",
"ColonReplacementFormatHelpText": "Ändern Sie, wie {appName} mit der Doppelpunktersetzung umgeht",
"Conditions": "Bedingungen",
"CreateEmptyMovieFolders": "Leere Filmordner erstellen",
"CreateEmptyMovieFoldersHelpText": "Leere Filmordner für fehlende Filme beim Scan erstellen",
"CreateGroup": "Gruppe erstellen",
"CustomFormatsSettings": "Einstellungen für eigene Formate",
"CustomFormatsSettings": "Benutzerdefinierte Formateinstellungen",
"CutoffFormatScoreHelpText": "Sobald diese eigener Format Bewertung erreicht wird, werden keine neuen Releases erfasst",
"CutoffHelpText": "Sobald diese Qualität erreicht wird, werden keine neuen Releases erfasst",
"DeleteBackup": "Backup löschen",
"DeleteCustomFormat": "Eigenes Format löschen",
"DeleteBackup": "Sicherung löschen",
"DeleteCustomFormat": "Benutzerdefiniertes Format löschen",
"DeleteDelayProfile": "Verzögerungsprofil löschen",
"DeleteDownloadClient": "Downloader löschen",
"DeleteDownloadClient": "Download-Client löschen",
"DeleteEmptyFolders": "Leere Ordner löschen",
"DeleteFile": "Datei löschen",
"DeleteImportListExclusion": "Importlisten Ausschluss löschen",
"DeleteIndexer": "Indexer löschen",
"DeleteRestriction": "Beschränkung löschen",
"DeleteSelectedMovieFiles": "Ausgewählte Filmdateien löschen",
@@ -465,8 +460,8 @@
"RefreshMovie": "Film aktualisieren",
"ReleaseRejected": "Release abgelehnt",
"Remove": "Entfernen",
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlage entfernt",
"RemoveFailedDownloadsHelpText": "Fehlgeschlagene Downloads aus dem Downloader Verlauf entfernen",
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlange entfernt",
"RemoveFailedDownloadsHelpText": "Entfernen Sie fehlgeschlagene Downloads aus dem Download-Client-Verlauf",
"RemoveFilter": "Filter entfernen",
"RemoveFromQueue": "Aus der Warteschlage entfernen",
"RenameMovies": "Filme umbenennen",
@@ -475,25 +470,23 @@
"ReplaceIllegalCharacters": "Sonderzeichen ersetzen",
"ReplaceIllegalCharactersHelpText": "Wenn nicht aktiviert, werden Sonderzeichen ganz entfernt",
"RescanAfterRefreshHelpText": "Nach dem aktualisieren des Films, den Filmordner neu scannen",
"RescanAfterRefreshHelpTextWarning": "Wenn nicht \"Immer (Always)\" ausgewählt wird, werden Dateiänderungen nicht automatisch erkannt",
"RescanAfterRefreshHelpTextWarning": "{appName} erkennt Änderungen an Dateien nicht automatisch, wenn es nicht auf „Immer“ eingestellt ist.",
"RescanMovieFolderAfterRefresh": "Nach dem aktualisieren den Filmordner neu scannen",
"Reset": "Zurücksetzen",
"ResetAPIKey": "API-Schlüssel zurücksetzen",
"RestartNow": "Jetzt neustarten",
"RestartRadarr": "{appName} Neustarten",
"Result": "Ergebnis",
"Retention": "Aufbewahrung ( Retention )",
"RetentionHelpText": "Nur Usenet: Für eine umbegrenzte Aufbewahrung auf 0 setzen",
"RetentionHelpText": "Nur Usenet: Auf Null setzen, um eine unbegrenzte Aufbewahrung festzulegen",
"RSSSyncInterval": "RSS Synchronisierungs Intervall",
"ScriptPath": "Script Pfad",
"SetPermissions": "Rechte setzen",
"SetPermissionsLinuxHelpTextWarning": "Ändere diese Einstellung nur, wenn du weißt was sie bewirken.",
"SetPermissionsLinuxHelpTextWarning": "Wenn Sie nicht sicher sind, was diese Einstellungen bewirken, ändern Sie sie nicht.",
"ShouldMonitorHelpText": "Sollen von dieser Liste hinzugefügte Filme oder Sammlungen als beobachtet hinzugefügt werden",
"ShowAsAllDayEvents": "Als Ganztags Events anzeigen",
"ShowCutoffUnmetIconHelpText": "Symbol zeigen wenn die Qualitätsschwelle noch nicht erreicht wurde",
"ShowMovieInformationHelpText": "Genre und Zertifizierung anzeigen",
"ShowQualityProfileHelpText": "Qualitätsprofil unter dem Plakat anzeigen",
"ShowMonitoredHelpText": "Beobachtungsstatus unter dem Plakat anzeigen",
"ShowMovieInformation": "Filminformationen anzeigen",
"ShowTitleHelpText": "Filmtitel unter dem Plakat anzeigen",
"ShowUnknownMovieItems": "Unzugeordente Filmeinträge anzeigen",
@@ -509,21 +502,21 @@
"StartupDirectory": "Start-Verzeichnis",
"SuggestTranslationChange": "Schlage eine Übersetzung vor",
"TagsHelpText": "Wird auf Filme mit mindestens einem passenden Tag angewandt",
"TestAllClients": "Alle testen",
"TestAllIndexers": "Alle testen",
"TestAllLists": "Alle testen",
"TestAllClients": "Prüfe alle Clients",
"TestAllIndexers": "Prüfe alle Indexer",
"TestAllLists": "Prüfe alle Listen",
"TimeFormat": "Zeitformat",
"UpdateMechanismHelpText": "Benutze den in {appName} eingebauten Updater oder ein Script",
"UpdateMechanismHelpText": "Verwenden Sie den integrierten Updater von {appName} oder ein Skript",
"UpdateScriptPathHelpText": "Pfad zu einem benutzerdefinierten Skript, das ein extrahiertes Update-Paket übernimmt und den Rest des Update-Prozesses abwickelt",
"UpgradeAllowedHelpText": "Wenn deaktiviert wird die Qualität nicht verbessert",
"Uptime": "Laufzeit",
"Uptime": "Betriebszeit",
"URLBase": "URL-Basis",
"TMDBId": "TMDb ID",
"TmdbIdHelpText": "Die TMDb ID für den Ausschluss",
"TorrentDelay": "Torrent Verzögerung",
"TorrentDelayHelpText": "Verzögerung in Minuten bevor ein Torrent-Release erfasst wird",
"TorrentDelay": "Torrent-Verzögerung",
"TorrentDelayHelpText": "Verzögerung in Minuten, bevor ein Torrent herunterladen wird",
"Torrents": "Torrents",
"TotalFileSize": "Gesamte Dateigröße",
"TotalFileSize": "Gesamtdateigröße",
"UISettings": "Benutzeroberflächen Einstellungen",
"UnableToLoadCustomFormats": "Eigene Formate konnten nicht geladen werden",
"UnableToLoadDelayProfiles": "Verzögerungsprofile konnten nicht geladen werden",
@@ -538,15 +531,15 @@
"UnableToLoadTags": "Tags konnten nicht geladen werden",
"Ungroup": "Gruppe entfernen",
"UnmonitoredHelpText": "Nicht beobachtete Filme im iCal-Feed einschließen",
"UseHardlinksInsteadOfCopy": "Hardlinks anstatt kopieren verwenden",
"UseHardlinksInsteadOfCopy": "Verwende Hardlinks statt Kopieren",
"Usenet": "Usenet",
"UsenetDelay": "Usenet Verzögerung",
"UseProxy": "Proxy benutzen",
"Username": "Benutzername",
"UsenetDelay": "Usenet-Verzögerung",
"UseProxy": "Verwende Proxy",
"Username": "Nutzername",
"Version": "Version",
"WeekColumnHeader": "Titel der Wochenspalte",
"WeekColumnHeader": "Spaltenüberschrift „Woche“.",
"WhitelistedSubtitleTags": "Erlaubte Untertitel Tags",
"YesCancel": "Ja, abbrechen",
"YesCancel": "Ja Abbrechen",
"EnableColorImpairedModeHelpText": "Alternativer Stil, um farbbeeinträchtigten Benutzern eine bessere Unterscheidung farbcodierter Informationen zu ermöglichen",
"MovieIsOnImportExclusionList": "Film ist auf der Net Import Ausschluss Liste",
"RemoveHelpTextWarning": "Dies wird den Download und alle bereits heruntergeladenen Dateien aus dem Downloader entfernen.",
@@ -556,10 +549,10 @@
"AllowHardcodedSubsHelpText": "Filme mit hartcodierten Untertiteln werden auch automatisch heruntergeladen",
"ICalHttpUrlHelpText": "Füge diese URL in deinen Client ein oder klicke auf abonnieren wenn dein Browser Webcal untertützt",
"NoMinimumForAnyRuntime": "Kein Minimum für Laufzeiten",
"AnalyticsEnabledHelpText": "Sende anonyme Nutzungs- und Fehlerinformationen an die Server von {appName}. Dazu gehören Informationen über Browser, welche Seiten der {appName}-Weboberfläche aufgerufen wurden, Fehlerberichte sowie Betriebssystem- und Laufzeitversion. Wir werden diese Informationen verwenden, um Funktionen und Fehlerbehebungen zu priorisieren.",
"AnalyticsEnabledHelpText": "Senden Sie anonyme Nutzungs- und Fehlerinformationen an die Server von {appName}. Dazu gehören Informationen zu Ihrem Browser, welche {appName}-WebUI-Seiten Sie verwenden, Fehlerberichte sowie Betriebssystem- und Laufzeitversion. Wir werden diese Informationen verwenden, um Funktionen und Fehlerbehebungen zu priorisieren.",
"IgnoredHelpText": "Ein Release wird abgelehnt, wenn es einen oder mehrere dieser Begriffe enthält (Groß- und Kleinschreibung wird nicht berücksichtigt)",
"OnDownloadHelpText": "Import",
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart",
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart, damit die Aktion wirksam wird",
"ApiKey": "API-Schlüssel",
"ImportedTo": "Importiert nach",
"Permissions": "Rechte",
@@ -568,17 +561,17 @@
"CopyUsingHardlinksHelpText": "Hardlinks erlauben es {appName}, Torrents zu importieren die derzeit geseeded werden, ohne dabei weiteren Speicherplatz zu belegen oder die Datei vollständig zu kopieren. Hardlinks funktionieren nur, wenn sich die Quelle und das Ziel auf dem selben Volume befinden",
"PriorityHelpText": "Priorisiere mehrere Downloader. Rundlauf-Verfahren wird für Downloader mit der gleichen Priorität verwendet.",
"SearchForMovie": "Film suchen",
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich",
"CopyUsingHardlinksHelpTextWarning": "Dateisperren Gelegentlich kann es vorkommen, dass Dateisperren das Umbenennen von Dateien verhindern, die gerade geseeded werden. Sie können das Seeding vorübergehend deaktivieren und die Umbenennungsfunktion von {appName} als Workaround verwenden.",
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich.",
"CopyUsingHardlinksHelpTextWarning": "Gelegentlich können Dateisperren das Umbenennen von Dateien verhindern, die geseedet werden. Sie können das Seeding vorübergehend deaktivieren und als Workaround die Umbenennungsfunktion von {appName} verwenden.",
"IndexerSettings": "Indexer Einstellungen",
"ProxyPasswordHelpText": "Sie müssen nur einen Benutzernamen und ein Passwort eingeben, wenn dies erforderlich ist. Andernfalls lassen Sie sie leer.",
"SendAnonymousUsageData": "Anonyme Nutzungsdaten übertragen",
"AutoRedownloadFailedHelpText": "Automatisch nach einem anderen Release suchen",
"SendAnonymousUsageData": "Sende anonyme Nutzungsdaten",
"AutoRedownloadFailedHelpText": "Suchen Sie automatisch nach einer anderen Version und versuchen Sie, sie herunterzuladen",
"DBMigration": "DB Migration",
"LaunchBrowserHelpText": " Öffne die Startseite von {appName} im Webbrowser nach dem Start.",
"ReadTheWikiForMoreInformation": "Lesen Sie das Wiki für weitere Informationen",
"SetPermissionsLinuxHelpText": "Soll CHMOD ausgeführt werden wenn Datien importiert/umbenannt werden?",
"BackupFolderHelpText": "Relative Pfade befinden sich unter {appName}s AppData Ordner",
"BackupFolderHelpText": "Relative Pfade befinden sich im AppData-Verzeichnis von {appName}",
"DelayProfile": "Verzögerungsprofil",
"MaximumLimits": "Maximale Grenzen",
"RecycleBinCleanupDaysHelpTextWarning": "Datien im Papierkorb die älter sind als der gewählte Wert, werden endgültig gelöscht",
@@ -590,22 +583,22 @@
"DeleteNotification": "Benachrichtigung löschen",
"MetadataSettings": "Metadaten Einstellungen",
"RemoveCompletedDownloadsHelpText": "Importierte Downloads aus dem Downloader Verlauf entfernen",
"CloneIndexer": "Indexer kopieren",
"DeleteQualityProfile": "Qualitätsdefinition löschen",
"CloneIndexer": "Indexer klonen",
"DeleteQualityProfile": "Qualitätsprofil löschen",
"MinFormatScoreHelpText": "Mindester eigener Format Score bis zum Download",
"ConnectSettings": "Eintellungen für Verbindungen",
"ConnectSettings": "Verbindungseinstellungen",
"MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten der NZBs bevor sie erfasst werden. Gebe damit neuen Releases Zeit, sich bei deinem Usenet Provider zu verbreiten.",
"RemoveFromDownloadClient": "Aus dem Downloader entfernen",
"WaitingToProcess": "Wartet auf Verarbeitung",
"WaitingToImport": "Wartet auf Import",
"UpgradeUntilThisQualityIsMetOrExceeded": "Solange bis die Qualität erreicht oder übertroffen wird verbessern",
"RemoveFromDownloadClient": "Vom Download-Client entfernen",
"WaitingToProcess": "Warten auf Bearbeitung",
"WaitingToImport": "Warten auf Import",
"UpgradeUntilThisQualityIsMetOrExceeded": "Führe ein Upgrade durch, bis diese Qualität erreicht oder überschritten wird",
"TagCannotBeDeletedWhileInUse": "Kann während der Benutzung nicht gelöscht werden",
"SubfolderWillBeCreatedAutomaticallyInterp": "'{0}' Unterordner wird automatisch erstellt",
"SSLCertPathHelpText": "Pfad zur PFX Datei",
"SSLCertPasswordHelpText": "Passwort für die PFX Datei",
"ShowYear": "Jahr anzeigen",
"ShowRatings": "Bewertungen anzeigen",
"ShownClickToHide": "Angezeigt, zum verstecken klicken",
"ShownClickToHide": "Angezeigt, zum Ausblenden klicken",
"ShowGenres": "Genres anzeigen",
"ShowCertification": "Zertifikation anzeigen",
"SettingsRuntimeFormat": "Laufzeit Format",
@@ -642,16 +635,16 @@
"Downloading": "Lädt herunter",
"DownloadFailed": "Download fehlgeschlagen",
"DownloadClientUnavailable": "Downloader ist nicht verfügbar",
"DeleteTagMessageText": "Tag '{0}' wirklich löschen?",
"DeleteTagMessageText": "Sind Sie sicher, dass Sie das Tag „{label}“ löschen möchten?",
"DeleteRestrictionHelpText": "Beschränkung '{0}' wirklich löschen?",
"DeleteNotificationMessageText": "Benachrichtigung '{0}' wirklich löschen?",
"DeleteIndexerMessageText": "Indexer '{0}' wirklich löschen?",
"DeleteDownloadClientMessageText": "Downloader '{0}' wirklich löschen?",
"DeleteBackupMessageText": "Backup '{0}' wirkich löschen?",
"DeleteNotificationMessageText": "Sind Sie sicher, dass Sie die Benachrichtigung „{name}“ löschen möchten?",
"DeleteIndexerMessageText": "Sind Sie sicher, dass Sie den Indexer „{name}“ löschen möchten?",
"DeleteDownloadClientMessageText": "Sind Sie sicher, dass Sie den Download-Client „{name}“ löschen möchten?",
"DeleteBackupMessageText": "Sind Sie sicher, dass Sie die Sicherung „{name}“ löschen möchten?",
"Cutoff": "Schwelle",
"ClickToChangeMovie": "Klicken um den Film zu bearbeiten",
"CheckDownloadClientForDetails": "prüfe den Downloader für mehr Details",
"CancelPendingTask": "Diese laufende Aufgabe wirklich abbrechen?",
"CheckDownloadClientForDetails": "Weitere Informationen finden Sie im Download-Client",
"CancelPendingTask": "Möchten Sie diese ausstehende Aufgabe wirklich abbrechen?",
"BranchUpdateMechanism": "Git-Branch für den externen Updateablauf",
"BranchUpdate": "Verwendeter Git-Branch für Aktualisierungen",
"BeforeUpdate": "Vor dem Update",
@@ -661,7 +654,7 @@
"Unreleased": "Unveröffentlicht",
"UnableToLoadUISettings": "Oberflächen Einstellungen konnten nicht geladen werden",
"UnableToLoadTheCalendar": "Kalender konnte nicht geladen werden",
"UnableToLoadRootFolders": "Stammordner konnten nicht geladen werden",
"UnableToLoadRootFolders": "Stammordner können nicht geladen werden",
"UnableToLoadMediaManagementSettings": "Media Verwaltungseinstellungen konnten nicht geladen werden",
"UnableToLoadNamingSettings": "Umbenennungeinstellungen konnten nicht geladen werden",
"UnableToLoadMovies": "Filme konnten nicht geladen werden",
@@ -669,7 +662,7 @@
"UnableToLoadIndexerOptions": "Indexer Einstellungen konnten nicht geladen werden",
"UnableToLoadGeneralSettings": "Allgemeine Einstellungen konnten nicht geladen werden",
"UnableToLoadDownloadClientOptions": "Downloader Einstellungen konnten nicht geladen werden",
"BackupsLoadError": "Backups konnten nicht geladen werden",
"BackupsLoadError": "Sicherrungen können nicht geladen werden",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Die neue entfernte Pfadzuordnung konnte nicht hinzugefügt werden, bitte erneut probieren.",
"UnableToAddANewQualityProfilePleaseTryAgain": "Das neue Qualitätsprofil konnte nicht hinzugefügt werden, bitte erneut probieren.",
"UnableToAddANewNotificationPleaseTryAgain": "Die neue Benachrichtigung konnte nicht hinzugefügt werden, bitte erneut probieren.",
@@ -680,7 +673,6 @@
"UnableToAddANewCustomFormatPleaseTryAgain": "Das neue eigene Format konnte nicht hinzugefügt werden, bitte erneut probieren.",
"UnableToAddANewConditionPleaseTryAgain": "Die neue Bedingung konnte nicht hinzugefügt werden, bitte erneut probieren.",
"ThisConditionMatchesUsingRegularExpressions": "Diese Bedingung entspricht der Verwendung von Regulären Ausdrücken. Beachten Sie, dass die Zeichen {0} spezielle Bedeutungen haben und mit einem {1} maskiert werden müssen",
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht benutzt und kann gelöscht werden",
"StartTypingOrSelectAPathBelow": "Eingeben oder unten auswählen",
"Restore": "Wiederherstellen",
"RegularExpressionsCanBeTested": "Reguläre Ausdrücke können getestet werden ",
@@ -718,7 +710,7 @@
"ErrorLoadingContents": "Fehler beim laden der Inhalte",
"DownloadedButNotMonitored": "Heruntergeladen (unbeobachtet)",
"DownloadedAndMonitored": "Heruntergeladen (beobachtet)",
"CouldNotFindResults": "Keine Ergebnisse für '{0}' gefunden",
"CouldNotFindResults": "Es konnten keine Ergebnisse für „{term}“ gefunden werden.",
"CantFindMovie": "Warum kann der Film nicht gefunden werden?",
"ApplyTagsHelpTextHowToApplyMovies": "Wie werden Tags zu ausgewählten Filmen zugeteilt",
"UILanguageHelpTextWarning": "Webseite muss neu geladen werden",
@@ -735,7 +727,7 @@
"DownloadPropersAndRepacksHelpText1": "Automatisch Proper oder Repacks zum upgraden eines Filmes zulassen",
"DownloadPropersAndRepacks": "Propers und Repacks",
"CopyToClipboard": "In die Zwischenablage kopieren",
"CloneCustomFormat": "Eigenes Format kopieren",
"CloneCustomFormat": "Benutzerdefiniertes Format klonen",
"Priority": "Priorität",
"InteractiveSearch": "Interaktive Suche",
"IndexerPriorityHelpText": "Indexer Priorität von 1 (höchste) bis 50 (niedrigste). Standard: 25. Wird beim Erfassen von Releases als Entscheidungskriterium für andernfalls gleiche Releases verwendet, {appName} wird trotzdem alle aktivierten Indexer für RSS-Sync und Suche verwenden",
@@ -784,12 +776,12 @@
"ChmodGroupHelpTextWarning": "Dies funktioniert nur, wenn der Benutzer, der {appName} ausführt, der Eigentümer der Datei ist. Es ist besser, sicherzustellen, dass der Download-Client die gleiche Gruppe wie {appName} verwendet.",
"ChmodGroupHelpText": "Gruppenname oder gid. Verwenden Sie gid für entfernte Dateisysteme.",
"ChmodGroup": "chmod Gruppe",
"ChmodFolderHelpTextWarning": "Dies funktioniert nur, wenn der Benutzer, der {appName} ausführt, der Eigentümer der Datei ist. Es ist besser, sicherzustellen, dass der Download-Client die Berechtigungen richtig setzt.",
"ChmodFolderHelpText": "Oktal, wird beim Importieren/Umbenennen von Medienordnern und Dateien angewendet (ohne Ausführungsbits)",
"ChmodFolderHelpTextWarning": "Dies funktioniert nur, wenn der Benutzer, der {appName} ausführt, der Eigentümer der Datei ist. Es ist besser, sicherzustellen, dass der Download-Client die Berechtigungen richtig festlegt.",
"ChmodFolderHelpText": "Oktal, angewendet beim Importieren/Umbenennen auf Medienordner und -dateien (ohne Ausführungsbits)",
"ChmodFolder": "chmod Ordner",
"FileNameTokens": "Dateinamen Teile",
"YesMoveFiles": "Ja, Dateien verschieben",
"WouldYouLikeToRestoreBackup": "Willst du das Backup {0} wiederherstellen?",
"WouldYouLikeToRestoreBackup": "Möchten Sie die Sicherung „{name}“ wiederherstellen?",
"Wiki": "Wiki",
"WhatsNew": "Was gibt's Neues?",
"Weeks": "Wochen",
@@ -797,7 +789,7 @@
"UsenetDelayTime": "Usenet Verzögerung: {0}",
"UpperCase": "Großgeschrieben",
"UpgradeUntilQuality": "Upgrade bis zur Qualität",
"UpgradeUntilCustomFormatScore": "Upgrade bis zur eigenen Format Wertung",
"UpgradeUntilCustomFormatScore": "Upgrade bis zur benutzerdefinierten Formatbewertung",
"UpgradesAllowed": "Upgrades erlaubt",
"UnmappedFilesOnly": "Nur nicht zugeordnete Dateien",
"Unlimited": "Unlimitiert",
@@ -807,13 +799,11 @@
"Trigger": "Auslöser",
"Trakt": "Trakt",
"Trailer": "Trailer",
"Trace": "Trace",
"TorrentsDisabled": "Torrents deaktiviert",
"TorrentDelayTime": "Torrent Verzögerung: {0}",
"TMDb": "TMDb",
"ThisCannotBeCancelled": "Nach dem Start kann dies nicht mehr abgebrochen werden ohne alle Indexer zu deaktivieren.",
"TheLogLevelDefault": "Das Standart Log-Level ist 'Info* und kann geändert werden zu",
"TagDetails": "Tag Detail - {0}",
"TheLogLevelDefault": "Die Protokollebene ist standardmäßig auf „Info“ eingestellt und kann unter „Allgemeine Einstellungen“ (/settings/general) geändert werden.",
"Sunday": "Sonntag",
"SomeResultsHiddenFilter": "Einige Ergebnisse werden wegen der aktiven Filter nicht angezeigt",
"Socks5": "Socks5 (unterstützt TOR)",
@@ -825,10 +815,10 @@
"Seconds": "Sekunden",
"SearchMissing": "Fehlende suchen",
"SearchCutoffUnmet": "Schwelle nicht erreicht suchen",
"Script": "Script",
"Score": "Bewertungspunkte",
"Script": "Skript",
"Score": "Punktzahl",
"RSS": "RSS",
"RestartReloadNote": "Hinweis: Während der wiederherstellung wird {appName} automatisch neugestartet und die Oberfläche neugelade.",
"RestartReloadNote": "Hinweis: {appName} startet während des Wiederherstellungsvorgangs automatisch neu und lädt die Benutzeroberfläche neu.",
"Required": "Erforderlich",
"ReplaceWithSpaceDashSpace": "Mit Leerzeichen Bindestrich Leerzeichen ersetzen",
"ReplaceWithSpaceDash": "Mit Leerzeichen Bindestrich ersetzen",
@@ -921,9 +911,9 @@
"EditGroups": "Gruppen bearbeiten",
"EditDelayProfile": "Verzögerungsprofil bearbeiten",
"EditCustomFormat": "Eigenes Format bearbeiten",
"DoNotUpgradeAutomatically": "Nicht automatisch upgraden",
"DoNotUpgradeAutomatically": "Nicht automatisch aktualisieren",
"DoNotPrefer": "Nicht bevorzugen",
"DoneEditingGroups": "Editieren der Gruppen abschließen",
"DoneEditingGroups": "Bearbeiten der Gruppen abgeschlossen",
"Donations": "Spenden",
"DockerUpdater": "aktualisiere den Docker Container um das Update zu erhalten",
"Discord": "Discord",
@@ -936,29 +926,29 @@
"DeleteFilesHelpText": "Lösche die Filmdateien und den Filmordner",
"DeletedMsg": "Film wurde aus TMDb entfernt",
"DefaultDelayProfile": "Dies ist das Standart Profil. Es wird auf alle Filme angewendet die kein expliziertes Profil haben.",
"DefaultCase": "Standart Fall",
"Debug": "Debug",
"DefaultCase": "Standardfall",
"Debug": "Debuggen",
"Days": "Tage",
"CustomFormatHelpText": "Jedes Release wird mithilfe der summierten Bewertungspunkte der zutreffenden eigenen Formate Bewertet. Wenn ein neues Release, mit gleicher oder besserer Qualität, diese Bewertung verbessern würde, wird es erfasst und heruntergeladen.",
"CustomFormat": "Eigenes Format",
"CustomFormatHelpText": "{appName} bewertet jede Veröffentlichung anhand der Summe der Bewertungen für übereinstimmende benutzerdefinierte Formate. Wenn eine neue Version die Punktzahl verbessern würde, bei gleicher oder besserer Qualität, dann wird {appName} sie übernehmen.",
"CustomFormat": "Benutzerdefiniertes Format",
"Custom": "Benutzerdefiniert",
"CurrentlyInstalled": "Aktuell Installiert",
"CurrentlyInstalled": "Derzeit installiert",
"Connection": "Verbindung",
"CertValidationNoLocal": "Für Lokale Adressen deaktivieren",
"CalendarOptions": "Kalender Optionen",
"CalendarOptions": "Kalenderoptionen",
"BuiltIn": "Integriert",
"AuthForm": "Formular (Login Seite)",
"AuthBasic": "Einfach (Browser Popup)",
"AptUpdater": "Benutze 'apt' um das Update zu installieren",
"AuthForm": "Formulare (Anmeldeseite)",
"AuthBasic": "Basis (Browser-Popup)",
"AptUpdater": "Verwenden Sie apt, um das Update zu installieren",
"Always": "Immer",
"AllResultsHiddenFilter": "Keine Ergebnisse mit den ausgewählten Filtern",
"AllMoviesInPathHaveBeenImported": "Alle Filme in {0} wurden importiert",
"AllMoviesInPathHaveBeenImported": "Alle Filme in {path} wurden importiert",
"AllFiles": "Alle Dateien",
"AfterManualRefresh": "Nach manuellen aktualisieren",
"AddToDownloadQueue": "Zur Downloadwarteschlange hinzufügen",
"AddRootFolder": "Stammordner hinzufügen",
"AddQualityProfile": "Qualitätsprofil hinzufügen",
"AddedToDownloadQueue": "Zur Downloadwarteschlange hinzugefügt",
"AfterManualRefresh": "Nach manueller Aktualisierung",
"AddToDownloadQueue": "Zur Download-Warteschlange hinzufügen",
"AddRootFolder": "Stammverzeichnis hinzufügen",
"AddQualityProfile": "Qualitäts Profil hinzufügen",
"AddedToDownloadQueue": "Zur Download-Warteschlange hinzugefügt",
"AddDownloadClient": "Downloadmanager hinzufügen",
"AddCustomFormat": "Eigenes Format hinzufügen",
"AddDelayProfile": "Verzögerungsprofil hinzufügen",
@@ -1001,13 +991,12 @@
"RemotePathMappingCheckDownloadPermissions": "{appName} kann den Download sehen, aber nicht verarbeiten {path}. Möglicherweise ein Rechteproblem.",
"ImportListMultipleMissingRoots": "Mehrere Stammverzeichnisse fehlen für Importlist: {rootFoldersInfo}",
"ImportListMissingRoot": "Fehlendes Stammverzeichnis für Importlist(en): {rootFolderInfo}",
"BypassDelayIfHighestQualityHelpText": "Verzögerung ignorieren wenn das Release die höchste aktivierte Qualität des Qualitätsprofils mit dem bevorzugtem Protokoll ist",
"BypassDelayIfHighestQuality": "Ignoriere wenn höchste Qualität",
"TaskUserAgentTooltip": "UserAgent von der App welche die API aufgerufen hat",
"BypassDelayIfHighestQualityHelpText": "Umgehungs-Verzögerung, wenn die Freigabe die höchste aktivierte Qualität im Qualitätsprofil mit dem bevorzugten Protokoll hat",
"BypassDelayIfHighestQuality": "Bei höchster Qualität umgehen",
"TaskUserAgentTooltip": "Benutzeragent, bereitgestellt von der App, die die API aufgerufen hat",
"Letterboxd": "Letterboxd",
"From": "von",
"NotificationTriggersHelpText": "Auslöser für diese Benachrichtigung auswählen",
"UnableToAddRootFolder": "Stammverzeichnis konnte nicht hinzugefügt werden",
"Blocklist": "Sperrliste",
"BlocklistRelease": "Release sperren",
"RemoveFromBlocklist": "Aus der Sperrliste entfernen",
@@ -1015,23 +1004,23 @@
"BlocklistReleases": "Release sperren",
"IndexerTagHelpText": "Benutze den Indexer nur für Filme mit mindesens einen zutreffenden Tag. Leer lassen für alle Filme.",
"RemoveSelectedItem": "Entferne ausgewählten Eintrag",
"RemoveSelectedItems": "Entferne ausgewählte Einträge",
"RemoveFailed": "Entfernen fehlgeschlagen",
"RemoveSelectedItems": "Markierte Einträge löschen",
"RemoveFailed": "Entferne fehlgeschlagene",
"RemoveCompleted": "Abgeschlossene entfernen",
"RemoveDownloadsAlert": "Die Einstellungen zum Entfernen wurden in die individuellen Download Client Einstellungen in der obigen Tabelle verschoben.",
"LocalPath": "Lokaler Pfad",
"AnnouncedMsg": "Film ist angekündigt",
"ClickToChangeReleaseGroup": "Releasegruppe ändern",
"ClickToChangeReleaseGroup": "Klicken Sie hier, um die Release-Gruppe zu ändern",
"Filters": "Filter",
"SelectLanguages": "Sprachen auswählen",
"SelectLanguages": "Sprache auswählen",
"IndexerJackettAll": "Indexer, welche den nicht unterstützten 'all'-Endpoint von Jackett verwenden: {indexerNames}",
"ManualImportSetReleaseGroup": "Manueller Import - Releasegruppe setzen",
"OnApplicationUpdate": "Bei Anwendungsaktualisierung",
"OnApplicationUpdateHelpText": "Bei Anwendungsaktualisierung",
"RemotePath": "Entfernter Pfad",
"SelectReleaseGroup": "Releasgruppe auswählen",
"SelectReleaseGroup": "Wähle Release-Gruppe",
"SizeLimit": "Grössenlimit",
"SetReleaseGroup": "Releasgruppe setzen",
"SetReleaseGroup": "Release-Gruppe festlegen",
"IndexerDownloadClientHelpText": "Wähle aus, welcher Download-Client für diesen Indexer verwendet wird",
"DiscordUrlInSlackNotification": "Du hast eine Discord-Benachrichtigung als Slack-Benachrichtigung eingerichtet. Richte diese für bessere Funktionalität als Discord-Benachrichtigung ein. Folgende Benachrichtigen sind betroffen: {}",
"Duration": "Dauer",
@@ -1041,7 +1030,7 @@
"ImdbRating": "IMDb Bewertung",
"ImdbVotes": "IMDb Stimmen",
"Never": "Niemals",
"Started": "gestartet",
"Started": "Gestartet",
"TmdbRating": "TMDb Bewertung",
"TmdbVotes": "TMDb Stimmen",
"Waiting": "warten",
@@ -1054,7 +1043,7 @@
"NoCollections": "Keine Filme gefunden. Zum Starten solltest du einen Film hinzufügen oder vorhandene Importieren",
"RssSyncHelpText": "Intervall in Minuten. Zum deaktivieren auf 0 setzen ( Dies wird das automatische Release erfassen deaktivieren )",
"CollectionOptions": "Sammlung Optionen",
"ChooseImportMode": "Wähle eine Importmethode",
"ChooseImportMode": "Wählen Sie den Importmodus aus",
"CollectionsSelectedInterp": "{0} Ausgewählte Sammlung(en)",
"MovieCollectionMissingRoot": "Fehlender Stammordner für die Filmsammlung: {0}",
"EditCollection": "Sammlung bearbeiten",
@@ -1081,7 +1070,7 @@
"RottenTomatoesRating": "Tomato Bewertung",
"TotalMovies": "Filme insgesamt",
"ApplicationURL": "Anwendungs-URL",
"ApplicationUrlHelpText": "Die externe URL der Anwendung inklusive http(s)://, Port und URL-Basis",
"ApplicationUrlHelpText": "Die externe URL dieser Anwendung, einschließlich http(s)://, Port und URL-Basis",
"PreferredProtocol": "Bevorzugtes Protokoll",
"ResetDefinitions": "Definitionen zurücksetzen",
"ResetQualityDefinitions": "Qualitätsdefinitionen zurücksetzen",
@@ -1112,21 +1101,20 @@
"UpdateFiltered": "Gefilterte updaten",
"ThereWasAnErrorLoadingThisItem": "Beim Laden des Eintrags ist ein Fehler aufgetreten",
"ThereWasAnErrorLoadingThisPage": "Beim Laden der Seite ist ein Fehler aufgetreten",
"DeleteRemotePathMapping": "Entfernte Pfadzuordnung löschen",
"DeleteRemotePathMapping": "Remote-Pfad-Zuordnung löschen",
"NoHistoryBlocklist": "Keine Verlauf-Sperrliste",
"RemoveSelectedItemQueueMessageText": "Bist du sicher, dass du ein Eintrag aus der Warteschlange entfernen willst?",
"RemoveSelectedItemsQueueMessageText": "Bist du sicher, dass du {0} Einträge aus der Warteschlange entfernen willst?",
"ResetDefinitionTitlesHelpText": "Definitionstitel und Werte zurücksetzen",
"RemoveSelectedItemsQueueMessageText": "Bist du sicher, dass du {selectedCount} Einträge aus der Warteschlange entfernen willst?",
"ResetDefinitionTitlesHelpText": "Definitionstitel und -werte zurücksetzen",
"DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{0}' löschen willst?",
"DeleteCustomFormatMessageText": "Bist du sicher, dass du das eigene Format '{customFormatName}' löschen willst?",
"DeleteDelayProfileMessageText": "Bist du sicher, dass du dieses Verzögerung-Profil löschen willst?",
"DeleteDelayProfileMessageText": "Sind Sie sicher, dass Sie dieses Verzögerungsprofil löschen möchten?",
"DeleteFormatMessageText": "Bist du sicher, dass du das Formatierungstag {0} löschen willst?",
"DeleteImportListExclusionMessageText": "Bist du sicher, dass du diesen Importlisten Ausschluss löschen willst?",
"ResetAPIKeyMessageText": "Bist du sicher, dass du den API-Schlüssel zurücksetzen willst?",
"DeleteRemotePathMappingMessageText": "Bist du sicher, dass du das diese entfernte Pfadzuordnung löschen willst?",
"ResetAPIKeyMessageText": "Sind Sie sicher, dass Sie Ihren API-Schlüssel zurücksetzen möchten?",
"DeleteRemotePathMappingMessageText": "Sind Sie sicher, dass Sie diese Remote-Pfadzuordnung löschen möchten?",
"CloneCondition": "Bedingung klonen",
"DeleteCondition": "Bedingung löschen",
"ResetQualityDefinitionsMessageText": "Bist du sicher, dass du die Qualitätsdefinitionen zurücksetzen willst?",
"ResetQualityDefinitionsMessageText": "Sind Sie sicher, dass Sie Qualitätsdefinitionen zurücksetzen möchten?",
"Complete": "Vollständig",
"ListWillRefreshEveryInterp": "Liste wird alle [0] aktualisiert",
"ListRefreshInterval": "Listen Aktualisierungsintervall",
@@ -1148,37 +1136,37 @@
"NoDownloadClientsFound": "Keine Download Clienten gefunden",
"NoImportListsFound": "Keine Einspiel-Listen gefunden",
"NoIndexersFound": "Keine Indexer gefunden",
"CountIndexersSelected": "{0} Indexer ausgewählt",
"ApplyTagsHelpTextAdd": "Hinzufügen: Füge neu Tags zu den existierenden Tags hinzu",
"ApplyTagsHelpTextRemove": "Entfernen: Eingegebene Tags entfernen",
"ApplyTagsHelpTextHowToApplyIndexers": "Wie werden Tags zu ausgewählten Indexern zugeteilt",
"ApplyTagsHelpTextReplace": "Ersetzen: Nur eingegebene Tags übernehmen und vorhandene entfernen( keine Tags eingeben um alle zu entfernen )",
"CountIndexersSelected": "{count} Indexer ausgewählt",
"ApplyTagsHelpTextAdd": "Hinzufügen: Fügen Sie die Tags der vorhandenen Tag-Liste hinzu",
"ApplyTagsHelpTextRemove": "Entfernen: Die eingegebenen Tags entfernen",
"ApplyTagsHelpTextHowToApplyIndexers": "So wenden Sie Tags auf die ausgewählten Indexer an",
"ApplyTagsHelpTextReplace": "Ersetzen: Ersetzen Sie die Tags durch die eingegebenen Tags (geben Sie keine Tags ein, um alle Tags zu löschen).",
"DeleteImportList": "Importliste löschen",
"DeleteImportListMessageText": "Liste '{0}' wirklich löschen?",
"DeleteQualityProfileMessageText": "Qualitätsprofil '{0}' wirklich löschen?",
"DeleteImportListMessageText": "Sind Sie sicher, dass Sie die Liste „{name}“ löschen möchten?",
"DeleteQualityProfileMessageText": "Sind Sie sicher, dass Sie das Qualitätsprofil „{name}“ löschen möchten?",
"RemoveQueueItemConfirmation": "Bist du sicher, dass du {0} Einträge aus der Warteschlange entfernen willst?",
"SkipRedownload": "Überspringe erneuten Download",
"MoveAutomatically": "Automatisch verschieben",
"AutoTaggingNegateHelpText": "Wenn aktiviert wird das eigene Format nicht angewendet solange diese {0} Bedingung zutrifft.",
"AutoTaggingRequiredHelpText": "Diese {0} Bedingungen müsen zutreffen damit das eigene Format zutrifft. Ansonsten reicht ein einzelner {1} Treffer.",
"DeleteAutoTagHelpText": "Tag '{0}' wirklich löschen?",
"DeleteSelectedDownloadClientsMessageText": "Indexer '{0}' wirklich löschen?",
"DeleteSelectedImportListsMessageText": "Indexer '{0}' wirklich löschen?",
"DeleteSelectedIndexersMessageText": "Indexer '{0}' wirklich löschen?",
"ApplyTagsHelpTextHowToApplyDownloadClients": "Wie werden Tags zu ausgewählten Filmen zugeteilt",
"ApplyTagsHelpTextHowToApplyImportLists": "Wie werden Tags zu ausgewählten Filmen zugeteilt",
"DeleteRootFolderMessageText": "Indexer '{0}' wirklich löschen?",
"DeleteAutoTagHelpText": "Sind Sie sicher, dass Sie das automatische Tag „{name}“ löschen möchten?",
"DeleteSelectedDownloadClientsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Download-Clients löschen möchten?",
"DeleteSelectedImportListsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Importliste(n) löschen möchten?",
"DeleteSelectedIndexersMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte(n) Indexer löschen möchten?",
"ApplyTagsHelpTextHowToApplyDownloadClients": "So wenden Sie Tags auf die ausgewählten Download-Clients an",
"ApplyTagsHelpTextHowToApplyImportLists": "So wenden Sie Tags auf die ausgewählten Importlisten an",
"DeleteRootFolderMessageText": "Sind Sie sicher, dass Sie den Stammordner „{path}“ löschen möchten?",
"DeleteRootFolder": "Stammordner löschen",
"AddConnection": "Verbindung hinzufügen",
"BypassDelayIfAboveCustomFormatScoreMinimumScore": "Minimum der eigenen Formate Bewertungspunkte",
"BypassDelayIfAboveCustomFormatScoreMinimumScore": "Mindestpunktzahl für benutzerdefiniertes Format",
"NotificationStatusAllClientHealthCheckMessage": "Wegen Fehlern sind keine Applikationen verfügbar",
"NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {notificationNames}",
"RemoveFromDownloadClientHelpTextWarning": "Dies wird den Download und alle bereits heruntergeladenen Dateien aus dem Downloader entfernen.",
"RemoveFromDownloadClientHelpTextWarning": "Durch das Entfernen werden der Download und die Datei(en) vom Download-Client entfernt.",
"DownloadClientsLoadError": "Downloader konnten nicht geladen werden",
"IMDbId": "TMDb ID",
"DisabledForLocalAddresses": "Für Lokale Adressen deaktivieren",
"DisabledForLocalAddresses": "Für lokale Adressen deaktiviert",
"AddCondition": "Bedingung hinzufügen",
"AddAutoTag": "Automatisches Tag hinzufügen",
"AddAutoTag": "Automatischen Tag hinzufügen",
"AppUpdated": "{appName} aktualisiert",
"AddConditionImplementation": "Bedingung hinzufügen - {implementationName}",
"AddImportList": "Importliste hinzufügen",
@@ -1189,5 +1177,51 @@
"AddConnectionImplementation": "Verbindung hinzufügen - {implementationName}",
"AddDownloadClientImplementation": "Download-Client hinzufügen - {implementationName}",
"AddIndexerImplementation": "Indexer hinzufügen - {implementationName}",
"AppUpdatedVersion": "{appName} wurde auf die Version `{version}` aktualisiert. Um die neusten Funktionen zu bekommen lade {appName} neu"
"AppUpdatedVersion": "{appName} wurde auf die Version `{version}` aktualisiert. Um die neusten Funktionen zu bekommen lade {appName} neu",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen",
"AllTitles": "Alle Titel",
"AuthenticationRequired": "Authentifizierung benötigt",
"AuthenticationRequiredHelpText": "Ändern, welche anfragen Authentifizierung benötigen. Ändere nichts wenn du dir nicht des Risikos bewusst bist.",
"AudioLanguages": "Audio Sprachen",
"AuthenticationMethodHelpTextWarning": "Bitte wähle eine gültige Authentifizierungsmethode aus",
"AuthenticationRequiredPasswordHelpTextWarning": "Gib ein neues Passwort ein",
"AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein",
"AuthenticationRequiredWarning": "Um unberechtigte Fernzugriffe zu vermeiden benötigt {appName} jetzt , dass Authentifizierung eingeschaltet ist. Du kannst Authentifizierung optional für lokale Adressen ausschalten.",
"AutoRedownloadFailed": "Erneuter Download fehlgeschlagen",
"AutoRedownloadFailedFromInteractiveSearch": "Erneuter Download aus Interaktiver Suche fehlgeschlagen",
"AutomaticUpdatesDisabledDocker": "Automatische Updates werden bei Verwendung des Docker-Update-Mechanismus nicht direkt unterstützt. Sie müssen das Container-Image außerhalb von {appName} aktualisieren oder ein Skript verwenden",
"BypassDelayIfAboveCustomFormatScoreHelpText": "Aktivieren Sie die Umgehung, wenn die Veröffentlichung einen Wert hat, der höher ist als der konfigurierte Mindestwert für das benutzerdefinierte Format",
"BypassDelayIfAboveCustomFormatScoreMinimumScoreHelpText": "Mindestwert für benutzerdefiniertes Format, der erforderlich ist, um Verzögerungen für das bevorzugte Protokoll zu umgehen",
"ClearBlocklistMessageText": "Sind Sie sicher, dass Sie alle Elemente aus der Sperrliste löschen möchten?",
"ConnectionLostReconnect": "{appName} wird versuchen, automatisch eine Verbindung herzustellen, oder Sie können unten auf „Neu laden“ klicken.",
"ConnectionLostToBackend": "{appName} hat die Verbindung zum Backend verloren und muss neu geladen werden, um die Funktionalität wiederherzustellen.",
"CountImportListsSelected": "{count} Importliste(n) ausgewählt",
"CustomFormatJson": "Benutzerdefiniertes JSON-Format",
"DefaultNameCopiedProfile": "{Name} Kopieren",
"DelayingDownloadUntil": "Download wird bis zum {Datum} um {Uhrzeit} verzögert",
"DeleteAutoTag": "Auto-Tag löschen",
"DeletedReasonManual": "Die Datei wurde über die Benutzeroberfläche gelöscht",
"DeletedReasonUpgrade": "Die Datei wurde gelöscht, um ein Upgrade zu importieren",
"RemoveTagsAutomatically": "Tags automatisch entfernen",
"RetryingDownloadOn": "Erneuter Downloadversuch am {Datum} um {Uhrzeit}",
"SetReleaseGroupModalTitle": "{modalTitle} Release-Gruppe festlegen",
"UpdaterLogFiles": "Updater-Protokolldateien",
"Default": "Standard",
"Rejections": "Ablehnungen",
"SelectLanguageModalTitle": "{modalTitle} - Sprache auswählen",
"SelectFolderModalTitle": "{modalTitle} Ordner auswählen",
"TestParsing": "Parsing testen",
"UnableToLoadAutoTagging": "Automatisches Tagging konnte nicht geladen werden",
"BlocklistLoadError": "Sperrliste konnte nicht geladen werden",
"BypassDelayIfAboveCustomFormatScore": "Umgehen, wenn über dem Wert des benutzerdefinierten Formats liegt",
"AutoTagging": "Automatisches Tagging",
"RemoveTagsAutomaticallyHelpText": "Entfernen Sie Tags automatisch, wenn die Bedingungen nicht erfüllt sind",
"SelectDropdown": "Auswählen...",
"SelectDownloadClientModalTitle": "{modalTitle} Wähle Download-Client",
"Umask": "Umask",
"True": "WAHR",
"AuthenticationMethod": "Authentifizierungsmethode",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Suchen Sie automatisch nach einer anderen Version und versuchen Sie, sie herunterzuladen, wenn eine fehlerhafte Version aus der interaktiven Suche ausgewählt wurde",
"DefaultNameCopiedSpecification": "{Name} Kopieren",
"CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt"
}

View File

@@ -982,7 +982,6 @@
"Download": "Κατεβάστε",
"DownloadClientCheckDownloadingToRoot": "Λήψη προγράμματος-πελάτη {downloadClientName} τοποθετεί λήψεις στον ριζικό φάκελο {path}. Δεν πρέπει να κάνετε λήψη σε έναν ριζικό φάκελο.",
"DeleteFileLabel": "Διαγραφή {0} Αρχείων ταινιών",
"UnableToAddRootFolder": "Δεν είναι δυνατή η φόρτωση ριζικών φακέλων",
"Blocklist": "Αποριφθέντα",
"BlocklistRelease": "Έκδοση μαύρης λίστας",
"RemoveFromBlocklist": "Κατάργηση από μαύρη λίστα",

View File

@@ -30,6 +30,7 @@
"AddRemotePathMapping": "Add Remote Path Mapping",
"AddRestriction": "Add Restriction",
"AddRootFolder": "Add Root Folder",
"AddRootFolderError": "Unable to add root folder",
"AddToDownloadQueue": "Add to download queue",
"Added": "Added",
"AddedToDownloadQueue": "Added to download queue",
@@ -317,6 +318,8 @@
"DownloadClientCheckDownloadingToRoot": "Download client {downloadClientName} places downloads in the root folder {path}. You should not download to a root folder.",
"DownloadClientCheckNoneAvailableMessage": "No download client is available",
"DownloadClientCheckUnableToCommunicateMessage": "Unable to communicate with {downloadClientName}. {errorMessage}",
"DownloadClientQbittorrentSettingsContentLayout": "Content Layout",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Whether to use qBittorrent's configured content layout, the original layout from the torrent or always create a subfolder (qBittorrent 4.3.2+)",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Download client {downloadClientName} is set to remove completed downloads. This can result in downloads being removed from your client before {1} can import them.",
"DownloadClientSettings": "Download Client Settings",
"DownloadClientSortingCheckMessage": "Download client {downloadClientName} has {sortingMode} sorting enabled for {appName}'s category. You should disable sorting in your download client to avoid import issues.",
@@ -608,6 +611,7 @@
"MaintenanceRelease": "Maintenance Release: bug fixes and other improvements. See Github Commit History for more details",
"ManageClients": "Manage Clients",
"ManageDownloadClients": "Manage Download Clients",
"ManageFiles": "Manage Files",
"ManageImportLists": "Manage Import Lists",
"ManageIndexers": "Manage Indexers",
"ManageLists": "Manage Lists",
@@ -767,6 +771,176 @@
"NotificationStatusSingleClientHealthCheckMessage": "Notifications unavailable due to failures: {notificationNames}",
"NotificationTriggers": "Notification Triggers",
"NotificationTriggersHelpText": "Select which events should trigger this notification",
"NotificationsAppriseSettingsConfigurationKey": "Apprise Configuration Key",
"NotificationsAppriseSettingsConfigurationKeyHelpText": "Configuration Key for the Persistent Storage Solution. Leave empty if Stateless URLs is used.",
"NotificationsAppriseSettingsNotificationType": "Apprise Notification Type",
"NotificationsAppriseSettingsPasswordHelpText": "HTTP Basic Auth Password",
"NotificationsAppriseSettingsServerUrl": "Apprise Server URL",
"NotificationsAppriseSettingsServerUrlHelpText": "Apprise server URL, including http(s):// and port if needed",
"NotificationsAppriseSettingsStatelessUrls": "Apprise Stateless URLs",
"NotificationsAppriseSettingsStatelessUrlsHelpText": "One or more URLs separated by commas identifying where the notification should be sent to. Leave empty if Persistent Storage is used.",
"NotificationsAppriseSettingsTags": "Apprise Tags",
"NotificationsAppriseSettingsTagsHelpText": "Optionally notify only those tagged accordingly.",
"NotificationsAppriseSettingsUsernameHelpText": "HTTP Basic Auth Username",
"NotificationsCustomScriptSettingsArguments": "Arguments",
"NotificationsCustomScriptSettingsArgumentsHelpText": "Arguments to pass to the script",
"NotificationsCustomScriptSettingsName": "Custom Script",
"NotificationsCustomScriptSettingsProviderMessage": "Testing will execute the script with the EventType set to {eventTypeTest}, ensure your script handles this correctly",
"NotificationsCustomScriptValidationFileDoesNotExist": "File does not exist",
"NotificationsDiscordSettingsAuthor": "Author",
"NotificationsDiscordSettingsAuthorHelpText": "Override the embed author that shows for this notification. Blank is instance name",
"NotificationsDiscordSettingsAvatar": "Avatar",
"NotificationsDiscordSettingsAvatarHelpText": "Change the avatar that is used for messages from this integration",
"NotificationsDiscordSettingsOnGrabFields": "On Grab Fields",
"NotificationsDiscordSettingsOnGrabFieldsHelpText": "Change the fields that are passed in for this 'on grab' notification",
"NotificationsDiscordSettingsOnImportFields": "On Import Fields",
"NotificationsDiscordSettingsOnImportFieldsHelpText": "Change the fields that are passed in for this 'on import' notification",
"NotificationsDiscordSettingsOnManualInteractionFields": "On Manual Interaction Fields",
"NotificationsDiscordSettingsOnManualInteractionFieldsHelpText": "Change the fields that are passed in for this 'on manual interation' notification",
"NotificationsDiscordSettingsUsernameHelpText": "The username to post as, defaults to Discord webhook default",
"NotificationsDiscordSettingsWebhookUrlHelpText": "Discord channel webhook url",
"NotificationsEmailSettingsBccAddress": "BCC Address(es)",
"NotificationsEmailSettingsBccAddressHelpText": "Comma separated list of email bcc recipients",
"NotificationsEmailSettingsCcAddress": "CC Address(es)",
"NotificationsEmailSettingsCcAddressHelpText": "Comma separated list of email cc recipients",
"NotificationsEmailSettingsFromAddress": "From Address",
"NotificationsEmailSettingsName": "Email",
"NotificationsEmailSettingsRecipientAddress": "Recipient Address(es)",
"NotificationsEmailSettingsRecipientAddressHelpText": "Comma separated list of email recipients",
"NotificationsEmailSettingsRequireEncryption": "Require Encryption",
"NotificationsEmailSettingsRequireEncryptionHelpText": "Require SSL (Port 465 only) or StartTLS (any other port)",
"NotificationsEmailSettingsServer": "Server",
"NotificationsEmailSettingsServerHelpText": "Hostname or IP of Email server",
"NotificationsEmbySettingsSendNotifications": "Send Notifications",
"NotificationsEmbySettingsSendNotificationsHelpText": "Have MediaBrowser send notifications to configured providers",
"NotificationsEmbySettingsUpdateLibraryHelpText": "Update Library on Import, Rename, or Delete?",
"NotificationsGotifySettingIncludeMoviePoster": "Include Movie Poster",
"NotificationsGotifySettingIncludeMoviePosterHelpText": "Include movie poster in message",
"NotificationsGotifySettingsAppToken": "App Token",
"NotificationsGotifySettingsAppTokenHelpText": "The Application Token generated by Gotify",
"NotificationsGotifySettingsPriorityHelpText": "Priority of the notification",
"NotificationsGotifySettingsServer": "Gotify Server",
"NotificationsGotifySettingsServerHelpText": "Gotify server URL, including http(s):// and port if needed",
"NotificationsJoinSettingsApiKeyHelpText": "The API Key from your Join account settings (click Join API button).",
"NotificationsJoinSettingsDeviceIds": "Device IDs",
"NotificationsJoinSettingsDeviceIdsHelpText": "Deprecated, use Device Names instead. Comma separated list of Device IDs you'd like to send notifications to. If unset, all devices will receive notifications.",
"NotificationsJoinSettingsDeviceNames": "Device Names",
"NotificationsJoinSettingsDeviceNamesHelpText": "Comma separated list of full or partial device names you'd like to send notifications to. If unset, all devices will receive notifications.",
"NotificationsJoinSettingsNotificationPriority": "Notification Priority",
"NotificationsJoinValidationInvalidDeviceId": "Device IDs appear invalid.",
"NotificationsKodiSettingAlwaysUpdate": "Always Update",
"NotificationsKodiSettingAlwaysUpdateHelpText": "Update library even when a video is playing?",
"NotificationsKodiSettingsCleanLibrary": "Clean Library",
"NotificationsKodiSettingsCleanLibraryHelpText": "Clean library after update",
"NotificationsKodiSettingsDisplayTime": "Display Time",
"NotificationsKodiSettingsDisplayTimeHelpText": "How long the notification will be displayed for (In seconds)",
"NotificationsKodiSettingsGuiNotification": "GUI Notification",
"NotificationsKodiSettingsUpdateLibraryHelpText": "Update library on Import & Rename?",
"NotificationsMailgunSettingsApiKeyHelpText": "The API key generated from MailGun",
"NotificationsMailgunSettingsSenderDomain": "Sender Domain",
"NotificationsMailgunSettingsUseEuEndpoint": "Use EU Endpoint",
"NotificationsMailgunSettingsUseEuEndpointHelpText": "Enable to use the EU MailGun endpoint",
"NotificationsNotifiarrSettingsApiKeyHelpText": "Your API key from your profile",
"NotificationsNtfySettingsAccessToken": "Access Token",
"NotificationsNtfySettingsAccessTokenHelpText": "Optional token-based authorization. Takes priority over username/password",
"NotificationsNtfySettingsClickUrl": "Click Url",
"NotificationsNtfySettingsClickUrlHelpText": "Optional link when user clicks notification",
"NotificationsNtfySettingsPasswordHelpText": "Optional password",
"NotificationsNtfySettingsServerUrl": "Server URL",
"NotificationsNtfySettingsServerUrlHelpText": "Leave blank to use public server ({url})",
"NotificationsNtfySettingsTagsEmojis": "Ntfy Tags and Emojis",
"NotificationsNtfySettingsTagsEmojisHelpText": "Optional list of tags or emojis to use",
"NotificationsNtfySettingsTopics": "Topics",
"NotificationsNtfySettingsTopicsHelpText": "List of Topics to send notifications to",
"NotificationsNtfySettingsUsernameHelpText": "Optional username",
"NotificationsNtfyValidationAuthorizationRequired": "Authorization is required",
"NotificationsPlexSettingsAuthToken": "Auth Token",
"NotificationsPlexSettingsAuthenticateWithPlexTv": "Authenticate with Plex.tv",
"NotificationsPlexValidationNoMovieLibraryFound": "At least one Movie library is required",
"NotificationsPushBulletSettingSenderId": "Sender ID",
"NotificationsPushBulletSettingSenderIdHelpText": "The device ID to send notifications from, use device_iden in the device's URL on pushbullet.com (leave blank to send from yourself)",
"NotificationsPushBulletSettingsAccessToken": "Access Token",
"NotificationsPushBulletSettingsChannelTags": "Channel Tags",
"NotificationsPushBulletSettingsChannelTagsHelpText": "List of Channel Tags to send notifications to",
"NotificationsPushBulletSettingsDeviceIds": "Device IDs",
"NotificationsPushBulletSettingsDeviceIdsHelpText": "List of device IDs (leave blank to send to all devices)",
"NotificationsPushcutSettingsApiKeyHelpText": "API Keys can be managed in the Account view of the Pushcut app",
"NotificationsPushcutSettingsNotificationName": "Notification Name",
"NotificationsPushcutSettingsNotificationNameHelpText": "Notification name from Notifications tab of the Pushcut app",
"NotificationsPushcutSettingsTimeSensitive": "Time Sensitive",
"NotificationsPushcutSettingsTimeSensitiveHelpText": "Enable to mark the notification as \"Time Sensitive\"",
"NotificationsPushoverSettingsDevices": "Devices",
"NotificationsPushoverSettingsDevicesHelpText": "List of device names (leave blank to send to all devices)",
"NotificationsPushoverSettingsExpire": "Expire",
"NotificationsPushoverSettingsExpireHelpText": "Maximum time to retry Emergency alerts, maximum 86400 seconds\"",
"NotificationsPushoverSettingsRetry": "Retry",
"NotificationsPushoverSettingsRetryHelpText": "Interval to retry Emergency alerts, minimum 30 seconds",
"NotificationsPushoverSettingsSound": "Sound",
"NotificationsPushoverSettingsSoundHelpText": "Notification sound, leave blank to use the default",
"NotificationsPushoverSettingsUserKey": "User Key",
"NotificationsSendGridSettingsApiKeyHelpText": "The API Key generated by SendGrid",
"NotificationsSettingsUpdateLibrary": "Update Library",
"NotificationsSettingsUpdateMapPathsFrom": "Map Paths From",
"NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} path, used to modify series paths when {serviceName} sees library path location differently from {appName} (Requires 'Update Library')",
"NotificationsSettingsUpdateMapPathsTo": "Map Paths To",
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName} path, used to modify series paths when {serviceName} sees library path location differently from {appName} (Requires 'Update Library')",
"NotificationsSettingsUseSslHelpText": "Connect to {serviceName} over HTTPS instead of HTTP",
"NotificationsSettingsWebhookMethod": "Method",
"NotificationsSettingsWebhookMethodHelpText": "Which HTTP method to use submit to the Webservice",
"NotificationsSettingsWebhookUrl": "Webhook URL",
"NotificationsSignalSettingsGroupIdPhoneNumber": "Group ID / Phone Number",
"NotificationsSignalSettingsGroupIdPhoneNumberHelpText": "Group ID / Phone Number of the receiver",
"NotificationsSignalSettingsPasswordHelpText": "Password used to authenticate requests toward signal-api",
"NotificationsSignalSettingsSenderNumber": "Sender Number",
"NotificationsSignalSettingsSenderNumberHelpText": "Phone number of the sender register in signal-api",
"NotificationsSignalSettingsUsernameHelpText": "Username used to authenticate requests toward signal-api",
"NotificationsSignalValidationSslRequired": "SSL seems to be required",
"NotificationsSimplepushSettingsEvent": "Event",
"NotificationsSimplepushSettingsEventHelpText": "Customize the behavior of push notifications",
"NotificationsSimplepushSettingsKey": "Key",
"NotificationsSlackSettingsChannel": "Channel",
"NotificationsSlackSettingsChannelHelpText": "Overrides the default channel for the incoming webhook (#other-channel)",
"NotificationsSlackSettingsIcon": "Icon",
"NotificationsSlackSettingsIconHelpText": "Change the icon that is used for messages posted to Slack (Emoji or URL)",
"NotificationsSlackSettingsUsernameHelpText": "Username to post to Slack as",
"NotificationsSlackSettingsWebhookUrlHelpText": "Slack channel webhook url",
"NotificationsSynologySettingsUpdateLibraryHelpText": "Call synoindex on localhost to update a library file",
"NotificationsSynologyValidationInvalidOs": "Must be a Synology",
"NotificationsSynologyValidationTestFailed": "Not a Synology or synoindex not available",
"NotificationsTelegramSettingsBotToken": "Bot Token",
"NotificationsTelegramSettingsChatId": "Chat ID",
"NotificationsTelegramSettingsChatIdHelpText": "You must start a conversation with the bot or add it to your group to receive messages",
"NotificationsTelegramSettingsSendSilently": "Send Silently",
"NotificationsTelegramSettingsSendSilentlyHelpText": "Sends the message silently. Users will receive a notification with no sound",
"NotificationsTelegramSettingsTopicId": "Topic ID",
"NotificationsTelegramSettingsTopicIdHelpText": "Specify a Topic ID to send notifications to that topic. Leave blank to use the general topic (Supergroups only)",
"NotificationsTraktSettingsAccessToken": "Access Token",
"NotificationsTraktSettingsAuthUser": "Auth User",
"NotificationsTraktSettingsAuthenticateWithTrakt": "Authenticate with Trakt",
"NotificationsTraktSettingsExpires": "Expires",
"NotificationsTraktSettingsRefreshToken": "Refresh Token",
"NotificationsTwitterSettingsAccessToken": "Access Token",
"NotificationsTwitterSettingsAccessTokenSecret": "Access Token Secret",
"NotificationsTwitterSettingsConnectToTwitter": "Connect to Twitter / X",
"NotificationsTwitterSettingsConsumerKey": "Consumer Key",
"NotificationsTwitterSettingsConsumerKeyHelpText": "Consumer key from a Twitter application",
"NotificationsTwitterSettingsConsumerSecret": "Consumer Secret",
"NotificationsTwitterSettingsConsumerSecretHelpText": "Consumer secret from a Twitter application",
"NotificationsTwitterSettingsDirectMessage": "Direct Message",
"NotificationsTwitterSettingsDirectMessageHelpText": "Send a direct message instead of a public message",
"NotificationsTwitterSettingsMention": "Mention",
"NotificationsTwitterSettingsMentionHelpText": "Mention this user in sent tweets",
"NotificationsValidationInvalidAccessToken": "Access Token is invalid",
"NotificationsValidationInvalidApiKey": "API Key is invalid",
"NotificationsValidationInvalidApiKeyExceptionMessage": "API Key is invalid: {exceptionMessage}",
"NotificationsValidationInvalidAuthenticationToken": "Authentication Token is invalid",
"NotificationsValidationInvalidHttpCredentials": "HTTP Auth credentials are invalid: {exceptionMessage}",
"NotificationsValidationInvalidUsernamePassword": "Invalid username or password",
"NotificationsValidationUnableToConnect": "Unable to connect: {exceptionMessage}",
"NotificationsValidationUnableToConnectToApi": "Unable to connect to {service} API. Server connection failed: ({responseCode}) {exceptionMessage}",
"NotificationsValidationUnableToConnectToService": "Unable to connect to {serviceName}",
"NotificationsValidationUnableToSendTestMessage": "Unable to send test message: {exceptionMessage}",
"NotificationsValidationUnableToSendTestMessageApiResponse": "Unable to send test message. Response from API: {error}",
"OAuthPopupMessage": "Pop-ups are being blocked by your browser",
"Ok": "Ok",
"OnApplicationUpdate": "On Application Update",
@@ -1065,6 +1239,7 @@
"SearchForMovie": "Search for movie",
"SearchMissing": "Search Missing",
"SearchMovie": "Search Movie",
"SearchMoviesConfirmationMessageText": "Are you sure you want to run a search for {count} movie(s)?",
"SearchOnAdd": "Search on Add",
"SearchOnAddCollectionHelpText": "Search for movies on this collection when added to library",
"SearchOnAddHelpText": "Search for movies on this list when added to library",
@@ -1253,7 +1428,6 @@
"UnableToAddANewNotificationPleaseTryAgain": "Unable to add a new notification, please try again.",
"UnableToAddANewQualityProfilePleaseTryAgain": "Unable to add a new quality profile, please try again.",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Unable to add a new remote path mapping, please try again.",
"UnableToAddRootFolder": "Unable to add root folder",
"UnableToLoadAltTitle": "Unable to load alternative titles.",
"UnableToLoadAutoTagging": "Unable to load auto tagging",
"UnableToLoadCollections": "Unable to load collections",

View File

@@ -28,7 +28,7 @@
"DownloadClientStatusCheckSingleClientMessage": "Gestores de descargas no disponibles debido a errores: {downloadClientNames}",
"DownloadClientStatusCheckAllClientMessage": "Los gestores de descargas no están disponibles debido a errores",
"DownloadClients": "Gestores de Descargas",
"DownloadClientCheckUnableToCommunicateMessage": "Incapaz de comunicarse con {downloadClientName}.",
"DownloadClientCheckUnableToCommunicateMessage": "Incapaz de comunicarse con {downloadClientName}. {errorMessage}",
"DownloadClientCheckNoneAvailableMessage": "Ningún gestor de descargas disponible",
"DiskSpace": "Espacio en Disco",
"Discover": "Descubrir",
@@ -37,7 +37,7 @@
"Day": "Día",
"Dates": "Fechas",
"Date": "Fecha",
"CustomFormats": "Formatos Personalizados",
"CustomFormats": "Formatos personalizados",
"CustomFilters": "Filtros Personalizados",
"Crew": "Equipo",
"Connections": "Conexiones",
@@ -195,7 +195,7 @@
"Details": "Detalles",
"Deleted": "Eliminado",
"CutoffUnmet": "Corte No Alcanzado",
"CustomFormatsSettingsSummary": "Formatos Personalizados y Ajustes",
"CustomFormatsSettingsSummary": "Formatos y configuraciones personalizados",
"ConnectSettingsSummary": "Notificaciones, conexiones a servidores/reproductores y scripts personalizados",
"Collection": "Colección",
"Certification": "Certificación",
@@ -578,7 +578,7 @@
"EnableAutomaticAdd": "Habilitar Añadido Automático",
"EnableAutoHelpText": "Si se habilita, las Películas en esta lista se añadirán automáticamente a {appName}",
"CutoffFormatScoreHelpText": "Una la vez que la calidad objetivo es cumplida o excedida y esta puntuación de formato propio es alcanzada {appName} dejará de descargar o importar mejoras para estas películas",
"CustomFormatsSettings": "Ajustes de Formatos Propios",
"CustomFormatsSettings": "Configuración de formatos personalizados",
"CopyUsingHardlinksHelpTextWarning": "Ocasionalmente, los archivos bloqueados impiden renombrar los archivos que siguen seedeando. Puedes desactivar el seedeo temporalmete y usar la función de renombrado de Radarr como alternativa.",
"CopyUsingHardlinksHelpText": "Los Hardlinks permiten a {appName} importar torrents que siguen seedeando a la carpeta de películas sin ocupar espacio extra en el disco o copiando los contenidos al completo del archivo. Los Hardlinks solo funcionarán si el orígen y destino se encuentran en el mismo volumen",
"ConnectSettings": "Conectar Ajustes",
@@ -632,15 +632,15 @@
"EnableInteractiveSearchHelpText": "Se usará cuando se utilice la búsqueda interactiva",
"EnableAutomaticSearchHelpText": "Se usará cuando las búsquedas automáticas se realicen desde el UI o por {appName}",
"EnableAutomaticSearchHelpTextWarning": "Se usará cuando se utilice la búsqueda interactiva",
"DownloadWarning": "Alerta de descarga: {0}",
"DownloadWarning": "Alerta de descarga: {warningMessage}",
"Downloading": "Descargando",
"DownloadFailed": "La descarga ha fallado",
"DownloadClientUnavailable": "El gestor de descargas no está disponible",
"DeleteTagMessageText": "¿Seguro que quieres eliminar la etiqueta '{label}'?",
"DeleteTagMessageText": "¿Está seguro de querer eliminar la etiqueta '{label}'?",
"DeleteRestrictionHelpText": "Seguro que quieres eliminar esta restricción?",
"DeleteNotificationMessageText": "¿Seguro que quieres eliminiar la notificación '{name}'?",
"DeleteNotificationMessageText": "¿Seguro que quieres eliminar la notificación '{name}'?",
"DeleteBackupMessageText": "Seguro que quieres eliminar la copia de seguridad '{name}'?",
"DeleteDownloadClientMessageText": "¿Seguro que quieres eliminar el cliente de descargas '{name}'?",
"DeleteDownloadClientMessageText": "Seguro que quieres eliminar el gestor de descargas '{name}'?",
"DeleteIndexerMessageText": "Seguro que quieres eliminar el indexer '{name}'?",
"Cutoff": "Requisito",
"ClickToChangeMovie": "Clic para cambiar película",
@@ -693,7 +693,7 @@
"MinutesSixty": "60 Minutos: {0}",
"MinutesNinety": "90 Minutos: {0}",
"MinutesHundredTwenty": "120 Minutos: {0}",
"MaintenanceRelease": "Lanzamiento de mantenimiento: arregla bugs y otras mejoras. Ve a Github Commit History para más detalles",
"MaintenanceRelease": "Lanzamiento de mantenimiento: Corrección de errores y otras mejoras. Ver historial de commits de Github para mas detalle",
"LoadingMovieFilesFailed": "La carga de los archivos ha fallado",
"LoadingMovieExtraFilesFailed": "La carga de los extras de la película ha fallado",
"LoadingMovieCreditsFailed": "La carga de los créditos de la película ha fallado",
@@ -979,7 +979,6 @@
"ImportListMissingRoot": "Falta la capeta raíz para las listas: {rootFolderInfo}",
"From": "de",
"BypassDelayIfHighestQuality": "Pasar sí es la calidad más alta",
"UnableToAddRootFolder": "No se han podido cargar las carpetas raiz",
"Blocklist": "Bloqueadas",
"BlocklistRelease": "Lista de lanzamientos bloqueados",
"RemoveFromBlocklist": "Eliminar de lista de bloqueados",
@@ -1070,7 +1069,7 @@
"UnableToLoadCollections": "No se han podido cargar las colecciones",
"MovieCollectionMissingRoot": "Carpeta raíz faltante para colección de películas: {0}",
"MovieOnly": "Solo Película",
"Database": "Base de Datos",
"Database": "Base de datos",
"File": "Archivo",
"ResetDefinitions": "Restablecer definiciones",
"ResetQualityDefinitions": "Restablecer definiciones de calidad",
@@ -1132,7 +1131,7 @@
"CloneCondition": "Clonar Condición",
"DeleteAutoTag": "Eliminar Etiquetado Automático",
"DeleteAutoTagHelpText": "¿Está seguro de querer eliminar el etiquetado automático '{name}'?",
"DeleteSelectedDownloadClientsMessageText": "¿Estas seguro que quieres eliminar {count} cliente(s) de descarga seleccionado(s)?",
"DeleteSelectedDownloadClientsMessageText": "¿Está seguro de querer eliminar {count} cliente(s) de descarga seleccionado(s)?",
"EditAutoTag": "Editar Etiquetado Automático",
"EditSelectedDownloadClients": "Editar Clientes de Descarga Seleccionados",
"EditSelectedIndexers": "Editar Indexadores Seleccionados",
@@ -1185,7 +1184,7 @@
"DeleteImportListMessageText": "Seguro que quieres eliminar la lista '{name}'?",
"DeleteSelectedImportListsMessageText": "Seguro que quieres eliminar {count} lista(s) de importación seleccionada(s)?",
"AppUpdatedVersion": "{appName} ha sido actualizado a la versión `{version}`, para obtener los cambios más recientes necesitará recargar {appName}",
"DeleteSelectedIndexersMessageText": "Seguro que quieres eliminar {count} indexer seleccionado(s)?",
"DeleteSelectedIndexersMessageText": "¿Está seguro de querer eliminar {count} indexador(es) seleccionado(s)?",
"DisabledForLocalAddresses": "Desactivado para direcciones locales",
"DeletedReasonManual": "El archivo fue borrado por vía UI",
"DeletedReasonMissingFromDisk": "{appName} no ha podido encontrar el archivo en el disco, por lo que se ha desvinculado de la película en la base de datos",
@@ -1204,5 +1203,33 @@
"CopyToClipboard": "Copiar al portapapeles",
"CloneCustomFormat": "Clonar formato personalizado",
"CloneProfile": "Clonar Perfil",
"Close": "Cerrar"
"Close": "Cerrar",
"DownloadClientsLoadError": "No se puden cargar los gestores de descargas",
"EditConnectionImplementation": "Editar notificación - {implementationName}",
"EditImportListImplementation": "Añadir lista de importación - {implementationName}",
"EditIndexerImplementation": "Editar indexador - {implementationName}",
"FormatShortTimeSpanHours": "{hours} hora(s)",
"FormatShortTimeSpanMinutes": "{minutes} minuto(s)",
"FormatShortTimeSpanSeconds": "{seconds} segundo(s)",
"FormatTimeSpanDays": "{days}d {time}",
"EditDownloadClientImplementation": "Añadir Cliente de Descarga - {implementationName}",
"EnableProfile": "Habilitar perfil",
"FormatAgeDay": "día",
"FormatAgeHour": "hora",
"FormatAgeHours": "horas",
"FormatAgeMinute": "minuto",
"FormatAgeMinutes": "minutos",
"FormatRuntimeHours": "{hours}h",
"FormatRuntimeMinutes": "{minutes}m",
"FormatDateTimeRelative": "{relativeDay}, {formattedDate} {formattedTime}",
"FormatDateTime": "{formattedDate} {formattedTime}",
"UnknownEventTooltip": "Evento desconocído",
"FormatAgeDays": "días",
"False": "Falso",
"DownloadIgnored": "Descarga ignorada",
"FailedToFetchUpdates": "Fallo al buscar las actualizaciones",
"FailedToUpdateSettings": "Fallo al actualizar los ajustes",
"EditConditionImplementation": "Editar Condición - {implementationName}",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El cliente de descarga {downloadClientName} esta configurado para eliminar las descargas completadas. Esto puede causar que las descargas sean eliminadas del cliente antes que {1} las pueda importar.",
"AddRootFolderError": "No se puede agregar la carpeta raíz"
}

View File

@@ -982,7 +982,6 @@
"Download": "Lataa",
"DownloadClientCheckDownloadingToRoot": "Lataustyökalu '{downloadClientName}' sijoittaa lataukset juurikansioon '{path}' ja näin ei pitäisi tehdä, vaan lataukset tulee tallentaa erilliseen sijaintiin.",
"DeleteFileLabel": "Poista {0} elokuvatiedosto",
"UnableToAddRootFolder": "Juurikansioiden lataus epäonnistui.",
"Blocklist": "Estolista",
"BlocklistRelease": "Lisää julkaisu estolistalle",
"RemoveFromBlocklist": "Poista estolistalta",

View File

@@ -1,17 +1,17 @@
{
"IndexerStatusCheckAllClientMessage": "Tous les indexeurs sont indisponibles en raison d'échecs",
"IndexerSearchCheckNoInteractiveMessage": "Aucun indexeur disponible avec la recherche interactive activée, {appName} ne fournira aucun résultat de recherche interactive",
"IndexerSearchCheckNoInteractiveMessage": "Aucun indexeur disponible avec la recherche interactive activée, {appName} ne fournira aucun résultat de recherche interactif",
"IndexerSearchCheckNoAvailableIndexersMessage": "Tous les indexeurs compatibles avec la recherche sont temporairement indisponibles en raison d'erreurs d'indexation récentes",
"IndexerSearchCheckNoAutomaticMessage": "Aucun indexeur disponible avec la recherche automatique activée, {appName} ne fournira aucun résultat de recherche automatique",
"Indexers": "Indexeurs",
"ImportTipsMessage": "Quelques conseils pour assurer le bon déroulement de l'importation :",
"ImportMechanismHealthCheckMessage": "Activer la gestion des téléchargements terminés",
"ImportHeader": "Importez une bibliothèque organisée existante pour ajouter des films à {appName}",
"ImportHeader": "Importer une bibliothèque organisée existante pour ajouter des films à {appName}",
"Import": "Importer",
"iCalLink": "Lien iCal",
"Host": "Hôte",
"History": "Historique",
"HideAdvanced": "Masquer param. av.",
"HideAdvanced": "Masquer les Options Avancées",
"Health": "Santé",
"GrabSelected": "Saisir la sélection",
"General": "Général",
@@ -55,13 +55,13 @@
"AddNewMessage": "C'est facile d'ajouter un nouveau film, vous n'avez juste qu'à saisir le nom du film que vous voulez ajouter",
"AddMovies": "Ajouter des films",
"AddExclusion": "Ajouter une exclusion",
"AddNew": "Ajouter une nouvelle",
"AddNew": "Ajouter",
"Activity": "Activité",
"About": "À propos",
"CustomFormatsSettingsSummary": "Paramètres de formats personnalisés",
"IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs : {indexerNames}",
"DownloadClientStatusCheckSingleClientMessage": "Clients de Téléchargement indisponibles en raison d'échecs: {downloadClientNames}",
"SetTags": "Définir des balises",
"SetTags": "Définir des étiquettes",
"ReleaseTitle": "Titre de la version",
"ReleaseStatus": "Statut de la version",
"ReleaseGroup": "Groupe de versions",
@@ -71,7 +71,7 @@
"UnselectAll": "Tout désélectionner",
"Unmonitored": "Non surveillé",
"UISettingsSummary": "Calendrier, date et les options d'altération des couleurs",
"TagsSettingsSummary": "Voir toutes les balises et comment elles sont utilisées. Les balises inutilisées peuvent être supprimées",
"TagsSettingsSummary": "Voir toutes les étiquettes et comment elles sont utilisées. Les étiquettes inutilisées peuvent être supprimées",
"Style": "Style",
"Studio": "Studio",
"Status": "État",
@@ -99,7 +99,7 @@
"Restrictions": "Restrictions",
"RestoreBackup": "Restaurer la sauvegarde",
"RenameFiles": "Renommer les fichiers",
"Renamed": "Renommer",
"Renamed": "Renommé",
"RemoveSelected": "Enlever la sélection",
"RemovedMovieCheckSingleMessage": "Le film {movie} a été supprimé de TMDb",
"RemovedMovieCheckMultipleMessage": "Les films {movies} ont été supprimés de TMDb",
@@ -141,7 +141,7 @@
"MountCheckMessage": "Le montage contenant un chemin de film est monté en lecture seule: ",
"MoreInfo": "Plus d'informations",
"Month": "Mois",
"ListsSettingsSummary": "Importer listes, listes d'exclusions",
"ListsSettingsSummary": "Importer des Listes, exclure des listes",
"ListExclusions": "Liste des exclusions",
"IndexersSettingsSummary": "Indexeurs et restrictions de version",
"Grabbed": "Saisie",
@@ -235,7 +235,7 @@
"RejectionCount": "Nombre de rejets",
"Peers": "Peers",
"Organize": "Organiser",
"Ok": "Ok",
"Ok": "OK",
"OAuthPopupMessage": "Les pop-ups sont bloquées par votre navigateur",
"Name": "Nom",
"MoveFiles": "Déplacer des fichiers",
@@ -248,7 +248,7 @@
"NoIssuesWithYourConfiguration": "Aucun problème avec votre configuration",
"HardlinkCopyFiles": "Lien physique/Copie de fichiers",
"Extension": "Extension",
"CustomFormatScore": "Partition au format personnalisé",
"CustomFormatScore": "Score du format personnalisé",
"SystemTimeCheckMessage": "L'heure du système est décalée de plus d'un jour. Les tâches planifiées peuvent ne pas s'exécuter correctement tant que l'heure ne sera pas corrigée",
"ShowMonitored": "Afficher le chemin",
"SettingsWeekColumnHeaderHelpText": "Affiché au dessus de chaque colonne quand \"Semaine\" est l'affichage actif",
@@ -282,7 +282,7 @@
"SearchMovie": "Rechercher le film",
"RecentFolders": "Dossiers récents",
"QuickImport": "Déplacer automatiquement",
"PosterSize": "Poster taille",
"PosterSize": "Taille des affiches",
"Posters": "Affiches",
"PosterOptions": "Poster options",
"PendingChangesStayReview": "Rester et vérifier les modifications",
@@ -415,7 +415,7 @@
"BranchUpdateMechanism": "Branche utilisée par le mécanisme de mise à jour extérieur",
"BranchUpdate": "Branche à utiliser pour mettre à jour {appName}",
"BeforeUpdate": "Avant la mise à jour",
"ApplyTagsHelpTextHowToApplyMovies": "Comment appliquer des tags au film sélectionné",
"ApplyTagsHelpTextHowToApplyMovies": "Comment appliquer des étiquettes aux films sélectionnés",
"DeleteDownloadClientMessageText": "Voulez-vous supprimer le client de téléchargement « {name} » ?",
"DeleteBackupMessageText": "Voulez-vous supprimer la sauvegarde « {name} » ?",
"ErrorLoadingContents": "Erreur lors du chargement du contenu",
@@ -543,15 +543,15 @@
"GrabReleaseMessageText": "{appName} n'a pas été en mesure de déterminer à quel film cette version était destinée. {appName} peut être incapable d'importer automatiquement cette version. Voulez-vous récupérer '{0}' ?",
"ExtraFileExtensionsHelpTexts1": "Liste séparée par des virgules des fichiers supplémentaires à importer (.nfo sera importé en tant que .nfo-orig)",
"YouCanAlsoSearch": "Vous pouvez également effectuer une recherche à l'aide de l'ID TMDb ou de l'ID IMDb d'un film. par exemple : `tmdb:71663`",
"WhitelistedSubtitleTags": "Balises de sous-titres sur liste blanche",
"WhitelistedHardcodedSubsHelpText": "Les balises de sous-titres définies ici ne seront pas considérées comme codées en dur",
"WhitelistedSubtitleTags": "Étiquettes de sous-titres sur liste blanche",
"WhitelistedHardcodedSubsHelpText": "Les étiquettes de sous-titres définies ici ne seront pas considérées comme codées en dur",
"WeekColumnHeader": "En-tête de colonne de la semaine",
"UsenetDelayHelpText": "Délai en minutes avant de récupérer une release de Usenet",
"Uptime": "Disponibilité",
"UpgradeUntilThisQualityIsMetOrExceeded": "Mise à niveau jusqu'à ce que cette qualité soit atteinte ou dépassée",
"UpgradeAllowedHelpText": "Si désactivé, les qualités ne seront pas améliorées",
"UpdateScriptPathHelpText": "Chemin d'accès à un script personnalisé qui prend un package de mise à jour extrait et gère le reste du processus de mise à jour",
"UpdateMechanismHelpText": "Utiliser le programme de mise à jour intégré de {appName} ou un script",
"UpdateMechanismHelpText": "Utilisez le programme de mise à jour intégré de {appName} ou un script",
"UpdateAutomaticallyHelpText": "Téléchargez et installez automatiquement les mises à jour. Vous pourrez toujours installer à partir du système : mises à jour",
"Unreleased": "Version non disponible",
"UnmonitoredHelpText": "Inclure les films non surveillés dans le flux iCal",
@@ -843,7 +843,7 @@
"Hours": "Heures",
"HomePage": "Page d'accueil",
"HttpHttps": "HTTP(S)",
"ImportLibrary": "Import bibliothèque",
"ImportLibrary": "Importer biblio.",
"MovieIsRecommend": "Le film est recommandé en fonction de l'ajout récent",
"NoAltTitle": "Pas de titres alternatifs.",
"NoLinks": "Aucun liens",
@@ -995,7 +995,6 @@
"TaskUserAgentTooltip": "Agent utilisateur fourni par l'application qui a appelé l'API",
"RemotePathMappingCheckFolderPermissions": "{appName} peut voir mais pas accéder au répertoire de téléchargement {path}. Erreur d'autorisations probable.",
"RemotePathMappingCheckFileRemoved": "Le fichier {path} a été supprimé pendant le processus.",
"UnableToAddRootFolder": "Impossible de charger le dossier racine",
"Blocklist": "Liste noire",
"BlocklistRelease": "Version sur liste noire",
"RemoveFromBlocklist": "Supprimer de la liste noire",
@@ -1034,7 +1033,7 @@
"OriginalLanguage": "Langue originale",
"Rating": "Notation",
"RemotePath": "Chemin distant",
"RemotePathMappingCheckFilesBadDockerPath": "Vous utilisez docker; {0} signifie les téléchargement dans {1} mais ce n'est pas un dossier valide. Vérifiez vos paramètres de dossier distant et les paramètres de votre client de téléchargement.",
"RemotePathMappingCheckFilesBadDockerPath": "Vous utilisez Docker ; le client de téléchargement {downloadClientName} a signalé des fichiers dans {path}, mais ce n'est pas un chemin valide pour {osName}. Vérifiez vos mappages de chemins distants et les paramètres de votre client de téléchargement.",
"RemotePathMappingCheckWrongOSPath": "Le client de téléchargement distant {downloadClientName} met les téléchargements dans {path} mais ce chemin {osName} est invalide. Vérifiez vos paramètres de chemins distants et les paramètres de votre client de téléchargement.",
"RemoveCompleted": "Supprimer terminé",
"Database": "Base de données",
@@ -1238,7 +1237,7 @@
"MovieImported": "Film importé",
"SelectDropdown": "Sélectionner...",
"SelectLanguageModalTitle": "{modalTitle} Sélectionner la langue",
"RemoveTagsAutomatically": "Supprimer les balises automatiquement",
"RemoveTagsAutomatically": "Supprimer automatiquement les étiquettes",
"TablePageSizeHelpText": "Nombre d'éléments à afficher sur chaque page",
"UnknownEventTooltip": "Événement inconnu",
"AppUpdated": "{appName} mis à jour",
@@ -1254,8 +1253,8 @@
"OrganizeLoadError": "Erreur lors du chargement des aperçus",
"EditImportListImplementation": "Modifier la liste d'importation - {implementationName}",
"EditIndexerImplementation": "Modifier l'indexeur - {implementationName}",
"MovieFileDeleted": "À la suppression d'un fichier vidéo",
"MovieFileDeletedTooltip": "À la suppression d'un fichier vidéo",
"MovieFileDeleted": "Fichier du film supprimé",
"MovieFileDeletedTooltip": "Fichier du film supprimé",
"BlocklistReleaseHelpText": "Empêche {appName} de récupérer automatiquement cette version",
"InteractiveImportLoadError": "Impossible de charger les éléments d'importation manuelle",
"MovieSearchResultsLoadError": "Impossible de charger les résultats de cette recherche de films. Réessayez plus tard",
@@ -1322,7 +1321,7 @@
"MovieGrabbedHistoryTooltip": "Film extrait de {indexer} et envoyé à {downloadClient}",
"RemoveQueueItem": "Supprimer {sourceTitle}",
"OverrideGrabModalTitle": "Remplacer et récupérer - {title}",
"RemoveTagsAutomaticallyHelpText": "Supprimez automatiquement les balises si les conditions ne sont pas remplies",
"RemoveTagsAutomaticallyHelpText": "Supprimez automatiquement les étiquettes si les conditions ne sont pas remplies",
"InfoUrl": "URL d'informations",
"ListRefreshInterval": "Intervalle d'actualisation de la liste",
"Parse": "Analyser",

View File

@@ -982,7 +982,6 @@
"Download": "הורד",
"DownloadClientCheckDownloadingToRoot": "הורד לקוח {downloadClientName} ממקם הורדות בתיקיית הבסיס {path}. אתה לא צריך להוריד לתיקיית שורש.",
"DeleteFileLabel": "מחק {0} קבצי סרט",
"UnableToAddRootFolder": "לא ניתן לטעון תיקיות שורש",
"Blocklist": "רשימה שחורה",
"BlocklistRelease": "שחרור הרשימה השחורה",
"RemoveFromBlocklist": "הסר מהרשימה השחורה",

View File

@@ -982,7 +982,6 @@
"Download": "डाउनलोड",
"DownloadClientCheckDownloadingToRoot": "डाउनलोड क्लाइंट {downloadClientName} रूट फ़ोल्डर में डाउनलोड करता है {path}। आपको रूट फ़ोल्डर में डाउनलोड नहीं करना चाहिए।",
"DeleteFileLabel": "{0} मूवी फ़ाइलें हटाएं",
"UnableToAddRootFolder": "रूट फ़ोल्डर लोड करने में असमर्थ",
"Blocklist": "काला सूची में डालना",
"BlocklistRelease": "ब्लैकलिस्ट रिलीज़",
"RemoveFromBlocklist": "ब्लैकलिस्ट से निकालें",

View File

@@ -4,7 +4,7 @@
"Analytics": "Analitika",
"AnalyseVideoFiles": "Videó fájlok analizálása",
"AlternativeTitle": "Alternatív cím",
"AlreadyInYourLibrary": "Már hozzáadtad",
"AlreadyInYourLibrary": "Már a könyvtárban",
"AllowHardcodedSubsHelpText": "Az észlelt beégetett feliratok automatikusan le lesznek töltve",
"AllowHardcodedSubs": "Beégetett feliratok engedélyezése",
"AllMoviesHiddenDueToFilter": "Minden film el van rejtve a kiválasztott filter miatt.",
@@ -13,10 +13,10 @@
"AddNewMessage": "Könnyű hozzáadni egy filmet, csak kezd el gépelni a kívánt film nevét",
"AddNew": "Új hozzáadása",
"AddMovies": "Film hozzáadása",
"AddIndexer": "Indexer hozzáadása",
"AddIndexer": "Indexe hozzáadása",
"AddingTag": "Címke hozzáadása",
"AddImportExclusionHelpText": "Megakadályozza film hozzáadását {appName}-hoz listáról",
"AddExclusion": "Kivétel hozzáadása",
"AddExclusion": "Kizárás hozzáadása",
"Activity": "Aktivitás",
"Error": "Hiba",
"Ended": "Vége",
@@ -36,7 +36,7 @@
"EditPerson": "Személy Szerkesztése",
"EditMovie": "Film Szerkesztése",
"Edition": "Kiadás",
"Edit": "Szerkesztés",
"Edit": "szerkeszt",
"DownloadWarning": "Letöltési figyelmeztetés: {0}",
"Downloading": "Letöltés Alatt",
"DownloadFailed": "Letöltés Sikertelen",
@@ -55,9 +55,9 @@
"Docker": "Docker",
"DiskSpace": "Szabad Tárhely",
"Discover": "Felfedezés",
"Disabled": "Letiltott",
"Disabled": "Tiltva",
"DigitalRelease": "Digitális Megjelenés",
"Details": "Részletek",
"Details": "részletek",
"DetailedProgressBarHelpText": "Szöveg megjelenítése a folyamatjelző sávon",
"DestinationPath": "Célmappa Útvonala",
"DeleteTagMessageText": "Biztosan törlöd a(z) „{0}” címkét?",
@@ -74,12 +74,12 @@
"DeleteEmptyFoldersHelpText": "Törölje az üres filmmappákat a lemezfrissítés és a filmfájlok törlése során",
"DeleteEmptyFolders": "Üres Mappa Törlése",
"DeleteDownloadClientMessageText": "Biztosan törlöd a(z) „{0}” letöltő klienst?",
"DeleteDownloadClient": "Letöltőkliens Törlése",
"DeleteDelayProfile": "Késleltetési Profil Törlése",
"DeleteDownloadClient": "Letöltőkliens törlése",
"DeleteDelayProfile": "Késleltetési Profil törlése",
"Deleted": "Törölve",
"DeleteCustomFormat": "Egyéni formátum törlése",
"DeleteBackupMessageText": "Biztosan törlöd a(z) „{0}” biztonsági mentést?",
"DeleteBackup": "Biztonsági Mentés Törlése",
"DeleteBackupMessageText": "Biztosan törli a '{name}' biztonsági mentést?",
"DeleteBackup": "Biztonsági Mentés törlése",
"Delete": "Törlés",
"Cutoff": "Küszöbhatár",
"DelayProfiles": "Késleltetési Profilok",
@@ -121,15 +121,15 @@
"CloneIndexer": "Indexer Klónozása",
"CloneCustomFormat": "Egyéni formátum klónozása",
"ClientPriority": "Kliens Prioritás",
"ClickToChangeQuality": "Kattints a minőség módosításához",
"ClickToChangeQuality": "Kattintson a minőség módosításához",
"ClickToChangeMovie": "Kattints a film módosításához",
"ClickToChangeLanguage": "Kattints a nyelv változtatásáért",
"ClickToChangeLanguage": "Kattintson a nyelv megváltoztatásához",
"Clear": "Törölni",
"ChooseAnotherFolder": "Válassz másik Mappát",
"CheckForFinishedDownloadsInterval": "Befejezett letöltések átnézésének intervalluma",
"CheckDownloadClientForDetails": "nézd meg a letöltési kliensed több információért",
"ChangeHasNotBeenSavedYet": "A változások még nem lettek elmentve",
"ChangeFileDate": "Fájl Dátumának Módosítása",
"ChangeFileDate": "Fájl dátumának módosítása",
"CertificationCountryHelpText": "Válasszd ki melyik ország korhatárbesorolása jelenjen meg",
"CertificationCountry": "Tanúsító Ország",
"Certification": "Tanúsítvány",
@@ -138,7 +138,7 @@
"Cast": "Szereplők",
"CantFindMovie": "Miért nem találom a filmemet?",
"CancelProcessing": "Folyamat leállítása",
"CancelPendingTask": "Biztosan törlöd ezt a függőben lévő feladatot?",
"CancelPendingTask": "Biztosan törölni szeretné ezt a függőben lévő feladatot?",
"Cancel": "Mégse",
"Calendar": "Naptár",
"BypassProxyForLocalAddresses": "Proxy megkerülése a helyi hálózatos címekhez",
@@ -147,17 +147,17 @@
"Branch": "Ágazat",
"BindAddressHelpText": "Érvényes IP-cím, localhost vagy '*' minden interfészhez",
"BindAddress": "Kapcsolási Cím",
"BeforeUpdate": "Alkalmazásfrissítés előtt",
"BeforeUpdate": "Frissítés előtt",
"Backups": "Biztonsági mentések",
"BackupRetentionHelpText": "A megőrzési idől régebbi automatikus biztonsági másolatok automatikusan törlésre kerülnek",
"BackupNow": "Biztonsági Mentés Most",
"BackupIntervalHelpText": "Időeltérés a biztonsági mentések között",
"BackupRetentionHelpText": "A megőrzési időszaknál régebbi automatikus biztonsági másolatok automatikusan törlődnek",
"BackupNow": "Biztonsági Mentés",
"BackupIntervalHelpText": "Az automatikus biztonsági mentések közötti időköz",
"BackupFolderHelpText": "Az elérési útvonalak a {appName} AppData könyvtárában lesznek",
"Backup": "Biztonsági Mentés",
"Backup": "biztonsági mentés",
"AvailabilityDelayHelpText": "A rendelkezésre álló dátum előtti vagy utáni idő a film kereséséhez",
"AvailabilityDelay": "Elérhetőség Késleltetése",
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "A lemezről törölt filmeket a {appName} automatikusan eltávolítja a megfigyelt filmek közül",
"AutoRedownloadFailedHelpText": "Másik kiadás automatikus keresése és letöltése",
"AutoRedownloadFailedHelpText": "Egy másik kiadás automatikus keresése és letöltése",
"AutomaticSearch": "Automatikus keresés",
"Automatic": "Automatikus",
"AnalyticsEnabledHelpText": "Küldjön névtelen használati és hibainformációkat a {appName} szervereire. Ez magában foglalja a böngészőjéről szóló információkat, mely {appName} WebUI oldalakat használja, a hibajelentést, valamint az operációs rendszer adatait. Ezeket az információkat a funkciók és a hibajavítások rangsorolására használjuk fel.",
@@ -166,22 +166,22 @@
"AudioInfo": "Hang Infó",
"AsAllDayHelpText": "Az események egész napos eseményként jelennek meg a naptáradban",
"ApplyTags": "Címkék alkalmazása",
"AgeWhenGrabbed": "Kora (mikor hozzáadásra került)",
"AgeWhenGrabbed": "Életkor (amikor megragadták)",
"Age": "Kor",
"AddListExclusion": "Kizárási Lista Hozzáadása",
"AddListExclusion": "Listakizárás hozzáadása",
"ApiKey": "API Kulcs",
"All": "Összes",
"Agenda": "Teendők",
"AcceptConfirmationModal": "Változás Megerősítése",
"Apply": "Alkalmazás",
"Apply": "Alkamaz",
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges az alkalmazás adatok törlése nélkül",
"AppDataDirectory": "AppData Mappa",
"AppDataDirectory": "AppData Könyvtár",
"AddRestriction": "Korlátozás Hozzáadása",
"AddRemotePathMapping": "Adj Meg Egy Távoli Elérési Útvonalat",
"AddRemotePathMapping": "Távoli útvonal-leképezés hozzáadása",
"AddMovie": "Film Hozzáadása",
"Added": "Hozzáadva",
"Actions": "Teendők",
"History": "Történet",
"History": "Előzmény",
"HideAdvanced": "Haladó elrejtése",
"HiddenClickToShow": "Rejtett, kattints a felfedéshez",
"NoIssuesWithYourConfiguration": "Nincs hiba a konfigurációval",
@@ -203,13 +203,13 @@
"Folders": "Mappák",
"Folder": "Mappa",
"FocusSearchBox": "Fókusz Keresőmező",
"Fixed": "Kijavítva",
"Fixed": "Rögzített",
"FirstDayOfWeek": "A Hét Első Napja",
"FilterPlaceHolder": "Filmek Keresése",
"Filter": "Szűrő",
"Files": "Fájl",
"FileNames": "Fájlnevek",
"Filename": "Fájlnév",
"Filename": "Fájl név",
"FileManagement": "Fájlkezelő",
"FileDateHelpText": "A fájl dátumának módosítása az importáláskor / újrakereséskor",
"FailedLoadingSearchResults": "Nem sikerült betölteni a keresési eredményeket, próbálkozz újra.",
@@ -255,7 +255,7 @@
"SSLCertPath": "Az SSL tanúsítvány elérési útvonala",
"SSLCertPasswordHelpText": "Jelszó a Pfx fájlhoz",
"SSLCertPassword": "SSL Tanúsítvány jelszava",
"SourceTitle": "Forrás címe",
"SourceTitle": "Eredeti cím",
"SourceRelativePath": "Forrás relatív útvonala",
"SourcePath": "Forrás útvonala",
"Source": "Forrás",
@@ -342,7 +342,7 @@
"RootFolder": "Gyökérmappa",
"RetentionHelpText": "Usenet: Állítsa nullára a korlátlan megőrzés beállításához",
"Retention": "Visszatartás",
"Result": "Eredmények",
"Result": "Eredmény",
"Restrictions": "Korlátozások",
"RestoreBackup": "Biztonsági mentés visszaállítása",
"Restore": "Visszaállítás",
@@ -399,7 +399,7 @@
"RecycleBinCleanupDaysHelpText": "Állítsd 0-ra az automatikus tisztítás letiltásához",
"RecentFolders": "Legutóbbi mappák",
"Reason": "Ok",
"Real": "Valódi",
"Real": "Igazi",
"ReadTheWikiForMoreInformation": "Olvasd el a Wiki-t további információkért",
"Ratings": "Értékelések",
"RadarrTags": "{appName} Címkék",
@@ -416,7 +416,7 @@
"QualityProfile": "Minőségi profil",
"QualityDefinitions": "Minőségi meghatározások",
"QualityCutoffHasNotBeenMet": "Minőségi küszöbhatár nincs elérve",
"Quality": "Minőség",
"Quality": "minőség",
"PublishedDate": "Közzététel dátuma",
"PtpOldSettingsCheckMessage": "A következő PassThePopcorn indexerek elavult beállításokkal rendelkeznek, és frissíteni kell őket: {0}",
"ProxyUsernameHelpText": "Csak akkor kell megadnod felhasználónevet és jelszót, ha szükséges. Egyébként hagyd üresen.",
@@ -429,10 +429,10 @@
"Proxy": "Proxy",
"ProtocolHelpText": "Válasszd ki a használni kívánt protokoll(oka)t és melyiket részesíted előnyben, ha az egyébként egyforma kiadások közül választasz",
"Protocol": "Protokoll",
"Proper": "Proper",
"Proper": "Megfelelő",
"Progress": "Folyamat",
"ProfilesSettingsSummary": "Minőség, Nyelv, és Késleltetési profil",
"Profiles": "Profil(ok)",
"Profiles": "Profilok",
"ProcessingFolders": "Mappák feldolgozása",
"PriorityHelpText": "Priorizálj több letöltési klienst. A Round-Robint azonos prioritású letöltőkliensek használják.",
"Priority": "Elsőbbség",
@@ -464,7 +464,7 @@
"Overview": "Áttekintés",
"OutputPath": "Kimeneti út",
"Organize": "Rendezés",
"Options": "Opciók",
"Options": "Lehetőségek",
"OpenThisModal": "Nyissa meg ezt a modált",
"OpenBrowserOnStart": "Indításkor nyissa meg a böngészőt",
"OnUpgradeHelpText": "Minőségjavítás alatt",
@@ -546,7 +546,7 @@
"MIA": "MIA",
"MetadataSettingsSummary": "Készítsen metadatafájlokat, amikor filmeket importál vagy frissít",
"MetadataSettings": "Metaadat Beállítások",
"Metadata": "Metaadat(ok)",
"Metadata": "metaadat",
"Message": "Üzenet",
"MediaManagementSettingsSummary": "Elnevezési és fájlkezelési beállítások",
"MediaManagementSettings": "Média Kezelési Beállítások",
@@ -560,14 +560,14 @@
"MarkAsFailedMessageText": "Biztosan sikertelennek szeretnéd jelölni a (z) „{0}”-t?",
"MarkAsFailed": "Megjelölés Sikertelenként",
"ManualImport": "Manuális Importálás",
"Manual": "Manuális",
"Manual": "Kézi",
"MaintenanceRelease": "Karbantartási frissítés: hibajavítások és egyéb fejlesztések. További részletekért lásd: Github Commit History",
"Logs": "Logok",
"Logs": "Naplók",
"LogLevelTraceHelpTextWarning": "A nyomkövetést csak ideiglenesen szabad engedélyezni",
"LogLevel": "Log Szint",
"Logging": "Loggolás",
"LogFiles": "Log Fájlok",
"Location": "Lokáció",
"Location": "Elhelyezkedés",
"Local": "Helyi",
"LoadingMovieFilesFailed": "A film fájljainak betöltése sikertelen",
"LoadingMovieExtraFilesFailed": "A film extra fájljainak betöltése nem sikerült",
@@ -608,7 +608,7 @@
"UnableToLoadDownloadClientOptions": "Nem sikerült betölteni a letöltőkliens beállításait",
"UnableToLoadDelayProfiles": "Nem lehet betölteni a késleltetési profilokat",
"UnableToLoadCustomFormats": "Nem lehet betölteni az egyéni formátumokat",
"BackupsLoadError": "Biztonsági mentés(ek) betöltése sikertelen",
"BackupsLoadError": "Nem sikerült betölteni a biztonsági másolatokat",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Nem lehet új távoli elérési utat hozzáadni, próbálkozz újra.",
"UnableToAddANewQualityProfilePleaseTryAgain": "Nem lehet új minőségi profilt hozzáadni, próbálkozz újra.",
"UnableToAddANewNotificationPleaseTryAgain": "Nem lehet új értesítést hozzáadni, próbálkozz újra.",
@@ -625,8 +625,8 @@
"UILanguage": "Felület nyelve",
"UI": "Felület",
"Type": "Típus",
"TotalSpace": "Összes szabad hely",
"TotalFileSize": "Teljes fájl méret",
"TotalSpace": "Összesített terület",
"TotalFileSize": "Összesített fájlméret",
"Torrents": "Torrentek",
"TorrentDelayHelpText": "Eltolás percekben, mielőtt a torrentkliens elkezdi a letöltést",
"TorrentDelay": "Torrent késleltetés",
@@ -635,18 +635,18 @@
"Titles": "Címek",
"Title": "Cím",
"Timeleft": "Hátralévő idő",
"TimeFormat": "Időformátum",
"TimeFormat": "Idő formátum",
"Time": "Idő",
"TestAllLists": "Összes lista tesztelése",
"TestAllIndexers": "Indexerek tesztelése",
"TestAllClients": "Összes kliens tesztelése",
"TestAll": "Összes tesztelése",
"TestAll": "Összes Tesztelése",
"Test": "Teszt",
"Tasks": "Feladatok",
"TagsSettingsSummary": "Tekintse meg az összes címkét és azok használatát. A használatlan címkék eltávolíthatók",
"TagsHelpText": "Legalább egy megfelelő címkével rendelkező filmekre vonatkozik",
"Tags": "Címkék",
"TagIsNotUsedAndCanBeDeleted": "A címkét nincs használatban, és törölhető",
"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",
"SystemTimeCheckMessage": "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",
@@ -685,16 +685,16 @@
"ImportExtraFilesHelpText": "A megfelelő extra fájlok importálása (feliratok, nfo stb.) a filmfájl importálása után",
"ImportExtraFiles": "Extra Fájlok Importálása",
"ImportExistingMovies": "Meglévő Filmek Importálása",
"ImportErrors": "Importálási Hiba",
"ImportErrors": "Importálási hiba",
"ImportedTo": "Importálva Ide",
"Imported": "Importálva",
"ImportCustomFormat": "Egyéni Formátum Importálása",
"ImportCustomFormat": "Egyéni Formátum importálása",
"Import": "Importálás",
"IllRestartLater": "Később Újraindítom",
"IgnoredPlaceHolder": "Új korlátozás hozzáadása",
"IgnoredHelpText": "A kiadás elutasításra kerül, ha egy vagy több kifejezést tartalmaz (A kis- és nagybetűket nem vesszük figyelembe)",
"IgnoreDeletedMovies": "Törölt filmek megfigyelésének leállítása",
"IgnoredAddresses": "Ignorált Címek",
"IgnoredAddresses": "Ignorált címek",
"Ignored": "Ignorált",
"IconForCutoffUnmet": "Ikon a Sikertelen Küszöbszint Elérésére",
"ICalHttpUrlHelpText": "Másolja ezt az URL-t az klienseihez, vagy kattintson a feliratkozáshoz, ha böngészője támogatja a webcal-t",
@@ -759,7 +759,7 @@
"UnableToLoadListOptions": "A listaopciók betöltése sikertelen",
"UnableToLoadListExclusions": "Nem lehet betölteni a listakizárásokat",
"ThisConditionMatchesUsingRegularExpressions": "Ez a feltétel megfelel a Reguláris kifejezések használatának. Ne feledje, hogy a karakterek {0} különleges jelentéssel bírnak, és el kell kerülniük egy {1} karakterrel",
"TableOptions": "Táblázat beállításai",
"TableOptions": "Táblázat Beállítások",
"Table": "Táblázat",
"ShowSearch": "Keresés(ek) megjelenítése",
"SettingsRemotePathMappingHostHelpText": "Ugyanaz a gazdagép, amelyet a távoli letöltési klienshez megadott",
@@ -819,19 +819,19 @@
"CertValidationNoLocal": "Letiltva a helyi címeknél",
"CalendarOptions": "Naptár beállítások",
"BuiltIn": "Beépített",
"AuthForm": "Felhasználó (Bejelentkezési oldal)",
"AuthBasic": "Alap (Böngésző felugró ablak)",
"AptUpdater": "Az apt használatával telepítsd a frissítést",
"AuthForm": "Űrlapok (bejelentkezési oldal)",
"AuthBasic": "Alap (böngésző előugró ablak)",
"AptUpdater": "A frissítés telepítéséhez használja az apt-t",
"Always": "Mindig",
"AllResultsHiddenFilter": "Az alkalmazott szűrők miatt, az összes keresési eredmény rejtve marad",
"AllMoviesInPathHaveBeenImported": "Az összes film a(z) {0} -ból importálva lett",
"AllFiles": "Összes fájl",
"AfterManualRefresh": "A kézi frissítés után",
"AllFiles": "Minden fájl",
"AfterManualRefresh": "Kézi frissítés után",
"AddToDownloadQueue": "Hozzáadás a letöltési sorhoz",
"AddRootFolder": "Gyökérmappa hozzáadása",
"AddQualityProfile": "Minőségi Profil hozzáadása",
"AddedToDownloadQueue": "Hozzáadva a letöltési sorhoz",
"AddDownloadClient": "Letöltőkliens hozzáadása",
"AddDownloadClient": "Letöltési kliens hozzáadása",
"AddDelayProfile": "Késleltetési profil hozzáadása",
"AddCustomFormat": "Egyéni formátum hozzáadása",
"Add": "Hozzáadás",
@@ -871,12 +871,12 @@
"Trakt": "Trakt",
"Trailer": "Bemutató",
"Trace": "Nyomkövetés",
"TorrentsDisabled": "Torrentek nem engedélyezettek",
"TorrentsDisabled": "Kikapcsolt torrentek",
"TorrentDelayTime": "Torrent késleltetés: {0}",
"TMDb": "TMDb",
"ThisCannotBeCancelled": "Ezt folyamatot az összes indexelő letiltása nélkül nem lehet visszavonni, ha egyszer elindult.",
"TheLogLevelDefault": "A naplózási szint alapértékei az 'Info' alatt változtathatóak",
"TagDetails": "Címke részletek - {0}",
"TagDetails": "Címke részletek - {label}",
"Sunday": "Vasárnap",
"SomeResultsHiddenFilter": "Néhány találat nem látható az alkalmazott szűrők miatt",
"Socks5": "Socks5 ( TOR támogatással )",
@@ -1006,12 +1006,11 @@
"From": "től",
"TaskUserAgentTooltip": "Az API-t hívó alkalmazás biztosítja a User-Agent szolgáltatást",
"NotificationTriggersHelpText": "Válaszd ki, hogy mely események indítsák el ezt az értesítést",
"UnableToAddRootFolder": "Nem sikerült hozzáadni a gyökérmappát",
"Blocklisted": "Blokkolt",
"Blocklist": "Feketelista",
"BlocklistRelease": "Feketelistás Kiadás",
"BlocklistRelease": "Blokklista Release",
"RemoveFromBlocklist": "Eltávolítás a feketelistáról",
"BlocklistReleases": "Feketelistás Kiadás",
"BlocklistReleases": "Feketelista kiadása",
"IndexerTagHelpText": "Csak olyan filmekhez használja ezt az indexelőt, amelyek legalább egy megfelelő címkével rendelkeznek. Hagyja üresen az összes filmhez való használathoz.",
"RemoveSelectedItem": "Kijelölt elem eltávolítása",
"RemoveSelectedItems": "Kijelölt elemek eltávolítása",
@@ -1023,7 +1022,7 @@
"Filters": "Szűrők",
"IndexerDownloadClientHelpText": "Adja meg, hogy melyik letöltési kliens használja az indexelőből történő megfogásokat",
"AnnouncedMsg": "A filmet bejelentették",
"ClickToChangeReleaseGroup": "Kiadási csoport módosítása",
"ClickToChangeReleaseGroup": "Kattintson a kiadási csoport módosításához",
"TmdbRating": "TMDb Értékelés",
"TmdbVotes": "TMDb Szavazatok",
"ImdbRating": "IMDb Értékelés",
@@ -1056,7 +1055,7 @@
"InstanceName": "Példány Neve",
"EditCollection": "Gyűjtemény módosítása",
"MovieCollectionMissingRoot": "Hiányzó gyökérmappa a filmgyűjteményhez: {0}",
"ChooseImportMode": "Importálási mód kiválasztása",
"ChooseImportMode": "Válassza az Importálási módot",
"MovieAndCollection": "Film(ek) és Gyűjtemény(ek)",
"MovieCollectionMultipleMissingRoots": "Több gyökérmappa hiányzik a filmgyűjteményekhez: {0}",
"MovieOnly": "Csak Film(ek)",
@@ -1106,5 +1105,40 @@
"AuthenticationRequiredUsernameHelpTextWarning": "Adjon meg új felhasználónevet",
"AutomaticAdd": "Automatikus hozzáadás",
"Unknown": "Ismeretlen",
"UnknownEventTooltip": "Ismeretlen Esemény"
"UnknownEventTooltip": "Ismeretlen Esemény",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Erősítsd meg az új jelszót",
"ClearBlocklist": "Letiltási lista törlése",
"Implementation": "Végrehajtás",
"AddAutoTag": "Automatikus címke hozzáadása",
"AddCondition": "Feltétel hozzáadása",
"AutoTagging": "Automatikus címkézés",
"AllTitles": "Minden címke",
"AddConditionImplementation": "Feltétel hozzáadása {implementationName}",
"AddConnection": "Csatlakozás hozzáadása",
"AddConnectionImplementation": "Csatlakozás hozzáadása - {implementationName}",
"AddDownloadClientImplementation": "Letöltési kliens hozzáadása {implementationName}",
"AddImportList": "Importálási lista hozzáadása",
"AddImportListImplementation": "Importálási lista hozzáadása -{implementationName}",
"AddIndexerImplementation": "Indexelő hozzáadása - {implementationName}",
"ApplyTagsHelpTextRemove": "Eltávolítás: Távolítsa el a beírt címkéket",
"ApplyTagsHelpTextHowToApplyIndexers": "Címkék alkalmazása a kiválasztott indexelőkre",
"AppUpdated": "{appName} frissítve",
"ApplyTagsHelpTextAdd": "Hozzáadás: Adja hozzá a címkéket a meglévő címkék listájához",
"ApplyTagsHelpTextHowToApplyDownloadClients": "Címkék alkalmazása a kiválasztott letöltési kliensekre",
"ApplyTagsHelpTextHowToApplyImportLists": "Címkék alkalmazása a kiválasztott importlistákra",
"BlocklistLoadError": "Nem sikerült betölteni a tiltólistát",
"AuthenticationRequired": "Azonosítás szükséges",
"AudioLanguages": "Hang nyelvek",
"AuthenticationMethod": "Hitelesítési Módszer",
"AuthenticationMethodHelpTextWarning": "Kérjük, válasszon érvényes hitelesítési módot",
"AutoRedownloadFailed": "Az újraletöltés nem sikerült",
"AutoRedownloadFailedFromInteractiveSearch": "Az újraletöltés nem sikerült az interaktív keresésből",
"BypassDelayIfAboveCustomFormatScore": "Kihagyás, ha az egyéni formátum pontszáma felett van",
"BypassDelayIfAboveCustomFormatScoreMinimumScore": "Minimális egyéni formátum pontszám",
"BypassDelayIfAboveCustomFormatScoreMinimumScoreHelpText": "Minimális egyéni formátum pontszám a preferált protokoll késleltetésének megkerüléséhez",
"TablePageSize": "Oldal méret",
"DefaultNameCopiedProfile": "{name} - Másolat",
"DefaultNameCopiedSpecification": "{name} - Másolat",
"DelayingDownloadUntil": "Késleltetni a letöltést {date} -tól {time} -ig",
"Default": "Alapértelmezett"
}

View File

@@ -982,7 +982,6 @@
"Download": "Sækja",
"DownloadClientCheckDownloadingToRoot": "Sæktu viðskiptavinur {downloadClientName} setur niðurhal í rótarmöppuna {path}. Þú ættir ekki að hlaða niður í rótarmöppu.",
"DeleteFileLabel": "Eyða {0} kvikmyndaskrám",
"UnableToAddRootFolder": "Ekki er hægt að hlaða rótarmöppum",
"Blocklist": "Svartur listi",
"BlocklistRelease": "Útgáfa svartalista",
"RemoveFromBlocklist": "Fjarlægja af svörtum lista",

View File

@@ -982,7 +982,6 @@
"Download": "Scarica",
"DownloadClientCheckDownloadingToRoot": "Il client di download {downloadClientName} colloca i download nella cartella radice {path}. Non dovresti scaricare in una cartella radice.",
"DeleteFileLabel": "Elimina {0} file di film",
"UnableToAddRootFolder": "Non riesco a caricare la cartella root",
"Blocklist": "Lista dei Blocchi",
"BlocklistRelease": "Release in Lista dei Blocchi",
"RemoveFromBlocklist": "Rimuovi della blacklist",
@@ -1079,5 +1078,7 @@
"AutomaticAdd": "Aggiungi Automaticamente",
"AllTitles": "Tutti i Titoli",
"ApiKeyValidationHealthCheckMessage": "Aggiorna la tua chiave API in modo che abbia una lunghezza di almeno {length} caratteri. Puoi farlo dalle impostazioni o dal file di configurazione",
"AddImportList": "Aggiungi lista da importare"
"AddImportList": "Aggiungi lista da importare",
"CloneCondition": "Duplica Condizione",
"AddCondition": "Aggiungi Condizione"
}

View File

@@ -982,7 +982,6 @@
"Download": "ダウンロード",
"DownloadClientCheckDownloadingToRoot": "ダウンロードクライアント{downloadClientName}は、ダウンロードをルートフォルダ{path}に配置します。ルートフォルダにダウンロードしないでください。",
"DeleteFileLabel": "{0}ムービーファイルを削除する",
"UnableToAddRootFolder": "ルートフォルダを読み込めません",
"Blocklist": "ブラックリスト",
"BlocklistRelease": "ブラックリストリリース",
"RemoveFromBlocklist": "ブラックリストから削除する",

View File

@@ -982,7 +982,6 @@
"Download": "다운로드",
"DownloadClientCheckDownloadingToRoot": "다운로드 클라이언트 {downloadClientName} 은(는) 루트 폴더 {path}에 다운로드를 저장합니다. 루트 폴더에 다운로드해서는 안됩니다.",
"DeleteFileLabel": "{0} 영화 파일 삭제",
"UnableToAddRootFolder": "루트 폴더를 불러올 수 없습니다.",
"Blocklist": "블랙리스트",
"BlocklistRelease": "블랙리스트 릴리스",
"RemoveFromBlocklist": "블랙리스트에서 제거",

View File

@@ -1 +1,15 @@
{}
{
"About": "Par",
"AcceptConfirmationModal": "Apstiprināt Apstiprināšanas Modālu",
"Actions": "Darbības",
"Activity": "Aktivitāte",
"Add": "Pievienot",
"AddAutoTag": "Pievienot Automātisko Tagu",
"AddCondition": "Pievienot Nosacījumu",
"AddCustomFormat": "Pievienot Pielāgotu Formātu",
"AddConditionImplementation": "Pievienot Nosacījumu - {implementationName}",
"AddConnection": "Pievienot Savienojumu",
"AddConnectionImplementation": "Pievienot Savienojumu - {implementationName}",
"AddDelayProfile": "Pievienot Aizkaves Profilu",
"AddDownloadClient": "Pievienot Lejupielādes Klientu"
}

View File

@@ -58,7 +58,7 @@
"AddNewTmdbIdMessage": "Je kunt ook zoeken met het TMDb id van een film. Bijv. tmdb:71663",
"AddNewMessage": "Het is gemakkelijk om een nieuwe film toe te voegen, begin gewoon met de naam te typen van de film die je wilt toevoegen",
"AddNew": "Nieuwe toevoegen",
"AddExclusion": "Uitzondering toevoegen",
"AddExclusion": "Uitzondering Toevoegen",
"AddMovies": "Film(s) Toevoegen",
"Activity": "Activiteit",
"About": "Over",
@@ -292,7 +292,7 @@
"MonitorMovie": "Bewaak Film",
"InteractiveImport": "Interactieve Import",
"ExistingMovies": "Bestaande Film(s)",
"AddRemotePathMapping": "Voeg Externe Pad Verwijzing Toe",
"AddRemotePathMapping": "Voeg Remote Path Mapping toe",
"EditRemotePathMapping": "Bewerk Externe Pad Verwijzing",
"DetailedProgressBarHelpText": "Toon tekst op voortgangsbalk",
"DetailedProgressBar": "Gedetailleerde voortgangsbalk",
@@ -304,11 +304,11 @@
"Authentication": "Authenticatie",
"AppDataDirectory": "AppData folder",
"AddImportExclusionHelpText": "Voorkom dat film wordt toegevoegd aan {appName} door een lijst",
"AgeWhenGrabbed": "Leeftijd (op moment van ophalen)",
"AgeWhenGrabbed": "Leeftijd (wanneer opgepakt)",
"AnalyticsEnabledHelpText": "Stuur anonieme gebruiks- en foutinformatie naar de servers van {appName}. Dit omvat informatie over uw browser, welke {appName} WebUI pagina's u gebruikt, foutrapportage en OS en runtime versie. We zullen deze informatie gebruiken om prioriteiten te stellen voor functies en het verhelpen van fouten.",
"AllowHardcodedSubsHelpText": "Gedetecteerde ingebrande ondertiteling zal automatisch worden gedownload",
"AnalyseVideoFiles": "Analyseer videobestanden",
"AlreadyInYourLibrary": "Reeds in uw bibliotheek",
"AlreadyInYourLibrary": "Reeds in je bibliotheek",
"AllowHardcodedSubs": "Sta Ingebrande Ondertiteling Toe",
"YesCancel": "Ja, Annuleren",
"AddListExclusion": "Lijst uitzondering toevoegen",
@@ -645,9 +645,9 @@
"DeleteTagMessageText": "Bent u zeker dat u de tag '{0}' wilt verwijderen?",
"DeleteRestrictionHelpText": "Bent u zeker dat u deze restrictie wilt verwijderen?",
"DeleteNotificationMessageText": "Bent u zeker dat u de notificatie '{0}' wilt verwijderen?",
"DeleteIndexerMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
"DeleteDownloadClientMessageText": "Bent u zeker dat u de downloader '{0}' wilt verwijderen?",
"DeleteBackupMessageText": "Bent u zeker dat u de veiligheidskopie '{0}' wilt verwijderen?",
"DeleteIndexerMessageText": "Bent u zeker dat u de indexeerder '{name}' wilt verwijderen?",
"DeleteDownloadClientMessageText": "Bent u zeker dat u de downloader '{name}' wilt verwijderen?",
"DeleteBackupMessageText": "Bent u zeker dat u de veiligheidskopie '{name}' wilt verwijderen?",
"Cutoff": "Drempel",
"ClickToChangeMovie": "Klik om film te wijzigen",
"CheckDownloadClientForDetails": "controleer downloader voor meer details",
@@ -692,7 +692,7 @@
"ForMoreInformationOnTheIndividualDownloadClients": "Voor meer informatie over de individuele download applicaties, klik op de info knoppen.",
"FailedLoadingSearchResults": "Laden van zoekresultaten is mislukt, gelieve opnieuw te proberen.",
"ExtraFileExtensionsHelpTexts1": "Komma gescheiden lijst met extra bestanden om te importeren (.nfo zal als .nfo-orig worden geïmporteerd)",
"CouldNotFindResults": "Kon geen resultaten vinden voor '{0}'",
"CouldNotFindResults": "Kon geen resultaten vinden voor '{term}'",
"ApplyTagsHelpTextHowToApplyMovies": "Hoe tags toe te passen op de geselecteerd films",
"BackupsLoadError": "Kon geen veiligheidskopieën laden",
"TagIsNotUsedAndCanBeDeleted": "Tag is niet in gebruik en kan verwijderd worden",
@@ -755,17 +755,17 @@
"AddDelayProfile": "Voeg vertragingsprofiel toe",
"AddCustomFormat": "Voeg aangepast formaat toe",
"BuiltIn": "Ingebouwd",
"AuthBasic": "Basis (Browser Pop-up)",
"AuthBasic": "Basic (Browser Pop-up)",
"AptUpdater": "Gebruik apt om de update te installeren",
"Announced": "Aangekondigd",
"Always": "Altijd",
"AllResultsHiddenFilter": "Alle resultaten zijn verborgen door de toegepaste filter",
"AllMoviesInPathHaveBeenImported": "Alle films in {path} zijn geïmporteerd",
"AllFiles": "Alle bestanden",
"AfterManualRefresh": "Na handmatig verversen",
"AddToDownloadQueue": "Toegevoegd aan downloadwachtrij",
"AfterManualRefresh": "Na handmatig vernieuwen",
"AddToDownloadQueue": "Toevoegen aan download wachtrij",
"AddQualityProfile": "Kwaliteitsprofiel toevoegen",
"AddedToDownloadQueue": "Aan de download wachtrijtoegevoegd",
"AddedToDownloadQueue": "Toegevoegd aan download wachtrij",
"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.",
@@ -854,8 +854,8 @@
"ChmodFolder": "chmod Map",
"CertValidationNoLocal": "Uitgeschakeld voor lokale adressen",
"CalendarOptions": "Kalender Opties",
"AuthForm": "Formulier (Login Pagina)",
"AddRootFolder": "Voeg hoofdmap toe",
"AuthForm": "Formulier (inlogpagina)",
"AddRootFolder": "Voeg Hoofdmap toe",
"StartProcessing": "Start Verwerken",
"StartImport": "Start Importeren",
"SomeResultsHiddenFilter": "Sommige resultaten zijn verborgen door de aangebrachte filter",
@@ -983,7 +983,6 @@
"Download": "Downloaden",
"DownloadClientCheckDownloadingToRoot": "Downloadclient {downloadClientName} plaatst downloads in de hoofdmap {path}. U mag niet naar een hoofdmap downloaden.",
"DeleteFileLabel": "Verwijder {0} Film Bestanden",
"UnableToAddRootFolder": "Kon hoofdmappen niet inladen",
"UpdateAvailable": "Nieuwe update is beschikbaar",
"From": "van",
"RemotePathMappingCheckDownloadPermissions": "{appName} kan gedownloade film {path} zien, maar niet openen. Waarschijnlijk fout met machtigingen.",
@@ -1102,10 +1101,10 @@
"DownloadClientTagHelpText": "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?",
"RemoveSelectedItemQueueMessageText": "Weet je zeker dat je {0} van de wachtrij wilt verwijderen?",
"CountIndexersSelected": "{0} Indexer(s) Geselecteerd",
"CountIndexersSelected": "{count} Indexer(s) Geselecteerd",
"DeleteSelectedIndexers": "Verwijder Indexeerder",
"ResetAPIKeyMessageText": "Bent u zeker dat u uw API-sleutel wilt resetten?",
"DeleteConditionMessageText": "Bent u zeker dat u de lijst '{0}' wilt verwijderen?",
"DeleteConditionMessageText": "Bent u zeker dat u de lijst '{name}' wilt verwijderen?",
"DeleteCustomFormatMessageText": "Bent u zeker dat u de indexeerder '{customFormatName}' wilt verwijderen?",
"DeleteFormatMessageText": "Weet je zeker dat je formaat tag {0} wilt verwijderen?",
"DeleteImportListExclusionMessageText": "Bent u zeker dat u dit van de uitzonderingenlijst wilt verwijderen?",
@@ -1128,7 +1127,7 @@
"AddConditionImplementation": "Voeg voorwaarde toe - {implementationName}",
"AddConnection": "Voeg connectie toe",
"AddConnectionImplementation": "Voeg connectie toe - {implementationName}",
"AddDownloadClientImplementation": "Voeg Downloadclient toe - {implementationName}",
"AddDownloadClientImplementation": "Voeg Downloadclient Toe - {implementationName}",
"AddIndexerImplementation": "Indexeerder toevoegen - {implementationName}",
"DeleteQualityProfileMessageText": "Bent u zeker dat u het kwaliteitsprofiel {name} wilt verwijderen?",
"AppUpdated": "{appName} is geüpdatet",
@@ -1138,5 +1137,13 @@
"AddImportListImplementation": "Importlijst toevoegen - {implementationName}",
"AudioLanguages": "Audiotalen",
"AuthenticationMethodHelpTextWarning": "Selecteer een geldige verificatie methode",
"AuthenticationMethod": "Authenticatiemethode"
"AuthenticationMethod": "Authenticatiemethode",
"AuthenticationRequiredUsernameHelpTextWarning": "Voeg een nieuwe gebruikersnaam in",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Bevestig het nieuwe wachtwoord",
"AutoRedownloadFailed": "Opnieuw downloaden mislukt",
"AutoRedownloadFailedFromInteractiveSearch": "Opnieuw downloaden mislukt vanuit interactief zoeken",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Zoek en download automatisch een andere release als een release vanuit interactief zoeken mislukt is",
"AuthenticationRequiredHelpText": "Pas aan welke requests verificatie nodig hebben. Pas niets aan als je de risico's niet begrijpt.",
"AuthenticationRequiredWarning": "Om toegang zonder authenticatie te voorkomen vereist {appName} nu verificatie. Je kan dit optioneel uitschakelen voor lokale adressen.",
"AuthenticationRequiredPasswordHelpTextWarning": "Voer een nieuw wachtwoord in"
}

View File

@@ -451,7 +451,7 @@
"CloneCustomFormat": "Klonuj format niestandardowy",
"CloneIndexer": "Sklonuj Indekser",
"CloneProfile": "Klonuj profil",
"Close": "Blisko",
"Close": "Zamknij",
"ColonReplacement": "Wymiana okrężnicy",
"ColonReplacementFormatHelpText": "Zmień sposób, w jaki {appName} obsługuje wymianę okrężnicy",
"Columns": "Kolumny",
@@ -981,7 +981,6 @@
"Download": "Ściągnij",
"DownloadClientCheckDownloadingToRoot": "Klient pobierania {downloadClientName} umieszcza pliki do pobrania w folderze głównym {path}. Nie należy pobierać do folderu głównego.",
"DeleteFileLabel": "Usuń {0} pliki filmowe",
"UnableToAddRootFolder": "Nie można dodać folderu głównego",
"Blocklist": "Czarna lista",
"BlocklistRelease": "Dodaj wersję do czarnej listy",
"RemoveFromBlocklist": "Usuń z czarnej listy",

View File

@@ -274,7 +274,7 @@
"Cancel": "Cancelar",
"Calendar": "Calendário",
"BackupNow": "Criar cópia de segurança",
"Backup": "Cópia de segurança",
"Backup": "Backup",
"AudioInfo": "Informações do áudio",
"Apply": "Aplicar",
"Analytics": "Análise",
@@ -468,7 +468,7 @@
"BindAddressHelpText": "Endereço de IP válido, localhost ou \"*\" para todas as interfaces",
"BindAddress": "Endereço de vínculo",
"Backups": "Cópias de segurança",
"BackupFolderHelpText": "Caminhos relativos estarão na pasta AppData do {appName}",
"BackupFolderHelpText": "Caminhos relativos estarão no diretório AppData do {appName}",
"BackupIntervalHelpText": "Intervalo entre cópias de segurança automáticas",
"BackupRetentionHelpText": "Cópias de segurança automáticas anteriores ao período de retenção serão eliminadas automaticamente",
"Cutoff": "Limite",
@@ -1007,7 +1007,6 @@
"BypassDelayIfHighestQualityHelpText": "Ignorar o atraso quando a versão tiver a qualidade mais alta ativada no perfil de qualidade com o protocolo preferido",
"BypassDelayIfHighestQuality": "Ignorar se a qualidade for mais alta",
"NotificationTriggersHelpText": "Seleciona quais eventos acionam esta notificação",
"UnableToAddRootFolder": "Não foi possível carregar as pastas raiz",
"Blocklist": "Lista de bloqueio",
"BlocklistRelease": "Bloquear versão",
"RemoveFromBlocklist": "Remover da lista de bloqueio",
@@ -1189,5 +1188,6 @@
"DeleteImportList": "Eliminar Lista de Importação",
"DeleteImportListMessageText": "Tem a certeza de que pretende eliminar a lista '{name}'?",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "O cliente de descarregamento {downloadClientName} está definido para remover descarregamentos concluídos. Isto pode fazer com que as transferências sejam removidas do seu cliente antes de {1} as poder importar.",
"AppUpdated": "{appName} Atualizado"
"AppUpdated": "{appName} Atualizado",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmar nova senha"
}

View File

@@ -1007,7 +1007,6 @@
"Letterboxd": "Letterboxd",
"TaskUserAgentTooltip": "User-Agent fornecido pelo aplicativo que chamou a API",
"NotificationTriggersHelpText": "Selecione quais eventos devem acionar esta notificação",
"UnableToAddRootFolder": "Não foi possível adicionar a pasta raiz",
"Blocklisted": "Bloqueado",
"Blocklist": "Lista de Bloqueio",
"BlocklistRelease": "Lançamento na lista de bloqueio",
@@ -1346,5 +1345,8 @@
"PreviouslyInstalled": "Instalado anteriormente",
"UpdaterLogFiles": "Arquivos de log do atualizador",
"InteractiveSearchModalHeader": "Pesquisa Interativa",
"WhySearchesCouldBeFailing": "Clique aqui para descobrir por que as pesquisas podem estar falhando"
"WhySearchesCouldBeFailing": "Clique aqui para descobrir por que as pesquisas podem estar falhando",
"AddRootFolderError": "Não foi possível adicionar a pasta raiz",
"DownloadClientQbittorrentSettingsContentLayout": "Layout de Conteúdo",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Seja para usar o layout de conteúdo configurado do qBittorrent, o layout original do torrent ou sempre criar uma subpasta (qBittorrent 4.3.2+)"
}

View File

@@ -983,7 +983,6 @@
"Download": "Descarca",
"DownloadClientCheckDownloadingToRoot": "Clientul de descărcare {downloadClientName} plasează descărcările în folderul rădăcină {path}. Nu trebuie să descărcați într-un folder rădăcină.",
"DeleteFileLabel": "Ștergeți {0} Fișiere de filme",
"UnableToAddRootFolder": "Imposibil de încărcat folderele rădăcină",
"Blocklist": "Listă Neagră",
"BlocklistRelease": "Lansare pe lista neagră",
"RemoveFromBlocklist": "Eliminați de pe lista neagră",

Some files were not shown because too many files have changed in this diff Show More