Compare commits

..

1 Commits

Author SHA1 Message Date
Mark McDowall
17f28a10d5 Fixed: Normalize unicode characters when comparing paths for equality
(cherry picked from commit ceeec091f85d0094e07537b7f62f18292655a710)
2024-11-15 03:02:58 +00:00
48 changed files with 375 additions and 563 deletions

View File

@@ -9,7 +9,7 @@ variables:
testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '0.4.6'
majorVersion: '0.4.4'
minorVersion: $[counter('minorVersion', 1)]
readarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
@@ -1211,7 +1211,7 @@ stages:
- task: SonarCloudAnalyze@2
condition: eq(variables['System.PullRequest.IsFork'], 'False')
displayName: Publish SonarCloud Results
- task: reportgenerator@5.3.11
- task: reportgenerator@5
displayName: Generate Coverage Report
inputs:
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'

View File

@@ -26,7 +26,6 @@ module.exports = (env) => {
const config = {
mode: isProduction ? 'production' : 'development',
devtool: isProduction ? 'source-map' : 'eval-source-map',
target: 'web',
stats: {
children: false

View File

@@ -8,7 +8,6 @@ window.console.debug = window.console.debug || function() {};
window.console.warn = window.console.warn || function() {};
window.console.assert = window.console.assert || function() {};
// TODO: Remove in v5, well suppoprted in browsers
if (!String.prototype.startsWith) {
Object.defineProperty(String.prototype, 'startsWith', {
enumerable: false,
@@ -21,7 +20,6 @@ if (!String.prototype.startsWith) {
});
}
// TODO: Remove in v5, well suppoprted in browsers
if (!String.prototype.endsWith) {
Object.defineProperty(String.prototype, 'endsWith', {
enumerable: false,
@@ -36,14 +34,8 @@ if (!String.prototype.endsWith) {
});
}
// TODO: Remove in v5, use `includes` instead
if (!('contains' in String.prototype)) {
String.prototype.contains = function(str, startIndex) {
return String.prototype.indexOf.call(this, str, startIndex) !== -1;
};
}
// For Firefox ESR 115 support
if (!Object.groupBy) {
import('core-js/actual/object/group-by');
}

View File

@@ -9,7 +9,7 @@
<PackageVersion Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" />
<PackageVersion Include="Equ" Version="2.3.0" />
<PackageVersion Include="FluentAssertions" Version="5.10.3" />
<PackageVersion Include="Polly" Version="8.5.0" />
<PackageVersion Include="Polly" Version="8.4.2" />
<PackageVersion Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" />
<PackageVersion Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" />
<PackageVersion Include="Servarr.FluentMigrator.Runner.Postgres" Version="3.3.2.9" />
@@ -34,18 +34,18 @@
<PackageVersion Include="NLog.Extensions.Logging" Version="5.2.3" />
<PackageVersion Include="NLog" Version="5.1.4" />
<PackageVersion Include="NLog.Targets.Syslog" Version="7.0.0" />
<PackageVersion Include="Npgsql" Version="7.0.9" />
<PackageVersion Include="Npgsql" Version="7.0.8" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
<PackageVersion Include="NUnit" Version="3.14.0" />
<PackageVersion Include="NunitXml.TestLogger" Version="3.0.117" />
<PackageVersion Include="PdfSharpCore" Version="1.3.65" />
<PackageVersion Include="PdfSharpCore" Version="1.3.32" />
<PackageVersion Include="RestSharp.Serializers.SystemTextJson" Version="106.15.0" />
<PackageVersion Include="RestSharp" Version="106.15.0" />
<PackageVersion Include="Selenium.Support" Version="3.141.0" />
<PackageVersion Include="Selenium.WebDriver.ChromeDriver" Version="91.0.4472.10100" />
<PackageVersion Include="Sentry" Version="3.31.0" />
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.6" />
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.5" />
<PackageVersion Include="StyleCop.Analyzers" Version="1.1.118" />
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.6.2" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" />

View File

@@ -21,28 +21,9 @@ namespace NzbDrone.Common.Test.ExtensionTests
[TestCase("1.2.3.4")]
[TestCase("172.55.0.1")]
[TestCase("192.55.0.1")]
[TestCase("100.64.0.1")]
[TestCase("100.127.255.254")]
public void should_return_false_for_public_ip_address(string ipAddress)
{
IPAddress.Parse(ipAddress).IsLocalAddress().Should().BeFalse();
}
[TestCase("100.64.0.1")]
[TestCase("100.127.255.254")]
[TestCase("100.100.100.100")]
public void should_return_true_for_cgnat_ip_address(string ipAddress)
{
IPAddress.Parse(ipAddress).IsCgnatIpAddress().Should().BeTrue();
}
[TestCase("1.2.3.4")]
[TestCase("192.168.5.1")]
[TestCase("100.63.255.255")]
[TestCase("100.128.0.0")]
public void should_return_false_for_non_cgnat_ip_address(string ipAddress)
{
IPAddress.Parse(ipAddress).IsCgnatIpAddress().Should().BeFalse();
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Text;
using FluentAssertions;
using Moq;
using NUnit.Framework;
@@ -316,5 +317,14 @@ namespace NzbDrone.Common.Test
result[2].Should().Be(@"Music");
result[3].Should().Be(@"Author Title");
}
[Test]
public void should_be_equal_with_different_unicode_representations()
{
var path1 = @"C:\Test\file.mkv".AsOsAgnostic().Normalize(NormalizationForm.FormC);
var path2 = @"C:\Test\file.mkv".AsOsAgnostic().Normalize(NormalizationForm.FormD);
path1.PathEquals(path2);
}
}
}

View File

@@ -39,24 +39,18 @@ namespace NzbDrone.Common.Extensions
private static bool IsLocalIPv4(byte[] ipv4Bytes)
{
// Link local (no IP assigned by DHCP): 169.254.0.0 to 169.254.255.255 (169.254.0.0/16)
var isLinkLocal = ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254;
bool IsLinkLocal() => ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254;
// Class A private range: 10.0.0.0 10.255.255.255 (10.0.0.0/8)
var isClassA = ipv4Bytes[0] == 10;
bool IsClassA() => ipv4Bytes[0] == 10;
// Class B private range: 172.16.0.0 172.31.255.255 (172.16.0.0/12)
var isClassB = ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31;
bool IsClassB() => ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31;
// Class C private range: 192.168.0.0 192.168.255.255 (192.168.0.0/16)
var isClassC = ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168;
bool IsClassC() => ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168;
return isLinkLocal || isClassA || isClassC || isClassB;
}
public static bool IsCgnatIpAddress(this IPAddress ipAddress)
{
var bytes = ipAddress.GetAddressBytes();
return bytes.Length == 4 && bytes[0] == 100 && bytes[1] >= 64 && bytes[1] <= 127;
return IsLinkLocal() || IsClassA() || IsClassC() || IsClassB();
}
}
}

View File

@@ -60,6 +60,10 @@ namespace NzbDrone.Common.Extensions
public static bool PathEquals(this string firstPath, string secondPath, StringComparison? comparison = null)
{
// Normalize paths to ensure unicode characters are represented the same way
firstPath = firstPath.Normalize();
secondPath = secondPath?.Normalize();
if (!comparison.HasValue)
{
comparison = DiskProviderBase.PathStringComparison;

View File

@@ -6,5 +6,4 @@ public class AuthOptions
public bool? Enabled { get; set; }
public string Method { get; set; }
public string Required { get; set; }
public bool? TrustCgnatIpAddresses { get; set; }
}

View File

@@ -21,10 +21,10 @@ namespace NzbDrone.Common
{
if (OsInfo.IsWindows)
{
return obj.CleanFilePath().ToLower().GetHashCode();
return obj.CleanFilePath().Normalize().ToLower().GetHashCode();
}
return obj.CleanFilePath().GetHashCode();
return obj.CleanFilePath().Normalize().GetHashCode();
}
}
}

View File

