1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-17 21:26:13 -04:00

Compare commits

...

26 Commits

Author SHA1 Message Date
Qstick
913b845faa Fixed: Prevent anime search with ep/season if not supported 2024-02-09 21:30:08 -05:00
Stas Panasiuk
6e81517d51 New: Parsing titles with multiple translated titles 2024-02-06 23:03:36 -05:00
Mark McDowall
34e74eecd7 Fixed: Don't attempt to import from list with title only (#6477)
Closes #6474
2024-02-06 23:02:26 -05:00
Mark McDowall
895eccebc5 New: Parse and reject split episode releases and files 2024-02-06 23:02:03 -05:00
Mark McDowall
f722d49b3a Fixed: Don't use sub folder to check for free disk space for update
Closes #6478
2024-02-06 20:01:30 -08:00
bakerboy448
cac97c057f Improve Custom Format rejection messaging 2024-02-06 23:01:07 -05:00
jab416171
63e132d257 Wrapped fields on series details page in div
This allows you to triple click to select the path for instance, similar
to the details page in radarr.
2024-02-06 19:59:02 -08:00
Mark McDowall
6ab1d8e16b New: Log database engine version on startup 2024-02-06 22:58:49 -05:00
Stevie Robinson
80630bf97f Fixed: Wrapping of naming tokens with alternate separators 2024-02-06 22:58:09 -05:00
Bogdan
904285045b Fixed: Naming validation when using max token length 2024-02-06 19:57:44 -08:00
Stevie Robinson
1006ec6b52 really fix translation key 2024-02-06 19:57:33 -08:00
Mark McDowall
4cb1100704 Fixed: Remove old naming config from v3 API responses
Closes #6460
2024-02-06 19:57:25 -08:00
Mark McDowall
745b92daf4 Fixed: Redirecting after login
Closes #6454
2024-02-06 19:57:17 -08:00
Weblate
9eafdbd1af Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Ole Nørby <ole@olenoerby.dk>
Co-authored-by: Stevie Robinson <stevie.robinson@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: aghus <aghus.m@outlook.com>
Co-authored-by: gr0sz <joshuatg727@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/da/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/pt_BR/
Translation: Servarr/Sonarr
2024-02-06 19:57:09 -08:00
Weblate
200396ef7a Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/pt_BR/
Translation: Servarr/Sonarr
2024-01-31 19:39:13 -08:00
Stevie Robinson
c5a724f14e New: Send 'On Manual Interaction Required' notifications in more cases
Closes #6448
2024-01-31 19:38:51 -08:00
Mark McDowall
42b11528b4 New: Improve multi-language negate Custom Format
Closes #6408
2024-01-31 19:37:44 -08:00
Alex Herbig
e2210228b3 New: Add RZeroX to release group parsing exceptions 2024-01-31 19:36:39 -08:00
Bogdan
ded7c3c6e2 Only bind shortcut for pending changes confirmation when it's shown 2024-01-31 19:36:21 -08:00
Stevie Robinson
e1c6722aad New: Ignore 'Other' subfolder when scanning disk
Closes #6437
2024-01-31 19:35:21 -08:00
Bogdan
e17655c26a Fixed: Notifications with only On Series Add enabled being labeled as disabled 2024-01-31 19:34:51 -08:00
Stevie Robinson
e66c628241 Update some translation keys 2024-01-31 19:34:17 -08:00
Mark McDowall
8f0514a91d Fixed: Grouped calendar events not correctly showing as downloading
Closes #6441
2024-01-31 19:33:46 -08:00
bakerboy448
d7aea82e45 Improve Release Grabbing & Failure Logging 2024-01-31 19:33:38 -08:00
Mark McDowall
19db75b36b Add max token length (including ellipsis) for some tokens
New: Accept ':##' on renaming tokens to allow specifying a maximum length for series, episode titles and release group
Closes #6416
2024-01-31 19:33:21 -08:00
Weblate
11a18b534a Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Crocmou <slaanesh8854@gmail.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Lars <lars.erik.heloe@gmail.com>
Co-authored-by: Magyar <kochnorbert@icloud.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Stas Panasiuk <temnyip@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: fordas <fordas15@gmail.com>
Co-authored-by: resi23 <x-resistant-x@gmx.de>
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/nb_NO/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/uk/
Translation: Servarr/Sonarr
2024-01-31 19:33:13 -08:00
53 changed files with 1301 additions and 438 deletions

View File

@@ -10,7 +10,7 @@ function createIsDownloadingSelector() {
(state) => state.queue.details,
(episodeIds, details) => {
return details.items.some((item) => {
return item.episode && episodeIds.includes(item.episode.id);
return !!(item.episodeId && episodeIds.includes(item.episodeId));
});
}
);

View File