@@ -313,7 +313,7 @@ namespace NzbDrone.Common.Processes
processInfo = new ProcessInfo();
processInfo.Id = process.Id;
processInfo.Name = process.ProcessName;
processInfo.StartPath = process.MainModule?.FileName;
processInfo.StartPath = process.MainModule.FileName;
if (process.Id != GetCurrentProcessId() && process.HasExited)
{

View File

@@ -178,9 +178,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
VerifyWarning(item);
}
[TestCase("pausedDL")]
[TestCase("stoppedDL")]
public void paused_item_should_have_required_properties(string state)
[Test]
public void paused_item_should_have_required_properties()
{
var torrent = new QBittorrentTorrent
{
@@ -189,7 +188,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
Size = 1000,
Progress = 0.7,
Eta = 8640000,
State = state,
State = "pausedDL",
Label = "",
SavePath = ""
};
@@ -201,7 +200,6 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
[TestCase("queuedUP")]
[TestCase("uploading")]
[TestCase("stalledUP")]
@@ -399,9 +397,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
result.OutputPath.FullPath.Should().Be(Path.Combine(torrent.SavePath, "Droned.S01.12"));
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void api_261_should_use_content_path(string state)
[Test]
public void api_261_should_use_content_path()
{
var torrent = new QBittorrentTorrent
{
@@ -410,7 +407,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
Size = 1000,
Progress = 0.7,
Eta = 8640000,
State = state,
State = "pausedUP",
Label = "",
SavePath = @"C:\Torrents".AsOsAgnostic(),
ContentPath = @"C:\Torrents\Droned.S01.12".AsOsAgnostic()
@@ -687,48 +684,44 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
item.CanMoveFiles.Should().BeFalse();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_is_not_set(string state)
[Test]
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_is_not_set()
{
GivenGlobalSeedLimits(-1);
GivenCompletedTorrent(state, ratio: 1.0f);
GivenCompletedTorrent("pausedUP", ratio: 1.0f);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeFalse();
item.CanMoveFiles.Should().BeFalse();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_and_paused(string state)
[Test]
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_and_paused()
{
GivenGlobalSeedLimits(1.0f);
GivenCompletedTorrent(state, ratio: 1.0f);
GivenCompletedTorrent("pausedUP", ratio: 1.0f);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeTrue();
item.CanMoveFiles.Should().BeTrue();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_and_paused(string state)
[Test]
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_and_paused()
{
GivenGlobalSeedLimits(2.0f);
GivenCompletedTorrent(state, ratio: 1.0f, ratioLimit: 0.8f);
GivenCompletedTorrent("pausedUP", ratio: 1.0f, ratioLimit: 0.8f);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeTrue();
item.CanMoveFiles.Should().BeTrue();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_not_be_removable_if_overridden_max_ratio_not_reached_and_paused(string state)
[Test]
public void should_not_be_removable_if_overridden_max_ratio_not_reached_and_paused()
{
GivenGlobalSeedLimits(0.2f);
GivenCompletedTorrent(state, ratio: 0.5f, ratioLimit: 0.8f);
GivenCompletedTorrent("pausedUP", ratio: 0.5f, ratioLimit: 0.8f);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeFalse();
@@ -746,36 +739,33 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
item.CanMoveFiles.Should().BeFalse();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_and_paused(string state)
[Test]
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_and_paused()
{
GivenGlobalSeedLimits(-1, 20);
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20);
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeTrue();
item.CanMoveFiles.Should().BeTrue();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_be_removable_and_should_allow_move_files_if_overridden_max_seedingtime_reached_and_paused(string state)
[Test]
public void should_be_removable_and_should_allow_move_files_if_overridden_max_seedingtime_reached_and_paused()
{
GivenGlobalSeedLimits(-1, 40);
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20, seedingTimeLimit: 10);
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20, seedingTimeLimit: 10);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeTrue();
item.CanMoveFiles.Should().BeTrue();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_not_be_removable_if_overridden_max_seedingtime_not_reached_and_paused(string state)
[Test]
public void should_not_be_removable_if_overridden_max_seedingtime_not_reached_and_paused()
{
GivenGlobalSeedLimits(-1, 20);
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 30, seedingTimeLimit: 40);
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 30, seedingTimeLimit: 40);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeFalse();
@@ -793,72 +783,66 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
item.CanMoveFiles.Should().BeFalse();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_and_paused(string state)
[Test]
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_and_paused()
{
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 20);
GivenCompletedTorrent(state, ratio: 2.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
GivenCompletedTorrent("pausedUP", ratio: 2.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeTrue();
item.CanMoveFiles.Should().BeTrue();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_be_removable_and_should_allow_move_files_if_overridden_max_inactive_seedingtime_reached_and_paused(string state)
[Test]
public void should_be_removable_and_should_allow_move_files_if_overridden_max_inactive_seedingtime_reached_and_paused()
{
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 40);
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20, inactiveSeedingTimeLimit: 10, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(15)).ToUnixTimeSeconds());
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20, inactiveSeedingTimeLimit: 10, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(15)).ToUnixTimeSeconds());
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeTrue();
item.CanMoveFiles.Should().BeTrue();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_not_be_removable_if_overridden_max_inactive_seedingtime_not_reached_and_paused(string state)
[Test]
public void should_not_be_removable_if_overridden_max_inactive_seedingtime_not_reached_and_paused()
{
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 20);
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 30, inactiveSeedingTimeLimit: 40, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(30)).ToUnixTimeSeconds());
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 30, inactiveSeedingTimeLimit: 40, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(30)).ToUnixTimeSeconds());
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeFalse();
item.CanMoveFiles.Should().BeFalse();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_but_ratio_not_and_paused(string state)
[Test]
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_but_ratio_not_and_paused()
{
GivenGlobalSeedLimits(2.0f, 20);
GivenCompletedTorrent(state, ratio: 1.0f, seedingTime: 30);
GivenCompletedTorrent("pausedUP", ratio: 1.0f, seedingTime: 30);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeTrue();
item.CanMoveFiles.Should().BeTrue();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_but_ratio_not_and_paused(string state)
[Test]
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_but_ratio_not_and_paused()
{
GivenGlobalSeedLimits(2.0f, maxInactiveSeedingTime: 20);
GivenCompletedTorrent(state, ratio: 1.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
GivenCompletedTorrent("pausedUP", ratio: 1.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeTrue();
item.CanMoveFiles.Should().BeTrue();
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_not_fetch_details_twice(string state)
[Test]
public void should_not_fetch_details_twice()
{
GivenGlobalSeedLimits(-1, 30);
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20);
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20);
var item = Subject.GetItems().Single();
item.CanBeRemoved.Should().BeFalse();
@@ -870,9 +854,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
.Verify(p => p.GetTorrentProperties(It.IsAny<string>(), It.IsAny<QBittorrentSettings>()), Times.Once());
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_get_category_from_the_category_if_set(string state)
[Test]
public void should_get_category_from_the_category_if_set()
{
const string category = "music-readarr";
GivenGlobalSeedLimits(1.0f);
@@ -884,7 +867,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
Size = 1000,
Progress = 1.0,
Eta = 8640000,
State = state,
State = "pausedUP",
Category = category,
SavePath = "",
Ratio = 1.0f
@@ -896,9 +879,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
item.Category.Should().Be(category);
}
[TestCase("pausedUP")]
[TestCase("stoppedUP")]
public void should_get_category_from_the_label_if_the_category_is_not_available(string state)
[Test]
public void should_get_category_from_the_label_if_the_category_is_not_available()
{
const string category = "music-readarr";
GivenGlobalSeedLimits(1.0f);
@@ -910,7 +892,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
Size = 1000,
Progress = 1.0,
Eta = 8640000,
State = state,
State = "pausedUP",
Label = category,
SavePath = "",
Ratio = 1.0f

View File

@@ -478,37 +478,6 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue();
}
[TestCase("all", 0)]
[TestCase("days-archive", 15)]
[TestCase("days-delete", 15)]
public void should_set_history_removes_completed_downloads_false_for_separate_properties(string option, int number)
{
_config.Misc.history_retention_option = option;
_config.Misc.history_retention_number = number;
var downloadClientInfo = Subject.GetStatus();
downloadClientInfo.RemovesCompletedDownloads.Should().BeFalse();
}
[TestCase("number-archive", 10)]
[TestCase("number-delete", 10)]
[TestCase("number-archive", 0)]
[TestCase("number-delete", 0)]
[TestCase("days-archive", 3)]
[TestCase("days-delete", 3)]
[TestCase("all-archive", 0)]
[TestCase("all-delete", 0)]
public void should_set_history_removes_completed_downloads_true_for_separate_properties(string option, int number)
{
_config.Misc.history_retention_option = option;
_config.Misc.history_retention_number = number;
var downloadClientInfo = Subject.GetStatus();
downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue();
}
[TestCase(@"Y:\nzbget\root", @"completed\downloads", @"vv", @"Y:\nzbget\root\completed\downloads", @"Y:\nzbget\root\completed\downloads\vv")]
[TestCase(@"Y:\nzbget\root", @"completed", @"vv", @"Y:\nzbget\root\completed", @"Y:\nzbget\root\completed\vv")]
[TestCase(@"/nzbget/root", @"completed/downloads", @"vv", @"/nzbget/root/completed/downloads", @"/nzbget/root/completed/downloads/vv")]

View File

@@ -13,7 +13,7 @@ using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class BookInfoProxyFixture : CoreTest<BookInfoProxy>
{
private MetadataProfile _metadataProfile;

View File

@@ -15,7 +15,7 @@ using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class BookInfoProxySearchFixture : CoreTest<BookInfoProxy>
{
[SetUp]

View File

@@ -40,7 +40,7 @@ namespace NzbDrone.Core.Test.MetadataSource.Goodreads
[TestCase("Harry Potter and the sorcerer's stone a detailed summary", 72245296)]
[TestCase("B0192CTMYG", 61209488)]
[TestCase("9780439554930", 3)]
[TestCase("9780439554930", 48517161)]
public void successful_book_search(string title, int expected)
{
var result = Subject.Search(title);

View File

@@ -53,7 +53,6 @@ namespace NzbDrone.Core.Configuration
string SyslogServer { get; }
int SyslogPort { get; }
string SyslogLevel { get; }
string Theme { get; }
string PostgresHost { get; }
int PostgresPort { get; }
string PostgresUser { get; }
@@ -61,7 +60,7 @@ namespace NzbDrone.Core.Configuration
string PostgresMainDb { get; }
string PostgresLogDb { get; }
string PostgresCacheDb { get; }
bool TrustCgnatIpAddresses { get; }
string Theme { get; }
}
public class ConfigFileProvider : IConfigFileProvider
@@ -463,7 +462,5 @@ namespace NzbDrone.Core.Configuration
{
SetValue("ApiKey", GenerateApiKey());
}
public bool TrustCgnatIpAddresses => _authOptions.TrustCgnatIpAddresses ?? GetValueBoolean("TrustCgnatIpAddresses", false, persist: false);
}
}

View File

@@ -404,12 +404,6 @@ namespace NzbDrone.Core.Configuration
public string ApplicationUrl => GetValue("ApplicationUrl", string.Empty);
public bool TrustCgnatIpAddresses
{
get { return GetValueBoolean("TrustCgnatIpAddresses", false); }
set { SetValue("TrustCgnatIpAddresses", value); }
}
private string GetValue(string key)
{
return GetValue(key, string.Empty);

View File

@@ -239,7 +239,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
// Avoid removing torrents that haven't reached the global max ratio.
// Removal also requires the torrent to be paused, in case a higher max ratio was set on the torrent itself (which is not exposed by the api).
item.CanMoveFiles = item.CanBeRemoved = torrent.State is "pausedUP" or "stoppedUP" && HasReachedSeedLimit(torrent, config);
item.CanMoveFiles = item.CanBeRemoved = torrent.State == "pausedUP" && HasReachedSeedLimit(torrent, config);
switch (torrent.State)
{
@@ -248,8 +248,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
item.Message = "qBittorrent is reporting an error";
break;
case "stoppedDL": // torrent is stopped and has NOT finished downloading
case "pausedDL": // torrent is paused and has NOT finished downloading (qBittorrent < 5)
case "pausedDL": // torrent is paused and has NOT finished downloading
item.Status = DownloadItemStatus.Paused;
break;
@@ -260,8 +259,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
item.Status = DownloadItemStatus.Queued;
break;
case "pausedUP": // torrent is paused and has finished downloading (qBittorent < 5)
case "stoppedUP": // torrent is stopped and has finished downloading
case "pausedUP": // torrent is paused and has finished downloading
case "uploading": // torrent is being seeded and data is being transferred
case "stalledUP": // torrent is being seeded, but no connection were made
case "queuedUP": // queuing is enabled and torrent is queued for upload

View File

@@ -26,6 +26,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
Dictionary<string, QBittorrentLabel> GetLabels(QBittorrentSettings settings);
void SetTorrentSeedingConfiguration(string hash, TorrentSeedConfiguration seedConfiguration, QBittorrentSettings settings);
void MoveTorrentToTopInQueue(string hash, QBittorrentSettings settings);
void PauseTorrent(string hash, QBittorrentSettings settings);
void ResumeTorrent(string hash, QBittorrentSettings settings);
void SetForceStart(string hash, bool enabled, QBittorrentSettings settings);
}

View File

@@ -148,7 +148,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
{
request.AddFormParameter("paused", false);
}
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
{
request.AddFormParameter("paused", true);
}
@@ -178,7 +178,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
{
request.AddFormParameter("paused", false);
}
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
{
request.AddFormParameter("paused", true);
}
@@ -214,7 +214,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
catch (DownloadClientException ex)
{
// if setCategory fails due to method not being found, then try older setLabel command for qBittorrent < v.3.3.5
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound)
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound)
{
var setLabelRequest = BuildRequest(settings).Resource("/command/setLabel")
.Post()
@@ -257,7 +257,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
catch (DownloadClientException ex)
{
// qBittorrent rejects all Prio commands with 403: Forbidden if Options -> BitTorrent -> Torrent Queueing is not enabled
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Forbidden)
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Forbidden)
{
return;
}
@@ -266,6 +266,22 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
}
}
public void PauseTorrent(string hash, QBittorrentSettings settings)
{
var request = BuildRequest(settings).Resource("/command/pause")
.Post()
.AddFormParameter("hash", hash);
ProcessRequest(request, settings);
}
public void ResumeTorrent(string hash, QBittorrentSettings settings)
{
var request = BuildRequest(settings).Resource("/command/resume")
.Post()
.AddFormParameter("hash", hash);
ProcessRequest(request, settings);
}
public void SetForceStart(string hash, bool enabled, QBittorrentSettings settings)
{
var request = BuildRequest(settings).Resource("/command/setForceStart")

View File

@@ -246,20 +246,14 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
request.AddFormParameter("category", settings.MusicCategory);
}
// Avoid extraneous API version check if initial state is ForceStart
if ((QBittorrentState)settings.InitialState is QBittorrentState.Start or QBittorrentState.Stop)
// Note: ForceStart is handled by separate api call
if ((QBittorrentState)settings.InitialState == QBittorrentState.Start)
{
var stoppedParameterName = GetApiVersion(settings) >= new Version(2, 11, 0) ? "stopped" : "paused";
// Note: ForceStart is handled by separate api call
if ((QBittorrentState)settings.InitialState == QBittorrentState.Start)
{
request.AddFormParameter(stoppedParameterName, false);
}
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
{
request.AddFormParameter(stoppedParameterName, true);
}
request.AddFormParameter("paused", false);
}
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
{
request.AddFormParameter("paused", true);
}
if (settings.SequentialOrder)
@@ -297,7 +291,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
catch (DownloadClientException ex)
{
// setShareLimits was added in api v2.0.1 so catch it case of the unlikely event that someone has api v2.0
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound)
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound)
{
return;
}
@@ -319,7 +313,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
catch (DownloadClientException ex)
{
// qBittorrent rejects all Prio commands with 409: Conflict if Options -> BitTorrent -> Torrent Queueing is not enabled
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Conflict)
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Conflict)
{
return;
}
@@ -328,6 +322,22 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
}
}
public void PauseTorrent(string hash, QBittorrentSettings settings)
{
var request = BuildRequest(settings).Resource("/api/v2/torrents/pause")
.Post()
.AddFormParameter("hashes", hash);
ProcessRequest(request, settings);
}
public void ResumeTorrent(string hash, QBittorrentSettings settings)
{
var request = BuildRequest(settings).Resource("/api/v2/torrents/resume")
.Post()
.AddFormParameter("hashes", hash);
ProcessRequest(request, settings);
}
public void SetForceStart(string hash, bool enabled, QBittorrentSettings settings)
{
var request = BuildRequest(settings).Resource("/api/v2/torrents/setForceStart")

View File

@@ -1,16 +1,9 @@
using NzbDrone.Core.Annotations;
namespace NzbDrone.Core.Download.Clients.QBittorrent
{
public enum QBittorrentState
{
[FieldOption(Label = "Started")]
Start = 0,
[FieldOption(Label = "Force Started")]
ForceStart = 1,
[FieldOption(Label = "Stopped")]
Stop = 2
Pause = 2
}
}

View File

@@ -263,7 +263,20 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
status.OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) };
}
status.RemovesCompletedDownloads = RemovesCompletedDownloads(config);
if (config.Misc.history_retention.IsNullOrWhiteSpace())
{
status.RemovesCompletedDownloads = false;
}
else if (config.Misc.history_retention.EndsWith("d"))
{
int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1),
out var daysRetention);
status.RemovesCompletedDownloads = daysRetention < 14;
}
else
{
status.RemovesCompletedDownloads = config.Misc.history_retention != "0";
}
return status;
}
@@ -505,43 +518,6 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
return categories.Contains(category);
}
private bool RemovesCompletedDownloads(SabnzbdConfig config)
{
var retention = config.Misc.history_retention;
var option = config.Misc.history_retention_option;
var number = config.Misc.history_retention_number;
switch (option)
{
case "all":
return false;
case "number-archive":
case "number-delete":
return true;
case "days-archive":
case "days-delete":
return number < 14;
case "all-archive":
case "all-delete":
return true;
}
// TODO: Remove these checks once support for SABnzbd < 4.3 is removed
if (retention.IsNullOrWhiteSpace())
{
return false;
}
if (retention.EndsWith("d"))
{
int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1),
out var daysRetention);
return daysRetention < 14;
}
return retention != "0";
}
private bool ValidatePath(DownloadClientItem downloadClientItem)
{
var downloadItemOutputPath = downloadClientItem.OutputPath;

View File

@@ -30,8 +30,6 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
public bool enable_date_sorting { get; set; }
public bool pre_check { get; set; }
public string history_retention { get; set; }
public string history_retention_option { get; set; }
public int history_retention_number { get; set; }
}
public class SabnzbdCategory

View File

@@ -184,7 +184,7 @@ namespace NzbDrone.Core.ImportLists
report.BookGoodreadsId = remoteBook.ForeignBookId;
report.Book = remoteBook.Title;
report.Author ??= remoteBook.AuthorMetadata.Value.Name;
report.AuthorGoodreadsId ??= remoteBook.AuthorMetadata.Value.ForeignAuthorId;
report.AuthorGoodreadsId ??= remoteBook.AuthorMetadata.Value.Name;
}
catch (BookNotFoundException)
{

View File

@@ -784,17 +784,5 @@
"DisabledForLocalAddresses": "Desactivat per a adreces locals",
"Enabled": "Habilitat",
"External": "Extern",
"ApiKey": "Clau API",
"FailedToFetchUpdates": "No s'han pogut obtenir les actualitzacions",
"AptUpdater": "Utilitzeu apt per a instal·lar l'actualització",
"BuiltIn": "Integrat",
"CurrentlyInstalled": "Instal·lat actualment",
"DockerUpdater": "actualitzeu el contenidor Docker per a rebre l'actualització",
"ExternalUpdater": "{appName} està configurat per a utilitzar un mecanisme d'actualització extern",
"InstallLatest": "Instal·la l'últim",
"OnLatestVersion": "La darrera versió de {appName} ja està instal·lada",
"Script": "Script",
"UnmappedFiles": "Carpetes sense mapejar",
"UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,",
"AddMissing": "Afegeix faltants"
"ApiKey": "Clau API"
}

View File

@@ -16,7 +16,7 @@
"AlternateTitles": "Alternativ Titel",
"Analytics": "Analyse",
"AnalyticsEnabledHelpText": "Send anonym brugs- og fejlinformation til {appName}s servere. Dette inkluderer information i din browser, hvilke {appName} WebUI-sider du bruger, fejlrapportering samt OS og runtime-version. Vi bruger disse oplysninger til at prioritere funktioner og fejlrettelser.",
"AppDataDirectory": "AppData-mappe",
"AppDataDirectory": "AppData-bibliotek",
"ApplyTags": "Anvend tags",
"Authentication": "Godkendelse",
"AuthenticationMethodHelpText": "Kræv brugernavn og adgangskode for at få adgang til {appName}",
@@ -40,7 +40,7 @@
"Cancel": "Afbryd",
"CancelPendingTask": "Er du sikker på, at du vil annullere denne afventende opgave?",
"CertificateValidation": "Validering af certifikat",
"CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er. Ændr kun dette hvis du forstå risiciene.",
"CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er",
"ChangeFileDate": "Skift fildato",
"ChangeHasNotBeenSavedYet": "Ændring er endnu ikke gemt",
"ChmodFolder": "chmod mappe",
@@ -63,31 +63,31 @@
"CreateEmptyAuthorFoldersHelpText": "Opret manglende filmmapper under diskscanning",
"CreateGroup": "Opret gruppe",
"CutoffHelpText": "Når denne kvalitet er nået, downloader {appName} ikke længere film",
"CutoffUnmet": "Grænse ikke opnået",
"CutoffUnmet": "Afskåret ude",
"DatabaseMigration": "DB Migration",
"DelayProfile": "Udskyd Profiler",
"DelayProfiles": "Udskyd Profiler",
"DelayingDownloadUntilInterp": "Forsinker download indtil {0} kl. {1}",
"Delete": "Slet",
"DeleteBackup": "Slet sikkerhedskopi",
"DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien »{name}«?",
"DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien '{0}'?",
"DeleteDelayProfile": "Slet forsinkelsesprofil",
"DeleteDelayProfileMessageText": "Er du sikker på, at du vil slette denne forsinkelsesprofil?",
"DeleteDownloadClient": "Slet Download Client",
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil fjerne downloadklienten »{name}«?",
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil slette downloadklienten '{0}'?",
"DeleteEmptyFolders": "Slet tomme mapper",
"DeleteEmptyFoldersHelpText": "Slet tomme filmmapper under diskscanning, og når filmfiler slettes",
"DeleteImportListExclusion": "Slet udelukkelse af importliste",
"DeleteImportListExclusionMessageText": "Er du sikker på, at du vil slette denne undtagelse fra importlisten?",
"DeleteImportListMessageText": "Er du sikker på, at du vil slette listen »{name}«?",
"DeleteImportListMessageText": "Er du sikker på, at du vil slette listen '{0}'?",
"DeleteIndexer": "Slet Indexer",
"DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren »{name}«?",
"DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?",
"DeleteMetadataProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
"DeleteNotification": "Slet underretning",
"DeleteNotificationMessageText": "Er du sikker på, at du vil slette notifikationen »{name}«?",
"DeleteNotificationMessageText": "Er du sikker på, at du vil slette underretningen '{0}'?",
"DeleteQualityProfile": "Slet kvalitetsprofil",
"DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen »{name}«?",
"DeleteReleaseProfile": "Slet udgivelsesprofil",
"DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
"DeleteReleaseProfile": "Slet forsinkelsesprofil",
"DeleteReleaseProfileMessageText": "Er du sikker på, at du vil slette denne forsinkelsesprofil?",
"DeleteSelectedBookFiles": "Slet valgte filmfiler",
"DeleteSelectedBookFilesMessageText": "Er du sikker på, at du vil slette de valgte filmfiler?",
@@ -140,7 +140,7 @@
"GoToInterp": "Gå til {0}",
"Grab": "Tag fat",
"GrabID": "Grab ID",
"GrabRelease": "Hent udgivelse",
"GrabRelease": "Grab Release",
"GrabReleaseMessageText": "{appName} var ikke i stand til at bestemme, hvilken film denne udgivelse var til. {appName} kan muligvis ikke automatisk importere denne udgivelse. Vil du hente '{0}'?",
"GrabSelected": "Greb Valgt",
"Group": "Gruppe",
@@ -151,7 +151,7 @@
"Hostname": "Værtsnavn",
"ICalFeed": "iCal-feed",
"ICalHttpUrlHelpText": "Kopier denne URL til dine klienter eller klik for at abonnere, hvis din browser understøtter webcal",
"ICalLink": "iCal-link",
"ICalLink": "iCal Link",
"IconForCutoffUnmet": "Ikon til Cutoff Unmet",
"IconTooltip": "Planlagt",
"IgnoredAddresses": "Ignorerede adresser",
@@ -274,7 +274,7 @@
"ReleaseRejected": "Udgivelse afvist",
"ReleaseWillBeProcessedInterp": "Udgivelsen behandles {0}",
"Reload": "Genindlæs",
"RemotePathMappings": "Sammenkædning med fjernsti",
"RemotePathMappings": "Remote Path Mappings",
"Remove": "Fjerne",
"RemoveCompletedDownloadsHelpText": "Fjern importerede downloads fra downloadklienthistorik",
"RemoveFailedDownloadsHelpText": "Fjern mislykkede downloads fra downloadklienthistorik",
@@ -458,7 +458,7 @@
"Blocklist": "Blacklist",
"BlocklistRelease": "Udgivelse af sortliste",
"SelectedCountBooksSelectedInterp": "{0} Film (er) valgt",
"ThisCannotBeCancelled": "Dette kan ikke annulleres når først det er startet uden at du deaktiverer alle dine indeksører.",
"ThisCannotBeCancelled": "Dette kan ikke annulleres en gang startet uden genstart af {appName}.",
"UnselectAll": "Fravælg alle",
"UpdateSelected": "Opdatering valgt",
"Wanted": "Ønskede",
@@ -549,7 +549,7 @@
"MoveFiles": "Flyt filer",
"Label": "Etiket",
"HardlinkCopyFiles": "Hardlink/Kopir Filer",
"CustomFormatScore": "Brugerdefineret formats resultat",
"CustomFormatScore": "Bruger Tilpasset Format score",
"MinimumCustomFormatScore": "Minimum tilpasset format score",
"CloneCustomFormat": "Klon brugerdefineret format",
"Conditions": "Betingelser",
@@ -572,7 +572,7 @@
"ShownClickToHide": "Vist, klik for at skjule",
"HideAdvanced": "Gemt Avancerede",
"ShowAdvanced": "Vis avanceret",
"ColonReplacement": "Udskiftning af kolon",
"ColonReplacement": "Udskiftning af tyktarm",
"ReplaceWithDash": "Udskift med Dash",
"ReplaceWithSpaceDash": "Udskift med Space Dash",
"ReplaceWithSpaceDashSpace": "Udskift med Space Dash Space",
@@ -582,7 +582,7 @@
"Negated": "Negeret",
"RemoveSelectedItemBlocklistMessageText": "Er du sikker på, at du vil fjerne de valgte emner fra sortlisten?",
"BlocklistReleases": "Udgivelse af sortliste",
"RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne 1 element fra køen?",
"RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
"RemoveSelectedItemsQueueMessageText": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
"Required": "Påkrævet",
"NoEventsFound": "Ingen begivenheder fundet",
@@ -618,8 +618,8 @@
"System": "System",
"NextExecution": "Næste udførelse",
"NoResultsFound": "Ingen resultater fundet",
"ConnectionLost": "Forbindelse mistet",
"ConnectionLostReconnect": "{appName} vil prøve at tilslutte automatisk. Ellers du kan klikke genindlæs forneden.",
"ConnectionLost": "Forbindelse Mistet",
"ConnectionLostReconnect": "{appName} vil prøve at tilslutte automatisk, eller du kan klikke genindlæs forneden.",
"Location": "Beliggenhed",
"RecentChanges": "Seneste ændringer",
"SomeResultsAreHiddenByTheAppliedFilter": "Nogle resultater skjules af det anvendte filter",
@@ -636,7 +636,7 @@
"ExtraFileExtensionsHelpTextsExamples": "Eksempler: '.sub, .nfo' eller 'sub, nfo'",
"AutoRedownloadFailed": "Download fejlede",
"SourceTitle": "Kildetitel",
"RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne »{sourceTitle}« fra køen?",
"RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
"ImportLists": "Lister",
"ListsSettingsSummary": "Lister",
"CustomFilter": "Bruger Tilpassede Filtere",
@@ -668,6 +668,5 @@
"UnmappedFiles": "Ikke-kortlagte mapper",
"DockerUpdater": "opdater docker-containeren for at modtage opdateringen",
"ExternalUpdater": "{appName} er konfigureret til at bruge en ekstern opdateringsmekanisme",
"OnLatestVersion": "Den seneste version af {appName} er allerede installeret",
"WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien »{name}«?"
"OnLatestVersion": "Den seneste version af {appName} er allerede installeret"
}

View File