@@ -428,14 +428,16 @@ class SeriesDetails extends Component {
className={styles.detailsLabel}
size={sizes.LARGE}
>
<Icon
name={icons.FOLDER}
size={17}
/>
<span className={styles.path}>
{path}
</span>
<div>
<Icon
name={icons.FOLDER}
size={17}
/>
<span className={styles.path}>
{path}
</span>
</div>
</Label>
<Tooltip
@@ -444,16 +446,18 @@ class SeriesDetails extends Component {
className={styles.detailsLabel}
size={sizes.LARGE}
>
<Icon
name={icons.DRIVE}
size={17}
/>
<span className={styles.sizeOnDisk}>
{
formatBytes(sizeOnDisk || 0)
}
</span>
<div>
<Icon
name={icons.DRIVE}
size={17}
/>
<span className={styles.sizeOnDisk}>
{
formatBytes(sizeOnDisk || 0)
}
</span>
</div>
</Label>
}
tooltip={
@@ -470,32 +474,36 @@ class SeriesDetails extends Component {
title={translate('QualityProfile')}
size={sizes.LARGE}
>
<Icon
name={icons.PROFILE}
size={17}
/>
<span className={styles.qualityProfileName}>
{
<QualityProfileNameConnector
qualityProfileId={qualityProfileId}
/>
}
</span>
<div>
<Icon
name={icons.PROFILE}
size={17}
/>
<span className={styles.qualityProfileName}>
{
<QualityProfileNameConnector
qualityProfileId={qualityProfileId}
/>
}
</span>
</div>
</Label>
<Label
className={styles.detailsLabel}
size={sizes.LARGE}
>
<Icon
name={monitored ? icons.MONITORED : icons.UNMONITORED}
size={17}
/>
<span className={styles.qualityProfileName}>
{monitored ? translate('Monitored') : translate('Unmonitored')}
</span>
<div>
<Icon
name={monitored ? icons.MONITORED : icons.UNMONITORED}
size={17}
/>
<span className={styles.qualityProfileName}>
{monitored ? translate('Monitored') : translate('Unmonitored')}
</span>
</div>
</Label>
<Label
@@ -503,14 +511,16 @@ class SeriesDetails extends Component {
title={statusDetails.message}
size={sizes.LARGE}
>
<Icon
name={statusDetails.icon}
size={17}
/>
<span className={styles.qualityProfileName}>
{statusDetails.title}
</span>
<div>
<Icon
name={statusDetails.icon}
size={17}
/>
<span className={styles.qualityProfileName}>
{statusDetails.title}
</span>
</div>
</Label>
{
@@ -520,14 +530,16 @@ class SeriesDetails extends Component {
title={translate('Network')}
size={sizes.LARGE}
>
<Icon
name={icons.NETWORK}
size={17}
/>
<span className={styles.qualityProfileName}>
{network}
</span>
<div>
<Icon
name={icons.NETWORK}
size={17}
/>
<span className={styles.qualityProfileName}>
{network}
</span>
</div>
</Label>
}
@@ -537,14 +549,16 @@ class SeriesDetails extends Component {
className={styles.detailsLabel}
size={sizes.LARGE}
>
<Icon
name={icons.EXTERNAL_LINK}
size={17}
/>
<span className={styles.links}>
{translate('Links')}
</span>
<div>
<Icon
name={icons.EXTERNAL_LINK}
size={17}
/>
<span className={styles.links}>
{translate('Links')}
</span>
</div>
</Label>
}
tooltip={

View File

@@ -17,7 +17,7 @@
}
.small {
width: 480px;
width: 490px;
}
.large {
@@ -26,7 +26,7 @@
.token {
flex: 0 0 50%;
padding: 6px 16px;
padding: 6px 6px;
background-color: var(--popoverTitleBackgroundColor);
font-family: $monoSpaceFontFamily;
}
@@ -36,7 +36,7 @@
align-items: center;
justify-content: space-between;
flex: 0 0 50%;
padding: 6px 16px;
padding: 6px 6px;
background-color: var(--popoverBodyBackgroundColor);
.footNote {

View File

@@ -191,7 +191,7 @@ class Notification extends Component {
}
{
!onGrab && !onDownload && !onRename && !onHealthIssue && !onHealthRestored && !onApplicationUpdate && !onSeriesDelete && !onEpisodeFileDelete && !onManualInteractionRequired ?
!onGrab && !onDownload && !onRename && !onHealthIssue && !onHealthRestored && !onApplicationUpdate && !onSeriesAdd && !onSeriesDelete && !onEpisodeFileDelete && !onManualInteractionRequired ?
<Label
kind={kinds.DISABLED}
outline={true}

View File

@@ -15,12 +15,17 @@ function PendingChangesModal(props) {
isOpen,
onConfirm,
onCancel,
bindShortcut
bindShortcut,
unbindShortcut
} = props;
useEffect(() => {
bindShortcut('enter', onConfirm);
}, [bindShortcut, onConfirm]);
if (isOpen) {
bindShortcut('enter', onConfirm);
return () => unbindShortcut('enter', onConfirm);
}
}, [bindShortcut, unbindShortcut, isOpen, onConfirm]);
return (
<Modal
@@ -61,7 +66,8 @@ PendingChangesModal.propTypes = {
kind: PropTypes.oneOf(kinds.all),
onConfirm: PropTypes.func.isRequired,
onCancel: PropTypes.func.isRequired,
bindShortcut: PropTypes.func.isRequired
bindShortcut: PropTypes.func.isRequired,
unbindShortcut: PropTypes.func.isRequired
};
PendingChangesModal.defaultProps = {

View File

@@ -88,7 +88,7 @@ function EditDelayProfileModalContent(props) {
{
!isFetching && !!error ?
<div>
{translate('AddQualityProfileError')}
{translate('AddDelayProfileError')}
</div> :
null
}

View File

@@ -0,0 +1,17 @@
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Common.Extensions;
namespace NzbDrone.Common.Test.ExtensionTests.StringExtensionTests
{
[TestFixture]
public class ReverseFixture
{
[TestCase("input", "tupni")]
[TestCase("racecar", "racecar")]
public void should_reverse_string(string input, string expected)
{
input.Reverse().Should().Be(expected);
}
}
}

View File

@@ -242,5 +242,14 @@ namespace NzbDrone.Common.Extensions
{
return input.Contains(':') ? $"[{input}]" : input;
}
public static string Reverse(this string text)
{
var array = text.ToCharArray();
Array.Reverse(array);
return new string(array);
}
}
}

View File

@@ -0,0 +1,71 @@
using System.Collections.Generic;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.CustomFormats;
using NzbDrone.Core.Languages;
using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Core.Tv;
namespace NzbDrone.Core.Test.CustomFormats.Specifications.LanguageSpecification
{
[TestFixture]
public class MultiLanguageFixture : CoreTest<Core.CustomFormats.LanguageSpecification>
{
private CustomFormatInput _input;
[SetUp]
public void Setup()
{
_input = new CustomFormatInput
{
EpisodeInfo = Builder<ParsedEpisodeInfo>.CreateNew().Build(),
Series = Builder<Series>.CreateNew().With(s => s.OriginalLanguage = Language.English).Build(),
Size = 100.Megabytes(),
Languages = new List<Language>
{
Language.English,
Language.French
},
Filename = "Series.Title.S01E01"
};
}
[Test]
public void should_match_one_language()
{
Subject.Value = Language.French.Id;
Subject.Negate = false;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
[Test]
public void should_not_match_different_language()
{
Subject.Value = Language.Spanish.Id;
Subject.Negate = false;
Subject.IsSatisfiedBy(_input).Should().BeFalse();
}
[Test]
public void should_not_match_negated_when_one_language_matches()
{
Subject.Value = Language.French.Id;
Subject.Negate = true;
Subject.IsSatisfiedBy(_input).Should().BeFalse();
}
[Test]
public void should_not_match_negated_when_all_languages_do_not_match()
{
Subject.Value = Language.Spanish.Id;
Subject.Negate = true;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
}
}

View File

@@ -0,0 +1,80 @@
using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.CustomFormats;
using NzbDrone.Core.Languages;
using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Core.Tv;
namespace NzbDrone.Core.Test.CustomFormats.Specifications.LanguageSpecification
{
[TestFixture]
public class OriginalLanguageFixture : CoreTest<Core.CustomFormats.LanguageSpecification>
{
private CustomFormatInput _input;
[SetUp]
public void Setup()
{
_input = new CustomFormatInput
{
EpisodeInfo = Builder<ParsedEpisodeInfo>.CreateNew().Build(),
Series = Builder<Series>.CreateNew().With(s => s.OriginalLanguage = Language.English).Build(),
Size = 100.Megabytes(),
Languages = new List<Language>
{
Language.French
},
Filename = "Series.Title.S01E01"
};
}
public void GivenLanguages(params Language[] languages)
{
_input.Languages = languages.ToList();
}
[Test]
public void should_match_same_single_language()
{
GivenLanguages(Language.English);
Subject.Value = Language.Original.Id;
Subject.Negate = false;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
[Test]
public void should_not_match_different_single_language()
{
Subject.Value = Language.Original.Id;
Subject.Negate = false;
Subject.IsSatisfiedBy(_input).Should().BeFalse();
}
[Test]
public void should_not_match_negated_same_single_language()
{
GivenLanguages(Language.English);
Subject.Value = Language.Original.Id;
Subject.Negate = true;
Subject.IsSatisfiedBy(_input).Should().BeFalse();
}
[Test]
public void should_match_negated_different_single_language()
{
Subject.Value = Language.Original.Id;
Subject.Negate = true;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
}
}

View File

@@ -0,0 +1,70 @@
using System.Collections.Generic;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.CustomFormats;
using NzbDrone.Core.Languages;
using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Core.Tv;
namespace NzbDrone.Core.Test.CustomFormats.Specifications.LanguageSpecification
{
[TestFixture]
public class SingleLanguageFixture : CoreTest<Core.CustomFormats.LanguageSpecification>
{
private CustomFormatInput _input;
[SetUp]
public void Setup()
{
_input = new CustomFormatInput
{
EpisodeInfo = Builder<ParsedEpisodeInfo>.CreateNew().Build(),
Series = Builder<Series>.CreateNew().With(s => s.OriginalLanguage = Language.English).Build(),
Size = 100.Megabytes(),
Languages = new List<Language>
{
Language.French
},
Filename = "Series.Title.S01E01"
};
}
[Test]
public void should_match_same_language()
{
Subject.Value = Language.French.Id;
Subject.Negate = false;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
[Test]
public void should_not_match_different_language()
{
Subject.Value = Language.Spanish.Id;
Subject.Negate = false;
Subject.IsSatisfiedBy(_input).Should().BeFalse();
}
[Test]
public void should_not_match_negated_same_language()
{
Subject.Value = Language.French.Id;
Subject.Negate = true;
Subject.IsSatisfiedBy(_input).Should().BeFalse();
}
[Test]
public void should_match_negated_different_language()
{
Subject.Value = Language.Spanish.Id;
Subject.Negate = true;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
}
}

View File

@@ -406,17 +406,6 @@ namespace NzbDrone.Core.Test.ImportListTests
.Verify(v => v.AddSeries(It.Is<List<Series>>(s => s.Count == 3), true), Times.Once());
}
[Test]
public void should_search_if_series_title_and_no_series_id()
{
_importListFetch.Series.ForEach(m => m.ImportListId = 1);
WithList(1, true);
Subject.Execute(_commandAll);
Mocker.GetMock<ISearchForNewSeries>()
.Verify(v => v.SearchForNewSeries(It.IsAny<string>()), Times.Once());
}
[Test]
public void should_not_search_if_series_title_and_series_id()
{

View File

@@ -186,6 +186,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
Path.Combine(_series.Path, "Scenes", "file6.mkv").AsOsAgnostic(),
Path.Combine(_series.Path, "Shorts", "file7.mkv").AsOsAgnostic(),
Path.Combine(_series.Path, "Trailers", "file8.mkv").AsOsAgnostic(),
Path.Combine(_series.Path, "Other", "file9.mkv").AsOsAgnostic(),
Path.Combine(_series.Path, "Series Title S01E01 (1080p BluRay x265 10bit Tigole).mkv").AsOsAgnostic(),
});

View File

@@ -0,0 +1,94 @@
using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.CustomFormats;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Organizer;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Core.Tv;
namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests
{
[TestFixture]
public class TruncatedReleaseGroupFixture : CoreTest<FileNameBuilder>
{
private Series _series;
private List<Episode> _episodes;
private EpisodeFile _episodeFile;
private NamingConfig _namingConfig;
[SetUp]
public void Setup()
{
_series = Builder<Series>
.CreateNew()
.With(s => s.Title = "Series Title")
.Build();
_namingConfig = NamingConfig.Default;
_namingConfig.MultiEpisodeStyle = 0;
_namingConfig.RenameEpisodes = true;
Mocker.GetMock<INamingConfigService>()
.Setup(c => c.GetConfig()).Returns(_namingConfig);
_episodes = new List<Episode>
{
Builder<Episode>.CreateNew()
.With(e => e.Title = "Episode Title 1")
.With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumber = 1)
.Build()
};
_episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.HDTV720p), ReleaseGroup = "SonarrTest" };
Mocker.GetMock<IQualityDefinitionService>()
.Setup(v => v.Get(Moq.It.IsAny<Quality>()))
.Returns<Quality>(v => Quality.DefaultQualityDefinitions.First(c => c.Quality == v));
Mocker.GetMock<ICustomFormatService>()
.Setup(v => v.All())
.Returns(new List<CustomFormat>());
}
private void GivenProper()
{
_episodeFile.Quality.Revision.Version = 2;
}
[Test]
public void should_truncate_from_beginning()
{
_series.Title = "The Fantastic Life of Mr. Sisko";
_episodeFile.Quality.Quality = Quality.Bluray1080p;
_episodeFile.ReleaseGroup = "IWishIWasALittleBitTallerIWishIWasABallerIWishIHadAGirlWhoLookedGoodIWouldCallHerIWishIHadARabbitInAHatWithABatAndASixFourImpala";
_episodes = _episodes.Take(1).ToList();
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title} {Quality Full}-{ReleaseGroup:12}";
var result = Subject.BuildFileName(_episodes, _series, _episodeFile, ".mkv");
result.Length.Should().BeLessOrEqualTo(255);
result.Should().Be("The Fantastic Life of Mr. Sisko - S01E01 - Episode Title 1 Bluray-1080p-IWishIWas....mkv");
}
[Test]
public void should_truncate_from_from_end()
{
_series.Title = "The Fantastic Life of Mr. Sisko";
_episodeFile.Quality.Quality = Quality.Bluray1080p;
_episodeFile.ReleaseGroup = "IWishIWasALittleBitTallerIWishIWasABallerIWishIHadAGirlWhoLookedGoodIWouldCallHerIWishIHadARabbitInAHatWithABatAndASixFourImpala";
_episodes = _episodes.Take(1).ToList();
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title} {Quality Full}-{ReleaseGroup:-17}";
var result = Subject.BuildFileName(_episodes, _series, _episodeFile, ".mkv");
result.Length.Should().BeLessOrEqualTo(255);
result.Should().Be("The Fantastic Life of Mr. Sisko - S01E01 - Episode Title 1 Bluray-1080p-...ASixFourImpala.mkv");
}
}
}

View File

@@ -0,0 +1,57 @@
using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.CustomFormats;
using NzbDrone.Core.Organizer;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Core.Tv;
namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests
{
[TestFixture]
public class TruncatedSeriesTitleFixture : CoreTest<FileNameBuilder>
{
private Series _series;
private NamingConfig _namingConfig;
[SetUp]
public void Setup()
{
_series = Builder<Series>
.CreateNew()
.With(s => s.Title = "Series Title")
.Build();
_namingConfig = NamingConfig.Default;
_namingConfig.MultiEpisodeStyle = 0;
_namingConfig.RenameEpisodes = true;
Mocker.GetMock<INamingConfigService>()
.Setup(c => c.GetConfig()).Returns(_namingConfig);
Mocker.GetMock<IQualityDefinitionService>()
.Setup(v => v.Get(Moq.It.IsAny<Quality>()))
.Returns<Quality>(v => Quality.DefaultQualityDefinitions.First(c => c.Quality == v));
Mocker.GetMock<ICustomFormatService>()
.Setup(v => v.All())
.Returns(new List<CustomFormat>());
}
[TestCase("{Series Title:16}", "The Fantastic...")]
[TestCase("{Series TitleThe:17}", "Fantastic Life...")]
[TestCase("{Series CleanTitle:-13}", "...Mr. Sisko")]
public void should_truncate_series_title(string format, string expected)
{
_series.Title = "The Fantastic Life of Mr. Sisko";
_namingConfig.SeriesFolderFormat = format;
var result = Subject.GetSeriesFolder(_series, _namingConfig);
result.Should().Be(expected);
}
}
}

View File

@@ -76,6 +76,7 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("Series T Se.3 afl.3 en 4", "Series T", 3, new[] { 3, 4 })]
[TestCase("Series Title (S15E06-08) City Sushi", "Series Title", 15, new[] { 6, 7, 8 })]
[TestCase("Босх: Спадок (S2E1-4) / Series: Legacy (S2E1-4) (2023) WEB-DL 1080p Ukr/Eng | sub Eng", "Series: Legacy", 2, new[] { 1, 2, 3, 4 })]
[TestCase("Босх: Спадок / Series: Legacy / S2E1-4 of 10 (2023) WEB-DL 1080p Ukr/Eng | sub Eng", "Series: Legacy", 2, new[] { 1, 2, 3, 4 })]
// [TestCase("", "", , new [] { })]
public void should_parse_multiple_episodes(string postTitle, string title, int season, int[] episodes)

View File

@@ -94,6 +94,7 @@ namespace NzbDrone.Core.Test.ParserTests
}
[TestCase("Босх: Спадок (S2E1) / Series: Legacy (S2E1) (2023) WEB-DL 1080p Ukr/Eng | sub Eng", "Босх: Спадок", "Series: Legacy")]
[TestCase("Босх: Спадок / Series: Legacy / S2E1-4 of 10 (2023) WEB-DL 1080p Ukr/Eng | sub Eng", "Босх: Спадок", "Series: Legacy")]
public void should_parse_multiple_series_titles(string postTitle, params string[] titles)
{
var seriesTitleInfo = Parser.Parser.ParseTitle(postTitle).SeriesTitleInfo;

View File

@@ -83,6 +83,7 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("Series Title (2012) - S01E01 - Episode 1 (1080p BluRay x265 r00t).mkv", "r00t")]
[TestCase("Series Title - S01E01 - Girls Gone Wild Exposed (720p x265 EDGE2020).mkv", "EDGE2020")]
[TestCase("Series.Title.S01E02.1080p.BluRay.Remux.AVC.FLAC.2.0-E.N.D", "E.N.D")]
[TestCase("Show Name (2016) Season 1 S01 (1080p AMZN WEB-DL x265 HEVC 10bit EAC3 5 1 RZeroX) QxR", "RZeroX")]
public void should_parse_exception_release_group(string title, string expected)
{
Parser.Parser.ParseReleaseGroup(title).Should().Be(expected);

View File

@@ -165,6 +165,7 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("Series Title [HDTV][Cap.402](website.com).avi", "Series Title", 4, 2)]
[TestCase("Series Title [HDTV 720p][Cap.101](website.com).mkv", "Series Title", 1, 1)]
[TestCase("Босх: Спадок (S2E1) / Series: Legacy (S2E1) (2023) WEB-DL 1080p Ukr/Eng | sub Eng", "Series: Legacy", 2, 1)]
[TestCase("Босх: Спадок / Series: Legacy / S2E1 of 10 (2023) WEB-DL 1080p Ukr/Eng | sub Eng", "Series: Legacy", 2, 1)]
// [TestCase("", "", 0, 0)]
public void should_parse_single_episode(string postTitle, string title, int seasonNumber, int episodeNumber)
@@ -211,5 +212,19 @@ namespace NzbDrone.Core.Test.ParserTests
result.FullSeason.Should().BeFalse();
result.Special.Should().BeTrue();
}
[TestCase("Series.Title.S06E01b.Fade.Out.Fade.in.Part.2.1080p.DSNP.WEB-DL.AAC2.0.H.264-FLUX", "Series Title", 6, 1)]
public void should_parse_split_episode(string postTitle, string title, int seasonNumber, int episodeNumber)
{
var result = Parser.Parser.ParseTitle(postTitle);
result.Should().NotBeNull();
result.EpisodeNumbers.Should().HaveCount(1);
result.SeasonNumber.Should().Be(seasonNumber);
result.EpisodeNumbers.First().Should().Be(episodeNumber);
result.SeriesTitle.Should().Be(title);
result.AbsoluteEpisodeNumbers.Should().BeEmpty();
result.FullSeason.Should().BeFalse();
result.IsSplitEpisode.Should().BeTrue();
}
}
}

View File

@@ -20,7 +20,7 @@ namespace NzbDrone.Core.CustomFormats
public abstract NzbDroneValidationResult Validate();
public bool IsSatisfiedBy(CustomFormatInput input)
public virtual bool IsSatisfiedBy(CustomFormatInput input)
{
var match = IsSatisfiedByWithoutNegate(input);

View File

@@ -30,6 +30,16 @@ namespace NzbDrone.Core.CustomFormats
[FieldDefinition(1, Label = "CustomFormatsSpecificationLanguage", Type = FieldType.Select, SelectOptions = typeof(LanguageFieldConverter))]
public int Value { get; set; }
public override bool IsSatisfiedBy(CustomFormatInput input)
{
if (Negate)
{
return IsSatisfiedByWithNegate(input);
}
return IsSatisfiedByWithoutNegate(input);
}
protected override bool IsSatisfiedByWithoutNegate(CustomFormatInput input)
{
var comparedLanguage = input.EpisodeInfo != null && input.Series != null && Value == Language.Original.Id && input.Series.OriginalLanguage != Language.Unknown
@@ -39,6 +49,15 @@ namespace NzbDrone.Core.CustomFormats
return input.Languages?.Contains(comparedLanguage) ?? false;
}
private bool IsSatisfiedByWithNegate(CustomFormatInput input)
{
var comparedLanguage = input.EpisodeInfo != null && input.Series != null && Value == Language.Original.Id && input.Series.OriginalLanguage != Language.Unknown
? input.Series.OriginalLanguage
: (Language)Value;
return !input.Languages?.Contains(comparedLanguage) ?? false;
}
public override NzbDroneValidationResult Validate()
{
return new NzbDroneValidationResult(Validator.Validate(this));

View File

@@ -0,0 +1,69 @@
using System.Data;
using System.Text.RegularExpressions;
using FluentMigrator;
using NLog;
using NzbDrone.Common.Instrumentation;
namespace NzbDrone.Core.Datastore.Migration
{
[Maintenance(MigrationStage.BeforeAll, TransactionBehavior.None)]
public class DatabaseEngineVersionCheck : FluentMigrator.Migration
{
protected readonly Logger _logger;
public DatabaseEngineVersionCheck()
{
_logger = NzbDroneLogger.GetLogger(this);
}
public override void Up()
{
IfDatabase("sqlite").Execute.WithConnection(LogSqliteVersion);
IfDatabase("postgres").Execute.WithConnection(LogPostgresVersion);
}
public override void Down()
{
// No-op
}
private void LogSqliteVersion(IDbConnection conn, IDbTransaction tran)
{
using (var versionCmd = conn.CreateCommand())
{
versionCmd.Transaction = tran;
versionCmd.CommandText = "SELECT sqlite_version();";
using (var reader = versionCmd.ExecuteReader())
{
while (reader.Read())
{
var version = reader.GetString(0);
_logger.Info("SQLite {0}", version);
}
}
}
}
private void LogPostgresVersion(IDbConnection conn, IDbTransaction tran)
{
using (var versionCmd = conn.CreateCommand())
{
versionCmd.Transaction = tran;
versionCmd.CommandText = "SHOW server_version";
using (var reader = versionCmd.ExecuteReader())
{
while (reader.Read())
{
var version = reader.GetString(0);
var cleanVersion = Regex.Replace(version, @"\(.*?\)", "");
_logger.Info("Postgres {0}", cleanVersion);
}
}
}
}
}
}

View File

@@ -42,12 +42,13 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
serviceProvider = new ServiceCollection()
.AddLogging(b => b.AddNLog())
.AddFluentMigratorCore()
.Configure<RunnerOptions>(cfg => cfg.IncludeUntaggedMaintenances = true)
.ConfigureRunner(
builder => builder
.AddPostgres()
.AddNzbDroneSQLite()
.WithGlobalConnectionString(connectionString)
.WithMigrationsIn(Assembly.GetExecutingAssembly()))
.ScanIn(Assembly.GetExecutingAssembly()).For.All())
.Configure<TypeFilterOptions>(opt => opt.Namespace = "NzbDrone.Core.Datastore.Migration")
.Configure<ProcessorOptions>(opt =>
{

View File

@@ -0,0 +1,30 @@
using NLog;
using NzbDrone.Core.IndexerSearch.Definitions;
using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.DecisionEngine.Specifications
{
public class SplitEpisodeSpecification : IDecisionEngineSpecification
{
private readonly Logger _logger;
public SplitEpisodeSpecification(Logger logger)
{
_logger = logger;
}
public SpecificationPriority Priority => SpecificationPriority.Default;
public RejectionType Type => RejectionType.Permanent;
public virtual Decision IsSatisfiedBy(RemoteEpisode subject, SearchCriteriaBase searchCriteria)
{
if (subject.ParsedEpisodeInfo.IsSplitEpisode)
{
_logger.Debug("Split episode release {0} rejected. Not supported", subject.Release.Title);
return Decision.Reject("Split episode releases are not supported");
}
return Decision.Accept();
}
}
}

View File

@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using NLog;
using NzbDrone.Common.Cache;
using NzbDrone.Common.Http;

View File

@@ -45,11 +45,10 @@ namespace NzbDrone.Core.Download.Clients.Transmission
[FieldToken(TokenField.HelpText, "UseSsl", "clientName", "Transmission")]
public bool UseSsl { get; set; }
[FieldDefinition(3, Label = "UrlBase", Type = FieldType.Textbox, Advanced = true, HelpText = "Adds a prefix to the transmission rpc url, eg http://[host]:[port]/[urlBase]/rpc, defaults to '/transmission/'")]
[FieldDefinition(3, Label = "UrlBase", Type = FieldType.Textbox, Advanced = true, HelpText = "DownloadClientTransmissionSettingsUrlBaseHelpText")]
[FieldToken(TokenField.HelpText, "UrlBase", "clientName", "Transmission")]
[FieldToken(TokenField.HelpText, "UrlBase", "url", "http://[host]:[port]/[urlBase]/rpc")]
[FieldToken(TokenField.HelpText, "UrlBase", "defaultUrl", "/transmission/")]
public string UrlBase { get; set; }
[FieldDefinition(4, Label = "Username", Type = FieldType.Textbox, Privacy = PrivacyLevel.UserName)]

View File

@@ -96,6 +96,8 @@ namespace NzbDrone.Core.Download
if (series == null)
{
trackedDownload.Warn("Series title mismatch; automatic import is not possible. Check the download troubleshooting entry on the wiki for common causes.");
SendManualInteractionRequiredNotification(trackedDownload);
return;
}
@@ -106,16 +108,7 @@ namespace NzbDrone.Core.Download
if (seriesMatchType == SeriesMatchType.Id && releaseSource != ReleaseSourceType.InteractiveSearch)
{
trackedDownload.Warn("Found matching series via grab history, but release was matched to series by ID. Automatic import is not possible. See the FAQ for details.");
if (!trackedDownload.HasNotifiedManualInteractionRequired)
{
trackedDownload.HasNotifiedManualInteractionRequired = true;
var releaseInfo = new GrabbedReleaseInfo(grabbedHistories);
var manualInteractionEvent = new ManualInteractionRequiredEvent(trackedDownload, releaseInfo);
_eventAggregator.PublishEvent(manualInteractionEvent);
}
SendManualInteractionRequiredNotification(trackedDownload);
return;
}
@@ -136,6 +129,8 @@ namespace NzbDrone.Core.Download
if (trackedDownload.RemoteEpisode == null)
{
trackedDownload.Warn("Unable to parse download, automatic import is not possible.");
SendManualInteractionRequiredNotification(trackedDownload);
return;
}
@@ -192,6 +187,7 @@ namespace NzbDrone.Core.Download
if (statusMessages.Any())
{
trackedDownload.Warn(statusMessages.ToArray());
SendManualInteractionRequiredNotification(trackedDownload);
}
}
@@ -258,6 +254,21 @@ namespace NzbDrone.Core.Download
return false;
}
private void SendManualInteractionRequiredNotification(TrackedDownload trackedDownload)
{
if (!trackedDownload.HasNotifiedManualInteractionRequired)
{
var grabbedHistories = _historyService.FindByDownloadId(trackedDownload.DownloadItem.DownloadId).Where(h => h.EventType == EpisodeHistoryEventType.Grabbed).ToList();
trackedDownload.HasNotifiedManualInteractionRequired = true;
var releaseInfo = grabbedHistories.Count > 0 ? new GrabbedReleaseInfo(grabbedHistories) : null;
var manualInteractionEvent = new ManualInteractionRequiredEvent(trackedDownload, releaseInfo);
_eventAggregator.PublishEvent(manualInteractionEvent);
}
}
private void SetImportItem(TrackedDownload trackedDownload)
{
trackedDownload.ImportItem = _provideImportItemService.ProvideImportItem(trackedDownload.DownloadItem, trackedDownload.ImportItem);

View File

@@ -196,31 +196,30 @@ namespace NzbDrone.Core.Download
private async Task<ProcessedDecisionResult> ProcessDecisionInternal(DownloadDecision decision, int? downloadClientId = null)
{
var remoteEpisode = decision.RemoteEpisode;
var remoteIndexer = remoteEpisode.Release.Indexer;
try
{
_logger.Trace("Grabbing from Indexer {0} at priority {1}.", remoteEpisode.Release.Indexer, remoteEpisode.Release.IndexerPriority);
_logger.Trace("Grabbing release '{0}' from Indexer {1} at priority {2}.", remoteEpisode, remoteIndexer, remoteEpisode.Release.IndexerPriority);
await _downloadService.DownloadReport(remoteEpisode, downloadClientId);
return ProcessedDecisionResult.Grabbed;
}
catch (ReleaseUnavailableException)
{
_logger.Warn("Failed to download release from indexer, no longer available. " + remoteEpisode);
_logger.Warn("Failed to download release '{0}' from Indexer {1}. Release not available", remoteEpisode, remoteIndexer);
return ProcessedDecisionResult.Rejected;
}
catch (Exception ex)
{
if (ex is DownloadClientUnavailableException || ex is DownloadClientAuthenticationException)
{
_logger.Debug(ex,
"Failed to send release to download client, storing until later. " + remoteEpisode);
_logger.Debug(ex, "Failed to send release '{0}' from Indexer {1} to download client, storing until later.", remoteEpisode, remoteIndexer);
return ProcessedDecisionResult.Failed;
}
else
{
_logger.Warn(ex, "Couldn't add report to download queue. " + remoteEpisode);
_logger.Warn(ex, "Couldn't add release '{0}' from Indexer {1} to download queue.", remoteEpisode, remoteIndexer);
return ProcessedDecisionResult.Skipped;
}
}

View File

@@ -190,19 +190,6 @@ namespace NzbDrone.Core.ImportLists
item.Title = mappedSeries.Title;
}
// Map TVDb if we only have a series name
if (item.TvdbId <= 0 && item.Title.IsNotNullOrWhiteSpace())
{
var mappedSeries = _seriesSearchService.SearchForNewSeries(item.Title)
.FirstOrDefault();
if (mappedSeries != null)
{
item.TvdbId = mappedSeries.TvdbId;
item.Title = mappedSeries?.Title;
}
}
// Check to see if series excluded
var excludedSeries = listExclusions.Where(s => s.TvdbId == item.TvdbId).SingleOrDefault();

View File

@@ -402,7 +402,7 @@ namespace NzbDrone.Core.Indexers.Newznab
searchCriteria.SeasonNumber > 0 &&
searchCriteria.EpisodeNumber > 0;
if (includeAnimeStandardFormatSearch)
if (includeAnimeStandardFormatSearch && SupportsEpisodeSearch)
{
AddTvIdPageableRequests(pageableRequests,
Settings.AnimeCategories,
@@ -419,7 +419,7 @@ namespace NzbDrone.Core.Indexers.Newznab
"search",
$"&q={NewsnabifyTitle(queryTitle)}+{searchCriteria.AbsoluteEpisodeNumber:00}"));
if (includeAnimeStandardFormatSearch)
if (includeAnimeStandardFormatSearch && SupportsEpisodeSearch)
{
pageableRequests.Add(GetPagedRequests(MaxPages,
Settings.AnimeCategories,

View File

@@ -1,3 +1,21 @@
{
"Absolute": "Absolut"
"Absolute": "Absolut",
"AbsoluteEpisodeNumber": "Absolut Episode-nummer",
"AddConditionError": "Kan ikke tilføje en ny betingelse, prøv igen.",
"AddAutoTagError": "Kan ikke tilføje en ny liste, prøv igen.",
"AddConnection": "Tilføj forbindelse",
"AddCustomFormat": "Tilføj tilpasset format",
"AddCustomFormatError": "Kunne ikke tilføje et nyt tilpasset format, prøv igen.",
"AddDelayProfile": "Tilføj forsinkelsesprofil",
"AddCondition": "Tilføj betingelse",
"AddAutoTag": "Tilføj automatisk Tag",
"AbsoluteEpisodeNumbers": "Absolutte Episode-numre",
"Add": "Tilføj",
"Activity": "Aktivitet",
"About": "Om",
"Actions": "Handlinger",
"AddANewPath": "Tilføj en ny sti",
"AddConditionImplementation": "Tilføj betingelse - {implementationName}",
"AddConnectionImplementation": "Tilføj forbindelse - {implementationName}",
"AddCustomFilter": "Tilføj tilpasset filter"
}

View File

@@ -792,5 +792,6 @@
"Branch": "Branch",
"Airs": "Wird ausgestrahlt",
"AddRootFolderError": "Stammverzeichnis kann nicht hinzugefügt werden",
"IconForCutoffUnmet": "Symbol für Schwelle nicht erreicht"
"IconForCutoffUnmet": "Symbol für Schwelle nicht erreicht",
"DownloadClientSettingsAddPaused": "Pausiert hinzufügen"
}

View File

@@ -18,6 +18,7 @@
"AddCustomFormat": "Add Custom Format",
"AddCustomFormatError": "Unable to add a new custom format, please try again.",
"AddDelayProfile": "Add Delay Profile",
"AddDelayProfileError": "Unable to add a new delay profile, please try again.",
"AddDownloadClient": "Add Download Client",
"AddDownloadClientError": "Unable to add a new download client, please try again.",
"AddDownloadClientImplementation": "Add Download Client - {implementationName}",
@@ -767,8 +768,8 @@
"IconForSpecials": "Icon for Specials",
"IconForSpecialsHelpText": "Show icon for special episodes (season 0)",
"IgnoreDownload": "Ignore Download",
"IgnoreDownloads": "Ignore Downloads",
"IgnoreDownloadHint": "Stops {appName} from processing this download further",
"IgnoreDownloads": "Ignore Downloads",
"IgnoreDownloadsHint": "Stops {appName} from processing these downloads further",
"Ignored": "Ignored",
"IgnoredAddresses": "Ignored Addresses",
@@ -1624,9 +1625,9 @@
"RemoveFromQueue": "Remove from queue",
"RemoveMultipleFromDownloadClientHint": "Removes downloads and files from download client",
"RemoveQueueItem": "Remove - {sourceTitle}",
"RemoveQueueItemRemovalMethodHelpTextWarning": "'Remove from Download Client' will remove the download and the file(s) from the download client.",
"RemoveQueueItemConfirmation": "Are you sure you want to remove '{sourceTitle}' from the queue?",
"RemoveQueueItemRemovalMethod": "Removal Method",
"RemoveQueueItemRemovalMethodHelpTextWarning": "'Remove from Download Client' will remove the download and the file(s) from the download client.",
"RemoveQueueItemsRemovalMethodHelpTextWarning": "'Remove from Download Client' will remove the downloads and the files from the download client.",
"RemoveRootFolder": "Remove root folder",
"RemoveSelected": "Remove Selected",

View File

@@ -57,7 +57,7 @@
"Condition": "Condición",
"Component": "Componente",
"Custom": "Personalizado",
"Cutoff": "Requisito",
"Cutoff": "Umbral",
"Dates": "Fechas",
"Debug": "Debug",
"Date": "Fecha",
@@ -181,7 +181,7 @@
"AddNewSeriesError": "Falló al cargar los resultados de la búsqueda, inténtelo de nuevo.",
"AddNewSeriesHelpText": "Es fácil añadir una nueva serie, empiece escribiendo el nombre de la serie que desea añadir.",
"AddNewSeriesRootFolderHelpText": "La subcarpeta '{folder}' será creada automáticamente",
"AddNewSeriesSearchForCutoffUnmetEpisodes": "Empezar la búsqueda de episodios con requisitos no cumplidos",
"AddNewSeriesSearchForCutoffUnmetEpisodes": "Empezar la búsqueda de episodios con umbrales no alcanzados",
"AddNewSeriesSearchForMissingEpisodes": "Empezar búsqueda de episodios faltantes",
"AddQualityProfile": "Añadir Perfil de Calidad",
"AddQualityProfileError": "No se pudo añadir un nuevo perfil de calidad, inténtelo de nuevo.",
@@ -436,7 +436,7 @@
"CustomFormatsLoadError": "No se pueden cargar formatos personalizados",
"CustomFormatsSettings": "Configuración de formatos personalizados",
"CustomFormatsSettingsSummary": "Formatos y configuraciones personalizados",
"CutoffUnmet": "Límite no alcanzado",
"CutoffUnmet": "Umbrales no alcanzados",
"DailyEpisodeFormat": "Formato de episodio diario",
"Database": "Base de datos",
"DelayMinutes": "{delay} Minutos",
@@ -469,8 +469,8 @@
"DelayProfileProtocol": "Protocolo: {preferredProtocol}",
"DelayProfilesLoadError": "Incapaz de cargar Perfiles de Retardo",
"ContinuingSeriesDescription": "Se esperan más episodios u otra temporada",
"CutoffUnmetLoadError": "Error cargando objetos con condiciones de corte incumplidas",
"CutoffUnmetNoItems": "Sin objetos sin condiciones de corte incumplidas",
"CutoffUnmetLoadError": "Error cargando elementos con umbrales no alcanzados",
"CutoffUnmetNoItems": "No hay elementos con umbrales no alcanzados",
"DelayProfile": "Perfil de retardo",
"Delete": "Eliminar",
"DeleteDelayProfile": "Eliminar Perfil de Retardo",
@@ -877,5 +877,194 @@
"EnableRssHelpText": "Se usará cuando {appName} busque periódicamente lanzamientos vía Sincronización RSS",
"EndedSeriesDescription": "No se esperan episodios o temporadas adicionales",
"EpisodeFileDeleted": "Archivo de episodio eliminado",
"EpisodeFileDeletedTooltip": "Archivo de episodio eliminado"
"EpisodeFileDeletedTooltip": "Archivo de episodio eliminado",
"Health": "Salud",
"Here": "aquí",
"Host": "Host",
"HideEpisodes": "Ocultar episodios",
"Hostname": "Nombre de host",
"ICalSeasonPremieresOnlyHelpText": "Solo el primer episodio de una temporada estará en el feed",
"ImportExistingSeries": "Importar series existentes",
"ImportErrors": "Importar errores",
"ImportList": "Importar lista",
"ImportListSettings": "Importar ajustes de lista",
"ImportListsSettingsSummary": "Importar desde otra instancia de {appName} o desde listas de Trakt y gestionar listas de exclusiones",
"IncludeCustomFormatWhenRenamingHelpText": "Incluir en formato de renombrado {Custom Formats}",
"QualityCutoffNotMet": "Calidad del umbral que no ha sido alcanzado",
"SearchForCutoffUnmetEpisodesConfirmationCount": "¿Estás seguro que quieres buscar los {totalRecords} episodios en Umbrales no alcanzados?",
"IndexerOptionsLoadError": "No se pudo cargar las opciones del indexador",
"IndexerIPTorrentsSettingsFeedUrl": "URL de feed",
"ICalFeed": "Feed de iCal",
"Import": "Importar",
"ImportFailed": "La importación falló: {sourceTitle}",
"HiddenClickToShow": "Oculto, click para mostrar",
"HttpHttps": "HTTP(S)",
"ICalLink": "Enlace de iCal",
"IconForFinalesHelpText": "Muestra un icono para finales de series/temporadas basado en la información de episodio disponible",
"HideAdvanced": "Ocultar avanzado",
"ICalShowAsAllDayEventsHelpText": "Los eventos aparecerán como eventos para todo el día en tu calendario",
"IRCLinkText": "#sonarr en Libera",
"IconForSpecialsHelpText": "Muestra un icono para episodios especiales (temporada 0)",
"IgnoredAddresses": "Ignorar direcciones",
"ImdbId": "ID de IMDb",
"ImportCustomFormat": "Importar formato personalizado",
"ImportExtraFiles": "Importar archivos adicionales",
"ImportExtraFilesEpisodeHelpText": "Importa archivos adicionales (subtítulos, nfo, etc) tras importar un archivo de episodio",
"ImportListExclusionsLoadError": "No se pudo cargar Importar lista de exclusiones",
"ImportListStatusUnavailableHealthCheckMessage": "Listas no disponibles debido a fallos: {importListNames}",
"ImportListsAniListSettingsAuthenticateWithAniList": "Autenticar con AniList",
"ImportListsAniListSettingsImportCompletedHelpText": "Lista: Vistos por completo",
"ImportListsAniListSettingsImportDroppedHelpText": "Lista: Abandonados",
"ImportListsAniListSettingsImportFinished": "Importación Finalizados",
"ImportListsAniListSettingsImportDropped": "Importar Abandonados",
"ImportListsAniListSettingsImportFinishedHelpText": "Medios: Todos los episodios se han emitido",
"ImportListsAniListSettingsImportHiatus": "Importar En hiatus",
"ImportListsAniListSettingsImportNotYetReleasedHelpText": "Medios: La emisión aún no ha empezado",
"ImportListsAniListSettingsImportPausedHelpText": "Lista: En espera",
"ImportListsAniListSettingsImportPaused": "Importar En pausa",
"ImportListsAniListSettingsImportReleasingHelpText": "Medios: Nuevos episodios actualmente en emisión",
"ImportListsAniListSettingsImportWatching": "Importar Viendo",
"ImportListsAniListSettingsImportRepeatingHelpText": "Lista: Revisionando actualmente",
"ImportListsAniListSettingsImportRepeating": "Importar Repitiendo",
"ImportListsAniListSettingsImportReleasing": "Importar En lanzamiento",
"ImportListsAniListSettingsUsernameHelpText": "Nombre de usuario de la lista de la que importar",
"ImportListsCustomListSettingsUrlHelpText": "La URL para la lista de series",
"ImportListsCustomListValidationAuthenticationFailure": "Fallo de autenticación",
"ImportListsCustomListValidationConnectionError": "No se pudo hacer la petición a esa URL. Código de estado: {exceptionStatusCode}",
"ImportListsImdbSettingsListId": "ID de lista",
"ImportListsImdbSettingsListIdHelpText": "ID de lista de IMDb (p. ej. ls12345678)",
"ImportListsLoadError": "No se pudo cargas Importar listas",
"ImportListsPlexSettingsAuthenticateWithPlex": "Autenticar con Plex.tv",
"ImportListsPlexSettingsWatchlistName": "Lista de seguimiento de Plex",
"ImportListsSettingsExpires": "Expira",
"ImportListsSettingsAccessToken": "Token de acceso",
"ImportListsSettingsRefreshToken": "Token de refresco",
"ImportListsSettingsAuthUser": "Autenticación de usuario",
"ImportListsSettingsRssUrl": "URL de RSS",
"ImportListsSimklSettingsAuthenticatewithSimkl": "Autenticar con Simkl",
"ImportListsSimklSettingsListType": "Tipo de lista",
"ImportListsSimklSettingsShowType": "Mostrar tipo",
"ImportListsSimklSettingsShowTypeHelpText": "Tipo de show del que deseas importar",
"ImportListsSimklSettingsUserListTypeCompleted": "Completados",
"ImportListsSimklSettingsUserListTypeHold": "En espera",
"ImportListsSimklSettingsUserListTypeDropped": "Abandonados",
"ImportListsSimklSettingsUserListTypePlanToWatch": "Planeado ver",
"ImportListsSimklSettingsUserListTypeWatching": "Viendo",
"ImportListsSonarrSettingsApiKeyHelpText": "Clave API de la instancia de {appName} de la que importar",
"ImportListsSonarrSettingsFullUrl": "URL completa",
"ImportListsSonarrSettingsQualityProfilesHelpText": "Perfiles de calidad de la instancia de la fuente de la que importar",
"ImportListsSonarrSettingsRootFoldersHelpText": "Carpetas raíz de la instancia de la fuente de la que importar",
"ImportListsTraktSettingsAdditionalParameters": "Parámetros adicionales",
"ImportListsTraktSettingsAdditionalParametersHelpText": "Parámetros adicionales de la API de Trakt",
"ImportListsTraktSettingsAuthenticateWithTrakt": "Autenticar con Trakt",
"ImportListsTraktSettingsGenresHelpText": "Filtrar series por género de Trakt (separados por coma) solo para listas populares",
"ImportListsTraktSettingsGenres": "Géneros",
"ImportListsTraktSettingsLimitHelpText": "Limita el número de series a obtener",
"ImportListsTraktSettingsLimit": "Limitar",
"ImportListsTraktSettingsListType": "Tipo de lista",
"ImportListsTraktSettingsPopularListTypeRecommendedAllTimeShows": "Shows recomendados de todos los tiempos",
"ImportListsTraktSettingsPopularListTypeRecommendedWeekShows": "Shows recomendados por semana",
"ImportListsTraktSettingsPopularListTypeRecommendedMonthShows": "Shows recomendados por mes",
"ImportListsTraktSettingsPopularListTypeTopAllTimeShows": "Top de series vistas de todos los tiempos",
"ImportListsTraktSettingsPopularListTypeTopMonthShows": "Top de series vistas por mes",
"ImportListsTraktSettingsPopularListTypeTopYearShows": "Top de series vistas por año",
"ImportListsTraktSettingsPopularListTypeTrendingShows": "Shows en tendencia",
"ImportListsTraktSettingsPopularName": "Lista popular de Trakt",
"ImportListsTraktSettingsRating": "Calificación",
"ImportListsTraktSettingsRatingHelpText": "Filtrar series por rango de calificación (0-100)",
"ImportListsTraktSettingsUserListName": "Usuario de Trakt",
"ImportListsTraktSettingsUserListTypeCollection": "Lista de colecciones de usuario",
"ImportListsTraktSettingsUserListTypeWatch": "Lista de seguimiento de usuario",
"ImportListsTraktSettingsUserListTypeWatched": "Lista de vistos de usuario",
"ImportListsTraktSettingsUserListUsernameHelpText": "Usuario para la lista de la que importar (dejar vacío para usar Autenticación de usuario)",
"ImportListsTraktSettingsUsernameHelpText": "Usuario para la lista de la que importar",
"ImportListsTraktSettingsWatchedListFilter": "Filtrar lista de vistos",
"ImportListsTraktSettingsWatchedListFilterHelpText": "Si el tipo de vista es Vistos, selecciona el tipo de series que quieres importar",
"ImportListsTraktSettingsWatchedListSorting": "Ordenar la lista de vistos",
"ImportListsTraktSettingsWatchedListSortingHelpText": "Si el tipo de lista es Vistos, selecciona el orden para ordenar la lista",
"ImportListsTraktSettingsWatchedListTypeCompleted": "100% vistos",
"ImportListsTraktSettingsWatchedListTypeAll": "Todos",
"ImportListsTraktSettingsWatchedListTypeInProgress": "En progreso",
"ImportListsTraktSettingsYears": "Años",
"ImportListsValidationInvalidApiKey": "La clave API es inválida",
"ImportListsValidationTestFailed": "El test fue abortado debido a un error: {exceptionMessage}",
"ImportScriptPathHelpText": "La ruta al script a usar para importar",
"ImportUsingScriptHelpText": "Copiar archivos para importar usando un script (p. ej. para transcodificación)",
"Importing": "Importando",
"IncludeUnmonitored": "Incluir sin monitorizar",
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Ningún indexador disponible debido a fallos durante más de 6 horas",
"IRC": "IRC",
"ICalShowAsAllDayEvents": "Mostrar como eventos para todo el día",
"IndexerHDBitsSettingsCategories": "Categorías",
"IndexerHDBitsSettingsCategoriesHelpText": "Si no se especifica, se usan todas las opciones.",
"HomePage": "Página principal",
"ImportSeries": "Importar series",
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexadores no disponibles debido a fallos durante más de 6 horas: {indexerNames}",
"IndexerIPTorrentsSettingsFeedUrlHelpText": "La URL completa de feed RSS generada por IPTorrents, usa solo las categorías que seleccionaste (HD, SD, x264, etc...)",
"ICalIncludeUnmonitoredEpisodesHelpText": "Incluye episodios sin monitorizar en el feed de iCal",
"Forecast": "Previsión",
"IndexerDownloadClientHelpText": "Especifica qué cliente de descarga es usado para capturas desde este indexador",
"IndexerHDBitsSettingsCodecs": "Códecs",
"IndexerHDBitsSettingsCodecsHelpText": "Si no se especifica, se usan todas las opciones.",
"IndexerHDBitsSettingsMediumsHelpText": "Si no se especifica, se usan todas las opciones.",
"IndexerPriority": "Prioridad del indexador",
"IconForFinales": "Icono para Finales",
"IgnoreDownload": "Ignorar descarga",
"IgnoreDownloads": "Ignorar descargas",
"IgnoreDownloadHint": "Detiene {appName} de procesar esta descarga más adelante",
"IgnoreDownloadsHint": "Detiene {appName} de procesar estas descargas más adelante",
"Images": "Imágenes",
"ImportCountSeries": "Importar {selectedCount} series",
"ImportListStatusAllUnavailableHealthCheckMessage": "Ninguna lista está disponible debido a fallos",
"ImportLists": "Importar listas",
"ImportListsAniListSettingsImportHiatusHelpText": "Medios: Series en hiatus",
"ImportListsAniListSettingsImportCompleted": "Importación Completados",
"ImportListsAniListSettingsImportCancelledHelpText": "Medios: Series que están canceladas",
"ImportListsCustomListSettingsName": "Lista personalizada",
"ImportListsCustomListSettingsUrl": "URL de la lista",
"ImportListsPlexSettingsWatchlistRSSName": "RSS de lista de seguimiento de Plex",
"ImportListsSimklSettingsListTypeHelpText": "Tipo de lista de la que deseas importar",
"ImportListsSimklSettingsName": "Lista de seguimiento de usuario de Simkl",
"ImportListsSonarrSettingsTagsHelpText": "Etiquetas de la instancia de la fuente de la que importar",
"ImportListsTraktSettingsListName": "Nombre de lista",
"ImportListsTraktSettingsListNameHelpText": "Nombre de lista para importar, la lista debe ser pública o debes tener acceso a la lista",
"ImportListsTraktSettingsListTypeHelpText": "Tipo de lista de la que deseas importar",
"ImportListsTraktSettingsPopularListTypeAnticipatedShows": "Shows anticipados",
"ImportListsTraktSettingsPopularListTypePopularShows": "Shows populares",
"ImportListsTraktSettingsPopularListTypeRecommendedYearShows": "Shows recomendados por año",
"ImportListsTraktSettingsPopularListTypeTopWeekShows": "Top de series vistas por semana",
"ImportListsTraktSettingsYearsHelpText": "Filtrar series por año o un rango de años",
"ImportListsValidationUnableToConnectException": "No se pudo conectar para importar la lista: {exceptionMessage}. Comprueba el registro sobre este error para más detalles.",
"ImportMechanismEnableCompletedDownloadHandlingIfPossibleHealthCheckMessage": "Habilitar Gestión de descargas completadas si es posible",
"ImportMechanismEnableCompletedDownloadHandlingIfPossibleMultiComputerHealthCheckMessage": "Habilitar Gestión de descargas completadas si es posible (Multi-ordenador no soportado)",
"ImportMechanismHandlingDisabledHealthCheckMessage": "Habilitar Gestión de descargas completadas",
"ImportedTo": "Importar a",
"IncludeCustomFormatWhenRenaming": "Incluir formato personalizado cuando se renombra",
"CleanLibraryLevel": "Limpiar el nivel de la librería",
"SearchForCutoffUnmetEpisodes": "Buscar todos los episodios en Umbrales no alcanzados",
"IconForSpecials": "Icono para Especiales",
"ImportListExclusions": "Importar lista de exclusiones",
"ImportListStatusAllPossiblePartialFetchHealthCheckMessage": "Todas las listas requieren interacción manual debido a posibles búsquedas parciales",
"ImportListsAniListSettingsImportCancelled": "Importación Cancelados",
"ImportListsAniListSettingsImportPlanning": "Importar planeados",
"ImportListsAniListSettingsImportPlanningHelpText": "Lista: Planeados para ver",
"ImportListsAniListSettingsImportWatchingHelpText": "Lista: Viendo actualmente",
"ImportListsAniListSettingsImportNotYetReleased": "Importar Aún sin lanzar",
"ImportListsSonarrSettingsFullUrlHelpText": "URL, incluyendo puerto, de la instancia de {appName} de la que importar",
"IndexerPriorityHelpText": "Prioridad del indexador desde 1 (la más alta) hasta 50 (la más baja). Predeterminado: 25. Usada para desempatar lanzamientos iguales cuando se capturan, {appName} seguirá usando todos los indexadores habilitados para Sincronización de RSS y Búsqueda.",
"IncludeHealthWarnings": "Incluir avisos de salud",
"IndexerJackettAllHealthCheckMessage": "Indexadores usan el endpoint de Jackett no soportado 'todo': {indexerNames}",
"HourShorthand": "h",
"ICalFeedHelpText": "Copia esta URL a tu(s) cliente(s) o haz click para suscribirte si tu navegador soportar WebCal",
"ICalTagsSeriesHelpText": "El feed solo contendrá series con al menos una etiqueta coincidente",
"IconForCutoffUnmet": "Icono para Umbrales no alcanzados",
"IconForCutoffUnmetHelpText": "Mostrar icono para archivos cuando el umbral no haya sido alcanzado",
"EpisodeCount": "Número de episodios",
"IndexerSettings": "Ajustes de Indexador",
"AddDelayProfileError": "No se pudo añadir un nuevo perfil de retraso, inténtelo de nuevo.",
"IndexerRssNoIndexersAvailableHealthCheckMessage": "Todos los indexers capaces de RSS están temporalmente desactivados debido a errores recientes con el indexer",
"IndexerRssNoIndexersEnabledHealthCheckMessage": "No hay indexadores disponibles con la sincronización RSS activada, {appName} no capturará nuevos estrenos automáticamente",
"IndexerSearchNoAutomaticHealthCheckMessage": "No hay indexadores disponibles con Búsqueda Automática activada, {appName} no proporcionará ningún resultado de búsquedas automáticas",
"IndexerSearchNoAvailableIndexersHealthCheckMessage": "Todos los indexadores con capacidad de búsqueda no están disponibles temporalmente debido a errores recientes del indexadores",
"IndexerSearchNoInteractiveHealthCheckMessage": "No hay indexadores disponibles con Búsqueda Interactiva activada, {appName} no proporcionará ningún resultado de búsquedas interactivas"
}

View File

@@ -1,13 +1,13 @@
{
"RecycleBinUnableToWriteHealthCheckMessage": "Määritettyyn roskakorikansioon ei voida tallentaa: {path}. Varmista että sijainti on olemassa ja että sovelluksen suorittavalla käyttäjällä on siihen kirjoitusoikeus.",
"RemotePathMappingDownloadPermissionsEpisodeHealthCheckMessage": "{appName} näkee ladatun jakson \"{path}\", muttei voi käyttää sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.",
"RemotePathMappingDownloadPermissionsEpisodeHealthCheckMessage": "{appName} näkee ladatun jakson \"{path}\", mutta ei voi avata sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.",
"Added": "Lisäysaika",
"AppDataLocationHealthCheckMessage": "Päivityksiä ei sallita, jotta AppData-kansion poistaminen päivityksen yhteydessä voidaan estää.",
"DownloadClientSortingHealthCheckMessage": "Lataustyökalun \"{downloadClientName}\" {sortingMode} on kytketty käyttöön {appName}in kategorialle ja tuontiongelmien välttämiseksi se tulisi poistaa käytöstä.",
"IndexerRssNoIndexersEnabledHealthCheckMessage": "RSS-synkronointia varten ei ole määritetty tietolähteitä ja tämän vuoksi {appName} ei kaappaa uusia julkaisuja automaattisesti.",
"IndexerSearchNoInteractiveHealthCheckMessage": "Manuaalihaulle ei ole määritetty tietolähteitä, eikä se sen vuoksi löydä tuloksia.",
"RemotePathMappingFilesGenericPermissionsHealthCheckMessage": "Lataustyökalu \"{downloadClientName}\" ilmoitti tiedostosijainniksi \"{path}\", mutta {appName} ei näe sitä. Kansion käyttöoikeuksia on ehkä muokattava.",
"RemotePathMappingFolderPermissionsHealthCheckMessage": "{appName} näkee ladatauskansion \"{downloadPath}\" näkyy, muttei voi käyttää sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.",
"RemotePathMappingFolderPermissionsHealthCheckMessage": "{appName} näkee ladatauskansion \"{downloadPath}\", mutta ei voi avata sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.",
"RemotePathMappingImportEpisodeFailedHealthCheckMessage": "Jaksojen tuonti epäonnistui. Katso tarkemmat tiedot lokista.",
"RemotePathMappingGenericPermissionsHealthCheckMessage": "Lataustyökalu \"{downloadClientName}\" tallentaa lataukset kohteeseen \"{path}\", mutta {appName} ei näe sitä. Kansion käyttöoikeuksia on ehkä muokattava.",
"IndexerSearchNoAutomaticHealthCheckMessage": "Automaattihakua varten ei ole määritetty tietolähteitä ja tämän vuoksi {appName}in automaattihaku ei löydä tuloksia.",
@@ -45,7 +45,7 @@
"UiLanguage": "Käyttöliittymän kieli",
"UiLanguageHelpText": "{appName}in käyttöliittymän kieli.",
"AutomaticUpdatesDisabledDocker": "Automaattisia päivityksiä ei tueta suoraan käytettäessä Dockerin päivitysmekanismia. Docker-säiliö on päivitettävä {appName}in ulkopuolella tai päivitys on suoritettava skriptillä.",
"AddListExclusionSeriesHelpText": "Estä sarjan poiminta {appName}iin listoilta.",
"AddListExclusionSeriesHelpText": "Estä {appName}ia lisäämästä sarjaa listoilta.",
"AppUpdated": "{appName} on päivitetty",
"AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana.",
"ConnectionLostToBackend": "{appName} kadotti yhteyden taustajärjestelmään ja se on käynnistettävä uudelleen.",
@@ -92,7 +92,7 @@
"Actions": "Toiminnot",
"Absolute": "Ehdoton",
"AddANewPath": "Lisää uusi polku",
"RemotePathMappingBadDockerPathHealthCheckMessage": "Käytät Dockeria ja lataustyökalu \"{downloadClientName}\" tallentaa lataukset kohteeseen \"{path}\", mutta se ei ole kelvollinen {osName}-sijainti. Tarkista etäsijaintien kartoitukset ja lataustyökalun asetukset.",
"RemotePathMappingBadDockerPathHealthCheckMessage": "Käytät Dockeria ja lataustyökalu \"{downloadClientName}\" tallentaa lataukset kohteeseen \"{path}\", mutta se ei ole kelvollinen {osName}-sijainti. Tarkista etäsijaintien kohdistukset ja lataustyökalun asetukset.",
"AddDownloadClientImplementation": "Lisäätään lataustyökalua - {implementationName}",
"AddImportListExclusionError": "Virhe lisättäessä tuontilistapokkeusta. Yritä uudelleen.",
"AddIndexerImplementation": "Lisätään tietolähdettä - {implementationName}",
@@ -107,7 +107,7 @@
"AnimeEpisodeFormat": "Animejaksojen kaava",
"CheckDownloadClientForDetails": "katso lisätietoja lataustyökalusta",
"Donations": "Lahjoitukset",
"DownloadClientsSettingsSummary": "Lataustyökalut, latausten käsittely ja etäsijaintien kartoitukset.",
"DownloadClientsSettingsSummary": "Lataustyökalut, latausten käsittely ja etäsijaintien kohdistukset.",
"EpisodeFileRenamed": "Jaksotiedosto nimettiin uudelleen",
"EpisodeImported": "Jakso tuotiin",
"EpisodeImportedTooltip": "Jakso ladattiin ja poimittiin lataustyökalulta",
@@ -128,10 +128,10 @@
"AddNewRestriction": "Lisää uusi rajoitus",
"All": "Kaikki",
"AddReleaseProfile": "Lisää jukaisuprofiili",
"AddRemotePathMapping": "Lisää etäsijainnin kartoitus",
"AddRemotePathMapping": "Lisää etäsijainnin kohdistus",
"AddQualityProfileError": "Virhe lisättäessä laatuprofiilia. Yritä uudelleen.",
"AfterManualRefresh": "Manuaalisen päivityksen jälkeen",
"AddRemotePathMappingError": "Virhe lisättäessä etäsijainnin kartoitusta. Yritä uudelleen.",
"AddRemotePathMappingError": "Etäsijainnin kohdistuksen lisäys epäonnistui. Yritä uudelleen.",
"ApplicationURL": "Sovelluksen URL",
"AuthBasic": "Perus (ponnahdusikkuna)",
"AuthForm": "Lomake (kirjautumissivu)",
@@ -145,7 +145,7 @@
"Clear": "Tyhjennä",
"CollectionsLoadError": "Virhe ladattaessa kokoelmia",
"CreateEmptySeriesFolders": "Luo sarjoille tyhjät kansiot",
"CreateEmptySeriesFoldersHelpText": "Luo puuttuvien sarjojen kansiot kirjastotarkistusten yhteydessä.",
"CreateEmptySeriesFoldersHelpText": "Luo puuttuvat sarjakansiot kirjastotarkistusten yhteydessä.",
"CustomFormatsLoadError": "Virhe ladattaessa mukautettuja muotoja",
"Debug": "Vianselvitys",
"DeleteDelayProfileMessageText": "Haluatko varmasti poistaa viiveprofiilin?",
@@ -162,7 +162,7 @@
"MoreInfo": "Lisätietoja",
"Network": "Kanava/tuottaja",
"OnGrab": "Kun julkaisu kaapataan",
"DownloadClientQbittorrentValidationCategoryAddFailureDetail": "\"{appName}\" ei voinut lisätä tunnistettä qBittorentiin.",
"DownloadClientQbittorrentValidationCategoryAddFailureDetail": "{appName} ei voinut lisätä tunnistetta qBittorrentiin.",
"SeriesFolderFormat": "Sarjakansioiden kaava",
"TagDetails": "Tunnisteen \"{0}\" tiedot",
"DownloadClientStatusSingleClientHealthCheckMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä: {downloadClientNames}",
@@ -223,7 +223,7 @@
"MonitorNewSeasons": "Valvo uusia kausia",
"MonitorLastSeasonDescription": "Valvo kaikkia viimeisen kauden jaksoja.",
"MonitorNewSeasonsHelpText": "Uusien kausien automaattivalvonnan käytäntö.",
"MoveSeriesFoldersToRootFolder": "Haluatko siirtää sarjan tiedostot kohteeseen \"{destinationRootFolder}\"?",
"MoveSeriesFoldersToRootFolder": "Haluatko siirtää sarjakansiot kohteeseen \"{destinationRootFolder}\"?",
"MoreDetails": "Lisätietoja",
"MonitoredStatus": "Valvottu/tila",
"NegateHelpText": "Jos käytössä, ei mukautettua muotoa sovelleta tämän \"{implementationName}\" -ehdon täsmätessä.",
@@ -238,9 +238,9 @@
"NoLogFiles": "Lokitiedostoja ei ole",
"RefreshSeries": "Päivitä sarja",
"ReleaseSceneIndicatorUnknownSeries": "Tuntematon jakso tai sarja.",
"RemotePathMappingFilesBadDockerPathHealthCheckMessage": "Käytät Dockeria ja lataustyökalu \"{downloadClientName}\" ilmoitti tiedostosijainniksi \"{path}\", mutta se ei ole kelvollinen {osName}-sijainti. Tarkista etäsijaintien kartoitukset ja lataustyökalun asetukset.",
"RemotePathMappingFilesBadDockerPathHealthCheckMessage": "Käytät Dockeria ja lataustyökalu \"{downloadClientName}\" ilmoitti tiedostosijainniksi \"{path}\", mutta se ei ole kelvollinen {osName}-sijainti. Tarkista etäsijaintien kohdistukset ja lataustyökalun asetukset.",
"RemoveCompletedDownloads": "Poista valmistuneet lataukset",
"RemotePathMappingsLoadError": "Etäsijaintien kartoitusten lataus epäonnistui",
"RemotePathMappingsLoadError": "Etäsijaintien kohdistusten lataus epäonnistui",
"RemoveFailedDownloads": "Poista epäonnistuneet lataukset",
"RemoveFailed": "Poisto epäonnistui",
"RemoveFromBlocklist": "Poista estolistalta",
@@ -280,10 +280,10 @@
"ReleaseProfileTagSeriesHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille sarjoille. Käytä kaikille jättämällä tyhjäksi.",
"ReleaseTitle": "Julkaisun nimike",
"Reload": "Lataa uudelleen",
"RemotePathMappingFilesWrongOSPathHealthCheckMessage": "Etälataustyökalu \"{downloadClientName}\" ilmoitti tiedostosijainniksi \"{path}\", mutta se ei ole kelvollinen {osName}-sijainti. Tarkista etsijaintien kartoitukset lataustyökalun asetukset.",
"RemotePathMappingFilesWrongOSPathHealthCheckMessage": "Etälataustyökalu \"{downloadClientName}\" ilmoitti tiedostosijainniksi \"{path}\", mutta se ei ole kelvollinen {osName}-sijainti. Tarkista etsijaintien kohdistukset ja lataustyökalun asetukset.",
"RemoveTagsAutomatically": "Poista tunnisteet automaattisesti",
"RemotePathMappingsInfo": "Etäsijaintien kartoitusta tarvitaan harvoin ja jos {app} ja lataustyökalu suoritetaan samassa järjestelmässä, on parempi käyttää paikallisia polkuja. Lue lisää [wikistä]({wikiLink}).",
"RemovedSeriesMultipleRemovedHealthCheckMessage": "Sarjat {series} on poistettu TheTVDB.comista",
"RemotePathMappingsInfo": "Etäsijaintien kohdistuksia tarvitaan harvoin ja jos {appName} ja lataustyökalu suoritetaan samassa järjestelmässä, on parempi käyttää paikallisia polkuja. Lue lisää [wikistä]({wikiLink}).",
"RemovedSeriesMultipleRemovedHealthCheckMessage": "Sarjat {series} poistettiin TheTVDB:stä.",
"RemovedFromTaskQueue": "Poistettu tehtäväjonosta",
"RestartNow": "Käynnistä uudelleen nyt",
"AllTitles": "Kaikki nimikkeet",
@@ -333,12 +333,12 @@
"Trace": "Jäljitys",
"TotalRecords": "Rivien kokonaismäärä: {totalRecords}",
"TotalSpace": "Kokonaistila",
"TvdbIdExcludeHelpText": "Ohitettavan sarjan TheTVDB ID",
"TvdbIdExcludeHelpText": "Ohitettavan sarjan TheTVDB ID.",
"Type": "Tyyppi",
"TypeOfList": "{typeOfList}-lista",
"Twitter": "X (Twitter)",
"UiSettingsSummary": "Kalenterin, päiväyksen ja värirajoitteisten asetukset.",
"UnmappedFolders": "Kartoittamattomat kansiot",
"UnmappedFolders": "Kohdistamattomat kansiot",
"UnmonitorSpecialEpisodes": "Älä valvo erikoisjaksoja",
"UnmonitorSpecialsEpisodesDescription": "Lopeta kaikkien erikoisjaksojen valvonta muuttamatta muiden jakosojen tilaa.",
"Unmonitored": "Valvomattomat",
@@ -374,7 +374,7 @@
"Downloading": "Ladataan",
"ProgressBarProgress": "Tilapalkissa {progress} %",
"Queue": "Jono",
"RemotePathMappingRemotePathHelpText": "Lataustyökalun käyttämän hakemiston juurisijainti",
"RemotePathMappingRemotePathHelpText": "Lataustyökalun käyttämän kansion juurisijainti.",
"Restart": "Käynnistä uudelleen",
"SizeLimit": "Kokorajoitus",
"TestAllIndexers": "Tietolähteiden testaus",
@@ -386,7 +386,7 @@
"SeriesMatchType": "Sarjan kohdistustyyppi",
"RemotePathMappingLocalPathHelpText": "Polku, jonka kautta etäsijaintia tulee käyttää paikallisesti.",
"SonarrTags": "{appName}in tunnisteet",
"CalendarLoadError": "Virhe ladattaessa kalenteria",
"CalendarLoadError": "Kalenterin lataus epäonnistui.",
"BeforeUpdate": "Ennen päivitystä",
"Backups": "Varmuuskopiot",
"BackupNow": "Varmuuskopioi nyt",
@@ -480,7 +480,7 @@
"MonitorFirstSeason": "Ensimmäinen kausi",
"Monitoring": "Valvotaan",
"MonitorRecentEpisodesDescription": "Valvo viimeisten 90 päivän sisällä julkaistuja jaksoja ja tulevia jaksoja.",
"MoveSeriesFoldersToNewPath": "Haluatko, että sarjan tiedostot siirretään lähteestä \"{originalPath}\" kohteeseen \"{destinationPath}\"?",
"MoveSeriesFoldersToNewPath": "Haluatko, että sarjan tiedostot siirretään kansiosta \"{originalPath}\" kohteeseen \"{destinationPath}\"?",
"MonitorPilotEpisodeDescription": "Valvo vain ensimmäisen kauden ensimmäistä jaksoa.",
"Name": "Nimi",
"NamingSettings": "Nimeämisasetukset",
@@ -489,7 +489,7 @@
"DeleteSeriesFolderCountWithFilesConfirmation": "Haluatko varmasti poistaa {count} valittua sarjaa ja niiden kaiken sisällön?",
"DeleteSeriesFoldersHelpText": "Poista sarjakansiot ja niiden kaikki sisältö.",
"DeleteSeriesModalHeader": "Poistetaan - {title}",
"DeletedSeriesDescription": "Sarja on poistettu TheTVDB.comista.",
"DeletedSeriesDescription": "Sarja poistettiin TheTVDB:stä.",
"NoUpdatesAreAvailable": "Päivityksiä ei ole saatavilla",
"NotificationStatusSingleClientHealthCheckMessage": "Ilmoitukset eivät ole ongelmien vuoksi käytettävissä: {notificationNames}",
"NotificationsLoadError": "Kytkösten lataus epäonnistui.",
@@ -504,9 +504,9 @@
"RefreshAndScan": "Päivitä ja tarkista",
"Refresh": "Päivitä",
"ReleaseProfilesLoadError": "Virhe ladattaessa julkaisuprofiileita",
"RemotePathMappingLocalFolderMissingHealthCheckMessage": "Etälataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kartoitus.",
"DownloadClientDelugeValidationLabelPluginFailureDetail": "{appName} ei voinut lisätä tunnistetta lataustyökaluun \"{clientName}\".",
"DownloadClientDelugeValidationLabelPluginInactive": "Label-lisäosa ei ole aktiivinen",
"RemotePathMappingLocalFolderMissingHealthCheckMessage": "Etälataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kohdistus.",
"DownloadClientDelugeValidationLabelPluginFailureDetail": "{appName} ei voinut lisätä Label-tunnistetta {clientName}en.",
"DownloadClientDelugeValidationLabelPluginInactive": "Label-tunnistelisäosa ei ole käytössä.",
"AddConditionImplementation": "Lisätään ehtoa - {implementationName}",
"AddCustomFilter": "Lisää oma suodatin",
"AddConnectionImplementation": "Lisätään kytköstä - {implementationName}",
@@ -516,7 +516,7 @@
"RenameEpisodes": "Nimeä jaksot uudelleen",
"RenameFiles": "Nimeä tiedostot",
"RemoveTagsAutomaticallyHelpText": "Poista tunnisteet automaattisesti, jos ehdot eivät täyty.",
"RemovedSeriesSingleRemovedHealthCheckMessage": "Sarja {series} on poistettu TheTVDB.comista",
"RemovedSeriesSingleRemovedHealthCheckMessage": "Sarja {series} poistettiin TheTVDB:stä.",
"RescanAfterRefreshHelpTextWarning": "{appName} ei tunnista tiedostomuutoksia automaattisesti, jos asetuksena ei ole \"Aina\".",
"RequiredHelpText": "Tämän \"{implementationName}\" -ehdon on täsmättävä mukautetun muodon käyttämiseksi. Muutoin riittää yksi \"{implementationName}\" -vastaavuus.",
"RescanSeriesFolderAfterRefresh": "Tarkista sarjan kansio päivityksen jälkeen",
@@ -610,7 +610,7 @@
"EditIndexerImplementation": "Muokataan tietolähdettä - {implementationName}",
"EditListExclusion": "Muokkaa poikkeussääntöä",
"EditSeriesModalHeader": "Muokataan - {title}",
"EnableInteractiveSearch": "Käytä manuaalihakua",
"EnableInteractiveSearch": "Käytä manuaalihakuun",
"EnableRssHelpText": "Käytetään {appName}in etsiessä julkaisuja ajoitetusti RSS-synkronoinnilla.",
"EnableSslHelpText": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen järjestelmänvavojan oikeuksilla.",
"EpisodeFileRenamedTooltip": "Jaksotiedosto nimettiin uudelleen",
@@ -626,15 +626,15 @@
"ErrorLoadingContents": "Virhe ladattaessa sisältöjä",
"EpisodesLoadError": "Virhe ladattaessa jaksoja",
"ErrorLoadingContent": "Virhe ladattaessa tätä sisältöä",
"FailedToLoadCustomFiltersFromApi": "Omien suodatinten lataus API:sta epäonnistui",
"FailedToLoadQualityProfilesFromApi": "Laatuprofiilien lataus API:sta epäonnistui",
"FailedToLoadCustomFiltersFromApi": "Suodatinmukautusten lataus rajapinnasta epäonnistui",
"FailedToLoadQualityProfilesFromApi": "Laatuprofiilien lataus rajapinnasta epäonnistui",
"CalendarFeed": "{appName}in kalenterisyöte",
"Agenda": "Agenda",
"AnEpisodeIsDownloading": "Jaksoa ladataan",
"ListOptionsLoadError": "Virhe ladattaessa tuontilista-asetuksia",
"RemoveCompleted": "Poisto on suoritettu",
"ICalShowAsAllDayEvents": "Näytä koko päivän tapahtumina",
"FailedToLoadTagsFromApi": "Tunnisteiden lataus API:sta epäonnistui",
"FailedToLoadTagsFromApi": "Tunnisteiden lataus rajapinnasta epäonnistui",
"FilterContains": "sisältää",
"FilterDoesNotContain": "ei sisällä",
"FilterEpisodesPlaceholder": "Suodata jaksoja nimella tai numerolla",
@@ -662,7 +662,7 @@
"ImportListSearchForMissingEpisodesHelpText": "{appName} aloittaa automaattisesti puuttuvien jaksojen etsinnän kun sarja lisätään.",
"InteractiveSearchModalHeaderSeason": "Manuaalihaku - {season}",
"InteractiveImportNoImportMode": "Tuontitila on valittava.",
"InteractiveSearch": "Manuaalihaku",
"InteractiveSearch": "Etsi manuaalisesti",
"InteractiveSearchModalHeader": "Manuaalihaku",
"KeyboardShortcutsCloseModal": "Sulje nykyinen ikkuna",
"KeyboardShortcuts": "Pikanäppäimet",
@@ -705,8 +705,8 @@
"IndexerOptionsLoadError": "Virhe ladattaessa tietolähdeasetuksia",
"NoTagsHaveBeenAddedYet": "Tunnisteita ei ole vielä lisätty.",
"PreferProtocol": "Suosi {preferredProtocol}-protokollaa",
"RemotePathMappings": "Etäsijaintien kartoitukset",
"RemotePathMappingRemoteDownloadClientHealthCheckMessage": "Etälataustyökalu \"{0}\" ilmoitti tiedostosijainniksi \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kartoitus.",
"RemotePathMappings": "Etäsijaintien kohdistukset",
"RemotePathMappingRemoteDownloadClientHealthCheckMessage": "Etälataustyökalu \"{0}\" ilmoitti tiedostosijainniksi \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kohdistus.",
"Scheduled": "Ajoitukset",
"RootFolders": "Juurikansiot",
"RssSyncInterval": "RSS-synkronoinnin ajoitus",
@@ -732,10 +732,10 @@
"ChownGroupHelpTextWarning": "Toimii vain, jos {appName}in suorittava käyttäjä on tiedoston omistaja. On parempi varmistaa, että lataustyökalu käyttää samaa ryhmää kuin {appName}.",
"IndexerSettingsSeasonPackSeedTimeHelpText": "Aika, joka tuotantokausipaketin sisältävää torrentia tulee jakaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi.",
"ApplyTagsHelpTextAdd": " \"Lisää\" syötetyt tunnisteet aiempiin tunnisteisiin",
"RemotePathMappingDockerFolderMissingHealthCheckMessage": "Käytät Dockeria ja lataustyökalu \"{downloadClientName}\" tallentaa lataukset kohteeseen \"{path}\", mutta sitä ei löydy Docker-säiliöstä. Tarkista etäsijaintien kartoitukset ja säiliön tallennusmedian asetukset.",
"RemotePathMappingDockerFolderMissingHealthCheckMessage": "Käytät Dockeria ja lataustyökalu \"{downloadClientName}\" tallentaa lataukset kohteeseen \"{path}\", mutta sitä ei löydy Docker-säiliöstä. Tarkista etäsijaintien kohdistukset ja säiliön tallennusmedian asetukset.",
"TorrentBlackholeSaveMagnetFilesHelpText": "Tallenna magnet-linkki, jos .torrent-tiedostoa ei ole käytettävissä (hyödyllinen vain lataustyökalun tukiessa tiedostoon tallennettuja magnet-linkkejä).",
"IndexerPriorityHelpText": "Tietolähteen painotus, 1 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.",
"SeriesAndEpisodeInformationIsProvidedByTheTVDB": "Sarjojen ja jaksojen tiedot toimittaa TheTVDB.com. [Harkitse palvelun tukemista](https://www.thetvdb.com/subscribe)",
"SeriesAndEpisodeInformationIsProvidedByTheTVDB": "Sarjojen ja jaksojen tiedot tarjoaa TheTVDB.com. [Harkitse palvelun tukemista](https://www.thetvdb.com/subscribe)",
"DownloadClientQbittorrentValidationRemovesAtRatioLimitDetail": "{appName} ei voi suorittaa valmistuneiden latausten hallintaa määritetyllä tavalla. Voit korjata tämän vaihtamalla qBittorentin asetusten \"BitTorrent\"-osion \"Jakorajoitukset\"-osion toiminnoksi pysäytyksen poiston sijaan.",
"FullColorEventsHelpText": "Vaihtoehtoinen tyyli, jossa koko tapahtuma väritetään tilavärillä pelkän vasemman laidan sijaan. Ei vaikuta agendan esitykseen.",
"Yesterday": "Eilen",
@@ -744,10 +744,10 @@
"AutoTaggingRequiredHelpText": "Tämän \"{implementationName}\" -ehdon on täsmättävä automaattimerkinnän säännön käyttämiseksi. Muutoin yksittäinen \"{implementationName}\" -vastaavuus riittää.",
"LibraryImportTipsSeriesUseRootFolder": "Osoita {appName} kaikki sarjat sisältävään kansioon, ei sarjakohtaiseen kansioon. Esim. \"`{goodFolderExample}`\" eikä \"`{badFolderExample}`\". Lisäksi jokaisen sarjan on oltava kirjasto-/juurkansion alla omissa kansioissa.",
"SeriesDetailsGoTo": "Avaa {title}",
"SeriesEditRootFolderHelpText": "Siirtämällä sarjat samaan juurikansioon voidaan niiden kansioiden nimet päivittää vastaamaan päivitettyä nimikettä tai nimeämistyyliä.",
"SeriesEditRootFolderHelpText": "Siirtämällä sarjat samaan juurikansioon voidaan niiden kansioiden nimet päivittää vastaamaan päivittynyttä nimikettä tai nimeämiskaavaa.",
"WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?",
"SeriesLoadError": "Virhe ladattaessa sarjoja",
"IconForCutoffUnmetHelpText": "Näytä kuvake tiedostoille, joiden katkaisutasoa ei ole vielä saavutettu.",
"IconForCutoffUnmetHelpText": "Näytä kuvake tiedostoille, joiden määritettyä katkaisutasoa ei ole vielä saavutettu.",
"DownloadClientOptionsLoadError": "Virhe ladattaessa lataustyökaluasetuksia",
"UseHardlinksInsteadOfCopy": "Käytä hardlink-kytköksiä",
"TorrentBlackholeSaveMagnetFilesReadOnlyHelpText": "Tiedostojen siirtämisen sijaan tämä ohjaa {appName}in kopioimaan tiedostot tai käyttämään hardlink-kytköksiä (asetuksista/järjesteästä riippuen).",
@@ -797,7 +797,7 @@
"Theme": "Teema",
"DeleteSeriesFolderCountConfirmation": "Haluatko varmasti poistaa {count} valittua sarjaa?",
"DownloadClientSettings": "Lataustyökalujen asetukset",
"FailedToLoadSeriesFromApi": "Sarjan lataus API:sta epäonnistui",
"FailedToLoadSeriesFromApi": "Sarjan lataus rajapinnasta epäonnistui",
"OverrideGrabModalTitle": "Ohita ja kaappaa - {title}",
"ShowEpisodeInformation": "Näytä jaksojen tiedot",
"ShowEpisodes": "Näytä jaksot",
@@ -842,7 +842,7 @@
"DeleteSelectedDownloadClients": "Poista lataustyökalu(t)",
"DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?",
"DeleteCustomFormatMessageText": "Haluatko varmasti poistaa mukautetun muodon \"{customFormatName}\"?",
"DeleteRemotePathMapping": "Poista etäreittien kartoitus",
"DeleteRemotePathMapping": "Poista etäsijainnin kohdistus",
"DeleteSelectedImportLists": "Poista tuontilista(t)",
"DetailedProgressBar": "Yksityiskohtainen tilapalkki",
"DelayProfileSeriesTagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille sarjoille.",
@@ -861,14 +861,14 @@
"Details": "Tiedot",
"DownloadClient": "Lataustyökalu",
"DisabledForLocalAddresses": "Ei käytössä paikallisille osoitteille",
"DownloadClientDelugeValidationLabelPluginFailure": "Tunnisteen määritys epäonnistui",
"DownloadClientDelugeValidationLabelPluginInactiveDetail": "Kategorioiden käyttö edellyttää, että lataustyökalun \"{clientName}\" Label-lisäosa on käytössä.",
"DownloadClientDelugeValidationLabelPluginFailure": "Label-tunnisteen määritys epäonnistui.",
"DownloadClientDelugeValidationLabelPluginInactiveDetail": "Kategorioiden käyttö edellyttää, että {clientName}n Label-tunnistelisäosa on käytössä.",
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Lisää median ominaisuuksia tunnisteina. Vihjeet ovat esimerkkejä.",
"DownloadClientFloodSettingsTagsHelpText": "Latauksen alkuperäiset tunnisteet. Jotta se voidaa tunnistaa, on latauksella oltava sen alkuperäiset tunnisteet. Tämä välttää ristiriidat muiden latausten kanssa.",
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Ensimmäinen ja viimeinen ensin",
"Donate": "Lahjoita",
"DiskSpace": "Levytila",
"DownloadClientDelugeTorrentStateError": "Deluge ilmoittaa virheestä",
"DownloadClientDelugeTorrentStateError": "Deluge ilmoittaa virhettä",
"DownloadClientFreeboxApiError": "Freebox API palautti virheen: {errorDescription}",
"DownloadClientFreeboxAuthenticationError": "Freebox API -todennus epäonnistui. Syy: {errorDescription}",
"Download": "Lataa",
@@ -1003,7 +1003,7 @@
"Uptime": "Käyttöaika",
"MonitorNoEpisodes": "Ei mitään",
"MonitorNoEpisodesDescription": "Mitään jaksoja ei valvota.",
"RemotePathMappingWrongOSPathHealthCheckMessage": "Etälataustyökalu \"{downloadClientName}\" tallentaa lataukset kohteeseen \"{path}\", mutta se ei ole kelvollinen {osName}-sijainti. Tarkista etäsijaintien kartoitukset ja lataustyökalun asetukset.",
"RemotePathMappingWrongOSPathHealthCheckMessage": "Etälataustyökalu \"{downloadClientName}\" tallentaa lataukset kohteeseen \"{path}\", mutta se ei ole kelvollinen {osName}-sijainti. Tarkista etäsijaintien kohdistukset ja lataustyökalun asetukset.",
"RemoveFailedDownloadsHelpText": "Poista epäonnistuneet lataukset lataustyökalun historiasta",
"RemoveSelected": "Poista valitut",
"RemoveSelectedBlocklistMessageText": "Haluatko varmasti poistaa valitut kohteet estolistalta?",
@@ -1014,7 +1014,7 @@
"SearchForAllMissingEpisodes": "Etsi kaikkia puuttuvia jaksoja",
"Seasons": "Kaudet",
"SearchAll": "Etsi kaikkia",
"SearchByTvdbId": "Voit etsiä myös sarjan TVDB ID:llä, esim. \"tvdb:71663\".",
"SearchByTvdbId": "Voit etsiä myös sarjojen TheTVDB ID-tunnisteilla (esim. \"tvdb:71663\").",
"RootFoldersLoadError": "Virhe ladattaessa juurikansioita",
"SearchFailedError": "Haku epäonnistui. Yritä myöhemmin uudelleen.",
"Year": "Vuosi",
@@ -1094,7 +1094,7 @@
"PrefixedRange": "Etuliitealue",
"Range": "Alue",
"RecyclingBinCleanupHelpTextWarning": "Määritettyä päiväystä vanhemmat tiedostot poistetaan roskakorista automaattisesti.",
"ReplaceIllegalCharacters": "Kiellettyjen merkkien korvaus",
"ReplaceIllegalCharacters": "Korvaa kielletyt merkit",
"AirDate": "Esitysaika",
"AutoTagging": "Automaattinen tunnistemerkintä",
"CloneAutoTag": "Monista automaattimerkintä",
@@ -1111,8 +1111,8 @@
"Connection": "Yhteys",
"Date": "Päiväys",
"DeleteSpecification": "Poista määritys",
"BlackholeFolderHelpText": "Kansio, jossa {appName} säilyttää {extension}-tiedoston.",
"BlackholeWatchFolder": "Valvottu kansio",
"BlackholeFolderHelpText": "Kansio, jonne {appName} tallentaa {extension}-tiedoston.",
"BlackholeWatchFolder": "Valvontakansio",
"BlackholeWatchFolderHelpText": "Kansio, josta {appName}in tulee tuoda valmistuneet lataukset.",
"AptUpdater": "Asenna päivitys APT-työkalun avulla",
"Original": "Alkuperäiset",
@@ -1156,7 +1156,7 @@
"Directory": "Kansio",
"PendingChangesDiscardChanges": "Hylkää muutokset ja poistu",
"RecyclingBinHelpText": "Poistetut tiedostot siirretään tänne pysyvän poiston sijaan.",
"ReleaseSceneIndicatorAssumingTvdb": "Oletuksena TVDB-numerointi.",
"ReleaseSceneIndicatorAssumingTvdb": "Oletuksena TheTVDB-numerointi.",
"ReleaseSceneIndicatorMappedNotRequested": "Valittu jakso ei sisältynyt tähän hakuun.",
"ReplaceWithSpaceDash": "Korvaa yhdistelmällä \"välilyönti yhdysmerkki\"",
"ReplaceWithSpaceDashSpace": "Korvaa yhdistelmällä \"välilyönti yhdysmerkki välilyönti\"",
@@ -1219,7 +1219,7 @@
"ColonReplacementFormatHelpText": "Määritä, mitä {appName} tekee tiedostonimien kaksoispisteille.",
"CountSelectedFiles": "{selectedCount} tiedostoa on valittu",
"DelayProfiles": "Viiveprofiilit",
"DeleteRemotePathMappingMessageText": "Haluatko varmasti poistaa tämä etäsijainnin kartoituksen?",
"DeleteRemotePathMappingMessageText": "Haluatko varmasti poistaa tämän etäsijainnin kohdistuksen?",
"Deleted": "Poistettu",
"DeletedReasonManual": "Tiedosto poistettiin käyttöliittymän kautta",
"DestinationPath": "Kohdesijainti",
@@ -1231,7 +1231,7 @@
"DotNetVersion": ".NET",
"DownloadClientPneumaticSettingsStrmFolder": "Strm-kansio",
"DoNotPrefer": "Älä suosi",
"DownloadClientDelugeSettingsUrlBaseHelpText": "Lisää etuliitteeksi Delugen JSON-URL:n. Ks {url}.",
"DownloadClientDelugeSettingsUrlBaseHelpText": "Lisää etuliitteen Delugen JSON-URL-osoitteeseen (ks. {url}).",
"DownloadClientDownloadStationValidationApiVersion": "Download Stationin API-versiota ei tueta. Sen tulee olla vähintään {requiredVersion} (versioita {minVersion}{maxVersion} tuetaan).",
"DownloadClientFloodSettingsRemovalInfo": "{appName} suorittaa torrenttien automaattisen poiston sen tietolähdeastuksissa määritettyjen jakoasetusten perusteella.",
"DownloadClientFloodSettingsUrlBaseHelpText": "Lisää etuliitteeksi Flood API:n (esim. {url}).",
@@ -1240,10 +1240,10 @@
"MultiEpisode": "Useita jaksoja",
"Negated": "Kielletty",
"MultiEpisodeInvalidFormat": "Useita jaksoja: virheellinen kaava",
"AutoRedownloadFailedFromInteractiveSearch": "Uudelleenlataus manuaalihausta epäonnistui",
"AutoRedownloadFailedFromInteractiveSearch": "Uudelleenlataus manuaalihaun tuloksista epäonnistui",
"Blocklist": "Estolista",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Etsi automaattisesti ja pyri lataamaan eri julkaisu vaikka epäonnistunut julkaisu oli kaapattu manuaalihausta.",
"StandardEpisodeFormat": "Vakiojaksojen kaava",
"StandardEpisodeFormat": "Tavallisten jaksojen kaava",
"SceneNumberNotVerified": "Kohtausnumeroa ei ole vielä vahvistettu",
"Scene": "Kohtaus",
"RssSyncIntervalHelpText": "Aikaväli minuutteina. Arvo \"0\" (nolla) kytkee toiminnon pois käytöstä pysäyttäen automaattisen julkaisukaappauksen täysin.",
@@ -1268,7 +1268,7 @@
"ReplaceWithDash": "Korvaa yhdysmerkillä",
"ConnectSettingsSummary": "Ilmoitukset, kuten viestintä mediapalvelimille ja soittimille, sekä omat komentosarjat.",
"DockerUpdater": "Hanki päivitys päivittämällä Docker-säiliö",
"DownloadClientQbittorrentValidationCategoryRecommended": "Kategoria tulisi määrittää",
"DownloadClientQbittorrentValidationCategoryRecommended": "Kategorian määritys on suositeltavaa",
"NoEpisodeInformation": "Jaksotietoja ei ole saatavilla.",
"ManualGrab": "Manuaalinen kaappaus",
"DownloadClientDownloadStationSettingsDirectory": "Valinnainen jaettu kansio latauksille. Jätä tyhjäksi käyttääksesi Download Stationin oletussijaintia.",
@@ -1280,7 +1280,7 @@
"External": "Ulkoinen",
"MaintenanceRelease": "Huoltojulkaisu: korjauksia ja muita parannuksia. Lue lisää Githubin muutoshistoriasta.",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Määrittää käytetäänkö qBittorrentista määritettyä rakennetta, torrentin alkuperäistä rakennetta vai luodaanko uusi alikansio (qBittorrent 4.3.2+).",
"EditRemotePathMapping": "Muokkaa kartoitettua etäsijaintia",
"EditRemotePathMapping": "Muokkaa etäsijainnin kohdistusta",
"LastUsed": "Viimeksi käytetty",
"Manual": "Manuaalinen",
"MoveAutomatically": "Siirrä automaattisesti",
@@ -1306,7 +1306,7 @@
"Seeders": "Jakajat",
"UpgradesAllowed": "Päivitykset sallitaan",
"OnUpgrade": "Päivitettäessä",
"UnmappedFilesOnly": "Vain kartoittamattomat tiedostot",
"UnmappedFilesOnly": "Vain kohdistamattomat tiedostot",
"Ignored": "Ohitettu",
"PreferAndUpgrade": "Suosi ja päivitä",
"Failed": "Epäonnistui",
@@ -1368,7 +1368,7 @@
"OneSeason": "1 kausi",
"OpenBrowserOnStart": "Avaa selain käynnistettäessä",
"Profiles": "Profiilit",
"ProxyBypassFilterHelpText": "Käytä aliverkkotunnusten erottimena pilkkua (,) ja jokerimerkkinä tähteä ja pistettä (*.). Esimerkkejä: www.esimerkki.fi,*.esimerkki.fi.",
"ProxyBypassFilterHelpText": "Erota aliverkkotunnukset pilkuilla ja käytä jokerimerkkinä tähteä ja pistettä (*.). Esimerkki: www.esimerkki.fi,*.esimerkki.fi).",
"ProxyBadRequestHealthCheckMessage": "Välityspalvelintesti epäonnistui. Tilakoodi {statusCode}",
"ProxyFailedToTestHealthCheckMessage": "Välityspalvelintesti epäonnistui: {url}",
"Reason": "Syy",
@@ -1471,7 +1471,7 @@
"ImportScriptPath": "Tuontikomentosarjan sijainti",
"NotificationsAppriseSettingsTags": "Apprisen tunnisteet",
"NotificationsAppriseSettingsServerUrlHelpText": "Apprise-palvelimen URL-osoite. SIsällytä myös http(s):// ja portti (tarvittaessa).",
"DownloadClientSettingsUseSslHelpText": "Yhdistä työkaluun \"{clientName}\" SSL-protokollan välityksellä.",
"DownloadClientSettingsUseSslHelpText": "Muodosta {clientName} -yhteys käyttäen salattua yhteyttä.",
"NotificationsKodiSettingsCleanLibraryHelpText": "Siivoa kirjasto päivityksen jälkeen.",
"NotificationsJoinSettingsDeviceNamesHelpText": "Pilkuin eroteltu listaus täydellisistä tai osittaisista laitenimistä, joihin ilmoitukset lähetetään. Jos ei määritetty, lähetetään kaikkiin laitteisiin.",
"FormatDateTime": "{formattedDate} {formattedTime}",
@@ -1502,7 +1502,7 @@
"BlocklistAndSearch": "Estolista ja haku",
"BlocklistAndSearchHint": "Etsi korvaavaa kohdetta kun kohde lisätään estolistalle.",
"BlocklistOnlyHint": "Lisää estolistalle etsimättä korvaavaa kohdetta.",
"BlocklistReleaseHelpText": "Estää {appName}ia lataamasta tätä julkaisua uudelleen RSS-syötteen tai automaattihaun tulokisista.",
"BlocklistReleaseHelpText": "Estää {appName}ia lataamasta tätä julkaisua uudelleen RSS-syötteen tai automaattihaun tuloksista.",
"ChangeCategory": "Vaihda kategoria",
"NotificationsPushoverSettingsDevicesHelpText": "Laitenimet, joihin ilmoitukset lähetetään (lähetä kaikkiin jättämällä tyhjäksi).",
"NotificationsNtfySettingsTagsEmojisHelpText": "Valinnainen pilkuin eroteltu listaus käytettävistä tunnisteista tai emjeista.",
@@ -1533,7 +1533,7 @@
"NotificationsPushoverSettingsRetryHelpText": "Hätäilmoituksen uudelleenyritysten välinen aika.",
"NotificationsPushoverSettingsRetry": "Uudelleenyritys",
"NotificationsSettingsUpdateLibrary": "Päivitä kirjasto",
"NotificationsSettingsUpdateMapPathsFrom": "Sijaintien lähdekartoitukset",
"NotificationsSettingsUpdateMapPathsFrom": "Kohdista sijainnit lähteeseen",
"NotificationsSignalSettingsGroupIdPhoneNumberHelpText": "Vastaanottavan ryhmän ID tai vastaanottajan puhelinnumero.",
"NotificationsSignalValidationSslRequired": "Näyttää siltä, että SSL-yhteys vaaditaan",
"NotificationsSignalSettingsUsernameHelpText": "Käyttäjätunnus, jolla Signal-API:lle lähetettävät pyynnöt todennetaan.",
@@ -1621,7 +1621,7 @@
"NotificationsSettingsWebhookUrl": "Webhook-URL-osoite",
"NotificationsSettingsUseSslHelpText": "Muodosta yhteys SSL-protokollan välityksellä.",
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-sijainti, jonka mukaisesti sarjasijainteja muutetaan kun {serviceName} näkee kirjastosijainnin eri tavalla kuin {appName} (vaatii \"Päivitä kirjasto\" -asetuksen).",
"NotificationsSettingsUpdateMapPathsTo": "Sijaintien kohdekartoitukset",
"NotificationsSettingsUpdateMapPathsTo": "Kohdista sijainnit kohteeseen",
"NotificationsTelegramSettingsChatIdHelpText": "Vastaanottaaksesi viestejä, sinun on aloitettava keskustelu botin kanssa tai lisättävä se ryhmääsi.",
"NotificationsTraktSettingsAccessToken": "Käyttötunniste",
"NotificationsTraktSettingsAuthUser": "Todennettu käyttäjä",
@@ -1668,5 +1668,73 @@
"RemoveFromDownloadClientHint": "Poistaa latauksen ja ladatut tiedostot lataustyökalusta.",
"RemoveQueueItemRemovalMethod": "Poistotapa",
"RemoveQueueItemsRemovalMethodHelpTextWarning": "\"Poista lataustyökalusta\" poistaa lataukset ja niiden tiedostot.",
"Umask": "Umask"
"Umask": "Umask",
"FilterGreaterThan": "on suurempi kuin",
"TheTvdb": "TheTVDB",
"FilterIsNot": "ei ole",
"FilterLessThan": "on pienempi kuin",
"FilterNotEqual": "ei ole sama kuin",
"FilterLessThanOrEqual": "on pienempi kuin tai sama",
"FilterNotInLast": "ei kuluneina",
"FilterNotInNext": "ei seuraavina",
"IndexerValidationJackettNoResultsInConfiguredCategories": "Kysely onnistui, mutta tietolähteesi ei palauttanut tuloksia määrietystyistä kategorioista. Tämä voi johtua tietolähteen ongelmasta tai tietolähteelle määritetyistä kategoria-asetuksista.",
"TvdbId": "TheTVDB ID",
"DownloadClientSettingsInitialState": "Virheellinen tila",
"DownloadClientSettingsRecentPriority": "Uusien painotus",
"DownloadClientSettingsUrlBaseHelpText": "Lisää etuliite lataustuökalun {clientName} URL-osoitteeseen, kuten {url}.",
"DownloadClientSettingsInitialStateHelpText": "Lataustyökaluun {clientName} lisättyjen torrentien aloitustila.",
"DownloadClientSettingsPostImportCategoryHelpText": "Kategoria, jonka {appName} asettaa tuonnin jälkeen. {appName} ei poista tämän kategorian torrenteja vaikka jakaminen olisi päättynyt. Säilytä alkuperäinen kategoria jättämällä tyhjäksi.",
"ImportListsImdbSettingsListId": "Listan ID",
"ImportListsImdbSettingsListIdHelpText": "IMDb-listan ID (esim. \"ls12345678\").",
"ImportListsSonarrSettingsRootFoldersHelpText": "Lähdeinstanssin juurikansiot, joista tuodaan.",
"ImportListsTraktSettingsRatingHelpText": "Suodata sarjat arviovälin perusteella (0100)",
"ImportListsTraktSettingsWatchedListFilter": "Katselulistan suodatin",
"ImportListsTraktSettingsYearsHelpText": "Suodata sarjat vuoden tai vuosivälin perusteella",
"MetadataSettingsEpisodeImages": "Jaksojen kuvat",
"MetadataSettingsEpisodeMetadata": "Jaksojen metatiedot",
"MetadataSettingsSeriesImages": "Sarjojen kuvat",
"MetadataSettingsEpisodeMetadataImageThumbs": "Jaksojen metatietojen pienoiskuvat",
"MetadataSettingsSeasonImages": "Kausien kuvat",
"MetadataXmbcSettingsEpisodeMetadataImageThumbsHelpText": "Sisällytä thumb-kuvien tunnisteet <filename>.nfo-tiedostoihin (vaatii \"Jaksojen metatiedot\" -asetuksen).",
"MetadataXmbcSettingsSeriesMetadataHelpText": "Sisällytä sarjojen täydelliset metatiedot tvshow.nfo-tiedostoihin.",
"MetadataXmbcSettingsSeriesMetadataEpisodeGuideHelpText": "Sisällytä JSON-muotoiset jakso-oppaat tvshow.nfo-tiedostoihin (vaatii \"Sarjan metatiedot\" -asetuksen).",
"MetadataXmbcSettingsSeriesMetadataUrlHelpText": "Sisällytä sarjojen TheTVDB-URL-osoitteet tvshow.nfo-tiedostoihin (voidaan käyttään yhdessä \"Sarjan metatiedot\" -asetuksen kanssa).",
"DownloadClientValidationCategoryMissingDetail": "Syötettyä kategoriaa ei ole lautaustyökalussa {clientName}. Luo se sinne ensin.",
"FailedToLoadTranslationsFromApi": "Käännösten lataus rajapinnasta epäonnistui",
"FailedToLoadUiSettingsFromApi": "Käyttöliittymäasetusten lataus rajapinnasta epäonnistui",
"FilterEqual": "on sama kuin",
"FilterInLast": "kuluneina",
"Mapping": "Kohdistus",
"RemotePathMappingFileRemovedHealthCheckMessage": "Tiedosto \"{path}\" poistettiin kesken käsittelyn.",
"DownloadClientSettingsRecentPriorityEpisodeHelpText": "14 päivän sisällä julkaistujen elokuvien kaappauksille käytettävä painotus.",
"FilterEndsWith": "päättyy",
"FilterIsBefore": "on ennen",
"FilterDoesNotStartWith": "päättyy",
"FilterIsAfter": "on jälkeen",
"FilterGreaterThanOrEqual": "on suurempi kuin tai sama",
"FilterDoesNotEndWith": "ei pääty",
"FilterInNext": "seuraavina",
"ImdbId": "IMDb ID",
"MaximumSingleEpisodeAgeHelpText": "Täysiä tuotantokausia etsittäessä hyväksytään vain kausipaketit, joiden uusin jakso on tätä asetusta vanhempi. Koskee vain vakiosarjoja. Poista käytöstä asettamalla arvoksi \"0\" (nolla).",
"FailedToLoadSystemStatusFromApi": "Järjestelmän tilan lataus rajapinnasta epäonnistui",
"DownloadClientSabnzbdValidationEnableDisableTvSortingDetail": "Sinun on poistettava televisiojärjestely käytöstä {appName}in käyttämältä kategorialta tuontiongelmien välttämiseksi. Korjaa tämä Sabnzbd:stä.",
"IndexerValidationJackettNoRssFeedQueryAvailable": "RSS-syötekyselyä ei ole käytettävissä. Tämä voi johtua tietolähteen ongelmasta tai tietolähteelle määritetyistä kategoria-asetuksista.",
"DownloadClientSabnzbdValidationEnableDisableDateSortingDetail": "Sinun on poistettava päiväysjärjestely käytöstä {appName}in käyttämältä kategorialta tuontiongelmien välttämiseksi. Korjaa tämä Sabnzbd:stä.",
"DownloadClientSabnzbdValidationEnableDisableMovieSortingDetail": "Sinun on poistettava elokuvien järjestely käytöstä {appName}in käyttämältä kategorialta tuontiongelmien välttämiseksi. Korjaa tämä Sabnzbd:stä.",
"DownloadClientSettingsCategoryHelpText": "Luomalla {appName}ille oman kategorian, erottuvat sen lataukset muiden lähteiden latauksista. Kategorian määritys on valinnaista, mutta erittäin suositeltavaa.",
"DownloadClientSettingsDestinationHelpText": "Määrittää manuaalisen tallennuskohteen. Käytä oletusta jättämällä tyhjäksi.",
"DownloadClientSettingsOlderPriority": "Vanhojen painotus",
"DownloadClientSettingsOlderPriorityEpisodeHelpText": "Yli 14 päivää sitten julkaistujen jaksojen kaappauksille käytettävä painotus.",
"ImportListsTraktSettingsGenresHelpText": "Suodata sarjoja Traktin lajityyppien Slug-määrityksen perusteella (pilkuin eroteltuna) vain suosituille listoille.",
"ImportListsTraktSettingsWatchedListFilterHelpText": "Jos \"Listan tyyppi\" on \"Valvottu\", valitse sarjatyyppi, jonka haluat tuoda.",
"MappedNetworkDrivesWindowsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja [UKK:sta](https://wiki.servarr.com/sonarr/faq#why-cant-sonarr-see-my-files-on-a-remote-server).",
"MetadataSettingsSeriesMetadata": "Sarjojen metatiedot",
"MetadataSettingsSeriesMetadataUrl": "Sarjojen metatietojen URL",
"MetadataSettingsSeriesMetadataEpisodeGuide": "Sarjojen metatietojen jakso-opas",
"SomeResultsAreHiddenByTheAppliedFilter": "Aktiivinen suodatin piilottaa joitakin tuloksia.",
"ChangeCategoryHint": "Vaihtaa latauksen kategoriaksi lataustyökalun \"Tuonnin jälkeinen kategoria\" -asetuksen kategorian.",
"ChangeCategoryMultipleHint": "Vaihtaa latausten kategoriaksi lataustyökalun \"Tuonnin jälkeinen kategoria\" -asetuksen kategorian.",
"DownloadClientAriaSettingsDirectoryHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.",
"DownloadClientQbittorrentValidationQueueingNotEnabledDetail": "Torrentien jonotus ei ole käytössä qBittorent-asetuksissasi. Ota se käyttöön tai valitse painotukseksi \"Viimeiseksi\".",
"DownloadClientSettingsCategorySubFolderHelpText": "Luomalla {appName}ille oman kategorian, erottuvat sen lataukset muiden lähteiden latauksista. Kategorian määritys on valinnaista, mutta erittäin suositeltavaa. Tämä luo latauskansioon [kategoria]-alikansion."
}

View File

@@ -314,7 +314,7 @@
"DeleteSelectedIndexersMessageText": "Voulez-vous vraiment supprimer les {count} indexeur(s) sélectionné(s) ?",
"DeleteRootFolder": "Supprimer le dossier racine",
"DisabledForLocalAddresses": "Désactivée pour les adresses IP locales",
"DeleteTagMessageText": "Voulez-vous vraiment supprimer l'étiquette « {label} » ?",
"DeleteTagMessageText": "Voulez-vous vraiment supprimer l'étiquette '{label}' ?",
"Filter": "Filtrer",
"FilterContains": "contient",
"FilterIs": "est",
@@ -881,7 +881,7 @@
"ReleaseProfileTagSeriesHelpText": "Les profils de version s'appliqueront aux séries avec au moins une balise correspondante. Laisser vide pour appliquer à toutes les séries",
"RemotePathMappingLocalFolderMissingHealthCheckMessage": "Le client de téléchargement à distance {downloadClientName} place les téléchargements dans {path} mais ce répertoire ne semble pas exister. Mappage de chemin distant probablement manquant ou incorrect.",
"RemoveCompletedDownloads": "Supprimer les téléchargements terminés",
"RemoveQueueItemConfirmation": "Êtes-vous sûr de vouloir supprimer « {sourceTitle} » de la file d'attente ?",
"RemoveQueueItemConfirmation": "Êtes-vous sûr de vouloir retirer '{sourceTitle}' de la file d'attente ?",
"RemoveSelectedBlocklistMessageText": "Êtes-vous sûr de vouloir supprimer les éléments sélectionnés de la liste de blocage ?",
"RescanAfterRefreshSeriesHelpText": "Analysez à nouveau le dossier de la série après avoir actualisé la série",
"RetryingDownloadOn": "Nouvelle tentative de téléchargement le {date} à {time}",
@@ -890,7 +890,7 @@
"StandardEpisodeTypeDescription": "Épisodes publiés avec le modèle SxxEyy",
"Rejections": "Rejets",
"RemoveFromQueue": "Supprimer de la file d'attente",
"RemoveQueueItem": "Supprimer {sourceTitle}",
"RemoveQueueItem": "Retirer - {sourceTitle}",
"Search": "Rechercher",
"Seeders": "Seeders",
"SelectEpisodesModalTitle": "{modalTitle} Sélectionnez un ou plusieurs épisodes",
@@ -1307,7 +1307,7 @@
"CloneAutoTag": "Cloner la balise automatique",
"Failed": "Échoué",
"Daily": "Tous les jours",
"ContinuingOnly": "Continuer seulement",
"ContinuingOnly": "Continuant uniquement",
"CurrentlyInstalled": "Actuellement installé",
"Donations": "Dons",
"EpisodeCount": "Nombre d'épisodes",
@@ -1907,5 +1907,19 @@
"BlocklistOnly": "Liste de blocage uniquement",
"BlocklistOnlyHint": "Liste de blocage sans recherche de remplaçant",
"ChangeCategory": "Changer de catégorie",
"ChangeCategoryMultipleHint": "Modifie les téléchargements dans la \"catégorie post-importation\" du client de téléchargement"
"ChangeCategoryMultipleHint": "Modifie les téléchargements dans la \"catégorie post-importation\" du client de téléchargement",
"RemoveFromDownloadClientHint": "Supprime le téléchargement et le(s) fichier(s) du client de téléchargement",
"RemoveMultipleFromDownloadClientHint": "Supprime les téléchargements et les fichiers du client de téléchargement",
"RemoveQueueItemRemovalMethod": "Méthode de suppression",
"RemoveQueueItemRemovalMethodHelpTextWarning": "\"Supprimer du client de téléchargement\" supprimera le téléchargement et le(s) fichier(s) du client de téléchargement.",
"RemoveQueueItemsRemovalMethodHelpTextWarning": "Supprimer du client de téléchargement\" supprimera les téléchargements et les fichiers du client de téléchargement.",
"DoNotBlocklistHint": "Supprimer sans mettre sur liste noire",
"DoNotBlocklist": "Ne pas mettre sur liste noire",
"IgnoreDownloadHint": "Empêche {appName} de poursuivre le traitement de ce téléchargement",
"IgnoreDownload": "Ignorer le téléchargement",
"IgnoreDownloads": "Ignorer les téléchargements",
"IgnoreDownloadsHint": "Empêche {appName} de poursuivre le traitement de ces téléchargements",
"IndexerSettingsRejectBlocklistedTorrentHashes": "Rejeter les hachages de torrents bloqués lors de la saisie",
"IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Si un torrent est bloqué par le hachage, il peut ne pas être correctement rejeté pendant le RSS/recherche pour certains indexeurs. L'activation de cette fonction permet de le rejeter après que le torrent a été saisi, mais avant qu'il ne soit envoyé au client.",
"DownloadClientAriaSettingsDirectoryHelpText": "Emplacement facultatif pour les téléchargements, laisser vide pour utiliser l'emplacement par défaut Aria2"
}

View File

@@ -10,7 +10,7 @@
"ExportCustomFormat": "Egyéni formátum exportálása",
"IndexerJackettAllHealthCheckMessage": "A nem támogatott Jackett 'all' végpontot használó indexelők: {indexerNames}",
"Remove": "Eltávolítás",
"RemoveFromDownloadClient": "Eltávolítás a letöltési kliensből",
"RemoveFromDownloadClient": "Eltávolítás a Letöltési kliensből",
"RemoveSelectedItem": "Kijelölt elem eltávolítása",
"RemoveSelectedItemQueueMessageText": "Biztosan el akar távolítani 1 elemet a várólistáról?",
"RemoveSelectedItems": "Kijelölt elemek eltávolítása",
@@ -21,7 +21,7 @@
"ApplyChanges": "Változások alkalmazása",
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges az alkalmazás adatok törlése nélkül",
"AutomaticAdd": "Automatikus hozzáadás",
"CountSeasons": "{count} évad",
"CountSeasons": "{count} Évad",
"DownloadClientCheckNoneAvailableHealthCheckMessage": "Nincs elérhető letöltési kliens",
"DownloadClientRootFolderHealthCheckMessage": "A letöltési kliens {downloadClientName} a letöltéseket a gyökérmappába helyezi. Ne tölts le közvetlenül a gyökérmappába.",
"DownloadClientCheckUnableToCommunicateWithHealthCheckMessage": "Nem lehet kommunikálni a {downloadClientName} -val",
@@ -352,7 +352,7 @@
"Today": "Ma",
"TimeFormat": "Idő formátum",
"Torrents": "Torrentek",
"TorrentsDisabled": "Kikapcsolt torrentek",
"TorrentsDisabled": "Deaktivált torrentek",
"Total": "Összesen",
"TotalFileSize": "Összesített fájlméret",
"Twitter": "Twitter",
@@ -480,7 +480,7 @@
"CustomFormatsSpecificationMaximumSizeHelpText": "A kioldásnak kisebbnek vagy egyenlőnek kell lennie ennél a méretnél",
"CustomFormatsSpecificationMinimumSize": "Minimum méret",
"CustomFormatsSpecificationMinimumSizeHelpText": "A kibocsátásnak nagyobbnak kell lennie ennél a méretnél",
"CustomFormatsSpecificationRegularExpression": "Nyelv",
"CustomFormatsSpecificationRegularExpression": "Reguláris kifejezés",
"CustomFormatsSpecificationSource": "Forrás",
"CustomFormatsSpecificationReleaseGroup": "Release Csoport",
"CustomFormatsSpecificationResolution": "Felbontás",
@@ -627,7 +627,7 @@
"LastWriteTime": "Utolsó írási idő",
"LogFiles": "Naplófájlok",
"ManualImport": "Kézi importálás",
"MappedNetworkDrivesWindowsService": "A leképezett hálózati meghajtók nem érhetők el, ha Windows szolgáltatásként futnak, lásd a [GYIK](https:",
"MappedNetworkDrivesWindowsService": "A leképezett hálózati meghajtók nem érhetők el, ha Windows szolgáltatásként futnak, lásd a [GYIK](https://wiki.servarr.com/sonarr/faq#why-cant-sonarr-see-my-files-on-a-remote-server) for more information.",
"MediaManagementSettingsLoadError": "Nem sikerült betölteni a médiakezelési beállításokat",
"MediaManagementSettings": "Médiakezelési beállítások",
"NoMonitoredEpisodesSeason": "Ebben az évadban nincsenek felügyelt epizódok",
@@ -784,7 +784,7 @@
"FilterDoesNotEndWith": "nem ér véget",
"Level": "Szint",
"LibraryImportTipsQualityInEpisodeFilename": "Győződjön meg arról, hogy a fájlok fájlnevében szerepel a minőség. például. `episode.s02e15.bluray.mkv`",
"LibraryImportTipsSeriesUseRootFolder": "Mutasson a(z) {appName} mappára, amely az összes tévéműsorát tartalmazza, ne egy konkrétat. például. \"`{goodFolderExample}`\" és nem \"`{badFolderExample}`\". Ezenkívül minden sorozatnak saját mappájában kell lennie a gyökérben",
"LibraryImportTipsSeriesUseRootFolder": "Mutasson a(z) {appName} mappára, amely az összes tévéműsorát tartalmazza, ne egy konkrétat. például. \"`{goodFolderExample}`\" és nem \"`{badFolderExample}`\". Ezenkívül minden sorozatnak saját mappájában kell lennie a gyökérben.",
"Links": "Linkek",
"MetadataSourceSettingsSeriesSummary": "Információ arról, hogy a(z) {appName} honnan szerezheti be a sorozat- és epizódinformációkat",
"MonitorAllSeasons": "Minden évad",
@@ -901,7 +901,7 @@
"RemotePathMappingHostHelpText": "Ugyanaz a gazdagép, amelyet a távoli letöltési klienshez megadott",
"SelectQuality": "Minőség kiválasztása",
"SeriesIndexFooterEnded": "Befejeződött (az összes epizód letöltve)",
"SeriesAndEpisodeInformationIsProvidedByTheTVDB": "A sorozatokkal és epizódokkal kapcsolatos információkat a TheTVDB.com biztosítja. [Kérjük, fontolja meg támogatásukat](https:",
"SeriesAndEpisodeInformationIsProvidedByTheTVDB": "A sorozatokkal és epizódokkal kapcsolatos információkat a TheTVDB.com biztosítja. [Kérjük, fontolja meg támogatásukat](https://www.thetvdb.com/subscribe).",
"SeriesDetailsCountEpisodeFiles": "{episodeFileCount} epizódfájl",
"SeriesIsMonitored": "A sorozatot figyelik",
"SeriesTitle": "Sorozat címe",
@@ -972,5 +972,61 @@
"ShowSeriesTitleHelpText": "Mutasd a sorozat címét a plakát alatt",
"ShowSizeOnDisk": "Méret megjelenítése a lemezen",
"SizeLimit": "Méretkorlát",
"DeleteSelectedDownloadClientsMessageText": "Biztosan törölni szeretné a kiválasztott {count} letöltési klienst?"
"DeleteSelectedDownloadClientsMessageText": "Biztosan törölni szeretné a kiválasztott {count} letöltési klienst?",
"Tba": "TBA",
"SpecialsFolderFormat": "Különleges mappa formátum",
"TablePageSizeMinimum": "A relatív elérési utak a(z) {appName} AppData könyvtárában találhatók",
"TorrentDelay": "Torrent Késleltetés",
"TorrentBlackhole": "Torrent Blackhole",
"TorrentDelayHelpText": "Percek késése, hogy várjon, mielőtt megragad egy torrentet",
"StartImport": "Indítsa el az Importálást",
"SupportedListsMoreInfo": "Az egyes listákkal kapcsolatos további információkért kattintson a további információ gombokra.",
"TestAllClients": "Minden ügyfél tesztelése",
"UiSettings": "Felület Beállítások",
"Security": "Biztonság",
"SetTags": "Címkék beállítása",
"SslCertPathHelpText": "A pfx fájl elérési útja",
"TestAllLists": "Minden lista tesztelése",
"ToggleUnmonitoredToMonitored": "Nem figyelt, kattintson a figyeléshez",
"UiLanguage": "Felület nyelv",
"UiLanguageHelpText": "Nyelv, amelyet a {appName} a felhasználói felülethez fog használni",
"SelectAll": "Mindet kiválaszt",
"SelectReleaseGroup": "Release csoport kiválasztása",
"SourcePath": "Forrás útvonala",
"TableOptionsButton": "Táblázat opciók gomb",
"TheTvdb": "TheTVDB",
"ToggleMonitoredSeriesUnmonitored ": "Nem lehet átkapcsolni a figyelt állapotot, ha a sorozat nem figyelhető",
"Ui": "Felület",
"UiSettingsLoadError": "Nem sikerült betölteni a felhasználói felület beállításait",
"SelectDropdown": "Válassz...",
"SelectEpisodes": "Epizód(ok) kiválasztása",
"SkipFreeSpaceCheckWhenImportingHelpText": "Akkor használja, ha a(z) {appName} nem tud szabad helyet észlelni a gyökérmappában a fájlimportálás során",
"SkipRedownloadHelpText": "Megakadályozza, hogy {appName} megpróbáljon letölteni egy alternatív kiadást ehhez az elemhez",
"Specials": "Különlegességek",
"SslCertPasswordHelpText": "Jelszó a pfx fájlhoz",
"StandardEpisodeTypeDescription": "SxxEyy mintával megjelent epizódok",
"StopSelecting": "Kiválasztás leállítása",
"SupportedIndexersMoreInfo": "Az egyes indexelőkkel kapcsolatos további információkért kattintson a további információ gombokra.",
"TableColumnsHelpText": "Válassza ki, hogy mely oszlopok legyenek láthatók, és milyen sorrendben jelenjenek meg",
"TvdbIdExcludeHelpText": "A kizárandó sorozat TVDB azonosítója",
"StandardEpisodeTypeFormat": "Évad- és epizódszámok ({format})",
"StartupDirectory": "Indítási könyvtár",
"SubtitleLanguages": "Feliratnyelvek",
"SourceRelativePath": "Forrás relatív elérési útja",
"True": "Igaz",
"TvdbId": "TVDB ID",
"TorrentBlackholeSaveMagnetFilesExtension": "Magnet Files kiterjesztés mentése",
"TorrentBlackholeSaveMagnetFilesReadOnly": "Csak olvasható",
"Trace": "Nyom",
"TagsSettingsSummary": "Tekintse meg az összes címkét és azok felhasználási módját. A fel nem használt címkék eltávolíthatók",
"TestAllIndexers": "Tesztelje az összes indexelőt",
"TaskUserAgentTooltip": "Az API-t hívó alkalmazás által biztosított felhasználói ügynök",
"ThemeHelpText": "Változtassa meg az alkalmazás felhasználói felület témáját, az \"Auto\" téma az operációs rendszer témáját használja a Világos vagy Sötét mód beállításához. A Theme.Park ihlette",
"TablePageSizeHelpText": "Az egyes oldalakon megjelenítendő elemek száma",
"ToggleMonitoredToUnmonitored": "Felügyelt, kattintson a figyelés megszüntetéséhez",
"Standard": "Alapértelmezett",
"StandardEpisodeFormat": "Alapértelmezett epizód formátum",
"StartProcessing": "Indítsa el a feldolgozást",
"SelectFolder": "Mappa kiválasztása",
"ShowUnknownSeriesItemsHelpText": "Sorozat nélküli elemek megjelenítése a sorban, idetartozhatnak az eltávolított sorozatok, filmek vagy bármi más a(z) {appName} kategóriájában"
}

View File

@@ -7,5 +7,6 @@
"Add": "Legg til",
"Absolute": "Absolutt",
"Activity": "Aktivitet",
"About": "Om"
"About": "Om",
"CalendarOptions": "Kalenderinnstillinger"
}

View File

@@ -392,8 +392,8 @@
"SelectFolder": "Selecionar Pasta",
"Unavailable": "Indisponível",
"UnmappedFolders": "Pastas não mapeadas",
"AutoTaggingNegateHelpText": "Se marcada, a regra de tagging automática não será aplicada se esta condição {implementationName} corresponder.",
"AutoTaggingRequiredHelpText": "Esta condição {implementationName} deve corresponder para que a regra de tagging automática seja aplicada. Caso contrário, uma única correspondência de {implementationName} será suficiente.",
"AutoTaggingNegateHelpText": "se marcada, a regra de etiqueta automática não será aplicada se esta condição {implementationName} corresponder.",
"AutoTaggingRequiredHelpText": "Esta condição {implementationName} deve corresponder para que a regra de etiqueta automática seja aplicada. Caso contrário, uma única correspondência de {implementationName} será suficiente.",
"SomeResultsAreHiddenByTheAppliedFilter": "Alguns resultados estão ocultos pelo filtro aplicado",
"UnableToLoadAutoTagging": "Não foi possível carregar a marcação automática",
"IndexerDownloadClientHealthCheckMessage": "Indexadores com clientes de download inválidos: {indexerNames}.",
@@ -417,7 +417,7 @@
"AddNotificationError": "Não foi possível adicionar uma nova notificação, tente novamente.",
"AddQualityProfile": "Adicionar perfil de qualidade",
"AddQualityProfileError": "Não foi possível adicionar uma nova notificação, tente novamente.",
"AddReleaseProfile": "Adicionar Perfil de Lançamento",
"AddReleaseProfile": "Adicionar um Perfil de Lançamento",
"AddRemotePathMapping": "Adicionar Mapeamento de Caminho Remoto",
"AddRemotePathMappingError": "Não foi possível adicionar um novo mapeamento de caminho remoto, tente novamente.",
"AfterManualRefresh": "Depois da Atualização Manual",
@@ -477,7 +477,7 @@
"ColonReplacementFormatHelpText": "Mude como o {appName} lida com a substituição do dois-pontos",
"CompletedDownloadHandling": "Gerenciamento de Downloads Completos",
"Condition": "Condição",
"ConditionUsingRegularExpressions": "Esta condição corresponde ao uso de expressões regulares. Observe que os caracteres `\\^$.|?*+()[{` têm significados especiais e precisam ser escapados com um `\\`",
"ConditionUsingRegularExpressions": "Esta condição corresponde ao uso de Expressões Regulares. Observe que os caracteres `\\^$.|?*+()[{` têm significados especiais e precisam escape com um `\\`",
"ConnectSettings": "Configurações de Conexão",
"ConnectSettingsSummary": "Notificações, conexões com servidores/reprodutores de mídia e scripts personalizados",
"Connections": "Conexões",
@@ -488,7 +488,7 @@
"CreateGroup": "Criar Grupo",
"Custom": "Personalizar",
"CustomFormat": "Formato personalizado",
"CustomFormatUnknownCondition": "Condição de formato personalizado desconhecido '{implementation}'",
"CustomFormatUnknownCondition": "Condição de Formato Personalizado desconhecida '{implementation}'",
"CustomFormatUnknownConditionOption": "Opção desconhecida '{key}' para a condição '{implementation}'",
"CustomFormatsLoadError": "Não foi possível carregar Formatos Personalizados",
"CustomFormatsSettings": "Configurações de Formatos Personalizados",
@@ -501,7 +501,7 @@
"DefaultDelayProfileSeries": "Este é o perfil padrão. Aplica-se a todas as séries que não possuem um perfil explícito.",
"DelayMinutes": "{delay} Minutos",
"DelayProfile": "Perfil de Atraso",
"DefaultCase": "Minúscula ou maiúscula",
"DefaultCase": "Padrão Maiúscula ou Minúscula",
"DelayProfileSeriesTagsHelpText": "Aplica-se a séries com pelo menos uma tag correspondente",
"DelayProfiles": "Perfis de Atraso",
"DelayProfilesLoadError": "Não foi possível carregar perfis de atraso",
@@ -544,7 +544,7 @@
"EditGroups": "Editar Grupos",
"EditImportListExclusion": "Editar Exclusão de Lista de Importação",
"EditListExclusion": "Editar Exclusão da Lista",
"EditMetadata": "Editar metadados {metadataType}",
"EditMetadata": "Editar {metadataType} Metadados",
"EditQualityProfile": "Editar Perfil de Qualidade",
"EditReleaseProfile": "Editar Perfil de Lançamento",
"EditRemotePathMapping": "Editar Mapeamento do Caminho Remoto",
@@ -574,7 +574,7 @@
"Extend": "Estender",
"ExtraFileExtensionsHelpTextsExamples": "Exemplos: '.sub, .nfo' or 'sub,nfo'",
"FileManagement": "Gerenciamento de Arquivo",
"FileNameTokens": "Tokens de Nome de Arquivo",
"FileNameTokens": "Tokens de nome de arquivo",
"FileNames": "Nomes de Arquivo",
"FirstDayOfWeek": "Primeiro Dia da Semana",
"Folders": "Pastas",
@@ -605,7 +605,7 @@
"Importing": "Importando",
"IncludeCustomFormatWhenRenaming": "Incluir formato personalizado ao renomear",
"IncludeCustomFormatWhenRenamingHelpText": "Incluir no formato de renomeação {Custom Formats}",
"IncludeHealthWarnings": "Incluir avisos de integridade",
"IncludeHealthWarnings": "Incluir Advertências de Saúde",
"IndexerDownloadClientHelpText": "Especifique qual cliente de download é usado para baixar deste indexador",
"IndexerOptionsLoadError": "Não foi possível carregar as opções do indexador",
"IndexerPriority": "Prioridade do indexador",
@@ -620,8 +620,8 @@
"LanguagesLoadError": "Não foi possível carregar os idiomas",
"ListExclusionsLoadError": "Não foi possível carregar as exclusões de lista",
"ListOptionsLoadError": "Não foi possível carregar as opções de lista",
"ListQualityProfileHelpText": "Os itens da lista de perfil de qualidade serão adicionados com",
"ListRootFolderHelpText": "Os itens da lista da pasta raiz serão adicionados a",
"ListQualityProfileHelpText": "Os itens da lista de Perfil de Qualidade que serão adicionados com",
"ListRootFolderHelpText": "Os itens da lista da pasta raiz que serão adicionados",
"ListTagsHelpText": "Tags que serão adicionadas ao importar esta lista",
"ListWillRefreshEveryInterval": "A lista será atualizada a cada {refreshInterval}",
"ListsLoadError": "Não foi possível carregar as listas",
@@ -631,7 +631,7 @@
"LogLevelTraceHelpTextWarning": "O registro em log deve ser habilitado apenas temporariamente",
"Logging": "Registro em log",
"LongDateFormat": "Formato longo de data",
"Lowercase": "Minúsculas",
"Lowercase": "Minúscula",
"ManualImportItemsLoadError": "Não foi possível carregar itens de importação manual",
"Max": "Máx.",
"MaximumLimits": "Limites máximos",
@@ -668,12 +668,12 @@
"MultiEpisodeStyle": "Estilo de multiepisódio",
"MustContain": "Deve conter",
"MustNotContain": "Não deve conter",
"MustNotContainHelpText": "O lançamento será rejeitado se contiver um ou mais destes termos (sem distinção entre maiúsculas e minúsculas)",
"MustNotContainHelpText": "O lançamento será rejeitado se contiver um ou mais termos (não diferenciar maiúsculas e minúsculas)",
"NamingSettings": "Configurações de nomenclatura",
"NamingSettingsLoadError": "Não foi possível carregar as configurações de nomenclatura",
"Never": "Nunca",
"NoChanges": "Sem alterações",
"NoDelay": "Sem atraso",
"NoDelay": "Sem Atraso",
"NoLinks": "Sem links",
"NoTagsHaveBeenAddedYet": "Nenhuma tag foi adicionada ainda",
"None": "Nenhum",
@@ -703,7 +703,7 @@
"Password": "Senha",
"PendingChangesDiscardChanges": "Descartar mudanças e sair",
"PendingChangesStayReview": "Ficar e revisar mudanças",
"Period": "Período",
"Period": "Ponto",
"Permissions": "Permissões",
"PortNumber": "Número da Porta",
"PreferAndUpgrade": "Preferir e Atualizar",
@@ -737,7 +737,7 @@
"RecyclingBinCleanupHelpTextWarning": "Os arquivos na lixeira mais antigos do que o número de dias selecionado serão limpos automaticamente",
"RecyclingBinHelpText": "Os arquivos irão para cá quando excluídos, em vez de serem excluídos permanentemente",
"AbsoluteEpisodeNumber": "Número Absoluto do Episódio",
"AddAutoTagError": "Não foi possível adicionar uma nova tag automática, por favor, tente novamente.",
"AddAutoTagError": "Não foi possível adicionar uma nova etiqueta automática, tente novamente.",
"AnalyseVideoFilesHelpText": "Extraia informações de vídeo, como resolução, tempo de execução e informações de codec de arquivos. Isso requer que o {appName} leia partes do arquivo que podem causar alta atividade no disco ou na rede durante as varreduras.",
"AuthenticationRequiredHelpText": "Altere para quais solicitações a autenticação é necessária. Não mude a menos que você entenda os riscos.",
"AuthenticationRequiredWarning": "Para evitar o acesso remoto sem autenticação, {appName} agora exige que a autenticação esteja habilitada. Opcionalmente, você pode desabilitar a autenticação de endereços locais.",
@@ -753,9 +753,9 @@
"ExtraFileExtensionsHelpText": "Lista separada por vírgulas de arquivos extras para importar (.nfo será importado como .nfo-orig)",
"HistoryLoadError": "Não foi possível carregar o histórico",
"IndexerTagSeriesHelpText": "Usar este indexador apenas para séries com pelo menos uma tag correspondente. Deixe em branco para usar com todas as séries.",
"MediaInfoFootNote": "MediaInfo Full/AudioLanguages/SubtitleLanguages oferece suporte a um sufixo \":EN+DE\", permitindo que você filtre os idiomas inclusos no nome do arquivo. Use \"-DE\" para excluir idiomas específicos. Usar \"+\" (p. ex.: \":EN+\") resultará em \"[EN]\"/\"[EN+--]\"/\"[--]\" dependendo dos idiomas excluídos. P. ex.: \"{MediaInfo Full:EN+DE}\".",
"MediaInfoFootNote": "MediaInfo Full/AudioLanguages/SubtitleLanguages suporta um sufixo `:EN+DE` permitindo filtrar os idiomas incluídos no nome do arquivo. Use `-DE` para excluir idiomas específicos. Anexar `+` (por exemplo, `:EN+`) resultará em `[EN]`/`[EN+--]`/`[--]` dependendo dos idiomas excluídos. Por exemplo, `{MediaInfo Full:EN+DE}`.",
"MinimumFreeSpaceHelpText": "Impedir a importação se deixar menos do que esta quantidade de espaço em disco disponível",
"MustContainHelpText": "O lançamento deve conter pelo menos um desses termos (sem distinção entre maiúsculas e minúsculas)",
"MustContainHelpText": "O lançamento deve conter pelo menos um destes termos (não diferenciar maiúsculas e minúsculas)",
"NegateHelpText": "Se marcado, o formato personalizado não será aplicado se esta condição {implementationName} corresponder.",
"NoLimitForAnyRuntime": "Sem limite para qualquer duração",
"NoMinimumForAnyRuntime": "Sem mínimo para qualquer duração",
@@ -772,7 +772,7 @@
"RegularExpressionsTutorialLink": "Mais detalhes sobre expressões regulares podem ser encontrados [aqui](https://www.regular-expressions.info/tutorial.html).",
"ReleaseProfile": "Perfil de Lançamento",
"ReleaseProfileIndexerHelpText": "Especifique a qual indexador o perfil se aplica",
"ReleaseProfileIndexerHelpTextWarning": "O uso de um indexador específico com perfis de lançamento pode levar à obtenção de lançamentos duplicados",
"ReleaseProfileIndexerHelpTextWarning": "Usar um indexador específico com perfis de lançamento pode levar à captura de lançamentos duplicados",
"ReleaseProfileTagSeriesHelpText": "Os perfis de lançamento serão aplicados a séries com pelo menos uma tag correspondente. Deixe em branco para aplicar a todas as séries",
"ReleaseProfiles": "Perfis de Lançamentos",
"ReleaseProfilesLoadError": "Não foi possível carregar perfis de lançamentos",
@@ -799,8 +799,8 @@
"RestartLater": "Vou reiniciar mais tarde",
"RestartNow": "Reiniciar Agora",
"RestartRequiredHelpTextWarning": "Requer reinicialização para entrar em vigor",
"RestartRequiredToApplyChanges": "O {appName} requer uma reinicialização para aplicar as alterações. Deseja reiniciar agora?",
"RestartRequiredWindowsService": "Dependendo de qual usuário está executando o serviço {appName}, pode ser necessário reiniciar o {appName} como administrador uma vez antes que o serviço seja iniciado automaticamente.",
"RestartRequiredToApplyChanges": "{appName} requer reinicialização para aplicar as alterações. Deseja reiniciar agora?",
"RestartRequiredWindowsService": "Dependendo de qual usuário está executando o serviço {appName}, pode ser necessário reiniciar {appName} como administrador uma vez antes que o serviço seja iniciado automaticamente.",
"RestartSonarr": "Reiniciar {appName}",
"RestrictionsLoadError": "Não foi possível carregar as Restrições",
"Retention": "Retenção",
@@ -901,7 +901,7 @@
"UpgradeUntilThisQualityIsMetOrExceeded": "Atualize até que essa qualidade seja atendida ou excedida",
"UpgradesAllowed": "Atualizações Permitidas",
"UpgradesAllowedHelpText": "se as qualidades desativadas não forem atualizadas",
"Uppercase": "Maiúsculo",
"Uppercase": "Maiuscula",
"UrlBase": "URL base",
"UrlBaseHelpText": "Para suporte a proxy reverso, o padrão é vazio",
"UseProxy": "Usar Proxy",
@@ -1198,7 +1198,7 @@
"InteractiveImportNoLanguage": "Defina um idioma para cada arquivo selecionado",
"InteractiveImportNoQuality": "Defina a qualidade para cada arquivo selecionado",
"InteractiveImportNoSeries": "A série deve ser escolhida para cada arquivo selecionado",
"KeyboardShortcuts": "Atalhos de teclado",
"KeyboardShortcuts": "Atalhos do Teclado",
"KeyboardShortcutsCloseModal": "Fechar pop-up atual",
"KeyboardShortcutsConfirmModal": "Aceitar o pop-up de confirmação",
"KeyboardShortcutsOpenModal": "Abrir este pop-up",
@@ -1484,7 +1484,7 @@
"QueueFilterHasNoItems": "O filtro de fila selecionado não possui itens",
"BlackholeFolderHelpText": "Pasta na qual {appName} armazenará o arquivo {extension}",
"Destination": "Destinação",
"DownloadClientDelugeSettingsUrlBaseHelpText": "Adiciona um prefixo ao URL json do deluge, consulte {url}",
"DownloadClientDelugeSettingsUrlBaseHelpText": "Adiciona um prefixo aURL json do Deluge, consulte {url}",
"DownloadClientDelugeValidationLabelPluginFailure": "Falha na configuração do rótulo",
"DownloadClientDelugeValidationLabelPluginFailureDetail": "{appName} não conseguiu adicionar o rótulo ao {clientName}.",
"DownloadClientDownloadStationProviderMessage": "{appName} não consegue se conectar ao Download Station se a autenticação de dois fatores estiver habilitada em sua conta DSM",
@@ -1496,74 +1496,74 @@
"DownloadClientNzbgetValidationKeepHistoryOverMax": "A configuração NzbGet KeepHistory deve ser menor que 25.000",
"DownloadClientNzbgetValidationKeepHistoryZeroDetail": "A configuração KeepHistory do NzbGet está definida como 0. O que impede que {appName} veja os downloads concluídos.",
"DownloadClientSettingsUrlBaseHelpText": "Adiciona um prefixo ao URL {clientName}, como {url}",
"DownloadClientSettingsUseSslHelpText": "Use conexão segura ao conectar-se a {clientName}",
"DownloadClientSettingsUseSslHelpText": "Usar conexão segura ao conectar-se a {clientName}",
"DownloadClientTransmissionSettingsDirectoryHelpText": "Local opcional para colocar downloads, deixe em branco para usar o local padrão do Transmission",
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Adiciona um prefixo ao URL rpc {clientName}, por exemplo, {url}, o padrão é '{defaultUrl}'",
"DownloadClientValidationAuthenticationFailureDetail": "Por favor, verifique seu nome de usuário e senha. Verifique também se o host que executa {appName} não está impedido de acessar {clientName} pelas limitações da WhiteList na configuração de {clientName}.",
"DownloadClientValidationAuthenticationFailureDetail": "Por favor verifique seu nome de usuário e senha. Verifique também se o host que executa {appName} não está impedido de acessar {clientName} pelas limitações da WhiteList na configuração de {clientName}.",
"DownloadClientValidationSslConnectFailureDetail": "{appName} não consegue se conectar a {clientName} usando SSL. Este problema pode estar relacionado ao computador. Tente configurar {appName} e {clientName} para não usar SSL.",
"NzbgetHistoryItemMessage": "Status PAR: {parStatus} - Status de descompactação: {unpackStatus} - Status de movimentação: {moveStatus} - Status do script: {scriptStatus} - Status de exclusão: {deleteStatus} - Status de marcação: {markStatus}",
"PostImportCategory": "Categoria Pós-Importação",
"SecretToken": "Token Secreto",
"TorrentBlackhole": "Torrent Blackhole",
"TorrentBlackholeSaveMagnetFiles": "Salvar arquivos magnéticos",
"TorrentBlackholeSaveMagnetFilesHelpText": "Salve o link magnético se nenhum arquivo .torrent estiver disponível (útil apenas se o cliente de download suportar magnets salvos em um arquivo)",
"TorrentBlackholeSaveMagnetFiles": "Salvar Arquivos Magnéticos",
"TorrentBlackholeSaveMagnetFilesHelpText": "Salve o link magnético se nenhum arquivo .torrent estiver disponível (útil apenas se o cliente de download suportar magnético salvos em um arquivo)",
"UnknownDownloadState": "Estado de download desconhecido: {state}",
"UsenetBlackhole": "Usenet Blackhole",
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Estado inicial para torrents adicionados ao qBittorrent. Observe que os Torrents Forçados não obedecem às restrições de sementes",
"DownloadClientQbittorrentTorrentStatePathError": "Não foi possível importar. O caminho corresponde ao diretório de download da base do cliente, é possível que 'Manter pasta de nível superior' esteja desativado para este torrent ou 'Layout de conteúdo do torrent' NÃO esteja definido como 'Original' ou 'Criar subpasta'?",
"DownloadClientQbittorrentTorrentStatePathError": "Não foi possível importar. O caminho corresponde ao diretório de download da base do cliente, é possível que 'Manter pasta de nível superior' esteja desabilitado para este torrent ou 'Layout de conteúdo de torrent' NÃO esteja definido como 'Original' ou 'Criar subpasta'?",
"DownloadClientQbittorrentValidationCategoryUnsupportedDetail": "As categorias não são suportadas até a versão 3.3.0 do qBittorrent. Atualize ou tente novamente com uma categoria vazia.",
"DownloadClientQbittorrentValidationRemovesAtRatioLimit": "qBittorrent está configurado para remover torrents quando eles atingem seu limite de proporção de compartilhamento",
"DownloadClientQbittorrentValidationRemovesAtRatioLimitDetail": "{appName} não poderá realizar o tratamento de download concluído conforme configurado. Você pode corrigir isso no qBittorrent ('Ferramentas - Opções...' no menu) alterando 'Opções - BitTorrent - Limitação da proporção de compartilhamento' de 'Removê-los' para 'Pausá-los'",
"DownloadClientQbittorrentValidationRemovesAtRatioLimitDetail": "{appName} não poderá realizar o tratamento de download concluído conforme configurado. Você pode corrigir isso no qBittorrent ('Ferramentas -> Opções...' no menu) alterando 'Opções -> BitTorrent -> Limitação da proporção de compartilhamento' de 'Removê-los' para 'Pausá-los'",
"DownloadClientRTorrentSettingsUrlPathHelpText": "Caminho para o endpoint XMLRPC, consulte {url}. Geralmente é RPC2 ou [caminho para ruTorrent]{url2} ao usar o ruTorrent.",
"DownloadClientSabnzbdValidationCheckBeforeDownloadDetail": "Usar 'Verificar antes do download' afeta a capacidade do {appName} de rastrear novos downloads. Além disso, o Sabnzbd recomenda 'Abortar trabalhos que não podem ser concluídos', pois é mais eficaz.",
"DownloadClientSabnzbdValidationEnableDisableMovieSortingDetail": "Você deve desativar a ordenação de filmes para a categoria usada por {appName} para evitar problemas de importação. Vá para Sabnzbd para consertar.",
"DownloadClientSabnzbdValidationEnableDisableMovieSortingDetail": "Você deve desativar a classificação de filmes para a categoria usada por {appName} para evitar problemas de importação. Vá para Sabnzbd para consertar.",
"DownloadClientSabnzbdValidationEnableJobFoldersDetail": "{appName} prefere que cada download tenha uma pasta separada. Com * anexado à pasta/caminho, o Sabnzbd não criará essas pastas de trabalho. Vá para Sabnzbd para consertar.",
"DownloadClientSettingsCategorySubFolderHelpText": "Adicionar uma categoria específica para {appName} evita conflitos com downloads não relacionados que não sejam de {appName}. Usar uma categoria é opcional, mas altamente recomendado. Cria um subdiretório [categoria] no diretório de saída.",
"XmlRpcPath": "Caminho RPC XML",
"DownloadClientFloodSettingsTagsHelpText": "Etiquetas iniciais de um download. Para ser reconhecido, um download deve ter todas as tags iniciais. Isso evita conflitos com downloads não relacionados.",
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Adiciona propriedades de mídia como tags. As dicas são exemplos.",
"DownloadClientFloodSettingsPostImportTagsHelpText": "Acrescenta tags após a importação de um download.",
"BlackholeWatchFolder": "Pasta Monitorada",
"DownloadClientFloodSettingsTagsHelpText": "Etiquetas iniciais de um download. Para ser reconhecido, um download deve ter todas as etiquetas iniciais. Isso evita conflitos com downloads não relacionados.",
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Adiciona propriedades de mídia como etiquetas. As dicas são exemplos.",
"DownloadClientFloodSettingsPostImportTagsHelpText": "Acrescenta etiquetas após a importação de um download.",
"BlackholeWatchFolder": "Pasta de Monitoramento",
"BlackholeWatchFolderHelpText": "Pasta da qual {appName} deve importar downloads concluídos",
"Category": "Categoria",
"Directory": "Diretório",
"DownloadClientDelugeTorrentStateError": "Deluge está relatando um erro",
"DownloadClientDelugeValidationLabelPluginInactiveDetail": "Você deve ter o plugin Rotulo habilitado em {clientName} para usar categorias.",
"DownloadClientDelugeValidationLabelPluginInactiveDetail": "Você deve ter o plugin tulo habilitado no {clientName} para usar categorias.",
"DownloadClientDownloadStationSettingsDirectory": "Pasta compartilhada opcional para colocar downloads, deixe em branco para usar o local padrão do Download Station",
"DownloadClientDownloadStationValidationApiVersion": "A versão da API do Download Station não é suportada; deve ser pelo menos {requiredVersion}. Suporta de {minVersion} a {maxVersion}",
"DownloadClientDownloadStationValidationFolderMissing": "A pasta não existe",
"DownloadClientDownloadStationValidationNoDefaultDestination": "Nenhum destino padrão",
"DownloadClientDownloadStationValidationNoDefaultDestinationDetail": "Você deve fazer login em seu Diskstation como {username} e configurá-lo manualmente nas configurações do DownloadStation em BT/HTTP/FTP/NZB - Localização.",
"DownloadClientDownloadStationValidationNoDefaultDestinationDetail": "Você deve fazer login em seu Diskstation como {username} e configurá-lo manualmente nas configurações do DownloadStation em BT/HTTP/FTP/NZB -> Localização.",
"DownloadClientDownloadStationValidationSharedFolderMissing": "A pasta compartilhada não existe",
"DownloadClientFloodSettingsAdditionalTags": "Etiquetas Adicionais",
"DownloadClientFloodSettingsPostImportTags": "Etiquetas Pós-Importação",
"DownloadClientFloodSettingsRemovalInfo": "{appName} cuidará da remoção automática de torrents com base nos critérios de propagação atuais em Configurações - Indexadores",
"DownloadClientFloodSettingsStartOnAdd": "Comece em Adicionar",
"DownloadClientFloodSettingsRemovalInfo": "{appName} cuidará da remoção automática de torrents com base nos critérios de propagação atuais em Configurações -> Indexadores",
"DownloadClientFloodSettingsStartOnAdd": "Comece ao Adicionar",
"DownloadClientFloodSettingsUrlBaseHelpText": "Adiciona um prefixo à API Flood, como {url}",
"DownloadClientFreeboxApiError": "A API Freebox retornou um erro: {errorDescription}",
"DownloadClientFreeboxAuthenticationError": "A autenticação na API Freebox falhou. Motivo: {errorDescription}",
"DownloadClientFreeboxNotLoggedIn": "Não logado",
"DownloadClientFreeboxSettingsApiUrl": "URL da API",
"DownloadClientFreeboxSettingsApiUrlHelpText": "Defina o URL base da API Freebox com a versão da API, por exemplo, '{url}', o padrão é '{defaultApiUrl}'",
"DownloadClientFreeboxSettingsAppId": "ID do App",
"DownloadClientFreeboxSettingsAppToken": "Token do App",
"DownloadClientFreeboxSettingsAppId": "ID do Aplicativo",
"DownloadClientFreeboxSettingsAppToken": "Token do Aplicativo",
"DownloadClientFreeboxSettingsAppTokenHelpText": "Token do aplicativo recuperado ao criar acesso à API Freebox (ou seja, 'app_token')",
"DownloadClientFreeboxSettingsHostHelpText": "Nome do host ou endereço IP do host do Freebox, o padrão é '{url}' (só funcionará se estiver na mesma rede)",
"DownloadClientFreeboxUnableToReachFreebox": "Não foi possível acessar a API Freebox. Verifique as configurações de 'Host', 'Porta' ou 'Usar SSL'. (Erro: {exceptionMessage})",
"DownloadClientNzbVortexMultipleFilesMessage": "O download contém vários arquivos e não está em uma pasta de trabalho: {outputPath}",
"DownloadClientNzbgetSettingsAddPausedHelpText": "Esta opção requer pelo menos NzbGet versão 16.0",
"DownloadClientDelugeValidationLabelPluginInactive": "Plugin de tag não está ativado",
"DownloadClientDelugeValidationLabelPluginInactive": "Plugin de rótulo não ativado",
"DownloadClientNzbgetValidationKeepHistoryOverMaxDetail": "A configuração KeepHistory do NzbGet está muito alta.",
"DownloadClientNzbgetValidationKeepHistoryZero": "A configuração KeepHistory do NzbGet deve ser maior que 0",
"DownloadClientPneumaticSettingsNzbFolder": "Pasta Nzb",
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Esta pasta precisará estar acessível no XBMC",
"DownloadClientPneumaticSettingsStrmFolder": "Pasta Strm",
"DownloadClientPneumaticSettingsStrmFolderHelpText": "Os arquivos .strm nesta pasta serão importados pelo drone",
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Primeiro e último primeiro",
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Baixe a primeira e a última peças primeiro (qBittorrent 4.1.0+)",
"DownloadClientQbittorrentSettingsSequentialOrder": "Ordem sequencial",
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Primeiro e Último Primeiro",
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Baixe a primeira e a última partes primeiro (qBittorrent 4.1.0+)",
"DownloadClientQbittorrentSettingsSequentialOrder": "Ordem Sequencial",
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Baixe em ordem sequencial (qBittorrent 4.1.0+)",
"DownloadClientQbittorrentSettingsUseSslHelpText": "Use uma conexão segura. Consulte Opções - UI da Web - 'Usar HTTPS em vez de HTTP' no qBittorrent.",
"DownloadClientQbittorrentSettingsUseSslHelpText": "Use uma conexão segura. Consulte Opções -> UI da Web -> 'Usar HTTPS em vez de HTTP' em qBittorrent.",
"DownloadClientQbittorrentTorrentStateDhtDisabled": "qBittorrent não pode resolver o link magnético com DHT desativado",
"DownloadClientQbittorrentTorrentStateError": "qBittorrent está relatando um erro",
"DownloadClientQbittorrentTorrentStateMetadata": "qBittorrent está baixando metadados",
@@ -1574,55 +1574,55 @@
"DownloadClientQbittorrentValidationCategoryRecommended": "Categoria é recomendada",
"DownloadClientQbittorrentValidationCategoryRecommendedDetail": "{appName} não tentará importar downloads concluídos sem uma categoria.",
"DownloadClientQbittorrentValidationCategoryUnsupported": "A categoria não é suportada",
"DownloadClientQbittorrentValidationQueueingNotEnabled": "Fila não habilitada",
"DownloadClientQbittorrentValidationQueueingNotEnabledDetail": "O Filas de Torrent não está habilitado nas configurações do qBittorrent. Habilite-o no qBittorrent ou selecione Último como prioridade.",
"DownloadClientRTorrentProviderMessage": "O rTorrent não pausará os torrents quando eles atenderem aos critérios de seed. {appName} lidará com a remoção automática de torrents com base nos critérios de propagação atuais em Configurações - Indexadores somente quando a remoção concluída estiver ativada.",
"DownloadClientRTorrentSettingsAddStopped": "Adicionar parado",
"DownloadClientRTorrentSettingsAddStoppedHelpText": "A ativação adicionará torrents e magnets ao rTorrent em um estado parado. Isso pode quebrar os arquivos magnéticos.",
"DownloadClientQbittorrentValidationQueueingNotEnabled": "Fila Não Habilitada",
"DownloadClientQbittorrentValidationQueueingNotEnabledDetail": "O Fila de Torrent não está habilitado nas configurações do qBittorrent. Habilite-o no qBittorrent ou selecione Último como prioridade.",
"DownloadClientRTorrentProviderMessage": "O rTorrent não pausará os torrents quando eles atenderem aos critérios de seed. {appName} lidará com a remoção automática de torrents com base nos critérios de propagação atuais em Configurações->Indexadores somente quando Remover Concluído estiver habilitado. · · Após a importação, ele também definirá {importedView} como uma visualização rTorrent, que pode ser usada em scripts rTorrent para personalizar o comportamento.",
"DownloadClientRTorrentSettingsAddStopped": "Adicionar Parado",
"DownloadClientRTorrentSettingsAddStoppedHelpText": "A ativação adicionará torrents e ímãs ao rTorrent em um estado parado. Isso pode quebrar os arquivos magnéticos.",
"DownloadClientRTorrentSettingsDirectoryHelpText": "Local opcional para colocar downloads, deixe em branco para usar o local padrão do rTorrent",
"DownloadClientRTorrentSettingsUrlPath": "Caminho da URL",
"DownloadClientSabnzbdValidationCheckBeforeDownload": "Desative a opção Verificar antes do download no Sabnbzd",
"DownloadClientSabnzbdValidationDevelopVersion": "Versão de desenvolvimento do Sabnzbd, assumindo a versão 3.0.0 ou superior.",
"DownloadClientSabnzbdValidationDevelopVersionDetail": "{appName} pode não ser compatível com novos recursos adicionados ao SABnzbd ao executar versões de desenvolvimento.",
"DownloadClientSabnzbdValidationEnableDisableDateSorting": "Desabilitar ordenação por data",
"DownloadClientSabnzbdValidationEnableDisableDateSortingDetail": "Você deve desativar a ordenação por data para a categoria usada por {appName} para evitar problemas de importação. Vá para Sabnzbd para consertar.",
"DownloadClientSabnzbdValidationEnableDisableMovieSorting": "Desabilitar Ordenação de Filmes",
"DownloadClientSabnzbdValidationEnableDisableTvSorting": "Desabilitar Ordenação para TV",
"DownloadClientSabnzbdValidationEnableDisableTvSortingDetail": "Você deve desativar a ordenação de TV para a categoria usada por {appName} para evitar problemas de importação. Vá para Sabnzbd para consertar.",
"DownloadClientSabnzbdValidationEnableDisableDateSorting": "Desativar Classificação por Data",
"DownloadClientSabnzbdValidationEnableDisableDateSortingDetail": "Você deve desativar a classificação por data para a categoria usada por {appName} para evitar problemas de importação. Vá para Sabnzbd para consertar.",
"DownloadClientSabnzbdValidationEnableDisableMovieSorting": "Desabilitar Classificação de Filmes",
"DownloadClientSabnzbdValidationEnableDisableTvSorting": "Desabilitar Classificação de TV",
"DownloadClientSabnzbdValidationEnableDisableTvSortingDetail": "Você deve desativar a classificação de TV para a categoria usada por {appName} para evitar problemas de importação. Vá para Sabnzbd para consertar.",
"DownloadClientSabnzbdValidationEnableJobFolders": "Habilitar pastas de trabalho",
"DownloadClientSabnzbdValidationUnknownVersion": "Versão desconhecida: {rawVersion}",
"DownloadClientSabnzbdValidationUnknownVersion": "Versão Desconhecida: {rawVersion}",
"DownloadClientSettingsAddPaused": "Adicionar Pausado",
"DownloadClientSettingsCategoryHelpText": "Adicionar uma categoria específica para {appName} evita conflitos com downloads não relacionados que não sejam de {appName}. Usar uma categoria é opcional, mas altamente recomendado.",
"DownloadClientSettingsDestinationHelpText": "Especifica manualmente o destino do download, deixe em branco para usar o padrão",
"DownloadClientSettingsInitialState": "Estado Inicial",
"DownloadClientSettingsInitialStateHelpText": "Estado inicial dos torrents adicionados ao {clientName}",
"DownloadClientSettingsInitialStateHelpText": "Estado inicial dos torrents adicionados a {clientName}",
"DownloadClientSettingsOlderPriorityEpisodeHelpText": "Prioridade de uso ao baixar episódios que foram ao ar há mais de 14 dias",
"DownloadClientSettingsPostImportCategoryHelpText": "Categoria para {appName} definir após importar o download. {appName} não removerá torrents nessa categoria mesmo que a propagação seja concluída. Deixe em branco para manter a mesma categoria.",
"DownloadClientSettingsRecentPriorityEpisodeHelpText": "Prioridade de uso ao baixar episódios que foram ao ar nos últimos 14 dias",
"DownloadClientSettingsOlderPriority": "Prioridade para os mais antigos",
"DownloadClientSettingsRecentPriority": "Prioridade para os mais recentes",
"DownloadClientSettingsOlderPriority": "Priorizar Mais Antigos",
"DownloadClientSettingsRecentPriority": "Priorizar Recentes",
"DownloadClientUTorrentTorrentStateError": "uTorrent está relatando um erro",
"DownloadClientValidationApiKeyIncorrect": "Chave de API incorreta",
"DownloadClientValidationApiKeyRequired": "Chave de API necessária",
"DownloadClientValidationAuthenticationFailure": "Falha de autenticação",
"DownloadClientValidationAuthenticationFailure": "Falha de Autenticação",
"DownloadClientValidationCategoryMissing": "A categoria não existe",
"DownloadClientValidationCategoryMissingDetail": "A categoria inserida não existe em {clientName}. Crie-a primeiro em {clientName}.",
"DownloadClientValidationCategoryMissingDetail": "A categoria inserida não existe em {clientName}. Crie-o primeiro em {clientName}.",
"DownloadClientValidationErrorVersion": "A versão de {clientName} deve ser pelo menos {requiredVersion}. A versão informada é {reportedVersion}",
"DownloadClientValidationGroupMissing": "O grupo não existe",
"DownloadClientValidationGroupMissingDetail": "O grupo inserido não existe em {clientName}. Crie-a primeiro em {clientName}.",
"DownloadClientValidationGroupMissingDetail": "O grupo inserido não existe em {clientName}. Crie-o primeiro em {clientName}.",
"DownloadClientValidationSslConnectFailure": "Não é possível conectar através de SSL",
"DownloadClientValidationTestNzbs": "Falha ao obter a lista de NZBs: {exceptionMessage}",
"DownloadClientValidationTestTorrents": "Falha ao obter a lista de torrents: {exceptionMessage}",
"DownloadClientValidationUnableToConnect": "Não foi possível conectar-se a {clientName}",
"DownloadClientValidationUnableToConnectDetail": "Verifique o nome do host e a porta.",
"DownloadClientValidationUnknownException": "Exceção desconhecida: {exception}",
"DownloadClientValidationUnknownException": "Exceção desconhecida: {exceção}",
"DownloadClientValidationVerifySsl": "Verifique as configurações de SSL",
"DownloadClientValidationVerifySslDetail": "Verifique sua configuração SSL em {clientName} e {appName}",
"DownloadClientVuzeValidationErrorVersion": "Versão do protocolo não suportada, use Vuze 5.0.0.0 ou superior com o plugin Vuze Web Remote.",
"DownloadStationStatusExtracting": "Extraindo: {progress}%",
"TorrentBlackholeSaveMagnetFilesExtension": "Salvar extensão de arquivos magnéticos",
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Extensão a ser usada para links magnéticos, o padrão é '.magnet'",
"TorrentBlackholeSaveMagnetFilesReadOnly": "Somente para Leitura",
"TorrentBlackholeSaveMagnetFilesReadOnly": "Só Leitura",
"TorrentBlackholeSaveMagnetFilesReadOnlyHelpText": "Em vez de mover arquivos, isso instruirá {appName} a copiar ou vincular (dependendo das configurações/configuração do sistema)",
"TorrentBlackholeTorrentFolder": "Pasta do Torrent",
"UseSsl": "Usar SSL",
@@ -2029,5 +2029,15 @@
"BlocklistAndSearch": "Lista de Bloqueio e Pesquisa",
"BlocklistAndSearchHint": "Inicie uma busca por um substituto após adicionar a lista de bloqueio",
"BlocklistOnlyHint": "Adiciona a Lista de bloqueio sem procurar um substituto",
"IgnoreDownload": "Ignorar Download"
"IgnoreDownload": "Ignorar Download",
"ImportListStatusAllPossiblePartialFetchHealthCheckMessage": "Todas as listas requerem interação manual devido a possíveis buscas parciais",
"KeepAndTagSeries": "Manter e Etiquetar Séries",
"KeepAndUnmonitorSeries": "Manter e Desmonitorar Séries",
"ListSyncLevelHelpText": "As séries na biblioteca serão tratadas com base na sua seleção se elas caírem ou não aparecerem na(s) sua(s) lista(s)",
"ListSyncTag": "Etiqueta de Sincronização de Lista",
"ListSyncTagHelpText": "Esta etiqueta será adicionada quando uma série cair ou não estiver mais na(s) sua(s) lista(s)",
"LogOnly": "Só Registro",
"UnableToLoadListOptions": "Não foi possível carregar as opções da lista",
"CleanLibraryLevel": "Limpar Nível da Biblioteca",
"AddDelayProfileError": "Não foi possível adicionar um novo perfil de atraso. Tente novamente."
}

View File

@@ -21,5 +21,22 @@
"AddCustomFilter": "Додати власний фільтр",
"AddCustomFormat": "Додати власний формат",
"AddDelayProfile": "Додати Профіль Затримки",
"AddCustomFormatError": "Неможливо додати новий власний формат, спробуйте ще раз."
"AddCustomFormatError": "Неможливо додати новий власний формат, спробуйте ще раз.",
"AddListExclusion": "Додати виняток зі списку",
"AbsoluteEpisodeNumbers": "Загальні номери епізодів",
"AbsoluteEpisodeNumber": "Загальний номер епізоду",
"AddImportList": "Додати список імпорту",
"AddIndexer": "Додати Індексер",
"AddNew": "Додати",
"AddNewRestriction": "Додати нове обмеження",
"AddNewSeries": "Додати новий серіал",
"AddDownloadClientImplementation": "Додати клієнт завантаження - {implementationName}",
"AddImportListExclusionError": "Не вдалось додати виняток нового списку імпорту, спробуйте ще раз.",
"AddImportListImplementation": "Додати список імпорту - {implementationName}",
"AddIndexerError": "Неможливо додати новий індексер, спробуйте ще раз.",
"AddIndexerImplementation": "Додати індексер - {implementationName}",
"AddList": "Додати список",
"AddListError": "Неможливо додати новий список, спробуйте ще раз.",
"AddListExclusionError": "Неможливо додати новий виняток зі списку, спробуйте ще раз.",
"AddListExclusionSeriesHelpText": "Заборонити додавання серіалів до {appName} зі списків"
}