@@ -1,5 +1,5 @@
{
"PreviewRename": "Vorschau Umbenennung",
"PreviewRename": "Umbenennen",
"RecyclingBin": "Papierkorb",
"Usenet": "Usenet",
"20MinutesTwenty": "20 Minuten: {0}",
@@ -17,7 +17,7 @@
"AppDataDirectory": "AppData-Verzeichnis",
"ApplyTags": "Schlagworte anwenden",
"Authentication": "Authentifizierung",
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich",
"AuthenticationMethodHelpText": "Für den Zugriff auf Readarr sind Benutzername und Passwort erforderlich",
"AuthorClickToChangeBook": "Klicken um den Film zu bearbeiten",
"AutoRedownloadFailedHelpText": "Suchen Sie automatisch nach einer anderen Version und versuchen Sie, sie herunterzuladen",
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Auf der Festplatte gelöschte Filme auch automatisch in {appName} nicht mehr beobachten",
@@ -57,7 +57,7 @@
"Connections": "Verbindungen",
"CopyUsingHardlinksHelpText": "Hardlinks erstellen wenn Torrents die noch geseeded werden kopiert werden sollen",
"CopyUsingHardlinksHelpTextWarning": "Dateisperren Gelegentlich kann es vorkommen, dass Dateisperren das Umbenennen von Dateien verhindern, die gerade geseeded werden. Sie können das Seeding vorübergehend deaktivieren und die Umbenennungsfunktion von Readarr als Workaround verwenden.",
"CreateEmptyAuthorFoldersHelpText": "Leere Autorenordner für fehlende Autoren beim Scan erstellen",
"CreateEmptyAuthorFoldersHelpText": "Leere Filmordner für fehlende Filme beim Scan erstellen",
"CreateGroup": "Gruppe erstellen",
"CutoffHelpText": "Sobald diese Qualität erreicht wird, werden keine neuen Releases erfasst",
"CutoffUnmet": "Schwelle nicht erreicht",
@@ -96,7 +96,7 @@
"DiskSpace": "Festplattenplatz",
"Docker": "Docker",
"DownloadClientSettings": "Downloader Einstellungen",
"DownloadClients": "Download Clients",
"DownloadClients": "Downloader",
"DownloadFailedCheckDownloadClientForMoreDetails": "Download fehlgeschlagen: Prüfe den Downloader für mehr Details",
"DownloadFailedInterp": "Download fehlgeschlagen: {0}",
"DownloadPropersAndRepacksHelpTexts1": "Automatisch Proper oder Repacks zum upgraden eines Filmes zulassen",
@@ -104,18 +104,18 @@
"Edit": "Bearbeiten",
"Edition": "Auflage",
"Enable": "Aktivieren",
"EnableAutomaticAdd": "Automatisches Hinzufügen aktivieren",
"EnableAutomaticAdd": "Automatisch hinzufügen",
"EnableAutomaticSearch": "Automatische Suche einschalten",
"EnableColorImpairedMode": "Farbenblindmodus aktivieren",
"EnableColorImpairedModeHelpText": "Stiländerung, um es Farbenblinden Benutzern zu ermöglichen, farbcodierte Informationen besser zu unterscheiden",
"EnableCompletedDownloadHandlingHelpText": "Automatischer Import abgeschlossener Downloads vom Download Client",
"EnableHelpText": "Aktiviere die Erstellung von Metadaten-Dateien für diesen Metadaten-Typ",
"EnableColorImpairedMode": "Farbbeeinträchtigter Modus aktivieren",
"EnableColorImpairedModeHelpText": "Alternativer Stil, um farbbeeinträchtigten Benutzern eine bessere Unterscheidung farbcodierter Informationen zu ermöglichen",
"EnableCompletedDownloadHandlingHelpText": "Importiere fertige Downloads vom Downloader automatisch",
"EnableHelpText": "Metadaten Dateien erstellen für diesen Metadata Typ",
"EnableInteractiveSearch": "Interaktive Suche einschalten",
"EnableRSS": "RSS aktivieren",
"EnableSSL": "SSL",
"EnableSslHelpText": " Erfordert einen Neustart als Administrator",
"Ended": "Beendet",
"ErrorLoadingContents": "Fehler beim Laden von Inhalten",
"ErrorLoadingContents": "Fehler beim laden der Inhalte",
"ErrorLoadingPreviews": "Fehler beim laden der Vorschauen",
"Exception": "Ausnahme",
"FailedDownloadHandling": "Verarbeitung fehlgeschlagener Downloads",
@@ -132,20 +132,20 @@
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Für mehr Infomationen klicke auf die Info-Knöpfe.",
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Für mehr Infomationen klicke auf die Info-Knöpfe.",
"GeneralSettings": "Allgemeine Einstellungen",
"Global": "Weltweit",
"Global": "Global",
"GoToInterp": "Zu {0} gehen",
"Grab": "Holen",
"Grab": "Erfasse",
"GrabID": "Erfass ID",
"GrabRelease": "Release holen",
"GrabRelease": "Release erfassen",
"GrabReleaseMessageText": "Das Release konnte keinem Film zugeordnet werden. Ein automatischer Import wird nicht möglich sein. Trotzdem '{0}' erfassen?",
"GrabSelected": "Auswahl abrufen",
"GrabSelected": "Auswahl erfassen",
"Group": "Gruppe",
"HasPendingChangesNoChanges": "Keine Änderungen",
"HasPendingChangesSaveChanges": "Änderungen speichern",
"History": "Verlauf",
"Host": "Host",
"Hostname": "Hostname",
"ICalFeed": "iCal Feed",
"ICalFeed": "iCal-Feed",
"ICalHttpUrlHelpText": "Füge diese URL in deinen Client ein oder klicke auf abonnieren wenn dein Browser Webcal untertützt",
"ICalLink": "iCal Link",
"IconForCutoffUnmet": "Symbol für Schwelle nicht erreicht",
@@ -154,17 +154,17 @@
"IgnoredHelpText": "Ein Release wird abgelehnt, wenn es einen oder mehrere dieser Begriffe enthält (Groß- und Kleinschreibung wird nicht berücksichtigt)",
"IgnoredPlaceHolder": "Neue Beschränkung hinzufügen",
"IllRestartLater": "Später neustarten",
"ImportExtraFiles": "Zusätzliche Dateien importieren",
"ImportExtraFiles": "Extra Dateien importieren",
"ImportExtraFilesHelpText": "Importiere zutreffende Extra Dateien (Untertitel, nfo, etc.) nach dem Importieren einer Filmdatei",
"ImportFailedInterp": "Import fehlgeschlagen: {0}",
"ImportedTo": "Importiert nach",
"Importing": "Importiere",
"IncludeHealthWarningsHelpText": "Zustandswarnung",
"IncludeUnknownAuthorItemsHelpText": "Einträge ohne eine Zuordnung in der Warteschlange anzeigen. Dies könnten gelöschte Autoren, Bücher oder alles andere mit Readarrs Downloadkategorie sein",
"IncludeUnmonitored": "Unüberwachte einbeziehen",
"IncludeUnmonitored": "Nicht beobachtete einbeziehen",
"Indexer": "Indexer",
"IndexerPriority": "Indexer-Priorität",
"IndexerSettings": "Indexer-Einstellungen",
"IndexerPriority": "Priorität",
"IndexerSettings": "Indexer Einstellungen",
"Indexers": "Indexer",
"Interval": "Intervall",
"IsCutoffCutoff": "Schwelle",
@@ -175,7 +175,7 @@
"LoadingBookFilesFailed": "Laden der Film-Dateien fehlgeschlagen",
"Local": "Lokal",
"LogFiles": "Protokolldateien",
"LogLevel": "Protokollstufe",
"LogLevel": "Log Level",
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "Trace logging sollte nur kurzzeitig aktiviert werden",
"Logging": "Protokollierung",
"Logs": "Protokolle",
@@ -187,52 +187,52 @@
"MaximumLimits": "Maximale Grenzen",
"MaximumSize": "Maximale Größe",
"MaximumSizeHelpText": "Maximale Größe für ein zu erfassendes Release in MB. 0 bedeutet unbegrenzt.",
"Mechanism": "Mechanismus",
"MediaInfo": "Medieninfo",
"MediaManagementSettings": "Einstellungen zur Medienverwaltung",
"Mechanism": "Verfahren",
"MediaInfo": "Medien Information",
"MediaManagementSettings": "Medienverwaltungs Einstellungen",
"Message": "Nachricht",
"MetadataSettings": "Einstellungen für Metadaten",
"MetadataSettings": "Metadaten Einstellungen",
"MinimumAge": "Mindestalter",
"MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten von NZBs, bevor sie heruntergeladen werden. Verwende dies, um neuen Releases Zeit zu geben, zu deinem Usenet-Anbieter zu propagieren.",
"MinimumFreeSpace": "Mindestfreier Speicherplatz",
"MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten der NZBs bevor sie erfasst werden. Gebe damit neuen Releases Zeit, sich bei deinem Usenet Provider zu verbreiten.",
"MinimumFreeSpace": "Mindest freier Speicher",
"MinimumFreeSpaceWhenImportingHelpText": "Importieren verhindern wenn weniger als dieser Wert als freier Speicher zur Verfügung steht",
"MinimumLimits": "Minimale Grenzen",
"MinimumLimits": "Mindest Grenzen",
"Missing": "Fehlend",
"Mode": "Modus",
"Monitored": "Überwacht",
"Monitored": "Beobachtet",
"MoreInfo": "Mehr Infos",
"MustContain": "Muss enthalten",
"MustNotContain": "Darf nicht enthalten",
"MustContain": "Muss beinhalten",
"MustNotContain": "Darf nicht beinhalten",
"Name": "Name",
"NamingSettings": "Benennungseinstellungen",
"NamingSettings": "Bennenungs Einstellungen",
"New": "Neu",
"NoBackupsAreAvailable": "Keine Sicherungen verfügbar",
"NoBackupsAreAvailable": "Es sind keine Backups vorhanden",
"NoHistory": "Kein Verlauf.",
"NoLeaveIt": "Nein, lass es",
"NoLimitForAnyRuntime": "Kein Limit für beliebige Laufzeit",
"NoLogFiles": "Keine Logdateien",
"NoMinimumForAnyRuntime": "Kein Minimum für beliebige Laufzeit",
"NoLeaveIt": "Nein, nicht ändern",
"NoLimitForAnyRuntime": "Keine Begrenzung der Laufzeiten",
"NoLogFiles": "Keine Log-Dateien",
"NoMinimumForAnyRuntime": "Kein Minimum für Laufzeiten",
"NoUpdatesAreAvailable": "Es sind keine Updates verfügbar",
"None": "Keine",
"NotificationTriggers": "Benachrichtigungs-Auslöser",
"NotificationTriggers": "Benachrichtigungs Auslöser",
"OnGrabHelpText": "Erfassen",
"OnHealthIssueHelpText": "Zustandsproblem",
"OnRenameHelpText": "Umbennenen",
"OnUpgradeHelpText": "Upgrade",
"OpenBrowserOnStart": "Browser beim Start öffnen",
"Options": "Optionen",
"Original": "Original",
"Overview": "Überblick",
"PackageVersion": "Paketversion",
"Original": "Orginal",
"Overview": "Übersicht",
"PackageVersion": "Paket Version",
"PageSize": "Einträge pro Seite",
"PageSizeHelpText": "Anzahl der Einträge pro Seite",
"Password": "Passwort",
"Path": "Pfad",
"Permissions": "Berechtigungen",
"Permissions": "Rechte",
"Port": "Port",
"PortHelpTextWarning": "Erfordert einen Neustart",
"PortNumber": "Portnummer",
"PosterSize": "Postergröße",
"PortNumber": "Port Nummer",
"PosterSize": "Plakatgröße",
"Profiles": "Profile",
"Proper": "Korrekt",
"PropersAndRepacks": "Propers und Repacks",
@@ -267,22 +267,22 @@
"ReleaseGroup": "Release-Gruppe",
"ReleaseRejected": "Release abgelehnt",
"ReleaseWillBeProcessedInterp": "Release wird verarbeitet {0}",
"Reload": "Neu laden",
"Reload": "Neuladen",
"RemotePathMappings": "Remote-Pfadzuordnungen",
"Remove": "Entfernen",
"RemoveCompletedDownloadsHelpText": "Entferne importierte Downloads aus der Download-Client-Historie",
"RemoveCompletedDownloadsHelpText": "Importierte Downloads aus dem Downloader Verlauf entfernen",
"RemoveFailedDownloadsHelpText": "Fehlgeschlagene Downloads aus dem Downloader Verlauf entfernen",
"RemoveFilter": "Filter entfernen",
"RemoveFromDownloadClient": "Aus dem Download Client entfernen",
"RemoveFromQueue": "Aus der Warteschlange entfernen",
"RemoveFromQueue": "Aus der Warteschlage entfernen",
"RemoveHelpTextWarning": "Dies wird den Download und alle bereits heruntergeladenen Dateien aus dem Downloader entfernen.",
"RemoveSelected": "Ausgewählte entfernen",
"RemoveSelected": "Auswahl entfernen",
"RemoveTagExistingTag": "Vorhandener Tag",
"RemoveTagRemovingTag": "Tag entfernen",
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlange entfernt",
"RenameBooksHelpText": "Wenn das umbennen deaktiviert ist, wird der vorhandene Dateiname benutzt",
"Reorder": "Neu anordnen",
"ReplaceIllegalCharacters": "Illegale Zeichen ersetzen",
"Reorder": "Neu sortieren",
"ReplaceIllegalCharacters": "Sonderzeichen ersetzen",
"RequiredHelpText": "Das Release mus mindesten eines der Begriffe beinhalten ( Groß-/Kleinschreibung wird nicht beachtet )",
"RequiredPlaceHolder": "Neue Beschränkung hinzufügen",
"RescanAfterRefreshHelpTextWarning": "Wenn nicht \"Immer (Always)\" ausgewählt wird, werden Dateiänderungen nicht automatisch erkannt",
@@ -298,35 +298,35 @@
"Result": "Ergebnis",
"RetentionHelpText": "Nur Usenet: Auf Null setzen, um eine unbegrenzte Aufbewahrung festzulegen",
"RetryingDownloadInterp": "Herunterladen nochmal versuchen {0} um {1}",
"RootFolder": "Root-Ordner",
"RootFolders": "Root-Ordner",
"RssSyncIntervalHelpText": "Intervall in Minuten. Setze auf null, um es zu deaktivieren (dies stoppt alle automatischen Release-Abfragen)",
"RootFolder": "Stammordner",
"RootFolders": "Stammordner",
"RssSyncIntervalHelpText": "Intervall in Minuten. Zum deaktivieren auf 0 setzen ( Dies wird das automatische Release erfassen deaktivieren )",
"SSLCertPassword": "SSL Zertifikat Passwort",
"SSLCertPath": "Pfad zum SSL Zertifikat",
"SSLPort": "SSL Port",
"Scheduled": "Geplant",
"ScriptPath": "Skript-Pfad",
"Search": "Suchen",
"SearchAll": "Alle durchsuchen",
"SearchForMissing": "Suche nach fehlenden Episoden",
"SearchSelected": "Ausgewählte durchsuchen",
"ScriptPath": "Script Pfad",
"Search": "Suche",
"SearchAll": "Suche alle",
"SearchForMissing": "Suche fehlende",
"SearchSelected": "Auswahl suchen",
"Security": "Sicherheit",
"SendAnonymousUsageData": "Sende anonyme Nutzungsdaten",
"SetPermissions": "Berechtigungen festlegen",
"SetPermissionsLinuxHelpText": "Soll chmod beim Importieren/Umbenennen von Dateien ausgeführt werden?",
"SetPermissions": "Rechte setzen",
"SetPermissionsLinuxHelpText": "Soll CHMOD ausgeführt werden wenn Datien importiert/umbenannt werden?",
"SetPermissionsLinuxHelpTextWarning": "Wenn Sie nicht sicher sind, was diese Einstellungen bewirken, ändern Sie sie nicht.",
"Settings": "Einstellungen",
"ShortDateFormat": "Kurzes Datumsformat",
"ShowCutoffUnmetIconHelpText": "Symbol zeigen wenn die Qualitätsschwelle noch nicht erreicht wurde",
"ShowDateAdded": "Datum der Hinzufügung anzeigen",
"ShowPath": "Pfad anzeigen",
"ShowQualityProfile": "Qualitätsprofil anzeigen",
"ShowQualityProfileHelpText": "Qualitätsprofil unter dem Poster anzeigen",
"ShowRelativeDates": "Relative Daten anzeigen",
"ShowRelativeDatesHelpText": "Relative (Heute/Gestern/etc.) oder absolute Daten anzeigen",
"ShowQualityProfile": "Qualitätsdefinition anzeigen",
"ShowQualityProfileHelpText": "Qualitätsprofil unter dem Plakat anzeigen",
"ShowRelativeDates": "Relatives Datum anzeigen",
"ShowRelativeDatesHelpText": "Relatives (z.B.: Heute, gestern, etc) oder absolutes Datum anzeigen",
"ShowSearch": "Suche anzeigen",
"ShowSearchActionHelpText": "Suchbutton anzeigen beim draufzeigen",
"ShowSizeOnDisk": "Größe auf der Festplatte anzeigen",
"ShowSizeOnDisk": "Belegter Speicherplatz anzeigen",
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Wird in der Wochenansicht über jeder Spalte angezeigt",
"Size": " Größe",
"SkipFreeSpaceCheck": "Prüfung des freien Speichers überspringen",
@@ -400,7 +400,7 @@
"UnableToLoadTags": "Tags konnten nicht geladen werden",
"UnableToLoadTheCalendar": "Kalender konnte nicht geladen werden",
"UnableToLoadUISettings": "Oberflächen Einstellungen konnten nicht geladen werden",
"Ungroup": "Gruppierung aufheben",
"Ungroup": "Gruppe entfernen",
"UnmonitoredHelpText": "Nicht beobachtete Filme im iCal-Feed einschließen",
"UpdateAll": "Alle aktualisieren",
"UpdateAutomaticallyHelpText": "Updates automatisch herunterladen und installieren. Sie können weiterhin über System: Updates installieren",
@@ -473,7 +473,7 @@
"OutputPath": "Ausgabe-Pfad",
"PortHelpText": "Calibre-Content-Server",
"Progress": "Fortschritt",
"ReleaseTitle": "Release-Titel",
"ReleaseTitle": "Release Titel",
"Actions": "Aktionen",
"Today": "Heute",
"Tomorrow": "Morgen",
@@ -489,7 +489,7 @@
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Der Filmordner und dessen Inhalt wird gelöscht.",
"DeleteFilesHelpText": "Lösche die Buchdateien und Autorordner",
"Component": "Komponente",
"Level": "Level",
"Level": "Stufe",
"Time": "Zeit",
"RemoveFromBlocklist": "Aus der Sperrliste entfernen",
"UnableToLoadBlocklist": "Sperrliste konnte nicht geladen werden",
@@ -514,7 +514,7 @@
"CatalogNumber": "Katalog Nummer",
"ContinuingAllBooksDownloaded": "Fortfahren (Alle Bücher heruntergeladen)",
"DeleteMetadataProfile": "Metadaten Profil löschen",
"ImportListExclusions": "Ausschlüsse aus der Importliste",
"ImportListExclusions": "Ausschlüsse der Importliste",
"ImportLists": "Importlisten",
"ImportListSettings": "Allgemeine Importlisten-Einstellungen",
"ImportListSpecificSettings": "Listenspezifische Einstellungen importieren",
@@ -531,7 +531,7 @@
"MetadataProfile": "Metadaten Profil",
"MetadataProfileIdHelpText": "Metadaten Profil Listenelemente sollten hinzugefügt werden mit",
"MetadataProfiles": "Metadaten Profile",
"MonitoringOptions": "Überwachungsoptionen",
"MonitoringOptions": "Beobachtungsoptionen",
"MusicbrainzId": "MusicBrainz Id",
"WatchRootFoldersForFileChanges": "Beobachte Stammverzeichnis auf Dateiänderungen",
"OnDownloadFailure": "Bei fehlgeschlagenem Download",
@@ -556,7 +556,7 @@
"FutureDays": "Zukünftige Tage",
"FutureDaysHelpText": "Tage die iCal-Feed in die Zukunft schauen soll",
"FutureBooks": "Zukünftige Bücher",
"GeneralSettingsSummary": "Port, SSL, Benutzername/Kennwort, Proxy, Analyse und Updates",
"GeneralSettingsSummary": "Port, SSL, Benutzername/Passwort, Proxy, Analytik und Updates",
"IndexerJackettAll": "Indexer, welche den nicht unterstützten 'all'-Endpoint von Jackett verwenden: {0}",
"IndexerLongTermStatusCheckAllClientMessage": "Alle Indexer sind wegen über 6 Stunden langen bestehender Fehler nicht verfügbar",
"IsExpandedShowFileInfo": "Dateiinformationen anzeigen",
@@ -595,23 +595,23 @@
"IndexerIdHelpTextWarning": "Die Verwendung eines bestimmten Indexers mit bevorzugten Wörtern kann dazu führen, dass Veröffentlichungen mehrfach erfasst werden",
"LatestBook": "Neuestes Buch",
"MetadataProviderSource": "Metadaten Anbieter Quelle",
"MetadataSource": "Metadatenquelle",
"MetadataSource": "Metadaten Quelle",
"MetadataSourceHelpText": "Alternative Metadaten Quelle (Leer lassen für Standard)",
"MusicBrainzRecordingID": "MusicBrainz Aufnahme Id",
"MusicBrainzReleaseID": "MusicBrainz Veröffentlichung Id",
"MusicBrainzTrackID": "MusicBrainz Titel Id",
"OnGrab": "Bei Abruf",
"OnGrab": "Bei Erfassung",
"OnImportFailureHelpText": "Bei fehlgeschlagenem Import",
"OnReleaseImport": "Bei Veröffentlichungsimport",
"OnReleaseImportHelpText": "Bei Veröffentlichungsimport",
"OnRename": "Bei Umbenennung",
"PastDaysHelpText": "Tage für iCal-Feed, um in die Vergangenheit zu schauen",
"PathHelpTextWarning": "Dies muss ein anderes Verzeichnis sein als das, in dem der Download Client die Dateien ablegt",
"ReleaseProfiles": "Release-Profile",
"ReleaseProfiles": "Veröffentlichungsprofile",
"RootFolderPathHelpText": "Die Elemente im Stammverzeichnis werden hinzugefügt zu",
"SearchMonitored": "Suche überwachte Episoden",
"SearchMonitored": "Suche beobachtete",
"ShowName": "Zeige Name",
"SkipRedownload": "Neu-Download überspringen",
"SkipRedownload": "Überspringe erneuten Download",
"StatusEndedContinuing": "Fortfahren",
"UnableToLoadMetadataProviderSettings": "Einstellungen für Metadata Provider konnten nicht geladen werden",
"UpdatingIsDisabledInsideADockerContainerUpdateTheContainerImageInstead": "Aktualisierung innerhalb des Docker Containers ist deaktiviert. Aktualisieren Sie stattdessen das Container Image.",
@@ -622,7 +622,7 @@
"DefaultQualityProfileIdHelpText": "Standard Qualitätsprofil für Autoren, die in diesem Ordner gefunden werden",
"DefaultReadarrTags": "Standard Readarr Tags",
"DeleteBookFile": "Buchdatei löschen",
"OnHealthIssue": "Bei Gesundheitsproblem",
"OnHealthIssue": "Bei Zustandsproblem",
"QualityProfileIdHelpText": "Qualitätsprofil mit dem Listemelemente hinzugefügt werden sollen",
"UnmappedFiles": "Nicht zugewiesene Dateien",
"AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern",
@@ -644,7 +644,7 @@
"Disabled": "Deaktiviert",
"DownloadClientCheckNoneAvailableMessage": "Kein Download Client verfügbar",
"DownloadClientCheckUnableToCommunicateMessage": "Kommunikation mit {0} nicht möglich.",
"DownloadClientsSettingsSummary": "Download Clients, Download-Verwaltung und Remote-Pfadzuordnungen",
"DownloadClientsSettingsSummary": "Download Clients, Downloadverarbeitung und Remote-Pfadzuordnungen",
"DownloadClientStatusCheckAllClientMessage": "Alle Download Clients sind aufgrund von Fehlern nicht verfügbar",
"DownloadClientStatusCheckSingleClientMessage": "Download Clients aufgrund von Fehlern nicht verfügbar: {0}",
"EditAuthor": "Autor bearbeiten",
@@ -693,7 +693,7 @@
"RemotePathMappingCheckFolderPermissions": "{appName} kann das Downloadverzeichnis sehen, aber nicht verarbeiten {0}. Möglicherwiese ein Rechteproblem.",
"RemotePathMappingCheckGenericPermissions": "Downloader {0} speichert Downloads in {1}, aber Readarr kann dieses Verzeichnis nicht sehen. Möglicherweise müssen die Verzeichnisrechte angepasst werden.",
"RemotePathMappingCheckLocalWrongOSPath": "Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Downloader Einstellungen.",
"Monitor": "Überwachen",
"Monitor": "Beobachten",
"MusicBrainzAuthorID": "MusicBranz Künstler Id",
"MusicBrainzBookID": "MusicBrainz Titel Id",
"WriteAudioTags": "Audiodateien mit Metadaten versehen",
@@ -701,7 +701,7 @@
"SearchForAllMissingBooks": "Suche nach allen fehlenden Alben",
"SearchForMonitoredBooks": "Suche nach beobachteten Alben",
"SelectedCountAuthorsSelectedInterp": "{0} Künstler ausgewählt",
"SizeLimit": "Größenlimit",
"SizeLimit": "Grössenlimit",
"TheBooksFilesWillBeDeleted": "Die Dateien des Albums werden gelöscht.",
"MediaManagement": "Medienverwaltung",
"Metadata": "Metadaten",
@@ -742,7 +742,7 @@
"SearchFiltered": "Suche gefilterte",
"AddList": "Liste hinzufügen",
"InstanceName": "Instanzname",
"InstanceNameHelpText": "Instanzname im Tab und für den Syslog-App-Namen",
"InstanceNameHelpText": "Instanzname im Browser-Tab und für Syslog-Anwendungsname",
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart, damit die Aktion wirksam wird",
"UseCalibreContentServer": "Calibre-Content-Server",
"DataExistingBooks": "Beobachte Bücher die Dateien haben oder noch nicht veröffentlicht wurden",
@@ -756,7 +756,7 @@
"MonitorBook": "Buch überwachen",
"MinimumPages": "Mindestseiten",
"MassBookSearch": "Massensuche nach Büchern",
"MediaManagementSettingsSummary": "Einstellungen zu Benennung, Dateiverwaltung und Root-Ordnern",
"MediaManagementSettingsSummary": "Namensgebung, Dateimanagement-Einstellungen und Root-Ordner",
"MinimumPopularity": "Mindestpolularität",
"MinPagesHelpText": "Bücher mit weniger Seiten als dieses ignorieren",
"MinPopularityHelpText": "Popularität ist Durchschnittsbewertung * Anzahl der Stimmen",
@@ -854,7 +854,7 @@
"Theme": "Design",
"ThemeHelpText": "Ändern Sie das Benutzeroberflächen-Design der Anwendung. Das „Auto“-Design verwendet Ihr Betriebssystemdesign, um den Hell- oder Dunkelmodus festzulegen. Inspiriert vom Theme.Park",
"BypassIfHighestQuality": "Ignoriere wenn höchste Qualität",
"MinimumCustomFormatScore": "Mindestwert für benutzerdefinierte Formate",
"MinimumCustomFormatScore": "Minimum der eigenen Formate Bewertungspunkte",
"CustomFormatScore": "Eigenes Format Bewertungspunkte",
"CloneCustomFormat": "Benutzerdefiniertes Format klonen",
"Conditions": "Bedingungen",
@@ -863,7 +863,7 @@
"CustomFormats": "Eigene Formate",
"CutoffFormatScoreHelpText": "Sobald diese eigener Format Bewertung erreicht wird, werden keine neuen Releases erfasst",
"DeleteFormatMessageText": "Bist du sicher, dass du das Formatierungstag {0} löschen willst?",
"ExportCustomFormat": "Benutzerdefiniertes Format exportieren",
"ExportCustomFormat": "Eigenes Format exportieren",
"Formats": "Formate",
"MinFormatScoreHelpText": "Mindester eigener Format Score bis zum Download",
"NegateHelpText": "Wenn aktiviert wird das eigene Format nicht angewendet solange diese {0} Bedingung zutrifft.",
@@ -879,11 +879,11 @@
"UnableToLoadCustomFormats": "Eigene Formate konnten nicht geladen werden",
"ImportListMissingRoot": "Fehlendes Stammverzeichnis für Importlist(en): {0}",
"ImportListMultipleMissingRoots": "Mehrere Stammverzeichnisse fehlen für Importlist: {0}",
"IndexerDownloadClientHelpText": "Gib an, welcher Download-Client für Abrufe von diesem Indexer verwendet wird",
"IndexerDownloadClientHelpText": "Wähle aus, welcher Download-Client für diesen Indexer verwendet wird",
"IndexerTagsHelpText": "Benutze den Indexer nur für Filme mit mindesens einen zutreffenden Tag. Leer lassen für alle Filme.",
"RecycleBinUnableToWriteHealthCheck": "Schreiben in konfigurierten Papierkorbordner nicht möglich: {0}. Stelle sicher, dass dieser Pfad existiert und von dem Benutzer, der {appName} ausführt, beschreibbar ist",
"HiddenClickToShow": "Versteckt, zum Anzeigen anklicken",
"HideAdvanced": "Erweiterte Einstellungen ausblenden",
"HiddenClickToShow": "Versteckt, klicken zum anzeigen",
"HideAdvanced": "Erweiterte Ansicht",
"ShowAdvanced": "Erweitert anzeigen",
"ShownClickToHide": "Angezeigt, zum Ausblenden klicken",
"ColonReplacement": "Doppelpunktersatz",
@@ -909,11 +909,11 @@
"DeleteSelectedIndexersMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte(n) Indexer löschen möchten?",
"EditSelectedDownloadClients": "Ausgewählte Download Clienten bearbeiten",
"Implementation": "Integration",
"NoEventsFound": "Keine Ereignisse gefunden",
"NoEventsFound": "Keine Events gefunden",
"NoImportListsFound": "Keine Einspiel-Listen gefunden",
"NoIndexersFound": "Keine Indexer gefunden",
"RemoveCompletedDownloads": "Entferne abgeschlossene Downloads",
"RemoveDownloadsAlert": "Die Entfernen-Einstellungen wurden in die einzelnen Download-Client-Einstellungen in der Tabelle oben verschoben.",
"RemoveDownloadsAlert": "Die Einstellungen zum Entfernen wurden in die individuellen Download Client Einstellungen in der obigen Tabelle verschoben.",
"RemovingTag": "Tag entfernen",
"Yes": "Ja",
"BlocklistReleaseHelpText": "Dieses Release nicht automatisch erneut erfassen",
@@ -922,7 +922,7 @@
"DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{0}' löschen willst?",
"Negated": "Negiert",
"ResetQualityDefinitions": "Qualitätsdefinitionen zurücksetzen",
"RemoveSelectedItem": "Ausgewähltes Element entfernen",
"RemoveSelectedItem": "Entferne ausgewählten Eintrag",
"RemoveSelectedItems": "Markierte Einträge löschen",
"Required": "Erforderlich",
"RedownloadFailed": "Download fehlgeschlagen",
@@ -956,19 +956,19 @@
"Loading": "Lade",
"ConnectionLostReconnect": "{appName} wird versuchen, automatisch eine Verbindung herzustellen, oder Sie können unten auf „Neu laden“ klicken.",
"ConnectionLostToBackend": "{appName} hat die Verbindung zum Backend verloren und muss neu geladen werden, um die Funktionalität wiederherzustellen.",
"NotificationStatusAllClientHealthCheckMessage": "Alle Benachrichtigungen sind aufgrund von Fehlern nicht verfügbar",
"NotificationStatusAllClientHealthCheckMessage": "Wegen Fehlern sind keine Applikationen verfügbar",
"NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}",
"TotalSpace": "Gesamter Speicherplatz",
"Ui": "Benutzeroberfläche",
"FreeSpace": "Freier Platz",
"FreeSpace": "Freier Speicher",
"Large": "Groß",
"LastExecution": "Letzte Ausführung",
"LastWriteTime": "Letzte Schreibzeit",
"LastWriteTime": "Zuletzt beschrieben",
"Library": "Bibliothek",
"Location": "Standort",
"Location": "Speicherort",
"Small": "Klein",
"ConnectionLost": "Verbindung unterbrochen",
"Events": "Ereignisse",
"Events": "Events",
"LastDuration": "Letzte Dauer",
"RecentChanges": "Kürzliche Änderungen",
"System": "System",
@@ -987,8 +987,8 @@
"AutomaticUpdatesDisabledDocker": "Automatische Updates werden bei Verwendung des Docker-Update-Mechanismus nicht direkt unterstützt. Sie müssen das Container-Image außerhalb von {appName} aktualisieren oder ein Skript verwenden",
"AutoAdd": "Automatisch hinzufügen",
"WouldYouLikeToRestoreBackup": "Willst du das Backup '{name}' wiederherstellen?",
"Unmonitored": "Nicht überwacht",
"Retention": "Aufbewahrung",
"Unmonitored": "Nicht beobachtet",
"Retention": "Aufbewahrung ( Retention )",
"ClickToChangeIndexerFlags": "Klicken, um Indexer-Flags zu ändern",
"BlocklistAndSearch": "Sperrliste und Suche",
"BlocklistAndSearchHint": "Starte Suche nach einer Alternative, falls es der Sperrliste hinzugefügt wurde",
@@ -997,14 +997,14 @@
"BlocklistOnly": "Nur der Sperrliste hinzufügen",
"BlocklistOnlyHint": "Der Sperrliste hinzufügen, ohne nach Alternative zu suchen",
"ChangeCategory": "Kategorie wechseln",
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht verwendet und kann gelöscht werden",
"ExtraFileExtensionsHelpText": "Kommagetrennte Liste von zusätzlichen Dateien, die importiert werden sollen (.nfo wird als .nfo-orig importiert)",
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht benutzt und kann gelöscht werden",
"ExtraFileExtensionsHelpText": "Kommaseparierte Liste von Dateiendungen die als Extra Dateien importiert werden sollen ( .nfo wird in .nfo-orig umbenannt )",
"DeleteImportListExclusion": "Importlisten Ausschluss löschen",
"IndexerFlags": "Indexer-Flags",
"CountAuthorsSelected": "{selectedCount} Künstler ausgewählt",
"ExtraFileExtensionsHelpTextsExamples": "Beispiele: '.sub, .nfo' oder 'sub,nfo'",
"ExtraFileExtensionsHelpTextsExamples": "Vorschläge: sub, nfo, srt, jpg",
"DownloadClient": "Downloader",
"ShowMonitoredHelpText": "Überwachungsstatus unter dem Poster anzeigen",
"ShowMonitoredHelpText": "Beobachtungsstatus unter dem Plakat anzeigen",
"CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt",
"CountImportListsSelected": "{selectedCount} Künstler ausgewählt",
"CustomFormatsSpecificationRegularExpression": "Regulären Ausdruck",
@@ -1013,8 +1013,8 @@
"AutoRedownloadFailed": "Erneuter Download fehlgeschlagen",
"SourceTitle": "Quellentitel",
"Tags": "Tags",
"DownloadClientDelugeSettingsDirectoryHelpText": "Optionaler Ort für Downloads, leer lassen, um den Standard-Deluge-Ort zu verwenden",
"ErrorLoadingContent": "Es ist ein Fehler beim Laden dieses Inhalts aufgetreten",
"DownloadClientDelugeSettingsDirectoryHelpText": "Optionaler Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden",
"ErrorLoadingContent": "Beim Laden des Eintrags ist ein Fehler aufgetreten",
"BypassIfAboveCustomFormatScore": "Umgehen, wenn über dem Wert des benutzerdefinierten Formats liegt",
"BypassIfAboveCustomFormatScoreHelpText": "Aktivieren Sie die Umgehung, wenn die Veröffentlichung einen Wert hat, der höher ist als der konfigurierte Mindestwert für das benutzerdefinierte Format",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Der Download-Client {downloadClientName} ist so eingestellt, dass abgeschlossene Downloads entfernt werden. Dies kann dazu führen, dass Downloads von Ihrem Client entfernt werden, bevor {appName} sie importieren kann.",
@@ -1024,12 +1024,12 @@
"InteractiveSearchModalHeader": "Interaktive Suche",
"MinimumCustomFormatScoreHelpText": "Mindestwert für benutzerdefiniertes Format, der erforderlich ist, um Verzögerungen für das bevorzugte Protokoll zu umgehen",
"Rejections": "Ablehnungen",
"RemoveQueueItemConfirmation": "Bist du sicher, dass du '{sourceTitle}' aus der Warteschlange entfernen möchtest?",
"RemoveQueueItemConfirmation": "Bist du sicher, dass du {0} Einträge aus der Warteschlange entfernen willst?",
"SelectDropdown": "Auswählen...",
"SelectQuality": "Qualität auswählen",
"SelectReleaseGroup": "Wähle Release-Gruppe",
"ShowMonitored": "Überwachter Status anzeigen",
"DeleteSelected": "Ausgewählte löschen",
"ShowMonitored": "Beobachtete anzeigen",
"DeleteSelected": "Markierte löschen",
"Bookshelf": "Bücherregal",
"BypassIfHighestQualityHelpText": "Umgehen der Verzögerung, wenn die Freigabe die höchste aktivierte Qualität im Qualitätsprofil hat",
"CustomFormatsSpecificationFlag": "Markierung",
@@ -1045,12 +1045,12 @@
"CustomFormatsSettingsTriggerInfo": "Ein Eigenes Format wird auf eine Veröffentlichung oder Datei angewandt, wenn sie mindestens einer der verschiedenen ausgewählten Bedingungen entspricht.",
"ConnectionSettingsUrlBaseHelpText": "Fügt ein Präfix zur {connectionName} URL hinzu, z. B. {url}",
"DownloadClientDelugeSettingsDirectory": "Download Verzeichnis",
"DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn abgeschlossen Verzeichnis",
"DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn Verzeichnis abgeschlossen",
"IgnoreDownloadHint": "Hält {appName} von der weiteren Verarbeitung dieses Downloads ab",
"IgnoreDownloads": "Downloads ignorieren",
"IgnoreDownload": "Download ignorieren",
"IgnoreDownloadsHint": "Hindert {appName}, diese Downloads weiter zu verarbeiten",
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optionaler Ort, an den abgeschlossene Downloads verschoben werden, leer lassen, um den Standard-Deluge-Ort zu verwenden",
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optionaler Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden",
"ApiKey": "API-Schlüssel",
"AuthBasic": "Basis (Browser-Popup)",
"AuthForm": "Formulare (Anmeldeseite)",
@@ -1059,56 +1059,18 @@
"AuthenticationRequired": "Authentifizierung benötigt",
"AuthenticationRequiredHelpText": "Ändern, welche anfragen Authentifizierung benötigen. Ändere nichts wenn du dir nicht des Risikos bewusst bist.",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen",
"AuthenticationRequiredPasswordHelpTextWarning": "Neues Passwort eingeben",
"AuthenticationRequiredUsernameHelpTextWarning": "Neuen Benutzernamen eingeben",
"AuthenticationRequiredPasswordHelpTextWarning": "Gib ein neues Passwort ein",
"AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein",
"AuthenticationRequiredWarning": "Um unberechtigte Fernzugriffe zu vermeiden benötigt {appName} jetzt , dass Authentifizierung eingeschaltet ist. Du kannst Authentifizierung optional für lokale Adressen ausschalten.",
"DisabledForLocalAddresses": "Für lokale Adressen deaktiviert",
"Enabled": "Aktiviert",
"BuiltIn": "Eingebaut",
"CurrentlyInstalled": "Derzeit installiert",
"InstallLatest": "Neueste Version installieren",
"OnLatestVersion": "Die neueste Version von {appName} ist bereits installiert",
"InstallLatest": "Jetzt updaten",
"OnLatestVersion": "Die aktuellste Version ist bereits installiert",
"Script": "Skript",
"AptUpdater": "Verwenden Sie apt, um das Update zu installieren",
"DockerUpdater": "Aktualisieren Sie den Docker-Container, um das Update zu erhalten",
"ExternalUpdater": "{appName} ist so konfiguriert, dass es einen externen Aktualisierungsmechanismus verwendet",
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden.",
"External": "Extern",
"FailedToFetchSettings": "Einstellungen können nicht abgerufen werden",
"FailedToFetchUpdates": "Updates konnten nicht abgerufen werden",
"DownloadClientQbittorrentSettingsContentLayout": "Inhaltslayout",
"IndexerSettingsSeedRatio": "Seed-Verhältnis",
"RemoveMultipleFromDownloadClientHint": "Entfernt Downloads und Dateien aus dem Download-Client",
"IndexerSettingsSeedTime": "Seed-Zeit",
"Install": "Installieren",
"InstallMajorVersionUpdate": "Update installieren",
"RemoveQueueItem": "Entfernen - {sourceTitle}",
"NotificationsPlexSettingsAuthenticateWithPlexTv": "Mit Plex.tv authentifizieren",
"SmartReplace": "Smart Replace",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Ob das konfigurierte Inhaltslayout von qBittorrent, das ursprüngliche Layout des Torrents oder immer ein Unterordner erstellt werden soll (qBittorrent 4.3.2+)",
"IndexerSettingsSeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen muss, bevor er gestoppt wird. Leer verwendet das Standardverhältnis des Download-Clients. Das Verhältnis sollte mindestens 1,0 betragen und den Regeln des Indexers folgen.",
"IndexerSettingsSeedTimeHelpText": "Die Zeit, die ein Torrent gesät werden sollte, bevor er gestoppt wird. Leer verwendet die Standardzeit des Download-Clients",
"InstallMajorVersionUpdateMessage": "Dieses Update wird eine neue Hauptversion installieren und ist möglicherweise nicht mit deinem System kompatibel. Bist du sicher, dass du dieses Update installieren möchtest?",
"InstallMajorVersionUpdateMessageLink": "Weitere Informationen findest du unter [{domain}]({url}).",
"InvalidUILanguage": "Die UI ist auf eine ungültige Sprache eingestellt, korrigiere sie und speichere die Einstellungen",
"LabelIsRequired": "Label ist erforderlich",
"NotificationsPlexSettingsAuthToken": "Auth-Token",
"NotificationsSettingsUpdateLibrary": "Bibliothek aktualisieren",
"NotificationsSettingsUpdateMapPathsFrom": "Pfade von",
"NotificationsSettingsUpdateMapPathsTo": "Pfade zu",
"NotificationsSettingsUseSslHelpText": "Mit {serviceName} über HTTPS anstatt HTTP verbinden",
"PasswordConfirmation": "Passwortbestätigung",
"PreviouslyInstalled": "Früher installiert",
"RemoveFromDownloadClientHint": "Entfernt den Download und die Datei(en) aus dem Download-Client",
"RemoveQueueItemRemovalMethod": "Entfernmethode",
"RemoveQueueItemRemovalMethodHelpTextWarning": "'Aus dem Download-Client entfernen' wird den Download und die Datei(en) aus dem Download-Client löschen.",
"RemoveQueueItemsRemovalMethodHelpTextWarning": "'Aus dem Download-Client entfernen' wird die Downloads und die Dateien aus dem Download-Client löschen.",
"SelectIndexerFlags": "Indexer-Flags auswählen",
"SetIndexerFlags": "Indexer-Flags festlegen",
"InteractiveSearchModalHeaderBookAuthor": "Interaktive Suche - {bookTitle} von {authorName}",
"NoMissingItems": "Keine fehlenden Einträge",
"NoCutoffUnmetItems": "Keine nicht erfüllten Cutoff-Elemente",
"DashOrSpaceDashDependingOnName": "Dash oder Space Dash je nach Name",
"NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')",
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')"
"ExternalUpdater": "{appName} wurde so konfiguriert, dass ein externer Update Mechanismus benutzt wird",
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden."
}