View File

@@ -69,7 +69,7 @@ namespace NzbDrone.Core.MediaFiles
_logger = logger;
}
private static readonly Regex ExcludedExtrasSubFolderRegex = new Regex(@"(?:\\|\/|^)(?:extras|extrafanart|behind the scenes|deleted scenes|featurettes|interviews|scenes|samples|shorts|trailers)(?:\\|\/)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex ExcludedExtrasSubFolderRegex = new Regex(@"(?:\\|\/|^)(?:extras|extrafanart|behind the scenes|deleted scenes|featurettes|interviews|other|scenes|samples|shorts|trailers)(?:\\|\/)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex ExcludedSubFoldersRegex = new Regex(@"(?:\\|\/|^)(?:@eadir|\.@__thumb|plex versions|\.[^\\/]+)(?:\\|\/)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex ExcludedExtraFilesRegex = new Regex(@"(-(trailer|other|behindthescenes|deleted|featurette|interview|scene|short)\.[^.]+$)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex ExcludedFilesRegex = new Regex(@"^\._|^Thumbs\.db$", RegexOptions.Compiled | RegexOptions.IgnoreCase);

View File

@@ -0,0 +1,33 @@
using NLog;
using NzbDrone.Core.DecisionEngine;
using NzbDrone.Core.Download;
using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications
{
public class SplitEpisodeSpecification : IImportDecisionEngineSpecification
{
private readonly Logger _logger;
public SplitEpisodeSpecification(Logger logger)
{
_logger = logger;
}
public Decision IsSatisfiedBy(LocalEpisode localEpisode, DownloadClientItem downloadClientItem)
{
if (localEpisode.FileEpisodeInfo == null)
{
return Decision.Accept();
}
if (localEpisode.FileEpisodeInfo.IsSplitEpisode)
{
_logger.Debug("Single episode split into multiple files");
return Decision.Reject("Single episode split into multiple files");
}
return Decision.Accept();
}
}
}

View File

@@ -72,7 +72,11 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications
currentFormats != null ? currentFormats.ConcatToString() : "",
currentFormatScore);
return Decision.Reject("Not a Custom Format upgrade for existing episode file(s)");
return Decision.Reject("Not a Custom Format upgrade for existing episode file(s). New: [{0}] ({1}) do not improve on Existing: [{2}] ({3})",
newFormats != null ? newFormats.ConcatToString() : "",
newFormatScore,
currentFormats != null ? currentFormats.ConcatToString() : "",
currentFormatScore);
}
_logger.Debug("New item's custom formats [{0}] ({1}) improve on [{2}] ({3}), accepting",

View File

@@ -1,12 +0,0 @@
namespace NzbDrone.Core.Organizer
{
public class BasicNamingConfig
{
public bool IncludeSeriesTitle { get; set; }
public bool IncludeEpisodeTitle { get; set; }
public bool IncludeQuality { get; set; }
public bool ReplaceSpaces { get; set; }
public string Separator { get; set; }
public string NumberStyle { get; set; }
}
}

View File

@@ -25,7 +25,6 @@ namespace NzbDrone.Core.Organizer
string BuildFileName(List<Episode> episodes, Series series, EpisodeFile episodeFile, string extension = "", NamingConfig namingConfig = null, List<CustomFormat> customFormats = null);
string BuildFilePath(List<Episode> episodes, Series series, EpisodeFile episodeFile, string extension, NamingConfig namingConfig = null, List<CustomFormat> customFormats = null);
string BuildSeasonPath(Series series, int seasonNumber);
BasicNamingConfig GetBasicNamingConfig(NamingConfig nameSpec);
string GetSeriesFolder(Series series, NamingConfig namingConfig = null);
string GetSeasonFolder(Series series, int seasonNumber, NamingConfig namingConfig = null);
bool RequiresEpisodeTitle(Series series, List<Episode> episodes);
@@ -68,7 +67,7 @@ namespace NzbDrone.Core.Organizer
public static readonly Regex AirDateRegex = new Regex(@"\{Air(\s|\W|_)Date\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
public static readonly Regex SeriesTitleRegex = new Regex(@"(?<token>\{(?:Series)(?<separator>[- ._])(Clean)?Title(The)?(Without)?(Year)?\})",
public static readonly Regex SeriesTitleRegex = new Regex(@"(?<token>\{(?:Series)(?<separator>[- ._])(Clean)?Title(The)?(Without)?(Year)?(?::(?<customFormat>[0-9-]+))?\})",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex FileNameCleanupRegex = new Regex(@"([- ._])(\1)+", RegexOptions.Compiled);
@@ -253,52 +252,6 @@ namespace NzbDrone.Core.Organizer
return path;
}
public BasicNamingConfig GetBasicNamingConfig(NamingConfig nameSpec)
{
var episodeFormat = GetEpisodeFormat(nameSpec.StandardEpisodeFormat).LastOrDefault();
if (episodeFormat == null)
{
return new BasicNamingConfig();
}
var basicNamingConfig = new BasicNamingConfig
{
Separator = episodeFormat.Separator,
NumberStyle = episodeFormat.SeasonEpisodePattern
};
var titleTokens = TitleRegex.Matches(nameSpec.StandardEpisodeFormat);
foreach (Match match in titleTokens)
{
var separator = match.Groups["separator"].Value;
var token = match.Groups["token"].Value;
if (!separator.Equals(" "))
{
basicNamingConfig.ReplaceSpaces = true;
}
if (token.StartsWith("{Series", StringComparison.InvariantCultureIgnoreCase))
{
basicNamingConfig.IncludeSeriesTitle = true;
}
if (token.StartsWith("{Episode", StringComparison.InvariantCultureIgnoreCase))
{
basicNamingConfig.IncludeEpisodeTitle = true;
}
if (token.StartsWith("{Quality", StringComparison.InvariantCultureIgnoreCase))
{
basicNamingConfig.IncludeQuality = true;
}
}
return basicNamingConfig;
}
public string GetSeriesFolder(Series series, NamingConfig namingConfig = null)
{
if (namingConfig == null)
@@ -315,6 +268,7 @@ namespace NzbDrone.Core.Organizer
folderName = CleanFolderName(folderName);
folderName = ReplaceReservedDeviceNames(folderName);
folderName = folderName.Replace("{ellipsis}", "...");
return folderName;
}
@@ -337,6 +291,7 @@ namespace NzbDrone.Core.Organizer
folderName = CleanFolderName(folderName);
folderName = ReplaceReservedDeviceNames(folderName);
folderName = folderName.Replace("{ellipsis}", "...");
return folderName;
}
@@ -492,19 +447,19 @@ namespace NzbDrone.Core.Organizer
private void AddSeriesTokens(Dictionary<string, Func<TokenMatch, string>> tokenHandlers, Series series)
{
tokenHandlers["{Series Title}"] = m => series.Title;
tokenHandlers["{Series CleanTitle}"] = m => CleanTitle(series.Title);
tokenHandlers["{Series TitleYear}"] = m => TitleYear(series.Title, series.Year);
tokenHandlers["{Series CleanTitleYear}"] = m => CleanTitle(TitleYear(series.Title, series.Year));
tokenHandlers["{Series TitleWithoutYear}"] = m => TitleWithoutYear(series.Title);
tokenHandlers["{Series CleanTitleWithoutYear}"] = m => CleanTitle(TitleWithoutYear(series.Title));
tokenHandlers["{Series TitleThe}"] = m => TitleThe(series.Title);
tokenHandlers["{Series CleanTitleThe}"] = m => CleanTitleThe(series.Title);
tokenHandlers["{Series TitleTheYear}"] = m => TitleYear(TitleThe(series.Title), series.Year);
tokenHandlers["{Series CleanTitleTheYear}"] = m => CleanTitleTheYear(series.Title, series.Year);
tokenHandlers["{Series TitleTheWithoutYear}"] = m => TitleWithoutYear(TitleThe(series.Title));
tokenHandlers["{Series CleanTitleTheWithoutYear}"] = m => CleanTitleThe(TitleWithoutYear(series.Title));
tokenHandlers["{Series TitleFirstCharacter}"] = m => TitleFirstCharacter(TitleThe(series.Title));
tokenHandlers["{Series Title}"] = m => Truncate(series.Title, m.CustomFormat);
tokenHandlers["{Series CleanTitle}"] = m => Truncate(CleanTitle(series.Title), m.CustomFormat);
tokenHandlers["{Series TitleYear}"] = m => Truncate(TitleYear(series.Title, series.Year), m.CustomFormat);
tokenHandlers["{Series CleanTitleYear}"] = m => Truncate(CleanTitle(TitleYear(series.Title, series.Year)), m.CustomFormat);
tokenHandlers["{Series TitleWithoutYear}"] = m => Truncate(TitleWithoutYear(series.Title), m.CustomFormat);
tokenHandlers["{Series CleanTitleWithoutYear}"] = m => Truncate(CleanTitle(TitleWithoutYear(series.Title)), m.CustomFormat);
tokenHandlers["{Series TitleThe}"] = m => Truncate(TitleThe(series.Title), m.CustomFormat);
tokenHandlers["{Series CleanTitleThe}"] = m => Truncate(CleanTitleThe(series.Title), m.CustomFormat);
tokenHandlers["{Series TitleTheYear}"] = m => Truncate(TitleYear(TitleThe(series.Title), series.Year), m.CustomFormat);
tokenHandlers["{Series CleanTitleTheYear}"] = m => Truncate(CleanTitleTheYear(series.Title, series.Year), m.CustomFormat);
tokenHandlers["{Series TitleTheWithoutYear}"] = m => Truncate(TitleWithoutYear(TitleThe(series.Title)), m.CustomFormat);
tokenHandlers["{Series CleanTitleTheWithoutYear}"] = m => Truncate(CleanTitleThe(TitleWithoutYear(series.Title)), m.CustomFormat);
tokenHandlers["{Series TitleFirstCharacter}"] = m => Truncate(TitleFirstCharacter(TitleThe(series.Title)), m.CustomFormat);
tokenHandlers["{Series Year}"] = m => series.Year.ToString();
}
@@ -659,15 +614,15 @@ namespace NzbDrone.Core.Organizer
private void AddEpisodeTitleTokens(Dictionary<string, Func<TokenMatch, string>> tokenHandlers, List<Episode> episodes, int maxLength)
{
tokenHandlers["{Episode Title}"] = m => GetEpisodeTitle(GetEpisodeTitles(episodes), "+", maxLength);
tokenHandlers["{Episode CleanTitle}"] = m => GetEpisodeTitle(GetEpisodeTitles(episodes).Select(CleanTitle).ToList(), "and", maxLength);
tokenHandlers["{Episode Title}"] = m => GetEpisodeTitle(GetEpisodeTitles(episodes), "+", maxLength, m.CustomFormat);
tokenHandlers["{Episode CleanTitle}"] = m => GetEpisodeTitle(GetEpisodeTitles(episodes).Select(CleanTitle).ToList(), "and", maxLength, m.CustomFormat);
}
private void AddEpisodeFileTokens(Dictionary<string, Func<TokenMatch, string>> tokenHandlers, EpisodeFile episodeFile, bool useCurrentFilenameAsFallback)
{
tokenHandlers["{Original Title}"] = m => GetOriginalTitle(episodeFile, useCurrentFilenameAsFallback);
tokenHandlers["{Original Filename}"] = m => GetOriginalFileName(episodeFile, useCurrentFilenameAsFallback);
tokenHandlers["{Release Group}"] = m => episodeFile.ReleaseGroup ?? m.DefaultValue("Sonarr");
tokenHandlers["{Release Group}"] = m => Truncate(episodeFile.ReleaseGroup, m.CustomFormat) ?? m.DefaultValue("Sonarr");
}
private void AddQualityTokens(Dictionary<string, Func<TokenMatch, string>> tokenHandlers, Series series, EpisodeFile episodeFile)
@@ -1046,8 +1001,15 @@ namespace NzbDrone.Core.Organizer
return titles;
}
private string GetEpisodeTitle(List<string> titles, string separator, int maxLength)
private string GetEpisodeTitle(List<string> titles, string separator, int maxLength, string formatter)
{
var maxFormatterLength = GetMaxLengthFromFormatter(formatter);
if (maxFormatterLength > 0)
{
maxLength = Math.Min(maxLength, maxFormatterLength);
}
separator = $" {separator.Trim()} ";
var joined = string.Join(separator, titles);
@@ -1144,6 +1106,7 @@ namespace NzbDrone.Core.Organizer
var tokenHandlers = new Dictionary<string, Func<TokenMatch, string>>(FileNameBuilderTokenEqualityComparer.Instance);
tokenHandlers["{Episode Title}"] = m => string.Empty;
tokenHandlers["{Episode CleanTitle}"] = m => string.Empty;
tokenHandlers["{ellipsis}"] = m => "...";
var result = ReplaceTokens(pattern, tokenHandlers, namingConfig);
@@ -1202,6 +1165,30 @@ namespace NzbDrone.Core.Organizer
return result.TrimStart(' ', '.').TrimEnd(' ');
}
private string Truncate(string input, string formatter)
{
var maxLength = GetMaxLengthFromFormatter(formatter);
if (maxLength == 0 || input.Length <= Math.Abs(maxLength))
{
return input;
}
if (maxLength < 0)
{
return $"{{ellipsis}}{input.Reverse().Truncate(Math.Abs(maxLength) - 3).TrimEnd(' ', '.').Reverse()}";
}
return $"{input.Truncate(maxLength - 3).TrimEnd(' ', '.')}{{ellipsis}}";
}
private int GetMaxLengthFromFormatter(string formatter)
{
int.TryParse(formatter, out var maxCustomLength);
return maxCustomLength;
}
}
internal sealed class TokenMatch