View File

@@ -28,9 +28,9 @@
"MinimumAge": "최소 연령",
"TimeFormat": "시간 형식",
"Title": "표제",
"TorrentDelay": "토렌트 지연",
"TorrentDelayHelpText": "토렌트를 잡기 전에 대기까지 소요되는 지연 (분)",
"Torrents": "토렌트",
"TorrentDelay": "급류 지연",
"TorrentDelayHelpText": "급류를 잡기 전에 대기하는 데 몇 분이 걸립니다.",
"Torrents": "급류",
"TotalFileSize": "총 파일 크기",
"UILanguage": "UI 언어",
"UILanguageHelpText": "{appName}가 UI에 사용할 언어",
@@ -639,9 +639,5 @@
"DockerUpdater": "Docker 컨테이너를 업데이트하여 업데이트를 받으십시오.",
"ExternalUpdater": "{appName}는 외부 업데이트 메커니즘을 사용하도록 구성됩니다.",
"OnLatestVersion": "최신 버전의 {appName}가 이미 설치되어 있습니다.",
"UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다.",
"ApiKeyValidationHealthCheckMessage": "API 키를 {length}자 이상으로 업데이트하세요. 설정 또는 구성 파일을 통해 이 작업을 수행할 수 있습니다.",
"AppUpdated": "{appName} 업데이트",
"AppUpdatedVersion": "{appName}이 버전 `{version}`으로 업데이트되었습니다. 최신 변경 사항을 받으려면 {appName}을 다시 로드해야 합니다",
"WouldYouLikeToRestoreBackup": "'{name}' 백업을 복원하시겠습니까?"
"UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다."
}

View File

@@ -734,7 +734,7 @@
"OnReleaseImport": "Ao Importar Lançamento",
"OnRename": "Ao Renomear",
"OnUpgrade": "Ao Atualizar",
"AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na Atualização",
"AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na atualização",
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, o Readarr não dará nenhum resultado para pesquisa interativa",
"ConnectSettingsSummary": "Notificações, conexões com servidores/tocadores de mídia e scripts personalizados",
"DownloadClientStatusCheckAllClientMessage": "Todos os clientes de download estão indisponíveis devido a falhas",

View File

@@ -196,9 +196,5 @@
"Enabled": "Povoliť",
"UnableToAddANewImportListExclusionPleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.",
"UnableToAddANewMetadataProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.",
"UnableToAddANewQualityProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.",
"Reason": "Séria",
"Clone": "Zatvoriť",
"AptUpdater": "Použiť apt pre inštaláciu aktualizácie",
"BuiltIn": "Vstavaný"
"UnableToAddANewQualityProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova."
}

View File

@@ -10,7 +10,7 @@
"Columns": "Sütunlar",
"DeleteIndexer": "Dizinleyiciyi Sil",
"DeleteRootFolderMessageText": "Dizin oluşturucuyu '{0}' silmek istediğinizden emin misiniz?",
"Ended": "Biten",
"Ended": "Bitti",
"Group": "Grup",
"LoadingBooksFailed": "Film dosyaları yüklenemedi",
"None": "Yok",
@@ -18,22 +18,22 @@
"SslCertPathHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
"SslCertPasswordHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
"UnableToLoadMetadataProfiles": "Gecikme Profilleri yüklenemiyor",
"AgeWhenGrabbed": "Yıl (alındığında)",
"AgeWhenGrabbed": "Yıl (yakalandığında)",
"AlreadyInYourLibrary": "Kütüphanenizde mevcut",
"AlternateTitles": "Alternatif Başlıklar",
"Analytics": "Analiz",
"Analytics": "Analitik",
"AnalyticsEnabledHelpText": "Anonim kullanım ve hata bilgilerini {appName} sunucularına gönderin. Bu, tarayıcınızla ilgili bilgileri, kullandığınız {appName} WebUI sayfalarını, hata raporlamasının yanı sıra işletim sistemi ve çalışma zamanı sürümünü içerir. Bu bilgileri, özellikleri ve hata düzeltmelerini önceliklendirmek için kullanacağız.",
"AppDataDirectory": "Uygulama Veri Dizini",
"ApplyTags": "Etiketleri Uygula",
"Authentication": "Doğrulama",
"AuthenticationMethodHelpText": "{appName}'e erişmek için Kullanıcı Adı ve Parola gereklidir",
"AuthenticationMethodHelpText": "{appName}'a erişmek için Kullanıcı Adı ve Şifre gerektir",
"AuthorClickToChangeBook": "Filmi değiştirmek için tıklayın",
"AutoRedownloadFailedHelpText": "Otomatik olarak farklı bir Yayın arayın ve indirmeye çalışın",
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Diskten silinen filmler otomatik olarak {appName}'da izlenmez",
"Automatic": "Otomatik",
"BackupFolderHelpText": "Göreli yollar {appName}'ın AppData dizini altında olacaktır",
"BackupNow": "Şimdi Yedekle",
"BackupRetentionHelpText": "Saklama süresinden daha eski otomatik yedeklemeler otomatik olarak temizlenecektir",
"BackupNow": "Şimdi yedekle",
"BackupRetentionHelpText": "Saklama süresinden daha eski olan otomatik yedeklemeler otomatik olarak temizlenecektir",
"Backups": "Yedeklemeler",
"BindAddress": "Bind Adresi",
"BindAddressHelpText": "Tüm arayüzler için geçerli IP adresi, localhost veya '*'",
@@ -41,12 +41,12 @@
"BookIsDownloading": "Film indiriliyor",
"BookIsDownloadingInterp": "Film indiriliyor - {0}% {1}",
"Branch": "Şube",
"BypassProxyForLocalAddresses": "Yerel Adresler için Proxy'yi Kullanma",
"BypassProxyForLocalAddresses": "Yerel Adresler için Proxy'yi Atla",
"Calendar": "Takvim",
"CalendarWeekColumnHeaderHelpText": "Aktif görünüm hafta olduğunda her bir sütunun üzerinde gösterilir",
"Cancel": "Vazgeç",
"CancelPendingTask": "Bekleyen görevi iptal etmek istediğinizden emin misiniz?",
"CertificateValidation": "Sertifika Doğrulaması",
"CancelPendingTask": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?",
"CertificateValidation": "Sertifika Doğrulama",
"CertificateValidationHelpText": "HTTPS sertifika doğrulamasının sıkılığını değiştirin. Riskleri anlamadığınız sürece değişmeyin.",
"ChangeFileDate": "Dosya Tarihini Değiştir",
"ChangeHasNotBeenSavedYet": "Değişiklik henüz kaydedilmedi",
@@ -103,9 +103,9 @@
"DetailedProgressBar": "Ayrıntılı İlerleme Çubuğu",
"DetailedProgressBarHelpText": "İlerleme çubuğundaki metni göster",
"DiskSpace": "Disk Alanı",
"Docker": "Docker",
"DownloadClient": ndirme İstemcisi",
"DownloadClientSettings": ndirme İstemcisi Ayarlarını",
"Docker": "Liman işçisi",
"DownloadClient": stemciyi İndir",
"DownloadClientSettings": "İstemci Ayarlarını İndir",
"DownloadClients": "İndirme İstemcileri",
"DownloadFailedCheckDownloadClientForMoreDetails": "İndirme başarısız oldu: Daha fazla ayrıntı için indirme istemcisini kontrol edin",
"DownloadFailedInterp": "İndirme başarısız oldu: {0}",
@@ -117,9 +117,9 @@
"EnableAutomaticAdd": "Otomatik Eklemeyi Etkinleştir",
"EnableAutomaticSearch": "Otomatik Aramayı Etkinleştir",
"EnableColorImpairedMode": "Renk Bozukluğu Modunu Etkinleştir",
"EnableColorImpairedModeHelpText": "Renk engelli kullanıcıların renkleri daha iyi ayırt edebilmelerini sağlamak için değiştirilmiş stil",
"EnableColorImpairedModeHelpText": "Renk bozukluğu olan kullanıcıların renk kodlu bilgileri daha iyi ayırt etmesine olanak tanıyan değiştirilmiş stil",
"EnableCompletedDownloadHandlingHelpText": "Tamamlanan indirmeleri indirme istemcisinden otomatik olarak içe aktarın",
"EnableHelpText": "Bu meta veri türü için meta veri dosyası oluşturmayı etkinleştir",
"EnableHelpText": "Bu meta veri türü için meta veri dosyası oluşturmayı etkinleştirin",
"EnableInteractiveSearch": "Etkileşimli Aramayı Etkinleştir",
"EnableRSS": "RSS'yi etkinleştir",
"EnableSSL": "SSL'yi etkinleştir",
@@ -129,12 +129,12 @@
"Exception": "İstisna",
"FailedDownloadHandling": "Başarısız İndirme İşlemi",
"FileDateHelpText": "İçe aktarmada / yeniden taramada dosya tarihini değiştirin",
"FileManagement": "Dosya Yönetimi",
"FileManagement": "Dosya idare",
"FileNames": "Dosya Adları",
"Filename": "Dosya adı",
"Files": "Dosyalar",
"FirstDayOfWeek": "Haftanın ilk günü",
"Fixed": "Düzeltilen",
"Fixed": "Sabit",
"Folder": "Klasör",
"Folders": "Klasörler",
"ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Bireysel indirme istemcileri hakkında daha fazla bilgi için bilgi düğmelerine tıklayın.",
@@ -145,13 +145,13 @@
"GoToInterp": "{0} adresine gidin",
"Grab": "Kapmak",
"GrabID": "Grab ID",
"GrabRelease": "Yayın Alma",
"GrabRelease": "Yayın Yakalama",
"GrabReleaseMessageText": "{appName}, bu sürümün hangi film için olduğunu belirleyemedi. {appName} bu sürümü otomatik olarak içe aktaramayabilir. '{0}' almak istiyor musunuz?",
"GrabSelected": "Seçilenleri Al",
"GrabSelected": "Seçilenleri Kap",
"HasPendingChangesNoChanges": "Değişiklikler yok",
"HasPendingChangesSaveChanges": "Değişiklikleri Kaydet",
"History": "Geçmiş",
"Host": "Sunucu",
"Host": "Ana bilgisayar",
"Hostname": "Hostname",
"ICalFeed": "iCal Beslemesi",
"ICalHttpUrlHelpText": "Bu URL'yi müşterilerinize kopyalayın veya tarayıcınız webcal'i destekliyorsa abone olmak için tıklayın",
@@ -166,7 +166,7 @@
"ImportExtraFilesHelpText": "Bir film dosyasını içe aktardıktan sonra eşleşen ekstra dosyaları (altyazılar, bilgi notları vb.) İçe aktarın",
"ImportFailedInterp": "İçe aktarma başarısız oldu: {0}",
"ImportedTo": "İçeri Aktarıldı",
"Importing": "İçe Aktarma",
"Importing": "İçe aktarılıyor",
"IncludeHealthWarningsHelpText": "Sağlık Uyarılarını Dahil Et",
"IncludeUnknownAuthorItemsHelpText": "Kuyrukta film olmayan öğeleri gösterin. Bu, kaldırılan filmleri veya {appName}'ın kategorisindeki herhangi bir şeyi içerebilir",
"IncludeUnmonitored": "Takip Edilmeyenleri Dahil Et",
@@ -182,33 +182,33 @@
"LaunchBrowserHelpText": " Bir web tarayıcısıın ve uygulama başlangıcında {appName} ana sayfasına gidin.",
"LoadingBookFilesFailed": "Film dosyaları yüklenemedi",
"Local": "Yerel",
"LogFiles": "Log Kayıtları",
"LogLevel": "Log Seviyesi",
"LogFiles": "Log dosyaları",
"LogLevel": "Günlük Düzeyi",
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "İzleme günlük kaydı yalnızca geçici olarak etkinleştirilmelidir",
"Logging": "Loglama",
"Logs": "Kayıtlar",
"Logs": "Kütükler",
"LongDateFormat": "Uzun Tarih Formatı",
"MIA": "MIA",
"ManualImport": "Manuel İçe Aktar",
"MarkAsFailed": "Başarısız olarak işaretle",
"MarkAsFailedMessageText": "'{0}' başarısız olarak işaretlemek istediğinizden emin misiniz?",
"MaximumLimits": "Maksimum Sınırlar",
"MaximumSize": "Maksimum Boyut",
"MaximumSize": "En büyük boy",
"MaximumSizeHelpText": "MB cinsinden alınacak bir sürüm için maksimum boyut. Sınırsız olarak ayarlamak için sıfıra ayarlayın",
"Mechanism": "Teknik",
"Mechanism": "İşleyiş",
"MediaInfo": "Medya bilgisi",
"MediaManagementSettings": "Medya Yönetimi Ayarları",
"Message": "Mesaj",
"Message": "İleti",
"MetadataSettings": "Meta Veri Ayarları",
"MinimumAge": "Minimum Geçen Süre",
"MinimumAgeHelpText": "Yalnızca Usenet: NZB'lerin almadan önceki minimum geçen süre (dakika cinsinden). Bunu, yeni sürümlerin usenet sağlayıcınıza yayılması için zaman vermek amacıyla kullanın.",
"MinimumAge": "Asgari yaş",
"MinimumAgeHelpText": "Yalnızca Usenet: NZB'lerin alınmadan önceki dakika cinsinden minimum yaşı. Yeni yayınların usenet sağlayıcınıza yayılması için zaman tanımak için bunu kullanın.",
"MinimumFreeSpace": "Minimum Boş Alan",
"MinimumFreeSpaceWhenImportingHelpText": "Bu miktardan daha az kullanılabilir disk alanı bırakacaksa içe aktarmayı önleyin",
"MinimumLimits": "Minimum Limitler",
"Missing": "Eksik",
"Mode": "Mod",
"Monitored": "Takip Ediliyor",
"MoreInfo": "Daha Fazla Bilgi",
"MoreInfo": "Daha fazla bilgi",
"MustContain": "İçermeli",
"MustNotContain": "İçermemeli",
"Name": "İsim",
@@ -217,7 +217,7 @@
"NoBackupsAreAvailable": "Kullanılabilir yedek yok",
"NoLeaveIt": "Hayır, Bırak",
"NoLimitForAnyRuntime": "Herhangi bir çalışma zamanı için sınır yok",
"NoLogFiles": "Log kayıt dosyası henüz yok",
"NoLogFiles": "Günlük dosyası yok",
"NoMinimumForAnyRuntime": "Herhangi bir çalışma süresi için minimum değer yok",
"NoUpdatesAreAvailable": "Güncelleme yok",
"NotificationTriggers": "Bildirim Tetikleyicileri",
@@ -230,12 +230,12 @@
"Original": "Orijinal",
"Overview": "Genel Bakış",
"PackageVersion": "Paket Versiyonu",
"PageSize": "Sayfa Boyutu",
"PageSize": "Sayfa boyutu",
"PageSizeHelpText": "Her sayfada gösterilecek öğe sayısı",
"Password": "Şifre",
"Path": "Yol",
"Permissions": "İzinler",
"Port": "Port No",
"Port": "Liman",
"PortHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
"PortNumber": "Port numarası",
"PosterSize": "Poster Boyutu",
@@ -255,7 +255,7 @@
"QualityProfile": "Kalite Profili",
"QualityProfiles": "Kalite Profileri",
"QualitySettings": "Kalite Ayarları",
"Queue": "Kuyruk",
"Queue": "Sırada",
"RSSSync": "RSS Senkronizasyonu",
"RSSSyncInterval": "RSS Senkronizasyon Aralığı",
"ReadTheWikiForMoreInformation": "Daha fazla bilgi için Wiki'yi okuyun",
@@ -267,7 +267,7 @@
"RecycleBinCleanupDaysHelpTextWarning": "Geri dönüşüm kutusundaki, seçilen gün sayısından daha eski olan dosyalar otomatik olarak temizlenecektir",
"RecycleBinHelpText": "Film dosyaları, kalıcı olarak silinmek yerine silindiğinde buraya gider",
"RecyclingBin": "Geri dönüşüm Kutusu",
"RecyclingBinCleanup": "Geri Dönüşüm Kutusu Temizle",
"RecyclingBinCleanup": "Geri Dönüşüm Kutusu Temizleme",
"Redownload": "Yeniden indir",
"Refresh": "Yenile",
"RefreshInformationAndScanDisk": "Bilgileri ve tarama diskini yenileyin",
@@ -290,7 +290,7 @@
"RemovedFromTaskQueue": "Görev kuyruğundan kaldırıldı",
"RenameBooksHelpText": "Yeniden adlandırma devre dışı bırakılırsa, {appName} mevcut dosya adını kullanacaktır",
"Reorder": "Yeniden sırala",
"ReplaceIllegalCharacters": "Geçersiz Karakterleri Değiştirin",
"ReplaceIllegalCharacters": "Yasadışı Karakterleri Değiştirin",
"RequiredHelpText": "Sürüm, bu terimlerden en az birini içermelidir (büyük / küçük harfe duyarlı değildir)",
"RequiredPlaceHolder": "Yeni kısıtlama ekle",
"RescanAfterRefreshHelpTextWarning": "{appName}, 'Her Zaman' olarak ayarlanmadığında dosyalardaki değişiklikleri otomatik olarak algılamayacaktır",
@@ -308,8 +308,8 @@
"RetentionHelpText": "Yalnızca Usenet: Sınırsız saklamaya ayarlamak için sıfıra ayarlayın",
"RetryingDownloadInterp": "İndirme işlemi {0}, {1} tarihinde yeniden deneniyor",
"RootFolder": "Kök Klasör",
"RootFolders": "Kök Klasörler",
"RssSyncIntervalHelpText": "Dakika cinsinden aralık. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın almayı durduracaktır)",
"RootFolders": "Kök klasörler",
"RssSyncIntervalHelpText": "Dakika cinsinden periyot. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın yakalamayı durduracaktır)",
"SSLCertPassword": "SSL Sertifika Parolası",
"SSLCertPath": "SSL Sertifika Yolu",
"SSLPort": "SSL Bağlantı Noktası",
@@ -346,7 +346,7 @@
"SorryThatBookCannotBeFound": "Maalesef o film bulunamıyor.",
"Source": "Kaynak",
"SourcePath": "Kaynak Yolu",
"SslCertPasswordHelpText": "Pfx dosyası için şifre",
"SslCertPasswordHelpText": "Pfx dosyasının şifresi",
"SslCertPathHelpText": "Pfx dosyasının yolu",
"SslPortHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
"StandardBookFormat": "Standart Film Formatı",
@@ -366,7 +366,7 @@
"Tasks": "Görevler",
"TestAll": "Tümünü Test Et",
"TestAllClients": "Tüm İstemcileri Test Et",
"TestAllIndexers": "Dizinleyicileri Test Et",
"TestAllIndexers": "Tüm Dizinleyicileri Test Et",
"TestAllLists": "Tüm Listeleri Test Et",
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Bu, tüm dizin oluşturucular için geçerli olacaktır, lütfen onlar tarafından belirlenen kurallara uyun",
"TimeFormat": "Zaman formatı",
@@ -429,8 +429,8 @@
"UsenetDelay": "Usenet Gecikmesi",
"UsenetDelayHelpText": "Usenet'ten bir yayın almadan önce beklemek için dakika cinsinden gecikme",
"Username": "Kullanıcı adı",
"BranchUpdate": "{appName} uygulamasını güncellemek için kullanılacak şube",
"BranchUpdateMechanism": "Harici güncelleme mekanizması tarafından kullanılan şube",
"BranchUpdate": "{appName}'ı güncellemek için kullanılacak dal",
"BranchUpdateMechanism": "Harici güncelleme mekanizması tarafından kullanılan dal",
"Version": "Sürüm",
"WeekColumnHeader": "Hafta Sütun Başlığı",
"Year": "Yıl",
@@ -462,7 +462,7 @@
"Time": "Zaman",
"UnableToLoadBlocklist": "Kara liste yüklenemiyor",
"Wanted": "Arananlar",
"Blocklist": "Engellenenler listesi",
"Blocklist": "Kara liste",
"BlocklistRelease": "Kara Liste Sürümü",
"AppDataLocationHealthCheckMessage": "Güncelleme sırasında AppData'nın silinmesini önlemek için güncelleme yapılmayacaktır",
"Filters": "Filtreler",
@@ -476,25 +476,25 @@
"ConnectSettingsSummary": "Bildirimler, medya sunucularına/oynatıcılara bağlantılar ve özel komut kodları",
"CreateEmptyAuthorFolders": "Boş film klasörleri oluşturun",
"General": "Genel",
"GeneralSettingsSummary": "Port, SSL, kullanıcı adı/şifre, proxy, analizler ve güncellemeler",
"ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor",
"GeneralSettingsSummary": "Port, SSL, kullanıcı adı/şifre, proxy, analitikler ve güncellemeler",
"ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm listeler kullanılamıyor",
"ImportListStatusCheckSingleClientMessage": "Hatalar nedeniyle kullanılamayan listeler: {0}",
"ImportMechanismHealthCheckMessage": "Tamamlanan İndirme İşlemini Etkinleştir",
"IndexerLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm dizinleyiciler kullanılamıyor",
"IndexerLongTermStatusCheckSingleClientMessage": "6 saatten uzun süredir yaşanan arızalar nedeniyle dizinleyiciler kullanılamıyor: {0}",
"IndexerRssHealthCheckNoAvailableIndexers": "Son zamanlardaki dizinleyici hataları nedeniyle tüm rss uyumlu dizinleyiciler geçici olarak kullanılamıyor",
"IndexerRssHealthCheckNoAvailableIndexers": "Son indeksleyici hataları nedeniyle tüm rss özellikli indeksleyiciler geçici olarak kullanılamıyor",
"IndexerRssHealthCheckNoIndexers": "RSS senkronizasyonunun etkin olduğu dizinleyici yok, {appName} yeni sürümleri otomatik olarak almayacak",
"IndexerSearchCheckNoAutomaticMessage": "Otomatik Arama etkinken indeksleyici yok, {appName} herhangi bir otomatik arama sonucu sağlamayacak",
"IndexerSearchCheckNoAvailableIndexersMessage": "Son zamanlardaki dizinleyici hataları nedeniyle tüm arama yeteneğine sahip dizinleyiciler geçici olarak kullanılamıyor",
"IndexerSearchCheckNoAvailableIndexersMessage": "Son indeksleyici hataları nedeniyle arama özellikli indeksleyicilerin tümü geçici olarak kullanılamıyor",
"IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinken indeksleyici yok, {appName} herhangi bir etkileşimli arama sonucu sağlamayacaktır",
"IndexersSettingsSummary": "Dizinleyiciler ve yayımlama kısıtlamaları",
"IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor",
"IndexerStatusCheckSingleClientMessage": "Hatalar nedeniyle dizinleyiciler kullanılamıyor: {0}",
"MediaManagement": "Medya Yönetimi",
"MediaManagement": "Medya işletme",
"MissingFromDisk": "{appName} dosyayı diskte bulamadı, bu yüzden kaldırıldı",
"Monitor": "Takip",
"MountCheckMessage": "Bir film yolu içeren bağlama, salt okunur olarak bağlanır: ",
"OnGrab": "Alındığında",
"OnGrab": "Yakalandığında",
"OnHealthIssue": "Sağlık Sorunu Hakkında",
"OnRename": "Yeniden Adlandırıldığında",
"OnUpgrade": "Yükseltme sırasında",
@@ -541,13 +541,13 @@
"RestartRequiredHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
"AddList": "Liste Ekleyin",
"RenameFiles": "Yeniden Adlandır",
"Test": "Test Et",
"Test": "Sına",
"ImportListExclusions": "İçe Aktarma Listesinden Hariç Bırakılan(lar)",
"ManualImportSelectEdition": "Manuel İçe Aktarma - Film Seçin",
"HardlinkCopyFiles": "Hardlink / Dosyaları Kopyala",
"MoveFiles": "Dosyaları Taşı",
"MinimumCustomFormatScore": "Minimum Özel Format Puanı",
"CustomFormatScore": "Özel Format Puanı",
"CustomFormatScore": "Özel Biçim Puanı",
"CloneCustomFormat": "Özel Formatı Klonla",
"Conditions": "Koşullar",
"CopyToClipboard": "Panoya kopyala",
@@ -555,10 +555,10 @@
"CutoffFormatScoreHelpText": "Bu özel format puanına ulaşıldığında, {appName} artık film indirmeyecektir",
"DeleteCustomFormat": "Özel Formatı Sil",
"UnableToLoadCustomFormats": "Özel Biçimler yüklenemiyor",
"UpgradesAllowed": "Yükseltmelere İzin Ver",
"UpgradesAllowed": "Yükseltmelere İzin Verildi",
"CustomFormat": "Özel Format",
"CustomFormatSettings": "Özel Biçim Ayarları",
"DeleteCustomFormatMessageText": "'{name}' özel formatı silmek istediğinizden emin misiniz?",
"DeleteCustomFormatMessageText": "'{name}' özel biçimini silmek istediğinizden emin misiniz?",
"DeleteFormatMessageText": "{0} biçim etiketini silmek istediğinizden emin misiniz?",
"ExportCustomFormat": "Özel Formatı Dışa Aktar",
"Formats": "Formatlar",
@@ -604,16 +604,16 @@
"ConnectionLostReconnect": "{appName} otomatik bağlanmayı deneyecek veya aşağıda yeniden yükle seçeneğini işaretleyebilirsiniz.",
"LastExecution": "Son Yürütme",
"LastWriteTime": "Son Yazma Zamanı",
"Location": "Klasör Yolu",
"Location": "yer",
"RecentChanges": "Son değişiklikler",
"SomeResultsAreHiddenByTheAppliedFilter": "Bazı sonuçlar uygulanan filtre tarafından gizlendi",
"SomeResultsAreHiddenByTheAppliedFilter": "Bazı sonuçlar, uygulanan filtre tarafından gizlendi",
"WhatsNew": "Ne var ne yok?",
"NotificationStatusAllClientHealthCheckMessage": "Arızalar nedeniyle tüm bildirimler kullanılamıyor",
"NotificationStatusSingleClientHealthCheckMessage": "Hatalar nedeniyle kullanılamayan listeler: {0}",
"Small": "Küçük",
"System": "Sistem",
"Ui": "Arayüz",
"Events": "Olaylar",
"Events": "Etkinlikler",
"FreeSpace": "Boş alan",
"NextExecution": "Sonraki Yürütme",
"NoResultsFound": "Sonuç bulunamadı",
@@ -624,14 +624,14 @@
"AddNew": "Yeni Ekle",
"Large": "Büyük",
"LastDuration": "Yürütme Süresi",
"AllResultsAreHiddenByTheAppliedFilter": "Tüm sonuçlar uygulanan filtre tarafından gizlendi",
"AllResultsAreHiddenByTheAppliedFilter": "Tüm sonuçlar, uygulanan filtre tarafından gizlenir",
"Library": "kütüphane",
"MetadataProfile": "üstveri profili",
"MetadataProfiles": "üstveri profili",
"ExtraFileExtensionsHelpText": "İçe aktarılacak ekstra dosyaların virgülle ayrılmış listesi (.nfo, .nfo-orig olarak içe aktarılacaktır)",
"ExtraFileExtensionsHelpTextsExamples": "Örnekler: \".sub, .nfo\" veya \"sub, nfo\"",
"AppUpdated": "{appName} Güncellendi",
"AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli",
"AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; en son değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli",
"Clone": "Klon",
"ConnectionLostToBackend": "{appName}'ın arka uçla bağlantısı kesildi ve işlevselliğin geri kazanılması için yeniden yüklenmesi gerekecek.",
"AutomaticUpdatesDisabledDocker": "Docker güncelleme mekanizması kullanıldığında otomatik güncellemeler doğrudan desteklenmez. Konteyner görüntüsünü {appName} dışında güncellemeniz veya bir komut dosyası kullanmanız gerekecek",
@@ -678,7 +678,7 @@
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "qBittorrent'in yapılandırılmış içerik düzenini mi, torrentteki orijinal düzeni mi kullanacağınızı yoksa her zaman bir alt klasör oluşturup oluşturmayacağınızı (qBittorrent 4.3.2+)",
"EditSelectedImportLists": "Seçilen İçe Aktarma Listelerini Düzenle",
"NoImportListsFound": "İçe aktarma listesi bulunamadı",
"IndexerDownloadClientHelpText": "Bu dizinleyiciden almak için hangi indirme istemcisinin kullanılacağını belirtin",
"IndexerDownloadClientHelpText": "Bu dizinleyiciden yakalamak için hangi indirme istemcisinin kullanılacağını belirtin",
"ManageDownloadClients": "İndirme İstemcilerini Yönet",
"ManageIndexers": "Dizinleyicileri Yönet",
"NoHistoryBlocklist": "Geçmiş engellenenler listesi yok",
@@ -748,10 +748,10 @@
"RemoveQueueItemRemovalMethodHelpTextWarning": "'İndirme İstemcisinden Kaldır', indirme işlemini ve dosyaları indirme istemcisinden kaldıracaktır.",
"ClickToChangeIndexerFlags": "Dizinleyici bayraklarını değiştirmek için tıklayın",
"IndexerFlags": "Dizinleyici Bayrakları",
"IndexerSettingsSeedRatioHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran. Boş bırakılırsa indirme istemcisinin varsayılan değerini kullanır. Oran en az 1,0 olmalı ve indeksleyici kurallarına uygun olmalıdır",
"IndexerSettingsSeedRatioHelpText": "Bir torrentin durmadan önce ulaşması gereken oran. Boş bırakılırsa indirme istemcisinin varsayılan değerini kullanır. Oran en az 1,0 olmalı ve indeksleyici kurallarına uygun olmalıdır",
"IndexerSettingsSeedTime": "Seed Süresi",
"IndexerSettingsSeedRatio": "Seed Oranı",
"IndexerSettingsSeedTimeHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran, boş bırakıldığında uygulamanın varsayılanı kullanılır",
"IndexerSettingsSeedTimeHelpText": "Bir torrentin durmadan önce seed edilmesi gereken süre. Boş bırakılırsa indirme istemcisinin varsayılan ayarını kullanır",
"BypassIfAboveCustomFormatScore": "Özel Format Koşullarının Üstündeyse Baypas Et",
"ImportLists": "Listeler",
"Loading": "Yükleniyor",
@@ -772,7 +772,7 @@
"QualityProfileIdHelpText": "Kalite Profili listesi öğeleri şu şekilde eklenecektir:",
"SourceTitle": "Kaynak başlığı",
"EnabledHelpText": "Yayımlama profilini etkinleştirmek için işaretleyin",
"ErrorLoadingContent": "Bu içerik yüklenirken bir hata oluştu",
"ErrorLoadingContent": "Bu öğe yüklenirken bir hata oluştu",
"IsShowingMonitoredMonitorSelected": "Takip Edilen Seçildi",
"RemotePathMappingCheckFileRemoved": "Dosyanın {path} yolu işlenme sürecinin bir parçası olarak kaldırıldı.",
"RecycleBinUnableToWriteHealthCheck": "Yapılandırılmış geri dönüşüm kutusu klasörüne yazılamıyor: {path}. Bu yolun mevcut olduğundan ve {appName} uygulamasını çalıştıran kullanıcı tarafından yazılabilir olduğundan emin olun",
@@ -816,7 +816,7 @@
"External": "Harici",
"PasswordConfirmation": "Şifre Tekrarı",
"AuthBasic": "Temel (Tarayıcıılır Penceresi)",
"AuthForm": "Form (Giriş Sayfası)",
"AuthForm": "Formlar (Giriş Sayfası)",
"AuthenticationMethod": "Kimlik Doğrulama Yöntemi",
"AuthenticationRequired": "Kimlik Doğrulama",
"AuthenticationRequiredHelpText": "İstekler için Kimlik doğrulamanın gereklilik ayarını değiştirin. Riskleri anlamadığınız sürece değiştirmeyin.",
@@ -830,33 +830,19 @@
"SmartReplace": "Akıllı Değiştir",
"DashOrSpaceDashDependingOnName": "İsme bağlı olarak Dash veya Space Dash",
"CatalogNumber": "katalog numarası",
"AptUpdater": "Güncellemeyi yüklemek için apt'ı kullanın",
"AptUpdater": "Güncellemeyi yüklemek için apt kullanın",
"BuiltIn": "Dahili",
"CurrentlyInstalled": "Şuan Kurulu",
"CurrentlyInstalled": "Şu anda Yüklü",
"ExternalUpdater": "{appName}, harici bir güncelleme mekanizması kullanacak şekilde yapılandırıldı",
"FailedToFetchUpdates": "Güncellemeler getirilemedi",
"PreviouslyInstalled": "Daha Önce Kurulmuş",
"Script": "Komut Dosyası",
"PreviouslyInstalled": "Önceden Yüklenmiş",
"Script": "Hazır Metin",
"UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor,",
"DockerUpdater": "Güncellemeyi almak için docker konteynerini güncelleyin",
"DockerUpdater": "güncellemeyi almak için docker konteynerini güncelleyin",
"Install": "Kur",
"InstallLatest": "En Sonu Yükle",
"InstallMajorVersionUpdate": "Güncellemeyi Kur",
"InstallMajorVersionUpdateMessage": "Bu güncelleştirme yeni bir ana sürüm yükleyecek ve sisteminizle uyumlu olmayabilir. Bu güncelleştirmeyi yüklemek istediğinizden emin misiniz?",
"InstallMajorVersionUpdateMessageLink": "Daha fazla bilgi için lütfen [{domain}]({url}) adresini kontrol edin.",
"OnLatestVersion": "{appName}'ın en son sürümü kurulu",
"AllExpandedCollapseAll": "Tümünü Daralt",
"StatusEndedContinuing": "Devam ediyor",
"AllExpandedExpandAll": "Tümünü Genişlet",
"MonitoringOptions": "Takip Etme Seçenekleri",
"AutoAdd": "Otomatik Ekle",
"MediaManagementSettingsSummary": "Adlandırma ve dosya yönetimi ayarları",
"SearchMonitored": "Takip Edilenleri Ara",
"ShowBanners": "Bannerları Göster",
"MetadataSource": "Meta Veri Kaynağı",
"FailedToFetchSettings": "Ayarlar alınamadı",
"Other": "Diğer",
"Continuing": "Devam Ediyor",
"Monitoring": "Takip Durumu",
"Book": "Kitap"
"OnLatestVersion": "{appName}'ın en son sürümü zaten kurulu"
}