View File

@@ -23,6 +23,7 @@ namespace NzbDrone.Core.Parser.Model
public bool IsPartialSeason { get; set; }
public bool IsMultiSeason { get; set; }
public bool IsSeasonExtra { get; set; }
public bool IsSplitEpisode { get; set; }
public bool Special { get; set; }
public string ReleaseGroup { get; set; }
public string ReleaseHash { get; set; }

View File

@@ -74,6 +74,10 @@ namespace NzbDrone.Core.Parser
new Regex(@"^(?:S?(?<season>(?<!\d+)(?:\d{1,2}|\d{4})(?!\d+))(?:(?:[-_]|[ex]){1,2}(?<episode>\d{2,3}(?!\d+))){2,})",
RegexOptions.IgnoreCase | RegexOptions.Compiled),
// Split episodes (S01E05a, S01E05b, etc)
new Regex(@"^(?<title>.+?)(?:S?(?<season>(?<!\d+)(?:\d{1,2}|\d{4})(?!\d+))(?:(?:[-_ ]?[ex])(?<episode>\d{2,3}(?!\d+))(?<splitepisode>[a-d])(?:[ _.])))",
RegexOptions.IgnoreCase | RegexOptions.Compiled),
// Episodes without a title, Single (S01E05, 1x05)
new Regex(@"^(?:S?(?<season>(?<!\d+)(?:\d{1,2}|\d{4})(?!\d+))(?:(?:[-_ ]?[ex])(?<episode>\d{2,3}(?!\d+))))",
RegexOptions.IgnoreCase | RegexOptions.Compiled),
@@ -178,6 +182,10 @@ namespace NzbDrone.Core.Parser
new Regex(@"^(?<title>.+?)?\W*(?<airyear>\d{4})\W+(?<airmonth>[0-1][0-9])\W+(?<airday>[0-3][0-9])(?!\W+[0-3][0-9]).+?(?:s?(?<season>(?<!\d+)(?:\d{1,2})(?!\d+)))(?:[ex](?<episode>(?<!\d+)(?:\d{1,3})(?!\d+)))",
RegexOptions.IgnoreCase | RegexOptions.Compiled),
// Single or multi episode releases with multiple titles, then season and episode numbers after the last title. (Title1 / Title2 / ... / S1E1-2 of 6)
new Regex(@"^((?<title>.*?)[ ._]\/[ ._])+\(?S(?<season>(?<!\d+)\d{1,2}(?!\d+))(?:\W|_)?E?[ ._]?(?<episode>(?<!\d+)\d{1,2}(?!\d+))(?:-(?<episode>(?<!\d+)\d{1,2}(?!\d+)))?([ ._]of[ ._]\d+)?\)?[ ._][\(\[]",
RegexOptions.IgnoreCase | RegexOptions.Compiled),
// Multi-episode with title (S01E05-06, S01E05-6)
new Regex(@"^(?<title>.+?)(?:[-_\W](?<![()\[!]))+S(?<season>(?<!\d+)(?:\d{1,2})(?!\d+))E(?<episode>\d{1,2}(?!\d+))(?:-(?<episode>\d{1,2}(?!\d+)))+(?:[-_. ]|$)",
RegexOptions.IgnoreCase | RegexOptions.Compiled),
@@ -521,7 +529,7 @@ namespace NzbDrone.Core.Parser
private static readonly Regex ExceptionReleaseGroupRegexExact = new Regex(@"(?<releasegroup>(?:D\-Z0N3|Fight-BB|VARYG|E\.N\.D)\b)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
// groups whose releases end with RlsGroup) or RlsGroup]
private static readonly Regex ExceptionReleaseGroupRegex = new Regex(@"(?<releasegroup>(Silence|afm72|Panda|Ghost|MONOLITH|Tigole|Joy|ImE|UTR|t3nzin|Anime Time|Project Angel|Hakata Ramen|HONE|Vyndros|SEV|Garshasp|Kappa|Natty|RCVR|SAMPA|YOGI|r00t|EDGE2020)(?=\]|\)))", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex ExceptionReleaseGroupRegex = new Regex(@"(?<releasegroup>(Silence|afm72|Panda|Ghost|MONOLITH|Tigole|Joy|ImE|UTR|t3nzin|Anime Time|Project Angel|Hakata Ramen|HONE|Vyndros|SEV|Garshasp|Kappa|Natty|RCVR|SAMPA|YOGI|r00t|EDGE2020|RZeroX)(?=\]|\)))", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex YearInTitleRegex = new Regex(@"^(?<title>.+?)[-_. ]+?[\(\[]?(?<year>\d{4})[\]\)]?",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
@@ -966,6 +974,11 @@ namespace NzbDrone.Core.Parser
{
result.Special = true;
}
if (matchGroup.Groups["splitepisode"].Success)
{
result.IsSplitEpisode = true;
}
}
if (absoluteEpisodeCaptures.Any())

View File

@@ -105,11 +105,12 @@ namespace NzbDrone.Core.Update
return false;
}
var tempFolder = _appFolderInfo.TempFolder;
var updateSandboxFolder = _appFolderInfo.GetUpdateSandboxFolder();
if (_diskProvider.GetTotalSize(updateSandboxFolder) < 1.Gigabytes())
if (_diskProvider.GetTotalSize(tempFolder) < 1.Gigabytes())
{
_logger.Warn("Temporary location '{0}' has less than 1 GB free space, Sonarr may not be able to update itself.", updateSandboxFolder);
_logger.Warn("Temporary location '{0}' has less than 1 GB free space, Sonarr may not be able to update itself.", tempFolder);
}
var packageDestination = Path.Combine(updateSandboxFolder, updatePackage.FileName);

View File

@@ -49,12 +49,6 @@ namespace Sonarr.Api.V3.Config
var nameSpec = _namingConfigService.GetConfig();
var resource = nameSpec.ToResource();
if (resource.StandardEpisodeFormat.IsNotNullOrWhiteSpace())
{
var basicConfig = _filenameBuilder.GetBasicNamingConfig(nameSpec);
basicConfig.AddToResource(resource);
}
return resource;
}

View File

@@ -14,11 +14,5 @@ namespace Sonarr.Api.V3.Config
public string SeriesFolderFormat { get; set; }
public string SeasonFolderFormat { get; set; }
public string SpecialsFolderFormat { get; set; }
public bool IncludeSeriesTitle { get; set; }
public bool IncludeEpisodeTitle { get; set; }
public bool IncludeQuality { get; set; }
public bool ReplaceSpaces { get; set; }
public string Separator { get; set; }
public string NumberStyle { get; set; }
}
}