View File

@@ -482,7 +482,7 @@
"AllExpandedExpandAll": "全部展开",
"Duration": "时长",
"Filters": "过滤器",
"AppDataLocationHealthCheckMessage": "防止在更新时删除 AppData,更新将无法进行",
"AppDataLocationHealthCheckMessage": "无法更新,以防止在更新时删除 AppData",
"FileWasDeletedByViaUI": "文件已通过 UI 删除",
"IndexerJackettAll": "使用 Jackett 不受支持的“全部”终点的索引器:{0}",
"SizeLimit": "尺寸限制",
@@ -1116,6 +1116,5 @@
"InstallMajorVersionUpdateMessage": "此更新将安装新的主要版本,这可能与您的系统不兼容。您确定要安装此更新吗?",
"InstallMajorVersionUpdateMessageLink": "请查看 [{domain}]({url}) 以获取更多信息。",
"PreviouslyInstalled": "上次安装",
"UpdateAppDirectlyLoadError": "无法直接更新{appName}",
"FailedToFetchSettings": "设置同步失败"
"UpdateAppDirectlyLoadError": "无法直接更新{appName}"
}

View File

@@ -1,5 +0,0 @@
{
"Analytics": "分析",
"About": "关于",
"Username": "用户名"
}

View File

@@ -110,7 +110,7 @@
"Ui": "UI",
"UnableToAddANewDownloadClientPleaseTryAgain": "無法加入新的條件,請重新嘗試。",
"UnableToAddANewRootFolderPleaseTryAgain": "無法加入新的自動標籤,請重新嘗試。",
"UnableToAddANewIndexerPleaseTryAgain": "無法加入新的索引器,請重新嘗試。",
"UnableToAddANewIndexerPleaseTryAgain": "無法加入新的條件,請重新嘗試。",
"Grab": "抓取",
"Hostname": "Hostname",
"Label": "標籤",
@@ -143,19 +143,5 @@
"AuthForm": "表單(登入頁面)",
"ApiKey": "API密鑰",
"AuthBasic": "基礎(瀏覽器彈出視窗)",
"Enabled": "啟用",
"BuiltIn": "內建",
"Reason": "季",
"AptUpdater": "使用apt安裝更新",
"BranchUpdate": "用於更新{appName}的分支",
"UnableToLoadIndexers": "無法載入索引器",
"UnselectAll": "取消全選",
"UISettings": "使用者介面設定",
"UILanguage": "使用者介面語言",
"Version": "版本",
"Uptime": "上線時間",
"UnableToLoadTags": "無法載入標籤",
"UnableToLoadUISettings": "無法載入 UI 設定",
"UpdateAppDirectlyLoadError": "無法直接更新 {appName}",
"UnableToLoadHistory": "無法載入歷史記錄"
"Enabled": "啟用"
}