View File

@@ -32,26 +32,9 @@ namespace Sonarr.Api.V3.Config
SeriesFolderFormat = model.SeriesFolderFormat,
SeasonFolderFormat = model.SeasonFolderFormat,
SpecialsFolderFormat = model.SpecialsFolderFormat
// IncludeSeriesTitle
// IncludeEpisodeTitle
// IncludeQuality
// ReplaceSpaces
// Separator
// NumberStyle
};
}
public static void AddToResource(this BasicNamingConfig basicNamingConfig, NamingConfigResource resource)
{
resource.IncludeSeriesTitle = basicNamingConfig.IncludeSeriesTitle;
resource.IncludeEpisodeTitle = basicNamingConfig.IncludeEpisodeTitle;
resource.IncludeQuality = basicNamingConfig.IncludeQuality;
resource.ReplaceSpaces = basicNamingConfig.ReplaceSpaces;
resource.Separator = basicNamingConfig.Separator;
resource.NumberStyle = basicNamingConfig.NumberStyle;
}
public static NamingConfig ToModel(this NamingConfigResource resource)
{
return new NamingConfig

View File

@@ -4737,48 +4737,6 @@
"type": "string"
}
},
{
"name": "includeSeriesTitle",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "includeEpisodeTitle",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "includeQuality",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "replaceSpaces",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "separator",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "numberStyle",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "id",
"in": "query",
@@ -9825,26 +9783,6 @@
"specialsFolderFormat": {
"type": "string",
"nullable": true
},
"includeSeriesTitle": {
"type": "boolean"
},
"includeEpisodeTitle": {
"type": "boolean"
},
"includeQuality": {
"type": "boolean"
},
"replaceSpaces": {
"type": "boolean"
},
"separator": {
"type": "string",
"nullable": true
},
"numberStyle": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
@@ -12082,4 +12020,4 @@
"apikey": [ ]
}
]
}
}

View File

@@ -4,6 +4,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Authentication;
using NzbDrone.Core.Configuration;
@@ -46,7 +47,17 @@ namespace Sonarr.Http.Authentication
await HttpContext.SignInAsync(AuthenticationType.Forms.ToString(), new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookies", "user", "identifier")), authProperties);
return Redirect(_configFileProvider.UrlBase + "/");
if (returnUrl.IsNullOrWhiteSpace())
{
return Redirect(_configFileProvider.UrlBase + "/");
}
if (_configFileProvider.UrlBase.IsNullOrWhiteSpace() || returnUrl.StartsWith(_configFileProvider.UrlBase))
{
return Redirect(returnUrl);
}
return Redirect(_configFileProvider.UrlBase + returnUrl);
}
[HttpGet("logout")]