View File

@@ -105,7 +105,7 @@ namespace NzbDrone.Host
License = new OpenApiLicense
{
Name = "GPL-3.0",
Url = new Uri("https://github.com/Readarr/Readarr/blob/develop/LICENSE.md")
Url = new Uri("https://github.com/Readarr/Readarr/blob/develop/LICENSE")
}
});

View File

@@ -7,7 +7,7 @@ using Readarr.Api.V1.Author;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class AuthorEditorFixture : IntegrationTest
{
private void GivenExistingAuthor()

View File

@@ -7,7 +7,7 @@ using NUnit.Framework;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class AuthorFixture : IntegrationTest
{
[Test]

View File

@@ -4,7 +4,7 @@ using NUnit.Framework;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class AuthorLookupFixture : IntegrationTest
{
[TestCase("Robert Harris", "Robert Harris")]

View File

@@ -6,7 +6,7 @@ using Readarr.Api.V1.Blocklist;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class BlocklistFixture : IntegrationTest
{
private AuthorResource _author;

View File

@@ -9,7 +9,7 @@ using Readarr.Api.V1.Books;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class CalendarFixture : IntegrationTest
{
public ClientBase<BookResource> Calendar;

View File

@@ -8,7 +8,7 @@ using Readarr.Api.V1.RootFolders;
namespace NzbDrone.Integration.Test.ApiTests.WantedTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class CutoffUnmetFixture : IntegrationTest
{
[SetUp]

View File

@@ -7,7 +7,7 @@ using Readarr.Api.V1.RootFolders;
namespace NzbDrone.Integration.Test.ApiTests.WantedTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
public class MissingFixture : IntegrationTest
{
[SetUp]

View File

@@ -44,7 +44,6 @@ namespace Readarr.Api.V1.Config
public string BackupFolder { get; set; }
public int BackupInterval { get; set; }
public int BackupRetention { get; set; }
public bool TrustCgnatIpAddresses { get; set; }
}
public static class HostConfigResourceMapper

View File

@@ -50,7 +50,7 @@ namespace Readarr.Api.V1.System.Backup
}
[RestDeleteById]
public object DeleteBackup(int id)
public void DeleteBackup(int id)
{
var backup = GetBackup(id);
@@ -67,8 +67,6 @@ namespace Readarr.Api.V1.System.Backup
}
_diskProvider.DeleteFile(path);
return new { };
}
[HttpPost("restore/{id:int}")]

View File

@@ -5,7 +5,7 @@
"description": "Readarr API docs",
"license": {
"name": "GPL-3.0",
"url": "https://github.com/Readarr/Readarr/blob/develop/LICENSE.md"
"url": "https://github.com/Readarr/Readarr/blob/develop/LICENSE"
},
"version": "1.0.0"
},
@@ -10706,9 +10706,6 @@
"backupRetention": {
"type": "integer",
"format": "int32"
},
"trustCgnatIpAddresses": {
"type": "boolean"
}
},
"additionalProperties": false

View File

@@ -27,13 +27,10 @@ namespace NzbDrone.Http.Authentication
if (_authenticationRequired == AuthenticationRequiredType.DisabledForLocalAddresses)
{
if (context.Resource is HttpContext httpContext &&
IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress))
IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress) &&
ipAddress.IsLocalAddress())
{
if (ipAddress.IsLocalAddress() ||
(_configService.TrustCgnatIpAddresses && ipAddress.IsCgnatIpAddress()))
{
context.Succeed(requirement);
}
context.Succeed(requirement);
}
}